/*
 * Clock (clock.rc)
 *
 * Copyright 1998 Marcel Baur <mbaur@g26.ethz.ch>
 */


/* Main Menu */

CONCAT(MENU_, LANGUAGE_ID) MENU
{
 POPUP MENU_PROPERTIES {
   MENUITEM MENU_ANALOG,                CL_ANALOG
   MENUITEM MENU_DIGITAL,               CL_DIGITAL
   MENUITEM SEPARATOR
   MENUITEM MENU_FONT,                  CL_FONT
   MENUITEM SEPARATOR
   MENUITEM MENU_WITHOUT_TITLE,         CL_WITHOUT_TITLE
   MENUITEM SEPARATOR
   MENUITEM MENU_SECONDS,               CL_SECONDS
   MENUITEM MENU_DATE,                  CL_DATE
 }

 POPUP MENU_LANGUAGE {
   /* Dummy item, will be removed */
   MENUITEM SEPARATOR
 }
   
 POPUP MENU_INFO {
   MENUITEM MENU_INFO_LICENSE,       CL_INFO_LICENSE
   MENUITEM MENU_INFO_NO_WARRANTY,   CL_INFO_NO_WARRANTY
   MENUITEM MENU_INFO_ABOUT_WINE,    CL_INFO_ABOUT_WINE
 }
 
}

/* Strings */

#define STRING_LANGUAGE_ID        STRINGIFY(LANGUAGE_ID)
#define STRING_LANGUAGE_MENU_ITEM LANGUAGE_MENU_ITEM
#define STRING_MENU_ON_TOP        MENU_ON_TOP


STRINGTABLE
{
ADDSTRING(LANGUAGE_ID)
ADDSTRING(LANGUAGE_MENU_ITEM)
ADDSTRING(CLOCK)
ADDSTRING(MENU_ON_TOP)
}


/* Undefine all language-specific strings */

#undef LANGUAGE_ID
#undef LANGUAGE_NUMBER

#undef MENU_ON_TOP

#undef MENU_PROPERTIES
#undef MENU_ANALOG
#undef MENU_DIGITAL
#undef MENU_FONT
#undef MENU_WITHOUT_TITLE

#undef MENU_SECONDS
#undef MENU_DATE

#undef MENU_LANGUAGE
#undef LANGUAGE_MENU_ITEM

#undef MENU_INFO
#undef MENU_INFO_LICENSE
#undef MENU_INFO_NO_WARRANTY
#undef MENU_INFO_ABOUT_WINE

#undef STRING_LANGUAGE_ID
#undef STRING_LANGUAGE_MENU_ITEM
#undef STRING_MENU_ON_TOP
#undef STRING_CLOCK

