Merged msacm and msacm32 dlls.
[wine] / programs / notepad / language.c
1 /*
2  *  Notepad
3  *
4  *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
5  *  Copyright 1998 Karl Backstr\94m <karl_b@geocities.com>
6  */
7
8 #include <stdio.h>
9 #include "windows.h"
10 #include "main.h"
11 #include "language.h"
12
13 #ifdef WINELIB
14 #include "options.h"
15 #endif
16
17 CHAR STRING_MENU_Xx[]      = "MENU_Xx";
18 CHAR STRING_PAGESETUP_Xx[] = "DIALOG_PAGESETUP_Xx";
19
20 void LANGUAGE_UpdateWindowCaption(void) {
21   /* Sets the caption of the main window according to Globals.szFileName:
22       Notepad - (untitled)      if no file is open
23       Notepad - [filename]      if a file is given
24   */
25   
26   CHAR szCaption[MAX_STRING_LEN];
27   CHAR szUntitled[MAX_STRING_LEN];
28
29   LoadString(Globals.hInstance, IDS_NOTEPAD, szCaption, sizeof(szCaption));
30   
31   if (strlen(Globals.szFileName)>0) {
32       lstrcat(szCaption, " - [");
33       lstrcat(szCaption, Globals.szFileName);
34       lstrcat(szCaption, "]");
35   }
36   else
37   {
38       LoadString(Globals.hInstance, IDS_UNTITLED, szUntitled, sizeof(szUntitled));
39       lstrcat(szCaption, " - ");
40       lstrcat(szCaption, szUntitled);
41   }
42     
43   SetWindowText(Globals.hMainWnd, szCaption);
44   
45 }
46
47
48
49 static BOOL LANGUAGE_LoadStringOther(UINT num, UINT ids, LPSTR str, UINT len)
50 {
51   BOOL bOk;
52
53   ids -= Globals.wStringTableOffset;
54   ids += num * 0x100;
55
56   bOk = LoadString(Globals.hInstance, ids, str, len);
57
58   return(bOk);
59 }
60
61
62
63 VOID LANGUAGE_SelectByName(LPCSTR lang)
64 {
65   INT i;
66   CHAR newlang[3];
67
68   for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
69     if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_ID, newlang, sizeof(newlang)) &&
70         !lstrcmp(lang, newlang))
71       {
72         LANGUAGE_SelectByNumber(i);
73         return;
74       }
75
76   /* Fallback */
77     for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
78     if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_ID, newlang, sizeof(newlang)))
79       {
80         LANGUAGE_SelectByNumber(i);
81         return;
82       }
83
84   MessageBox(Globals.hMainWnd, "No language found", "FATAL ERROR", MB_OK);
85   PostQuitMessage(1);
86 }
87
88 VOID LANGUAGE_SelectByNumber(UINT num)
89 {
90   INT    i;
91   CHAR   lang[3];
92   CHAR   item[MAX_STRING_LEN];
93   HMENU  hMainMenu;
94
95   /* Select string table */
96   Globals.wStringTableOffset = num * 0x100;
97
98   /* Get Language id */
99   LoadString(Globals.hInstance, IDS_LANGUAGE_ID, lang, sizeof(lang));
100   Globals.lpszLanguage = lang;
101
102   /* Set frame caption */
103   LANGUAGE_UpdateWindowCaption();
104   
105   /* Change Resource names */
106   lstrcpyn(STRING_MENU_Xx      + sizeof(STRING_MENU_Xx)      - 3, lang, 3);
107   lstrcpyn(STRING_PAGESETUP_Xx + sizeof(STRING_PAGESETUP_Xx) - 3, lang, 3);
108
109   /* Create menu */
110   hMainMenu = LoadMenu(Globals.hInstance, STRING_MENU_Xx);
111     Globals.hFileMenu     = GetSubMenu(hMainMenu, 0);
112     Globals.hEditMenu     = GetSubMenu(hMainMenu, 1);
113     Globals.hSearchMenu   = GetSubMenu(hMainMenu, 2);
114     Globals.hLanguageMenu = GetSubMenu(hMainMenu, 3);
115     Globals.hHelpMenu     = GetSubMenu(hMainMenu, 4);
116
117   /* Remove dummy item */
118   RemoveMenu(Globals.hLanguageMenu, 0, MF_BYPOSITION);
119   /* Add language items */
120   for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
121     if (LANGUAGE_LoadStringOther(i, IDS_LANGUAGE_MENU_ITEM, item, sizeof(item)))
122       AppendMenu(Globals.hLanguageMenu, MF_STRING | MF_BYCOMMAND,
123                  NP_FIRST_LANGUAGE + i, item);
124
125   SetMenu(Globals.hMainWnd, hMainMenu);
126
127   /* Destroy old menu */
128   if (Globals.hMainMenu) DestroyMenu(Globals.hMainMenu);
129   Globals.hMainMenu = hMainMenu;
130 }
131
132 VOID LANGUAGE_DefaultHandle(WPARAM wParam)
133 {
134   if ((wParam >=NP_FIRST_LANGUAGE) && (wParam<=NP_LAST_LANGUAGE))
135           LANGUAGE_SelectByNumber(wParam - NP_FIRST_LANGUAGE);
136      else printf("Unimplemented menu command %i\n", wParam);
137 }
138
139 VOID LANGUAGE_Init(VOID)
140 {
141   CHAR buffer[MAX_PATHNAME_LEN], *p;
142
143 #ifndef LCC
144     PROFILE_GetWineIniString("programs", "language", "language", 
145                              buffer, sizeof(buffer));
146 #endif
147   Globals.lpszLanguage = p = LocalLock(LocalAlloc(LMEM_FIXED, lstrlen(buffer)+1));
148   strcpy(p, buffer);
149   /* hmemcpy(p, buffer, 1 + lstrlen(buffer)); */
150 }
151