| 453 |
free(Temp); |
free(Temp); |
| 454 |
} |
} |
| 455 |
|
|
|
#define CYGTERM_FILE "cygterm.cfg" // CygTerm configuration file |
|
|
#define CYGTERM_FILE_MAXLINE 100 |
|
|
|
|
|
static void ReadCygtermConfFile(PTTSet ts) |
|
|
{ |
|
|
char *cfgfile = CYGTERM_FILE; // CygTerm configuration file |
|
|
char cfg[MAX_PATH]; |
|
|
FILE *fp; |
|
|
char buf[256], *head, *body; |
|
|
cygterm_t settings; |
|
|
|
|
|
// try to read CygTerm config file |
|
|
memset(&settings, 0, sizeof(settings)); |
|
|
_snprintf_s(settings.term, sizeof(settings.term), _TRUNCATE, "ttermpro.exe %%s %%d /E /KR=SJIS /KT=SJIS /VTICON=CygTerm /nossh"); |
|
|
_snprintf_s(settings.term_type, sizeof(settings.term_type), _TRUNCATE, "vt100"); |
|
|
_snprintf_s(settings.port_start, sizeof(settings.port_start), _TRUNCATE, "20000"); |
|
|
_snprintf_s(settings.port_range, sizeof(settings.port_range), _TRUNCATE, "40"); |
|
|
_snprintf_s(settings.shell, sizeof(settings.shell), _TRUNCATE, "auto"); |
|
|
_snprintf_s(settings.env1, sizeof(settings.env1), _TRUNCATE, "MAKE_MODE=unix"); |
|
|
_snprintf_s(settings.env2, sizeof(settings.env2), _TRUNCATE, ""); |
|
|
settings.login_shell = FALSE; |
|
|
settings.home_chdir = FALSE; |
|
|
settings.agent_proxy = FALSE; |
|
|
|
|
|
strncpy_s(cfg, sizeof(cfg), ts->HomeDir, _TRUNCATE); |
|
|
AppendSlash(cfg, sizeof(cfg)); |
|
|
strncat_s(cfg, sizeof(cfg), cfgfile, _TRUNCATE); |
|
|
|
|
|
fp = fopen(cfg, "r"); |
|
|
if (fp != NULL) { |
|
|
while (fgets(buf, sizeof(buf), fp) != NULL) { |
|
|
size_t len = strlen(buf); |
|
|
|
|
|
if (buf[len - 1] == '\n') |
|
|
buf[len - 1] = '\0'; |
|
|
|
|
|
split_buffer(buf, '=', &head, &body); |
|
|
if (head == NULL || body == NULL) |
|
|
continue; |
|
|
|
|
|
if (_stricmp(head, "TERM") == 0) { |
|
|
_snprintf_s(settings.term, sizeof(settings.term), _TRUNCATE, "%s", body); |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "TERM_TYPE") == 0) { |
|
|
_snprintf_s(settings.term_type, sizeof(settings.term_type), _TRUNCATE, "%s", body); |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "PORT_START") == 0) { |
|
|
_snprintf_s(settings.port_start, sizeof(settings.port_start), _TRUNCATE, "%s", body); |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "PORT_RANGE") == 0) { |
|
|
_snprintf_s(settings.port_range, sizeof(settings.port_range), _TRUNCATE, "%s", body); |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "SHELL") == 0) { |
|
|
_snprintf_s(settings.shell, sizeof(settings.shell), _TRUNCATE, "%s", body); |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "ENV_1") == 0) { |
|
|
_snprintf_s(settings.env1, sizeof(settings.env1), _TRUNCATE, "%s", body); |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "ENV_2") == 0) { |
|
|
_snprintf_s(settings.env2, sizeof(settings.env2), _TRUNCATE, "%s", body); |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "LOGIN_SHELL") == 0) { |
|
|
if (strchr("YyTt", *body)) { |
|
|
settings.login_shell = TRUE; |
|
|
} |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "HOME_CHDIR") == 0) { |
|
|
if (strchr("YyTt", *body)) { |
|
|
settings.home_chdir = TRUE; |
|
|
} |
|
|
|
|
|
} |
|
|
else if (_stricmp(head, "SSH_AGENT_PROXY") == 0) { |
|
|
if (strchr("YyTt", *body)) { |
|
|
settings.agent_proxy = TRUE; |
|
|
} |
|
|
|
|
|
} |
|
|
else { |
|
|
// TODO: error check |
|
|
|
|
|
} |
|
|
} |
|
|
fclose(fp); |
|
|
} |
|
|
|
|
|
memcpy(&ts->CygtermSettings, &settings, sizeof(cygterm_t)); |
|
|
} |
|
|
|
|
|
static void WriteCygtermConfFile(PTTSet ts) |
|
|
{ |
|
|
char *cfgfile = CYGTERM_FILE; // CygTerm configuration file |
|
|
char *tmpfile = "cygterm.tmp"; |
|
|
char cfg[MAX_PATH]; |
|
|
char tmp[MAX_PATH]; |
|
|
FILE *fp; |
|
|
FILE *tmp_fp; |
|
|
char buf[256], *head, *body; |
|
|
char uimsg[MAX_UIMSG]; |
|
|
cygterm_t settings; |
|
|
char *line[CYGTERM_FILE_MAXLINE]; |
|
|
int i, linenum; |
|
|
|
|
|
// Cygwin設定が変更されていない場合は、ファイルを書き込まない。 |
|
|
if (ts->CygtermSettings.update_flag == FALSE) |
|
|
return; |
|
|
// フラグを落とし、Save setupする度に何度も書き込まないようにする。 |
|
|
ts->CygtermSettings.update_flag = FALSE; |
|
|
|
|
|
memcpy(&settings, &ts->CygtermSettings, sizeof(cygterm_t)); |
|
|
|
|
|
strncpy_s(cfg, sizeof(cfg), ts->HomeDir, _TRUNCATE); |
|
|
AppendSlash(cfg, sizeof(cfg)); |
|
|
strncat_s(cfg, sizeof(cfg), cfgfile, _TRUNCATE); |
|
|
|
|
|
strncpy_s(tmp, sizeof(tmp), ts->HomeDir, _TRUNCATE); |
|
|
AppendSlash(tmp, sizeof(tmp)); |
|
|
strncat_s(tmp, sizeof(tmp), tmpfile, _TRUNCATE); |
|
|
|
|
|
// cygterm.cfg が存在すれば、いったんメモリにすべて読み込む。 |
|
|
memset(line, 0, sizeof(line)); |
|
|
linenum = 0; |
|
|
fp = fopen(cfg, "r"); |
|
|
if (fp) { |
|
|
i = 0; |
|
|
while (fgets(buf, sizeof(buf), fp) != NULL) { |
|
|
size_t len = strlen(buf); |
|
|
if (buf[len - 1] == '\n') |
|
|
buf[len - 1] = '\0'; |
|
|
if (i < CYGTERM_FILE_MAXLINE) |
|
|
line[i++] = _strdup(buf); |
|
|
else |
|
|
break; |
|
|
} |
|
|
linenum = i; |
|
|
fclose(fp); |
|
|
} |
|
|
|
|
|
tmp_fp = fopen(cfg, "w"); |
|
|
if (tmp_fp == NULL) { |
|
|
get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile); |
|
|
get_lang_msg("MSG_CYGTERM_CONF_WRITEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), |
|
|
"Can't write CygTerm configuration file (%d).", ts->UILanguageFile); |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError()); |
|
|
MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION); |
|
|
} |
|
|
else { |
|
|
if (linenum > 0) { |
|
|
for (i = 0; i < linenum; i++) { |
|
|
split_buffer(line[i], '=', &head, &body); |
|
|
if (head == NULL || body == NULL) { |
|
|
fprintf(tmp_fp, "%s\n", line[i]); |
|
|
} |
|
|
else if (_stricmp(head, "TERM") == 0) { |
|
|
fprintf(tmp_fp, "TERM = %s\n", settings.term); |
|
|
settings.term[0] = '\0'; |
|
|
} |
|
|
else if (_stricmp(head, "TERM_TYPE") == 0) { |
|
|
fprintf(tmp_fp, "TERM_TYPE = %s\n", settings.term_type); |
|
|
settings.term_type[0] = '\0'; |
|
|
} |
|
|
else if (_stricmp(head, "PORT_START") == 0) { |
|
|
fprintf(tmp_fp, "PORT_START = %s\n", settings.port_start); |
|
|
settings.port_start[0] = '\0'; |
|
|
} |
|
|
else if (_stricmp(head, "PORT_RANGE") == 0) { |
|
|
fprintf(tmp_fp, "PORT_RANGE = %s\n", settings.port_range); |
|
|
settings.port_range[0] = '\0'; |
|
|
} |
|
|
else if (_stricmp(head, "SHELL") == 0) { |
|
|
fprintf(tmp_fp, "SHELL = %s\n", settings.shell); |
|
|
settings.shell[0] = '\0'; |
|
|
} |
|
|
else if (_stricmp(head, "ENV_1") == 0) { |
|
|
fprintf(tmp_fp, "ENV_1 = %s\n", settings.env1); |
|
|
settings.env1[0] = '\0'; |
|
|
} |
|
|
else if (_stricmp(head, "ENV_2") == 0) { |
|
|
fprintf(tmp_fp, "ENV_2 = %s\n", settings.env2); |
|
|
settings.env2[0] = '\0'; |
|
|
} |
|
|
else if (_stricmp(head, "LOGIN_SHELL") == 0) { |
|
|
fprintf(tmp_fp, "LOGIN_SHELL = %s\n", (settings.login_shell == TRUE) ? "yes" : "no"); |
|
|
settings.login_shell = FALSE; |
|
|
} |
|
|
else if (_stricmp(head, "HOME_CHDIR") == 0) { |
|
|
fprintf(tmp_fp, "HOME_CHDIR = %s\n", (settings.home_chdir == TRUE) ? "yes" : "no"); |
|
|
settings.home_chdir = FALSE; |
|
|
} |
|
|
else if (_stricmp(head, "SSH_AGENT_PROXY") == 0) { |
|
|
fprintf(tmp_fp, "SSH_AGENT_PROXY = %s\n", (settings.agent_proxy == TRUE) ? "yes" : "no"); |
|
|
settings.agent_proxy = FALSE; |
|
|
} |
|
|
else { |
|
|
fprintf(tmp_fp, "%s = %s\n", head, body); |
|
|
} |
|
|
} |
|
|
} |
|
|
else { |
|
|
fputs("# CygTerm setting\n", tmp_fp); |
|
|
fputs("\n", tmp_fp); |
|
|
} |
|
|
if (settings.term[0] != '\0') { |
|
|
fprintf(tmp_fp, "TERM = %s\n", settings.term); |
|
|
} |
|
|
if (settings.term_type[0] != '\0') { |
|
|
fprintf(tmp_fp, "TERM_TYPE = %s\n", settings.term_type); |
|
|
} |
|
|
if (settings.port_start[0] != '\0') { |
|
|
fprintf(tmp_fp, "PORT_START = %s\n", settings.port_start); |
|
|
} |
|
|
if (settings.port_range[0] != '\0') { |
|
|
fprintf(tmp_fp, "PORT_RANGE = %s\n", settings.port_range); |
|
|
} |
|
|
if (settings.shell[0] != '\0') { |
|
|
fprintf(tmp_fp, "SHELL = %s\n", settings.shell); |
|
|
} |
|
|
if (settings.env1[0] != '\0') { |
|
|
fprintf(tmp_fp, "ENV_1 = %s\n", settings.env1); |
|
|
} |
|
|
if (settings.env2[0] != '\0') { |
|
|
fprintf(tmp_fp, "ENV_2 = %s\n", settings.env2); |
|
|
} |
|
|
if (settings.login_shell) { |
|
|
fprintf(tmp_fp, "LOGIN_SHELL = yes\n"); |
|
|
} |
|
|
if (settings.home_chdir) { |
|
|
fprintf(tmp_fp, "HOME_CHDIR = yes\n"); |
|
|
} |
|
|
if (settings.agent_proxy) { |
|
|
fprintf(tmp_fp, "SSH_AGENT_PROXY = yes\n"); |
|
|
} |
|
|
fclose(tmp_fp); |
|
|
|
|
|
// ダイレクトにファイルに書き込むようにしたので、下記処理は不要。 |
|
|
#if 0 |
|
|
if (remove(cfg) != 0 && errno != ENOENT) { |
|
|
get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile); |
|
|
get_lang_msg("MSG_CYGTERM_CONF_REMOVEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), |
|
|
"Can't remove old CygTerm configuration file (%d).", ts->UILanguageFile); |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError()); |
|
|
MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION); |
|
|
} |
|
|
else if (rename(tmp, cfg) != 0) { |
|
|
get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile); |
|
|
get_lang_msg("MSG_CYGTERM_CONF_RENAMEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), |
|
|
"Can't rename CygTerm configuration file (%d).", ts->UILanguageFile); |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError()); |
|
|
MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION); |
|
|
} |
|
|
else { |
|
|
// cygterm.cfg ファイルへの保存が成功したら、メッセージダイアログを表示する。 |
|
|
// 改めて、Save setupを実行する必要はないことを注意喚起する。 |
|
|
// (2012.5.1 yutaka) |
|
|
// Save setup 実行時に、CygTermの設定を保存するようにしたことにより、 |
|
|
// ダイアログ表示が不要となるため、削除する。 |
|
|
// (2015.11.12 yutaka) |
|
|
get_lang_msg("MSG_TT_NOTICE", uimsg, sizeof(uimsg), "MSG_TT_NOTICE", ts->UILanguageFile); |
|
|
get_lang_msg("MSG_CYGTERM_CONF_SAVED_NOTICE", ts->UIMsg, sizeof(ts->UIMsg), |
|
|
"%s has been saved. Do not do save setup.", ts->UILanguageFile); |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, CYGTERM_FILE); |
|
|
MessageBox(NULL, buf, uimsg, MB_OK | MB_ICONINFORMATION); |
|
|
} |
|
|
#endif |
|
|
} |
|
|
|
|
|
// 忘れずにメモリフリーしておく。 |
|
|
for (i = 0; i < linenum; i++) { |
|
|
free(line[i]); |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
| 456 |
/** |
/** |
| 457 |
* BGセクションの読み込み |
* BGセクションの読み込み |
| 458 |
* テーマ以外のアイテム |
* テーマ以外のアイテム |
| 2020 |
// Fallback to CP932 (Experimental) |
// Fallback to CP932 (Experimental) |
| 2021 |
ts->FallbackToCP932 = GetOnOff(Section, "FallbackToCP932", FName, FALSE); |
ts->FallbackToCP932 = GetOnOff(Section, "FallbackToCP932", FName, FALSE); |
| 2022 |
|
|
|
// CygTerm Configuration File |
|
|
ReadCygtermConfFile(ts); |
|
|
|
|
| 2023 |
// dialog font |
// dialog font |
| 2024 |
ReadFont3(L"Tera Term", L"DlgFont", NULL, FName, |
ReadFont3(L"Tera Term", L"DlgFont", NULL, FName, |
| 2025 |
ts->DialogFontNameW, _countof(ts->DialogFontNameW), |
ts->DialogFontNameW, _countof(ts->DialogFontNameW), |
| 3290 |
// Delay for start of mouse selection |
// Delay for start of mouse selection |
| 3291 |
WriteInt(Section, "MouseSelectStartDelay", FName, ts->SelectStartDelay); |
WriteInt(Section, "MouseSelectStartDelay", FName, ts->SelectStartDelay); |
| 3292 |
|
|
|
// CygTerm Configuration File |
|
|
WriteCygtermConfFile(ts); |
|
|
|
|
| 3293 |
// dialog font |
// dialog font |
| 3294 |
aswprintf(&TempW, L"%s,%d,%d", ts->DialogFontNameW, ts->DialogFontPoint, ts->DialogFontCharSet); |
aswprintf(&TempW, L"%s,%d,%d", ts->DialogFontNameW, ts->DialogFontPoint, ts->DialogFontCharSet); |
| 3295 |
WritePrivateProfileStringW(L"Tera Term", L"DlgFont", TempW, FName); |
WritePrivateProfileStringW(L"Tera Term", L"DlgFont", TempW, FName); |