[Ttssh2-commit] [8205] ・シリアルポート設定ダイアログからNew connectionする際、全設定をコマンドラインに渡すようにした。

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2019年 9月 20日 (金) 23:16:59 JST


Revision: 8205
          https://osdn.net/projects/ttssh2/scm/svn/commits/8205
Author:   yutakapon
Date:     2019-09-20 23:16:59 +0900 (Fri, 20 Sep 2019)
Log Message:
-----------
・シリアルポート設定ダイアログからNew connectionする際、全設定をコマンドラインに渡すようにした。
・コマンドラインオプション /CDATABIT=, /CPARITY=, /CSTOPBIT=, /CFLOWCTRL=, /CDELAYPERCHAR=, /CDELAYPERLINE=を追加した。

branches/serial_port_improvedからリビジョン8172, 8204をマージ:
・シリアルポート設定ダイアログからNew connectionする際、全設定をコマンドラインに渡すようにした。
・コマンドラインオプション /CDATABIT=, /CPARITY=, /CSTOPBIT=, /CFLOWCTRL=, /CDELAYPERCHAR=, /CDELAYPERLINE=を追加した。

........
コマンドラインオプション /CDATABIT=, /CPARITY=, /CSTOPBIT=, /CFLOWCTRL= の指定方法を
teraterm.ini と合わせるようにした。

........

Modified Paths:
--------------
    trunk/doc/en/html/about/history.html
    trunk/doc/en/html/commandline/teraterm.html
    trunk/doc/ja/html/about/history.html
    trunk/doc/ja/html/commandline/teraterm.html
    trunk/teraterm/common/ttlib.h
    trunk/teraterm/teraterm/ttsetup.h
    trunk/teraterm/teraterm/vtwin.cpp
    trunk/teraterm/ttpset/ttpset.def
    trunk/teraterm/ttpset/ttset.c

Property Changed:
----------------
    trunk/
    trunk/teraterm/

-------------- next part --------------
Index: trunk
===================================================================
--- trunk	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk	2019-09-20 14:16:59 UTC (rev 8205)

Property changes on: trunk
___________________________________________________________________
Modified: svn:mergeinfo
## -2,7 +2,7 ##
 /branches/flowctrl_dsrdtr:7825-7827
 /branches/openssl_1_1_1_v2:7888
 /branches/portfwd_memleak:7732,7736-7737,7764
-/branches/serial_port_improved:8119,8140-8141,8144,8150,8158-8160,8163,8170-8171,8183,8185
+/branches/serial_port_improved:8119,8140-8141,8144,8150,8158-8160,8163,8170-8172,8183,8185,8204
 /branches/ssh_ed25519:5495-5544
 /branches/ttproxy_improved:8041,8055-8056
 /branches/ttssh_improved:8027,8036,8040,8044,8053-8054,8058,8060,8063,8081,8085
Modified: trunk/doc/en/html/about/history.html
===================================================================
--- trunk/doc/en/html/about/history.html	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/doc/en/html/about/history.html	2019-09-20 14:16:59 UTC (rev 8205)
@@ -52,6 +52,7 @@
       <li>The tooltip of the speed setting is added on the <a href="../menu/setup-serialport.html#Information">[Setup]-[Serial port]</a> dialog.</li>
       <li>The OK button notation in the <a href="../menu/setup-serialport.html#OK">[Setup]-[Serial port]</a> dialog is changed refering to the connection state. </li>
       <li>The OK button can not be pressed in the <a href="../menu/setup-serialport.html#OK">[Setup]-[Serial port]</a> dialog when no COM ports are available.</li>
+      <li>Added <a href="../commandline/teraterm.html#cdatabit">/CDATABIT=</a>,  <a href="../commandline/teraterm.html#cparity">/CPARITY=</a>, <a href="../commandline/teraterm.html#cstopbit">/CSTOPBIT=</a>, <a href="../commandline/teraterm.html#cflowctrl">/CFLOWCTRL=</a>, <a href="../commandline/teraterm.html#cdelayperchar">/CDELAYPERCHAR=</a>, <a href="../commandline/teraterm.html#cdelayperline">/CDELAYPERLINE=</a> command line options.</li>
     </ul>
   </li>
   <li>Bug fixes

Modified: trunk/doc/en/html/commandline/teraterm.html
===================================================================
--- trunk/doc/en/html/commandline/teraterm.html	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/doc/en/html/commandline/teraterm.html	2019-09-20 14:16:59 UTC (rev 8205)
@@ -76,6 +76,59 @@
       By default, maximum serial port number is 256. It is configurable in <a href="../setup/teraterm-com.html#maxport">MaxComPort</a> setting.
       </dd>
 
+  <dt id="cdatabit">/CDATABIT=<value></dt>
+  <dd>Data bit of serial port
+      <ul>
+        <li><span class="syntax">/CDATABIT=7</span> 7bit</li>
+        <li><span class="syntax">/CDATABIT=8</span> 8bit</li>
+      </ul>
+      </dd>
+
+  <dt id="cparity">/CPARITY=<value></dt>
+  <dd>Parity of serial port
+      <ul>
+        <li><span class="syntax">/CPARITY=none</span> none</li>
+        <li><span class="syntax">/CPARITY=odd</span> odd</li>
+        <li><span class="syntax">/CPARITY=even</span> even</li>
+        <li><span class="syntax">/CPARITY=mark</span> mark</li>
+        <li><span class="syntax">/CPARITY=space</span> space</li>
+      </ul>
+      </dd>
+
+  <dt id="cstopbit">/CSTOPBIT=<value></dt>
+  <dd>Stop bit of serial port
+      <ul>
+        <li><span class="syntax">/CSTOPBIT=1</span> 1bit</li>
+        <li><span class="syntax">/CSTOPBIT=1.5</span> 1.5bit</li>
+        <li><span class="syntax">/CSTOPBIT=2</span> 2bit</li>
+      </ul>
+      </dd>
+
+  <dt id="cflowctrl">/CFLOWCTRL=<value></dt>
+  <dd>Flow control of serial port
+      <ul>
+        <li><span class="syntax">/CFLOWCTRL=x</span> Xon/Xoff</li>
+        <li><span class="syntax">/CFLOWCTRL=hard</span> RTS/CTS</li>
+        <li><span class="syntax">/CFLOWCTRL=rtscts</span> RTS/CTS</li>
+        <li><span class="syntax">/CFLOWCTRL=none</span> none</li>
+        <li><span class="syntax">/CFLOWCTRL=dsrdtr</span> DSR/DTR</li>
+      </ul>
+      </dd>
+
+  <dt id="cdelayperchar">/CDELAYPERCHAR=<value></dt>
+  <dd>Transmission delay time per character of serial port(msec)
+      <ul>
+        <li><span class="syntax">/CDELAYPERCHAR=n</span> n millisecond</li>
+      </ul>
+      </dd>
+
+  <dt id="cdelayperline">/CDELAYPERLINE=<value></dt>
+  <dd>Transmission delay time per line of serial port(msec)
+      <ul>
+        <li><span class="syntax">/CDELAYPERLINE=n</span> nmillisecond</li>
+      </ul>
+      </dd>
+
 <!--
   <dt id="duplicate">/DUPLICATE</dt>
   <dd>Internal use(must not specify this option)</dd>

Modified: trunk/doc/ja/html/about/history.html
===================================================================
--- trunk/doc/ja/html/about/history.html	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/doc/ja/html/about/history.html	2019-09-20 14:16:59 UTC (rev 8205)
@@ -52,6 +52,7 @@
       <li><a href="../menu/setup-serialport.html">[Setup]-[Serial port]</a> \x83_\x83C\x83A\x83\x8D\x83O\x82̃X\x83s\x81[\x83h\x90ݒ\xE8\x82Ńc\x81[\x83\x8B\x83`\x83b\x83v\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B</li>
       <li><a href="../menu/setup-serialport.html#OK">[Setup]-[Serial port]</a> \x83_\x83C\x83A\x83\x8D\x83O\x82\xCCOK\x83{\x83^\x83\x93\x82̕\\x8BL\x82\xF0\x90ڑ\xB1\x8F\xF3\x91ԂŐ؂\xE8\x91ւ\xA6\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B</li>
       <li>\x8Eg\x97p\x89”\\x82\xC8COM\x83|\x81[\x83g\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x8Fꍇ\x81A<a href="../menu/setup-serialport.html#OK">[Setup]-[Serial port]</a> \x83_\x83C\x83A\x83\x8D\x83O\x82\xCCOK\x83{\x83^\x83\x93\x82\xF0\x89\x9F\x82\xB9\x82Ȃ\xA2\x82悤\x82ɂ\xB5\x82\xBD\x81B</li>
+      <li><a href="../commandline/teraterm.html#cdatabit">/CDATABIT=</a>,  <a href="../commandline/teraterm.html#cparity">/CPARITY=</a>, <a href="../commandline/teraterm.html#cstopbit">/CSTOPBIT=</a>, <a href="../commandline/teraterm.html#cflowctrl">/CFLOWCTRL=</a>, <a href="../commandline/teraterm.html#cdelayperchar">/CDELAYPERCHAR=</a>, <a href="../commandline/teraterm.html#cdelayperline">/CDELAYPERLINE=</a> \x83R\x83}\x83\x93\x83h\x83\x89\x83C\x83\x93\x83I\x83v\x83V\x83\x87\x83\x93\x82\xF0\x92lj\xC1\x82\xB5\x82\xBD\x81B</li>
     </ul>
   </li>
   <li>\x83o\x83O\x8FC\x90\xB3

Modified: trunk/doc/ja/html/commandline/teraterm.html
===================================================================
--- trunk/doc/ja/html/commandline/teraterm.html	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/doc/ja/html/commandline/teraterm.html	2019-09-20 14:16:59 UTC (rev 8205)
@@ -80,6 +80,59 @@
       \x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x94ԍ\x86\x82̍ő\xE5\x92l\x82̓f\x83t\x83H\x83\x8B\x83g\x82\xC5256\x82ƂȂ\xC1\x82Ă\xA2\x82܂\xB7\x81B<a href="../setup/teraterm-com.html#maxport">MaxComPort</a>\x82ōő\xE5\x92l\x82\xF0\x95ύX\x82ł\xAB\x82܂\xB7\x81B
       </dd>
 
+  <dt id="cdatabit">/CDATABIT=<value></dt>
+  <dd>\x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x82̃f\x81[\x83^\x83r\x83b\x83g
+      <ul>
+        <li><span class="syntax">/CDATABIT=7</span> 7bit</li>
+        <li><span class="syntax">/CDATABIT=8</span> 8bit</li>
+      </ul>
+      </dd>
+
+  <dt id="cparity">/CPARITY=<value></dt>
+  <dd>\x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x82̃p\x83\x8A\x83e\x83B
+      <ul>
+        <li><span class="syntax">/CPARITY=none</span> none</li>
+        <li><span class="syntax">/CPARITY=odd</span> odd</li>
+        <li><span class="syntax">/CPARITY=even</span> even</li>
+        <li><span class="syntax">/CPARITY=mark</span> mark</li>
+        <li><span class="syntax">/CPARITY=space</span> space</li>
+      </ul>
+      </dd>
+
+  <dt id="cstopbit">/CSTOPBIT=<value></dt>
+  <dd>\x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x82̃X\x83g\x83b\x83v\x83r\x83b\x83g
+      <ul>
+        <li><span class="syntax">/CSTOPBIT=1</span> 1bit</li>
+        <li><span class="syntax">/CSTOPBIT=1.5</span> 1.5bit</li>
+        <li><span class="syntax">/CSTOPBIT=2</span> 2bit</li>
+      </ul>
+      </dd>
+
+  <dt id="cflowctrl">/CFLOWCTRL=<value></dt>
+  <dd>\x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x82̃t\x83\x8D\x81[\x90\xA7\x8C\xE4
+      <ul>
+        <li><span class="syntax">/CFLOWCTRL=x</span> Xon/Xoff</li>
+        <li><span class="syntax">/CFLOWCTRL=hard</span> RTS/CTS</li>
+        <li><span class="syntax">/CFLOWCTRL=rtscts</span> RTS/CTS</li>
+        <li><span class="syntax">/CFLOWCTRL=none</span> none</li>
+        <li><span class="syntax">/CFLOWCTRL=dsrdtr</span> DSR/DTR</li>
+      </ul>
+      </dd>
+
+  <dt id="cdelayperchar">/CDELAYPERCHAR=<value></dt>
+  <dd>\x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x82̈ꕶ\x8E\x9A\x82\xA0\x82\xBD\x82\xE8\x82̑\x97\x90M\x92x\x89\x84\x8E\x9E\x8A\xD4(\x83~\x83\x8A\x95b)
+      <ul>
+        <li><span class="syntax">/CDELAYPERCHAR=n</span> n\x83~\x83\x8A\x95b</li>
+      </ul>
+      </dd>
+
+  <dt id="cdelayperline">/CDELAYPERLINE=<value></dt>
+  <dd>\x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x82̈\xEA\x8Ds\x82\xA0\x82\xBD\x82\xE8\x82̑\x97\x90M\x92x\x89\x84\x8E\x9E\x8A\xD4(\x83~\x83\x8A\x95b)
+      <ul>
+        <li><span class="syntax">/CDELAYPERLINE=n</span> n\x83~\x83\x8A\x95b</li>
+      </ul>
+      </dd>
+
 <!--
   <dt id="duplicate">/DUPLICATE</dt>
   <dd>\x8Eg\x97p\x8B֎~\x81i\x83Z\x83b\x83V\x83\x87\x83\x93\x82̕\xA1\x90\xBB\x82œ\xE0\x95\x94\x82Ŏg\x82\xED\x82\xEA\x82\xE9\x81j</dd>

Index: trunk/teraterm
===================================================================
--- trunk/teraterm	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/teraterm	2019-09-20 14:16:59 UTC (rev 8205)

Property changes on: trunk/teraterm
___________________________________________________________________
Modified: svn:mergeinfo
## -1,4 +1,4 ##
 /branches/drag_and_drop/teraterm:7130,7139,7141,7143-7147
 /branches/flowctrl_dsrdtr/teraterm:7825-7827
-/branches/serial_port_improved/teraterm:8119,8140-8141,8144,8150,8158-8160,8163,8170,8183,8185
+/branches/serial_port_improved/teraterm:8119,8140-8141,8144,8150,8158-8160,8163,8170,8172,8183,8185,8204
 /branches/vs2015_warn/teraterm:6194-6285
\ No newline at end of property
Modified: trunk/teraterm/common/ttlib.h
===================================================================
--- trunk/teraterm/common/ttlib.h	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/teraterm/common/ttlib.h	2019-09-20 14:16:59 UTC (rev 8205)
@@ -136,6 +136,16 @@
 #define	get_OPENFILENAME_SIZE() get_OPENFILENAME_SIZEA()
 #endif
 
+/*
+ * \x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x8A֘A\x82̐ݒ\xE8\x92\xE8\x8B`
+ */
+enum serial_port_conf {
+	COM_DATABIT, 
+	COM_PARITY,
+	COM_STOPBIT,
+	COM_FLOWCTRL,
+};
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/teraterm/teraterm/ttsetup.h
===================================================================
--- trunk/teraterm/teraterm/ttsetup.h	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/teraterm/teraterm/ttsetup.h	2019-09-20 14:16:59 UTC (rev 8205)
@@ -27,6 +27,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "ttlib.h"
+
 /* TERATERM.EXE, TTSET interface */
 #ifdef __cplusplus
 extern "C" {
@@ -62,6 +64,8 @@
 BOOL LoadTTSET();
 void FreeTTSET();
 
+int PASCAL SerialPortConfconvertId2Str(enum serial_port_conf type, WORD id, PCHAR str, int strlen);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/teraterm/teraterm/vtwin.cpp	2019-09-20 14:16:59 UTC (rev 8205)
@@ -4672,6 +4672,7 @@
 {
 	BOOL Ok;
 	char Command[MAXPATHLEN + HostNameMaxLength];
+	char Temp[MAX_PATH], Str[MAX_PATH];
 
 	HelpId = HlpSetupSerialPort;
 	if (! LoadTTDLG()) {
@@ -4688,9 +4689,26 @@
 		 * New connection\x82\xA9\x82\xE7\x83V\x83\x8A\x83A\x83\x8B\x90ڑ\xB1\x82\xB7\x82铮\x8D\xEC\x82Ɗ\xEE\x96{\x93I\x82ɓ\xAF\x82\xB6\x93\xAE\x8D\xEC\x82ƂȂ\xE9\x81B
 		 */
 		if ( cv.Ready && (cv.PortType != IdSerial) ) {
+			_snprintf_s(Command, sizeof(Command), 
+				"ttermpro /C=%u /SPEED=%lu /CDELAYPERCHAR=%u /CDELAYPERLINE=%u ",
+				ts.ComPort, ts.Baud, ts.DelayPerChar, ts.DelayPerLine);
 
-			_snprintf_s(Command, sizeof(Command), "ttermpro /C=%u /SPEED=%lu",
-				ts.ComPort, ts.Baud);
+			if (SerialPortConfconvertId2Str(COM_DATABIT, ts.DataBit, Temp, sizeof(Temp))) {
+				_snprintf_s(Str, sizeof(Str), _TRUNCATE, "/CDATABIT=%s ", Temp);
+				strncat_s(Command, sizeof(Command), Str, _TRUNCATE);
+			}
+			if (SerialPortConfconvertId2Str(COM_PARITY, ts.Parity, Temp, sizeof(Temp))) {
+				_snprintf_s(Str, sizeof(Str), _TRUNCATE, "/CPARITY=%s ", Temp);
+				strncat_s(Command, sizeof(Command), Str, _TRUNCATE);
+			}
+			if (SerialPortConfconvertId2Str(COM_STOPBIT, ts.StopBit, Temp, sizeof(Temp))) {
+				_snprintf_s(Str, sizeof(Str), _TRUNCATE, "/CSTOPBIT=%s ", Temp);
+				strncat_s(Command, sizeof(Command), Str, _TRUNCATE);
+			}
+			if (SerialPortConfconvertId2Str(COM_FLOWCTRL, ts.Flow, Temp, sizeof(Temp))) {
+				_snprintf_s(Str, sizeof(Str), _TRUNCATE, "/CFLOWCTRL=%s ", Temp);
+				strncat_s(Command, sizeof(Command), Str, _TRUNCATE);
+			}
 
 			WinExec(Command,SW_SHOW);
 			return;

Modified: trunk/teraterm/ttpset/ttpset.def
===================================================================
--- trunk/teraterm/ttpset/ttpset.def	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/teraterm/ttpset/ttpset.def	2019-09-20 14:16:59 UTC (rev 8205)
@@ -7,3 +7,4 @@
   ParseParam @6
   CopySerialList @7
   AddValueToList @8
+  SerialPortConfconvertId2Str @9

Modified: trunk/teraterm/ttpset/ttset.c
===================================================================
--- trunk/teraterm/ttpset/ttset.c	2019-09-20 13:47:26 UTC (rev 8204)
+++ trunk/teraterm/ttpset/ttset.c	2019-09-20 14:16:59 UTC (rev 8205)
@@ -60,6 +60,148 @@
 	{ "Windows", "KOI8-R", "CP-866", "ISO-8859-5", NULL };
 static PCHAR far RussList2[] = { "Windows", "KOI8-R", NULL };
 
+
+/*
+ * \x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x8A֘A\x82̐ݒ\xE8\x92\xE8\x8B`
+ */
+#define IDENDMARK 0xFFFF
+
+typedef struct id_str_pair {
+	WORD id;
+	char *str;
+} id_str_pair_t;
+
+static id_str_pair_t serial_conf_databit[] = {
+	{IdDataBit7, "7"},
+	{IdDataBit8, "8"},
+	{IDENDMARK, NULL},
+};
+
+static id_str_pair_t serial_conf_parity[] = {
+	{IdParityNone, "none"},
+	{IdParityOdd, "odd"},
+	{IdParityEven, "even"},
+	{IdParityMark, "mark"},
+	{IdParitySpace, "space"},
+	{IDENDMARK, NULL},
+};
+
+static id_str_pair_t serial_conf_stopbit[] = {
+	{IdStopBit1, "1"},
+	{IdStopBit15, "1.5"},
+	{IdStopBit2, "2"},
+	{IDENDMARK, NULL},
+};
+
+static id_str_pair_t serial_conf_flowctrl[] = {
+	{IdFlowX, "x"},
+	{IdFlowHard, "hard"},
+	{IdFlowHard, "rtscts"},
+	{IdFlowNone, "none"},
+	{IdFlowHardDsrDtr, "dsrdtr"},
+	{IDENDMARK, NULL},
+};
+
+
+/*
+ * \x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x8A֘A\x82̐ݒ\xE8
+ * Id\x82\xA9\x82當\x8E\x9A\x97\xF1\x82ɕϊ\xB7\x82\xB7\x82\xE9\x81B
+ *
+ * return
+ *    TRUE: \x95ϊ\xB7\x90\xAC\x8C\xF7
+ *    FALSE: \x95ϊ\xB7\x8E\xB8\x94s
+ */
+int PASCAL SerialPortConfconvertId2Str(enum serial_port_conf type, WORD id, PCHAR str, int strlen)
+{
+	id_str_pair_t *conf;
+	int ret = FALSE;
+	int i;
+
+	switch (type) {
+		case COM_DATABIT:
+			conf = serial_conf_databit;
+			break;
+		case COM_PARITY:
+			conf = serial_conf_parity;
+			break;
+		case COM_STOPBIT:
+			conf = serial_conf_stopbit;
+			break;
+		case COM_FLOWCTRL:
+			conf = serial_conf_flowctrl;
+			break;
+		default:
+			conf = NULL;
+			break;
+	}
+	if (conf == NULL)
+		goto error;
+
+	for (i = 0 ;  ; i++) {
+		if (conf[i].id == IDENDMARK)
+			goto error;
+		if (conf[i].id == id) {
+			strncpy_s(str, strlen, conf[i].str, _TRUNCATE);
+			break;
+		}
+	}
+
+	ret = TRUE;
+
+error:
+	return (ret);
+}
+
+/*
+ * \x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x8A֘A\x82̐ݒ\xE8
+ * \x95\xB6\x8E\x9A\x97񂩂\xE7Id\x82ɕϊ\xB7\x82\xB7\x82\xE9\x81B
+ *
+ * return
+ *    TRUE: \x95ϊ\xB7\x90\xAC\x8C\xF7
+ *    FALSE: \x95ϊ\xB7\x8E\xB8\x94s
+ */
+static int SerialPortConfconvertStr2Id(enum serial_port_conf type, PCHAR str, WORD *id)
+{
+	id_str_pair_t *conf;
+	int ret = FALSE;
+	int i;
+
+	switch (type) {
+		case COM_DATABIT:
+			conf = serial_conf_databit;
+			break;
+		case COM_PARITY:
+			conf = serial_conf_parity;
+			break;
+		case COM_STOPBIT:
+			conf = serial_conf_stopbit;
+			break;
+		case COM_FLOWCTRL:
+			conf = serial_conf_flowctrl;
+			break;
+		default:
+			conf = NULL;
+			break;
+	}
+	if (conf == NULL)
+		goto error;
+
+	for (i = 0 ;  ; i++) {
+		if (conf[i].id == IDENDMARK)
+			goto error;
+		if (_stricmp(conf[i].str, str) == 0) {
+			*id = conf[i].id;
+			break;
+		}
+	}
+
+	ret = TRUE;
+
+error:
+	return (ret);
+}
+
+
 WORD str2id(PCHAR far * List, PCHAR str, WORD DefId)
 {
 	WORD i;
@@ -1034,48 +1176,30 @@
 	/* Parity */
 	GetPrivateProfileString(Section, "Parity", "",
 	                        Temp, sizeof(Temp), FName);
-	if (_stricmp(Temp, "even") == 0)
-		ts->Parity = IdParityEven;
-	else if (_stricmp(Temp, "odd") == 0)
-		ts->Parity = IdParityOdd;
-	else if (_stricmp(Temp, "mark") == 0)
-		ts->Parity = IdParityMark;
-	else if (_stricmp(Temp, "space") == 0)
-		ts->Parity = IdParitySpace;
-	else
+	if (!SerialPortConfconvertStr2Id(COM_PARITY, Temp, &ts->Parity)) {
 		ts->Parity = IdParityNone;
+	}
 
 	/* Data bit */
 	GetPrivateProfileString(Section, "DataBit", "",
 	                        Temp, sizeof(Temp), FName);
-	if (_stricmp(Temp, "7") == 0)
-		ts->DataBit = IdDataBit7;
-	else
+	if (!SerialPortConfconvertStr2Id(COM_DATABIT, Temp, &ts->DataBit)) {
 		ts->DataBit = IdDataBit8;
+	}
 
 	/* Stop bit */
 	GetPrivateProfileString(Section, "StopBit", "",
 	                        Temp, sizeof(Temp), FName);
-	if (_stricmp(Temp, "2") == 0)
-		ts->StopBit = IdStopBit2;
-	else if (_stricmp(Temp, "1.5") == 0)
-		ts->StopBit = IdStopBit15;
-	else
+	if (!SerialPortConfconvertStr2Id(COM_STOPBIT, Temp, &ts->StopBit)) {
 		ts->StopBit = IdStopBit1;
+	}
 
 	/* Flow control */
 	GetPrivateProfileString(Section, "FlowCtrl", "",
 	                        Temp, sizeof(Temp), FName);
-	if (_stricmp(Temp, "x") == 0)
-		ts->Flow = IdFlowX;
-	else if (_stricmp(Temp, "hard") == 0)
-		ts->Flow = IdFlowHard;
-	else if (_stricmp(Temp, "rtscts") == 0)  // hard\x82\xC6rtscts\x82͓\xAF\x82\xB6\x88Ӗ\xA1
-		ts->Flow = IdFlowHard;
-	else if (_stricmp(Temp, "dsrdtr") == 0)
-		ts->Flow = IdFlowHardDsrDtr;
-	else
+	if (!SerialPortConfconvertStr2Id(COM_FLOWCTRL, Temp, &ts->Flow)) {
 		ts->Flow = IdFlowNone;
+	}
 
 	/* Delay per character */
 	ts->DelayPerChar =
@@ -2593,59 +2717,25 @@
 	WritePrivateProfileString(Section, "BaudRate", Temp, FName);
 
 	/* Parity */
-	switch (ts->Parity) {
-	case IdParityEven:
-		strncpy_s(Temp, sizeof(Temp), "even", _TRUNCATE);
-		break;
-	case IdParityOdd:
-		strncpy_s(Temp, sizeof(Temp), "odd", _TRUNCATE);
-		break;
-	case IdParityMark:
-		strncpy_s(Temp, sizeof(Temp), "mark", _TRUNCATE);
-		break;
-	case IdParitySpace:
-		strncpy_s(Temp, sizeof(Temp), "space", _TRUNCATE);
-		break;
-	default:
+	if (!SerialPortConfconvertId2Str(COM_PARITY, ts->Parity, Temp, sizeof(Temp))) {
 		strncpy_s(Temp, sizeof(Temp), "none", _TRUNCATE);
 	}
 	WritePrivateProfileString(Section, "Parity", Temp, FName);
 
 	/* Data bit */
-	if (ts->DataBit == IdDataBit7)
-		strncpy_s(Temp, sizeof(Temp), "7", _TRUNCATE);
-	else
+	if (!SerialPortConfconvertId2Str(COM_DATABIT, ts->DataBit, Temp, sizeof(Temp))) {
 		strncpy_s(Temp, sizeof(Temp), "8", _TRUNCATE);
-
+	}
 	WritePrivateProfileString(Section, "DataBit", Temp, FName);
 
 	/* Stop bit */
-	switch (ts->StopBit) {
-	case IdStopBit2:
-		strncpy_s(Temp, sizeof(Temp), "2", _TRUNCATE);
-		break;
-	case IdStopBit15:
-		strncpy_s(Temp, sizeof(Temp), "1.5", _TRUNCATE);
-		break;
-	default:
+	if (!SerialPortConfconvertId2Str(COM_STOPBIT, ts->StopBit, Temp, sizeof(Temp))) {
 		strncpy_s(Temp, sizeof(Temp), "1", _TRUNCATE);
-		break;
 	}
-
 	WritePrivateProfileString(Section, "StopBit", Temp, FName);
 
 	/* Flow control */
-	switch (ts->Flow) {
-	case IdFlowX:
-		strncpy_s(Temp, sizeof(Temp), "x", _TRUNCATE);
-		break;
-	case IdFlowHard:
-		strncpy_s(Temp, sizeof(Temp), "hard", _TRUNCATE);
-		break;
-	case IdFlowHardDsrDtr:
-		strncpy_s(Temp, sizeof(Temp), "dsrdtr", _TRUNCATE);
-		break;
-	default:
+	if (!SerialPortConfconvertId2Str(COM_FLOWCTRL, ts->Flow, Temp, sizeof(Temp))) {
 		strncpy_s(Temp, sizeof(Temp), "none", _TRUNCATE);
 	}
 	WritePrivateProfileString(Section, "FlowCtrl", Temp, FName);
@@ -4047,6 +4137,36 @@
 			if ((ParamCom < 1) || (ParamCom > ts->MaxComPort))
 				ParamCom = 0;
 		}
+		else if (_strnicmp(Temp, "/CDATABIT=", 10) == 0) {	/* COM data bit */
+			ParamPort = IdSerial;
+			SerialPortConfconvertStr2Id(COM_DATABIT, &Temp[10], &ts->DataBit);
+		}
+		else if (_strnicmp(Temp, "/CPARITY=", 9) == 0) {	/* COM Parity */
+			ParamPort = IdSerial;
+			SerialPortConfconvertStr2Id(COM_PARITY, &Temp[9], &ts->Parity);
+		}
+		else if (_strnicmp(Temp, "/CSTOPBIT=", 10) == 0) {	/* COM Stop bit */
+			ParamPort = IdSerial;
+			SerialPortConfconvertStr2Id(COM_STOPBIT, &Temp[10], &ts->StopBit);
+		}
+		else if (_strnicmp(Temp, "/CFLOWCTRL=", 11) == 0) {	/* COM Flow control */
+			ParamPort = IdSerial;
+			SerialPortConfconvertStr2Id(COM_FLOWCTRL, &Temp[11], &ts->Flow);
+		}
+		else if (_strnicmp(Temp, "/CDELAYPERCHAR=", 15) == 0) {	/* COM Transmit delay per character (in msec) */
+			WORD val = 0;
+
+			ParamPort = IdSerial;
+			val = atoi(&Temp[15]);
+			ts->DelayPerChar = val;
+		}
+		else if (_strnicmp(Temp, "/CDELAYPERLINE=", 15) == 0) {	/* COM Transmit delay per line (in msec) */
+			WORD val = 0;
+
+			ParamPort = IdSerial;
+			val = atoi(&Temp[15]);
+			ts->DelayPerLine = val;
+		}
 		else if (_stricmp(Temp, "/WAITCOM") == 0) {	/* wait COM arrival */
 			ts->WaitCom = 1;
 		}


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