1 |
/* |
/* |
2 |
* TTX KanjiMenu Plugin |
* TTX KanjiMenu Plugin |
3 |
* Copyright (C) 2007 Sunao HARA (naoh@nagoya-u.jp) |
* Copyright (C) 2007 Sunao HARA (naoh@nagoya-u.jp) |
4 |
* Copyright (C) 2007-2009 TeraTerm Project. |
* Copyright (C) 2007-2009 TeraTerm Project. |
5 |
*/ |
*/ |
6 |
|
|
7 |
//// ORIGINAL SOURCE CODE: ttxtest.c |
//// ORIGINAL SOURCE CODE: ttxtest.c |
8 |
|
|
9 |
/* Tera Term extension mechanism |
/* Tera Term extension mechanism |
10 |
Robert O'Callahan (roc+tt@cs.cmu.edu) |
Robert O'Callahan (roc+tt@cs.cmu.edu) |
11 |
|
|
12 |
Tera Term by Takashi Teranishi (teranishi@rikaxp.riken.go.jp) |
Tera Term by Takashi Teranishi (teranishi@rikaxp.riken.go.jp) |
13 |
*/ |
*/ |
14 |
|
|
15 |
#include "teraterm.h" |
#include "teraterm.h" |
16 |
#include "tttypes.h" |
#include "tttypes.h" |
17 |
#include "ttplugin.h" |
#include "ttplugin.h" |
18 |
#include "i18n.h" |
#include "i18n.h" |
19 |
|
|
20 |
#include <stdlib.h> |
#include <stdlib.h> |
21 |
#include <stdio.h> |
#include <stdio.h> |
22 |
#include <string.h> |
#include <string.h> |
23 |
|
|
24 |
#include "compat_w95.h" |
#include "compat_w95.h" |
25 |
|
|
26 |
#define IniSection "TTXKanjiMenu" |
#define IniSection "TTXKanjiMenu" |
27 |
#define ORDER 5000 |
#define ORDER 5000 |
28 |
|
|
29 |
#define UpdateRecvMenu(val) \ |
#define UpdateRecvMenu(val) \ |
30 |
CheckMenuRadioItem(pvar->hmEncode, \ |
CheckMenuRadioItem(pvar->hmEncode, \ |
31 |
ID_MI_KANJIRECV + IdSJIS, \ |
ID_MI_KANJIRECV + IdSJIS, \ |
32 |
ID_MI_KANJIRECV + IdUTF8m, \ |
ID_MI_KANJIRECV + IdUTF8m, \ |
33 |
ID_MI_KANJIRECV + (val), \ |
ID_MI_KANJIRECV + (val), \ |
34 |
MF_BYCOMMAND) |
MF_BYCOMMAND) |
35 |
#define UpdateSendMenu(val) \ |
#define UpdateSendMenu(val) \ |
36 |
CheckMenuRadioItem(pvar->hmEncode, \ |
CheckMenuRadioItem(pvar->hmEncode, \ |
37 |
ID_MI_KANJISEND + IdSJIS, \ |
ID_MI_KANJISEND + IdSJIS, \ |
38 |
ID_MI_KANJISEND + IdUTF8, \ |
ID_MI_KANJISEND + IdUTF8, \ |
39 |
ID_MI_KANJISEND + (val), \ |
ID_MI_KANJISEND + (val), \ |
40 |
MF_BYCOMMAND) |
MF_BYCOMMAND) |
41 |
|
|
42 |
static HANDLE hInst; /* Instance handle of TTX*.DLL */ |
static HANDLE hInst; /* Instance handle of TTX*.DLL */ |
43 |
|
|
44 |
typedef struct { |
typedef struct { |
45 |
PTTSet ts; |
PTTSet ts; |
46 |
PComVar cv; |
PComVar cv; |
47 |
HMENU hmEncode; |
HMENU hmEncode; |
48 |
PSetupTerminal origSetupTermDlg; |
PSetupTerminal origSetupTermDlg; |
49 |
PReadIniFile origReadIniFile; |
PReadIniFile origReadIniFile; |
50 |
PWriteIniFile origWriteIniFile; |
PWriteIniFile origWriteIniFile; |
51 |
BOOL UseOneSetting; |
BOOL UseOneSetting; |
52 |
} TInstVar; |
} TInstVar; |
53 |
|
|
54 |
static TInstVar FAR * pvar; |
static TInstVar FAR * pvar; |
55 |
|
|
56 |
/* WIN32 allows multiple instances of a DLL */ |
/* WIN32 allows multiple instances of a DLL */ |
57 |
static TInstVar InstVar; |
static TInstVar InstVar; |
58 |
|
|
59 |
/* |
/* |
60 |
* This function is called when Tera Term starts up. |
* This function is called when Tera Term starts up. |
61 |
*/ |
*/ |
62 |
static void PASCAL FAR TTXInit(PTTSet ts, PComVar cv) { |
static void PASCAL FAR TTXInit(PTTSet ts, PComVar cv) { |
63 |
pvar->ts = ts; |
pvar->ts = ts; |
64 |
pvar->cv = cv; |
pvar->cv = cv; |
65 |
pvar->origReadIniFile = NULL; |
pvar->origReadIniFile = NULL; |
66 |
pvar->origWriteIniFile = NULL; |
pvar->origWriteIniFile = NULL; |
67 |
pvar->UseOneSetting = FALSE; |
pvar->UseOneSetting = FALSE; |
68 |
} |
} |
69 |
|
|
70 |
static BOOL FAR PASCAL TTXKanjiMenuSetupTerminal(HWND parent, PTTSet ts) { |
static BOOL FAR PASCAL TTXKanjiMenuSetupTerminal(HWND parent, PTTSet ts) { |
71 |
WORD orgRecvCode, orgSendCode; |
WORD orgRecvCode, orgSendCode; |
72 |
BOOL ret; |
BOOL ret; |
73 |
|
|
74 |
orgRecvCode = pvar->ts->KanjiCode; |
orgRecvCode = pvar->ts->KanjiCode; |
75 |
orgSendCode = pvar->ts->KanjiCodeSend; |
orgSendCode = pvar->ts->KanjiCodeSend; |
76 |
|
|
77 |
ret = pvar->origSetupTermDlg(parent, ts); |
ret = pvar->origSetupTermDlg(parent, ts); |
78 |
|
|
79 |
if (ret) { |
if (ret) { |
80 |
if (orgRecvCode == pvar->ts->KanjiCode && orgSendCode != pvar->ts->KanjiCodeSend) { |
if (orgRecvCode == pvar->ts->KanjiCode && orgSendCode != pvar->ts->KanjiCodeSend) { |
81 |
// 送信コードのみ変更した場合は送信コードに合わせる |
// 送信コードのみ変更した場合は送信コードに合わせる |
82 |
// ただし、送信:UTF-8 && 受信: UTF-8mの場合は対象外 |
// ただし、送信:UTF-8 && 受信: UTF-8mの場合は対象外 |
83 |
if (pvar->ts->KanjiCodeSend != IdUTF8 || pvar->ts->KanjiCode != IdUTF8m) { |
if (pvar->ts->KanjiCodeSend != IdUTF8 || pvar->ts->KanjiCode != IdUTF8m) { |
84 |
pvar->ts->KanjiCode = pvar->ts->KanjiCodeSend; |
pvar->ts->KanjiCode = pvar->ts->KanjiCodeSend; |
85 |
} |
} |
86 |
} |
} |
87 |
else { |
else { |
88 |
// それ以外は受信コードに合わせる |
// それ以外は受信コードに合わせる |
89 |
if (pvar->ts->KanjiCode == IdUTF8m) { |
if (pvar->ts->KanjiCode == IdUTF8m) { |
90 |
pvar->ts->KanjiCodeSend = IdUTF8; |
pvar->ts->KanjiCodeSend = IdUTF8; |
91 |
} |
} |
92 |
else { |
else { |
93 |
pvar->ts->KanjiCodeSend = pvar->ts->KanjiCode; |
pvar->ts->KanjiCodeSend = pvar->ts->KanjiCode; |
94 |
} |
} |
95 |
} |
} |
96 |
} |
} |
97 |
|
|
98 |
return ret; |
return ret; |
99 |
} |
} |
100 |
|
|
101 |
static void PASCAL FAR TTXGetUIHooks(TTXUIHooks FAR * hooks) { |
static void PASCAL FAR TTXGetUIHooks(TTXUIHooks FAR * hooks) { |
102 |
if (pvar->UseOneSetting) { |
if (pvar->UseOneSetting) { |
103 |
pvar->origSetupTermDlg = *hooks->SetupTerminal; |
pvar->origSetupTermDlg = *hooks->SetupTerminal; |
104 |
*hooks->SetupTerminal = TTXKanjiMenuSetupTerminal; |
*hooks->SetupTerminal = TTXKanjiMenuSetupTerminal; |
105 |
} |
} |
106 |
} |
} |
107 |
|
|
108 |
static void PASCAL FAR TTXKanjiMenuReadIniFile(PCHAR fn, PTTSet ts) { |
static void PASCAL FAR TTXKanjiMenuReadIniFile(PCHAR fn, PTTSet ts) { |
109 |
char buff[20]; |
char buff[20]; |
110 |
|
|
111 |
/* Call original ReadIniFile */ |
/* Call original ReadIniFile */ |
112 |
pvar->origReadIniFile(fn, ts); |
pvar->origReadIniFile(fn, ts); |
113 |
|
|
114 |
GetPrivateProfileString(IniSection, "UseOneSetting", "Off", buff, sizeof(buff), fn); |
GetPrivateProfileString(IniSection, "UseOneSetting", "Off", buff, sizeof(buff), fn); |
115 |
if (_stricmp(buff, "on") == 0) { |
if (_stricmp(buff, "on") == 0) { |
116 |
pvar->UseOneSetting = TRUE; |
pvar->UseOneSetting = TRUE; |
117 |
if (pvar->ts->KanjiCode == IdUTF8m) { |
if (pvar->ts->KanjiCode == IdUTF8m) { |
118 |
pvar->ts->KanjiCodeSend = IdUTF8; |
pvar->ts->KanjiCodeSend = IdUTF8; |
119 |
} |
} |
120 |
else { |
else { |
121 |
pvar->ts->KanjiCodeSend = pvar->ts->KanjiCode; |
pvar->ts->KanjiCodeSend = pvar->ts->KanjiCode; |
122 |
} |
} |
123 |
} |
} |
124 |
return; |
return; |
125 |
} |
} |
126 |
|
|
127 |
static void PASCAL FAR TTXKanjiMenuWriteIniFile(PCHAR fn, PTTSet ts) { |
static void PASCAL FAR TTXKanjiMenuWriteIniFile(PCHAR fn, PTTSet ts) { |
128 |
/* Call original WriteIniFile */ |
/* Call original WriteIniFile */ |
129 |
pvar->origWriteIniFile(fn, ts); |
pvar->origWriteIniFile(fn, ts); |
130 |
|
|
131 |
WritePrivateProfileString(IniSection, "UseOneSetting", pvar->UseOneSetting?"On":"Off", fn); |
WritePrivateProfileString(IniSection, "UseOneSetting", pvar->UseOneSetting?"On":"Off", fn); |
132 |
|
|
133 |
return; |
return; |
134 |
} |
} |
135 |
|
|
136 |
static void PASCAL FAR TTXGetSetupHooks(TTXSetupHooks FAR *hooks) { |
static void PASCAL FAR TTXGetSetupHooks(TTXSetupHooks FAR *hooks) { |
137 |
pvar->origReadIniFile = *hooks->ReadIniFile; |
pvar->origReadIniFile = *hooks->ReadIniFile; |
138 |
*hooks->ReadIniFile = TTXKanjiMenuReadIniFile; |
*hooks->ReadIniFile = TTXKanjiMenuReadIniFile; |
139 |
pvar->origWriteIniFile = *hooks->WriteIniFile; |
pvar->origWriteIniFile = *hooks->WriteIniFile; |
140 |
*hooks->WriteIniFile = TTXKanjiMenuWriteIniFile; |
*hooks->WriteIniFile = TTXKanjiMenuWriteIniFile; |
141 |
} |
} |
142 |
|
|
143 |
// #define ID_MI_KANJIMASK 0xFF00 |
// #define ID_MI_KANJIMASK 0xFF00 |
144 |
#define ID_MI_KANJIRECV 54009 |
#define ID_MI_KANJIRECV 54009 |
145 |
#define ID_MI_KANJISEND 54109 |
#define ID_MI_KANJISEND 54109 |
146 |
#define ID_MI_USEONESETTING 54200 |
#define ID_MI_USEONESETTING 54200 |
147 |
|
|
148 |
static void PASCAL FAR InsertSendKcodeMenu(HMENU menu) { |
static void PASCAL FAR InsertSendKcodeMenu(HMENU menu) { |
149 |
UINT flag = MF_BYPOSITION | MF_STRING | MF_CHECKED; |
UINT flag = MF_BYPOSITION | MF_STRING | MF_CHECKED; |
150 |
|
|
151 |
InsertMenu(menu, 5, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); |
InsertMenu(menu, 5, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); |
152 |
|
|
153 |
GetI18nStr(IniSection, "MENU_SEND_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_SEND_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
154 |
"Send: S&hift_JIS", pvar->ts->UILanguageFile); |
"Send: S&hift_JIS", pvar->ts->UILanguageFile); |
155 |
InsertMenu(menu, 6, flag, ID_MI_KANJISEND+IdSJIS, pvar->ts->UIMsg); |
InsertMenu(menu, 6, flag, ID_MI_KANJISEND+IdSJIS, pvar->ts->UIMsg); |
156 |
GetI18nStr(IniSection, "MENU_SEND_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_SEND_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
157 |
"Send: EU&C-JP", pvar->ts->UILanguageFile); |
"Send: EU&C-JP", pvar->ts->UILanguageFile); |
158 |
InsertMenu(menu, 7, flag, ID_MI_KANJISEND+IdEUC, pvar->ts->UIMsg); |
InsertMenu(menu, 7, flag, ID_MI_KANJISEND+IdEUC, pvar->ts->UIMsg); |
159 |
GetI18nStr(IniSection, "MENU_SEND_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_SEND_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
160 |
"Send: J&IS", pvar->ts->UILanguageFile); |
"Send: J&IS", pvar->ts->UILanguageFile); |
161 |
InsertMenu(menu, 8, flag, ID_MI_KANJISEND+IdJIS, pvar->ts->UIMsg); |
InsertMenu(menu, 8, flag, ID_MI_KANJISEND+IdJIS, pvar->ts->UIMsg); |
162 |
GetI18nStr(IniSection, "MENU_SEND_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_SEND_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
163 |
"Send: U&TF-8", pvar->ts->UILanguageFile); |
"Send: U&TF-8", pvar->ts->UILanguageFile); |
164 |
InsertMenu(menu, 9, flag, ID_MI_KANJISEND+IdUTF8, pvar->ts->UIMsg); |
InsertMenu(menu, 9, flag, ID_MI_KANJISEND+IdUTF8, pvar->ts->UIMsg); |
165 |
} |
} |
166 |
|
|
167 |
static void PASCAL FAR DeleteSendKcodeMenu(HMENU menu) { |
static void PASCAL FAR DeleteSendKcodeMenu(HMENU menu) { |
168 |
DeleteMenu(menu, 5, MF_BYPOSITION); |
DeleteMenu(menu, 5, MF_BYPOSITION); |
169 |
DeleteMenu(menu, 5, MF_BYPOSITION); |
DeleteMenu(menu, 5, MF_BYPOSITION); |
170 |
DeleteMenu(menu, 5, MF_BYPOSITION); |
DeleteMenu(menu, 5, MF_BYPOSITION); |
171 |
DeleteMenu(menu, 5, MF_BYPOSITION); |
DeleteMenu(menu, 5, MF_BYPOSITION); |
172 |
DeleteMenu(menu, 5, MF_BYPOSITION); |
DeleteMenu(menu, 5, MF_BYPOSITION); |
173 |
} |
} |
174 |
|
|
175 |
static void PASCAL FAR UpdateRecvMenuCaption(HMENU menu, BOOL UseOneSetting) { |
static void PASCAL FAR UpdateRecvMenuCaption(HMENU menu, BOOL UseOneSetting) { |
176 |
if (UseOneSetting) { |
if (UseOneSetting) { |
177 |
GetI18nStr(IniSection, "MENU_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
178 |
"Recv/Send: &Shift_JIS", pvar->ts->UILanguageFile); |
"Recv/Send: &Shift_JIS", pvar->ts->UILanguageFile); |
179 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdSJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdSJIS, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdSJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdSJIS, pvar->ts->UIMsg); |
180 |
GetI18nStr(IniSection, "MENU_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
181 |
"Recv/Send: &EUC-JP", pvar->ts->UILanguageFile); |
"Recv/Send: &EUC-JP", pvar->ts->UILanguageFile); |
182 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdEUC, MF_BYCOMMAND, ID_MI_KANJIRECV+IdEUC, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdEUC, MF_BYCOMMAND, ID_MI_KANJIRECV+IdEUC, pvar->ts->UIMsg); |
183 |
GetI18nStr(IniSection, "MENU_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
184 |
"Recv/Send: &JIS", pvar->ts->UILanguageFile); |
"Recv/Send: &JIS", pvar->ts->UILanguageFile); |
185 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdJIS, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdJIS, pvar->ts->UIMsg); |
186 |
GetI18nStr(IniSection, "MENU_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
187 |
"Recv/Send: &UTF-8", pvar->ts->UILanguageFile); |
"Recv/Send: &UTF-8", pvar->ts->UILanguageFile); |
188 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8, pvar->ts->UIMsg); |
189 |
GetI18nStr(IniSection, "MENU_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
190 |
"Recv: UTF-8&m/Send: UTF-8", pvar->ts->UILanguageFile); |
"Recv: UTF-8&m/Send: UTF-8", pvar->ts->UILanguageFile); |
191 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8m, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8m, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8m, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8m, pvar->ts->UIMsg); |
192 |
} |
} |
193 |
else { |
else { |
194 |
GetI18nStr(IniSection, "MENU_RECV_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
195 |
"Recv: &Shift_JIS", pvar->ts->UILanguageFile); |
"Recv: &Shift_JIS", pvar->ts->UILanguageFile); |
196 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdSJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdSJIS, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdSJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdSJIS, pvar->ts->UIMsg); |
197 |
GetI18nStr(IniSection, "MENU_RECV_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
198 |
"Recv: &EUC-JP", pvar->ts->UILanguageFile); |
"Recv: &EUC-JP", pvar->ts->UILanguageFile); |
199 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdEUC, MF_BYCOMMAND, ID_MI_KANJIRECV+IdEUC, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdEUC, MF_BYCOMMAND, ID_MI_KANJIRECV+IdEUC, pvar->ts->UIMsg); |
200 |
GetI18nStr(IniSection, "MENU_RECV_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
201 |
"Recv: &JIS", pvar->ts->UILanguageFile); |
"Recv: &JIS", pvar->ts->UILanguageFile); |
202 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdJIS, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdJIS, MF_BYCOMMAND, ID_MI_KANJIRECV+IdJIS, pvar->ts->UIMsg); |
203 |
GetI18nStr(IniSection, "MENU_RECV_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
204 |
"Recv: &UTF-8", pvar->ts->UILanguageFile); |
"Recv: &UTF-8", pvar->ts->UILanguageFile); |
205 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8, pvar->ts->UIMsg); |
206 |
GetI18nStr(IniSection, "MENU_RECV_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
207 |
"Recv: UTF-8&m", pvar->ts->UILanguageFile); |
"Recv: UTF-8&m", pvar->ts->UILanguageFile); |
208 |
ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8m, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8m, pvar->ts->UIMsg); |
ModifyMenu(menu, ID_MI_KANJIRECV+IdUTF8m, MF_BYCOMMAND, ID_MI_KANJIRECV+IdUTF8m, pvar->ts->UIMsg); |
209 |
} |
} |
210 |
} |
} |
211 |
|
|
212 |
/* |
/* |
213 |
* This function is called when Tera Term creates a new menu. |
* This function is called when Tera Term creates a new menu. |
214 |
*/ |
*/ |
215 |
static void PASCAL FAR TTXModifyMenu(HMENU menu) { |
static void PASCAL FAR TTXModifyMenu(HMENU menu) { |
216 |
UINT flag = MF_ENABLED; |
UINT flag = MF_ENABLED; |
217 |
|
|
218 |
// 言語が日本語のときのみメニューに追加されるようにした。 (2007.7.14 maya) |
// 言語が日本語のときのみメニューに追加されるようにした。 (2007.7.14 maya) |
219 |
if (pvar->ts->Language != IdJapanese) { |
if (pvar->ts->Language != IdJapanese) { |
220 |
return; |
return; |
221 |
} |
} |
222 |
|
|
223 |
{ |
{ |
224 |
OSVERSIONINFO osvi; |
OSVERSIONINFO osvi; |
225 |
MENUITEMINFO mi; |
MENUITEMINFO mi; |
226 |
|
|
227 |
pvar->hmEncode = CreateMenu(); |
pvar->hmEncode = CreateMenu(); |
228 |
|
|
229 |
// Windows 95 でメニューが表示されないのでバージョンチェックを入れる (2009.2.18 maya) |
// Windows 95 でメニューが表示されないのでバージョンチェックを入れる (2009.2.18 maya) |
230 |
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
231 |
GetVersionEx(&osvi); |
GetVersionEx(&osvi); |
232 |
if (osvi.dwMajorVersion >= 5) { |
if (osvi.dwMajorVersion >= 5) { |
233 |
memset(&mi, 0, sizeof(MENUITEMINFO)); |
memset(&mi, 0, sizeof(MENUITEMINFO)); |
234 |
mi.cbSize = sizeof(MENUITEMINFO); |
mi.cbSize = sizeof(MENUITEMINFO); |
235 |
} |
} |
236 |
else { |
else { |
237 |
memset(&mi, 0, sizeof(MENUITEMINFO)-sizeof(HBITMAP)); |
memset(&mi, 0, sizeof(MENUITEMINFO)-sizeof(HBITMAP)); |
238 |
mi.cbSize = sizeof(MENUITEMINFO)-sizeof(HBITMAP); |
mi.cbSize = sizeof(MENUITEMINFO)-sizeof(HBITMAP); |
239 |
} |
} |
240 |
mi.fMask = MIIM_TYPE | MIIM_SUBMENU; |
mi.fMask = MIIM_TYPE | MIIM_SUBMENU; |
241 |
mi.fType = MFT_STRING; |
mi.fType = MFT_STRING; |
242 |
mi.hSubMenu = pvar->hmEncode; |
mi.hSubMenu = pvar->hmEncode; |
243 |
GetI18nStr(IniSection, "MENU_KANJI", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_KANJI", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
244 |
"&KanjiCode", pvar->ts->UILanguageFile); |
"&KanjiCode", pvar->ts->UILanguageFile); |
245 |
mi.dwTypeData = pvar->ts->UIMsg; |
mi.dwTypeData = pvar->ts->UIMsg; |
246 |
InsertMenuItem(menu, ID_HELPMENU, FALSE, &mi); |
InsertMenuItem(menu, ID_HELPMENU, FALSE, &mi); |
247 |
|
|
248 |
flag = MF_STRING|MF_CHECKED; |
flag = MF_STRING|MF_CHECKED; |
249 |
GetI18nStr(IniSection, "MENU_RECV_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_SJIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
250 |
"Recv: &Shift_JIS", pvar->ts->UILanguageFile); |
"Recv: &Shift_JIS", pvar->ts->UILanguageFile); |
251 |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdSJIS, pvar->ts->UIMsg); |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdSJIS, pvar->ts->UIMsg); |
252 |
GetI18nStr(IniSection, "MENU_RECV_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_EUCJP", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
253 |
"Recv: &EUC-JP", pvar->ts->UILanguageFile); |
"Recv: &EUC-JP", pvar->ts->UILanguageFile); |
254 |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdEUC, pvar->ts->UIMsg); |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdEUC, pvar->ts->UIMsg); |
255 |
GetI18nStr(IniSection, "MENU_RECV_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_JIS", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
256 |
"Recv: &JIS", pvar->ts->UILanguageFile); |
"Recv: &JIS", pvar->ts->UILanguageFile); |
257 |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdJIS, pvar->ts->UIMsg); |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdJIS, pvar->ts->UIMsg); |
258 |
GetI18nStr(IniSection, "MENU_RECV_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_UTF8", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
259 |
"Recv: &UTF-8", pvar->ts->UILanguageFile); |
"Recv: &UTF-8", pvar->ts->UILanguageFile); |
260 |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdUTF8, pvar->ts->UIMsg); |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdUTF8, pvar->ts->UIMsg); |
261 |
GetI18nStr(IniSection, "MENU_RECV_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_RECV_UTF8m", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
262 |
"Recv: UTF-8&m", pvar->ts->UILanguageFile); |
"Recv: UTF-8&m", pvar->ts->UILanguageFile); |
263 |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdUTF8m, pvar->ts->UIMsg); |
AppendMenu(pvar->hmEncode, flag, ID_MI_KANJIRECV+IdUTF8m, pvar->ts->UIMsg); |
264 |
|
|
265 |
if (!pvar->UseOneSetting) { |
if (!pvar->UseOneSetting) { |
266 |
InsertSendKcodeMenu(pvar->hmEncode); |
InsertSendKcodeMenu(pvar->hmEncode); |
267 |
} |
} |
268 |
else { |
else { |
269 |
UpdateRecvMenuCaption(pvar->hmEncode, pvar->UseOneSetting); |
UpdateRecvMenuCaption(pvar->hmEncode, pvar->UseOneSetting); |
270 |
} |
} |
271 |
|
|
272 |
AppendMenu(pvar->hmEncode, MF_SEPARATOR, 0, NULL); |
AppendMenu(pvar->hmEncode, MF_SEPARATOR, 0, NULL); |
273 |
GetI18nStr(IniSection, "MENU_USE_ONE_SETTING", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
GetI18nStr(IniSection, "MENU_USE_ONE_SETTING", pvar->ts->UIMsg, sizeof(pvar->ts->UIMsg), |
274 |
"Use &one setting", pvar->ts->UILanguageFile); |
"Use &one setting", pvar->ts->UILanguageFile); |
275 |
AppendMenu(pvar->hmEncode, flag, ID_MI_USEONESETTING , pvar->ts->UIMsg); |
AppendMenu(pvar->hmEncode, flag, ID_MI_USEONESETTING , pvar->ts->UIMsg); |
276 |
|
|
277 |
UpdateRecvMenu(pvar->ts->KanjiCode); |
UpdateRecvMenu(pvar->ts->KanjiCode); |
278 |
if (!pvar->UseOneSetting) { |
if (!pvar->UseOneSetting) { |
279 |
UpdateSendMenu(pvar->ts->KanjiCodeSend); |
UpdateSendMenu(pvar->ts->KanjiCodeSend); |
280 |
} |
} |
281 |
|
|
282 |
CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | (pvar->UseOneSetting)?MF_CHECKED:0); |
CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | (pvar->UseOneSetting)?MF_CHECKED:0); |
283 |
} |
} |
284 |
} |
} |
285 |
|
|
286 |
|
|
287 |
/* |
/* |
288 |
* This function is called when Tera Term pops up a submenu menu. |
* This function is called when Tera Term pops up a submenu menu. |
289 |
*/ |
*/ |
290 |
static void PASCAL FAR TTXModifyPopupMenu(HMENU menu) { |
static void PASCAL FAR TTXModifyPopupMenu(HMENU menu) { |
291 |
// メニューが呼び出されたら、最新の設定に更新する。(2007.5.25 yutaka) |
// メニューが呼び出されたら、最新の設定に更新する。(2007.5.25 yutaka) |
292 |
UpdateRecvMenu(pvar->ts->KanjiCode); |
UpdateRecvMenu(pvar->ts->KanjiCode); |
293 |
if (!pvar->UseOneSetting) { |
if (!pvar->UseOneSetting) { |
294 |
UpdateSendMenu(pvar->ts->KanjiCodeSend); |
UpdateSendMenu(pvar->ts->KanjiCodeSend); |
295 |
} |
} |
296 |
CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | (pvar->UseOneSetting)?MF_CHECKED:0); |
CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | (pvar->UseOneSetting)?MF_CHECKED:0); |
297 |
} |
} |
298 |
|
|
299 |
|
|
300 |
/* |
/* |
301 |
* This function is called when Tera Term receives a command message. |
* This function is called when Tera Term receives a command message. |
302 |
*/ |
*/ |
303 |
static int PASCAL FAR TTXProcessCommand(HWND hWin, WORD cmd) { |
static int PASCAL FAR TTXProcessCommand(HWND hWin, WORD cmd) { |
304 |
WORD val; |
WORD val; |
305 |
|
|
306 |
if ((cmd > ID_MI_KANJIRECV) && (cmd <= ID_MI_KANJIRECV+IdUTF8m)) { |
if ((cmd > ID_MI_KANJIRECV) && (cmd <= ID_MI_KANJIRECV+IdUTF8m)) { |
307 |
// 範囲チェックを追加 |
// 範囲チェックを追加 |
308 |
// TTProxyのバージョンダイアログを開くと、当該ハンドラが呼ばれ、誤動作していたのを修正。 |
// TTProxyのバージョンダイアログを開くと、当該ハンドラが呼ばれ、誤動作していたのを修正。 |
309 |
// (2007.7.13 yutaka) |
// (2007.7.13 yutaka) |
310 |
val = cmd - ID_MI_KANJIRECV; |
val = cmd - ID_MI_KANJIRECV; |
311 |
pvar->cv->KanjiCodeEcho = pvar->ts->KanjiCode = val; |
pvar->cv->KanjiCodeEcho = pvar->ts->KanjiCode = val; |
312 |
if (pvar->UseOneSetting) { |
if (pvar->UseOneSetting) { |
313 |
if (val == IdUTF8m) { |
if (val == IdUTF8m) { |
314 |
val = IdUTF8; |
val = IdUTF8; |
315 |
} |
} |
316 |
pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val; |
pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val; |
317 |
} |
} |
318 |
return UpdateRecvMenu(pvar->ts->KanjiCode)?1:0; |
return UpdateRecvMenu(pvar->ts->KanjiCode)?1:0; |
319 |
} |
} |
320 |
else if ((cmd > ID_MI_KANJISEND) && (cmd <= ID_MI_KANJISEND+IdUTF8)) { |
else if ((cmd > ID_MI_KANJISEND) && (cmd <= ID_MI_KANJISEND+IdUTF8)) { |
321 |
val = cmd - ID_MI_KANJISEND; |
val = cmd - ID_MI_KANJISEND; |
322 |
pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val; |
pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val; |
323 |
if (pvar->UseOneSetting) { |
if (pvar->UseOneSetting) { |
324 |
pvar->cv->KanjiCodeEcho = pvar->ts->KanjiCode = val; |
pvar->cv->KanjiCodeEcho = pvar->ts->KanjiCode = val; |
325 |
return UpdateRecvMenu(pvar->ts->KanjiCode)?1:0; |
return UpdateRecvMenu(pvar->ts->KanjiCode)?1:0; |
326 |
} |
} |
327 |
else { |
else { |
328 |
return UpdateSendMenu(pvar->ts->KanjiCodeSend)?1:0; |
return UpdateSendMenu(pvar->ts->KanjiCodeSend)?1:0; |
329 |
} |
} |
330 |
} |
} |
331 |
else if (cmd == ID_MI_USEONESETTING) { |
else if (cmd == ID_MI_USEONESETTING) { |
332 |
if (pvar->UseOneSetting) { |
if (pvar->UseOneSetting) { |
333 |
pvar->UseOneSetting = FALSE; |
pvar->UseOneSetting = FALSE; |
334 |
InsertSendKcodeMenu(pvar->hmEncode); |
InsertSendKcodeMenu(pvar->hmEncode); |
335 |
CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND); |
CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND); |
336 |
} |
} |
337 |
else { |
else { |
338 |
pvar->UseOneSetting = TRUE; |
pvar->UseOneSetting = TRUE; |
339 |
|
|
340 |
if (pvar->ts->KanjiCode == IdUTF8m) { |
if (pvar->ts->KanjiCode == IdUTF8m) { |
341 |
val = IdUTF8; |
val = IdUTF8; |
342 |
} |
} |
343 |
else { |
else { |
344 |
val = pvar->ts->KanjiCode; |
val = pvar->ts->KanjiCode; |
345 |
} |
} |
346 |
pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val; |
pvar->cv->KanjiCodeSend = pvar->ts->KanjiCodeSend = val; |
347 |
|
|
348 |
DeleteSendKcodeMenu(pvar->hmEncode); |
DeleteSendKcodeMenu(pvar->hmEncode); |
349 |
CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | MF_CHECKED); |
CheckMenuItem(pvar->hmEncode, ID_MI_USEONESETTING, MF_BYCOMMAND | MF_CHECKED); |
350 |
} |
} |
351 |
UpdateRecvMenuCaption(pvar->hmEncode, pvar->UseOneSetting); |
UpdateRecvMenuCaption(pvar->hmEncode, pvar->UseOneSetting); |
352 |
return 1; |
return 1; |
353 |
} |
} |
354 |
|
|
355 |
return 0; |
return 0; |
356 |
} |
} |
357 |
|
|
358 |
|
|
359 |
/* |
/* |
360 |
* This record contains all the information that the extension forwards to the |
* This record contains all the information that the extension forwards to the |
361 |
* main Tera Term code. It mostly consists of pointers to the above functions. |
* main Tera Term code. It mostly consists of pointers to the above functions. |
362 |
* Any of the function pointers can be replaced with NULL, in which case |
* Any of the function pointers can be replaced with NULL, in which case |
363 |
* Tera Term will just ignore that function and assume default behaviour, which |
* Tera Term will just ignore that function and assume default behaviour, which |
364 |
* means "do nothing". |
* means "do nothing". |
365 |
*/ |
*/ |
366 |
static TTXExports Exports = { |
static TTXExports Exports = { |
367 |
/* This must contain the size of the structure. See below for its usage. */ |
/* This must contain the size of the structure. See below for its usage. */ |
368 |
sizeof(TTXExports), |
sizeof(TTXExports), |
369 |
|
|
370 |
/* This is the load order number of this DLL. */ |
/* This is the load order number of this DLL. */ |
371 |
ORDER, |
ORDER, |
372 |
|
|
373 |
/* Now we just list the functions that we've implemented. */ |
/* Now we just list the functions that we've implemented. */ |
374 |
TTXInit, |
TTXInit, |
375 |
TTXGetUIHooks, |
TTXGetUIHooks, |
376 |
TTXGetSetupHooks, |
TTXGetSetupHooks, |
377 |
NULL, // TTXOpenTCP, |
NULL, // TTXOpenTCP, |
378 |
NULL, // TTXCloseTCP, |
NULL, // TTXCloseTCP, |
379 |
NULL, // TTXSetWinSize, |
NULL, // TTXSetWinSize, |
380 |
TTXModifyMenu, |
TTXModifyMenu, |
381 |
TTXModifyPopupMenu, |
TTXModifyPopupMenu, |
382 |
TTXProcessCommand, |
TTXProcessCommand, |
383 |
NULL, // TTXEnd, |
NULL, // TTXEnd, |
384 |
NULL // TTXSetCommandLine |
NULL // TTXSetCommandLine |
385 |
}; |
}; |
386 |
|
|
387 |
BOOL __declspec(dllexport) PASCAL FAR TTXBind(WORD Version, TTXExports FAR * exports) { |
BOOL __declspec(dllexport) PASCAL FAR TTXBind(WORD Version, TTXExports FAR * exports) { |
388 |
int size = sizeof(Exports) - sizeof(exports->size); |
int size = sizeof(Exports) - sizeof(exports->size); |
389 |
/* do version checking if necessary */ |
/* do version checking if necessary */ |
390 |
/* if (Version!=TTVERSION) return FALSE; */ |
/* if (Version!=TTVERSION) return FALSE; */ |
391 |
|
|
392 |
if (size > exports->size) { |
if (size > exports->size) { |
393 |
size = exports->size; |
size = exports->size; |
394 |
} |
} |
395 |
memcpy((char FAR *)exports + sizeof(exports->size), |
memcpy((char FAR *)exports + sizeof(exports->size), |
396 |
(char FAR *)&Exports + sizeof(exports->size), |
(char FAR *)&Exports + sizeof(exports->size), |
397 |
size); |
size); |
398 |
return TRUE; |
return TRUE; |
399 |
} |
} |
400 |
|
|
401 |
BOOL WINAPI DllMain(HANDLE hInstance, |
BOOL WINAPI DllMain(HANDLE hInstance, |
402 |
ULONG ul_reason_for_call, |
ULONG ul_reason_for_call, |
403 |
LPVOID lpReserved) |
LPVOID lpReserved) |
404 |
{ |
{ |
405 |
switch( ul_reason_for_call ) { |
switch( ul_reason_for_call ) { |
406 |
case DLL_THREAD_ATTACH: |
case DLL_THREAD_ATTACH: |
407 |
/* do thread initialization */ |
/* do thread initialization */ |
408 |
break; |
break; |
409 |
case DLL_THREAD_DETACH: |
case DLL_THREAD_DETACH: |
410 |
/* do thread cleanup */ |
/* do thread cleanup */ |
411 |
break; |
break; |
412 |
case DLL_PROCESS_ATTACH: |
case DLL_PROCESS_ATTACH: |
413 |
/* do process initialization */ |
/* do process initialization */ |
414 |
DoCover_IsDebuggerPresent(); |
DoCover_IsDebuggerPresent(); |
415 |
hInst = hInstance; |
hInst = hInstance; |
416 |
pvar = &InstVar; |
pvar = &InstVar; |
417 |
break; |
break; |
418 |
case DLL_PROCESS_DETACH: |
case DLL_PROCESS_DETACH: |
419 |
/* do process cleanup */ |
/* do process cleanup */ |
420 |
break; |
break; |
421 |
} |
} |
422 |
return TRUE; |
return TRUE; |
423 |
} |
} |