Develop and Download Open Source Software

Browse Subversion Repository

Contents of /branches/4-stable/TTXKanjiMenu/ttxkanjimenu.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9049 - (show annotations) (download) (as text)
Wed Dec 16 12:24:26 2020 UTC (3 years, 3 months ago) by nmaya
File MIME type: text/x-csrc
File size: 18946 byte(s)
ソースファイルの著作権表記の "最後の発行の年" を削除

ticket #40996
1 /*
2 * TTX KanjiMenu Plugin
3 * Copyright (C) 2007 Sunao HARA (naoh@nagoya-u.jp)
4 * (C) 2007- TeraTerm Project
5 */
6
7 //// ORIGINAL SOURCE CODE: ttxtest.c
8
9 /* Tera Term extension mechanism
10 Robert O'Callahan (roc+tt@cs.cmu.edu)
11
12 Tera Term by Takashi Teranishi (teranishi@rikaxp.riken.go.jp)
13 */
14
15 #include "teraterm.h"
16 #include "tttypes.h"
17 #include "ttplugin.h"
18 #include "tt_res.h"
19 #include "i18n.h"
20
21 #include <stdlib.h>
22 #include <stdio.h>
23 #include <string.h>
24
25 #include "compat_w95.h"
26
27 #define IniSection "TTXKanjiMenu"
28 #define ORDER 5000
29
30 #define UpdateRecvMenu(val) \
31 CheckMenuRadioItem(pvar->hmEncode, \
32 ID_MI_KANJIRECV + IdSJIS, \
33 ID_MI_KANJIRECV + IdUTF8m, \
34 ID_MI_KANJIRECV + (val), \
35 MF_BYCOMMAND)
36 #define UpdateSendMenu(val) \
37 CheckMenuRadioItem(pvar->hmEncode, \
38 ID_MI_KANJISEND + IdSJIS, \
39 ID_MI_KANJISEND + IdUTF8, \
40 ID_MI_KANJISEND + (val), \
41 MF_BYCOMMAND)
42
43 static HANDLE hInst; /* Instance handle of TTX*.DLL */
44
45 typedef struct {
46 PTTSet ts;
47 PComVar cv;
48 HMENU hmEncode;
49 PSetupTerminal origSetupTermDlg;
50 PReadIniFile origReadIniFile;
51 PWriteIniFile origWriteIniFile;
52 BOOL UseOneSetting;
53 BOOL NeedResetCharSet;
54 } TInstVar;
55
56 static TInstVar *pvar;
57
58 /* WIN32 allows multiple instances of a DLL */
59 static TInstVar InstVar;
60
61 /*
62 * This function is called when Tera Term starts up.
63 */
64 static void PASCAL TTXInit(PTTSet ts, PComVar cv) {
65 pvar->ts = ts;
66 pvar->cv = cv;
67 pvar->origReadIniFile = NULL;
68 pvar->origWriteIniFile = NULL;
69 pvar->UseOneSetting = TRUE;
70 pvar->NeedResetCharSet = FALSE;
71 }
72
73 static BOOL PASCAL TTXKanjiMenuSetupTerminal(HWND parent, PTTSet ts) {
74 WORD orgRecvCode, orgSendCode;
75 BOOL ret;
76
77 orgRecvCode = pvar->ts->KanjiCode;
78 orgSendCode = pvar->ts->KanjiCodeSend;
79
80 ret = pvar->origSetupTermDlg(parent, ts);
81
82 if (ret) {
83 if (orgRecvCode == pvar->ts->KanjiCode && orgSendCode != pvar->ts->KanjiCodeSend) {
84 // ���M�R�[�h�������X�������������M�R�[�h����������
85 // �������A���M:UTF-8 && ���M:UTF-8m �������������O
86 if (pvar->ts->KanjiCodeSend != IdUTF8 || pvar->ts->KanjiCode != IdUTF8m) {
87 pvar->ts->KanjiCode = pvar->ts->KanjiCodeSend;
88 }
89 }
90 else {
91 // �������O�����M�R�[�h����������
92 if (pvar->ts->KanjiCode == IdUTF8m) {
93 pvar->ts->KanjiCodeSend = IdUTF8;
94 }
95 else {
96 pvar->ts->KanjiCodeSend = pvar->ts->KanjiCode;
97 }
98 }
99 }
100
101 return ret;
102 }
103
104 static BOOL PASCAL ResetCharSet(HWND parent, PTTSet ts) {
105 pvar->NeedResetCharSet = FALSE;
106 return TRUE;
107 }
108
109 static void PASCAL TTXGetUIHooks(TTXUIHooks *hooks) {
110 if (pvar->NeedResetCharSet) {
111 *hooks->SetupTerminal = ResetCharSet;
112 }
113 else if (pvar->UseOneSetting && (pvar->ts->Language == IdJapanese || pvar->ts->Language == IdKorean)) {
114 pvar->origSetupTermDlg = *hooks->SetupTerminal;
115 *hooks->SetupTerminal = TTXKanjiMenuSetupTerminal;
116 }
117 }
118
119 static void PASCAL TTXKanjiMenuReadIniFile(PCHAR fn, PTTSet ts) {
120 char buff[20];
121
122 /* Call original ReadIniFile */
123 pvar->origReadIniFile(fn, ts);
124
125 GetPrivateProfileString(IniSection, "UseOneSetting", "on", buff, sizeof(buff), fn);
126 if (_stricmp(buff, "off") == 0) {
127 pvar->UseOneSetting = FALSE;
128 }
129 else {
130 pvar->UseOneSetting = TRUE;
131 if (pvar->ts->Language == IdJapanese) {
132 if (pvar->ts->KanjiCode == IdUTF8m) {
133 pvar->ts->KanjiCodeSend = IdUTF8;
134 }
135 else {
136 pvar->ts->KanjiCodeSend = pvar->ts->KanjiCode;
137 }
138 }
139 else if (pvar->ts->Language == IdKorean) {
140 pvar->ts->KanjiCodeSend = pvar->ts->KanjiCode;
141 }
142 }
143 return;
144 }
145
146 static void PASCAL TTXKanjiMenuWriteIniFile(PCHAR fn, PTTSet ts) {
147 /* Call original WriteIniFile */
148 pvar->origWriteIniFile(fn, ts);
149
150 WritePrivateProfileString(IniSection, "UseOneSetting", pvar->UseOneSetting?"on":"off", fn);
151
152 return;
153 }
154
155 static void PASCAL TTXGetSetupHooks(TTXSetupHooks *hooks) {
156 pvar->origReadIniFile = *hooks->ReadIniFile;
157 *hooks->ReadIniFile = TTXKanjiMenuReadIniFile;
158 pvar->origWriteIniFile = *hooks->WriteIniFile;
159 *hooks->WriteIniFile = TTXKanjiMenuWriteIniFile;
160 }
161
162 // #define ID_MI_KANJIMASK 0xFF00
163 #define ID_MI_KANJIRECV 54009
164 #define ID_MI_KANJISEND 54109
165 #define ID_MI_USEONESETTING 54200
166
167 static void PASCAL InsertSendKcodeMenu(HMENU menu) {
168 UINT flag = MF_BYPOSITION | MF_STRING | MF_CHECKED;
169
170 if (pvar->ts->Language == IdJapanese) {
171 InsertMenu(menu, 5, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
172
173 GetI18nStr(IniSection, "MENU_SEND_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
174 "Send: S&hift_JIS", pvar->ts->UILanguageFile);
175 InsertMenu(menu, 6, flag, ID_MI_KANJISEND+IdSJIS, pvar->ts->UIMsg);
176 GetI18nStr(IniSection, "MENU_SEND_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
177 "Send: EU&C-JP", pvar->ts->UILanguageFile);
178 InsertMenu(menu, 7, flag, ID_MI_KANJISEND+IdEUC, pvar->ts->UIMsg);
179 GetI18nStr(IniSection, "MENU_SEND_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
180 "Send: J&IS", pvar->ts->UILanguageFile);
181 InsertMenu(menu, 8, flag, ID_MI_KANJISEND+IdJIS, pvar->ts->UIMsg);
182 GetI18nStr(IniSection, "MENU_SEND_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
183 "Send: U&TF-8", pvar->ts->UILanguageFile);
184 InsertMenu(menu, 9, flag, ID_MI_KANJISEND+IdUTF8, pvar->ts->UIMsg);
185 }
186 else { // IdKorean
187 InsertMenu(menu, 3, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
188
189 GetI18nStr(IniSection, "MENU_SEND_KS5601", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
190 "Send: K&S5601", pvar->ts->UILanguageFile);
191 InsertMenu(menu, 4, flag, ID_MI_KANJISEND+IdSJIS, pvar->ts->UIMsg);
192
193 GetI18nStr(IniSection, "MENU_SEND_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
194 "Send: U&TF-8", pvar->ts->UILanguageFile);
195 InsertMenu(menu, 5, flag, ID_MI_KANJISEND+IdUTF8, pvar->ts->UIMsg);
196 }
197 }
198
199 static void PASCAL DeleteSendKcodeMenu(HMENU menu) {
200 if (pvar->ts->Language == IdJapanese) {
201 DeleteMenu(menu, 5, MF_BYPOSITION);
202 DeleteMenu(menu, 5, MF_BYPOSITION);
203 DeleteMenu(menu, 5, MF_BYPOSITION);
204 DeleteMenu(menu, 5, MF_BYPOSITION);
205 DeleteMenu(menu, 5, MF_BYPOSITION);
206 }
207 else { // IdKorean
208 DeleteMenu(menu, 3, MF_BYPOSITION);
209 DeleteMenu(menu, 3, MF_BYPOSITION);
210 DeleteMenu(menu, 3, MF_BYPOSITION);
211 }
212 }
213
214 static void PASCAL UpdateRecvMenuCaption(HMENU menu, BOOL UseOneSetting) {
215 if (UseOneSetting) {
216 if (pvar->ts->Language == IdJapanese) {
217 GetI18nStr(IniSection, "MENU_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
218 "Recv/Send: &Shift_JIS", pvar->ts->UILanguageFile);
219 ModifyMenu(menu, ID_MI_KANJIRECV+IdSJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdSJIS,
220 pvar->ts->UIMsg);
221 GetI18nStr(IniSection, "MENU_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
222 "Recv/Send: &EUC-JP", pvar->ts->UILanguageFile);
223 ModifyMenu(menu, ID_MI_KANJIRECV+IdEUC, MF_BYCOMMAND, ID_MI_KANJIRECV+IdEUC,
224 pvar->ts->UIMsg);
225 GetI18nStr(IniSection, "MENU_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
226 "Recv/Send: &JIS", pvar->ts->UILanguageFile);
227 ModifyMenu(menu, ID_MI_KANJIRECV+IdJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdJIS,
228 pvar->ts->UIMsg);
229 GetI18nStr(IniSection, "MENU_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
230 "Recv/Send: &UTF-8", pvar->ts->UILanguageFile);
231 ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8,
232 pvar->ts->UIMsg);
233 GetI18nStr(IniSection, "MENU_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
234 "Recv: UTF-8&m/Send: UTF-8", pvar->ts->UILanguageFile);
235 ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8m, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8m,
236 pvar->ts->UIMsg);
237 }
238 else { // IdKorean
239 GetI18nStr(IniSection, "MENU_KS5601", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
240 "Recv/Send: &KS5601", pvar->ts->UILanguageFile);
241 ModifyMenu(menu, ID_MI_KANJIRECV+IdSJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdSJIS,
242 pvar->ts->UIMsg);
243 GetI18nStr(IniSection, "MENU_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
244 "Recv/Send: &UTF-8", pvar->ts->UILanguageFile);
245 ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8,
246 pvar->ts->UIMsg);
247 GetI18nStr(IniSection, "MENU_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
248 "Recv: UTF-8&m/Send: UTF-8", pvar->ts->UILanguageFile);
249 ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8m, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8m,
250 pvar->ts->UIMsg);
251 }
252 }
253 else {
254 if (pvar->ts->Language == IdJapanese) {
255 GetI18nStr(IniSection, "MENU_RECV_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
256 "Recv: &Shift_JIS", pvar->ts->UILanguageFile);
257 ModifyMenu(menu, ID_MI_KANJIRECV+IdSJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdSJIS,
258 pvar->ts->UIMsg);
259 GetI18nStr(IniSection, "MENU_RECV_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
260 "Recv: &EUC-JP", pvar->ts->UILanguageFile);
261 ModifyMenu(menu, ID_MI_KANJIRECV+IdEUC, MF_BYCOMMAND, ID_MI_KANJIRECV+IdEUC,
262 pvar->ts->UIMsg);
263 GetI18nStr(IniSection, "MENU_RECV_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
264 "Recv: &JIS", pvar->ts->UILanguageFile);
265 ModifyMenu(menu, ID_MI_KANJIRECV+IdJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdJIS,
266 pvar->ts->UIMsg);
267 GetI18nStr(IniSection, "MENU_RECV_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
268 "Recv: &UTF-8", pvar->ts->UILanguageFile);
269 ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8,
270 pvar->ts->UIMsg);
271 GetI18nStr(IniSection, "MENU_RECV_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
272 "Recv: UTF-8&m", pvar->ts->UILanguageFile);
273 ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8m, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8m,
274 pvar->ts->UIMsg);
275 }
276 else { // IdKorean
277 GetI18nStr(IniSection, "MENU_RECV_KS5601", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
278 "Recv: &KS5601", pvar->ts->UILanguageFile);
279 ModifyMenu(menu, ID_MI_KANJIRECV+IdSJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdSJIS,
280 pvar->ts->UIMsg);
281 GetI18nStr(IniSection, "MENU_RECV_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
282 "Recv: &UTF-8", pvar->ts->UILanguageFile);
283 ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8,
284 pvar->ts->UIMsg);
285 GetI18nStr(IniSection, "MENU_RECV_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
286 "Recv: UTF-8&m", pvar->ts->UILanguageFile);
287 ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8m, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8m,
288 pvar->ts->UIMsg);
289 }
290 }
291 }
292
293 /*
294 * This function is called when Tera Term creates a new menu.
295 */
296 static void PASCAL TTXModifyMenu(HMENU menu) {
297 UINT flag = MF_ENABLED;
298
299 // ���������{���������������j���[�����������������������B (2007.7.14 maya)
300 if (pvar->ts->Language != IdJapanese && pvar->ts->Language != IdKorean) {
301 return;
302 }
303
304 {
305 MENUITEMINFO mi;
306
307 pvar->hmEncode = CreateMenu();
308
309 // Windows 95 �����j���[���\���������������o�[�W�����`�F�b�N�������� (2009.2.18 maya)
310 if (IsWindows2000OrLater()) {
311 memset(&mi, 0, sizeof(MENUITEMINFO));
312 mi.cbSize = sizeof(MENUITEMINFO);
313 }
314 else {
315 memset(&mi, 0, sizeof(MENUITEMINFO)-sizeof(HBITMAP));
316 mi.cbSize = sizeof(MENUITEMINFO)-sizeof(HBITMAP);
317 }
318 mi.fMask = MIIM_TYPE | MIIM_SUBMENU;
319 mi.fType = MFT_STRING;
320 mi.hSubMenu = pvar->hmEncode;
321 if (pvar->ts->Language == IdJapanese) {
322 GetI18nStr(IniSection, "MENU_KANJI", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
323 "&KanjiCode", pvar->ts->UILanguageFile);
324 }
325 else { // IdKorean
326 GetI18nStr(IniSection, "MENU_KANJI_K", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
327 "Coding(&K)", pvar->ts->UILanguageFile);
328 }
329 mi.dwTypeData = pvar->ts->UIMsg;
330 InsertMenuItem(menu, ID_HELPMENU, FALSE, &mi);
331
332 flag = MF_STRING|MF_CHECKED;
333 if (pvar->ts->Language == IdJapanese) {
334 GetI18nStr(IniSection, "MENU_RECV_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
335 "Recv: &Shift_JIS", pvar->ts->UILanguageFile);
336 AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdSJIS, pvar->ts->UIMsg);
337 GetI18nStr(IniSection, "MENU_RECV_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
338 "Recv: &EUC-JP", pvar->ts->UILanguageFile);
339 AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdEUC, pvar->ts->UIMsg);
340 GetI18nStr(IniSection, "MENU_RECV_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
341 "Recv: &JIS", pvar->ts->UILanguageFile);
342 AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdJIS, pvar->ts->UIMsg);
343 GetI18nStr(IniSection, "MENU_RECV_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
344 "Recv: &UTF-8", pvar->ts->UILanguageFile);
345 AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdUTF8, pvar->ts->UIMsg);
346 GetI18nStr(IniSection, "MENU_RECV_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
347 "Recv: UTF-8&m", pvar->ts->UILanguageFile);
348 AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdUTF8m, pvar->ts->UIMsg);
349 }
350 else { // IdKorean
351 GetI18nStr(IniSection, "MENU_RECV_KS5601", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
352 "Recv: &KS5601", pvar->ts->UILanguageFile);
353 AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdSJIS, pvar->ts->UIMsg);
354 GetI18nStr(IniSection, "MENU_RECV_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
355 "Recv: &UTF-8", pvar->ts->UILanguageFile);
356 AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdUTF8, pvar->ts->UIMsg);
357 GetI18nStr(IniSection, "MENU_RECV_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
358 "Recv: UTF-8&m", pvar->ts->UILanguageFile);
359 AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdUTF8m, pvar->ts->UIMsg);
360 }
361
362 if (!pvar->UseOneSetting) {
363 InsertSendKcodeMenu(pvar->hmEncode);
364 }
365 else {
366 UpdateRecvMenuCaption(pvar->hmEncode, pvar->UseOneSetting);
367 }
368
369 AppendMenu(pvar->hmEncode, MF_SEPARATOR, 0, NULL);
370 GetI18nStr(IniSection, "MENU_USE_ONE_SETTING", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg),
371 "Use &one setting", pvar->ts->UILanguageFile);
372 AppendMenu(pvar->hmEncode, flag, ID_MI_USEONESETTING , pvar->ts->UIMsg);
373
374 UpdateRecvMenu(pvar->ts->KanjiCode);
375 if (!pvar->UseOneSetting) {
376 UpdateSendMenu(pvar->ts->KanjiCodeSend);
377 }
378
379 CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | (pvar->UseOneSetting)?MF_CHECKED:0);
380 }
381 }
382
383
384 /*
385 * This function is called when Tera Term pops up a submenu menu.
386 */
387 static void PASCAL TTXModifyPopupMenu(HMENU menu) {
388 // ���j���[�������o���������A���V���������X�V�����B(2007.5.25 yutaka)
389 UpdateRecvMenu(pvar->ts->KanjiCode);
390 if (!pvar->UseOneSetting) {
391 UpdateSendMenu(pvar->ts->KanjiCodeSend);
392 }
393 CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | (pvar->UseOneSetting)?MF_CHECKED:0);
394 }
395
396
397 /*
398 * This function is called when Tera Term receives a command message.
399 */
400 static int PASCAL TTXProcessCommand(HWND hWin, WORD cmd) {
401 WORD val;
402
403 if ((cmd > ID_MI_KANJIRECV) && (cmd <= ID_MI_KANJIRECV+IdUTF8m)) {
404 // �����`�F�b�N������
405 // TTProxy���o�[�W�����_�C�A���O���J�����A���Y�n���h�����������A�������������������C���B
406 // (2007.7.13 yutaka)
407 val = cmd - ID_MI_KANJIRECV;
408 pvar->cv->KanjiCodeEcho = pvar->ts->KanjiCode = val;
409 if (pvar->UseOneSetting) {
410 if (val == IdUTF8m) {
411 val = IdUTF8;
412 }
413 pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val;
414 }
415 pvar->NeedResetCharSet = TRUE;
416 SendMessage(hWin, WM_COMMAND, MAKELONG(ID_SETUP_TERMINAL, 0), 0);
417 return UpdateRecvMenu(pvar->ts->KanjiCode)?1:0;
418 }
419 else if ((cmd > ID_MI_KANJISEND) && (cmd <= ID_MI_KANJISEND+IdUTF8)) {
420 val = cmd - ID_MI_KANJISEND;
421 pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val;
422 if (pvar->UseOneSetting) {
423 pvar->cv->KanjiCodeEcho = pvar->ts->KanjiCode = val;
424 pvar->NeedResetCharSet = TRUE;
425 SendMessage(hWin, WM_COMMAND, MAKELONG(ID_SETUP_TERMINAL, 0), 0);
426 return UpdateRecvMenu(pvar->ts->KanjiCode)?1:0;
427 }
428 else {
429 pvar->NeedResetCharSet = TRUE;
430 SendMessage(hWin, WM_COMMAND, MAKELONG(ID_SETUP_TERMINAL, 0), 0);
431 return UpdateSendMenu(pvar->ts->KanjiCodeSend)?1:0;
432 }
433 }
434 else if (cmd == ID_MI_USEONESETTING) {
435 if (pvar->UseOneSetting) {
436 pvar->UseOneSetting = FALSE;
437 InsertSendKcodeMenu(pvar->hmEncode);
438 CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND);
439 }
440 else {
441 pvar->UseOneSetting = TRUE;
442
443 if (pvar->ts->KanjiCode == IdUTF8m) {
444 val = IdUTF8;
445 }
446 else {
447 val = pvar->ts->KanjiCode;
448 }
449 pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val;
450
451 DeleteSendKcodeMenu(pvar->hmEncode);
452 CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | MF_CHECKED);
453 }
454 UpdateRecvMenuCaption(pvar->hmEncode, pvar->UseOneSetting);
455 return 1;
456 }
457
458 return 0;
459 }
460
461
462 /*
463 * This record contains all the information that the extension forwards to the
464 * main Tera Term code. It mostly consists of pointers to the above functions.
465 * Any of the function pointers can be replaced with NULL, in which case
466 * Tera Term will just ignore that function and assume default behaviour, which
467 * means "do nothing".
468 */
469 static TTXExports Exports = {
470 /* This must contain the size of the structure. See below for its usage. */
471 sizeof(TTXExports),
472
473 /* This is the load order number of this DLL. */
474 ORDER,
475
476 /* Now we just list the functions that we've implemented. */
477 TTXInit,
478 TTXGetUIHooks,
479 TTXGetSetupHooks,
480 NULL, // TTXOpenTCP,
481 NULL, // TTXCloseTCP,
482 NULL, // TTXSetWinSize,
483 TTXModifyMenu,
484 TTXModifyPopupMenu,
485 TTXProcessCommand,
486 NULL, // TTXEnd,
487 NULL // TTXSetCommandLine
488 };
489
490 BOOL __declspec(dllexport) PASCAL TTXBind(WORD Version, TTXExports *exports) {
491 int size = sizeof(Exports) - sizeof(exports->size);
492 /* do version checking if necessary */
493 /* if (Version!=TTVERSION) return FALSE; */
494
495 if (size > exports->size) {
496 size = exports->size;
497 }
498 memcpy((char *)exports + sizeof(exports->size),
499 (char *)&Exports + sizeof(exports->size),
500 size);
501 return TRUE;
502 }
503
504 BOOL WINAPI DllMain(HANDLE hInstance,
505 ULONG ul_reason_for_call,
506 LPVOID lpReserved)
507 {
508 switch( ul_reason_for_call ) {
509 case DLL_THREAD_ATTACH:
510 /* do thread initialization */
511 break;
512 case DLL_THREAD_DETACH:
513 /* do thread cleanup */
514 break;
515 case DLL_PROCESS_ATTACH:
516 /* do process initialization */
517 DoCover_IsDebuggerPresent();
518 hInst = hInstance;
519 pvar = &InstVar;
520 break;
521 case DLL_PROCESS_DETACH:
522 /* do process cleanup */
523 break;
524 }
525 return TRUE;
526 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26