Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 6115 by maya, Tue Nov 10 15:30:43 2015 UTC revision 6119 by yutakapon, Thu Nov 12 15:04:55 2015 UTC
# Line 199  void WriteFont(PCHAR Sect, PCHAR Key, PC Line 199  void WriteFont(PCHAR Sect, PCHAR Key, PC
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;
# Line 1568  void FAR PASCAL ReadIniFile(PCHAR FName, Line 1829  void FAR PASCAL ReadIniFile(PCHAR FName,
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)
# Line 2783  void FAR PASCAL WriteIniFile(PCHAR FName Line 3047  void FAR PASCAL WriteIniFile(PCHAR FName
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"

Legend:
Removed from v.6115  
changed lines
  Added in v.6119

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26