svnno****@sourc*****
svnno****@sourc*****
2016年 7月 7日 (木) 20:46:02 JST
Revision: 6434 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6434 Author: doda Date: 2016-07-07 20:46:02 +0900 (Thu, 07 Jul 2016) Log Message: ----------- システム変数 params の追加 今までの param1 ~ param9 を配列にした物 [Ttssh2-devel 3025] ・現在の param1 ~ param9 とは別に配列 params にもパラメータを格納する ・param1 ~ param9 と params の値は同期等しない。 param1 を書き換えても params[1] は変化しない。逆も同様。 ・params の最大値には制限をかけない。10 番目以降にもアクセス可能とする。 [とりあえず現在の仕様] ・param1 ~ param9 は params[1] ~ params[9] としてアクセス可能。 ・params[0] にはとりあえずコマンドライン全体を入れておく (awkの$0風) ・パラメータが 10 以上有る場合は paramcnt も 10 以上の値を取る 以前の仕様(paramcntの最大値は9)と非互換 ・パラメータの数が少なくても param1 ~ param9 は常に確保されているが、 params は paramcnt の値までしか確保されない。 ⇒ paramcnt==3 の時に params[4] へのアクセスは Index out of range Modified Paths: -------------- trunk/teraterm/ttpmacro/ttl.c trunk/teraterm/ttpmacro/ttmdlg.cpp trunk/teraterm/ttpmacro/ttmdlg.h trunk/teraterm/ttpmacro/ttmparse.c trunk/teraterm/ttpmacro/ttmparse.h Added Paths: ----------- trunk/tests/params_array.bat trunk/tests/params_array.ttl -------------- next part -------------- Modified: trunk/teraterm/ttpmacro/ttl.c =================================================================== --- trunk/teraterm/ttpmacro/ttl.c 2016-07-07 11:45:59 UTC (rev 6433) +++ trunk/teraterm/ttpmacro/ttl.c 2016-07-07 11:46:02 UTC (rev 6434) @@ -76,6 +76,9 @@ { int i; TStrVal Dir; + TVarId ParamsVarId, id; + char tmpname[10]; + WORD Err; HMainWin = HWin; @@ -98,17 +101,40 @@ NewStrVar("groupmatchstr8",""); // for 'waitregex' command (2005.10.15 yutaka) NewStrVar("groupmatchstr9",""); // for 'waitregex' command (2005.10.15 yutaka) - NewStrVar("param1",ShortName); // \x83}\x83N\x83\x8D\x83t\x83@\x83C\x83\x8B\x96\xBC (2012.4.14 yutaka) - NewStrVar("param2",Param2); - NewStrVar("param3",Param3); - NewStrVar("param4",Param4); - NewStrVar("param5",Param5); - NewStrVar("param6",Param6); - NewStrVar("param7",Param7); - NewStrVar("param8",Param8); - NewStrVar("param9",Param9); NewIntVar("paramcnt",ParamCnt); // \x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xE0\x8A܂ވ\xF8\x90\x94\x82̌\x94 (2012.4.10 yutaka) + // \x8B\x8C\x8C`\x8E\xAE\x82̃p\x83\x89\x83\x81\x81[\x83^\x90ݒ\xE8 (param1 \x81` param9) + NewStrVar("param1", ShortName); + if (Params) { + for (i=2; i<=9; i++) { + _snprintf_s(tmpname, sizeof(tmpname), _TRUNCATE, "param%d", i); + if (ParamCnt >= i && Params[i] != NULL) { + NewStrVar(tmpname, Params[i]); + } + else { + NewStrVar(tmpname, ""); + } + } + } + + // \x90V\x8C`\x8E\xAE\x82̃p\x83\x89\x83\x81\x81[\x83^\x90ݒ\xE8 (params[1\x81`ParamCnt]) + if (NewStrAryVar("params", ParamCnt+1) == 0) { + Err = 0; + GetStrAryVarByName(&ParamsVarId, "params", &Err); + if (Err == 0 && Params) { + for (i=0; i<=ParamCnt; i++) { + if (Params[i]) { + Err = 0; + id = GetStrVarFromArray(ParamsVarId, i, &Err); + SetStrVal(id, Params[i]); + free(Params[i]); + } + } + free(Params); + Params = NULL; + } + } + ParseAgain = FALSE; IfNest = 0; ElseFlag = 0; Modified: trunk/teraterm/ttpmacro/ttmdlg.cpp =================================================================== --- trunk/teraterm/ttpmacro/ttmdlg.cpp 2016-07-07 11:45:59 UTC (rev 6433) +++ trunk/teraterm/ttpmacro/ttmdlg.cpp 2016-07-07 11:46:02 UTC (rev 6434) @@ -24,16 +24,10 @@ char FileName[MAX_PATH]; char TopicName[11]; char ShortName[MAX_PATH]; -char Param2[MaxStrLen]; -char Param3[MaxStrLen]; -char Param4[MaxStrLen]; -char Param5[MaxStrLen]; -char Param6[MaxStrLen]; -char Param7[MaxStrLen]; -char Param8[MaxStrLen]; -char Param9[MaxStrLen]; +char **Params = NULL; +int ParamCnt; +int ParamsSize; BOOL SleepFlag; -int ParamCnt; /* \x88\xF8\x90\x94\x82̌\x94 */ } static int DlgPosX = -10000; @@ -45,7 +39,7 @@ void ParseParam(PBOOL IOption, PBOOL VOption) { int dirlen, fnpos; - char *Param; + char *Param, **ptmp; char Temp[MaxStrLen]; PCHAR start, cur, next; @@ -59,19 +53,18 @@ // Get command line parameters FileName[0] = 0; TopicName[0] = 0; - Param2[0] = 0; - Param3[0] = 0; - Param4[0] = 0; - Param5[0] = 0; - Param6[0] = 0; - Param7[0] = 0; - Param8[0] = 0; - Param9[0] = 0; SleepFlag = FALSE; *IOption = FALSE; *VOption = FALSE; Param = GetCommandLine(); + ParamsSize = 50; + Params = (char **)malloc(sizeof(char*) * ParamsSize); + if (Params) { + Params[0] = _strdup(Param); + Params[1] = NULL; + } + // the first term shuld be executable filename of TTMACRO start = GetParam(Temp, sizeof(Temp), Param); ParamCnt = 0; @@ -97,24 +90,26 @@ } } - switch (++ParamCnt) { - case 1: strncpy_s(FileName, sizeof(FileName), Temp, _TRUNCATE); break; - case 2: strncpy_s(Param2, sizeof(Param2), Temp, _TRUNCATE); break; - case 3: strncpy_s(Param3, sizeof(Param3), Temp, _TRUNCATE); break; - case 4: strncpy_s(Param4, sizeof(Param4), Temp, _TRUNCATE); break; - case 5: strncpy_s(Param5, sizeof(Param5), Temp, _TRUNCATE); break; - case 6: strncpy_s(Param6, sizeof(Param6), Temp, _TRUNCATE); break; - case 7: strncpy_s(Param7, sizeof(Param7), Temp, _TRUNCATE); break; - case 8: strncpy_s(Param8, sizeof(Param8), Temp, _TRUNCATE); break; - case 9: strncpy_s(Param9, sizeof(Param9), Temp, _TRUNCATE); break; - default: ;/* nothing to do */ + if (++ParamCnt == 1) { + strncpy_s(FileName, sizeof(FileName), Temp, _TRUNCATE); + if (Params == NULL) { + break; + } } + else { + if (ParamsSize <= ParamCnt) { + ParamsSize += 10; + ptmp = (char **)realloc(Params, sizeof(char*) * ParamsSize); + if (ptmp == NULL) { + ParamCnt--; + break; + } + Params = ptmp; + } + Params[ParamCnt] = _strdup(Temp); + } } - if (ParamCnt > 9) { - ParamCnt = 9; - } - if (FileName[0]=='*') { FileName[0] = 0; } @@ -127,6 +122,10 @@ AppendSlash(FileName, sizeof(FileName)); strncat_s(FileName, sizeof(FileName), ShortName, _TRUNCATE); } + + if (Params) { + Params[1] = _strdup(ShortName); + } } else { FileName[0] = 0; Modified: trunk/teraterm/ttpmacro/ttmdlg.h =================================================================== --- trunk/teraterm/ttpmacro/ttmdlg.h 2016-07-07 11:45:59 UTC (rev 6433) +++ trunk/teraterm/ttpmacro/ttmdlg.h 2016-07-07 11:46:02 UTC (rev 6434) @@ -29,16 +29,9 @@ extern char FileName[MAX_PATH]; extern char TopicName[11]; extern char ShortName[MAX_PATH]; -extern char Param2[MaxStrLen]; -extern char Param3[MaxStrLen]; -extern char Param4[MaxStrLen]; -extern char Param5[MaxStrLen]; -extern char Param6[MaxStrLen]; -extern char Param7[MaxStrLen]; -extern char Param8[MaxStrLen]; -extern char Param9[MaxStrLen]; -extern BOOL SleepFlag; +extern char **Params; extern int ParamCnt; +extern BOOL SleepFlag; #ifdef __cplusplus } Modified: trunk/teraterm/ttpmacro/ttmparse.c =================================================================== --- trunk/teraterm/ttpmacro/ttmparse.c 2016-07-07 11:45:59 UTC (rev 6433) +++ trunk/teraterm/ttpmacro/ttmparse.c 2016-07-07 11:46:02 UTC (rev 6434) @@ -1859,46 +1859,32 @@ return ((VarId+1) << 16) | Index; } -void GetIntAryVar(PVarId VarId, LPWORD Err) +void GetAryVar(PVarId VarId, WORD VarType, LPWORD Err) { TName Name; - WORD VarType; if (*Err!=0) return; if (GetIdentifier(Name)) { - if (CheckVar(Name, &VarType, VarId)) { - if (VarType != TypIntArray) { - *Err = ErrTypeMismatch; - } - } - else { - *Err = ErrTypeMismatch; - } + GetAryVarByName(VarId, Name, VarType, Err); } - else + else { *Err = ErrSyntax; + } } -void GetStrAryVar(PVarId VarId, LPWORD Err) +void GetAryVarByName(PVarId VarId, PCHAR Name, WORD VarType, LPWORD Err) { - TName Name; - WORD VarType; + WORD typ; - if (*Err!=0) return; - - if (GetIdentifier(Name)) { - if (CheckVar(Name, &VarType, VarId)) { - if (VarType != TypStrArray) { - *Err = ErrTypeMismatch; - } - } - else { + if (CheckVar(Name, &typ, VarId)) { + if (typ != VarType) { *Err = ErrTypeMismatch; } } - else - *Err = ErrSyntax; + else { + *Err = ErrVarNotInit; + } } int GetIntAryVarSize(TVarId VarId) Modified: trunk/teraterm/ttpmacro/ttmparse.h =================================================================== --- trunk/teraterm/ttpmacro/ttmparse.h 2016-07-07 11:45:59 UTC (rev 6433) +++ trunk/teraterm/ttpmacro/ttmparse.h 2016-07-07 11:46:02 UTC (rev 6434) @@ -324,8 +324,8 @@ TVarId GetIntVarFromArray(TVarId VarId, int Index, LPWORD Err); TVarId GetStrVarFromArray(TVarId VarId, int Index, LPWORD Err); BOOL GetIndex(int *Index, LPWORD Err); -void GetIntAryVar(PVarId VarId, LPWORD Err); -void GetStrAryVar(PVarId VarId, LPWORD Err); +void GetAryVar(PVarId VarId, WORD VarType, LPWORD Err); +void GetAryVarByName(PVarId VarId, PCHAR Name, WORD VarType, LPWORD Err); int GetIntAryVarSize(TVarId VarId); int GetStrAryVarSize(TVarId VarId); @@ -338,3 +338,8 @@ #ifdef __cplusplus } #endif + +#define GetIntAryVar(VarId, Err) GetAryVar(VarId, TypIntArray, Err) +#define GetStrAryVar(VarId, Err) GetAryVar(VarId, TypStrArray, Err) +#define GetIntAryVarByName(VarId, Name, Err) GetAryVarByName(VarId, Name, TypIntArray, Err) +#define GetStrAryVarByName(VarId, Name, Err) GetAryVarByName(VarId, Name, TypStrArray, Err) Added: trunk/tests/params_array.bat =================================================================== --- trunk/tests/params_array.bat (rev 0) +++ trunk/tests/params_array.bat 2016-07-07 11:46:02 UTC (rev 6434) @@ -0,0 +1,10 @@ + @ echo off + +set TTMACRO=%~dp0\..\teraterm\Debug\ttpmacro.exe +set MACROFILE=%~dpn0.ttl + +echo == test 1 == +"%TTMACRO%" "%MACROFILE%" /vxx /ixx /V /i test1 "param 7" "" param9 10 eleven +if ERRORLEVEL 1 echo test 1 failed. + +pause Property changes on: trunk/tests/params_array.bat ___________________________________________________________________ Added: svn:executable + * Added: trunk/tests/params_array.ttl =================================================================== --- trunk/tests/params_array.ttl (rev 0) +++ trunk/tests/params_array.ttl 2016-07-07 11:46:02 UTC (rev 6434) @@ -0,0 +1,94 @@ +if paramcnt <= 1 goto error + +testlabel = "testnotfound" + +; param1\x81`9 \x82\xC6 params[] \x82\xAA\x93\xAF\x82\xB6\x82ł\xA0\x82鎖\x82̊m\x94F +for i 1 paramcnt + if i <= 9 then + sprintf2 cmd "paramval = param%d" i + execcmnd cmd + strcompare params[i] paramval + if result <> 0 then + sprintf2 msg "params[%d] \x82\xC6 param%d \x82̒l\x82\xAA\x88Ⴂ\x82܂\xB7" i i + sprintf2 tmp #10"params[%d]: '%s'" i params[i] + strconcat msg tmp + sprintf2 tmp #10"param%d: '%s'" i paramval + strconcat msg tmp + messagebox msg "\x83G\x83\x89\x81[" + endif + endif +next + +; \x83e\x83X\x83g\x94ԍ\x86\x82̌\x9F\x8Fo +for i 2 paramcnt + strmatch params[i] "^test[0-9]+$" + if result then + testlabel = matchstr + break + endif +next + +; \x83e\x83X\x83g\x82̑\xB6\x8D݊m\x94F +sprintf2 cmd 'ifdefined %s' testlabel +execcmnd cmd +if result = 4 then + sprintf2 cmd 'goto %s' testlabel + execcmnd cmd +endif + +; \x83e\x83X\x83g\x82\xAA\x96\xA2\x8E\xC0\x91\x95 +sprintf2 msg "%s: \x96\xA2\x8E\xC0\x91\x95\x82̃e\x83X\x83g\x82ł\xB7" testlabel +messagebox msg "\x83G\x83\x89\x81[" +goto error + +; \x83e\x83X\x83g\x94ԍ\x86\x82\xAA\x8C\x9F\x8Fo\x82ł\xAB\x82Ȃ\xA2\x8Fꍇ +:testnotfound +messagebox "\x83e\x83X\x83g\x94ԍ\x86\x82̎w\x92肪\x82\xA0\x82\xE8\x82܂\xB9\x82\xF1" "\x83G\x83\x89\x81[" +goto error + +:test1 +; ttpmacro.exe macrofile /vxx /ixx /V /i test1 +; ttpmacro.exe macrofile /vxx /ixx /V /i test1 "param 7" "" param9 10 eleven +; +; \x88ȉ\xBA\x82̂悤\x82ɉ\xF0\x8E߂\xB7\x82鎖\x82ɂ\xB7\x82\xE9 +; paramcnt: 11 +; params[2]: /vxx +; params[3]: /ixx +; params[4]: /V +; params[5]: /i +; params[6]: test1 +; params[7]: param 7 +; params[8]: \x8B\x9A\x97\xF1 +; params[9]: param9 +; params[10]: 10 +; params[11]: eleven +; +if paramcnt <> 11 goto error +strcompare params[2] "/vxx" +if result <> 0 goto error +strcompare params[3] "/ixx" +if result <> 0 goto error +strcompare params[4] "/V" +if result <> 0 goto error +strcompare params[5] "/i" +if result <> 0 goto error +strcompare params[6] "test1" +if result <> 0 goto error +strcompare params[7] "param 7" +if result <> 0 goto error +strcompare params[8] "" +if result <> 0 goto error +strcompare params[9] "param9" +if result <> 0 goto error +strcompare params[10] "10" +if result <> 0 goto error +strcompare params[11] "eleven" +if result <> 0 goto error + +goto end + +:error +setexitcode 1 + +:end +end Property changes on: trunk/tests/params_array.ttl ___________________________________________________________________ Added: svn:executable + *