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 10150 by zmatsuo, Sat Aug 13 14:01:35 2022 UTC revision 10179 by zmatsuo, Wed Aug 24 14:03:59 2022 UTC
# Line 453  static void ReadFont3( Line 453  static void ReadFont3(
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   *              テーマ以外のアイテム   *              テーマ以外のアイテム
# Line 2301  void PASCAL _ReadIniFile(const wchar_t * Line 2020  void PASCAL _ReadIniFile(const wchar_t *
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),
# Line 3574  void PASCAL _WriteIniFile(const wchar_t Line 3290  void PASCAL _WriteIniFile(const wchar_t
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);

Legend:
Removed from v.10150  
changed lines
  Added in v.10179

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