Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log


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