[Ttssh2-commit] [6434] システム変数 params の追加

Back to archive index

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
   + *



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