[5/7] cmd: Add support for GEQ comparison operator in if statements

Frédéric Delanoy frederic.delanoy at gmail.com
Thu Sep 1 06:02:23 CDT 2011


---
 programs/cmd/builtins.c                  |   16 ++++++++++++++++
 programs/cmd/tests/test_builtins.cmd     |   12 ++++++++++++
 programs/cmd/tests/test_builtins.cmd.exp |   25 +++++++++++++++++++++++++
 3 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 504d013..e490711 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1489,6 +1489,7 @@ void WCMD_if (WCHAR *p, CMD_LIST **cmdList) {
   static const WCHAR leqW[]    = {'l','e','q','\0'};
   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 zeroW[]   = {'0','\0'};
   static const WCHAR parmI[]   = {'/','I','\0'};
 
@@ -1587,6 +1588,21 @@ void WCMD_if (WCHAR *p, CMD_LIST **cmdList) {
     }
     WCMD_parameter (s, 1, &command);
   }
+  else if ((s = StrStrIW (p, geqW))) {
+    s += 3;
+    a = StrToIntW(condition);
+    b = StrToIntW(WCMD_parameter (s, 0, NULL));
+    if ((a != 0 || lstrcmpW(condition, zeroW) == 0) && (b != 0 || lstrcmpW(WCMD_parameter (s, 0, NULL), zeroW) == 0)) {
+        if (a >= b) test = 1;
+    }
+    else if (strstrW (quals, parmI) == NULL) {
+        if (lstrcmpW (condition, WCMD_parameter (s, 0, NULL)) >= 0) test = 1;
+    }
+    else {
+        if (lstrcmpiW (condition, WCMD_parameter (s, 0, NULL)) >= 0) test = 1;
+    }
+    WCMD_parameter (s, 1, &command);
+  }
   else {
     WCMD_output (WCMD_LoadMessage(WCMD_SYNTAXERR));
     return;
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 5c4d6ed..7170e37 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -624,6 +624,11 @@ for %%i in (%STR_PARMS%) do call :NEQtest %%i B
 for %%i in (%STR_PARMS%) do call :NEQtest %%i AB
 for %%i in (%STR_PARMS%) do call :NEQtest %%i BA
 for %%i in (%STR_PARMS%) do call :NEQtest %%i AA
+for %%i in (%STR_PARMS%) do call :GEQtest %%i A
+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
 echo ... comparison operators for numbers
 set INT_PARMS=0 1 10 9
 for %%i in (%INT_PARMS%) do call :LSStest %%i 0
@@ -642,6 +647,10 @@ for %%i in (%INT_PARMS%) do call :NEQtest %%i 0
 for %%i in (%INT_PARMS%) do call :NEQtest %%i 1
 for %%i in (%INT_PARMS%) do call :NEQtest %%i 10
 for %%i in (%INT_PARMS%) do call :NEQtest %%i 9
+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
 goto :endIfCompOpsSubroutines
 
 rem IF subroutines helpers
@@ -657,6 +666,9 @@ goto :eof
 :NEQtest
 if %1 NEQ %2 echo %1 NEQ %2
 goto :eof
+:GEQtest
+if %1 GEQ %2 echo %1 GEQ %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 cb637d5..eda4aaa 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -457,6 +457,21 @@ A NEQ AA
 B NEQ AA
 AB NEQ AA
 BA NEQ AA
+A GEQ A
+B GEQ A
+AB GEQ A
+BA GEQ A
+AA GEQ A
+B GEQ B
+BA GEQ B
+B GEQ AB
+AB GEQ AB
+BA GEQ AB
+BA GEQ BA
+B GEQ AA
+AB GEQ AA
+BA GEQ AA
+AA GEQ AA
 ... comparison operators for numbers
 0 LSS 1
 0 LSS 10
@@ -490,6 +505,16 @@ BA NEQ AA
 0 NEQ 9
 1 NEQ 9
 10 NEQ 9
+0 GEQ 0
+1 GEQ 0
+10 GEQ 0
+9 GEQ 0
+1 GEQ 1
+10 GEQ 1
+9 GEQ 1
+10 GEQ 10
+10 GEQ 9
+9 GEQ 9
 -----------Testing for -----------
 ...plain FOR
 A
-- 
1.7.6




More information about the wine-patches mailing list