| 199 |
WritePrivateProfileString(Sect, Key, Temp, FName); |
WritePrivateProfileString(Sect, Key, Temp, FName); |
| 200 |
} |
} |
| 201 |
|
|
| 202 |
|
|
| 203 |
|
|
| 204 |
|
#define CYGTERM_FILE "cygterm.cfg" // CygTerm configuration file |
| 205 |
|
|
| 206 |
|
static void ReadCygtermConfFile(PTTSet ts) |
| 207 |
|
{ |
| 208 |
|
char *cfgfile = CYGTERM_FILE; // CygTerm configuration file |
| 209 |
|
char cfg[MAX_PATH]; |
| 210 |
|
FILE *fp; |
| 211 |
|
char buf[256], *head, *body; |
| 212 |
|
cygterm_t settings; |
| 213 |
|
|
| 214 |
|
// try to read CygTerm config file |
| 215 |
|
memset(&settings, 0, sizeof(settings)); |
| 216 |
|
_snprintf_s(settings.term, sizeof(settings.term), _TRUNCATE, "ttermpro.exe %%s %%d /E /KR=SJIS /KT=SJIS /VTICON=CygTerm /nossh"); |
| 217 |
|
_snprintf_s(settings.term_type, sizeof(settings.term_type), _TRUNCATE, "vt100"); |
| 218 |
|
_snprintf_s(settings.port_start, sizeof(settings.port_start), _TRUNCATE, "20000"); |
| 219 |
|
_snprintf_s(settings.port_range, sizeof(settings.port_range), _TRUNCATE, "40"); |
| 220 |
|
_snprintf_s(settings.shell, sizeof(settings.shell), _TRUNCATE, "auto"); |
| 221 |
|
_snprintf_s(settings.env1, sizeof(settings.env1), _TRUNCATE, "MAKE_MODE=unix"); |
| 222 |
|
_snprintf_s(settings.env2, sizeof(settings.env2), _TRUNCATE, ""); |
| 223 |
|
settings.login_shell = FALSE; |
| 224 |
|
settings.home_chdir = FALSE; |
| 225 |
|
settings.agent_proxy = FALSE; |
| 226 |
|
|
| 227 |
|
strncpy_s(cfg, sizeof(cfg), ts->HomeDir, _TRUNCATE); |
| 228 |
|
AppendSlash(cfg, sizeof(cfg)); |
| 229 |
|
strncat_s(cfg, sizeof(cfg), cfgfile, _TRUNCATE); |
| 230 |
|
|
| 231 |
|
fp = fopen(cfg, "r"); |
| 232 |
|
if (fp != NULL) { |
| 233 |
|
while (fgets(buf, sizeof(buf), fp) != NULL) { |
| 234 |
|
int len = strlen(buf); |
| 235 |
|
|
| 236 |
|
if (buf[len - 1] == '\n') |
| 237 |
|
buf[len - 1] = '\0'; |
| 238 |
|
|
| 239 |
|
split_buffer(buf, '=', &head, &body); |
| 240 |
|
if (head == NULL || body == NULL) |
| 241 |
|
continue; |
| 242 |
|
|
| 243 |
|
if (_stricmp(head, "TERM") == 0) { |
| 244 |
|
_snprintf_s(settings.term, sizeof(settings.term), _TRUNCATE, "%s", body); |
| 245 |
|
|
| 246 |
|
} |
| 247 |
|
else if (_stricmp(head, "TERM_TYPE") == 0) { |
| 248 |
|
_snprintf_s(settings.term_type, sizeof(settings.term_type), _TRUNCATE, "%s", body); |
| 249 |
|
|
| 250 |
|
} |
| 251 |
|
else if (_stricmp(head, "PORT_START") == 0) { |
| 252 |
|
_snprintf_s(settings.port_start, sizeof(settings.port_start), _TRUNCATE, "%s", body); |
| 253 |
|
|
| 254 |
|
} |
| 255 |
|
else if (_stricmp(head, "PORT_RANGE") == 0) { |
| 256 |
|
_snprintf_s(settings.port_range, sizeof(settings.port_range), _TRUNCATE, "%s", body); |
| 257 |
|
|
| 258 |
|
} |
| 259 |
|
else if (_stricmp(head, "SHELL") == 0) { |
| 260 |
|
_snprintf_s(settings.shell, sizeof(settings.shell), _TRUNCATE, "%s", body); |
| 261 |
|
|
| 262 |
|
} |
| 263 |
|
else if (_stricmp(head, "ENV_1") == 0) { |
| 264 |
|
_snprintf_s(settings.env1, sizeof(settings.env1), _TRUNCATE, "%s", body); |
| 265 |
|
|
| 266 |
|
} |
| 267 |
|
else if (_stricmp(head, "ENV_2") == 0) { |
| 268 |
|
_snprintf_s(settings.env2, sizeof(settings.env2), _TRUNCATE, "%s", body); |
| 269 |
|
|
| 270 |
|
} |
| 271 |
|
else if (_stricmp(head, "LOGIN_SHELL") == 0) { |
| 272 |
|
if (strchr("YyTt", *body)) { |
| 273 |
|
settings.login_shell = TRUE; |
| 274 |
|
} |
| 275 |
|
|
| 276 |
|
} |
| 277 |
|
else if (_stricmp(head, "HOME_CHDIR") == 0) { |
| 278 |
|
if (strchr("YyTt", *body)) { |
| 279 |
|
settings.home_chdir = TRUE; |
| 280 |
|
} |
| 281 |
|
|
| 282 |
|
} |
| 283 |
|
else if (_stricmp(head, "SSH_AGENT_PROXY") == 0) { |
| 284 |
|
if (strchr("YyTt", *body)) { |
| 285 |
|
settings.agent_proxy = TRUE; |
| 286 |
|
} |
| 287 |
|
|
| 288 |
|
} |
| 289 |
|
else { |
| 290 |
|
// TODO: error check |
| 291 |
|
|
| 292 |
|
} |
| 293 |
|
} |
| 294 |
|
fclose(fp); |
| 295 |
|
} |
| 296 |
|
|
| 297 |
|
memcpy(&ts->CygtermSettings, &settings, sizeof(cygterm_t)); |
| 298 |
|
} |
| 299 |
|
|
| 300 |
|
static void WriteCygtermConfFile(PTTSet ts) |
| 301 |
|
{ |
| 302 |
|
char *cfgfile = CYGTERM_FILE; // CygTerm configuration file |
| 303 |
|
char *tmpfile = "cygterm.tmp"; |
| 304 |
|
char cfg[MAX_PATH]; |
| 305 |
|
char tmp[MAX_PATH]; |
| 306 |
|
FILE *fp; |
| 307 |
|
FILE *tmp_fp; |
| 308 |
|
char buf[256], *head, *body; |
| 309 |
|
char uimsg[MAX_UIMSG]; |
| 310 |
|
cygterm_t settings; |
| 311 |
|
|
| 312 |
|
// Cygwin設定が変更されていない場合は、ファイルを書き込まない。 |
| 313 |
|
if (ts->CygtermSettings.update_flag == FALSE) |
| 314 |
|
return; |
| 315 |
|
// フラグを落とし、Save setupする度に何度も書き込まないようにする。 |
| 316 |
|
ts->CygtermSettings.update_flag = FALSE; |
| 317 |
|
|
| 318 |
|
memcpy(&settings, &ts->CygtermSettings, sizeof(cygterm_t)); |
| 319 |
|
|
| 320 |
|
strncpy_s(cfg, sizeof(cfg), ts->HomeDir, _TRUNCATE); |
| 321 |
|
AppendSlash(cfg, sizeof(cfg)); |
| 322 |
|
strncat_s(cfg, sizeof(cfg), cfgfile, _TRUNCATE); |
| 323 |
|
|
| 324 |
|
strncpy_s(tmp, sizeof(tmp), ts->HomeDir, _TRUNCATE); |
| 325 |
|
AppendSlash(tmp, sizeof(tmp)); |
| 326 |
|
strncat_s(tmp, sizeof(tmp), tmpfile, _TRUNCATE); |
| 327 |
|
|
| 328 |
|
fp = fopen(cfg, "r"); |
| 329 |
|
tmp_fp = fopen(tmp, "w"); |
| 330 |
|
if (tmp_fp == NULL) { |
| 331 |
|
get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile); |
| 332 |
|
get_lang_msg("MSG_CYGTERM_CONF_WRITEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), |
| 333 |
|
"Can't write CygTerm configuration file (%d).", ts->UILanguageFile); |
| 334 |
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError()); |
| 335 |
|
MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION); |
| 336 |
|
} |
| 337 |
|
else { |
| 338 |
|
if (fp != NULL) { |
| 339 |
|
while (fgets(buf, sizeof(buf), fp) != NULL) { |
| 340 |
|
int len = strlen(buf); |
| 341 |
|
|
| 342 |
|
if (buf[len - 1] == '\n') |
| 343 |
|
buf[len - 1] = '\0'; |
| 344 |
|
|
| 345 |
|
split_buffer(buf, '=', &head, &body); |
| 346 |
|
if (head == NULL || body == NULL) { |
| 347 |
|
fprintf(tmp_fp, "%s\n", buf); |
| 348 |
|
} |
| 349 |
|
else if (_stricmp(head, "TERM") == 0) { |
| 350 |
|
fprintf(tmp_fp, "TERM = %s\n", settings.term); |
| 351 |
|
settings.term[0] = '\0'; |
| 352 |
|
} |
| 353 |
|
else if (_stricmp(head, "TERM_TYPE") == 0) { |
| 354 |
|
fprintf(tmp_fp, "TERM_TYPE = %s\n", settings.term_type); |
| 355 |
|
settings.term_type[0] = '\0'; |
| 356 |
|
} |
| 357 |
|
else if (_stricmp(head, "PORT_START") == 0) { |
| 358 |
|
fprintf(tmp_fp, "PORT_START = %s\n", settings.port_start); |
| 359 |
|
settings.port_start[0] = '\0'; |
| 360 |
|
} |
| 361 |
|
else if (_stricmp(head, "PORT_RANGE") == 0) { |
| 362 |
|
fprintf(tmp_fp, "PORT_RANGE = %s\n", settings.port_range); |
| 363 |
|
settings.port_range[0] = '\0'; |
| 364 |
|
} |
| 365 |
|
else if (_stricmp(head, "SHELL") == 0) { |
| 366 |
|
fprintf(tmp_fp, "SHELL = %s\n", settings.shell); |
| 367 |
|
settings.shell[0] = '\0'; |
| 368 |
|
} |
| 369 |
|
else if (_stricmp(head, "ENV_1") == 0) { |
| 370 |
|
fprintf(tmp_fp, "ENV_1 = %s\n", settings.env1); |
| 371 |
|
settings.env1[0] = '\0'; |
| 372 |
|
} |
| 373 |
|
else if (_stricmp(head, "ENV_2") == 0) { |
| 374 |
|
fprintf(tmp_fp, "ENV_2 = %s\n", settings.env2); |
| 375 |
|
settings.env2[0] = '\0'; |
| 376 |
|
} |
| 377 |
|
else if (_stricmp(head, "LOGIN_SHELL") == 0) { |
| 378 |
|
fprintf(tmp_fp, "LOGIN_SHELL = %s\n", (settings.login_shell == TRUE) ? "yes" : "no"); |
| 379 |
|
settings.login_shell = FALSE; |
| 380 |
|
} |
| 381 |
|
else if (_stricmp(head, "HOME_CHDIR") == 0) { |
| 382 |
|
fprintf(tmp_fp, "HOME_CHDIR = %s\n", (settings.home_chdir == TRUE) ? "yes" : "no"); |
| 383 |
|
settings.home_chdir = FALSE; |
| 384 |
|
} |
| 385 |
|
else if (_stricmp(head, "SSH_AGENT_PROXY") == 0) { |
| 386 |
|
fprintf(tmp_fp, "SSH_AGENT_PROXY = %s\n", (settings.agent_proxy == TRUE) ? "yes" : "no"); |
| 387 |
|
settings.agent_proxy = FALSE; |
| 388 |
|
} |
| 389 |
|
else { |
| 390 |
|
fprintf(tmp_fp, "%s = %s\n", head, body); |
| 391 |
|
} |
| 392 |
|
} |
| 393 |
|
fclose(fp); |
| 394 |
|
} |
| 395 |
|
else { |
| 396 |
|
fputs("# CygTerm setting\n", tmp_fp); |
| 397 |
|
fputs("\n", tmp_fp); |
| 398 |
|
} |
| 399 |
|
if (settings.term[0] != '\0') { |
| 400 |
|
fprintf(tmp_fp, "TERM = %s\n", settings.term); |
| 401 |
|
} |
| 402 |
|
if (settings.term_type[0] != '\0') { |
| 403 |
|
fprintf(tmp_fp, "TERM_TYPE = %s\n", settings.term_type); |
| 404 |
|
} |
| 405 |
|
if (settings.port_start[0] != '\0') { |
| 406 |
|
fprintf(tmp_fp, "PORT_START = %s\n", settings.port_start); |
| 407 |
|
} |
| 408 |
|
if (settings.port_range[0] != '\0') { |
| 409 |
|
fprintf(tmp_fp, "PORT_RANGE = %s\n", settings.port_range); |
| 410 |
|
} |
| 411 |
|
if (settings.shell[0] != '\0') { |
| 412 |
|
fprintf(tmp_fp, "SHELL = %s\n", settings.shell); |
| 413 |
|
} |
| 414 |
|
if (settings.env1[0] != '\0') { |
| 415 |
|
fprintf(tmp_fp, "ENV_1 = %s\n", settings.env1); |
| 416 |
|
} |
| 417 |
|
if (settings.env2[0] != '\0') { |
| 418 |
|
fprintf(tmp_fp, "ENV_2 = %s\n", settings.env2); |
| 419 |
|
} |
| 420 |
|
if (settings.login_shell) { |
| 421 |
|
fprintf(tmp_fp, "LOGIN_SHELL = yes\n"); |
| 422 |
|
} |
| 423 |
|
if (settings.home_chdir) { |
| 424 |
|
fprintf(tmp_fp, "HOME_CHDIR = yes\n"); |
| 425 |
|
} |
| 426 |
|
if (settings.agent_proxy) { |
| 427 |
|
fprintf(tmp_fp, "SSH_AGENT_PROXY = yes\n"); |
| 428 |
|
} |
| 429 |
|
fclose(tmp_fp); |
| 430 |
|
|
| 431 |
|
if (remove(cfg) != 0 && errno != ENOENT) { |
| 432 |
|
get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile); |
| 433 |
|
get_lang_msg("MSG_CYGTERM_CONF_REMOVEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), |
| 434 |
|
"Can't remove old CygTerm configuration file (%d).", ts->UILanguageFile); |
| 435 |
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError()); |
| 436 |
|
MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION); |
| 437 |
|
} |
| 438 |
|
else if (rename(tmp, cfg) != 0) { |
| 439 |
|
get_lang_msg("MSG_ERROR", uimsg, sizeof(uimsg), "ERROR", ts->UILanguageFile); |
| 440 |
|
get_lang_msg("MSG_CYGTERM_CONF_RENAMEFILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), |
| 441 |
|
"Can't rename CygTerm configuration file (%d).", ts->UILanguageFile); |
| 442 |
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, GetLastError()); |
| 443 |
|
MessageBox(NULL, buf, uimsg, MB_ICONEXCLAMATION); |
| 444 |
|
} |
| 445 |
|
else { |
| 446 |
|
// cygterm.cfg ファイルへの保存が成功したら、メッセージダイアログを表示する。 |
| 447 |
|
// 改めて、Save setupを実行する必要はないことを注意喚起する。 |
| 448 |
|
// (2012.5.1 yutaka) |
| 449 |
|
// Save setup 実行時に、CygTermの設定を保存するようにしたことにより、 |
| 450 |
|
// ダイアログ表示が不要となるため、削除する。 |
| 451 |
|
// (2015.11.12 yutaka) |
| 452 |
|
#if 0 |
| 453 |
|
get_lang_msg("MSG_TT_NOTICE", uimsg, sizeof(uimsg), "MSG_TT_NOTICE", ts->UILanguageFile); |
| 454 |
|
get_lang_msg("MSG_CYGTERM_CONF_SAVED_NOTICE", ts->UIMsg, sizeof(ts->UIMsg), |
| 455 |
|
"%s has been saved. Do not do save setup.", ts->UILanguageFile); |
| 456 |
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, ts->UIMsg, CYGTERM_FILE); |
| 457 |
|
MessageBox(NULL, buf, uimsg, MB_OK | MB_ICONINFORMATION); |
| 458 |
|
#endif |
| 459 |
|
} |
| 460 |
|
} |
| 461 |
|
} |
| 462 |
|
|
| 463 |
void FAR PASCAL ReadIniFile(PCHAR FName, PTTSet ts) |
void FAR PASCAL ReadIniFile(PCHAR FName, PTTSet ts) |
| 464 |
{ |
{ |
| 465 |
int i; |
int i; |
| 1829 |
if (ts->DebugModes == DBGF_NONE) |
if (ts->DebugModes == DBGF_NONE) |
| 1830 |
ts->Debug = FALSE; |
ts->Debug = FALSE; |
| 1831 |
} |
} |
| 1832 |
|
|
| 1833 |
|
// CygTerm Configuration File |
| 1834 |
|
ReadCygtermConfFile(ts); |
| 1835 |
} |
} |
| 1836 |
|
|
| 1837 |
void FAR PASCAL WriteIniFile(PCHAR FName, PTTSet ts) |
void FAR PASCAL WriteIniFile(PCHAR FName, PTTSet ts) |
| 3047 |
} |
} |
| 3048 |
} |
} |
| 3049 |
WritePrivateProfileString(Section, "DebugModes", Temp, FName); |
WritePrivateProfileString(Section, "DebugModes", Temp, FName); |
| 3050 |
|
|
| 3051 |
|
// CygTerm Configuration File |
| 3052 |
|
WriteCygtermConfFile(ts); |
| 3053 |
} |
} |
| 3054 |
|
|
| 3055 |
#define VTEditor "VT editor keypad" |
#define VTEditor "VT editor keypad" |