Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/teraterm/ttpset/ttset.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6768 - (show annotations) (download) (as text)
Sun Jun 4 13:06:21 2017 UTC (6 years, 10 months ago) by maya
File MIME type: text/x-csrc
File size: 133070 byte(s)
ログのタイムスタンプにUTCを使用できるようにした

https://osdn.net/ticket/browse.php?group_id=1412&tid=36971
1 /* Tera Term
2 Copyright(C) 1994-1998 T. Teranishi
3 All rights reserved. */
4 /* IPv6 modification is Copyright(C) 2000 Jun-ya kato <kato@win6.jp> */
5
6 /* TTSET.DLL, setup file routines*/
7 #include <winsock2.h>
8 #include <ws2tcpip.h>
9 #include "teraterm.h"
10 #include "tttypes.h"
11 #include <stdio.h>
12 #include <string.h>
13 #include <direct.h>
14 #include <ctype.h>
15 #include <errno.h>
16 #include "ttlib.h"
17 #include "tt_res.h"
18
19 #include "compat_w95.h"
20
21 #ifndef CLEARTYPE_QUALITY
22 #define CLEARTYPE_QUALITY 5
23 #endif
24
25 #define Section "Tera Term"
26
27 #define MaxStrLen (LONG)512
28
29 static PCHAR far TermList[] =
30 { "VT100", "VT100J", "VT101", "VT102", "VT102J", "VT220J", "VT282",
31 "VT320", "VT382", "VT420", "VT520", "VT525", NULL };
32
33 static PCHAR far RussList[] =
34 { "Windows", "KOI8-R", "CP-866", "ISO-8859-5", NULL };
35 static PCHAR far RussList2[] = { "Windows", "KOI8-R", NULL };
36
37 WORD str2id(PCHAR far * List, PCHAR str, WORD DefId)
38 {
39 WORD i;
40 i = 0;
41 while ((List[i] != NULL) && (_stricmp(List[i], str) != 0))
42 i++;
43 if (List[i] == NULL)
44 i = DefId;
45 else
46 i++;
47
48 return i;
49 }
50
51 void id2str(PCHAR far * List, WORD Id, WORD DefId, PCHAR str, int destlen)
52 {
53 int i;
54
55 if (Id == 0)
56 i = DefId - 1;
57 else {
58 i = 0;
59 while ((List[i] != NULL) && (i < Id - 1))
60 i++;
61 if (List[i] == NULL)
62 i = DefId - 1;
63 }
64 strncpy_s(str, destlen, List[i], _TRUNCATE);
65 }
66
67 int IconName2IconId(const char *name) {
68 int id;
69
70 if (_stricmp(name, "tterm") == 0) {
71 id = IDI_TTERM;
72 }
73 else if (_stricmp(name, "vt") == 0) {
74 id = IDI_VT;
75 }
76 else if (_stricmp(name, "tek") == 0) {
77 id = IDI_TEK;
78 }
79 else if (_stricmp(name, "tterm_classic") == 0) {
80 id = IDI_TTERM_CLASSIC;
81 }
82 else if (_stricmp(name, "vt_classic") == 0) {
83 id = IDI_VT_CLASSIC;
84 }
85 else if (_stricmp(name, "tterm_3d") == 0) {
86 id = IDI_TTERM_3D;
87 }
88 else if (_stricmp(name, "vt_3d") == 0) {
89 id = IDI_VT_3D;
90 }
91 else if (_stricmp(name, "cygterm") == 0) {
92 id = IDI_CYGTERM;
93 }
94 else {
95 id = IdIconDefault;
96 }
97 return id;
98 }
99
100 void IconId2IconName(char *name, int len, int id) {
101 char *icon;
102 switch (id) {
103 case IDI_TTERM:
104 icon = "tterm";
105 break;
106 case IDI_VT:
107 icon = "vt";
108 break;
109 case IDI_TEK:
110 icon = "tek";
111 break;
112 case IDI_TTERM_CLASSIC:
113 icon = "tterm_classic";
114 break;
115 case IDI_VT_CLASSIC:
116 icon = "vt_classic";
117 break;
118 case IDI_TTERM_3D:
119 icon = "tterm_3d";
120 break;
121 case IDI_VT_3D:
122 icon = "vt_3d";
123 break;
124 case IDI_CYGTERM:
125 icon = "cygterm";
126 break;
127 default:
128 icon = "Default";
129 }
130 strncpy_s(name, len, icon, _TRUNCATE);
131 }
132
133 WORD GetOnOff(PCHAR Sect, PCHAR Key, PCHAR FName, BOOL Default)
134 {
135 char Temp[4];
136 GetPrivateProfileString(Sect, Key, "", Temp, sizeof(Temp), FName);
137 if (Default) {
138 if (_stricmp(Temp, "off") == 0)
139 return 0;
140 else
141 return 1;
142 }
143 else {
144 if (_stricmp(Temp, "on") == 0)
145 return 1;
146 else
147 return 0;
148 }
149 }
150
151 void WriteOnOff(PCHAR Sect, PCHAR Key, PCHAR FName, WORD Flag)
152 {
153 char Temp[4];
154
155 if (Flag != 0)
156 strncpy_s(Temp, sizeof(Temp), "on", _TRUNCATE);
157 else
158 strncpy_s(Temp, sizeof(Temp), "off", _TRUNCATE);
159 WritePrivateProfileString(Sect, Key, Temp, FName);
160 }
161
162 void WriteInt(PCHAR Sect, PCHAR Key, PCHAR FName, int i)
163 {
164 char Temp[15];
165 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d", i);
166 WritePrivateProfileString(Sect, Key, Temp, FName);
167 }
168
169 void WriteUint(PCHAR Sect, PCHAR Key, PCHAR FName, UINT i)
170 {
171 char Temp[15];
172 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%u", i);
173 WritePrivateProfileString(Sect, Key, Temp, FName);
174 }
175
176 void WriteInt2(PCHAR Sect, PCHAR Key, PCHAR FName, int i1, int i2)
177 {
178 char Temp[32];
179 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d,%d", i1, i2);
180 WritePrivateProfileString(Sect, Key, Temp, FName);
181 }
182
183 void WriteInt4(PCHAR Sect, PCHAR Key, PCHAR FName,
184 int i1, int i2, int i3, int i4)
185 {
186 char Temp[64];
187 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d,%d,%d,%d",
188 i1, i2, i3, i4);
189 WritePrivateProfileString(Sect, Key, Temp, FName);
190 }
191
192 void WriteInt6(PCHAR Sect, PCHAR Key, PCHAR FName,
193 int i1, int i2, int i3, int i4, int i5, int i6)
194 {
195 char Temp[96];
196 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d,%d,%d,%d,%d,%d",
197 i1, i2,i3, i4, i5, i6);
198 WritePrivateProfileString(Sect, Key, Temp, FName);
199 }
200
201 void WriteFont(PCHAR Sect, PCHAR Key, PCHAR FName,
202 PCHAR Name, int x, int y, int charset)
203 {
204 char Temp[80];
205 if (Name[0] != 0)
206 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%s,%d,%d,%d",
207 Name, x, y, charset);
208 else
209 Temp[0] = 0;
210 WritePrivateProfileString(Sect, Key, Temp, FName);
211 }
212
213
214
215 #define CYGTERM_FILE "cygterm.cfg" // CygTerm configuration file
216 #define CYGTERM_FILE_MAXLINE 100
217
218 static void ReadCygtermConfFile(PTTSet ts)
219 {
220 char *cfgfile = CYGTERM_FILE; // CygTerm configuration file
221 char cfg[MAX_PATH];
222 FILE *fp;
223 char buf[256], *head, *body;
224 cygterm_t settings;
225
226 // try to read CygTerm config file
227 memset(&settings, 0, sizeof(settings));
228 _snprintf_s(settings.term, sizeof(settings.term), _TRUNCATE, "ttermpro.exe %%s %%d /E /KR=SJIS /KT=SJIS /VTICON=CygTerm /nossh");
229 _snprintf_s(settings.term_type, sizeof(settings.term_type), _TRUNCATE, "vt100");
230 _snprintf_s(settings.port_start, sizeof(settings.port_start), _TRUNCATE, "20000");
231 _snprintf_s(settings.port_range, sizeof(settings.port_range), _TRUNCATE, "40");
232 _snprintf_s(settings.shell, sizeof(settings.shell), _TRUNCATE, "auto");
233 _snprintf_s(settings.env1, sizeof(settings.env1), _TRUNCATE, "MAKE_MODE=unix");
234 _snprintf_s(settings.env2, sizeof(settings.env2), _TRUNCATE, "");
235 settings.login_shell = FALSE;
236 settings.home_chdir = FALSE;
237 settings.agent_proxy = FALSE;
238
239 strncpy_s(cfg, sizeof(cfg), ts->HomeDir, _TRUNCATE);
240 AppendSlash(cfg, sizeof(cfg));
241 strncat_s(cfg, sizeof(cfg), cfgfile, _TRUNCATE);
242
243 fp = fopen(cfg, "r");
244 if (fp != NULL) {
245 while (fgets(buf, sizeof(buf), fp) != NULL) {
246 int len = strlen(buf);
247
248 if (buf[len - 1] == '\n')
249 buf[len - 1] = '\0';
250
251 split_buffer(buf, '=', &head, &body);
252 if (head == NULL || body == NULL)
253 continue;
254
255 if (_stricmp(head, "TERM") == 0) {
256 _snprintf_s(settings.term, sizeof(settings.term), _TRUNCATE, "%s", body);
257
258 }
259 else if (_stricmp(head, "TERM_TYPE") == 0) {
260 _snprintf_s(settings.term_type, sizeof(settings.term_type), _TRUNCATE, "%s", body);
261
262 }
263 else if (_stricmp(head, "PORT_START") == 0) {
264 _snprintf_s(settings.port_start, sizeof(settings.port_start), _TRUNCATE, "%s", body);
265
266 }
267 else if (_stricmp(head, "PORT_RANGE") == 0) {
268 _snprintf_s(settings.port_range, sizeof(settings.port_range), _TRUNCATE, "%s", body);
269
270 }
271 else if (_stricmp(head, "SHELL") == 0) {
272 _snprintf_s(settings.shell, sizeof(settings.shell), _TRUNCATE, "%s", body);
273
274 }
275 else if (_stricmp(head, "ENV_1") == 0) {
276 _snprintf_s(settings.env1, sizeof(settings.env1), _TRUNCATE, "%s", body);
277
278 }
279 else if (_stricmp(head, "ENV_2") == 0) {
280 _snprintf_s(settings.env2, sizeof(settings.env2), _TRUNCATE, "%s", body);
281
282 }
283 else if (_stricmp(head, "LOGIN_SHELL") == 0) {
284 if (strchr("YyTt", *body)) {
285 settings.login_shell = TRUE;
286 }
287
288 }
289 else if (_stricmp(head, "HOME_CHDIR") == 0) {
290 if (strchr("YyTt", *body)) {
291 settings.home_chdir = TRUE;
292 }
293
294 }
295 else if (_stricmp(head, "SSH_AGENT_PROXY") == 0) {
296 if (strchr("YyTt", *body)) {
297 settings.agent_proxy = TRUE;
298 }
299
300 }
301 else {
302 // TODO: error check
303
304 }
305 }
306 fclose(fp);
307 }
308
309 memcpy(&ts->CygtermSettings, &settings, sizeof(cygterm_t));
310 }
311
312 static void WriteCygtermConfFile(PTTSet ts)
313 {
314 char *cfgfile = CYGTERM_FILE; // CygTerm configuration file
315 char *tmpfile = "cygterm.tmp";
316 char cfg[MAX_PATH];
317 char tmp[MAX_PATH];
318 FILE *fp;
319 FILE *tmp_fp;
320 char buf[256], *head, *body;
321 char uimsg[MAX_UIMSG];
322 cygterm_t settings;
323 char *line[CYGTERM_FILE_MAXLINE];
324 int i, linenum, len;
325
326 // Cygwin���������X�������������������A�t�@�C�����������������B
327 if (ts->CygtermSettings.update_flag == FALSE)
328 return;
329 // �t���O���������ASave setup�����x�����x�������������������������B
330 ts->CygtermSettings.update_flag = FALSE;
331
332 memcpy(&settings, &ts->CygtermSettings, sizeof(cygterm_t));
333
334 strncpy_s(cfg, sizeof(cfg), ts->HomeDir, _TRUNCATE);
335 AppendSlash(cfg, sizeof(cfg));
336 strncat_s(cfg, sizeof(cfg), cfgfile, _TRUNCATE);
337
338 strncpy_s(tmp, sizeof(tmp), ts->HomeDir, _TRUNCATE);
339 AppendSlash(tmp, sizeof(tmp));
340 strncat_s(tmp, sizeof(tmp), tmpfile, _TRUNCATE);
341
342 // cygterm.cfg �������������A�������������������������������B
343 memset(line, 0, sizeof(line));
344 linenum = 0;
345 fp = fopen(cfg, "r");
346 if (fp) {
347 i = 0;
348 while (fgets(buf, sizeof(buf), fp) != NULL) {
349 len = strlen(buf);
350 if (buf[len - 1] == '\n')
351 buf[len - 1] = '\0';
352 if (i < CYGTERM_FILE_MAXLINE)
353 line[i++] = _strdup(buf);
354 else
355 break;
356 }
357 linenum = i;
358 fclose(fp);
359 }
360
361 tmp_fp = fopen(cfg, "w");
362 if (tmp_fp == NULL) {
363 get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile);
364 get_lang_msg("MSG_CYGTERM_CONF_WRITEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg),
365 "Can't write CygTerm configuration file (%d).", ts->UILanguageFile);
366 _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError());
367 MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION);
368 }
369 else {
370 if (linenum > 0) {
371 for (i = 0; i < linenum; i++) {
372 split_buffer(line[i], '=', &head, &body);
373 if (head == NULL || body == NULL) {
374 fprintf(tmp_fp, "%s\n", line[i]);
375 }
376 else if (_stricmp(head, "TERM") == 0) {
377 fprintf(tmp_fp, "TERM = %s\n", settings.term);
378 settings.term[0] = '\0';
379 }
380 else if (_stricmp(head, "TERM_TYPE") == 0) {
381 fprintf(tmp_fp, "TERM_TYPE = %s\n", settings.term_type);
382 settings.term_type[0] = '\0';
383 }
384 else if (_stricmp(head, "PORT_START") == 0) {
385 fprintf(tmp_fp, "PORT_START = %s\n", settings.port_start);
386 settings.port_start[0] = '\0';
387 }
388 else if (_stricmp(head, "PORT_RANGE") == 0) {
389 fprintf(tmp_fp, "PORT_RANGE = %s\n", settings.port_range);
390 settings.port_range[0] = '\0';
391 }
392 else if (_stricmp(head, "SHELL") == 0) {
393 fprintf(tmp_fp, "SHELL = %s\n", settings.shell);
394 settings.shell[0] = '\0';
395 }
396 else if (_stricmp(head, "ENV_1") == 0) {
397 fprintf(tmp_fp, "ENV_1 = %s\n", settings.env1);
398 settings.env1[0] = '\0';
399 }
400 else if (_stricmp(head, "ENV_2") == 0) {
401 fprintf(tmp_fp, "ENV_2 = %s\n", settings.env2);
402 settings.env2[0] = '\0';
403 }
404 else if (_stricmp(head, "LOGIN_SHELL") == 0) {
405 fprintf(tmp_fp, "LOGIN_SHELL = %s\n", (settings.login_shell == TRUE) ? "yes" : "no");
406 settings.login_shell = FALSE;
407 }
408 else if (_stricmp(head, "HOME_CHDIR") == 0) {
409 fprintf(tmp_fp, "HOME_CHDIR = %s\n", (settings.home_chdir == TRUE) ? "yes" : "no");
410 settings.home_chdir = FALSE;
411 }
412 else if (_stricmp(head, "SSH_AGENT_PROXY") == 0) {
413 fprintf(tmp_fp, "SSH_AGENT_PROXY = %s\n", (settings.agent_proxy == TRUE) ? "yes" : "no");
414 settings.agent_proxy = FALSE;
415 }
416 else {
417 fprintf(tmp_fp, "%s = %s\n", head, body);
418 }
419 }
420 }
421 else {
422 fputs("# CygTerm setting\n", tmp_fp);
423 fputs("\n", tmp_fp);
424 }
425 if (settings.term[0] != '\0') {
426 fprintf(tmp_fp, "TERM = %s\n", settings.term);
427 }
428 if (settings.term_type[0] != '\0') {
429 fprintf(tmp_fp, "TERM_TYPE = %s\n", settings.term_type);
430 }
431 if (settings.port_start[0] != '\0') {
432 fprintf(tmp_fp, "PORT_START = %s\n", settings.port_start);
433 }
434 if (settings.port_range[0] != '\0') {
435 fprintf(tmp_fp, "PORT_RANGE = %s\n", settings.port_range);
436 }
437 if (settings.shell[0] != '\0') {
438 fprintf(tmp_fp, "SHELL = %s\n", settings.shell);
439 }
440 if (settings.env1[0] != '\0') {
441 fprintf(tmp_fp, "ENV_1 = %s\n", settings.env1);
442 }
443 if (settings.env2[0] != '\0') {
444 fprintf(tmp_fp, "ENV_2 = %s\n", settings.env2);
445 }
446 if (settings.login_shell) {
447 fprintf(tmp_fp, "LOGIN_SHELL = yes\n");
448 }
449 if (settings.home_chdir) {
450 fprintf(tmp_fp, "HOME_CHDIR = yes\n");
451 }
452 if (settings.agent_proxy) {
453 fprintf(tmp_fp, "SSH_AGENT_PROXY = yes\n");
454 }
455 fclose(tmp_fp);
456
457 // �_�C���N�g���t�@�C���������������������������A���L�������s�v�B
458 #if 0
459 if (remove(cfg) != 0 && errno != ENOENT) {
460 get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile);
461 get_lang_msg("MSG_CYGTERM_CONF_REMOVEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg),
462 "Can't remove old CygTerm configuration file (%d).", ts->UILanguageFile);
463 _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError());
464 MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION);
465 }
466 else if (rename(tmp, cfg) != 0) {
467 get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile);
468 get_lang_msg("MSG_CYGTERM_CONF_RENAMEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg),
469 "Can't rename CygTerm configuration file (%d).", ts->UILanguageFile);
470 _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError());
471 MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION);
472 }
473 else {
474 // cygterm.cfg �t�@�C�����������������������A���b�Z�[�W�_�C�A���O���\�������B
475 // �������ASave setup�����s�����K�v�������������������N�����B
476 // (2012.5.1 yutaka)
477 // Save setup ���s�����ACygTerm�������������������������������������A
478 // �_�C�A���O�\�����s�v�����������A���������B
479 // (2015.11.12 yutaka)
480 get_lang_msg("MSG_TT_NOTICE", uimsg, sizeof(uimsg), "MSG_TT_NOTICE", ts->UILanguageFile);
481 get_lang_msg("MSG_CYGTERM_CONF_SAVED_NOTICE", ts->UIMsg, sizeof(ts->UIMsg),
482 "%s has been saved. Do not do save setup.", ts->UILanguageFile);
483 _snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, CYGTERM_FILE);
484 MessageBox(NULL, buf, uimsg, MB_OK | MB_ICONINFORMATION);
485 }
486 #endif
487 }
488
489 // �Y�������������t���[���������B
490 for (i = 0; i < linenum; i++) {
491 free(line[i]);
492 }
493
494 }
495
496 void FAR PASCAL ReadIniFile(PCHAR FName, PTTSet ts)
497 {
498 int i;
499 HDC TmpDC;
500 char Temp[MAX_PATH], Temp2[MAX_PATH];
501
502 ts->Minimize = 0;
503 ts->HideWindow = 0;
504 ts->LogFlag = 0; // Log flags
505 ts->FTFlag = 0; // File transfer flags
506 ts->MenuFlag = 0; // Menu flags
507 ts->TermFlag = 0; // Terminal flag
508 ts->ColorFlag = 0; // ANSI/Attribute color flags
509 ts->FontFlag = 0; // Font flag
510 ts->PortFlag = 0; // Port flags
511 ts->WindowFlag = 0; // Window flags
512 ts->CtrlFlag = 0; // Control sequence flags
513 ts->PasteFlag = 0; // Clipboard Paste flags
514 ts->TelPort = 23;
515
516 ts->DisableTCPEchoCR = FALSE;
517
518 /* Version number */
519 /* GetPrivateProfileString(Section,"Version","",
520 Temp,sizeof(Temp),FName); */
521
522 /* Language */
523 GetPrivateProfileString(Section, "Language", "",
524 Temp, sizeof(Temp), FName);
525 if (_stricmp(Temp, "Japanese") == 0)
526 ts->Language = IdJapanese;
527 else if (_stricmp(Temp, "Russian") == 0)
528 ts->Language = IdRussian;
529 else if (_stricmp(Temp, "English") == 0)
530 ts->Language = IdEnglish;
531 else if (_stricmp(Temp,"Korean") == 0) // HKS
532 ts->Language = IdKorean;
533 else if (_stricmp(Temp,"UTF-8") == 0)
534 ts->Language = IdUtf8;
535 else {
536 switch (PRIMARYLANGID(GetSystemDefaultLangID())) {
537 case LANG_JAPANESE:
538 ts->Language = IdJapanese;
539 break;
540 case LANG_RUSSIAN:
541 ts->Language = IdRussian;
542 break;
543 case LANG_KOREAN: // HKS
544 ts->Language = IdKorean;
545 break;
546 default:
547 ts->Language = IdEnglish;
548 }
549 }
550
551 /* Port type */
552 GetPrivateProfileString(Section, "Port", "",
553 Temp, sizeof(Temp), FName);
554 if (_stricmp(Temp, "serial") == 0)
555 ts->PortType = IdSerial;
556 else {
557 ts->PortType = IdTCPIP;
558 }
559
560 /* VT win position */
561 GetPrivateProfileString(Section, "VTPos", "-2147483648,-2147483648", Temp, sizeof(Temp), FName); /* default: random position */
562 GetNthNum(Temp, 1, (int far *) (&ts->VTPos.x));
563 GetNthNum(Temp, 2, (int far *) (&ts->VTPos.y));
564
565 /* TEK win position */
566 GetPrivateProfileString(Section, "TEKPos", "-2147483648,-2147483648", Temp, sizeof(Temp), FName); /* default: random position */
567 GetNthNum(Temp, 1, (int far *) &(ts->TEKPos.x));
568 GetNthNum(Temp, 2, (int far *) &(ts->TEKPos.y));
569
570 /* Save VT Window position */
571 ts->SaveVTWinPos = GetOnOff(Section, "SaveVTWinPos", FName, FALSE);
572
573 /* VT terminal size */
574 GetPrivateProfileString(Section, "TerminalSize", "80,24",
575 Temp, sizeof(Temp), FName);
576 GetNthNum(Temp, 1, &ts->TerminalWidth);
577 GetNthNum(Temp, 2, &ts->TerminalHeight);
578 if (ts->TerminalWidth < 0)
579 ts->TerminalWidth = 1;
580 if (ts->TerminalHeight < 0)
581 ts->TerminalHeight = 1;
582
583 /* Terminal size = Window size */
584 ts->TermIsWin = GetOnOff(Section, "TermIsWin", FName, FALSE);
585
586 /* Auto window resize flag */
587 ts->AutoWinResize = GetOnOff(Section, "AutoWinResize", FName, FALSE);
588
589 /* CR Receive */
590 GetPrivateProfileString(Section, "CRReceive", "",
591 Temp, sizeof(Temp), FName);
592 if (_stricmp(Temp, "CRLF") == 0) {
593 ts->CRReceive = IdCRLF;
594 }
595 else if (_stricmp(Temp, "LF") == 0) {
596 ts->CRReceive = IdLF;
597 }
598 else if (_stricmp(Temp, "AUTO") == 0) {
599 ts->CRReceive = IdAUTO;
600 }
601 else {
602 ts->CRReceive = IdCR;
603 }
604 /* CR Send */
605 GetPrivateProfileString(Section, "CRSend", "",
606 Temp, sizeof(Temp), FName);
607 if (_stricmp(Temp, "CRLF") == 0) {
608 ts->CRSend = IdCRLF;
609 }
610 else if (_stricmp(Temp, "LF") == 0) {
611 ts->CRSend = IdLF;
612 }
613 else {
614 ts->CRSend = IdCR;
615 }
616 ts->CRSend_ini = ts->CRSend;
617
618 /* Local echo */
619 ts->LocalEcho = GetOnOff(Section, "LocalEcho", FName, FALSE);
620 ts->LocalEcho_ini = ts->LocalEcho;
621
622 /* Answerback */
623 GetPrivateProfileString(Section, "Answerback", "", Temp,
624 sizeof(Temp), FName);
625 ts->AnswerbackLen =
626 Hex2Str(Temp, ts->Answerback, sizeof(ts->Answerback));
627
628 /* Kanji Code (receive) */
629 GetPrivateProfileString(Section, "KanjiReceive", "",
630 Temp, sizeof(Temp), FName);
631 if (_stricmp(Temp, "EUC") == 0)
632 ts->KanjiCode = IdEUC;
633 else if (_stricmp(Temp, "JIS") == 0)
634 ts->KanjiCode = IdJIS;
635 else if (_stricmp(Temp, "UTF-8") == 0)
636 ts->KanjiCode = IdUTF8;
637 else if (_stricmp(Temp, "UTF-8m") == 0)
638 ts->KanjiCode = IdUTF8m;
639 else if (_stricmp(Temp, "KS5601") == 0)
640 ts->KanjiCode = IdSJIS;
641 else
642 ts->KanjiCode = IdSJIS;
643 // KanjiCode/KanjiCodeSend �������� Language �����������l���u��������
644 {
645 WORD KanjiCode = ts->KanjiCode;
646 ts->KanjiCode = KanjiCodeTranslate(ts->Language,KanjiCode);
647 }
648
649 /* Katakana (receive) */
650 GetPrivateProfileString(Section, "KatakanaReceive", "",
651 Temp, sizeof(Temp), FName);
652 if (_stricmp(Temp, "7") == 0)
653 ts->JIS7Katakana = 1;
654 else
655 ts->JIS7Katakana = 0;
656
657 /* Kanji Code (transmit) */
658 GetPrivateProfileString(Section, "KanjiSend", "",
659 Temp, sizeof(Temp), FName);
660 if (_stricmp(Temp, "EUC") == 0)
661 ts->KanjiCodeSend = IdEUC;
662 else if (_stricmp(Temp, "JIS") == 0)
663 ts->KanjiCodeSend = IdJIS;
664 else if (_stricmp(Temp, "UTF-8") == 0)
665 ts->KanjiCodeSend = IdUTF8;
666 else if (_stricmp(Temp, "KS5601") == 0)
667 ts->KanjiCode = IdSJIS;
668 else
669 ts->KanjiCodeSend = IdSJIS;
670 // KanjiCode/KanjiCodeSend �������� Language �����������l���u��������
671 {
672 WORD KanjiCodeSend = ts->KanjiCodeSend;
673 ts->KanjiCodeSend = KanjiCodeTranslate(ts->Language,KanjiCodeSend);
674 }
675
676 /* Katakana (receive) */
677 GetPrivateProfileString(Section, "KatakanaSend", "",
678 Temp, sizeof(Temp), FName);
679 if (_stricmp(Temp, "7") == 0)
680 ts->JIS7KatakanaSend = 1;
681 else
682 ts->JIS7KatakanaSend = 0;
683
684 /* KanjiIn */
685 GetPrivateProfileString(Section, "KanjiIn", "",
686 Temp, sizeof(Temp), FName);
687 if (_stricmp(Temp, "@") == 0)
688 ts->KanjiIn = IdKanjiInA;
689 else
690 ts->KanjiIn = IdKanjiInB;
691
692 /* KanjiOut */
693 GetPrivateProfileString(Section, "KanjiOut", "",
694 Temp, sizeof(Temp), FName);
695 if (_stricmp(Temp, "B") == 0)
696 ts->KanjiOut = IdKanjiOutB;
697 else if (_stricmp(Temp, "H") == 0)
698 ts->KanjiOut = IdKanjiOutH;
699 else
700 ts->KanjiOut = IdKanjiOutJ;
701
702 /* Auto Win Switch VT<->TEK */
703 ts->AutoWinSwitch = GetOnOff(Section, "AutoWinSwitch", FName, FALSE);
704
705 /* Terminal ID */
706 GetPrivateProfileString(Section, "TerminalID", "",
707 Temp, sizeof(Temp), FName);
708 ts->TerminalID = str2id(TermList, Temp, IdVT100);
709
710 /* Russian character set (host) */
711 GetPrivateProfileString(Section, "RussHost", "",
712 Temp, sizeof(Temp), FName);
713 ts->RussHost = str2id(RussList, Temp, IdKOI8);
714
715 /* Russian character set (client) */
716 GetPrivateProfileString(Section, "RussClient", "",
717 Temp, sizeof(Temp), FName);
718 ts->RussClient = str2id(RussList, Temp, IdWindows);
719
720 /* Title String */
721 GetPrivateProfileString(Section, "Title", "Tera Term",
722 ts->Title, sizeof(ts->Title), FName);
723
724 /* Cursor shape */
725 GetPrivateProfileString(Section, "CursorShape", "",
726 Temp, sizeof(Temp), FName);
727 if (_stricmp(Temp, "vertical") == 0)
728 ts->CursorShape = IdVCur;
729 else if (_stricmp(Temp, "horizontal") == 0)
730 ts->CursorShape = IdHCur;
731 else
732 ts->CursorShape = IdBlkCur;
733
734 /* Hide title */
735 ts->HideTitle = GetOnOff(Section, "HideTitle", FName, FALSE);
736
737 /* Popup menu */
738 ts->PopupMenu = GetOnOff(Section, "PopupMenu", FName, FALSE);
739
740 /* PC-Style bold color mapping */
741 if (GetOnOff(Section, "PcBoldColor", FName, FALSE))
742 ts->ColorFlag |= CF_PCBOLD16;
743
744 /* aixterm style 16 colors mode */
745 if (GetOnOff(Section, "Aixterm16Color", FName, FALSE))
746 ts->ColorFlag |= CF_AIXTERM16;
747
748 /* xterm style 256 colors mode */
749 if (GetOnOff(Section, "Xterm256Color", FName, TRUE))
750 ts->ColorFlag |= CF_XTERM256;
751
752 /* Enable scroll buffer */
753 ts->EnableScrollBuff =
754 GetOnOff(Section, "EnableScrollBuff", FName, TRUE);
755
756 /* Scroll buffer size */
757 ts->ScrollBuffSize =
758 GetPrivateProfileInt(Section, "ScrollBuffSize", 100, FName);
759
760 /* VT Color */
761 GetPrivateProfileString(Section, "VTColor", "0,0,0,255,255,255",
762 Temp, sizeof(Temp), FName);
763 for (i = 0; i <= 5; i++)
764 GetNthNum(Temp, i + 1, (int far *) &(ts->TmpColor[0][i]));
765 for (i = 0; i <= 1; i++)
766 ts->VTColor[i] = RGB((BYTE) ts->TmpColor[0][i * 3],
767 (BYTE) ts->TmpColor[0][i * 3 + 1],
768 (BYTE) ts->TmpColor[0][i * 3 + 2]);
769
770 /* VT Bold Color */
771 GetPrivateProfileString(Section, "VTBoldColor", "0,0,255,255,255,255",
772 Temp, sizeof(Temp), FName);
773 for (i = 0; i <= 5; i++)
774 GetNthNum(Temp, i + 1, (int far *) &(ts->TmpColor[0][i]));
775 for (i = 0; i <= 1; i++)
776 ts->VTBoldColor[i] = RGB((BYTE) ts->TmpColor[0][i * 3],
777 (BYTE) ts->TmpColor[0][i * 3 + 1],
778 (BYTE) ts->TmpColor[0][i * 3 + 2]);
779 if (GetOnOff(Section, "EnableBoldAttrColor", FName, TRUE))
780 ts->ColorFlag |= CF_BOLDCOLOR;
781
782 /* VT Blink Color */
783 GetPrivateProfileString(Section, "VTBlinkColor", "255,0,0,255,255,255",
784 Temp, sizeof(Temp), FName);
785 for (i = 0; i <= 5; i++)
786 GetNthNum(Temp, i + 1, (int far *) &(ts->TmpColor[0][i]));
787 for (i = 0; i <= 1; i++)
788 ts->VTBlinkColor[i] = RGB((BYTE) ts->TmpColor[0][i * 3],
789 (BYTE) ts->TmpColor[0][i * 3 + 1],
790 (BYTE) ts->TmpColor[0][i * 3 + 2]);
791 if (GetOnOff(Section, "EnableBlinkAttrColor", FName, TRUE))
792 ts->ColorFlag |= CF_BLINKCOLOR;
793
794 /* VT Reverse Color */
795 GetPrivateProfileString(Section, "VTReverseColor", "255,255,255,0,0,0",
796 Temp, sizeof(Temp), FName);
797 for (i = 0; i <= 5; i++)
798 GetNthNum(Temp, i + 1, (int far *) &(ts->TmpColor[0][i]));
799 for (i = 0; i <= 1; i++)
800 ts->VTReverseColor[i] = RGB((BYTE) ts->TmpColor[0][i * 3],
801 (BYTE) ts->TmpColor[0][i * 3 + 1],
802 (BYTE) ts->TmpColor[0][i * 3 + 2]);
803 if (GetOnOff(Section, "EnableReverseAttrColor", FName, FALSE))
804 ts->ColorFlag |= CF_REVERSECOLOR;
805
806 ts->EnableClickableUrl =
807 GetOnOff(Section, "EnableClickableUrl", FName, FALSE);
808
809 /* URL Color */
810 GetPrivateProfileString(Section, "URLColor", "0,255,0,255,255,255",
811 Temp, sizeof(Temp), FName);
812 for (i = 0; i <= 5; i++)
813 GetNthNum(Temp, i + 1, (int far *) &(ts->TmpColor[0][i]));
814 for (i = 0; i <= 1; i++)
815 ts->URLColor[i] = RGB((BYTE) ts->TmpColor[0][i * 3],
816 (BYTE) ts->TmpColor[0][i * 3 + 1],
817 (BYTE) ts->TmpColor[0][i * 3 + 2]);
818 if (GetOnOff(Section, "EnableURLColor", FName, TRUE))
819 ts->ColorFlag |= CF_URLCOLOR;
820
821 if (GetOnOff(Section, "URLUnderline", FName, TRUE))
822 ts->FontFlag |= FF_URLUNDERLINE;
823
824 /* TEK Color */
825 GetPrivateProfileString(Section, "TEKColor", "0,0,0,255,255,255",
826 Temp, sizeof(Temp), FName);
827 for (i = 0; i <= 5; i++)
828 GetNthNum(Temp, i + 1, (int far *) &(ts->TmpColor[0][i]));
829 for (i = 0; i <= 1; i++)
830 ts->TEKColor[i] = RGB((BYTE) ts->TmpColor[0][i * 3],
831 (BYTE) ts->TmpColor[0][i * 3 + 1],
832 (BYTE) ts->TmpColor[0][i * 3 + 2]);
833
834 /* ANSI color definition (in the case FullColor=on) -- special option
835 o UseTextColor should be off, or the background and foreground color of
836 VTColor are assigned to color-number 0 and 7 respectively, even if
837 they are specified in ANSIColor.
838 o ANSIColor is a set of 4 values that are color-number(0--15),
839 red-value(0--255), green-value(0--255) and blue-value(0--255). */
840 GetPrivateProfileString(Section, "ANSIColor",
841 " 0, 0, 0, 0,"
842 " 1,255, 0, 0,"
843 " 2, 0,255, 0,"
844 " 3,255,255, 0,"
845 " 4, 0, 0,255,"
846 " 5,255, 0,255,"
847 " 6, 0,255,255,"
848 " 7,255,255,255,"
849 " 8,128,128,128,"
850 " 9,128, 0, 0,"
851 "10, 0,128, 0,"
852 "11,128,128, 0,"
853 "12, 0, 0,128,"
854 "13,128, 0,128,"
855 "14, 0,128,128,"
856 "15,192,192,192", Temp, sizeof(Temp), FName);
857 {
858 char *t;
859 int n = 1;
860 for (t = Temp; *t; t++)
861 if (*t == ',')
862 n++;
863 n /= 4;
864 for (i = 0; i < n; i++) {
865 int colorid, r, g, b;
866 GetNthNum(Temp, i * 4 + 1, (int far *) &colorid);
867 GetNthNum(Temp, i * 4 + 2, (int far *) &r);
868 GetNthNum(Temp, i * 4 + 3, (int far *) &g);
869 GetNthNum(Temp, i * 4 + 4, (int far *) &b);
870 ts->ANSIColor[colorid & 15] =
871 RGB((BYTE) r, (BYTE) g, (BYTE) b);
872 }
873 }
874
875 TmpDC = GetDC(0); /* Get screen device context */
876 for (i = 0; i <= 1; i++)
877 ts->VTColor[i] = GetNearestColor(TmpDC, ts->VTColor[i]);
878 for (i = 0; i <= 1; i++)
879 ts->VTBoldColor[i] = GetNearestColor(TmpDC, ts->VTBoldColor[i]);
880 for (i = 0; i <= 1; i++)
881 ts->VTBlinkColor[i] = GetNearestColor(TmpDC, ts->VTBlinkColor[i]);
882 for (i = 0; i <= 1; i++)
883 ts->TEKColor[i] = GetNearestColor(TmpDC, ts->TEKColor[i]);
884 /* begin - ishizaki */
885 for (i = 0; i <= 1; i++)
886 ts->URLColor[i] = GetNearestColor(TmpDC, ts->URLColor[i]);
887 /* end - ishizaki */
888 for (i = 0; i < 16; i++)
889 ts->ANSIColor[i] = GetNearestColor(TmpDC, ts->ANSIColor[i]);
890 ReleaseDC(0, TmpDC);
891 if (GetOnOff(Section, "EnableANSIColor", FName, TRUE))
892 ts->ColorFlag |= CF_ANSICOLOR;
893
894 /* TEK color emulation */
895 ts->TEKColorEmu = GetOnOff(Section, "TEKColorEmulation", FName, FALSE);
896
897 /* VT Font */
898 GetPrivateProfileString(Section, "VTFont", "Terminal,0,-13,1",
899 Temp, sizeof(Temp), FName);
900 GetNthString(Temp, 1, sizeof(ts->VTFont), ts->VTFont);
901 GetNthNum(Temp, 2, (int far *) &(ts->VTFontSize.x));
902 GetNthNum(Temp, 3, (int far *) &(ts->VTFontSize.y));
903 GetNthNum(Temp, 4, &(ts->VTFontCharSet));
904
905 /* Bold font flag */
906 if (GetOnOff(Section, "EnableBold", FName, TRUE))
907 ts->FontFlag |= FF_BOLD;
908
909 /* Russian character set (font) */
910 GetPrivateProfileString(Section, "RussFont", "",
911 Temp, sizeof(Temp), FName);
912 ts->RussFont = str2id(RussList, Temp, IdWindows);
913
914 /* TEK Font */
915 GetPrivateProfileString(Section, "TEKFont", "Courier,0,-13,0",
916 Temp, sizeof(Temp), FName);
917 GetNthString(Temp, 1, sizeof(ts->TEKFont), ts->TEKFont);
918 GetNthNum(Temp, 2, (int far *) &(ts->TEKFontSize.x));
919 GetNthNum(Temp, 3, (int far *) &(ts->TEKFontSize.y));
920 GetNthNum(Temp, 4, &(ts->TEKFontCharSet));
921
922 /* BS key */
923 GetPrivateProfileString(Section, "BSKey", "",
924 Temp, sizeof(Temp), FName);
925 if (_stricmp(Temp, "DEL") == 0)
926 ts->BSKey = IdDEL;
927 else
928 ts->BSKey = IdBS;
929 /* Delete key */
930 ts->DelKey = GetOnOff(Section, "DeleteKey", FName, FALSE);
931
932 /* Meta Key */
933 GetPrivateProfileString(Section, "MetaKey", "off", Temp, sizeof(Temp), FName);
934 if (_stricmp(Temp, "on") == 0)
935 ts->MetaKey = IdMetaOn;
936 else if (_stricmp(Temp, "left") == 0)
937 ts->MetaKey = IdMetaLeft;
938 else if (_stricmp(Temp, "right") == 0)
939 ts->MetaKey = IdMetaRight;
940 else
941 ts->MetaKey = IdMetaOff;
942
943 // Windows95 �n�����E�� Alt ��������������
944 if (!IsWindowsNTKernel() && ts->MetaKey != IdMetaOff) {
945 ts->MetaKey = IdMetaOn;
946 }
947
948 /* Application Keypad */
949 ts->DisableAppKeypad =
950 GetOnOff(Section, "DisableAppKeypad", FName, FALSE);
951
952 /* Application Cursor */
953 ts->DisableAppCursor =
954 GetOnOff(Section, "DisableAppCursor", FName, FALSE);
955
956 /* Russian keyboard type */
957 GetPrivateProfileString(Section, "RussKeyb", "",
958 Temp, sizeof(Temp), FName);
959 ts->RussKeyb = str2id(RussList2, Temp, IdWindows);
960
961 /* Serial port ID */
962 ts->ComPort = GetPrivateProfileInt(Section, "ComPort", 1, FName);
963
964 /* Baud rate */
965 ts->Baud = GetPrivateProfileInt(Section, "BaudRate", 9600, FName);
966
967 /* Parity */
968 GetPrivateProfileString(Section, "Parity", "",
969 Temp, sizeof(Temp), FName);
970 if (_stricmp(Temp, "even") == 0)
971 ts->Parity = IdParityEven;
972 else if (_stricmp(Temp, "odd") == 0)
973 ts->Parity = IdParityOdd;
974 else if (_stricmp(Temp, "mark") == 0)
975 ts->Parity = IdParityMark;
976 else if (_stricmp(Temp, "space") == 0)
977 ts->Parity = IdParitySpace;
978 else
979 ts->Parity = IdParityNone;
980
981 /* Data bit */
982 GetPrivateProfileString(Section, "DataBit", "",
983 Temp, sizeof(Temp), FName);
984 if (_stricmp(Temp, "7") == 0)
985 ts->DataBit = IdDataBit7;
986 else
987 ts->DataBit = IdDataBit8;
988
989 /* Stop bit */
990 GetPrivateProfileString(Section, "StopBit", "",
991 Temp, sizeof(Temp), FName);
992 if (_stricmp(Temp, "2") == 0)
993 ts->StopBit = IdStopBit2;
994 else if (_stricmp(Temp, "1.5") == 0)
995 ts->StopBit = IdStopBit15;
996 else
997 ts->StopBit = IdStopBit1;
998
999 /* Flow control */
1000 GetPrivateProfileString(Section, "FlowCtrl", "",
1001 Temp, sizeof(Temp), FName);
1002 if (_stricmp(Temp, "x") == 0)
1003 ts->Flow = IdFlowX;
1004 else if (_stricmp(Temp, "hard") == 0)
1005 ts->Flow = IdFlowHard;
1006 else
1007 ts->Flow = IdFlowNone;
1008
1009 /* Delay per character */
1010 ts->DelayPerChar =
1011 GetPrivateProfileInt(Section, "DelayPerChar", 0, FName);
1012
1013 /* Delay per line */
1014 ts->DelayPerLine =
1015 GetPrivateProfileInt(Section, "DelayPerLine", 0, FName);
1016
1017 /* Telnet flag */
1018 ts->Telnet = GetOnOff(Section, "Telnet", FName, TRUE);
1019
1020 /* Telnet terminal type */
1021 GetPrivateProfileString(Section, "TermType", "xterm", ts->TermType,
1022 sizeof(ts->TermType), FName);
1023
1024 /* TCP port num */
1025 ts->TCPPort =
1026 GetPrivateProfileInt(Section, "TCPPort", ts->TelPort, FName);
1027
1028 /* Auto window close flag */
1029 ts->AutoWinClose = GetOnOff(Section, "AutoWinClose", FName, TRUE);
1030
1031 /* History list */
1032 ts->HistoryList = GetOnOff(Section, "HistoryList", FName, FALSE);
1033
1034 /* File transfer binary flag */
1035 ts->TransBin = GetOnOff(Section, "TransBin", FName, FALSE);
1036
1037 /* Log binary flag */
1038 ts->LogBinary = GetOnOff(Section, "LogBinary", FName, FALSE);
1039
1040 /* Log append */
1041 ts->Append = GetOnOff(Section, "LogAppend", FName, FALSE);
1042
1043 /* Log plain text (2005.5.7 yutaka) */
1044 ts->LogTypePlainText =
1045 GetOnOff(Section, "LogTypePlainText", FName, FALSE);
1046
1047 /* Log with timestamp (2006.7.23 maya) */
1048 ts->LogTimestamp = GetOnOff(Section, "LogTimestamp", FName, FALSE);
1049
1050 /* Log without transfer dialog */
1051 ts->LogHideDialog = GetOnOff(Section, "LogHideDialog", FName, FALSE);
1052
1053 ts->LogAllBuffIncludedInFirst = GetOnOff(Section, "LogIncludeScreenBuffer", FName, FALSE);
1054
1055 /* Timestamp format of Log each line */
1056 GetPrivateProfileString(Section, "LogTimestampFormat", "%a %b %e %H:%M:%S.%N %Y",
1057 ts->LogTimestampFormat, sizeof(ts->LogTimestampFormat),
1058 FName);
1059
1060 /* Use UTC/GMT time for Log each line timestamp */
1061 ts->LogTimestampUTC = GetOnOff(Section, "LogTimestampUTC", FName, FALSE);
1062
1063 /* File Transfer dialog visibility */
1064 ts->FTHideDialog = GetOnOff(Section, "FTHideDialog", FName, FALSE);
1065
1066 /* Default Log file name (2006.8.28 maya) */
1067 GetPrivateProfileString(Section, "LogDefaultName", "teraterm.log",
1068 ts->LogDefaultName, sizeof(ts->LogDefaultName),
1069 FName);
1070
1071 /* Default Log file path (2007.5.30 maya) */
1072 GetPrivateProfileString(Section, "LogDefaultPath", "",
1073 ts->LogDefaultPath, sizeof(ts->LogDefaultPath),
1074 FName);
1075
1076 /* Auto start logging (2007.5.31 maya) */
1077 ts->LogAutoStart = GetOnOff(Section, "LogAutoStart", FName, FALSE);
1078
1079 /* Log Rotate (2013.3.24 yutaka) */
1080 ts->LogRotate = GetPrivateProfileInt(Section, "LogRotate", 0, FName);
1081 ts->LogRotateSize = GetPrivateProfileInt(Section, "LogRotateSize", 0, FName);
1082 ts->LogRotateSizeType = GetPrivateProfileInt(Section, "LogRotateSizeType", 0, FName);
1083 ts->LogRotateStep = GetPrivateProfileInt(Section, "LogRotateStep", 0, FName);
1084
1085 /* Deferred Log Write Mode (2013.4.20 yutaka) */
1086 ts->DeferredLogWriteMode = GetOnOff(Section, "DeferredLogWriteMode", FName, TRUE);
1087
1088
1089 /* XMODEM option */
1090 GetPrivateProfileString(Section, "XmodemOpt", "",
1091 Temp, sizeof(Temp), FName);
1092 if (_stricmp(Temp, "crc") == 0)
1093 ts->XmodemOpt = XoptCRC;
1094 else if (_stricmp(Temp, "1k") == 0)
1095 ts->XmodemOpt = Xopt1kCRC;
1096 else if (_stricmp(Temp, "1ksum") == 0)
1097 ts->XmodemOpt = Xopt1kCksum;
1098 else
1099 ts->XmodemOpt = XoptCheck;
1100
1101 /* XMODEM binary file */
1102 ts->XmodemBin = GetOnOff(Section, "XmodemBin", FName, TRUE);
1103
1104 /* XMODEM ���M�R�}���h (2007.12.21 yutaka) */
1105 GetPrivateProfileString(Section, "XModemRcvCommand", "",
1106 ts->XModemRcvCommand,
1107 sizeof(ts->XModemRcvCommand), FName);
1108
1109 /* Default directory for file transfer */
1110 GetPrivateProfileString(Section, "FileDir", "",
1111 ts->FileDir, sizeof(ts->FileDir), FName);
1112 if (strlen(ts->FileDir) == 0)
1113 GetDownloadFolder(ts->FileDir, sizeof(ts->FileDir));
1114 else {
1115 _getcwd(Temp, sizeof(Temp));
1116 if (_chdir(ts->FileDir) != 0)
1117 GetDownloadFolder(ts->FileDir, sizeof(ts->FileDir));
1118 _chdir(Temp);
1119 }
1120
1121 /* filter on file send (2007.6.5 maya) */
1122 GetPrivateProfileString(Section, "FileSendFilter", "",
1123 ts->FileSendFilter, sizeof(ts->FileSendFilter),
1124 FName);
1125
1126 /* SCP���M���p�X (2012.4.6 yutaka) */
1127 GetPrivateProfileString(Section, "ScpSendDir", "",
1128 ts->ScpSendDir, sizeof(ts->ScpSendDir), FName);
1129
1130
1131 /*--------------------------------------------------*/
1132 /* 8 bit control code flag -- special option */
1133 if (GetOnOff(Section, "Accept8BitCtrl", FName, TRUE))
1134 ts->TermFlag |= TF_ACCEPT8BITCTRL;
1135
1136 /* Wrong sequence flag -- special option */
1137 if (GetOnOff(Section, "AllowWrongSequence", FName, FALSE))
1138 ts->TermFlag |= TF_ALLOWWRONGSEQUENCE;
1139
1140 if (((ts->TermFlag & TF_ALLOWWRONGSEQUENCE) == 0) &&
1141 (ts->KanjiOut == IdKanjiOutH))
1142 ts->KanjiOut = IdKanjiOutJ;
1143
1144 // Detect disconnect/reconnect of serial port --- special option
1145 ts->AutoComPortReconnect = GetOnOff(Section, "AutoComPortReconnect", FName, TRUE);
1146
1147 // Auto file renaming --- special option
1148 if (GetOnOff(Section, "AutoFileRename", FName, FALSE))
1149 ts->FTFlag |= FT_RENAME;
1150
1151 // Auto invoking (character set->G0->GL) --- special option
1152 if (GetOnOff(Section, "AutoInvoke", FName, FALSE))
1153 ts->TermFlag |= TF_AUTOINVOKE;
1154
1155 // Auto text copy --- special option
1156 ts->AutoTextCopy = GetOnOff(Section, "AutoTextCopy", FName, TRUE);
1157
1158 /* Back wrap -- special option */
1159 if (GetOnOff(Section, "BackWrap", FName, FALSE))
1160 ts->TermFlag |= TF_BACKWRAP;
1161
1162 /* Beep type -- special option */
1163 GetPrivateProfileString(Section, "Beep", "", Temp, sizeof(Temp), FName);
1164 if (_stricmp(Temp, "off") == 0)
1165 ts->Beep = IdBeepOff;
1166 else if (_stricmp(Temp, "visual") == 0)
1167 ts->Beep = IdBeepVisual;
1168 else
1169 ts->Beep = IdBeepOn;
1170
1171 /* Beep on connection & disconnection -- special option */
1172 if (GetOnOff(Section, "BeepOnConnect", FName, FALSE))
1173 ts->PortFlag |= PF_BEEPONCONNECT;
1174
1175 /* Auto B-Plus activation -- special option */
1176 if (GetOnOff(Section, "BPAuto", FName, FALSE))
1177 ts->FTFlag |= FT_BPAUTO;
1178 if ((ts->FTFlag & FT_BPAUTO) != 0) { /* Answerback */
1179 strncpy_s(ts->Answerback, sizeof(ts->Answerback), "\020++\0200",
1180 _TRUNCATE);
1181 ts->AnswerbackLen = 5;
1182 }
1183
1184 /* B-Plus ESCCTL flag -- special option */
1185 if (GetOnOff(Section, "BPEscCtl", FName, FALSE))
1186 ts->FTFlag |= FT_BPESCCTL;
1187
1188 /* B-Plus log -- special option */
1189 if (GetOnOff(Section, "BPLog", FName, FALSE))
1190 ts->LogFlag |= LOG_BP;
1191
1192 /* Clear serial port buffer when port opening -- special option */
1193 ts->ClearComBuffOnOpen =
1194 GetOnOff(Section, "ClearComBuffOnOpen", FName, TRUE);
1195
1196 /* When serial port is specified with with /C= option and the port does not exist, Tera Term will wait for port connection. */
1197 ts->WaitCom = GetOnOff(Section, "WaitCom", FName, FALSE);
1198
1199 /* Confirm disconnection -- special option */
1200 if (GetOnOff(Section, "ConfirmDisconnect", FName, TRUE))
1201 ts->PortFlag |= PF_CONFIRMDISCONN;
1202
1203 /* Ctrl code in Kanji -- special option */
1204 if (GetOnOff(Section, "CtrlInKanji", FName, TRUE))
1205 ts->TermFlag |= TF_CTRLINKANJI;
1206
1207 /* Debug flag -- special option */
1208 ts->Debug = GetOnOff(Section, "Debug", FName, FALSE);
1209
1210 /* Delimiter list -- special option */
1211 GetPrivateProfileString(Section, "DelimList",
1212 "$20!\"#$24%&\'()*+,-./:;<=>?@[\\]^`{|}~",
1213 Temp, sizeof(Temp), FName);
1214 Hex2Str(Temp, ts->DelimList, sizeof(ts->DelimList));
1215
1216 /* regard DBCS characters as delimiters -- special option */
1217 ts->DelimDBCS = GetOnOff(Section, "DelimDBCS", FName, TRUE);
1218
1219 // Enable popup menu -- special option
1220 if (!GetOnOff(Section, "EnablePopupMenu", FName, TRUE))
1221 ts->MenuFlag |= MF_NOPOPUP;
1222
1223 // Enable "Show menu" -- special option
1224 if (!GetOnOff(Section, "EnableShowMenu", FName, TRUE))
1225 ts->MenuFlag |= MF_NOSHOWMENU;
1226
1227 // Enable the status line -- special option
1228 if (GetOnOff(Section, "EnableStatusLine", FName, TRUE))
1229 ts->TermFlag |= TF_ENABLESLINE;
1230
1231 // Enable multiple bytes send -- special option
1232 ts->FileSendHighSpeedMode = GetOnOff(Section, "FileSendHighSpeedMode", FName, TRUE);
1233
1234 // fixed JIS --- special
1235 if (GetOnOff(Section, "FixedJIS", FName, FALSE))
1236 ts->TermFlag |= TF_FIXEDJIS;
1237
1238 /* IME Flag -- special option */
1239 ts->UseIME = GetOnOff(Section, "IME", FName, TRUE);
1240
1241 /* IME-inline Flag -- special option */
1242 ts->IMEInline = GetOnOff(Section, "IMEInline", FName, TRUE);
1243
1244 /* Kermit log -- special option */
1245 if (GetOnOff(Section, "KmtLog", FName, FALSE))
1246 ts->LogFlag |= LOG_KMT;
1247 if (GetOnOff(Section, "KmtLongPacket", FName, FALSE))
1248 ts->KermitOpt |= KmtOptLongPacket;
1249 if (GetOnOff(Section, "KmtFileAttr", FName, FALSE))
1250 ts->KermitOpt |= KmtOptFileAttr;
1251
1252 // Enable language selection -- special option
1253 if (!GetOnOff(Section, "LanguageSelection", FName, TRUE))
1254 ts->MenuFlag |= MF_NOLANGUAGE;
1255
1256 /* Maximum scroll buffer size -- special option */
1257 ts->ScrollBuffMax =
1258 GetPrivateProfileInt(Section, "MaxBuffSize", 10000, FName);
1259 if (ts->ScrollBuffMax < 24)
1260 ts->ScrollBuffMax = 10000;
1261
1262 /* Max com port number -- special option */
1263 ts->MaxComPort = GetPrivateProfileInt(Section, "MaxComPort", 256, FName);
1264 if (ts->MaxComPort < 4)
1265 ts->MaxComPort = 4;
1266 if (ts->MaxComPort > MAXCOMPORT)
1267 ts->MaxComPort = MAXCOMPORT;
1268 if ((ts->ComPort < 1) || (ts->ComPort > ts->MaxComPort))
1269 ts->ComPort = 1;
1270
1271 /* Non-blinking cursor -- special option */
1272 ts->NonblinkingCursor =
1273 GetOnOff(Section, "NonblinkingCursor", FName, FALSE);
1274
1275 // �t�H�[�J�X���������|���S���J�[�\�� (2008.1.24 yutaka)
1276 ts->KillFocusCursor =
1277 GetOnOff(Section, "KillFocusCursor", FName, TRUE);
1278
1279 /* Delay for pass-thru printing activation */
1280 /* -- special option */
1281 ts->PassThruDelay =
1282 GetPrivateProfileInt(Section, "PassThruDelay", 3, FName);
1283
1284 /* Printer port for pass-thru printing */
1285 /* -- special option */
1286 GetPrivateProfileString(Section, "PassThruPort", "",
1287 ts->PrnDev, sizeof(ts->PrnDev), FName);
1288
1289 /* �v�����^�p�����R�[�h�������t������ */
1290 if (GetOnOff(Section, "PrinterCtrlSequence", FName, TRUE))
1291 ts->TermFlag |= TF_PRINTERCTRL;
1292
1293 /* Printer Font --- special option */
1294 GetPrivateProfileString(Section, "PrnFont", "",
1295 Temp, sizeof(Temp), FName);
1296 if (strlen(Temp) == 0) {
1297 ts->PrnFont[0] = 0;
1298 ts->PrnFontSize.x = 0;
1299 ts->PrnFontSize.y = 0;
1300 ts->PrnFontCharSet = 0;
1301 }
1302 else {
1303 GetNthString(Temp, 1, sizeof(ts->PrnFont), ts->PrnFont);
1304 GetNthNum(Temp, 2, (int far *) &(ts->PrnFontSize.x));
1305 GetNthNum(Temp, 3, (int far *) &(ts->PrnFontSize.y));
1306 GetNthNum(Temp, 4, &(ts->PrnFontCharSet));
1307 }
1308
1309 // Page margins (left, right, top, bottom) for printing
1310 // -- special option
1311 GetPrivateProfileString(Section, "PrnMargin", "50,50,50,50",
1312 Temp, sizeof(Temp), FName);
1313 for (i = 0; i <= 3; i++)
1314 GetNthNum(Temp, 1 + i, &ts->PrnMargin[i]);
1315
1316 /* Quick-VAN log -- special option */
1317 if (GetOnOff(Section, "QVLog", FName, FALSE))
1318 ts->LogFlag |= LOG_QV;
1319
1320 /* Quick-VAN window size -- special */
1321 ts->QVWinSize = GetPrivateProfileInt(Section, "QVWinSize", 8, FName);
1322
1323 /* Russian character set (print) -- special option */
1324 GetPrivateProfileString(Section, "RussPrint", "",
1325 Temp, sizeof(Temp), FName);
1326 ts->RussPrint = str2id(RussList, Temp, IdWindows);
1327
1328 /* Scroll threshold -- special option */
1329 ts->ScrollThreshold =
1330 GetPrivateProfileInt(Section, "ScrollThreshold", 12, FName);
1331
1332 ts->MouseWheelScrollLine =
1333 GetPrivateProfileInt(Section, "MouseWheelScrollLine", 3, FName);
1334
1335 // Select on activate -- special option
1336 ts->SelOnActive = GetOnOff(Section, "SelectOnActivate", FName, TRUE);
1337
1338 /* Send 8bit control sequence -- special option */
1339 ts->Send8BitCtrl = GetOnOff(Section, "Send8BitCtrl", FName, FALSE);
1340
1341 /* SendBreak time (in msec) -- special option */
1342 ts->SendBreakTime =
1343 GetPrivateProfileInt(Section, "SendBreakTime", 1000, FName);
1344
1345 /* Startup macro -- special option */
1346 GetPrivateProfileString(Section, "StartupMacro", "",
1347 ts->MacroFN, sizeof(ts->MacroFN), FName);
1348
1349 /* TEK GIN Mouse keycode -- special option */
1350 ts->GINMouseCode =
1351 GetPrivateProfileInt(Section, "TEKGINMouseCode", 32, FName);
1352
1353 /* Telnet Auto Detect -- special option */
1354 ts->TelAutoDetect = GetOnOff(Section, "TelAutoDetect", FName, TRUE);
1355
1356 /* Telnet binary flag -- special option */
1357 ts->TelBin = GetOnOff(Section, "TelBin", FName, FALSE);
1358
1359 /* Telnet Echo flag -- special option */
1360 ts->TelEcho = GetOnOff(Section, "TelEcho", FName, FALSE);
1361
1362 /* Telnet log -- special option */
1363 if (GetOnOff(Section, "TelLog", FName, FALSE))
1364 ts->LogFlag |= LOG_TEL;
1365
1366 /* TCP port num for telnet -- special option */
1367 ts->TelPort = GetPrivateProfileInt(Section, "TelPort", 23, FName);
1368
1369 /* Telnet keep-alive packet(NOP command) interval -- special option */
1370 ts->TelKeepAliveInterval =
1371 GetPrivateProfileInt(Section, "TelKeepAliveInterval", 300, FName);
1372
1373 /* Max number of broadcast commad history */
1374 ts->MaxBroadcatHistory =
1375 GetPrivateProfileInt(Section, "MaxBroadcatHistory", 99, FName);
1376
1377 /* Local echo for non-telnet */
1378 ts->TCPLocalEcho = GetOnOff(Section, "TCPLocalEcho", FName, FALSE);
1379
1380 /* "new-line (transmit)" option for non-telnet -- special option */
1381 GetPrivateProfileString(Section, "TCPCRSend", "",
1382 Temp, sizeof(Temp), FName);
1383 if (_stricmp(Temp, "CR") == 0)
1384 ts->TCPCRSend = IdCR;
1385 else if (_stricmp(Temp, "CRLF") == 0)
1386 ts->TCPCRSend = IdCRLF;
1387 else
1388 ts->TCPCRSend = 0; // disabled
1389
1390 /* Use text (background) color for "white (black)" --- special option */
1391 if (GetOnOff(Section, "UseTextColor", FName, FALSE))
1392 ts->ColorFlag |= CF_USETEXTCOLOR;
1393
1394 /* Title format -- special option */
1395 ts->TitleFormat =
1396 GetPrivateProfileInt(Section, "TitleFormat", 13, FName);
1397
1398 /* VT Compatible Tab -- special option */
1399 ts->VTCompatTab = GetOnOff(Section, "VTCompatTab", FName, FALSE);
1400
1401 /* VT Font space --- special option */
1402 GetPrivateProfileString(Section, "VTFontSpace", "0,0,0,0",
1403 Temp, sizeof(Temp), FName);
1404 GetNthNum(Temp, 1, &ts->FontDX);
1405 GetNthNum(Temp, 2, &ts->FontDW);
1406 GetNthNum(Temp, 3, &ts->FontDY);
1407 GetNthNum(Temp, 4, &ts->FontDH);
1408 if (ts->FontDX < 0)
1409 ts->FontDX = 0;
1410 if (ts->FontDW < 0)
1411 ts->FontDW = 0;
1412 ts->FontDW = ts->FontDW + ts->FontDX;
1413 if (ts->FontDY < 0)
1414 ts->FontDY = 0;
1415 if (ts->FontDH < 0)
1416 ts->FontDH = 0;
1417 ts->FontDH = ts->FontDH + ts->FontDY;
1418
1419 // VT-print scaling factors (pixels per inch) --- special option
1420 GetPrivateProfileString(Section, "VTPPI", "0,0",
1421 Temp, sizeof(Temp), FName);
1422 GetNthNum(Temp, 1, (int far *) &ts->VTPPI.x);
1423 GetNthNum(Temp, 2, (int far *) &ts->VTPPI.y);
1424
1425 // TEK-print scaling factors (pixels per inch) --- special option
1426 GetPrivateProfileString(Section, "TEKPPI", "0,0",
1427 Temp, sizeof(Temp), FName);
1428 GetNthNum(Temp, 1, (int far *) &ts->TEKPPI.x);
1429 GetNthNum(Temp, 2, (int far *) &ts->TEKPPI.y);
1430
1431 // Show "Window" menu -- special option
1432 if (GetOnOff(Section, "WindowMenu", FName, TRUE))
1433 ts->MenuFlag |= MF_SHOWWINMENU;
1434
1435 /* XMODEM log -- special option */
1436 if (GetOnOff(Section, "XmodemLog", FName, FALSE))
1437 ts->LogFlag |= LOG_X;
1438
1439 /* YMODEM log -- special option */
1440 if (GetOnOff(Section, "YmodemLog", FName, FALSE))
1441 ts->LogFlag |= LOG_Y;
1442
1443 /* YMODEM ���M�R�}���h (2010.3.23 yutaka) */
1444 GetPrivateProfileString(Section, "YModemRcvCommand", "rb",
1445 ts->YModemRcvCommand, sizeof(ts->YModemRcvCommand), FName);
1446
1447 /* Auto ZMODEM activation -- special option */
1448 if (GetOnOff(Section, "ZmodemAuto", FName, FALSE))
1449 ts->FTFlag |= FT_ZAUTO;
1450
1451 /* ZMODEM data subpacket length for sending -- special */
1452 ts->ZmodemDataLen =
1453 GetPrivateProfileInt(Section, "ZmodemDataLen", 1024, FName);
1454 /* ZMODEM window size for sending -- special */
1455 ts->ZmodemWinSize =
1456 GetPrivateProfileInt(Section, "ZmodemWinSize", 32767, FName);
1457
1458 /* ZMODEM ESCCTL flag -- special option */
1459 if (GetOnOff(Section, "ZmodemEscCtl", FName, FALSE))
1460 ts->FTFlag |= FT_ZESCCTL;
1461
1462 /* ZMODEM log -- special option */
1463 if (GetOnOff(Section, "ZmodemLog", FName, FALSE))
1464 ts->LogFlag |= LOG_Z;
1465
1466 /* ZMODEM ���M�R�}���h (2007.12.21 yutaka) */
1467 GetPrivateProfileString(Section, "ZModemRcvCommand", "rz",
1468 ts->ZModemRcvCommand, sizeof(ts->ZModemRcvCommand), FName);
1469
1470 #ifndef NO_COPYLINE_FIX
1471 /* Enable continued-line copy -- special option */
1472 ts->EnableContinuedLineCopy =
1473 GetOnOff(Section, "EnableContinuedLineCopy", FName, FALSE);
1474 #endif /* NO_COPYLINE_FIX */
1475
1476 if (GetOnOff(Section, "DisablePasteMouseRButton", FName, FALSE))
1477 ts->PasteFlag |= CPF_DISABLE_RBUTTON;
1478
1479 if (GetOnOff(Section, "DisablePasteMouseMButton", FName, TRUE))
1480 ts->PasteFlag |= CPF_DISABLE_MBUTTON;
1481
1482 if (GetOnOff(Section, "ConfirmPasteMouseRButton", FName, FALSE))
1483 ts->PasteFlag |= CPF_CONFIRM_RBUTTON;
1484
1485 if (GetOnOff(Section, "ConfirmChangePaste", FName, TRUE))
1486 ts->PasteFlag |= CPF_CONFIRM_CHANGEPASTE;
1487
1488 if (GetOnOff(Section, "ConfirmChangePasteCR", FName, TRUE))
1489 ts->PasteFlag |= CPF_CONFIRM_CHANGEPASTE_CR;
1490
1491 GetPrivateProfileString(Section, "ConfirmChangePasteStringFile", "",
1492 Temp, sizeof(Temp), FName);
1493
1494 strncpy_s(ts->ConfirmChangePasteStringFile, sizeof(ts->ConfirmChangePasteStringFile), Temp,
1495 _TRUNCATE);
1496
1497 // added ScrollWindowClearScreen (2008.5.3 yutaka)
1498 ts->ScrollWindowClearScreen =
1499 GetOnOff(Section, "ScrollWindowClearScreen", FName, TRUE);
1500
1501 // added SelectOnlyByLButton (2007.11.20 maya)
1502 ts->SelectOnlyByLButton =
1503 GetOnOff(Section, "SelectOnlyByLButton", FName, TRUE);
1504
1505 // added DisableAcceleratorSendBreak (2007.3.17 maya)
1506 ts->DisableAcceleratorSendBreak =
1507 GetOnOff(Section, "DisableAcceleratorSendBreak", FName, FALSE);
1508
1509 // WinSock connecting timeout value (2007.1.11 yutaka)
1510 ts->ConnectingTimeout =
1511 GetPrivateProfileInt(Section, "ConnectingTimeout", 0, FName);
1512
1513 // mouse cursor
1514 GetPrivateProfileString(Section, "MouseCursor", "IBEAM",
1515 Temp, sizeof(Temp), FName);
1516 strncpy_s(ts->MouseCursorName, sizeof(ts->MouseCursorName), Temp,
1517 _TRUNCATE);
1518
1519 // Translucent window
1520 ts->AlphaBlend =
1521 GetPrivateProfileInt(Section, "AlphaBlend ", 255, FName);
1522 ts->AlphaBlend = max(0, ts->AlphaBlend);
1523 ts->AlphaBlend = min(255, ts->AlphaBlend);
1524
1525 // Cygwin install path
1526 GetPrivateProfileString(Section, "CygwinDirectory ", "c:\\cygwin",
1527 Temp, sizeof(Temp), FName);
1528 strncpy_s(ts->CygwinDirectory, sizeof(ts->CygwinDirectory), Temp,
1529 _TRUNCATE);
1530
1531 // Viewlog Editor path
1532 if (GetWindowsDirectory(Temp, sizeof(Temp)) + 13 < sizeof(Temp)) { // "\\notepad.exe"(12) + NUL(1)
1533 strncat_s(Temp, sizeof(Temp), "\\notepad.exe", _TRUNCATE);
1534 }
1535 else {
1536 Temp[0] = '\0';
1537 }
1538 GetPrivateProfileString(Section, "ViewlogEditor ", Temp,
1539 ts->ViewlogEditor, sizeof(ts->ViewlogEditor), FName);
1540
1541 // Locale for UTF-8
1542 GetPrivateProfileString(Section, "Locale ", DEFAULT_LOCALE,
1543 Temp, sizeof(Temp), FName);
1544 strncpy_s(ts->Locale, sizeof(ts->Locale), Temp, _TRUNCATE);
1545
1546 // CodePage
1547 ts->CodePage =
1548 GetPrivateProfileInt(Section, "CodePage ", DEFAULT_CODEPAGE,
1549 FName);
1550
1551 // UI language message file
1552 GetPrivateProfileString(Section, "UILanguageFile", "lang\\Default.lng",
1553 Temp, sizeof(Temp), FName);
1554 {
1555 char CurDir[MAX_PATH];
1556
1557 // �t���p�X�������O������������������������������
1558 strncpy_s(ts->UILanguageFile_ini, sizeof(ts->UILanguageFile_ini), Temp, _TRUNCATE);
1559
1560 GetCurrentDirectory(sizeof(CurDir), CurDir);
1561 SetCurrentDirectory(ts->HomeDir);
1562 _fullpath(ts->UILanguageFile, Temp, sizeof(ts->UILanguageFile));
1563 SetCurrentDirectory(CurDir);
1564 }
1565
1566 // Broadcast Command History (2007.3.3 maya)
1567 ts->BroadcastCommandHistory =
1568 GetOnOff(Section, "BroadcastCommandHistory", FName, FALSE);
1569
1570 // 337: 2007/03/20 Accept Broadcast
1571 ts->AcceptBroadcast =
1572 GetOnOff(Section, "AcceptBroadcast", FName, TRUE);
1573
1574 // Confirm send a file when drag and drop (2007.12.28 maya)
1575 ts->ConfirmFileDragAndDrop =
1576 GetOnOff(Section, "ConfirmFileDragAndDrop", FName, TRUE);
1577
1578 // Translate mouse wheel to cursor key when application cursor mode
1579 ts->TranslateWheelToCursor =
1580 GetOnOff(Section, "TranslateWheelToCursor", FName, TRUE);
1581
1582 // Display "New Connection" dialog on startup (2008.1.18 maya)
1583 ts->HostDialogOnStartup =
1584 GetOnOff(Section, "HostDialogOnStartup", FName, TRUE);
1585
1586 // Mouse event tracking
1587 ts->MouseEventTracking =
1588 GetOnOff(Section, "MouseEventTracking", FName, TRUE);
1589
1590 // Maximized bug tweak
1591 GetPrivateProfileString(Section, "MaximizedBugTweak", "2", Temp,
1592 sizeof(Temp), FName);
1593 if (_stricmp(Temp, "on") == 0) {
1594 ts->MaximizedBugTweak = 2;
1595 }
1596 else {
1597 ts->MaximizedBugTweak = atoi(Temp);
1598 }
1599
1600 // Convert Unicode symbol characters to DEC Special characters
1601 ts->UnicodeDecSpMapping =
1602 GetPrivateProfileInt(Section, "UnicodeToDecSpMapping", 3, FName);
1603
1604 // VT Window Icon
1605 GetPrivateProfileString(Section, "VTIcon", "Default",
1606 Temp, sizeof(Temp), FName);
1607 ts->VTIcon = IconName2IconId(Temp);
1608
1609 // Tek Window Icon
1610 GetPrivateProfileString(Section, "TEKIcon", "Default",
1611 Temp, sizeof(Temp), FName);
1612 ts->TEKIcon = IconName2IconId(Temp);
1613
1614 // Unknown Unicode Character
1615 ts->UnknownUnicodeCharaAsWide =
1616 GetOnOff(Section, "UnknownUnicodeCharacterAsWide", FName, FALSE);
1617
1618 #ifdef USE_NORMAL_BGCOLOR
1619 // UseNormalBGColor
1620 ts->UseNormalBGColor =
1621 GetOnOff(Section, "UseNormalBGColor", FName, FALSE);
1622 // 2006/03/11 by 337
1623 if (ts->UseNormalBGColor) {
1624 ts->VTBoldColor[1] =
1625 ts->VTBlinkColor[1] = ts->URLColor[1] = ts->VTColor[1];
1626 }
1627 #endif
1628
1629 // AutoScrollOnlyInBottomLine
1630 ts->AutoScrollOnlyInBottomLine =
1631 GetOnOff(Section, "AutoScrollOnlyInBottomLine", FName, FALSE);
1632
1633 // Accept remote-controlled window title changing
1634 GetPrivateProfileString(Section, "AcceptTitleChangeRequest", "overwrite",
1635 Temp, sizeof(Temp), FName);
1636 if (_stricmp(Temp, "overwrite") == 0 || _stricmp(Temp, "on") == 0)
1637 ts->AcceptTitleChangeRequest = IdTitleChangeRequestOverwrite;
1638 else if (_stricmp(Temp, "ahead") == 0)
1639 ts->AcceptTitleChangeRequest = IdTitleChangeRequestAhead;
1640 else if (_stricmp(Temp, "last") == 0)
1641 ts->AcceptTitleChangeRequest = IdTitleChangeRequestLast;
1642 else
1643 ts->AcceptTitleChangeRequest = IdTitleChangeRequestOff;
1644
1645 // Size of paste confirm dialog
1646 GetPrivateProfileString(Section, "PasteDialogSize", "330,220",
1647 Temp, sizeof(Temp), FName);
1648 GetNthNum(Temp, 1, &ts->PasteDialogSize.cx);
1649 GetNthNum(Temp, 2, &ts->PasteDialogSize.cy);
1650 if (ts->PasteDialogSize.cx < 0)
1651 ts->PasteDialogSize.cx = 330;
1652 if (ts->PasteDialogSize.cy < 0)
1653 ts->PasteDialogSize.cy = 220;
1654
1655 // Disable mouse event tracking when Control-Key is pressed.
1656 ts->DisableMouseTrackingByCtrl =
1657 GetOnOff(Section, "DisableMouseTrackingByCtrl", FName, TRUE);
1658
1659 // Disable TranslateWheelToCursor setting when Control-Key is pressed.
1660 ts->DisableWheelToCursorByCtrl =
1661 GetOnOff(Section, "DisableWheelToCursorByCtrl", FName, TRUE);
1662
1663 // Strict Key Mapping.
1664 ts->StrictKeyMapping =
1665 GetOnOff(Section, "StrictKeyMapping", FName, FALSE);
1666
1667 // added Wait4allMacroCommand (2009.3.23 yutaka)
1668 ts->Wait4allMacroCommand =
1669 GetOnOff(Section, "Wait4allMacroCommand", FName, FALSE);
1670
1671 // added DisableMenuSendBreak (2009.4.6 maya)
1672 ts->DisableMenuSendBreak =
1673 GetOnOff(Section, "DisableMenuSendBreak", FName, FALSE);
1674
1675 // added ClearScreenOnCloseConnection (2009.4.6 maya)
1676 ts->ClearScreenOnCloseConnection =
1677 GetOnOff(Section, "ClearScreenOnCloseConnection", FName, FALSE);
1678
1679 // added DisableAcceleratorDuplicateSession (2009.4.6 maya)
1680 ts->DisableAcceleratorDuplicateSession =
1681 GetOnOff(Section, "DisableAcceleratorDuplicateSession", FName, FALSE);
1682
1683 ts->AcceleratorNewConnection =
1684 GetOnOff(Section, "AcceleratorNewConnection", FName, TRUE);
1685
1686 ts->AcceleratorCygwinConnection =
1687 GetOnOff(Section, "AcceleratorCygwinConnection", FName, TRUE);
1688
1689 // added DisableMenuDuplicateSession (2010.8.3 maya)
1690 ts->DisableMenuDuplicateSession =
1691 GetOnOff(Section, "DisableMenuDuplicateSession", FName, FALSE);
1692
1693 // added DisableMenuNewConnection (2010.8.4 maya)
1694 ts->DisableMenuNewConnection =
1695 GetOnOff(Section, "DisableMenuNewConnection", FName, FALSE);
1696
1697 // added PasteDelayPerLine (2009.4.12 maya)
1698 ts->PasteDelayPerLine =
1699 GetPrivateProfileInt(Section, "PasteDelayPerLine", 10, FName);
1700 {
1701 int tmp = min(max(0, ts->PasteDelayPerLine), 5000);
1702 ts->PasteDelayPerLine = tmp;
1703 }
1704
1705 // Font scaling -- test
1706 ts->FontScaling = GetOnOff(Section, "FontScaling", FName, FALSE);
1707
1708 // Meta sets MSB
1709 GetPrivateProfileString(Section, "Meta8Bit", "off", Temp, sizeof(Temp), FName);
1710 if (_stricmp(Temp, "raw") == 0 || _stricmp(Temp, "on") == 0)
1711 ts->Meta8Bit = IdMeta8BitRaw;
1712 else if (_stricmp(Temp, "text") == 0)
1713 ts->Meta8Bit = IdMeta8BitText;
1714 else
1715 ts->Meta8Bit = IdMeta8BitOff;
1716
1717 // Window control sequence
1718 if (GetOnOff(Section, "WindowCtrlSequence", FName, TRUE))
1719 ts->WindowFlag |= WF_WINDOWCHANGE;
1720
1721 // Cursor control sequence
1722 if (GetOnOff(Section, "CursorCtrlSequence", FName, FALSE))
1723 ts->WindowFlag |= WF_CURSORCHANGE;
1724
1725 // Window report sequence
1726 if (GetOnOff(Section, "WindowReportSequence", FName, TRUE))
1727 ts->WindowFlag |= WF_WINDOWREPORT;
1728
1729 // Title report sequence
1730 GetPrivateProfileString(Section, "TitleReportSequence", "Empty", Temp, sizeof(Temp), FName);
1731 if (_stricmp(Temp, "accept") == 0)
1732 ts->WindowFlag |= IdTitleReportAccept;
1733 else if (_stricmp(Temp, "ignore") == 0 || _stricmp(Temp, "off") == 0)
1734 ts->WindowFlag &= ~WF_TITLEREPORT;
1735 else // empty
1736 ts->WindowFlag |= IdTitleReportEmpty;
1737
1738 // Line at a time mode
1739 ts->EnableLineMode = GetOnOff(Section, "EnableLineMode", FName, TRUE);
1740
1741 // Clear window on resize
1742 if (GetOnOff(Section, "ClearOnResize", FName, TRUE))
1743 ts->TermFlag |= TF_CLEARONRESIZE;
1744
1745 // Alternate Screen Buffer
1746 if (GetOnOff(Section, "AlternateScreenBuffer", FName, TRUE))
1747 ts->TermFlag |= TF_ALTSCR;
1748
1749 // IME status related cursor style
1750 if (GetOnOff(Section, "IMERelatedCursor", FName, FALSE))
1751 ts->WindowFlag |= WF_IMECURSORCHANGE;
1752
1753 // Terminal Unique ID
1754 GetPrivateProfileString(Section, "TerminalUID", "FFFFFFFF", Temp, sizeof(Temp), FName);
1755 if (strlen(Temp) == 8) {
1756 for (i=0; i<8 && isxdigit((unsigned char)Temp[i]); i++) {
1757 if (islower(Temp[i])) {
1758 ts->TerminalUID[i] = toupper(Temp[i]);
1759 }
1760 else {
1761 ts->TerminalUID[i] = Temp[i];
1762 }
1763 }
1764 if (i == 8) {
1765 ts->TerminalUID[i] = 0;
1766 }
1767 else {
1768 strncpy_s(ts->TerminalUID, sizeof(ts->TerminalUID), "FFFFFFFF", _TRUNCATE);
1769 }
1770 }
1771 else {
1772 strncpy_s(ts->TerminalUID, sizeof(ts->TerminalUID), "FFFFFFFF", _TRUNCATE);
1773 }
1774
1775 // Lock Terminal UID
1776 if (GetOnOff(Section, "LockTUID", FName, TRUE))
1777 ts->TermFlag |= TF_LOCKTUID;
1778
1779 // Jump List
1780 ts->JumpList = GetOnOff(Section, "JumpList", FName, TRUE);
1781
1782 // TabStopModifySequence
1783 GetPrivateProfileString(Section, "TabStopModifySequence", "on", Temp, sizeof(Temp), FName);
1784 if (_stricmp(Temp, "on") == 0 || _stricmp(Temp, "all") == 0)
1785 ts->TabStopFlag = TABF_ALL;
1786 else if (_stricmp(Temp, "off") == 0 || _stricmp(Temp, "none") == 0)
1787 ts->TabStopFlag = TABF_NONE;
1788 else {
1789 ts->TabStopFlag = TABF_NONE;
1790 for (i=1; GetNthString(Temp, i, sizeof(Temp2), Temp2); i++) {
1791 if (_stricmp(Temp2, "HTS") == 0)
1792 ts->TabStopFlag |= TABF_HTS;
1793 else if (_stricmp(Temp2, "HTS7") == 0)
1794 ts->TabStopFlag |= TABF_HTS7;
1795 else if (_stricmp(Temp2, "HTS8") == 0)
1796 ts->TabStopFlag |= TABF_HTS8;
1797 else if (_stricmp(Temp2, "TBC") == 0)
1798 ts->TabStopFlag |= TABF_TBC;
1799 else if (_stricmp(Temp2, "TBC0") == 0)
1800 ts->TabStopFlag |= TABF_TBC0;
1801 else if (_stricmp(Temp2, "TBC3") == 0)
1802 ts->TabStopFlag |= TABF_TBC3;
1803 }
1804 }
1805
1806 // Clipboard Access from Remote
1807 GetPrivateProfileString(Section, "ClipboardAccessFromRemote", "off", Temp, sizeof(Temp), FName);
1808 if (_stricmp(Temp, "on") == 0 || _stricmp(Temp, "readwrite") == 0)
1809 ts->CtrlFlag |= CSF_CBRW;
1810 else if (_stricmp(Temp, "read") == 0)
1811 ts->CtrlFlag |= CSF_CBREAD;
1812 else if (_stricmp(Temp, "write") == 0)
1813 ts->CtrlFlag |= CSF_CBWRITE;
1814
1815 // Notify Clipboard Access from Remote
1816 ts->NotifyClipboardAccess = GetOnOff(Section, "NotifyClipboardAccess", FName, TRUE);
1817
1818 // Use invalid DECRPSS (for testing)
1819 if (GetOnOff(Section, "UseInvalidDECRQSSResponse", FName, FALSE))
1820 ts->TermFlag |= TF_INVALIDDECRPSS;
1821
1822 // ClickableUrlBrowser
1823 GetPrivateProfileString(Section, "ClickableUrlBrowser", "",
1824 ts->ClickableUrlBrowser, sizeof(ts->ClickableUrlBrowser), FName);
1825 GetPrivateProfileString(Section, "ClickableUrlBrowserArg", "",
1826 ts->ClickableUrlBrowserArg, sizeof(ts->ClickableUrlBrowserArg), FName);
1827
1828 // Exclusive Lock when open the log file
1829 ts->LogLockExclusive = GetOnOff(Section, "LogLockExclusive", FName, TRUE);
1830
1831 // Font quality
1832 GetPrivateProfileString(Section, "FontQuality", "default",
1833 Temp, sizeof(Temp), FName);
1834 if (_stricmp(Temp, "nonantialiased") == 0)
1835 ts->FontQuality = NONANTIALIASED_QUALITY;
1836 else if (_stricmp(Temp, "antialiased") == 0)
1837 ts->FontQuality = ANTIALIASED_QUALITY;
1838 else if (_stricmp(Temp, "cleartype") == 0)
1839 ts->FontQuality = CLEARTYPE_QUALITY;
1840 else
1841 ts->FontQuality = DEFAULT_QUALITY;
1842
1843 // Beep Over Used
1844 ts->BeepOverUsedCount =
1845 GetPrivateProfileInt(Section, "BeepOverUsedCount", 5, FName);
1846 ts->BeepOverUsedTime =
1847 GetPrivateProfileInt(Section, "BeepOverUsedTime", 2, FName);
1848 ts->BeepSuppressTime =
1849 GetPrivateProfileInt(Section, "BeepSuppressTime", 5, FName);
1850
1851 // Max OSC string buffer size
1852 ts->MaxOSCBufferSize =
1853 GetPrivateProfileInt(Section, "MaxOSCBufferSize", 4096, FName);
1854
1855 ts->JoinSplitURL = GetOnOff(Section, "JoinSplitURL", FName, FALSE);
1856
1857 GetPrivateProfileString(Section, "JoinSplitURLIgnoreEOLChar", "\\", Temp, sizeof(Temp), FName);
1858 ts->JoinSplitURLIgnoreEOLChar = Temp[0];
1859
1860 // Debug modes.
1861 GetPrivateProfileString(Section, "DebugModes", "all", Temp, sizeof(Temp), FName);
1862 if (_stricmp(Temp, "on") == 0 || _stricmp(Temp, "all") == 0)
1863 ts->DebugModes = DBGF_ALL;
1864 else if (_stricmp(Temp, "off") == 0 || _stricmp(Temp, "none") == 0) {
1865 ts->DebugModes = DBGF_NONE;
1866 ts->Debug = FALSE;
1867 }
1868 else {
1869 ts->DebugModes = DBGF_NONE;
1870 for (i=1; GetNthString(Temp, i, sizeof(Temp2), Temp2); i++) {
1871 if (_stricmp(Temp2, "normal") == 0)
1872 ts->DebugModes |= DBGF_NORM;
1873 else if (_stricmp(Temp2, "hex") == 0)
1874 ts->DebugModes |= DBGF_HEXD;
1875 else if (_stricmp(Temp2, "noout") == 0)
1876 ts->DebugModes |= DBGF_NOUT;
1877 }
1878 if (ts->DebugModes == DBGF_NONE)
1879 ts->Debug = FALSE;
1880 }
1881
1882 // Xmodem Timeout
1883 GetPrivateProfileString(Section, "XmodemTimeouts", "10,3,10,20,60", Temp, sizeof(Temp), FName);
1884 ts->XmodemTimeOutInit = GetNthNum2(Temp, 1, 10);
1885 if (ts->XmodemTimeOutInit < 1)
1886 ts->XmodemTimeOutInit = 1;
1887 ts->XmodemTimeOutInitCRC = GetNthNum2(Temp, 2, 3);
1888 if (ts->XmodemTimeOutInitCRC < 1)
1889 ts->XmodemTimeOutInitCRC = 1;
1890 ts->XmodemTimeOutShort = GetNthNum2(Temp, 3, 10);
1891 if (ts->XmodemTimeOutShort < 1)
1892 ts->XmodemTimeOutShort = 1;
1893 ts->XmodemTimeOutLong = GetNthNum2(Temp, 4, 20);
1894 if (ts->XmodemTimeOutLong < 1)
1895 ts->XmodemTimeOutLong = 1;
1896 ts->XmodemTimeOutVLong = GetNthNum2(Temp, 5, 60);
1897 if (ts->XmodemTimeOutVLong < 1)
1898 ts->XmodemTimeOutVLong = 1;
1899
1900 // Ymodem Timeout
1901 GetPrivateProfileString(Section, "YmodemTimeouts", "10,3,10,20,60", Temp, sizeof(Temp), FName);
1902 ts->YmodemTimeOutInit = GetNthNum2(Temp, 1, 10);
1903 if (ts->YmodemTimeOutInit < 1)
1904 ts->YmodemTimeOutInit = 1;
1905 ts->YmodemTimeOutInitCRC = GetNthNum2(Temp, 2, 3);
1906 if (ts->YmodemTimeOutInitCRC < 1)
1907 ts->YmodemTimeOutInitCRC = 1;
1908 ts->YmodemTimeOutShort = GetNthNum2(Temp, 3, 10);
1909 if (ts->YmodemTimeOutShort < 1)
1910 ts->YmodemTimeOutShort = 1;
1911 ts->YmodemTimeOutLong = GetNthNum2(Temp, 4, 20);
1912 if (ts->YmodemTimeOutLong < 1)
1913 ts->YmodemTimeOutLong = 1;
1914 ts->YmodemTimeOutVLong = GetNthNum2(Temp, 5, 60);
1915 if (ts->YmodemTimeOutVLong < 1)
1916 ts->YmodemTimeOutVLong = 1;
1917
1918 // Zmodem Timeout
1919 GetPrivateProfileString(Section, "ZmodemTimeouts", "10,0,10,3", Temp, sizeof(Temp), FName);
1920 ts->ZmodemTimeOutNormal = GetNthNum2(Temp, 1, 10);
1921 if (ts->ZmodemTimeOutNormal < 1)
1922 ts->ZmodemTimeOutNormal = 1;
1923 ts->ZmodemTimeOutTCPIP = GetNthNum2(Temp, 2, 0);
1924 if (ts->ZmodemTimeOutTCPIP < 0)
1925 ts->ZmodemTimeOutTCPIP = 0;
1926 ts->ZmodemTimeOutInit = GetNthNum2(Temp, 3, 10);
1927 if (ts->ZmodemTimeOutInit < 1)
1928 ts->ZmodemTimeOutInit = 1;
1929 ts->ZmodemTimeOutFin = GetNthNum2(Temp, 4, 3);
1930 if (ts->ZmodemTimeOutFin < 1)
1931 ts->ZmodemTimeOutFin = 1;
1932
1933 // Trim trailing new line character when pasting
1934 if (GetOnOff(Section, "TrimTrailingNLonPaste", FName, FALSE))
1935 ts->PasteFlag |= CPF_TRIM_TRAILING_NL;
1936
1937 // Normalize line break when pasting
1938 if (GetOnOff(Section, "NormalizeLineBreakOnPaste", FName, FALSE))
1939 ts->PasteFlag |= CPF_NORMALIZE_LINEBREAK;
1940
1941
1942 // Fallback to CP932 (Experimental)
1943 ts->FallbackToCP932 = GetOnOff(Section, "FallbackToCP932", FName, FALSE);
1944
1945 // CygTerm Configuration File
1946 ReadCygtermConfFile(ts);
1947 }
1948
1949 void FAR PASCAL WriteIniFile(PCHAR FName, PTTSet ts)
1950 {
1951 int i;
1952 char Temp[MAX_PATH];
1953 char buf[20];
1954 int ret;
1955 char uimsg[MAX_UIMSG], uimsg2[MAX_UIMSG], msg[MAX_UIMSG];
1956
1957 /* version */
1958 ret = WritePrivateProfileString(Section, "Version", "2.3", FName);
1959 if (ret == 0) {
1960 // ini�t�@�C�����������������s�������A�G���[���b�Z�[�W���\�������B(2012.10.18 yutaka)
1961 ret = GetLastError();
1962 get_lang_msg("MSG_INI_WRITE_ERROR", uimsg, sizeof(uimsg), "Cannot write ini file", ts->UILanguageFile);
1963 _snprintf_s(msg, sizeof(msg), _TRUNCATE, "%s (%d)", uimsg, ret);
1964
1965 get_lang_msg("MSG_INI_ERROR", uimsg2, sizeof(uimsg2), "Tera Term: Error", ts->UILanguageFile);
1966
1967 MessageBox(NULL, msg, uimsg2, MB_ICONEXCLAMATION);
1968 }
1969
1970 /* Language */
1971 switch (ts->Language) {
1972 case IdJapanese:
1973 strncpy_s(Temp, sizeof(Temp), "Japanese", _TRUNCATE);
1974 break;
1975 case IdKorean:
1976 strncpy_s(Temp, sizeof(Temp), "Korean", _TRUNCATE);
1977 break;
1978 case IdRussian:
1979 strncpy_s(Temp, sizeof(Temp), "Russian", _TRUNCATE);
1980 break;
1981 case IdUtf8:
1982 strncpy_s(Temp, sizeof(Temp), "UTF-8", _TRUNCATE);
1983 break;
1984 default:
1985 strncpy_s(Temp, sizeof(Temp), "English", _TRUNCATE);
1986 }
1987
1988 WritePrivateProfileString(Section, "Language", Temp, FName);
1989
1990 /* Port type */
1991 WritePrivateProfileString(Section, "Port", (ts->PortType==IdSerial)?"serial":"tcpip", FName);
1992
1993 /* Save win position */
1994 if (ts->SaveVTWinPos) {
1995 /* VT win position */
1996 WriteInt2(Section, "VTPos", FName, ts->VTPos.x, ts->VTPos.y);
1997 }
1998
1999 /* VT terminal size */
2000 WriteInt2(Section, "TerminalSize", FName,
2001 ts->TerminalWidth, ts->TerminalHeight);
2002
2003 /* Terminal size = Window size */
2004 WriteOnOff(Section, "TermIsWin", FName, ts->TermIsWin);
2005
2006 /* Auto window resize flag */
2007 WriteOnOff(Section, "AutoWinResize", FName, ts->AutoWinResize);
2008
2009 /* CR Receive */
2010 if (ts->CRReceive == IdCRLF) {
2011 strncpy_s(Temp, sizeof(Temp), "CRLF", _TRUNCATE);
2012 }
2013 else if (ts->CRReceive == IdLF) {
2014 strncpy_s(Temp, sizeof(Temp), "LF", _TRUNCATE);
2015 }
2016 else if (ts->CRReceive == IdAUTO) {
2017 strncpy_s(Temp, sizeof(Temp), "AUTO", _TRUNCATE);
2018 }
2019 else {
2020 strncpy_s(Temp, sizeof(Temp), "CR", _TRUNCATE);
2021 }
2022 WritePrivateProfileString(Section, "CRReceive", Temp, FName);
2023
2024 /* CR Send */
2025 if (ts->CRSend == IdCRLF) {
2026 strncpy_s(Temp, sizeof(Temp), "CRLF", _TRUNCATE);
2027 }
2028 else if (ts->CRSend == IdLF) {
2029 strncpy_s(Temp, sizeof(Temp), "LF", _TRUNCATE);
2030 }
2031 else {
2032 strncpy_s(Temp, sizeof(Temp), "CR", _TRUNCATE);
2033 }
2034 WritePrivateProfileString(Section, "CRSend", Temp, FName);
2035
2036 /* Local echo */
2037 WriteOnOff(Section, "LocalEcho", FName, ts->LocalEcho);
2038
2039 /* Answerback */
2040 if ((ts->FTFlag & FT_BPAUTO) == 0) {
2041 Str2Hex(ts->Answerback, Temp, ts->AnswerbackLen,
2042 sizeof(Temp) - 1, TRUE);
2043 WritePrivateProfileString(Section, "Answerback", Temp, FName);
2044 }
2045
2046 /* Kanji Code (receive) */
2047 switch (ts->KanjiCode) {
2048 case IdEUC:
2049 strncpy_s(Temp, sizeof(Temp), "EUC", _TRUNCATE);
2050 break;
2051 case IdJIS:
2052 strncpy_s(Temp, sizeof(Temp), "JIS", _TRUNCATE);
2053 break;
2054 case IdUTF8:
2055 strncpy_s(Temp, sizeof(Temp), "UTF-8", _TRUNCATE);
2056 break;
2057 case IdUTF8m:
2058 strncpy_s(Temp, sizeof(Temp), "UTF-8m", _TRUNCATE);
2059 break;
2060 default:
2061 switch (ts->Language) {
2062 case IdJapanese:
2063 strncpy_s(Temp, sizeof(Temp), "SJIS", _TRUNCATE);
2064 break;
2065 case IdKorean:
2066 strncpy_s(Temp, sizeof(Temp), "KS5601", _TRUNCATE);
2067 break;
2068 default:
2069 strncpy_s(Temp, sizeof(Temp), "SJIS", _TRUNCATE);
2070 }
2071 }
2072 WritePrivateProfileString(Section, "KanjiReceive", Temp, FName);
2073
2074 /* Katakana (receive) */
2075 if (ts->JIS7Katakana == 1)
2076 strncpy_s(Temp, sizeof(Temp), "7", _TRUNCATE);
2077 else
2078 strncpy_s(Temp, sizeof(Temp), "8", _TRUNCATE);
2079
2080 WritePrivateProfileString(Section, "KatakanaReceive", Temp, FName);
2081
2082 /* Kanji Code (transmit) */
2083 switch (ts->KanjiCodeSend) {
2084 case IdEUC:
2085 strncpy_s(Temp, sizeof(Temp), "EUC", _TRUNCATE);
2086 break;
2087 case IdJIS:
2088 strncpy_s(Temp, sizeof(Temp), "JIS", _TRUNCATE);
2089 break;
2090 case IdUTF8:
2091 strncpy_s(Temp, sizeof(Temp), "UTF-8", _TRUNCATE);
2092 break;
2093 default:
2094 switch (ts->Language) {
2095 case IdJapanese:
2096 strncpy_s(Temp, sizeof(Temp), "SJIS", _TRUNCATE);
2097 break;
2098 case IdKorean:
2099 strncpy_s(Temp, sizeof(Temp), "KS5601", _TRUNCATE);
2100 break;
2101 default:
2102 strncpy_s(Temp, sizeof(Temp), "SJIS", _TRUNCATE);
2103 }
2104 }
2105 WritePrivateProfileString(Section, "KanjiSend", Temp, FName);
2106
2107 /* Katakana (transmit) */
2108 if (ts->JIS7KatakanaSend == 1)
2109 strncpy_s(Temp, sizeof(Temp), "7", _TRUNCATE);
2110 else
2111 strncpy_s(Temp, sizeof(Temp), "8", _TRUNCATE);
2112
2113 WritePrivateProfileString(Section, "KatakanaSend", Temp, FName);
2114
2115 /* KanjiIn */
2116 if (ts->KanjiIn == IdKanjiInA)
2117 strncpy_s(Temp, sizeof(Temp), "@", _TRUNCATE);
2118 else
2119 strncpy_s(Temp, sizeof(Temp), "B", _TRUNCATE);
2120
2121 WritePrivateProfileString(Section, "KanjiIn", Temp, FName);
2122
2123 /* KanjiOut */
2124 switch (ts->KanjiOut) {
2125 case IdKanjiOutB:
2126 strncpy_s(Temp, sizeof(Temp), "B", _TRUNCATE);
2127 break;
2128 case IdKanjiOutH:
2129 strncpy_s(Temp, sizeof(Temp), "H", _TRUNCATE);
2130 break;
2131 default:
2132 strncpy_s(Temp, sizeof(Temp), "J", _TRUNCATE);
2133 }
2134 WritePrivateProfileString(Section, "KanjiOut", Temp, FName);
2135
2136 // new configuration
2137 WriteInt(Section, "ConnectingTimeout", FName, ts->ConnectingTimeout);
2138
2139 WriteOnOff(Section, "DisablePasteMouseRButton", FName,
2140 (WORD) (ts->PasteFlag & CPF_DISABLE_RBUTTON));
2141
2142 WriteOnOff(Section, "DisablePasteMouseMButton", FName,
2143 (WORD) (ts->PasteFlag & CPF_DISABLE_MBUTTON));
2144
2145 WriteOnOff(Section, "ConfirmPasteMouseRButton", FName,
2146 (WORD) (ts->PasteFlag & CPF_CONFIRM_RBUTTON));
2147
2148 // added ConfirmChangePaste
2149 WriteOnOff(Section, "ConfirmChangePaste", FName,
2150 (WORD) (ts->PasteFlag & CPF_CONFIRM_CHANGEPASTE));
2151
2152 WriteOnOff(Section, "ConfirmChangePasteCR", FName,
2153 (WORD) (ts->PasteFlag & CPF_CONFIRM_CHANGEPASTE_CR));
2154
2155 WritePrivateProfileString(Section, "ConfirmChangePasteStringFile",
2156 ts->ConfirmChangePasteStringFile, FName);
2157
2158 // added ScrollWindowClearScreen
2159 WriteOnOff(Section, "ScrollWindowClearScreen", FName,
2160 ts->ScrollWindowClearScreen);
2161
2162 // added SelectOnlyByLButton (2007.11.20 maya)
2163 WriteOnOff(Section, "SelectOnlyByLButton", FName,
2164 ts->SelectOnlyByLButton);
2165 // added DisableAcceleratorSendBreak (2007.3.17 maya)
2166 WriteOnOff(Section, "DisableAcceleratorSendBreak", FName,
2167 ts->DisableAcceleratorSendBreak);
2168 WriteOnOff(Section, "EnableContinuedLineCopy", FName,
2169 ts->EnableContinuedLineCopy);
2170 WritePrivateProfileString(Section, "MouseCursor", ts->MouseCursorName,
2171 FName);
2172 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d", ts->AlphaBlend);
2173 WritePrivateProfileString(Section, "AlphaBlend", Temp, FName);
2174 WritePrivateProfileString(Section, "CygwinDirectory",
2175 ts->CygwinDirectory, FName);
2176 WritePrivateProfileString(Section, "ViewlogEditor", ts->ViewlogEditor,
2177 FName);
2178 WritePrivateProfileString(Section, "Locale", ts->Locale, FName);
2179 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d", ts->CodePage);
2180 WritePrivateProfileString(Section, "CodePage", Temp, FName);
2181
2182 // ANSI color(2004.9.5 yutaka)
2183 Temp[0] = '\0';
2184 for (i = 0; i < 15; i++) {
2185 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%d,%d,%d,%d, ",
2186 i,
2187 GetRValue(ts->ANSIColor[i]),
2188 GetGValue(ts->ANSIColor[i]),
2189 GetBValue(ts->ANSIColor[i])
2190 );
2191 strncat_s(Temp, sizeof(Temp), buf, _TRUNCATE);
2192 }
2193 i = 15;
2194 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%d,%d,%d,%d",
2195 i,
2196 GetRValue(ts->ANSIColor[i]),
2197 GetGValue(ts->ANSIColor[i]),
2198 GetBValue(ts->ANSIColor[i])
2199 );
2200 strncat_s(Temp, sizeof(Temp), buf, _TRUNCATE);
2201 WritePrivateProfileString(Section, "ANSIColor", Temp, FName);
2202
2203 /* AutoWinChange VT<->TEK */
2204 WriteOnOff(Section, "AutoWinSwitch", FName, ts->AutoWinSwitch);
2205
2206 /* Terminal ID */
2207 id2str(TermList, ts->TerminalID, IdVT100, Temp, sizeof(Temp));
2208 WritePrivateProfileString(Section, "TerminalID", Temp, FName);
2209
2210 /* Russian character set (host) */
2211 id2str(RussList, ts->RussHost, IdKOI8, Temp, sizeof(Temp));
2212 WritePrivateProfileString(Section, "RussHost", Temp, FName);
2213
2214 /* Russian character set (client) */
2215 id2str(RussList, ts->RussClient, IdWindows, Temp, sizeof(Temp));
2216 WritePrivateProfileString(Section, "RussClient", Temp, FName);
2217
2218 /* Title text */
2219 WritePrivateProfileString(Section, "Title", ts->Title, FName);
2220
2221 /* Cursor shape */
2222 switch (ts->CursorShape) {
2223 case IdVCur:
2224 strncpy_s(Temp, sizeof(Temp), "vertical", _TRUNCATE);
2225 break;
2226 case IdHCur:
2227 strncpy_s(Temp, sizeof(Temp), "horizontal", _TRUNCATE);
2228 break;
2229 default:
2230 strncpy_s(Temp, sizeof(Temp), "block", _TRUNCATE);
2231 }
2232 WritePrivateProfileString(Section, "CursorShape", Temp, FName);
2233
2234 /* Hide title */
2235 WriteOnOff(Section, "HideTitle", FName, ts->HideTitle);
2236
2237 /* Popup menu */
2238 WriteOnOff(Section, "PopupMenu", FName, ts->PopupMenu);
2239
2240 /* PC-Style bold color mapping */
2241 WriteOnOff(Section, "PcBoldColor", FName,
2242 (WORD) (ts->ColorFlag & CF_PCBOLD16));
2243
2244 /* aixterm 16 colors mode */
2245 WriteOnOff(Section, "Aixterm16Color", FName,
2246 (WORD) (ts->ColorFlag & CF_AIXTERM16));
2247
2248 /* xterm 256 colors mode */
2249 WriteOnOff(Section, "Xterm256Color", FName,
2250 (WORD) (ts->ColorFlag & CF_XTERM256));
2251
2252 /* Enable scroll buffer */
2253 WriteOnOff(Section, "EnableScrollBuff", FName, ts->EnableScrollBuff);
2254
2255 /* Scroll buffer size */
2256 WriteInt(Section, "ScrollBuffSize", FName, ts->ScrollBuffSize);
2257
2258 /* VT Color */
2259 for (i = 0; i <= 1; i++) {
2260 if (ts->ColorFlag & CF_REVERSEVIDEO) {
2261 if (ts->ColorFlag & CF_REVERSECOLOR) {
2262 ts->TmpColor[0][i * 3] = GetRValue(ts->VTReverseColor[i]);
2263 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTReverseColor[i]);
2264 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTReverseColor[i]);
2265 }
2266 else {
2267 ts->TmpColor[0][i * 3] = GetRValue(ts->VTColor[!i]);
2268 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTColor[!i]);
2269 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTColor[!i]);
2270 }
2271 }
2272 else {
2273 ts->TmpColor[0][i * 3] = GetRValue(ts->VTColor[i]);
2274 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTColor[i]);
2275 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTColor[i]);
2276 }
2277 }
2278 WriteInt6(Section, "VTColor", FName,
2279 ts->TmpColor[0][0], ts->TmpColor[0][1], ts->TmpColor[0][2],
2280 ts->TmpColor[0][3], ts->TmpColor[0][4], ts->TmpColor[0][5]);
2281
2282 /* VT Bold Color */
2283 for (i = 0; i <= 1; i++) {
2284 if (ts->ColorFlag & CF_REVERSEVIDEO) {
2285 ts->TmpColor[0][i * 3] = GetRValue(ts->VTBoldColor[!i]);
2286 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTBoldColor[!i]);
2287 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTBoldColor[!i]);
2288 }
2289 else {
2290 ts->TmpColor[0][i * 3] = GetRValue(ts->VTBoldColor[i]);
2291 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTBoldColor[i]);
2292 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTBoldColor[i]);
2293 }
2294 }
2295 WriteInt6(Section, "VTBoldColor", FName,
2296 ts->TmpColor[0][0], ts->TmpColor[0][1], ts->TmpColor[0][2],
2297 ts->TmpColor[0][3], ts->TmpColor[0][4], ts->TmpColor[0][5]);
2298
2299 /* VT Blink Color */
2300 for (i = 0; i <= 1; i++) {
2301 if (ts->ColorFlag & CF_REVERSEVIDEO) {
2302 ts->TmpColor[0][i * 3] = GetRValue(ts->VTBlinkColor[!i]);
2303 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTBlinkColor[!i]);
2304 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTBlinkColor[!i]);
2305 }
2306 else {
2307 ts->TmpColor[0][i * 3] = GetRValue(ts->VTBlinkColor[i]);
2308 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTBlinkColor[i]);
2309 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTBlinkColor[i]);
2310 }
2311 }
2312 WriteInt6(Section, "VTBlinkColor", FName,
2313 ts->TmpColor[0][0], ts->TmpColor[0][1], ts->TmpColor[0][2],
2314 ts->TmpColor[0][3], ts->TmpColor[0][4], ts->TmpColor[0][5]);
2315
2316 /* VT Reverse Color */
2317 for (i = 0; i <= 1; i++) {
2318 if (ts->ColorFlag & CF_REVERSEVIDEO && ts->ColorFlag & CF_REVERSECOLOR) {
2319 ts->TmpColor[0][i * 3] = GetRValue(ts->VTColor[i]);
2320 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTColor[i]);
2321 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTColor[i]);
2322 }
2323 else {
2324 ts->TmpColor[0][i * 3] = GetRValue(ts->VTReverseColor[i]);
2325 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->VTReverseColor[i]);
2326 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->VTReverseColor[i]);
2327 }
2328 }
2329 WriteInt6(Section, "VTReverseColor", FName,
2330 ts->TmpColor[0][0], ts->TmpColor[0][1], ts->TmpColor[0][2],
2331 ts->TmpColor[0][3], ts->TmpColor[0][4], ts->TmpColor[0][5]);
2332
2333 WriteOnOff(Section, "EnableClickableUrl", FName,
2334 ts->EnableClickableUrl);
2335
2336 /* URL color */
2337 for (i = 0; i <= 1; i++) {
2338 if (ts->ColorFlag & CF_REVERSEVIDEO) {
2339 ts->TmpColor[0][i * 3] = GetRValue(ts->URLColor[!i]);
2340 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->URLColor[!i]);
2341 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->URLColor[!i]);
2342 }
2343 else {
2344 ts->TmpColor[0][i * 3] = GetRValue(ts->URLColor[i]);
2345 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->URLColor[i]);
2346 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->URLColor[i]);
2347 }
2348 }
2349 WriteInt6(Section, "URLColor", FName,
2350 ts->TmpColor[0][0], ts->TmpColor[0][1], ts->TmpColor[0][2],
2351 ts->TmpColor[0][3], ts->TmpColor[0][4], ts->TmpColor[0][5]);
2352
2353 WriteOnOff(Section, "EnableBoldAttrColor", FName,
2354 (WORD) (ts->ColorFlag & CF_BOLDCOLOR));
2355
2356 WriteOnOff(Section, "EnableBlinkAttrColor", FName,
2357 (WORD) (ts->ColorFlag & CF_BLINKCOLOR));
2358
2359 WriteOnOff(Section, "EnableReverseAttrColor", FName,
2360 (WORD) (ts->ColorFlag & CF_REVERSECOLOR));
2361
2362 WriteOnOff(Section, "EnableURLColor", FName,
2363 (WORD) (ts->ColorFlag & CF_URLCOLOR));
2364
2365 WriteOnOff(Section, "URLUnderline", FName,
2366 (WORD) (ts->FontFlag & FF_URLUNDERLINE));
2367
2368 WriteOnOff(Section, "EnableANSIColor", FName,
2369 (WORD) (ts->ColorFlag & CF_ANSICOLOR));
2370
2371 /* TEK Color */
2372 for (i = 0; i <= 1; i++) {
2373 ts->TmpColor[0][i * 3] = GetRValue(ts->TEKColor[i]);
2374 ts->TmpColor[0][i * 3 + 1] = GetGValue(ts->TEKColor[i]);
2375 ts->TmpColor[0][i * 3 + 2] = GetBValue(ts->TEKColor[i]);
2376 }
2377 WriteInt6(Section, "TEKColor", FName,
2378 ts->TmpColor[0][0], ts->TmpColor[0][1], ts->TmpColor[0][2],
2379 ts->TmpColor[0][3], ts->TmpColor[0][4], ts->TmpColor[0][5]);
2380
2381 /* TEK color emulation */
2382 WriteOnOff(Section, "TEKColorEmulation", FName, ts->TEKColorEmu);
2383
2384 /* VT Font */
2385 WriteFont(Section, "VTFont", FName,
2386 ts->VTFont, ts->VTFontSize.x, ts->VTFontSize.y,
2387 ts->VTFontCharSet);
2388
2389 /* Enable bold font flag */
2390 WriteOnOff(Section, "EnableBold", FName,
2391 (WORD) (ts->FontFlag & FF_BOLD));
2392
2393 /* Russian character set (font) */
2394 id2str(RussList, ts->RussFont, IdWindows, Temp, sizeof(Temp));
2395 WritePrivateProfileString(Section, "RussFont", Temp, FName);
2396
2397 /* TEK Font */
2398 WriteFont(Section, "TEKFont", FName,
2399 ts->TEKFont, ts->TEKFontSize.x, ts->TEKFontSize.y,
2400 ts->TEKFontCharSet);
2401
2402 /* BS key */
2403 if (ts->BSKey == IdDEL)
2404 strncpy_s(Temp, sizeof(Temp), "DEL", _TRUNCATE);
2405 else
2406 strncpy_s(Temp, sizeof(Temp), "BS", _TRUNCATE);
2407 WritePrivateProfileString(Section, "BSKey", Temp, FName);
2408
2409 /* Delete key */
2410 WriteOnOff(Section, "DeleteKey", FName, ts->DelKey);
2411
2412 /* Meta key */
2413 switch (ts->MetaKey) {
2414 case 1:
2415 strncpy_s(Temp, sizeof(Temp), "on", _TRUNCATE);
2416 break;
2417 case 2:
2418 strncpy_s(Temp, sizeof(Temp), "left", _TRUNCATE);
2419 break;
2420 case 3:
2421 strncpy_s(Temp, sizeof(Temp), "right", _TRUNCATE);
2422 break;
2423 default:
2424 strncpy_s(Temp, sizeof(Temp), "off", _TRUNCATE);
2425 }
2426 WritePrivateProfileString(Section, "Metakey", Temp, FName);
2427
2428 /* Application Keypad */
2429 WriteOnOff(Section, "DisableAppKeypad", FName, ts->DisableAppKeypad);
2430
2431 /* Application Cursor */
2432 WriteOnOff(Section, "DisableAppCursor", FName, ts->DisableAppCursor);
2433
2434 /* Russian keyboard type */
2435 id2str(RussList2, ts->RussKeyb, IdWindows, Temp, sizeof(Temp));
2436 WritePrivateProfileString(Section, "RussKeyb", Temp, FName);
2437
2438 /* Serial port ID */
2439 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d", ts->ComPort);
2440 WritePrivateProfileString(Section, "ComPort", Temp, FName);
2441
2442 /* Baud rate */
2443 _snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d", ts->Baud);
2444 WritePrivateProfileString(Section, "BaudRate", Temp, FName);
2445
2446 /* Parity */
2447 switch (ts->Parity) {
2448 case IdParityEven:
2449 strncpy_s(Temp, sizeof(Temp), "even", _TRUNCATE);
2450 break;
2451 case IdParityOdd:
2452 strncpy_s(Temp, sizeof(Temp), "odd", _TRUNCATE);
2453 break;
2454 case IdParityMark:
2455 strncpy_s(Temp, sizeof(Temp), "mark", _TRUNCATE);
2456 break;
2457 case IdParitySpace:
2458 strncpy_s(Temp, sizeof(Temp), "space", _TRUNCATE);
2459 break;
2460 default:
2461 strncpy_s(Temp, sizeof(Temp), "none", _TRUNCATE);
2462 }
2463 WritePrivateProfileString(Section, "Parity", Temp, FName);
2464
2465 /* Data bit */
2466 if (ts->DataBit == IdDataBit7)
2467 strncpy_s(Temp, sizeof(Temp), "7", _TRUNCATE);
2468 else
2469 strncpy_s(Temp, sizeof(Temp), "8", _TRUNCATE);
2470
2471 WritePrivateProfileString(Section, "DataBit", Temp, FName);
2472
2473 /* Stop bit */
2474 switch (ts->StopBit) {
2475 case IdStopBit2:
2476 strncpy_s(Temp, sizeof(Temp), "2", _TRUNCATE);
2477 break;
2478 case IdStopBit15:
2479 strncpy_s(Temp, sizeof(Temp), "1.5", _TRUNCATE);
2480 break;
2481 default:
2482 strncpy_s(Temp, sizeof(Temp), "1", _TRUNCATE);
2483 break;
2484 }
2485
2486 WritePrivateProfileString(Section, "StopBit", Temp, FName);
2487
2488 /* Flow control */
2489 switch (ts->Flow) {
2490 case IdFlowX:
2491 strncpy_s(Temp, sizeof(Temp), "x", _TRUNCATE);
2492 break;
2493 case IdFlowHard:
2494 strncpy_s(Temp, sizeof(Temp), "hard", _TRUNCATE);
2495 break;
2496 default:
2497 strncpy_s(Temp, sizeof(Temp), "none", _TRUNCATE);
2498 }
2499 WritePrivateProfileString(Section, "FlowCtrl", Temp, FName);
2500
2501 /* Delay per character */
2502 WriteInt(Section, "DelayPerChar", FName, ts->DelayPerChar);
2503
2504 /* Delay per line */
2505 WriteInt(Section, "DelayPerLine", FName, ts->DelayPerLine);
2506
2507 /* Telnet flag */
2508 WriteOnOff(Section, "Telnet", FName, ts->Telnet);
2509
2510 /* Telnet terminal type */
2511 WritePrivateProfileString(Section, "TermType", ts->TermType, FName);
2512
2513 /* TCP port num for non-telnet */
2514 WriteUint(Section, "TCPPort", FName, ts->TCPPort);
2515
2516 /* Auto close flag */
2517 WriteOnOff(Section, "AutoWinClose", FName, ts->AutoWinClose);
2518
2519 /* History list */
2520 WriteOnOff(Section, "Historylist", FName, ts->HistoryList);
2521
2522 /* File transfer binary flag */
2523 WriteOnOff(Section, "TransBin", FName, ts->TransBin);
2524
2525 /* Log binary flag */
2526 WriteOnOff(Section, "LogBinary", FName, ts->LogBinary);
2527
2528 /* Log append */
2529 WriteOnOff(Section, "LogAppend", FName, ts->Append);
2530
2531 /* Log plain text flag */
2532 WriteOnOff(Section, "LogTypePlainText", FName, ts->LogTypePlainText);
2533
2534 /* Log with timestamp (2006.7.23 maya) */
2535 WriteOnOff(Section, "LogTimestamp", FName, ts->LogTimestamp);
2536
2537 /* Log without transfer dialog */
2538 WriteOnOff(Section, "LogHideDialog", FName, ts->LogHideDialog);
2539
2540 WriteOnOff(Section, "LogIncludeScreenBuffer", FName, ts->LogAllBuffIncludedInFirst);
2541
2542 /* Timestamp format of Log each line */
2543 WritePrivateProfileString(Section, "LogTimestampFormat",
2544 ts->LogTimestampFormat, FName);
2545
2546 /* Use UTC/GMT time for Log each line timestamp */
2547 WriteOnOff(Section, "LogTimestampUTC", FName, ts->LogTimestampUTC);
2548
2549 /* Default Log file name (2006.8.28 maya) */
2550 WritePrivateProfileString(Section, "LogDefaultName",
2551 ts->LogDefaultName, FName);
2552
2553 /* Default Log file path (2007.5.30 maya) */
2554 WritePrivateProfileString(Section, "LogDefaultPath",
2555 ts->LogDefaultPath, FName);
2556
2557 /* Auto start logging (2007.5.31 maya) */
2558 WriteOnOff(Section, "LogAutoStart", FName, ts->LogAutoStart);
2559
2560 /* Log Rotate (2013.3.24 yutaka) */
2561 WriteInt(Section, "LogRotate", FName, ts->LogRotate);
2562 WriteInt(Section, "LogRotateSize", FName, ts->LogRotateSize);
2563 WriteInt(Section, "LogRotateSizeType", FName, ts->LogRotateSizeType);
2564 WriteInt(Section, "LogRotateStep", FName, ts->LogRotateStep);
2565
2566 /* Deferred Log Write Mode (2013.4.20 yutaka) */
2567 WriteOnOff(Section, "DeferredLogWriteMode", FName, ts->DeferredLogWriteMode);
2568
2569 /* XMODEM option */
2570 switch (ts->XmodemOpt) {
2571 case XoptCRC:
2572 strncpy_s(Temp, sizeof(Temp), "crc", _TRUNCATE);
2573 break;
2574 case Xopt1kCRC:
2575 strncpy_s(Temp, sizeof(Temp), "1k", _TRUNCATE);
2576 break;
2577 case Xopt1kCksum:
2578 strncpy_s(Temp, sizeof(Temp), "1ksum", _TRUNCATE);
2579 break;
2580 default:
2581 strncpy_s(Temp, sizeof(Temp), "checksum", _TRUNCATE);
2582 }
2583 WritePrivateProfileString(Section, "XmodemOpt", Temp, FName);
2584
2585 /* XMODEM binary flag */
2586 WriteOnOff(Section, "XmodemBin", FName, ts->XmodemBin);
2587
2588 /* XMODEM ���M�R�}���h (2007.12.21 yutaka) */
2589 WritePrivateProfileString(Section, "XmodemRcvCommand",
2590 ts->XModemRcvCommand, FName);
2591
2592 /* Default directory for file transfer */
2593 WritePrivateProfileString(Section, "FileDir", ts->FileDir, FName);
2594
2595 /* filter on file send (2007.6.5 maya) */
2596 WritePrivateProfileString(Section, "FileSendFilter",
2597 ts->FileSendFilter, FName);
2598
2599 WritePrivateProfileString(Section, "ScpSendDir", ts->ScpSendDir, FName);
2600
2601 /*------------------------------------------------------------------*/
2602 /* 8 bit control code flag -- special option */
2603 WriteOnOff(Section, "Accept8BitCtrl", FName,
2604 (WORD) (ts->TermFlag & TF_ACCEPT8BITCTRL));
2605
2606 /* Wrong sequence flag -- special option */
2607 WriteOnOff(Section, "AllowWrongSequence", FName,
2608 (WORD) (ts->TermFlag & TF_ALLOWWRONGSEQUENCE));
2609
2610 /* Detect disconnect/reconnect of serial port --- special option */
2611 WriteOnOff(Section, "AutoComPortReconnect", FName, ts->AutoComPortReconnect);
2612
2613 /* Auto file renaming --- special option */
2614 WriteOnOff(Section, "AutoFileRename", FName,
2615 (WORD) (ts->FTFlag & FT_RENAME));
2616
2617 /* Auto text copy --- special option */
2618 WriteOnOff(Section, "AutoTextCopy", FName, ts->AutoTextCopy);
2619
2620 /* Back wrap -- special option */
2621 WriteOnOff(Section, "BackWrap", FName,
2622 (WORD) (ts->TermFlag & TF_BACKWRAP));
2623
2624 /* Beep type -- special option */
2625 WriteOnOff(Section, "Beep", FName, ts->Beep);
2626 switch (ts->Beep) {
2627 case IdBeepOff:
2628 WritePrivateProfileString(Section, "Beep", "off", FName);
2629 break;
2630 case IdBeepOn:
2631 WritePrivateProfileString(Section, "Beep", "on", FName);
2632 break;
2633 case IdBeepVisual:
2634 WritePrivateProfileString(Section, "Beep", "visual", FName);
2635 break;
2636 }
2637
2638 /* Beep on connection & disconnection -- special option */
2639 WriteOnOff(Section, "BeepOnConnect", FName,
2640 (WORD) (ts->PortFlag & PF_BEEPONCONNECT));
2641
2642 /* Auto B-Plus activation -- special option */
2643 WriteOnOff(Section, "BPAuto", FName, (WORD) (ts->FTFlag & FT_BPAUTO));
2644
2645 /* B-Plus ESCCTL flag -- special option */
2646 WriteOnOff(Section, "BPEscCtl", FName,
2647 (WORD) (ts->FTFlag & FT_BPESCCTL));
2648
2649 /* B-Plus log -- special option */
2650 WriteOnOff(Section, "BPLog", FName, (WORD) (ts->LogFlag & LOG_BP));
2651
2652 /* Clear serial port buffer when port opening -- special option */
2653 WriteOnOff(Section, "ClearComBuffOnOpen", FName, ts->ClearComBuffOnOpen);
2654
2655 /* When serial port is specified with with /C= option and the port does not exist, Tera Term will wait for port connection. */
2656 WriteOnOff(Section, "WaitCom", FName, ts->WaitCom);
2657
2658 /* Confirm disconnection -- special option */
2659 WriteOnOff(Section, "ConfirmDisconnect", FName,
2660 (WORD) (ts->PortFlag & PF_CONFIRMDISCONN));
2661
2662 /* Ctrl code in Kanji -- special option */
2663 WriteOnOff(Section, "CtrlInKanji", FName,
2664 (WORD) (ts->TermFlag & TF_CTRLINKANJI));
2665
2666 /* Debug flag -- special option */
2667 WriteOnOff(Section, "Debug", FName, ts->Debug);
2668
2669 /* Delimiter list -- special option */
2670 Str2Hex(ts->DelimList, Temp, strlen(ts->DelimList),
2671 sizeof(Temp) - 1, TRUE);
2672 WritePrivateProfileString(Section, "DelimList", Temp, FName);
2673
2674 /* regard DBCS characters as delimiters -- special option */
2675 WriteOnOff(Section, "DelimDBCS", FName, ts->DelimDBCS);
2676
2677 // Enable popup menu -- special option
2678 if ((ts->MenuFlag & MF_NOPOPUP) == 0)
2679 WriteOnOff(Section, "EnablePopupMenu", FName, 1);
2680 else
2681 WriteOnOff(Section, "EnablePopupMenu", FName, 0);
2682
2683 // Enable "Show menu" -- special option
2684 if ((ts->MenuFlag & MF_NOSHOWMENU) == 0)
2685 WriteOnOff(Section, "EnableShowMenu", FName, 1);
2686 else
2687 WriteOnOff(Section, "EnableShowMenu", FName, 0);
2688
2689 /* Enable the status line -- special option */
2690 WriteOnOff(Section, "EnableStatusLine", FName,
2691 (WORD) (ts->TermFlag & TF_ENABLESLINE));
2692
2693 /* Enable multiple bytes send -- special option */
2694 WriteOnOff(Section, "FileSendHighSpeedMode", FName, ts->FileSendHighSpeedMode);
2695
2696 /* IME Flag -- special option */
2697 WriteOnOff(Section, "IME", FName, ts->UseIME);
2698
2699 /* IME-inline Flag -- special option */
2700 WriteOnOff(Section, "IMEInline", FName, ts->IMEInline);
2701
2702 /* Kermit log -- special option */
2703 WriteOnOff(Section, "KmtLog", FName, (WORD) (ts->LogFlag & LOG_KMT));
2704 WriteOnOff(Section, "KmtLongPacket", FName, (WORD) (ts->KermitOpt & KmtOptLongPacket));
2705 WriteOnOff(Section, "KmtFileAttr", FName, (WORD) (ts->KermitOpt & KmtOptFileAttr));
2706
2707 // Enable language selection -- special option
2708 if ((ts->MenuFlag & MF_NOLANGUAGE) == 0)
2709 WriteOnOff(Section, "LanguageSelection", FName, 1);
2710 else
2711 WriteOnOff(Section, "LanguageSelection", FName, 0);
2712
2713 /* Maximum scroll buffer size -- special option */
2714 WriteInt(Section, "MaxBuffSize", FName, ts->ScrollBuffMax);
2715
2716 /* Max com port number -- special option */
2717 WriteInt(Section, "MaxComPort", FName, ts->MaxComPort);
2718
2719 /* Non-blinking cursor -- special option */
2720 WriteOnOff(Section, "NonblinkingCursor", FName, ts->NonblinkingCursor);
2721
2722 WriteOnOff(Section, "KillFocusCursor", FName, ts->KillFocusCursor);
2723
2724 /* Delay for pass-thru printing activation */
2725 /* -- special option */
2726 WriteUint(Section, "PassThruDelay", FName, ts->PassThruDelay);
2727
2728 /* Printer port for pass-thru printing */
2729 /* -- special option */
2730 WritePrivateProfileString(Section, "PassThruPort", ts->PrnDev, FName);
2731
2732 /* �v�����^�p�����R�[�h�������t������ */
2733 WriteOnOff(Section, "PrinterCtrlSequence", FName,
2734 ts->TermFlag & TF_PRINTERCTRL);
2735
2736 /* Printer Font --- special option */
2737 WriteFont(Section, "PrnFont", FName,
2738 ts->PrnFont, ts->PrnFontSize.x, ts->PrnFontSize.y,
2739 ts->PrnFontCharSet);
2740
2741 // Page margins (left, right, top, bottom) for printing
2742 // -- special option
2743 WriteInt4(Section, "PrnMargin", FName,
2744 ts->PrnMargin[0], ts->PrnMargin[1],
2745 ts->PrnMargin[2], ts->PrnMargin