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

#include "windows.h"
#include "main.h"
 
#define CONCAT(a, b) CONCAT1(a, b)
#define CONCAT1(a, b) a##b

/* 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 ADDSTRING(str) ADDSTRING1(LANGUAGE_NUMBER, IDS_ ## str) STRING_ ## str
#define ADDSTRING1(langnum, ids) ADDSTRING2(langnum, ids)
#define ADDSTRING2(langnum, ids) 0x ## langnum ## ids

#define STRINGIFY(str) STRINGIFY1(str)
#define STRINGIFY1(str) #str

#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)
}
