[Ttssh2-commit] [6119] チケット #35710 Cygwin設定の見直し

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2015年 11月 13日 (金) 00:04:56 JST


Revision: 6119
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6119
Author:   yutakapon
Date:     2015-11-13 00:04:55 +0900 (Fri, 13 Nov 2015)
Log Message:
-----------
チケット #35710 Cygwin設定の見直し

項番1に対応させた。

1. 設定ダイアログでOK押下しただけで、cygterm.cfgを書き換えないようにし、
 Save setupで保存するように、本来あるべき姿に変更する。

Ticket Links:
------------
    http://sourceforge.jp/projects/ttssh2/tracker/detail/35710

Modified Paths:
--------------
    trunk/teraterm/common/teraterm.h
    trunk/teraterm/common/tttypes.h
    trunk/teraterm/teraterm/addsetting.cpp
    trunk/teraterm/teraterm/addsetting.h
    trunk/teraterm/ttpset/ttset.c

-------------- next part --------------
Modified: trunk/teraterm/common/teraterm.h
===================================================================
--- trunk/teraterm/common/teraterm.h	2015-11-12 14:33:12 UTC (rev 6118)
+++ trunk/teraterm/common/teraterm.h	2015-11-12 15:04:55 UTC (rev 6119)
@@ -3,6 +3,8 @@
  All rights reserved. */
 /* IPv6 modification is Copyright(C) 2000, 2001 Jun-ya kato <kato****@win6*****> */
 
+#pragma once
+
 #ifndef NO_INET6
 #ifndef _WINSOCKAPI_
 #define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
@@ -39,3 +41,17 @@
 		fclose(fp); \
 	} \
 }
+
+typedef struct cygterm {
+	BOOL update_flag;
+	char term[128];
+	char term_type[80];
+	char port_start[80];
+	char port_range[80];
+	char shell[80];
+	char env1[128];
+	char env2[128];
+	BOOL login_shell;
+	BOOL home_chdir;
+	BOOL agent_proxy;
+} cygterm_t;

Modified: trunk/teraterm/common/tttypes.h
===================================================================
--- trunk/teraterm/common/tttypes.h	2015-11-12 14:33:12 UTC (rev 6118)
+++ trunk/teraterm/common/tttypes.h	2015-11-12 15:04:55 UTC (rev 6119)
@@ -4,6 +4,7 @@
 
 /* Constants and types for Tera Term */
 #include <locale.h>
+#include "teraterm.h"
 
 #define IdBreakTimer         1
 #define IdDelayTimer         2
@@ -588,6 +589,7 @@
 	WORD FileSendHighSpeedMode;
 	WORD AutoComPortReconnect;
 	WORD BGImgBrightness;
+	cygterm_t CygtermSettings;
 };
 
 typedef struct tttset TTTSet, *PTTSet;
@@ -1055,6 +1057,7 @@
  *   added tttset.FileSendHighSpeedMode
  *   added tttset.AutoComPortReconnect
  *   added tttset.BGImgBrightness
+ *   added tttset.CygtermSettings
  *
  * - At version 4.85, ttset_memfilemap was replaced with ttset_memfilemap_25.
  *   added tttset.AcceleratorNewConnection

Modified: trunk/teraterm/teraterm/addsetting.cpp
===================================================================
--- trunk/teraterm/teraterm/addsetting.cpp	2015-11-12 14:33:12 UTC (rev 6118)
+++ trunk/teraterm/teraterm/addsetting.cpp	2015-11-12 15:04:55 UTC (rev 6119)
@@ -1674,14 +1674,9 @@
 END_MESSAGE_MAP()
 
 // CCygwinPropPageDlg \x83\x81\x83b\x83Z\x81[\x83W \x83n\x83\x93\x83h\x83\x89
-#define CYGTERM_FILE "cygterm.cfg"  // CygTerm configuration file
 
 BOOL CCygwinPropPageDlg::OnInitDialog()
 {
-	char *cfgfile = CYGTERM_FILE; // CygTerm configuration file
-	char cfg[MAX_PATH];
-	FILE *fp;
-	char buf[256], *head, *body;
 	char uimsg[MAX_UIMSG];
 	CButton *btn;
 
@@ -1720,78 +1715,8 @@
 	get_lang_msg("DLG_TAB_CYGWIN_PATH", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile);
 	SetDlgItemText(IDC_CYGWIN_PATH_LABEL, ts.UIMsg);
 
-	// 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;
+	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);
-
-	fp = fopen(cfg, "r");
-	if (fp != NULL) { 
-		while (fgets(buf, sizeof(buf), fp) != NULL) {
-			int 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);
-	}
 	SetDlgItemText(IDC_TERM_EDIT, settings.term);
 	SetDlgItemText(IDC_TERM_TYPE, settings.term_type);
 	SetDlgItemText(IDC_PORT_START, settings.port_start);
@@ -1836,14 +1761,6 @@
 
 void CCygwinPropPageDlg::OnOK()
 {
-	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];
 	CButton *btn;
 
 	// writing to CygTerm config file
@@ -1861,141 +1778,11 @@
 	btn = (CButton *)GetDlgItem(IDC_AGENT_PROXY);
 	settings.agent_proxy = btn->GetCheck();
 
-	strncpy_s(cfg, sizeof(cfg), ts.HomeDir, _TRUNCATE);
-	AppendSlash(cfg, sizeof(cfg));
-	strncat_s(cfg, sizeof(cfg), cfgfile, _TRUNCATE);
+	memcpy(&ts.CygtermSettings, &settings, sizeof(cygterm_t));
 
-	strncpy_s(tmp, sizeof(tmp), ts.HomeDir, _TRUNCATE);
-	AppendSlash(tmp, sizeof(tmp));
-	strncat_s(tmp, sizeof(tmp), tmpfile, _TRUNCATE);
+	// \x90ݒ\xE8\x82\xF0\x8F\x91\x82\xAB\x8D\x9E\x82ނ\xBD\x82߃t\x83\x89\x83O\x82𗧂ĂĂ\xA8\x82\xAD\x81B
+	ts.CygtermSettings.update_flag = TRUE;
 
-	fp = fopen(cfg, "r");
-	tmp_fp = fopen(tmp, "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(buf, uimsg, MB_ICONEXCLAMATION);
-	} else {
-		if (fp != NULL) {
-			while (fgets(buf, sizeof(buf), fp) != NULL) {
-				int len = strlen(buf);
-
-				if (buf[len - 1] == '\n')
-					buf[len - 1] = '\0';
-
-				split_buffer(buf, '=', &head, &body);
-				if (head == NULL || body == NULL) {
-					fprintf(tmp_fp, "%s\n", buf);
-				}
-				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);
-				}
-			}
-			fclose(fp);
-		}
-		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 (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(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(buf, uimsg, MB_ICONEXCLAMATION);
-		} else {
-			// cygterm.cfg \x83t\x83@\x83C\x83\x8B\x82ւ̕ۑ\xB6\x82\xAA\x90\xAC\x8C\x{1C2D42}\xBD\x82\xE7\x81A\x83\x81\x83b\x83Z\x81[\x83W\x83_\x83C\x83A\x83\x8D\x83O\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9\x81B
-			// \x89\xFC\x82߂āASave setup\x82\xF0\x8E\xC0\x8Ds\x82\xB7\x82\xE9\x95K\x97v\x82͂Ȃ\xA2\x82\xB1\x82Ƃ𒍈ӊ\xAB\x8BN\x82\xB7\x82\xE9\x81B
-			// (2012.5.1 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(buf, uimsg, MB_OK | MB_ICONINFORMATION);
-		}
-	}
-
 	// Cygwin install path
 	GetDlgItemText(IDC_CYGWIN_PATH, ts.CygwinDirectory, sizeof(ts.CygwinDirectory));
 }

Modified: trunk/teraterm/teraterm/addsetting.h
===================================================================
--- trunk/teraterm/teraterm/addsetting.h	2015-11-12 14:33:12 UTC (rev 6118)
+++ trunk/teraterm/teraterm/addsetting.h	2015-11-12 15:04:55 UTC (rev 6119)
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "tt_res.h"
+#include "teraterm.h"
 
 
 typedef struct {
@@ -8,21 +9,8 @@
 	LPCTSTR id;
 } mouse_cursor_t;
 
-typedef struct cygterm {
-	char term[128];
-	char term_type[80];
-	char port_start[80];
-	char port_range[80];
-	char shell[80];
-	char env1[128];
-	char env2[128];
-	BOOL login_shell;
-	BOOL home_chdir;
-	BOOL agent_proxy;
-} cygterm_t;
 
 
-
 // General Page
 class CGeneralPropPageDlg : public CPropertyPage
 {

Modified: trunk/teraterm/ttpset/ttset.c
===================================================================
--- trunk/teraterm/ttpset/ttset.c	2015-11-12 14:33:12 UTC (rev 6118)
+++ trunk/teraterm/ttpset/ttset.c	2015-11-12 15:04:55 UTC (rev 6119)
@@ -199,6 +199,267 @@
 	WritePrivateProfileString(Sect, Key, Temp, FName);
 }
 
+
+
+#define CYGTERM_FILE "cygterm.cfg"  // CygTerm configuration file
+
+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) {
+			int 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;
+
+	// Cygwin\x90ݒ肪\x95ύX\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ\x82́A\x83t\x83@\x83C\x83\x8B\x82\xF0\x8F\x91\x82\xAB\x8D\x9E\x82܂Ȃ\xA2\x81B
+	if (ts->CygtermSettings.update_flag == FALSE)
+		return;
+	// \x83t\x83\x89\x83O\x82𗎂Ƃ\xB5\x81ASave setup\x82\xB7\x82\xE9\x93x\x82ɉ\xBD\x93x\x82\xE0\x8F\x91\x82\xAB\x8D\x9E\x82܂Ȃ\xA2\x82悤\x82ɂ\xB7\x82\xE9\x81B
+	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);
+
+	fp = fopen(cfg, "r");
+	tmp_fp = fopen(tmp, "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 (fp != NULL) {
+			while (fgets(buf, sizeof(buf), fp) != NULL) {
+				int len = strlen(buf);
+
+				if (buf[len - 1] == '\n')
+					buf[len - 1] = '\0';
+
+				split_buffer(buf, '=', &head, &body);
+				if (head == NULL || body == NULL) {
+					fprintf(tmp_fp, "%s\n", buf);
+				}
+				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);
+				}
+			}
+			fclose(fp);
+		}
+		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 (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 \x83t\x83@\x83C\x83\x8B\x82ւ̕ۑ\xB6\x82\xAA\x90\xAC\x8C\x{1C2D42}\xBD\x82\xE7\x81A\x83\x81\x83b\x83Z\x81[\x83W\x83_\x83C\x83A\x83\x8D\x83O\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9\x81B
+			// \x89\xFC\x82߂āASave setup\x82\xF0\x8E\xC0\x8Ds\x82\xB7\x82\xE9\x95K\x97v\x82͂Ȃ\xA2\x82\xB1\x82Ƃ𒍈ӊ\xAB\x8BN\x82\xB7\x82\xE9\x81B
+			// (2012.5.1 yutaka)
+			// Save setup \x8E\xC0\x8Ds\x8E\x9E\x82ɁACygTerm\x82̐ݒ\xE8\x82\xF0\x95ۑ\xB6\x82\xB7\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x82\xB1\x82Ƃɂ\xE6\x82\xE8\x81A
+			// \x83_\x83C\x83A\x83\x8D\x83O\x95\\x8E\xA6\x82\xAA\x95s\x97v\x82ƂȂ邽\x82߁A\x8D폜\x82\xB7\x82\xE9\x81B
+			// (2015.11.12 yutaka)
+#if 0
+			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
+		}
+	}
+}
+
 void FAR PASCAL ReadIniFile(PCHAR FName, PTTSet ts)
 {
 	int i;
@@ -1568,6 +1829,9 @@
 		if (ts->DebugModes == DBGF_NONE)
 			ts->Debug = FALSE;
 	}
+
+	// CygTerm Configuration File
+	ReadCygtermConfFile(ts);
 }
 
 void FAR PASCAL WriteIniFile(PCHAR FName, PTTSet ts)
@@ -2783,6 +3047,9 @@
 		}
 	}
 	WritePrivateProfileString(Section, "DebugModes", Temp, FName);
+
+	// CygTerm Configuration File
+	WriteCygtermConfFile(ts);
 }
 
 #define VTEditor "VT editor keypad"



Ttssh2-commit メーリングリストの案内
Back to archive index