[6/6] cmd: Add support for GTR comparison operator in if statements (try 2)

Frédéric Delanoy frederic.delanoy at gmail.com
Sun Oct 16 17:03:14 CDT 2011


---
 programs/cmd/builtins.c                  |   10 ++++++++++
 programs/cmd/tests/test_builtins.cmd     |   12 ++++++++++++
 programs/cmd/tests/test_builtins.cmd.exp |   16 ++++++++++++++++
 programs/cmd/wcmd.h                      |    3 ++-
 4 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 383208f..71622f2 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1487,6 +1487,7 @@ static CMD_IF_OPERATOR *match_if_operator(const WCHAR *operator)
     static const WCHAR equW[] = {'e','q','u','\0'};
     static const WCHAR neqW[] = {'n','e','q','\0'};
     static const WCHAR geqW[] = {'g','e','q','\0'};
+    static const WCHAR gtrW[] = {'g','t','r','\0'};
     CMD_IF_OPERATOR *result = NULL;
 
     if (!operator) return NULL;
@@ -1503,6 +1504,8 @@ static CMD_IF_OPERATOR *match_if_operator(const WCHAR *operator)
         *result = CMD_IF_NEQ;
     else if (!lstrcmpiW(operator, geqW))
         *result = CMD_IF_GEQ;
+    else if (!lstrcmpiW(operator, gtrW))
+        *result = CMD_IF_GTR;
     else {
         HeapFree(GetProcessHeap(), 0, result);
         result = NULL;
@@ -1641,6 +1644,13 @@ void WCMD_if (WCHAR *p, CMD_LIST **cmdList)
           test = caseInsensitive ? (lstrcmpiW(leftOperand, rightOperand) >= 0)
                                  : (lstrcmpW (leftOperand, rightOperand) >= 0);
         break;
+      case CMD_IF_GTR:
+        if (int_operands)
+          test = (leftOperand_int > rightOperand_int);
+        else
+          test = caseInsensitive ? (lstrcmpiW(leftOperand, rightOperand) > 0)
+                                 : (lstrcmpW (leftOperand, rightOperand) > 0);
+        break;
     }
 
     HeapFree(GetProcessHeap(), 0, leftOperand);
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 04facb6..d5cdb46 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -647,6 +647,11 @@ for %%i in (%STR_PARMS%) do call :GEQtest %%i B
 for %%i in (%STR_PARMS%) do call :GEQtest %%i AB
 for %%i in (%STR_PARMS%) do call :GEQtest %%i BA
 for %%i in (%STR_PARMS%) do call :GEQtest %%i AA
+for %%i in (%STR_PARMS%) do call :GTRtest %%i A
+for %%i in (%STR_PARMS%) do call :GTRtest %%i B
+for %%i in (%STR_PARMS%) do call :GTRtest %%i AB
+for %%i in (%STR_PARMS%) do call :GTRtest %%i BA
+for %%i in (%STR_PARMS%) do call :GTRtest %%i AA
 echo ...... for numbers ......
 if -1 LSS 1 (echo negative numbers handled)
 if not -1 LSS -10 (echo negative numbers handled)
@@ -680,6 +685,10 @@ for %%i in (%INT_PARMS%) do call :GEQtest %%i 0
 for %%i in (%INT_PARMS%) do call :GEQtest %%i 1
 for %%i in (%INT_PARMS%) do call :GEQtest %%i 10
 for %%i in (%INT_PARMS%) do call :GEQtest %%i 9
+for %%i in (%INT_PARMS%) do call :GTRtest %%i 0
+for %%i in (%INT_PARMS%) do call :GTRtest %%i 1
+for %%i in (%INT_PARMS%) do call :GTRtest %%i 10
+for %%i in (%INT_PARMS%) do call :GTRtest %%i 9
 goto :endIfCompOpsSubroutines
 
 rem IF subroutines helpers
@@ -698,6 +707,9 @@ goto :eof
 :GEQtest
 if %1 GEQ %2 echo %1 GEQ %2
 goto :eof
+:GTRtest
+if %1 GTR %2 echo %1 GTR %2
+goto :eof
 
 :endIfCompOpsSubroutines
 set STR_PARMS=
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index 5685d67..2b7eb05 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -484,6 +484,16 @@ B GEQ AA
 AB GEQ AA
 BA GEQ AA
 AA GEQ AA
+B GTR A
+AB GTR A
+BA GTR A
+AA GTR A
+BA GTR B
+B GTR AB
+BA GTR AB
+B GTR AA
+AB GTR AA
+BA GTR AA
 ...... for numbers ......
 negative numbers handled
 negative numbers handled
@@ -538,6 +548,12 @@ string/hexa compare ok
 10 GEQ 10
 10 GEQ 9
 9 GEQ 9
+1 GTR 0
+10 GTR 0
+9 GTR 0
+10 GTR 1
+9 GTR 1
+10 GTR 9
 -----------Testing for -----------
 ...plain FOR
 A
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h
index 46df811..bc7f16a 100644
--- a/programs/cmd/wcmd.h
+++ b/programs/cmd/wcmd.h
@@ -57,7 +57,8 @@ typedef enum _CMD_IF_OPERATOR {
     CMD_IF_LEQ, /* <= */
     CMD_IF_EQU, /* == */
     CMD_IF_NEQ, /* != */
-    CMD_IF_GEQ  /* >= */
+    CMD_IF_GEQ, /* >= */
+    CMD_IF_GTR  /* >  */
 } CMD_IF_OPERATOR;
 
 void WCMD_assoc (const WCHAR *, BOOL);
-- 
1.7.7




More information about the wine-patches mailing list