[2/7] cmd: Add support for LEQ comparison operator in if statements

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


---
 programs/cmd/builtins.c                  |   16 +++++++++++++++
 programs/cmd/tests/test_builtins.cmd     |   20 +++++++++++++++++++
 programs/cmd/tests/test_builtins.cmd.exp |   31 ++++++++++++++++++++++++++++++
 3 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index e338812..edd99ea 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1486,6 +1486,7 @@ void WCMD_if (WCHAR *p, CMD_LIST **cmdList) {
   static const WCHAR defdW[]   = {'d','e','f','i','n','e','d','\0'};
   static const WCHAR eqeqW[]   = {'=','=','\0'};
   static const WCHAR lssW[]    = {'l','s','s','\0'};
+  static const WCHAR leqW[]    = {'l','e','q','\0'};
   static const WCHAR zeroW[]   = {'0','\0'};
   static const WCHAR parmI[]   = {'/','I','\0'};
 
@@ -1539,6 +1540,21 @@ void WCMD_if (WCHAR *p, CMD_LIST **cmdList) {
     }
     WCMD_parameter (s, 1, &command);
   }
+  else if ((s = StrStrIW (p, leqW))) {
+    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 eae4fbe..9833eeb 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -601,18 +601,38 @@ if a LSS B (echo a LSS B) else echo NT4
 if /I a LSS B echo a LSS B insensitive
 if A LSS b echo A LSS b
 if /I A LSS b echo A LSS b insensitive
+for %%i in (%STR_PARMS%) do call :LEQtest %%i A
+for %%i in (%STR_PARMS%) do call :LEQtest %%i B
+for %%i in (%STR_PARMS%) do call :LEQtest %%i AB
+for %%i in (%STR_PARMS%) do call :LEQtest %%i BA
+for %%i in (%STR_PARMS%) do call :LEQtest %%i AA
+if b LEQ B (echo b LEQ B) else echo NT4
+if /I b LEQ B echo b LEQ B insensitive
+if b LEQ A echo b LEQ A
+if /I b LEQ A echo b LEQ A insensitive
+if a LEQ B (echo a LEQ B) else echo NT4
+if /I a LEQ B echo a LEQ B insensitive
+if A LEQ b echo A LEQ b
+if /I A LEQ b echo A LEQ b insensitive
 echo ... comparison operators for numbers
 set INT_PARMS=0 1 10 9
 for %%i in (%INT_PARMS%) do call :LSStest %%i 0
 for %%i in (%INT_PARMS%) do call :LSStest %%i 1
 for %%i in (%INT_PARMS%) do call :LSStest %%i 10
 for %%i in (%INT_PARMS%) do call :LSStest %%i 9
+for %%i in (%INT_PARMS%) do call :LEQtest %%i 0
+for %%i in (%INT_PARMS%) do call :LEQtest %%i 1
+for %%i in (%INT_PARMS%) do call :LEQtest %%i 10
+for %%i in (%INT_PARMS%) do call :LEQtest %%i 9
 goto :endIfCompOpsSubroutines
 
 rem IF subroutines helpers
 :LSStest
 if %1 LSS %2 echo %1 LSS %2
 goto :eof
+:LEQtest
+if %1 LEQ %2 echo %1 LEQ %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 28782c5..315daf1 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -411,6 +411,27 @@ a LSS B at or_broken@NT4
 a LSS B insensitive
 A LSS b
 A LSS b insensitive
+A LEQ A
+A LEQ B
+B LEQ B
+AB LEQ B
+AA LEQ B
+A LEQ AB
+AB LEQ AB
+AA LEQ AB
+A LEQ BA
+B LEQ BA
+AB LEQ BA
+BA LEQ BA
+AA LEQ BA
+A LEQ AA
+AA LEQ AA
+b LEQ B at or_broken@NT4
+b LEQ B insensitive
+a LEQ B at or_broken@NT4
+a LEQ B insensitive
+A LEQ b
+A LEQ b insensitive
 ... comparison operators for numbers
 0 LSS 1
 0 LSS 10
@@ -418,6 +439,16 @@ A LSS b insensitive
 9 LSS 10
 0 LSS 9
 1 LSS 9
+0 LEQ 0
+0 LEQ 1
+1 LEQ 1
+0 LEQ 10
+1 LEQ 10
+10 LEQ 10
+9 LEQ 10
+0 LEQ 9
+1 LEQ 9
+9 LEQ 9
 -----------Testing for -----------
 ...plain FOR
 A
-- 
1.7.6




More information about the wine-patches mailing list