ttermpro コマンドライン Unicode化
@@ -99,12 +99,12 @@ | ||
99 | 99 | write_options(fileName); |
100 | 100 | } |
101 | 101 | |
102 | - static void PASCAL TTXParseParam(PCHAR param, PTTSet ts, PCHAR DDETopic) { | |
103 | - int param_len=strlen(param); | |
104 | - char option[1024]; | |
102 | + static void PASCAL TTXParseParam(wchar_t *param, PTTSet ts, PCHAR DDETopic) { | |
103 | + size_t param_len = wcslen(param); | |
104 | + wchar_t option[1024]; | |
105 | 105 | int opt_len = sizeof(option); |
106 | 106 | int action; |
107 | - PCHAR start, cur, next; | |
107 | + wchar_t *start, *cur, *next; | |
108 | 108 | |
109 | 109 | memset(&option, '\0', opt_len); |
110 | 110 |
@@ -118,9 +118,11 @@ | ||
118 | 118 | |
119 | 119 | if ((option[0] == '-' || option[0] == '/')) { |
120 | 120 | if ((option[1] == 'F' || option[1] == 'f') && option[2] == '=') { |
121 | - const char *f = get_teraterm_dir_relative_name(option + 3); | |
121 | + char *optA = ToCharW(option + 3); | |
122 | + const char *f = get_teraterm_dir_relative_name(optA); | |
122 | 123 | wchar_t *fW = ToWcharA(f); |
123 | 124 | read_options(fW); |
125 | + free(optA); | |
124 | 126 | free(fW); |
125 | 127 | } |
126 | 128 | } |
@@ -127,11 +129,11 @@ | ||
127 | 129 | |
128 | 130 | switch (action) { |
129 | 131 | case OPTION_CLEAR: |
130 | - memset(cur, ' ', next-cur); | |
132 | + wmemset(cur, ' ', next-cur); | |
131 | 133 | break; |
132 | 134 | case OPTION_REPLACE: |
133 | - memset(cur, ' ', next-cur); | |
134 | - memcpy(cur+1, option, strlen(option)); | |
135 | + wmemset(cur, ' ', next-cur); | |
136 | + wmemcpy(cur+1, option, wcslen(option)); | |
135 | 137 | break; |
136 | 138 | } |
137 | 139 |
@@ -144,22 +146,26 @@ | ||
144 | 146 | action = OPTION_NONE; |
145 | 147 | |
146 | 148 | if ((option[0] == '-' || option[0] == '/')) { |
147 | - if (strlen(option + 1) >= 6 && option[6] == '=') { | |
149 | + if (wcslen(option + 1) >= 6 && option[6] == '=') { | |
148 | 150 | option[6] = '\0'; |
149 | - if (_stricmp(option + 1, "proxy") == 0) { | |
150 | - ProxyWSockHook::parseURL(option + 7, TRUE); | |
151 | + if (_wcsicmp(option + 1, L"proxy") == 0) { | |
152 | + char *url = ToCharW(option + 7); | |
153 | + ProxyWSockHook::parseURL(url, TRUE); | |
154 | + free(url); | |
151 | 155 | action = OPTION_CLEAR; |
152 | 156 | }else{ |
153 | 157 | option[6] = '='; |
154 | 158 | } |
155 | 159 | } |
156 | - else if (_stricmp(option+1, "noproxy") == 0) { | |
160 | + else if (_wcsicmp(option+1, L"noproxy") == 0) { | |
157 | 161 | // -noproxy は -proxy=none:// の別名 |
158 | 162 | ProxyWSockHook::parseURL("none://", TRUE); |
159 | 163 | action = OPTION_CLEAR; |
160 | 164 | } |
161 | 165 | }else{ |
162 | - String realhost = ProxyWSockHook::parseURL(option, FALSE); | |
166 | + char *url = ToCharW(option); | |
167 | + String realhost = ProxyWSockHook::parseURL(url, FALSE); | |
168 | + free(url); | |
163 | 169 | if (realhost != NULL) { |
164 | 170 | getInstance().realhost = realhost; |
165 | 171 | if (realhost.indexOf("://") == -1) { |
@@ -175,11 +181,11 @@ | ||
175 | 181 | |
176 | 182 | switch (action) { |
177 | 183 | case OPTION_CLEAR: |
178 | - memset(cur, ' ', next-cur); | |
184 | + wmemset(cur, ' ', next-cur); | |
179 | 185 | break; |
180 | 186 | case OPTION_REPLACE: |
181 | - memset(cur, ' ', next-cur); | |
182 | - memcpy(cur+1, option, strlen(option)); | |
187 | + wmemset(cur, ' ', next-cur); | |
188 | + wmemcpy(cur+1, option, wcslen(option)); | |
183 | 189 | break; |
184 | 190 | } |
185 | 191 |
@@ -287,15 +287,15 @@ | ||
287 | 287 | } |
288 | 288 | } |
289 | 289 | |
290 | -static void PASCAL TTXParseParam(PCHAR Param, PTTSet ts, PCHAR DDETopic) { | |
291 | - char buff[1024]; | |
292 | - PCHAR next; | |
290 | +static void PASCAL TTXParseParam(wchar_t *Param, PTTSet ts, PCHAR DDETopic) { | |
291 | + wchar_t buff[1024]; | |
292 | + wchar_t *next; | |
293 | 293 | |
294 | 294 | pvar->origParseParam(Param, ts, DDETopic); |
295 | 295 | |
296 | 296 | next = Param; |
297 | 297 | while (next = GetParam(buff, sizeof(buff), next)) { |
298 | - if (_strnicmp(buff, "/W=", 3) == 0) { | |
298 | + if (_wcsnicmp(buff, L"/W=", 3) == 0) { | |
299 | 299 | strncpy_s(pvar->orig_title, sizeof(pvar->orig_title), pvar->ts->Title, _TRUNCATE); |
300 | 300 | SetTitleStr(pvar->orig_title, FALSE); |
301 | 301 | break; |
@@ -4,6 +4,7 @@ | ||
4 | 4 | #include "tt_res.h" |
5 | 5 | #include <stdlib.h> |
6 | 6 | #include <stdio.h> |
7 | +#include <wchar.h> | |
7 | 8 | |
8 | 9 | #define ORDER 5800 |
9 | 10 |
@@ -23,10 +24,10 @@ | ||
23 | 24 | pvar->cv = cv; |
24 | 25 | } |
25 | 26 | |
26 | -BOOL ColorStr2ColorRef(COLORREF *color, PCHAR Str) { | |
27 | +static BOOL ColorStr2ColorRef(COLORREF *color, wchar_t *Str) { | |
27 | 28 | int TmpColor[3]; |
28 | 29 | int i, result; |
29 | - PCHAR cur, next; | |
30 | + wchar_t *cur, *next; | |
30 | 31 | |
31 | 32 | cur = Str; |
32 | 33 |
@@ -34,10 +35,10 @@ | ||
34 | 35 | if (!cur) |
35 | 36 | return FALSE; |
36 | 37 | |
37 | - if ((next = strchr(cur, ',')) != NULL) | |
38 | + if ((next = wcsrchr(cur, L',')) != NULL) | |
38 | 39 | *next = 0; |
39 | 40 | |
40 | - result = sscanf_s(cur, "%d", &TmpColor[i]); | |
41 | + result = swscanf_s(cur, L"%d", &TmpColor[i]); | |
41 | 42 | |
42 | 43 | if (next) |
43 | 44 | *next++ = ','; |
@@ -52,9 +53,9 @@ | ||
52 | 53 | return TRUE; |
53 | 54 | } |
54 | 55 | |
55 | -static void PASCAL TTXParseParam(PCHAR Param, PTTSet ts, PCHAR DDETopic) { | |
56 | - char buff[1024]; | |
57 | - PCHAR start, cur, next; | |
56 | +static void PASCAL TTXParseParam(wchar_t *Param, PTTSet ts, PCHAR DDETopic) { | |
57 | + wchar_t buff[1024]; | |
58 | + wchar_t *start, *cur, *next; | |
58 | 59 | int x, y; |
59 | 60 | |
60 | 61 | /* the first term shuld be executable filename of Tera Term */ |
@@ -62,20 +63,20 @@ | ||
62 | 63 | |
63 | 64 | cur = start; |
64 | 65 | while (next = GetParam(buff, sizeof(buff), cur)) { |
65 | - if (_strnicmp(buff, "/FG=", 4) == 0) { | |
66 | + if (_wcsnicmp(buff, L"/FG=", 4) == 0) { | |
66 | 67 | ColorStr2ColorRef(&(ts->VTColor[0]), &buff[4]); |
67 | - memset(cur, ' ', next - cur); | |
68 | + wmemset(cur, ' ', next - cur); | |
68 | 69 | } |
69 | - else if (_strnicmp(buff, "/BG=", 4) == 0) { | |
70 | + else if (_wcsnicmp(buff, L"/BG=", 4) == 0) { | |
70 | 71 | ColorStr2ColorRef(&(ts->VTColor[1]), &buff[4]); |
71 | - memset(cur, ' ', next - cur); | |
72 | + wmemset(cur, ' ', next - cur); | |
72 | 73 | } |
73 | - else if (_strnicmp(buff, "/SIZE=", 6) == 0) { | |
74 | - if (sscanf_s(buff+6, "%dx%d", &x, &y) == 2 || sscanf_s(buff+6, "%d,%d", &x, &y) == 2) { | |
75 | - ts->TerminalWidth = x; | |
76 | - ts->TerminalHeight = y; | |
74 | + else if (_wcsnicmp(buff, L"/SIZE=", 6) == 0) { | |
75 | + if (swscanf_s(buff+6, L"%dx%d", &x, &y) == 2 || swscanf_s(buff+6, L"%d,%d", &x, &y) == 2) { | |
76 | + ts->TerminalWidth = x; | |
77 | + ts->TerminalHeight = y; | |
77 | 78 | } |
78 | - memset(cur, ' ', next - cur); | |
79 | + wmemset(cur, ' ', next - cur); | |
79 | 80 | } |
80 | 81 | cur = next; |
81 | 82 | } |
@@ -396,19 +396,16 @@ | ||
396 | 396 | // /F= による設定ファイルの切り替えのみ対応。 |
397 | 397 | // |
398 | 398 | |
399 | -static void PASCAL TTXParseParam(PCHAR Param, PTTSet ts, PCHAR DDETopic) { | |
400 | - char buff[1024]; | |
401 | - PCHAR next; | |
399 | +static void PASCAL TTXParseParam(wchar_t *Param, PTTSet ts, PCHAR DDETopic) { | |
400 | + wchar_t buff[1024]; | |
401 | + wchar_t *next; | |
402 | 402 | pvar->origParseParam(Param, ts, DDETopic); |
403 | 403 | |
404 | 404 | next = Param; |
405 | 405 | while (next = GetParam(buff, sizeof(buff), next)) { |
406 | 406 | DequoteParam(buff, sizeof(buff), buff); |
407 | - if (_strnicmp(buff, "/F=", 3) == 0) { | |
408 | - char *f = buff+3; | |
409 | - wchar_t *fW = ToWcharA(f); | |
410 | - ReadINI(fW, ts); | |
411 | - free(fW); | |
407 | + if (_wcsnicmp(buff, L"/F=", 3) == 0) { | |
408 | + ReadINI(buff+3, ts); | |
412 | 409 | } |
413 | 410 | } |
414 | 411 |
@@ -16,8 +16,8 @@ | ||
16 | 16 | static TInstVar *pvar; |
17 | 17 | static TInstVar InstVar; |
18 | 18 | |
19 | -static void PASCAL TTXParseParam(PCHAR Param, PTTSet ts, PCHAR DDETopic) { | |
20 | - MessageBox(NULL, Param, "TTXShowCommandLine", MB_OK|MB_ICONEXCLAMATION); | |
19 | +static void PASCAL TTXParseParam(wchar_t *Param, PTTSet ts, PCHAR DDETopic) { | |
20 | + MessageBoxW(NULL, Param, L"TTXShowCommandLine", MB_OK|MB_ICONEXCLAMATION); | |
21 | 21 | pvar->origParseParam(Param, ts, DDETopic); |
22 | 22 | } |
23 | 23 |
@@ -402,17 +402,17 @@ | ||
402 | 402 | } |
403 | 403 | } |
404 | 404 | |
405 | -static void PASCAL TTXParseParam(PCHAR Param, PTTSet ts, PCHAR DDETopic) { | |
406 | - char buff[1024]; | |
407 | - PCHAR next; | |
405 | +static void PASCAL TTXParseParam(wchar_t *Param, PTTSet ts, PCHAR DDETopic) { | |
406 | + wchar_t buff[1024]; | |
407 | + wchar_t *next; | |
408 | 408 | pvar->origParseParam(Param, ts, DDETopic); |
409 | 409 | |
410 | 410 | next = Param; |
411 | 411 | while (next = GetParam(buff, sizeof(buff), next)) { |
412 | - if (_strnicmp(buff, "/ttyplay-nowait", 16) == 0 || _strnicmp(buff, "/tpnw", 6) == 0) { | |
412 | + if (_wcsnicmp(buff, L"/ttyplay-nowait", 16) == 0 || _wcsnicmp(buff, L"/tpnw", 6) == 0) { | |
413 | 413 | pvar->nowait = TRUE; |
414 | 414 | } |
415 | - else if (_strnicmp(buff, "/TTYPLAY", 9) == 0 || _strnicmp(buff, "/TP", 4) == 0) { | |
415 | + else if (_wcsnicmp(buff, L"/TTYPLAY", 9) == 0 || _wcsnicmp(buff, L"/TP", 4) == 0) { | |
416 | 416 | pvar->enable = TRUE; |
417 | 417 | } |
418 | 418 | } |
@@ -48,6 +48,7 @@ | ||
48 | 48 | |
49 | 49 | #include "filesys.h" |
50 | 50 | #include "sendmem.h" |
51 | +#include "codeconv.h" | |
51 | 52 | |
52 | 53 | #define ServiceName "TERATERM" |
53 | 54 | #define ItemName "DATA" |
@@ -473,8 +474,11 @@ | ||
473 | 474 | char Temp[MaxStrLen + 2]; |
474 | 475 | strncpy_s(Temp, sizeof(Temp),"a ", _TRUNCATE); // dummy exe name |
475 | 476 | strncat_s(Temp,sizeof(Temp),ParamFileName,_TRUNCATE); |
476 | - if (LoadTTSET()) | |
477 | - (*ParseParam)(Temp, &ts, NULL); | |
477 | + if (LoadTTSET()) { | |
478 | + wchar_t *commandline = ToWcharA(Temp); | |
479 | + (*ParseParam)(commandline, &ts, NULL); | |
480 | + free(commandline); | |
481 | + } | |
478 | 482 | FreeTTSET(); |
479 | 483 | cv.NoMsg = 1; /* suppress error messages */ |
480 | 484 | PostMessage(HVTWin,WM_USER_COMMSTART,0,0); |
@@ -238,7 +238,6 @@ | ||
238 | 238 | WNDCLASSW wc; |
239 | 239 | RECT rect; |
240 | 240 | DWORD Style; |
241 | - char *Param; | |
242 | 241 | int CmdShow; |
243 | 242 | int fuLoad = LR_DEFAULTCOLOR; |
244 | 243 | BOOL isFirstInstance; |
@@ -277,9 +276,9 @@ | ||
277 | 276 | /* Parse command line parameters*/ |
278 | 277 | // 256バイト以上のコマンドラインパラメータ指定があると、BOF(Buffer Over Flow)で |
279 | 278 | // 落ちるバグを修正。(2007.6.12 maya) |
280 | - Param = GetCommandLine(); | |
281 | 279 | if (LoadTTSET()) { |
282 | - (*ParseParam)(Param, &ts, &(TopicName[0])); | |
280 | + wchar_t *ParamW = GetCommandLineW(); | |
281 | + (*ParseParam)(ParamW, &ts, &(TopicName[0])); | |
283 | 282 | } |
284 | 283 | FreeTTSET(); |
285 | 284 |
@@ -3516,10 +3515,11 @@ | ||
3516 | 3515 | ts.ProtocolFamily = GetHNRec.ProtocolFamily; |
3517 | 3516 | ts.ComPort = GetHNRec.ComPort; |
3518 | 3517 | |
3519 | - if ((GetHNRec.PortType==IdTCPIP) && | |
3520 | - LoadTTSET()) { | |
3521 | - (*ParseParam)(Command, &ts, NULL); | |
3518 | + if ((GetHNRec.PortType==IdTCPIP) && LoadTTSET()) { | |
3519 | + wchar_t *commandW = ToWcharA(Command); | |
3520 | + (*ParseParam)(commandW, &ts, NULL); | |
3522 | 3521 | FreeTTSET(); |
3522 | + free(commandW); | |
3523 | 3523 | } |
3524 | 3524 | SetKeyMap(); |
3525 | 3525 | if (ts.MacroFN[0]!=0) { |
@@ -175,11 +175,12 @@ | ||
175 | 175 | * TRUE: 変換成功 |
176 | 176 | * FALSE: 変換失敗 |
177 | 177 | */ |
178 | -static int SerialPortConfconvertStr2Id(enum serial_port_conf type, PCHAR str, WORD *id) | |
178 | +static int SerialPortConfconvertStr2Id(enum serial_port_conf type, const wchar_t *str, WORD *id) | |
179 | 179 | { |
180 | 180 | id_str_pair_t *conf; |
181 | 181 | int ret = FALSE; |
182 | 182 | int i; |
183 | + char *strA; | |
183 | 184 | |
184 | 185 | switch (type) { |
185 | 186 | case COM_DATABIT: |
@@ -198,25 +199,26 @@ | ||
198 | 199 | conf = NULL; |
199 | 200 | break; |
200 | 201 | } |
201 | - if (conf == NULL) | |
202 | - goto error; | |
202 | + if (conf == NULL) { | |
203 | + return FALSE; | |
204 | + } | |
203 | 205 | |
206 | + strA = ToCharW(str); | |
204 | 207 | for (i = 0 ; ; i++) { |
205 | - if (conf[i].id == IDENDMARK) | |
206 | - goto error; | |
207 | - if (_stricmp(conf[i].str, str) == 0) { | |
208 | + if (conf[i].id == IDENDMARK) { | |
209 | + ret = FALSE; | |
210 | + break; | |
211 | + } | |
212 | + if (_stricmp(conf[i].str, strA) == 0) { | |
208 | 213 | *id = conf[i].id; |
214 | + ret = TRUE; | |
209 | 215 | break; |
210 | 216 | } |
211 | 217 | } |
212 | - | |
213 | - ret = TRUE; | |
214 | - | |
215 | -error: | |
216 | - return (ret); | |
218 | + free(strA); | |
219 | + return ret; | |
217 | 220 | } |
218 | 221 | |
219 | - | |
220 | 222 | WORD str2id(PCHAR far * List, PCHAR str, WORD DefId) |
221 | 223 | { |
222 | 224 | WORD i; |
@@ -247,31 +249,32 @@ | ||
247 | 249 | strncpy_s(str, destlen, List[i], _TRUNCATE); |
248 | 250 | } |
249 | 251 | |
250 | -int IconName2IconId(const char *name) { | |
252 | +static int IconName2IconId(const wchar_t *name) | |
253 | +{ | |
251 | 254 | int id; |
252 | 255 | |
253 | - if (_stricmp(name, "tterm") == 0) { | |
256 | + if (_wcsicmp(name, L"tterm") == 0) { | |
254 | 257 | id = IDI_TTERM; |
255 | 258 | } |
256 | - else if (_stricmp(name, "vt") == 0) { | |
259 | + else if (_wcsicmp(name, L"vt") == 0) { | |
257 | 260 | id = IDI_VT; |
258 | 261 | } |
259 | - else if (_stricmp(name, "tek") == 0) { | |
262 | + else if (_wcsicmp(name, L"tek") == 0) { | |
260 | 263 | id = IDI_TEK; |
261 | 264 | } |
262 | - else if (_stricmp(name, "tterm_classic") == 0) { | |
265 | + else if (_wcsicmp(name, L"tterm_classic") == 0) { | |
263 | 266 | id = IDI_TTERM_CLASSIC; |
264 | 267 | } |
265 | - else if (_stricmp(name, "vt_classic") == 0) { | |
268 | + else if (_wcsicmp(name, L"vt_classic") == 0) { | |
266 | 269 | id = IDI_VT_CLASSIC; |
267 | 270 | } |
268 | - else if (_stricmp(name, "tterm_3d") == 0) { | |
271 | + else if (_wcsicmp(name, L"tterm_3d") == 0) { | |
269 | 272 | id = IDI_TTERM_3D; |
270 | 273 | } |
271 | - else if (_stricmp(name, "vt_3d") == 0) { | |
274 | + else if (_wcsicmp(name, L"vt_3d") == 0) { | |
272 | 275 | id = IDI_VT_3D; |
273 | 276 | } |
274 | - else if (_stricmp(name, "cygterm") == 0) { | |
277 | + else if (_wcsicmp(name, L"cygterm") == 0) { | |
275 | 278 | id = IDI_CYGTERM; |
276 | 279 | } |
277 | 280 | else { |
@@ -280,6 +283,15 @@ | ||
280 | 283 | return id; |
281 | 284 | } |
282 | 285 | |
286 | +static int IconName2IconIdA(const char *name) | |
287 | +{ | |
288 | + wchar_t *nameW = ToWcharA(name); | |
289 | + int id = IconName2IconId(nameW); | |
290 | + free(nameW); | |
291 | + return id; | |
292 | +} | |
293 | + | |
294 | + | |
283 | 295 | void IconId2IconName(char *name, int len, int id) { |
284 | 296 | char *icon; |
285 | 297 | switch (id) { |
@@ -719,6 +731,7 @@ | ||
719 | 731 | int i; |
720 | 732 | HDC TmpDC; |
721 | 733 | char Temp[MAX_PATH], Temp2[MAX_PATH], *p; |
734 | + wchar_t TempW[MAX_PATH]; | |
722 | 735 | |
723 | 736 | ts->Minimize = 0; |
724 | 737 | ts->HideWindow = 0; |
@@ -1198,30 +1211,30 @@ | ||
1198 | 1211 | ts->Baud = GetPrivateProfileInt(Section, "BaudRate", 9600, FName); |
1199 | 1212 | |
1200 | 1213 | /* Parity */ |
1201 | - GetPrivateProfileString(Section, "Parity", "", | |
1202 | - Temp, sizeof(Temp), FName); | |
1203 | - if (!SerialPortConfconvertStr2Id(COM_PARITY, Temp, &ts->Parity)) { | |
1214 | + GetPrivateProfileStringW(SectionW, L"Parity", L"", | |
1215 | + TempW, _countof(TempW), FName); | |
1216 | + if (!SerialPortConfconvertStr2Id(COM_PARITY, TempW, &ts->Parity)) { | |
1204 | 1217 | ts->Parity = IdParityNone; |
1205 | 1218 | } |
1206 | 1219 | |
1207 | 1220 | /* Data bit */ |
1208 | - GetPrivateProfileString(Section, "DataBit", "", | |
1209 | - Temp, sizeof(Temp), FName); | |
1210 | - if (!SerialPortConfconvertStr2Id(COM_DATABIT, Temp, &ts->DataBit)) { | |
1221 | + GetPrivateProfileStringW(SectionW, L"DataBit", L"", | |
1222 | + TempW, _countof(TempW), FName); | |
1223 | + if (!SerialPortConfconvertStr2Id(COM_DATABIT, TempW, &ts->DataBit)) { | |
1211 | 1224 | ts->DataBit = IdDataBit8; |
1212 | 1225 | } |
1213 | 1226 | |
1214 | 1227 | /* Stop bit */ |
1215 | - GetPrivateProfileString(Section, "StopBit", "", | |
1216 | - Temp, sizeof(Temp), FName); | |
1217 | - if (!SerialPortConfconvertStr2Id(COM_STOPBIT, Temp, &ts->StopBit)) { | |
1228 | + GetPrivateProfileStringW(SectionW, L"StopBit", L"", | |
1229 | + TempW, _countof(TempW), FName); | |
1230 | + if (!SerialPortConfconvertStr2Id(COM_STOPBIT, TempW, &ts->StopBit)) { | |
1218 | 1231 | ts->StopBit = IdStopBit1; |
1219 | 1232 | } |
1220 | 1233 | |
1221 | 1234 | /* Flow control */ |
1222 | - GetPrivateProfileString(Section, "FlowCtrl", "", | |
1223 | - Temp, sizeof(Temp), FName); | |
1224 | - if (!SerialPortConfconvertStr2Id(COM_FLOWCTRL, Temp, &ts->Flow)) { | |
1235 | + GetPrivateProfileStringW(SectionW, L"FlowCtrl", L"", | |
1236 | + TempW, _countof(TempW), FName); | |
1237 | + if (!SerialPortConfconvertStr2Id(COM_FLOWCTRL, TempW, &ts->Flow)) { | |
1225 | 1238 | ts->Flow = IdFlowNone; |
1226 | 1239 | } |
1227 | 1240 |
@@ -1820,12 +1833,12 @@ | ||
1820 | 1833 | // VT Window Icon |
1821 | 1834 | GetPrivateProfileString(Section, "VTIcon", "Default", |
1822 | 1835 | Temp, sizeof(Temp), FName); |
1823 | - ts->VTIcon = IconName2IconId(Temp); | |
1836 | + ts->VTIcon = IconName2IconIdA(Temp); | |
1824 | 1837 | |
1825 | 1838 | // Tek Window Icon |
1826 | 1839 | GetPrivateProfileString(Section, "TEKIcon", "Default", |
1827 | 1840 | Temp, sizeof(Temp), FName); |
1828 | - ts->TEKIcon = IconName2IconId(Temp); | |
1841 | + ts->TEKIcon = IconName2IconIdA(Temp); | |
1829 | 1842 | |
1830 | 1843 | // Unknown Unicode Character |
1831 | 1844 | ts->UnknownUnicodeCharaAsWide = |
@@ -2254,7 +2267,7 @@ | ||
2254 | 2267 | if (ts->UnicodeAmbiguousWidth < 1 || 2 < ts->UnicodeAmbiguousWidth) { |
2255 | 2268 | ts->UnicodeAmbiguousWidth = 1; |
2256 | 2269 | } |
2257 | - ts->UnicodeEmojiOverride = GetOnOff(Section, "UnicodeEmojiOverride", FName, FALSE); | |
2270 | + ts->UnicodeEmojiOverride = (BYTE)GetOnOff(Section, "UnicodeEmojiOverride", FName, FALSE); | |
2258 | 2271 | ts->UnicodeEmojiWidth = GetPrivateProfileInt(Section, "UnicodeEmojiWidth", 1, FName); |
2259 | 2272 | if (ts->UnicodeEmojiWidth < 1 || 2 < ts->UnicodeEmojiWidth) { |
2260 | 2273 | ts->UnicodeEmojiWidth = 1; |
@@ -3725,7 +3738,7 @@ | ||
3725 | 3738 | } |
3726 | 3739 | #endif |
3727 | 3740 | |
3728 | -static int ParsePortName(char *buff) | |
3741 | +static int ParsePortName(const char *buff) | |
3729 | 3742 | { |
3730 | 3743 | int port = parse_port_from_buf(buff); |
3731 | 3744 |
@@ -3735,6 +3748,14 @@ | ||
3735 | 3748 | return 0; |
3736 | 3749 | } |
3737 | 3750 | |
3751 | +static int ParsePortNameW(const wchar_t *buff) | |
3752 | +{ | |
3753 | + char *buffA = ToCharW(buff); | |
3754 | + int port = ParsePortName(buffA); | |
3755 | + free(buffA); | |
3756 | + return port; | |
3757 | +} | |
3758 | + | |
3738 | 3759 | static void ParseHostName(char *HostStr, WORD * port) |
3739 | 3760 | { |
3740 | 3761 | /* |
@@ -3824,13 +3845,12 @@ | ||
3824 | 3845 | } |
3825 | 3846 | |
3826 | 3847 | |
3827 | -void PASCAL ParseParam(PCHAR Param, PTTSet ts, PCHAR DDETopic) | |
3848 | +void PASCAL ParseParam(wchar_t *Param, PTTSet ts, PCHAR DDETopic) | |
3828 | 3849 | { |
3829 | 3850 | int i, pos, c; |
3830 | 3851 | //int param_top; |
3831 | - char Temp[MaxStrLen]; // ttpmacroから呼ばれることを想定しMaxStrLenサイズとする | |
3832 | - char Temp2[MaxStrLen]; | |
3833 | - char TempDir[MAXPATHLEN]; | |
3852 | + wchar_t Temp[MaxStrLen]; // ttpmacroから呼ばれることを想定しMaxStrLenサイズとする | |
3853 | + wchar_t Temp2[MaxStrLen]; | |
3834 | 3854 | WORD ParamPort = 0; |
3835 | 3855 | WORD ParamCom = 0; |
3836 | 3856 | WORD ParamTCP = 0; |
@@ -3839,7 +3859,7 @@ | ||
3839 | 3859 | DWORD ParamBaud = BaudNone; |
3840 | 3860 | BOOL HostNameFlag = FALSE; |
3841 | 3861 | BOOL JustAfterHost = FALSE; |
3842 | - PCHAR start, cur, next, p; | |
3862 | + wchar_t *start, *cur, *next; | |
3843 | 3863 | |
3844 | 3864 | ts->HostName[0] = 0; |
3845 | 3865 | //ts->KeyCnfFN[0] = 0; |
@@ -3855,21 +3875,20 @@ | ||
3855 | 3875 | DDETopic[0] = 0; |
3856 | 3876 | i = 0; |
3857 | 3877 | /* the first term shuld be executable filename of Tera Term */ |
3858 | - start = GetParam(Temp, sizeof(Temp), Param); | |
3878 | + start = GetParam(Temp, _countof(Temp), Param); | |
3859 | 3879 | |
3860 | 3880 | cur = start; |
3861 | - while (next = GetParam(Temp, sizeof(Temp), cur)) { | |
3862 | - DequoteParam(Temp, sizeof(Temp), Temp); | |
3863 | - if (_strnicmp(Temp, "/F=", 3) == 0) { /* setup filename */ | |
3864 | - strncpy_s(Temp2, sizeof(Temp2), &Temp[3], _TRUNCATE); | |
3865 | - if (strlen(Temp2) > 0) { | |
3866 | - ConvFName(ts->HomeDir, Temp2, sizeof(Temp2), ".INI", Temp, | |
3867 | - sizeof(Temp)); | |
3868 | - if (_stricmp(ts->SetupFName, Temp) != 0) { | |
3869 | - strncpy_s(ts->SetupFName, sizeof(ts->SetupFName), Temp, | |
3870 | - _TRUNCATE); | |
3881 | + while (next = GetParam(Temp, _countof(Temp), cur)) { | |
3882 | + DequoteParam(Temp, _countof(Temp), Temp); | |
3883 | + if (_wcsnicmp(Temp, L"/F=", 3) == 0) { /* setup filename */ | |
3884 | + wcsncpy_s(Temp2, _countof(Temp2), &Temp[3], _TRUNCATE); | |
3885 | + if (Temp2[0] != 0) { | |
3886 | + ConvFNameW(ts->HomeDirW, Temp2, _countof(Temp2), L".INI", Temp, | |
3887 | + _countof(Temp)); | |
3888 | + if (_wcsicmp(ts->SetupFNameW, Temp) != 0) { | |
3871 | 3889 | free(ts->SetupFNameW); |
3872 | - ts->SetupFNameW = ToWcharA(ts->SetupFName); | |
3890 | + ts->SetupFNameW = _wcsdup(Temp); | |
3891 | + WideCharToACP_t(ts->SetupFNameW, ts->SetupFName, _countof(ts->SetupFName)); | |
3873 | 3892 | ReadIniFile(ts->SetupFNameW, ts); |
3874 | 3893 | } |
3875 | 3894 | } |
@@ -3878,8 +3897,8 @@ | ||
3878 | 3897 | } |
3879 | 3898 | |
3880 | 3899 | cur = start; |
3881 | - while (next = GetParam(Temp, sizeof(Temp), cur)) { | |
3882 | - DequoteParam(Temp, sizeof(Temp), Temp); | |
3900 | + while (next = GetParam(Temp, _countof(Temp), cur)) { | |
3901 | + DequoteParam(Temp, _countof(Temp), Temp); | |
3883 | 3902 | |
3884 | 3903 | if (HostNameFlag) { |
3885 | 3904 | JustAfterHost = TRUE; |
@@ -3886,129 +3905,136 @@ | ||
3886 | 3905 | HostNameFlag = FALSE; |
3887 | 3906 | } |
3888 | 3907 | |
3889 | - if (_strnicmp(Temp, "/AUTOWINCLOSE=", 14) == 0) { /* AutoWinClose=on|off */ | |
3890 | - char *s = &Temp[14]; | |
3891 | - if (_stricmp(s, "on") == 0) | |
3908 | + if (_wcsnicmp(Temp, L"/AUTOWINCLOSE=", 14) == 0) { /* AutoWinClose=on|off */ | |
3909 | + wchar_t *s = &Temp[14]; | |
3910 | + if (_wcsicmp(s, L"on") == 0) | |
3892 | 3911 | ts->AutoWinClose = 1; |
3893 | 3912 | else |
3894 | 3913 | ts->AutoWinClose = 0; |
3895 | 3914 | } |
3896 | - else if (_strnicmp(Temp, "/SPEED=", 7) == 0) { /* Serial port speed */ | |
3915 | + else if (_wcsnicmp(Temp, L"/SPEED=", 7) == 0) { /* Serial port speed */ | |
3897 | 3916 | ParamPort = IdSerial; |
3898 | - ParamBaud = atoi(&Temp[7]); | |
3917 | + ParamBaud = _wtoi(&Temp[7]); | |
3899 | 3918 | } |
3900 | - else if (_strnicmp(Temp, "/BAUD=", 6) == 0) { /* for backward compatibility */ | |
3919 | + else if (_wcsnicmp(Temp, L"/BAUD=", 6) == 0) { /* for backward compatibility */ | |
3901 | 3920 | ParamPort = IdSerial; |
3902 | - ParamBaud = atoi(&Temp[6]); | |
3921 | + ParamBaud = _wtoi(&Temp[6]); | |
3903 | 3922 | } |
3904 | - else if (_stricmp(Temp, "/B") == 0) { /* telnet binary */ | |
3923 | + else if (_wcsicmp(Temp, L"/B") == 0) { /* telnet binary */ | |
3905 | 3924 | ParamPort = IdTCPIP; |
3906 | 3925 | ParamBin = 1; |
3907 | 3926 | } |
3908 | - else if (_strnicmp(Temp, "/C=", 3) == 0) { /* COM port num */ | |
3927 | + else if (_wcsnicmp(Temp, L"/C=", 3) == 0) { /* COM port num */ | |
3909 | 3928 | ParamPort = IdSerial; |
3910 | - ParamCom = atoi(&Temp[3]); | |
3929 | + ParamCom = _wtoi(&Temp[3]); | |
3911 | 3930 | if ((ParamCom < 1) || (ParamCom > ts->MaxComPort)) |
3912 | 3931 | ParamCom = 0; |
3913 | 3932 | } |
3914 | - else if (_strnicmp(Temp, "/CDATABIT=", 10) == 0) { /* COM data bit */ | |
3933 | + else if (_wcsnicmp(Temp, L"/CDATABIT=", 10) == 0) { /* COM data bit */ | |
3915 | 3934 | ParamPort = IdSerial; |
3916 | 3935 | SerialPortConfconvertStr2Id(COM_DATABIT, &Temp[10], &ts->DataBit); |
3917 | 3936 | } |
3918 | - else if (_strnicmp(Temp, "/CPARITY=", 9) == 0) { /* COM Parity */ | |
3937 | + else if (_wcsnicmp(Temp, L"/CPARITY=", 9) == 0) { /* COM Parity */ | |
3919 | 3938 | ParamPort = IdSerial; |
3920 | 3939 | SerialPortConfconvertStr2Id(COM_PARITY, &Temp[9], &ts->Parity); |
3921 | 3940 | } |
3922 | - else if (_strnicmp(Temp, "/CSTOPBIT=", 10) == 0) { /* COM Stop bit */ | |
3941 | + else if (_wcsnicmp(Temp, L"/CSTOPBIT=", 10) == 0) { /* COM Stop bit */ | |
3923 | 3942 | ParamPort = IdSerial; |
3924 | 3943 | SerialPortConfconvertStr2Id(COM_STOPBIT, &Temp[10], &ts->StopBit); |
3925 | 3944 | } |
3926 | - else if (_strnicmp(Temp, "/CFLOWCTRL=", 11) == 0) { /* COM Flow control */ | |
3945 | + else if (_wcsnicmp(Temp, L"/CFLOWCTRL=", 11) == 0) { /* COM Flow control */ | |
3927 | 3946 | ParamPort = IdSerial; |
3928 | 3947 | SerialPortConfconvertStr2Id(COM_FLOWCTRL, &Temp[11], &ts->Flow); |
3929 | 3948 | } |
3930 | - else if (_strnicmp(Temp, "/CDELAYPERCHAR=", 15) == 0) { /* COM Transmit delay per character (in msec) */ | |
3949 | + else if (_wcsnicmp(Temp, L"/CDELAYPERCHAR=", 15) == 0) { /* COM Transmit delay per character (in msec) */ | |
3931 | 3950 | WORD val = 0; |
3932 | 3951 | |
3933 | 3952 | ParamPort = IdSerial; |
3934 | - val = atoi(&Temp[15]); | |
3953 | + val = _wtoi(&Temp[15]); | |
3935 | 3954 | ts->DelayPerChar = val; |
3936 | 3955 | } |
3937 | - else if (_strnicmp(Temp, "/CDELAYPERLINE=", 15) == 0) { /* COM Transmit delay per line (in msec) */ | |
3956 | + else if (_wcsnicmp(Temp, L"/CDELAYPERLINE=", 15) == 0) { /* COM Transmit delay per line (in msec) */ | |
3938 | 3957 | WORD val = 0; |
3939 | 3958 | |
3940 | 3959 | ParamPort = IdSerial; |
3941 | - val = atoi(&Temp[15]); | |
3960 | + val = _wtoi(&Temp[15]); | |
3942 | 3961 | ts->DelayPerLine = val; |
3943 | 3962 | } |
3944 | - else if (_stricmp(Temp, "/WAITCOM") == 0) { /* wait COM arrival */ | |
3963 | + else if (_wcsicmp(Temp, L"/WAITCOM") == 0) { /* wait COM arrival */ | |
3945 | 3964 | ts->WaitCom = 1; |
3946 | 3965 | } |
3947 | - else if (_strnicmp(Temp, "/D=", 3) == 0) { | |
3948 | - if (DDETopic != NULL) | |
3949 | - strncpy_s(DDETopic, 21, &Temp[3], _TRUNCATE); // 21 = sizeof(TopicName) | |
3966 | + else if (_wcsnicmp(Temp, L"/D=", 3) == 0) { | |
3967 | + if (DDETopic != NULL) { | |
3968 | + char *DDETopicA = ToCharW(&Temp[3]); | |
3969 | + strncpy_s(DDETopic, 21, DDETopicA, _TRUNCATE); // 21 = sizeof(TopicName) | |
3970 | + free(DDETopicA); | |
3971 | + } | |
3950 | 3972 | } |
3951 | 3973 | // "New connection" ダイアログを表示しない (2008.11.14 maya) |
3952 | - else if (_stricmp(Temp, "/DS") == 0) { | |
3974 | + else if (_wcsicmp(Temp, L"/DS") == 0) { | |
3953 | 3975 | ts->HostDialogOnStartup = FALSE; |
3954 | 3976 | } |
3955 | 3977 | // TCPLocalEcho/TCPCRSend を無効にする (maya 2007.4.25) |
3956 | - else if (_stricmp(Temp, "/E") == 0) { | |
3978 | + else if (_wcsicmp(Temp, L"/E") == 0) { | |
3957 | 3979 | ts->DisableTCPEchoCR = TRUE; |
3958 | 3980 | } |
3959 | 3981 | // "New connection" ダイアログを表示する (2013.10.08 maya) |
3960 | - else if (_stricmp(Temp, "/ES") == 0) { | |
3982 | + else if (_wcsicmp(Temp, L"/ES") == 0) { | |
3961 | 3983 | ts->HostDialogOnStartup = TRUE; |
3962 | 3984 | } |
3963 | - else if (_strnicmp(Temp, "/FD=", 4) == 0) { /* file transfer directory */ | |
3964 | - strncpy_s(Temp2, sizeof(Temp2), &Temp[4], _TRUNCATE); | |
3965 | - if (strlen(Temp2) > 0) { | |
3966 | - _getcwd(TempDir, sizeof(TempDir)); | |
3967 | - if (_chdir(Temp2) == 0) | |
3968 | - strncpy_s(ts->FileDir, sizeof(ts->FileDir), Temp2, | |
3985 | + else if (_wcsnicmp(Temp, L"/FD=", 4) == 0) { /* file transfer directory */ | |
3986 | + wcsncpy_s(Temp2, _countof(Temp2), &Temp[4], _TRUNCATE); | |
3987 | + if (wcslen(Temp2) > 0) { | |
3988 | + char TempDir[MAXPATHLEN]; | |
3989 | + _getcwd(TempDir, _countof(TempDir)); | |
3990 | + if (_wchdir(Temp2) == 0) { | |
3991 | + char *FileDirA = ToCharW(Temp2); | |
3992 | + strncpy_s(ts->FileDir, sizeof(ts->FileDir), FileDirA, | |
3969 | 3993 | _TRUNCATE); |
3994 | + free(FileDirA); | |
3995 | + } | |
3970 | 3996 | _chdir(TempDir); |
3971 | 3997 | } |
3972 | 3998 | } |
3973 | - else if (_stricmp(Temp, "/H") == 0) /* hide title bar */ | |
3999 | + else if (_wcsicmp(Temp, L"/H") == 0) /* hide title bar */ | |
3974 | 4000 | ts->HideTitle = 1; |
3975 | - else if (_stricmp(Temp, "/I") == 0) /* iconize */ | |
4001 | + else if (_wcsicmp(Temp, L"/I") == 0) /* iconize */ | |
3976 | 4002 | ts->Minimize = 1; |
3977 | - else if (_strnicmp(Temp, "/K=", 3) == 0) { /* Keyboard setup file */ | |
3978 | - strncpy_s(Temp2, sizeof(Temp2), &Temp[3], _TRUNCATE); | |
3979 | - ConvFName(ts->HomeDir, Temp2, sizeof(Temp2), ".CNF", | |
3980 | - ts->KeyCnfFN, sizeof(ts->KeyCnfFN)); | |
3981 | - ts->KeyCnfFNW = ToWcharA(ts->KeyCnfFN); | |
4003 | + else if (_wcsnicmp(Temp, L"/K=", 3) == 0) { /* Keyboard setup file */ | |
4004 | + wcsncpy_s(Temp2, _countof(Temp2), &Temp[3], _TRUNCATE); | |
4005 | + ConvFNameW(ts->HomeDirW, Temp2, _countof(Temp2), L".CNF", Temp, _countof(Temp)); | |
4006 | + ts->KeyCnfFNW = _wcsdup(Temp); | |
4007 | + WideCharToACP_t(ts->KeyCnfFNW, ts->KeyCnfFN, _countof(ts->KeyCnfFN)); | |
3982 | 4008 | } |
3983 | - else if ((_strnicmp(Temp, "/KR=", 4) == 0) || | |
3984 | - (_strnicmp(Temp, "/KT=", 4) == 0)) { /* kanji code */ | |
3985 | - if (_stricmp(&Temp[4], "UTF8m") == 0 || | |
3986 | - _stricmp(&Temp[4], "UTF-8m") == 0) | |
4009 | + else if ((_wcsnicmp(Temp, L"/KR=", 4) == 0) || | |
4010 | + (_wcsnicmp(Temp, L"/KT=", 4) == 0)) { /* kanji code */ | |
4011 | + if (_wcsicmp(&Temp[4], L"UTF8m") == 0 || | |
4012 | + _wcsicmp(&Temp[4], L"UTF-8m") == 0) | |
3987 | 4013 | c = IdUTF8m; |
3988 | - else if (_stricmp(&Temp[4], "UTF8") == 0 || | |
3989 | - _stricmp(&Temp[4], "UTF-8") == 0) | |
4014 | + else if (_wcsicmp(&Temp[4], L"UTF8") == 0 || | |
4015 | + _wcsicmp(&Temp[4], L"UTF-8") == 0) | |
3990 | 4016 | c = IdUTF8; |
3991 | - else if (_stricmp(&Temp[4], "SJIS") == 0 || | |
3992 | - _stricmp(&Temp[4], "KS5601") == 0) | |
4017 | + else if (_wcsicmp(&Temp[4], L"SJIS") == 0 || | |
4018 | + _wcsicmp(&Temp[4], L"KS5601") == 0) | |
3993 | 4019 | c = IdSJIS; |
3994 | - else if (_stricmp(&Temp[4], "EUC") == 0) | |
4020 | + else if (_wcsicmp(&Temp[4], L"EUC") == 0) | |
3995 | 4021 | c = IdEUC; |
3996 | - else if (_stricmp(&Temp[4], "JIS") == 0) | |
4022 | + else if (_wcsicmp(&Temp[4], L"JIS") == 0) | |
3997 | 4023 | c = IdJIS; |
3998 | 4024 | else |
3999 | 4025 | c = -1; |
4000 | 4026 | if (c != -1) { |
4001 | - if (_strnicmp(Temp, "/KR=", 4) == 0) | |
4027 | + if (_wcsnicmp(Temp, L"/KR=", 4) == 0) | |
4002 | 4028 | ts->KanjiCode = c; |
4003 | 4029 | else |
4004 | 4030 | ts->KanjiCodeSend = c; |
4005 | 4031 | } |
4006 | 4032 | } |
4007 | - else if (_strnicmp(Temp, "/L=", 3) == 0) { /* log file */ | |
4008 | - strncpy_s(ts->LogFN, sizeof(ts->LogFN), &Temp[3], _TRUNCATE); | |
4009 | - ts->LogFNW = ToWcharA(ts->LogFN); | |
4033 | + else if (_wcsnicmp(Temp, L"/L=", 3) == 0) { /* log file */ | |
4034 | + ts->LogFNW = _wcsdup(&Temp[3]); | |
4035 | + WideCharToACP_t(ts->LogFNW, ts->LogFN, _countof(ts->LogFN)); | |
4010 | 4036 | } |
4011 | - else if (_strnicmp(Temp, "/LA=", 4) == 0) { /* language */ | |
4037 | + else if (_wcsnicmp(Temp, L"/LA=", 4) == 0) { /* language */ | |
4012 | 4038 | switch (Temp[4]) { |
4013 | 4039 | case 'E': |
4014 | 4040 | case 'e': |
@@ -4027,112 +4053,115 @@ | ||
4027 | 4053 | ts->Language = IdUtf8; break; |
4028 | 4054 | } |
4029 | 4055 | } |
4030 | - else if (_strnicmp(Temp, "/MN=", 4) == 0) { /* multicastname */ | |
4031 | - strncpy_s(ts->MulticastName, sizeof(ts->MulticastName), &Temp[4], _TRUNCATE); | |
4056 | + else if (_wcsnicmp(Temp, L"/MN=", 4) == 0) { /* multicastname */ | |
4057 | + WideCharToACP_t(&Temp[4], ts->MulticastName, _countof(ts->MulticastName)); | |
4032 | 4058 | } |
4033 | - else if (_strnicmp(Temp, "/M=", 3) == 0) { /* macro filename */ | |
4059 | + else if (_wcsnicmp(Temp, L"/M=", 3) == 0) { /* macro filename */ | |
4034 | 4060 | if ((Temp[3] == 0) || (Temp[3] == '*')) { |
4035 | - strncpy_s(ts->MacroFN, sizeof(ts->MacroFN), "*", | |
4036 | - _TRUNCATE); | |
4061 | + ts->MacroFNW = _wcsdup(L"*"); | |
4037 | 4062 | } else { |
4038 | - strncpy_s(Temp2, sizeof(Temp2), &Temp[3], _TRUNCATE); | |
4039 | - ConvFName(ts->HomeDir, Temp2, sizeof(Temp2), ".TTL", | |
4040 | - ts->MacroFN, sizeof(ts->MacroFN)); | |
4063 | + wcsncpy_s(Temp2, _countof(Temp2), &Temp[3], _TRUNCATE); | |
4064 | + ConvFNameW(ts->HomeDirW, Temp2, _countof(Temp2), L".TTL", Temp, _countof(Temp)); | |
4065 | + ts->MacroFNW = _wcsdup(Temp); | |
4041 | 4066 | } |
4067 | + WideCharToACP_t(ts->MacroFNW, ts->MacroFN, _countof(ts->MacroFN)); | |
4042 | 4068 | /* Disable auto connect to serial when macro mode (2006.9.15 maya) */ |
4043 | - ts->MacroFNW = ToWcharA(ts->MacroFN); | |
4044 | 4069 | ts->ComAutoConnect = FALSE; |
4045 | 4070 | } |
4046 | - else if (_stricmp(Temp, "/M") == 0) { /* macro option without file name */ | |
4047 | - strncpy_s(ts->MacroFN, sizeof(ts->MacroFN), "*", _TRUNCATE); | |
4048 | - ts->MacroFNW = ToWcharA(ts->MacroFN); | |
4071 | + else if (_wcsicmp(Temp, L"/M") == 0) { /* macro option without file name */ | |
4072 | + ts->MacroFNW = _wcsdup(L"*"); | |
4073 | + WideCharToACP_t(ts->MacroFNW, ts->MacroFN, _countof(ts->MacroFN)); | |
4049 | 4074 | /* Disable auto connect to serial when macro mode (2006.9.15 maya) */ |
4050 | 4075 | ts->ComAutoConnect = FALSE; |
4051 | 4076 | } |
4052 | - else if (_stricmp(Temp, "/NOLOG") == 0) { /* disable auto logging */ | |
4077 | + else if (_wcsicmp(Temp, L"/NOLOG") == 0) { /* disable auto logging */ | |
4053 | 4078 | ts->LogFN[0] = '\0'; |
4054 | 4079 | ts->LogAutoStart = 0; |
4055 | 4080 | } |
4056 | - else if (_strnicmp(Temp, "/OSC52=", 7) == 0) { /* Clipboard access */ | |
4081 | + else if (_wcsnicmp(Temp, L"/OSC52=", 7) == 0) { /* Clipboard access */ | |
4057 | 4082 | ts->CtrlFlag &= ~CSF_CBMASK; |
4058 | - if (_stricmp(&Temp[7], "on") == 0 || _stricmp(&Temp[7], "readwrite") == 0) | |
4083 | + if (_wcsicmp(&Temp[7], L"on") == 0 || _wcsicmp(&Temp[7], L"readwrite") == 0) | |
4059 | 4084 | ts->CtrlFlag |= CSF_CBRW; |
4060 | - else if (_stricmp(&Temp[7], "read") == 0) | |
4085 | + else if (_wcsicmp(&Temp[7], L"read") == 0) | |
4061 | 4086 | ts->CtrlFlag |= CSF_CBREAD; |
4062 | - else if (_stricmp(&Temp[7], "write") == 0) | |
4087 | + else if (_wcsicmp(&Temp[7], L"write") == 0) | |
4063 | 4088 | ts->CtrlFlag |= CSF_CBWRITE; |
4064 | - else if (_stricmp(&Temp[7], "off") == 0) | |
4089 | + else if (_wcsicmp(&Temp[7], L"off") == 0) | |
4065 | 4090 | ts->CtrlFlag |= CSF_CBNONE; |
4066 | 4091 | } |
4067 | - else if (_strnicmp(Temp, "/P=", 3) == 0) { /* TCP port num */ | |
4092 | + else if (_wcsnicmp(Temp, L"/P=", 3) == 0) { /* TCP port num */ | |
4068 | 4093 | ParamPort = IdTCPIP; |
4069 | - ParamTCP = ParsePortName(&Temp[3]); | |
4094 | + ParamTCP = ParsePortNameW(&Temp[3]); | |
4070 | 4095 | } |
4071 | - else if (_stricmp(Temp, "/PIPE") == 0 || | |
4072 | - _stricmp(Temp, "/NAMEDPIPE") == 0) { /* 名前付きパイプ */ | |
4096 | + else if (_wcsicmp(Temp, L"/PIPE") == 0 || | |
4097 | + _wcsicmp(Temp, L"/NAMEDPIPE") == 0) { /* 名前付きパイプ */ | |
4073 | 4098 | ParamPort = IdNamedPipe; |
4074 | 4099 | } |
4075 | - else if (_strnicmp(Temp, "/R=", 3) == 0) { /* Replay filename */ | |
4076 | - strncpy_s(Temp2, sizeof(Temp2), &Temp[3], _TRUNCATE); | |
4077 | - ConvFName(ts->HomeDir, Temp2, sizeof(Temp2), "", ts->HostName, | |
4078 | - sizeof(ts->HostName)); | |
4100 | + else if (_wcsnicmp(Temp, L"/R=", 3) == 0) { /* Replay filename */ | |
4101 | + wcsncpy_s(Temp2, _countof(Temp2), &Temp[3], _TRUNCATE); | |
4102 | + ConvFNameW(ts->HomeDirW, Temp2, _countof(Temp2), L"", Temp, _countof(Temp)); | |
4103 | + WideCharToACP_t(Temp, ts->HostName, _countof(ts->HostName)); | |
4079 | 4104 | if (strlen(ts->HostName) > 0) |
4080 | 4105 | ParamPort = IdFile; |
4081 | 4106 | } |
4082 | - else if (_stricmp(Temp, "/T=0") == 0) { /* telnet disable */ | |
4107 | + else if (_wcsicmp(Temp, L"/T=0") == 0) { /* telnet disable */ | |
4083 | 4108 | ParamPort = IdTCPIP; |
4084 | 4109 | ParamTel = 0; |
4085 | 4110 | } |
4086 | - else if (_stricmp(Temp, "/T=1") == 0) { /* telnet enable */ | |
4111 | + else if (_wcsicmp(Temp, L"/T=1") == 0) { /* telnet enable */ | |
4087 | 4112 | ParamPort = IdTCPIP; |
4088 | 4113 | ParamTel = 1; |
4089 | 4114 | } |
4090 | - else if (_strnicmp(Temp, "/TEKICON=", 9) == 0) { /* Tek window icon */ | |
4115 | + else if (_wcsnicmp(Temp, L"/TEKICON=", 9) == 0) { /* Tek window icon */ | |
4091 | 4116 | ts->TEKIcon = IconName2IconId(&Temp[9]); |
4092 | 4117 | } |
4093 | - else if (_strnicmp(Temp, "/VTICON=", 8) == 0) { /* VT window icon */ | |
4118 | + else if (_wcsnicmp(Temp, L"/VTICON=", 8) == 0) { /* VT window icon */ | |
4094 | 4119 | ts->VTIcon = IconName2IconId(&Temp[8]); |
4095 | 4120 | } |
4096 | - else if (_stricmp(Temp, "/V") == 0) { /* invisible */ | |
4121 | + else if (_wcsicmp(Temp, L"/V") == 0) { /* invisible */ | |
4097 | 4122 | ts->HideWindow = 1; |
4098 | 4123 | } |
4099 | - else if (_strnicmp(Temp, "/W=", 3) == 0) { /* Window title */ | |
4100 | - strncpy_s(ts->Title, sizeof(ts->Title), &Temp[3], _TRUNCATE); | |
4124 | + else if (_wcsnicmp(Temp, L"/W=", 3) == 0) { /* Window title */ | |
4125 | + char* TitleA = ToCharW(&Temp[3]); | |
4126 | + strncpy_s(ts->Title, sizeof(ts->Title), TitleA, _TRUNCATE); | |
4127 | + free(TitleA); | |
4101 | 4128 | } |
4102 | - else if (_strnicmp(Temp, "/X=", 3) == 0) { /* Window pos (X) */ | |
4103 | - if (sscanf(&Temp[3], "%d", &pos) == 1) { | |
4129 | + else if (_wcsnicmp(Temp, L"/X=", 3) == 0) { /* Window pos (X) */ | |
4130 | + if (swscanf(&Temp[3], L"%d", &pos) == 1) { | |
4104 | 4131 | ts->VTPos.x = pos; |
4105 | 4132 | if (ts->VTPos.y == CW_USEDEFAULT) |
4106 | 4133 | ts->VTPos.y = 0; |
4107 | 4134 | } |
4108 | 4135 | } |
4109 | - else if (_strnicmp(Temp, "/Y=", 3) == 0) { /* Window pos (Y) */ | |
4110 | - if (sscanf(&Temp[3], "%d", &pos) == 1) { | |
4136 | + else if (_wcsnicmp(Temp, L"/Y=", 3) == 0) { /* Window pos (Y) */ | |
4137 | + if (swscanf(&Temp[3], L"%d", &pos) == 1) { | |
4111 | 4138 | ts->VTPos.y = pos; |
4112 | 4139 | if (ts->VTPos.x == CW_USEDEFAULT) |
4113 | 4140 | ts->VTPos.x = 0; |
4114 | 4141 | } |
4115 | 4142 | } |
4116 | - else if (_stricmp(Temp, "/4") == 0) /* Protocol Tera Term speaking */ | |
4143 | + else if (_wcsicmp(Temp, L"/4") == 0) /* Protocol Tera Term speaking */ | |
4117 | 4144 | ts->ProtocolFamily = AF_INET; |
4118 | - else if (_stricmp(Temp, "/6") == 0) | |
4145 | + else if (_wcsicmp(Temp, L"/6") == 0) | |
4119 | 4146 | ts->ProtocolFamily = AF_INET6; |
4120 | - else if (_stricmp(Temp, "/DUPLICATE") == 0) { // duplicate session (2004.12.7. yutaka) | |
4147 | + else if (_wcsicmp(Temp, L"/DUPLICATE") == 0) { // duplicate session (2004.12.7. yutaka) | |
4121 | 4148 | ts->DuplicateSession = 1; |
4122 | 4149 | |
4123 | 4150 | } |
4124 | - else if (_strnicmp(Temp, "/TIMEOUT=", 9) == 0) { // Connecting Timeout value (2007.1.11. yutaka) | |
4125 | - if (sscanf(&Temp[9], "%d", &pos) == 1) { | |
4151 | + else if (_wcsnicmp(Temp, L"/TIMEOUT=", 9) == 0) { // Connecting Timeout value (2007.1.11. yutaka) | |
4152 | + if (swscanf(&Temp[9], L"%d", &pos) == 1) { | |
4126 | 4153 | if (pos >= 0) |
4127 | 4154 | ts->ConnectingTimeout = pos; |
4128 | 4155 | } |
4129 | 4156 | |
4130 | 4157 | } |
4131 | - else if ((Temp[0] != '/') && (strlen(Temp) > 0)) { | |
4132 | - if (JustAfterHost && ((c=ParsePortName(Temp)) > 0)) | |
4158 | + else if ((Temp[0] != '/') && (wcslen(Temp) > 0)) { | |
4159 | + if (JustAfterHost && ((c=ParsePortNameW(Temp)) > 0)) | |
4133 | 4160 | ParamTCP = c; |
4134 | 4161 | else { |
4135 | - strncpy_s(ts->HostName, sizeof(ts->HostName), Temp, _TRUNCATE); /* host name */ | |
4162 | + char *HostNameA = ToCharW(Temp); | |
4163 | + strncpy_s(ts->HostName, sizeof(ts->HostName), HostNameA, _TRUNCATE); /* host name */ | |
4164 | + free(HostNameA); | |
4136 | 4165 | if (ParamPort == IdNamedPipe) { |
4137 | 4166 | // 何もしない。 |
4138 | 4167 |
@@ -4187,14 +4216,15 @@ | ||
4187 | 4216 | break; |
4188 | 4217 | case IdNamedPipe: |
4189 | 4218 | if (ts->HostName[0] != 0 && ts->HostName[0] != '\\') { |
4190 | - if (p = strchr(ts->HostName, '\\')) { | |
4219 | + char * p = strchr(ts->HostName, '\\'); | |
4220 | + if (p == NULL) { | |
4191 | 4221 | *p++ = '\0'; |
4192 | - _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "\\\\%s\\pipe\\%s", ts->HostName, p); | |
4222 | + _snwprintf_s(Temp, _countof(Temp), _TRUNCATE, L"\\\\%hs\\pipe\\%hs", ts->HostName, p); | |
4193 | 4223 | } |
4194 | 4224 | else { |
4195 | - _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "\\\\.\\pipe\\%s", ts->HostName); | |
4225 | + _snwprintf_s(Temp, _countof(Temp), _TRUNCATE, L"\\\\.\\pipe\\%hs", ts->HostName); | |
4196 | 4226 | } |
4197 | - strncpy_s(ts->HostName, sizeof(ts->HostName), Temp, _TRUNCATE); | |
4227 | + WideCharToACP_t(Temp, ts->HostName, _countof(ts->HostName)); | |
4198 | 4228 | } |
4199 | 4229 | ts->PortType = IdNamedPipe; |
4200 | 4230 | ts->ComPort = 0; |
@@ -57,6 +57,7 @@ | ||
57 | 57 | #include <commctrl.h> |
58 | 58 | #include <commdlg.h> |
59 | 59 | #include <winsock2.h> |
60 | +#include <wchar.h> | |
60 | 61 | |
61 | 62 | #include <lmcons.h> |
62 | 63 |
@@ -88,6 +89,7 @@ | ||
88 | 89 | #include "codeconv.h" |
89 | 90 | #include "inifile_com.h" |
90 | 91 | #include "asprintf.h" |
92 | +#include "win32helper.h" | |
91 | 93 | |
92 | 94 | #include "libputty.h" |
93 | 95 |
@@ -107,9 +109,6 @@ | ||
107 | 109 | #define GetPrivateProfileStringA(p1, p2, p3, p4, p5, p6) GetPrivateProfileStringAFileW(p1, p2, p3, p4, p5, p6) |
108 | 110 | #define WritePrivateProfileStringA(p1, p2, p3, p4) WritePrivateProfileStringAFileW(p1, p2, p3, p4) |
109 | 111 | |
110 | -#define MATCH_STR(s, o) strncmp((s), (o), NUM_ELEM(o) - 1) | |
111 | -#define MATCH_STR_I(s, o) _strnicmp((s), (o), NUM_ELEM(o) - 1) | |
112 | - | |
113 | 112 | /* This extension implements SSH, so we choose a load order in the |
114 | 113 | "protocols" range. */ |
115 | 114 | #define ORDER 2500 |
@@ -1384,7 +1383,7 @@ | ||
1384 | 1383 | |
1385 | 1384 | // Percent-encodeされた文字列srcをデコードしてdstにコピーする。 |
1386 | 1385 | // dstlenはdstのサイズ。これより結果が長い場合、その分は切り捨てられる。 |
1387 | -static void percent_decode(char *dst, int dstlen, char *src) { | |
1386 | +static void percent_decode(char *dst, int dstlen, const wchar_t *src) { | |
1388 | 1387 | if (src == NULL || dst == NULL || dstlen < 1) { |
1389 | 1388 | return; |
1390 | 1389 | } |
@@ -1396,7 +1395,7 @@ | ||
1396 | 1395 | src++; dst++; |
1397 | 1396 | } |
1398 | 1397 | else { |
1399 | - *dst++ = *src++; | |
1398 | + *dst++ = (char)*src++; | |
1400 | 1399 | } |
1401 | 1400 | dstlen--; |
1402 | 1401 | } |
@@ -1404,8 +1403,9 @@ | ||
1404 | 1403 | return; |
1405 | 1404 | } |
1406 | 1405 | |
1407 | -void add_forward_param(PTInstVar pvar, char *param) | |
1406 | +static void add_forward_param(PTInstVar pvar, const wchar_t *paramW) | |
1408 | 1407 | { |
1408 | + char *param = ToCharW(paramW); | |
1409 | 1409 | if (pvar->settings.DefaultForwarding[0] == 0) { |
1410 | 1410 | strncpy_s(pvar->settings.DefaultForwarding, |
1411 | 1411 | sizeof(pvar->settings.DefaultForwarding), |
@@ -1418,15 +1418,17 @@ | ||
1418 | 1418 | sizeof(pvar->settings.DefaultForwarding), |
1419 | 1419 | param, _TRUNCATE); |
1420 | 1420 | } |
1421 | + free(param); | |
1421 | 1422 | } |
1422 | 1423 | |
1423 | -static void PASCAL TTXParseParam(PCHAR param, PTTSet ts, PCHAR DDETopic) { | |
1424 | - int param_len=strlen(param); | |
1424 | +static void PASCAL TTXParseParam(wchar_t *param, PTTSet ts, PCHAR DDETopic) | |
1425 | +{ | |
1426 | + int param_len = wcslen(param); | |
1425 | 1427 | int opt_len = param_len+1; |
1426 | - char *option = (char *)calloc(opt_len, sizeof(char)); | |
1427 | - char *option2 = (char *)calloc(opt_len, sizeof(char)); | |
1428 | + wchar_t *option = (wchar_t *)calloc(opt_len, sizeof(wchar_t)); | |
1429 | + wchar_t *option2 = (wchar_t *)calloc(opt_len, sizeof(wchar_t)); | |
1428 | 1430 | int action; |
1429 | - PCHAR start, cur, next; | |
1431 | + wchar_t *start, *cur, *next; | |
1430 | 1432 | size_t i; |
1431 | 1433 | |
1432 | 1434 | if (pvar->hostdlg_activated) { |
@@ -1442,29 +1444,22 @@ | ||
1442 | 1444 | action = OPTION_NONE; |
1443 | 1445 | |
1444 | 1446 | if ((option[0] == '-' || option[0] == '/')) { |
1445 | - wchar_t* option2W; | |
1446 | - if (MATCH_STR(option + 1, "ssh") == 0) { | |
1447 | - if (MATCH_STR(option + 4, "-f=") == 0) { | |
1448 | - strncpy_s(option2, opt_len, option + 7, _TRUNCATE); | |
1449 | - option2W = ToWcharA(option2); | |
1450 | - read_ssh_options_from_user_file(pvar, option2W); | |
1451 | - free(option2W); | |
1447 | + if (wcsncmp(option + 1, L"ssh", 3) == 0) { | |
1448 | + if (wcsncmp(option + 4, L"-f=", 3) == 0) { | |
1449 | + const wchar_t *file = option + 7; | |
1450 | + read_ssh_options_from_user_file(pvar, file); | |
1452 | 1451 | action = OPTION_CLEAR; |
1453 | - } else if (MATCH_STR(option + 4, "-consume=") == 0) { | |
1454 | - strncpy_s(option2, opt_len, option + 13, _TRUNCATE); | |
1455 | - option2W = ToWcharA(option2); | |
1456 | - read_ssh_options_from_user_file(pvar, option2W); | |
1457 | - free(option2W); | |
1458 | - DeleteFile(option2); | |
1452 | + } else if (wcsncmp(option + 4, L"-consume=", 9) == 0) { | |
1453 | + const wchar_t* file = option + 13; | |
1454 | + read_ssh_options_from_user_file(pvar, file); | |
1455 | + DeleteFileW(file); | |
1459 | 1456 | action = OPTION_CLEAR; |
1460 | 1457 | } |
1461 | 1458 | |
1462 | 1459 | // ttermpro.exe の /F= 指定でも TTSSH の設定を読む (2006.10.11 maya) |
1463 | - } else if (MATCH_STR_I(option + 1, "f=") == 0) { | |
1464 | - strncpy_s(option2, opt_len, option + 3, _TRUNCATE); | |
1465 | - option2W = ToWcharA(option2); | |
1466 | - read_ssh_options_from_user_file(pvar, option2W); | |
1467 | - free(option2W); | |
1460 | + } else if (_wcsnicmp(option + 1, L"f=", 2) == 0) { | |
1461 | + const wchar_t *file = option + 3; | |
1462 | + read_ssh_options_from_user_file(pvar, file); | |
1468 | 1463 | // Tera Term側でも解釈する必要があるので消さない |
1469 | 1464 | } |
1470 | 1465 | } |
@@ -1471,11 +1466,11 @@ | ||
1471 | 1466 | |
1472 | 1467 | switch (action) { |
1473 | 1468 | case OPTION_CLEAR: |
1474 | - memset(cur, ' ', next-cur); | |
1469 | + wmemset(cur, ' ', next-cur); | |
1475 | 1470 | break; |
1476 | 1471 | case OPTION_REPLACE: |
1477 | - memset(cur, ' ', next-cur); | |
1478 | - memcpy(cur+1, option, strlen(option)); | |
1472 | + wmemset(cur, ' ', next-cur); | |
1473 | + wmemcpy(cur+1, option, wcslen(option)); | |
1479 | 1474 | break; |
1480 | 1475 | } |
1481 | 1476 |
@@ -1489,13 +1484,13 @@ | ||
1489 | 1484 | |
1490 | 1485 | if ((option[0] == '-' || option[0] == '/')) { |
1491 | 1486 | action = OPTION_CLEAR; |
1492 | - if (MATCH_STR(option + 1, "ssh") == 0) { | |
1487 | + if (wcsncmp(option + 1, L"ssh", 3) == 0) { | |
1493 | 1488 | if (option[4] == 0) { |
1494 | 1489 | pvar->settings.Enabled = 1; |
1495 | - } else if (MATCH_STR(option + 4, "-L") == 0 || | |
1496 | - MATCH_STR(option + 4, "-R") == 0 || | |
1497 | - MATCH_STR(option + 4, "-D") == 0) { | |
1498 | - char *p = option + 5; | |
1490 | + } else if (wcsncmp(option + 4, L"-L", 3) == 0 || | |
1491 | + wcsncmp(option + 4, L"-R", 3) == 0 || | |
1492 | + wcsncmp(option + 4, L"-D", 3) == 0) { | |
1493 | + wchar_t *p = option + 5; | |
1499 | 1494 | option2[0] = *p; |
1500 | 1495 | i = 1; |
1501 | 1496 | while (*++p) { |
@@ -1512,36 +1507,38 @@ | ||
1512 | 1507 | option2[i] = 0; |
1513 | 1508 | add_forward_param(pvar, option2); |
1514 | 1509 | } |
1515 | - } else if (MATCH_STR(option + 4, "-X") == 0) { | |
1516 | - add_forward_param(pvar, "X"); | |
1510 | + } else if (wcsncmp(option + 4, L"-X", 2) == 0) { | |
1511 | + add_forward_param(pvar, L"X"); | |
1517 | 1512 | if (option+6 != 0) { |
1513 | + char *option6 = ToCharW(option + 6); | |
1518 | 1514 | strncpy_s(pvar->settings.X11Display, |
1519 | 1515 | sizeof(pvar->settings.X11Display), |
1520 | - option + 6, _TRUNCATE); | |
1516 | + option6, _TRUNCATE); | |
1517 | + free(option6); | |
1521 | 1518 | } |
1522 | - } else if (strcmp(option + 4, "-v") == 0) { | |
1519 | + } else if (wcscmp(option + 4, L"-v") == 0) { | |
1523 | 1520 | pvar->settings.LogLevel = LOG_LEVEL_VERBOSE; |
1524 | - } else if (_stricmp(option + 4, "-autologin") == 0 || | |
1525 | - _stricmp(option + 4, "-autologon") == 0) { | |
1521 | + } else if (_wcsicmp(option + 4, L"-autologin") == 0 || | |
1522 | + _wcsicmp(option + 4, L"-autologon") == 0) { | |
1526 | 1523 | pvar->settings.TryDefaultAuth = TRUE; |
1527 | - } else if (MATCH_STR_I(option + 4, "-agentconfirm=") == 0) { | |
1528 | - if ((_stricmp(option+18, "off") == 0) || | |
1529 | - (_stricmp(option+18, "no") == 0) || | |
1530 | - (_stricmp(option+18, "false") == 0) || | |
1531 | - (_stricmp(option+18, "0") == 0) || | |
1532 | - (_stricmp(option+18, "n") == 0)) { | |
1524 | + } else if (_wcsnicmp(option + 4, L"-agentconfirm=", 14) == 0) { | |
1525 | + if ((_wcsicmp(option+18, L"off") == 0) || | |
1526 | + (_wcsicmp(option+18, L"no") == 0) || | |
1527 | + (_wcsicmp(option+18, L"false") == 0) || | |
1528 | + (_wcsicmp(option+18, L"0") == 0) || | |
1529 | + (_wcsicmp(option+18, L"n") == 0)) { | |
1533 | 1530 | pvar->settings.ForwardAgentConfirm = 0; |
1534 | 1531 | } |
1535 | 1532 | else { |
1536 | 1533 | pvar->settings.ForwardAgentConfirm = 1; |
1537 | 1534 | } |
1538 | - } else if (strcmp(option + 4, "-a") == 0) { | |
1535 | + } else if (wcscmp(option + 4, L"-a") == 0) { | |
1539 | 1536 | pvar->settings.ForwardAgent = FALSE; |
1540 | - } else if (strcmp(option + 4, "-A") == 0) { | |
1537 | + } else if (wcscmp(option + 4, L"-A") == 0) { | |
1541 | 1538 | pvar->settings.ForwardAgent = TRUE; |
1542 | 1539 | |
1543 | - } else if (MATCH_STR(option + 4, "-C=") == 0) { | |
1544 | - pvar->settings.CompressionLevel = atoi(option+7); | |
1540 | + } else if (wcsncmp(option + 4, L"-C=", 3) == 0) { | |
1541 | + pvar->settings.CompressionLevel = _wtoi(option+7); | |
1545 | 1542 | if (pvar->settings.CompressionLevel < 0) { |
1546 | 1543 | pvar->settings.CompressionLevel = 0; |
1547 | 1544 | } |
@@ -1548,36 +1545,38 @@ | ||
1548 | 1545 | else if (pvar->settings.CompressionLevel > 9) { |
1549 | 1546 | pvar->settings.CompressionLevel = 9; |
1550 | 1547 | } |
1551 | - } else if (strcmp(option + 4, "-C") == 0) { | |
1548 | + } else if (wcscmp(option + 4, L"-C") == 0) { | |
1552 | 1549 | pvar->settings.CompressionLevel = 6; |
1553 | - } else if (strcmp(option + 4, "-c") == 0) { | |
1550 | + } else if (wcscmp(option + 4, L"-c") == 0) { | |
1554 | 1551 | pvar->settings.CompressionLevel = 0; |
1555 | - } else if (MATCH_STR_I(option + 4, "-icon=") == 0) { | |
1556 | - if ((_stricmp(option+10, "old") == 0) || | |
1557 | - (_stricmp(option+10, "yellow") == 0) || | |
1558 | - (_stricmp(option+10, "securett_yellow") == 0)) { | |
1552 | + } else if (_wcsnicmp(option + 4, L"-icon=", 6) == 0) { | |
1553 | + if ((_wcsicmp(option+10, L"old") == 0) || | |
1554 | + (_wcsicmp(option+10, L"yellow") == 0) || | |
1555 | + (_wcsicmp(option+10, L"securett_yellow") == 0)) { | |
1559 | 1556 | pvar->settings.IconID = IDI_SECURETT_YELLOW; |
1560 | 1557 | } |
1561 | - else if ((_stricmp(option+10, "green") == 0) || | |
1562 | - (_stricmp(option+10, "securett_green") == 0)) { | |
1558 | + else if ((_wcsicmp(option+10, L"green") == 0) || | |
1559 | + (_wcsicmp(option+10, L"securett_green") == 0)) { | |
1563 | 1560 | pvar->settings.IconID = IDI_SECURETT_GREEN; |
1564 | 1561 | } |
1565 | 1562 | else { |
1566 | 1563 | pvar->settings.IconID = IDI_SECURETT; |
1567 | 1564 | } |
1568 | - } else if (MATCH_STR(option + 4, "-subsystem=") == 0) { | |
1565 | + } else if (wcsncmp(option + 4, L"-subsystem=", 11) == 0) { | |
1566 | + char *option15 = ToCharW(option + 15); | |
1569 | 1567 | pvar->use_subsystem = TRUE; |
1570 | 1568 | strncpy_s(pvar->subsystem_name, |
1571 | 1569 | sizeof(pvar->subsystem_name), |
1572 | - option + 15, _TRUNCATE); | |
1573 | - } else if (strcmp(option + 4, "-N") == 0) { | |
1570 | + option15, _TRUNCATE); | |
1571 | + free(option15); | |
1572 | + } else if (wcscmp(option + 4, L"-N") == 0) { | |
1574 | 1573 | pvar->nosession = TRUE; |
1575 | 1574 | |
1576 | 1575 | // /ssh1 と /ssh2 オプションの新規追加 (2006.9.16 maya) |
1577 | - } else if (strcmp(option + 4, "1") == 0) { | |
1576 | + } else if (wcscmp(option + 4, L"1") == 0) { | |
1578 | 1577 | pvar->settings.Enabled = 1; |
1579 | 1578 | pvar->settings.ssh_protocol_version = 1; |
1580 | - } else if (strcmp(option + 4, "2") == 0) { | |
1579 | + } else if (wcscmp(option + 4, L"2") == 0) { | |
1581 | 1580 | pvar->settings.Enabled = 1; |
1582 | 1581 | pvar->settings.ssh_protocol_version = 2; |
1583 | 1582 |
@@ -1592,8 +1591,8 @@ | ||
1592 | 1591 | } |
1593 | 1592 | |
1594 | 1593 | // ttermpro.exe の /T= 指定の流用なので、大文字も許す (2006.10.19 maya) |
1595 | - } else if (MATCH_STR_I(option + 1, "t=") == 0) { | |
1596 | - if (strcmp(option + 3, "2") == 0) { | |
1594 | + } else if (_wcsnicmp(option + 1, L"t=", 2) == 0) { | |
1595 | + if (wcscmp(option + 3, L"2") == 0) { | |
1597 | 1596 | pvar->settings.Enabled = 1; |
1598 | 1597 | // /t=2はttssh側での拡張なので消す |
1599 | 1598 | } else { |
@@ -1602,21 +1601,21 @@ | ||
1602 | 1601 | } |
1603 | 1602 | |
1604 | 1603 | // /1 および /2 オプションの新規追加 (2004.10.3 yutaka) |
1605 | - } else if (strcmp(option + 1, "1") == 0) { | |
1604 | + } else if (wcscmp(option + 1, L"1") == 0) { | |
1606 | 1605 | // command line: /ssh /1 is SSH1 only |
1607 | 1606 | pvar->settings.ssh_protocol_version = 1; |
1608 | 1607 | |
1609 | - } else if (strcmp(option + 1, "2") == 0) { | |
1608 | + } else if (wcscmp(option + 1, L"2") == 0) { | |
1610 | 1609 | // command line: /ssh /2 is SSH2 & SSH1 |
1611 | 1610 | pvar->settings.ssh_protocol_version = 2; |
1612 | 1611 | |
1613 | - } else if (strcmp(option + 1, "nossh") == 0) { | |
1612 | + } else if (wcscmp(option + 1, L"nossh") == 0) { | |
1614 | 1613 | // '/nossh' オプションの追加。 |
1615 | 1614 | // TERATERM.INI でSSHが有効になっている場合、うまくCygtermが起動しないことが |
1616 | 1615 | // あることへの対処。(2004.10.11 yutaka) |
1617 | 1616 | pvar->settings.Enabled = 0; |
1618 | 1617 | |
1619 | - } else if (strcmp(option + 1, "telnet") == 0) { | |
1618 | + } else if (wcscmp(option + 1, L"telnet") == 0) { | |
1620 | 1619 | // '/telnet' が指定されているときには '/nossh' と同じく |
1621 | 1620 | // SSHを無効にする (2006.9.16 maya) |
1622 | 1621 | pvar->settings.Enabled = 0; |
@@ -1623,7 +1622,7 @@ | ||
1623 | 1622 | // Tera Term の Telnet フラグも付ける |
1624 | 1623 | pvar->ts->Telnet = 1; |
1625 | 1624 | |
1626 | - } else if (MATCH_STR(option + 1, "auth=") == 0) { | |
1625 | + } else if (wcsncmp(option + 1, L"auth=", 5) == 0) { | |
1627 | 1626 | // SSH2自動ログインオプションの追加 |
1628 | 1627 | // |
1629 | 1628 | // SYNOPSIS: /ssh /auth=passowrd /user=ユーザ名 /passwd=パスワード |
@@ -1635,23 +1634,23 @@ | ||
1635 | 1634 | // |
1636 | 1635 | pvar->ssh2_autologin = 1; // for SSH2 (2004.11.30 yutaka) |
1637 | 1636 | |
1638 | - if (_stricmp(option + 6, "password") == 0) { // パスワード | |
1637 | + if (_wcsicmp(option + 6, L"password") == 0) { // パスワード | |
1639 | 1638 | //pvar->auth_state.cur_cred.method = SSH_AUTH_PASSWORD; |
1640 | 1639 | pvar->ssh2_authmethod = SSH_AUTH_PASSWORD; |
1641 | 1640 | |
1642 | - } else if (_stricmp(option + 6, "keyboard-interactive") == 0) { // keyboard-interactive認証 | |
1641 | + } else if (_wcsicmp(option + 6, L"keyboard-interactive") == 0) { // keyboard-interactive認証 | |
1643 | 1642 | //pvar->auth_state.cur_cred.method = SSH_AUTH_TIS; |
1644 | 1643 | pvar->ssh2_authmethod = SSH_AUTH_TIS; |
1645 | 1644 | |
1646 | - } else if (_stricmp(option + 6, "challenge") == 0) { // keyboard-interactive認証 | |
1645 | + } else if (_wcsicmp(option + 6, L"challenge") == 0) { // keyboard-interactive認証 | |
1647 | 1646 | //pvar->auth_state.cur_cred.method = SSH_AUTH_TIS; |
1648 | 1647 | pvar->ssh2_authmethod = SSH_AUTH_TIS; |
1649 | 1648 | |
1650 | - } else if (_stricmp(option + 6, "publickey") == 0) { // 公開鍵認証 | |
1649 | + } else if (_wcsicmp(option + 6, L"publickey") == 0) { // 公開鍵認証 | |
1651 | 1650 | //pvar->auth_state.cur_cred.method = SSH_AUTH_RSA; |
1652 | 1651 | pvar->ssh2_authmethod = SSH_AUTH_RSA; |
1653 | 1652 | |
1654 | - } else if (_stricmp(option + 6, "pageant") == 0) { // 公開鍵認証 by Pageant | |
1653 | + } else if (_wcsicmp(option + 6, L"pageant") == 0) { // 公開鍵認証 by Pageant | |
1655 | 1654 | //pvar->auth_state.cur_cred.method = SSH_AUTH_RSA; |
1656 | 1655 | pvar->ssh2_authmethod = SSH_AUTH_PAGEANT; |
1657 | 1656 |
@@ -1659,20 +1658,20 @@ | ||
1659 | 1658 | // TODO: |
1660 | 1659 | } |
1661 | 1660 | |
1662 | - } else if (MATCH_STR(option + 1, "user=") == 0) { | |
1663 | - _snprintf_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), _TRUNCATE, "%s", option+6); | |
1661 | + } else if (wcsncmp(option + 1, L"user=", 5) == 0) { | |
1662 | + _snprintf_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), _TRUNCATE, "%ls", option+6); | |
1664 | 1663 | |
1665 | - } else if (MATCH_STR(option + 1, "passwd=") == 0) { | |
1666 | - _snprintf_s(pvar->ssh2_password, sizeof(pvar->ssh2_password), _TRUNCATE, "%s", option+8); | |
1664 | + } else if (wcsncmp(option + 1, L"passwd=", 7) == 0) { | |
1665 | + _snprintf_s(pvar->ssh2_password, sizeof(pvar->ssh2_password), _TRUNCATE, "%ls", option+8); | |
1667 | 1666 | |
1668 | - } else if (MATCH_STR(option + 1, "keyfile=") == 0) { | |
1669 | - _snprintf_s(pvar->ssh2_keyfile, sizeof(pvar->ssh2_keyfile), _TRUNCATE, "%s", option+9); | |
1667 | + } else if (wcsncmp(option + 1, L"keyfile=", 8) == 0) { | |
1668 | + _snprintf_s(pvar->ssh2_keyfile, sizeof(pvar->ssh2_keyfile), _TRUNCATE, "%ls", option+9); | |
1670 | 1669 | |
1671 | - } else if (strcmp(option + 1, "ask4passwd") == 0) { | |
1670 | + } else if (wcscmp(option + 1, L"ask4passwd") == 0) { | |
1672 | 1671 | // パスワードを聞く (2006.9.18 maya) |
1673 | 1672 | pvar->ask4passwd = 1; |
1674 | 1673 | |
1675 | - } else if (strcmp(option + 1, "nosecuritywarning") == 0) { | |
1674 | + } else if (wcscmp(option + 1, L"nosecuritywarning") == 0) { | |
1676 | 1675 | // known_hostsチェックをしない。当該オプションを使うと、セキュリティ性が低下する |
1677 | 1676 | // ため、隠しオプション扱いとする。 |
1678 | 1677 | // (2009.10.4 yutaka) |
@@ -1690,12 +1689,12 @@ | ||
1690 | 1689 | } |
1691 | 1690 | |
1692 | 1691 | } |
1693 | - else if ((MATCH_STR_I(option, "ssh://") == 0) || | |
1694 | - (MATCH_STR_I(option, "ssh1://") == 0) || | |
1695 | - (MATCH_STR_I(option, "ssh2://") == 0) || | |
1696 | - (MATCH_STR_I(option, "slogin://") == 0) || | |
1697 | - (MATCH_STR_I(option, "slogin1://") == 0) || | |
1698 | - (MATCH_STR_I(option, "slogin2://") == 0)) { | |
1692 | + else if ((_wcsnicmp(option, L"ssh://", 6) == 0) || | |
1693 | + (_wcsnicmp(option, L"ssh1://", 7) == 0) || | |
1694 | + (_wcsnicmp(option, L"ssh2://", 7) == 0) || | |
1695 | + (_wcsnicmp(option, L"slogin://", 9) == 0) || | |
1696 | + (_wcsnicmp(option, L"slogin1://", 10) == 0) || | |
1697 | + (_wcsnicmp(option, L"slogin2://", 10) == 0)) { | |
1699 | 1698 | // |
1700 | 1699 | // ssh://user@host/ 等のURL形式のサポート |
1701 | 1700 | // 基本的な書式は telnet:// URLに順ずる |
@@ -1704,13 +1703,13 @@ | ||
1704 | 1703 | // RFC3986: Uniform Resource Identifier (URI): Generic Syntax |
1705 | 1704 | // RFC4248: The telnet URI Scheme |
1706 | 1705 | // |
1707 | - char *p, *p2, *p3; | |
1706 | + wchar_t *p, *p2, *p3; | |
1708 | 1707 | int optlen, hostlen; |
1709 | 1708 | |
1710 | - optlen = strlen(option); | |
1709 | + optlen = wcslen(option); | |
1711 | 1710 | |
1712 | 1711 | // 最初の':'の前の文字が数字だった場合、それをsshプロトコルバージョンとみなす |
1713 | - p = _mbschr(option, ':'); | |
1712 | + p = wcschr(option, ':'); | |
1714 | 1713 | switch (*(p-1)) { |
1715 | 1714 | case '1': |
1716 | 1715 | pvar->settings.ssh_protocol_version = 1; |
@@ -1724,15 +1723,15 @@ | ||
1724 | 1723 | p += 3; |
1725 | 1724 | |
1726 | 1725 | // path part を切り捨てる |
1727 | - if ((p2 = _mbschr(p, '/')) != NULL) { | |
1726 | + if ((p2 = wcschr(p, '/')) != NULL) { | |
1728 | 1727 | *p2 = 0; |
1729 | 1728 | } |
1730 | 1729 | |
1731 | 1730 | // '@'があった場合、それより前はユーザ情報 |
1732 | - if ((p2 = _mbschr(p, '@')) != NULL) { | |
1731 | + if ((p2 = wcschr(p, '@')) != NULL) { | |
1733 | 1732 | *p2 = 0; |
1734 | 1733 | // ':'以降はパスワード |
1735 | - if ((p3 = _mbschr(p, ':')) != NULL) { | |
1734 | + if ((p3 = wcschr(p, ':')) != NULL) { | |
1736 | 1735 | *p3 = 0; |
1737 | 1736 | percent_decode(pvar->ssh2_password, sizeof(pvar->ssh2_password), p3 + 1); |
1738 | 1737 | } |
@@ -1743,25 +1742,25 @@ | ||
1743 | 1742 | |
1744 | 1743 | // host part を option の先頭に移動して、scheme part を潰す |
1745 | 1744 | // port指定が無かった時にport番号を足すための領域確保の意味もある |
1746 | - hostlen = strlen(p); | |
1747 | - memmove_s(option, optlen, p, hostlen); | |
1745 | + hostlen = wcslen(p); | |
1746 | + wmemmove_s(option, optlen, p, hostlen); | |
1748 | 1747 | option[hostlen] = 0; |
1749 | 1748 | |
1750 | 1749 | // ポート指定が無い時は":22"を足す |
1751 | 1750 | if (option[0] == '[' && option[hostlen-1] == ']' || // IPv6 raw address without port |
1752 | - option[0] != '[' && _mbschr(option, ':') == NULL) { // hostname or IPv4 raw address without port | |
1753 | - memcpy_s(option+hostlen, optlen-hostlen, ":22", 3); | |
1751 | + option[0] != '[' && wcschr(option, ':') == NULL) { // hostname or IPv4 raw address without port | |
1752 | + wmemcpy_s(option+hostlen, optlen-hostlen, L":22", 3); | |
1754 | 1753 | hostlen += 3; |
1755 | 1754 | } |
1756 | 1755 | |
1757 | 1756 | // ポート指定より後をすべてスペースで潰す |
1758 | - memset(option+hostlen, ' ', optlen-hostlen); | |
1757 | + wmemset(option+hostlen, ' ', optlen-hostlen); | |
1759 | 1758 | |
1760 | 1759 | pvar->settings.Enabled = 1; |
1761 | 1760 | |
1762 | 1761 | action = OPTION_REPLACE; |
1763 | 1762 | } |
1764 | - else if (_mbschr(option, '@') != NULL) { | |
1763 | + else if (wcschr(option, '@') != NULL) { | |
1765 | 1764 | // |
1766 | 1765 | // user@host 形式のサポート |
1767 | 1766 | // 取り合えずsshでのみサポートの為、ユーザ名はttssh内で潰す。 |
@@ -1769,16 +1768,19 @@ | ||
1769 | 1768 | // 将来的にtelnet authentication optionをサポートした時は |
1770 | 1769 | // Tera Term本体で処理するようにする予定。 |
1771 | 1770 | // |
1772 | - char *p; | |
1773 | - p = _mbschr(option, '@'); | |
1771 | + char *optionA; | |
1772 | + wchar_t *p; | |
1773 | + p = wcschr(option, '@'); | |
1774 | 1774 | *p = 0; |
1775 | 1775 | |
1776 | - strncpy_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), option, _TRUNCATE); | |
1776 | + optionA = ToCharW(option); | |
1777 | + strncpy_s(pvar->ssh2_username, sizeof(pvar->ssh2_username), optionA, _TRUNCATE); | |
1778 | + free(optionA); | |
1777 | 1779 | |
1778 | 1780 | // ユーザ名部分をスペースで潰す。 |
1779 | 1781 | // 後続のTTXやTera Term本体で解釈する時にはスペースを読み飛ばすので、 |
1780 | 1782 | // ホスト名を先頭に詰める必要は無い。 |
1781 | - memset(option, ' ', p-option+1); | |
1783 | + wmemset(option, ' ', p-option+1); | |
1782 | 1784 | |
1783 | 1785 | action = OPTION_REPLACE; |
1784 | 1786 | } |
@@ -1786,11 +1788,11 @@ | ||
1786 | 1788 | |
1787 | 1789 | switch (action) { |
1788 | 1790 | case OPTION_CLEAR: |
1789 | - memset(cur, ' ', next-cur); | |
1791 | + wmemset(cur, ' ', next-cur); | |
1790 | 1792 | break; |
1791 | 1793 | case OPTION_REPLACE: |
1792 | - memset(cur, ' ', next-cur); | |
1793 | - memcpy(cur+1, option, strlen(option)); | |
1794 | + wmemset(cur, ' ', next-cur); | |
1795 | + wmemcpy(cur+1, option, wcslen(option)); | |
1794 | 1796 | break; |
1795 | 1797 | } |
1796 | 1798 |