Revision: 8204 https://osdn.net/projects/ttssh2/scm/svn/commits/8204 Author: yutakapon Date: 2019-09-20 22:47:26 +0900 (Fri, 20 Sep 2019) Log Message: ----------- コマンドラインオプション /CDATABIT=, /CPARITY=, /CSTOPBIT=, /CFLOWCTRL= の指定方法を teraterm.ini と合わせるようにした。 Modified Paths: -------------- branches/serial_port_improved/doc/en/html/commandline/teraterm.html branches/serial_port_improved/doc/ja/html/commandline/teraterm.html branches/serial_port_improved/teraterm/common/ttlib.h branches/serial_port_improved/teraterm/teraterm/ttsetup.h branches/serial_port_improved/teraterm/teraterm/vtwin.cpp branches/serial_port_improved/teraterm/ttpset/ttpset.def branches/serial_port_improved/teraterm/ttpset/ttset.c -------------- next part -------------- Modified: branches/serial_port_improved/doc/en/html/commandline/teraterm.html =================================================================== --- branches/serial_port_improved/doc/en/html/commandline/teraterm.html 2019-09-20 11:09:12 UTC (rev 8203) +++ branches/serial_port_improved/doc/en/html/commandline/teraterm.html 2019-09-20 13:47:26 UTC (rev 8204) @@ -79,8 +79,8 @@ <dt id="cdatabit">/CDATABIT=<value></dt> <dd>Data bit of serial port <ul> - <li><span class="syntax">/CDATABIT=1</span> 7bit</li> - <li><span class="syntax">/CDATABIT=2</span> 8bit</li> + <li><span class="syntax">/CDATABIT=7</span> 7bit</li> + <li><span class="syntax">/CDATABIT=8</span> 8bit</li> </ul> </dd> @@ -87,11 +87,11 @@ <dt id="cparity">/CPARITY=<value></dt> <dd>Parity of serial port <ul> - <li><span class="syntax">/CPARITY=1</span> none</li> - <li><span class="syntax">/CPARITY=2</span> odd</li> - <li><span class="syntax">/CPARITY=3</span> even</li> - <li><span class="syntax">/CPARITY=4</span> mark</li> - <li><span class="syntax">/CPARITY=5</span> space</li> + <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> @@ -99,8 +99,8 @@ <dd>Stop bit of serial port <ul> <li><span class="syntax">/CSTOPBIT=1</span> 1bit</li> - <li><span class="syntax">/CSTOPBIT=2</span> 1.5bit</li> - <li><span class="syntax">/CSTOPBIT=3</span> 2bit</li> + <li><span class="syntax">/CSTOPBIT=1.5</span> 1.5bit</li> + <li><span class="syntax">/CSTOPBIT=2</span> 2bit</li> </ul> </dd> @@ -107,10 +107,11 @@ <dt id="cflowctrl">/CFLOWCTRL=<value></dt> <dd>Flow control of serial port <ul> - <li><span class="syntax">/CFLOWCTRL=1</span> Xon/Xoff</li> - <li><span class="syntax">/CFLOWCTRL=2</span> RTS/CTS</li> - <li><span class="syntax">/CFLOWCTRL=3</span> none</li> - <li><span class="syntax">/CFLOWCTRL=4</span> DSR/DTR</li> + <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> Modified: branches/serial_port_improved/doc/ja/html/commandline/teraterm.html =================================================================== --- branches/serial_port_improved/doc/ja/html/commandline/teraterm.html 2019-09-20 11:09:12 UTC (rev 8203) +++ branches/serial_port_improved/doc/ja/html/commandline/teraterm.html 2019-09-20 13:47:26 UTC (rev 8204) @@ -83,8 +83,8 @@ <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=1</span> 7bit</li> - <li><span class="syntax">/CDATABIT=2</span> 8bit</li> + <li><span class="syntax">/CDATABIT=7</span> 7bit</li> + <li><span class="syntax">/CDATABIT=8</span> 8bit</li> </ul> </dd> @@ -91,11 +91,11 @@ <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=1</span> none</li> - <li><span class="syntax">/CPARITY=2</span> odd</li> - <li><span class="syntax">/CPARITY=3</span> even</li> - <li><span class="syntax">/CPARITY=4</span> mark</li> - <li><span class="syntax">/CPARITY=5</span> space</li> + <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> @@ -103,8 +103,8 @@ <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=2</span> 1.5bit</li> - <li><span class="syntax">/CSTOPBIT=3</span> 2bit</li> + <li><span class="syntax">/CSTOPBIT=1.5</span> 1.5bit</li> + <li><span class="syntax">/CSTOPBIT=2</span> 2bit</li> </ul> </dd> @@ -111,10 +111,11 @@ <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=1</span> Xon/Xoff</li> - <li><span class="syntax">/CFLOWCTRL=2</span> RTS/CTS</li> - <li><span class="syntax">/CFLOWCTRL=3</span> none</li> - <li><span class="syntax">/CFLOWCTRL=4</span> DSR/DTR</li> + <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> Modified: branches/serial_port_improved/teraterm/common/ttlib.h =================================================================== --- branches/serial_port_improved/teraterm/common/ttlib.h 2019-09-20 11:09:12 UTC (rev 8203) +++ branches/serial_port_improved/teraterm/common/ttlib.h 2019-09-20 13:47:26 UTC (rev 8204) @@ -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: branches/serial_port_improved/teraterm/teraterm/ttsetup.h =================================================================== --- branches/serial_port_improved/teraterm/teraterm/ttsetup.h 2019-09-20 11:09:12 UTC (rev 8203) +++ branches/serial_port_improved/teraterm/teraterm/ttsetup.h 2019-09-20 13:47:26 UTC (rev 8204) @@ -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: branches/serial_port_improved/teraterm/teraterm/vtwin.cpp =================================================================== --- branches/serial_port_improved/teraterm/teraterm/vtwin.cpp 2019-09-20 11:09:12 UTC (rev 8203) +++ branches/serial_port_improved/teraterm/teraterm/vtwin.cpp 2019-09-20 13:47:26 UTC (rev 8204) @@ -4672,6 +4672,7 @@ { BOOL Ok; char Command[MAXPATHLEN + HostNameMaxLength]; + char Temp[MAX_PATH], Str[MAX_PATH]; HelpId = HlpSetupSerialPort; if (! LoadTTDLG()) { @@ -4688,13 +4689,27 @@ * 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 /CDATABIT=%u /CPARITY=%u " - "/CSTOPBIT=%u /CFLOWCTRL=%u /CDELAYPERCHAR=%u /CDELAYPERLINE=%u", - ts.ComPort, ts.Baud, ts.DataBit, ts.Parity, - ts.StopBit, ts.Flow, ts.DelayPerChar, ts.DelayPerLine); + "ttermpro /C=%u /SPEED=%lu /CDELAYPERCHAR=%u /CDELAYPERLINE=%u ", + ts.ComPort, ts.Baud, ts.DelayPerChar, ts.DelayPerLine); + 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: branches/serial_port_improved/teraterm/ttpset/ttpset.def =================================================================== --- branches/serial_port_improved/teraterm/ttpset/ttpset.def 2019-09-20 11:09:12 UTC (rev 8203) +++ branches/serial_port_improved/teraterm/ttpset/ttpset.def 2019-09-20 13:47:26 UTC (rev 8204) @@ -7,3 +7,4 @@ ParseParam @6 CopySerialList @7 AddValueToList @8 + SerialPortConfconvertId2Str @9 Modified: branches/serial_port_improved/teraterm/ttpset/ttset.c =================================================================== --- branches/serial_port_improved/teraterm/ttpset/ttset.c 2019-09-20 11:09:12 UTC (rev 8203) +++ branches/serial_port_improved/teraterm/ttpset/ttset.c 2019-09-20 13:47:26 UTC (rev 8204) @@ -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); @@ -4048,48 +4138,20 @@ ParamCom = 0; } else if (_strnicmp(Temp, "/CDATABIT=", 10) == 0) { /* COM data bit */ - WORD val = 0; - ParamPort = IdSerial; - val = atoi(&Temp[10]); - if (val == IdDataBit7 || - val == IdDataBit8 - ) { - ts->DataBit = val; - } + SerialPortConfconvertStr2Id(COM_DATABIT, &Temp[10], &ts->DataBit); } else if (_strnicmp(Temp, "/CPARITY=", 9) == 0) { /* COM Parity */ - WORD val = 0; - ParamPort = IdSerial; - val = atoi(&Temp[9]); - if (val >= IdParityNone && - val <= IdParitySpace - ) { - ts->Parity = val; - } + SerialPortConfconvertStr2Id(COM_PARITY, &Temp[9], &ts->Parity); } else if (_strnicmp(Temp, "/CSTOPBIT=", 10) == 0) { /* COM Stop bit */ - WORD val = 0; - ParamPort = IdSerial; - val = atoi(&Temp[10]); - if (val >= IdStopBit1 && - val <= IdStopBit2 - ) { - ts->StopBit = val; - } + SerialPortConfconvertStr2Id(COM_STOPBIT, &Temp[10], &ts->StopBit); } else if (_strnicmp(Temp, "/CFLOWCTRL=", 11) == 0) { /* COM Flow control */ - WORD val = 0; - ParamPort = IdSerial; - val = atoi(&Temp[11]); - if (val >= IdFlowX && - val <= IdFlowHardDsrDtr - ) { - ts->Flow = val; - } + SerialPortConfconvertStr2Id(COM_FLOWCTRL, &Temp[11], &ts->Flow); } else if (_strnicmp(Temp, "/CDELAYPERCHAR=", 15) == 0) { /* COM Transmit delay per character (in msec) */ WORD val = 0;