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 10179 - (show annotations) (download) (as text)
Wed Aug 24 14:03:59 2022 UTC (19 months, 2 weeks ago) by zmatsuo
File MIME type: text/x-csrc
File size: 130223 byte(s)
cygterm_t を tttypes.h から addsetting.h へ移動

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