[10/16] CMD.exe: Add support for env vars DATE, TIME, CD

Ann & Jason Edmeades us at edmeades.me.uk
Mon Feb 19 18:41:28 CST 2007


Note only added within batch parsing, not command line parsing as realized
this needs some work to unify
-------------- next part --------------
>From nobody Mon Sep 17 00:00:00 2001
From: Jason Edmeades <us at edmeades.me.uk>
Date: Sun Feb 18 18:41:58 2007 +0000
Subject: [PATCH] Add support for DATE, TIME, CD and ERRORLEVEL env vars

Note: Support is for batch only, not on cmd.exe command line,
as some reorganization is required to achieve this. They
also allow existing environment variables to override them.

---

 programs/cmd/batch.c |   55 +++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 47 insertions(+), 8 deletions(-)

5c2f3df5dff4693186d7b37db1aa313991918745
diff --git a/programs/cmd/batch.c b/programs/cmd/batch.c
index 47bb9db..cdc0e63 100755
--- a/programs/cmd/batch.c
+++ b/programs/cmd/batch.c
@@ -168,14 +168,6 @@ int i;
     if (*(p+1) == '~') {
       WCMD_HandleTildaModifiers(&p, NULL);
       p++;
-    } else if (CompareString (LOCALE_USER_DEFAULT, 
-                              NORM_IGNORECASE | SORT_STRINGSORT,
-      	                      (p+1), 11, "ERRORLEVEL%", -1) == 2) {
-      char output[10];
-      sprintf(output, "%d", errorlevel);
-      s = strdup (p+12);
-      strcpy (p, output);
-      strcat (p, s);
     } else if ((i >= 0) && (i <= 9)) {
       s = strdup (p+2);
       t = WCMD_parameter (context -> command, i + context -> shift_count, NULL);
@@ -190,6 +182,53 @@ int i;
       else *p = 0x00;
       strcat (p, s);
       free (s);
+
+    /* Handle DATE, TIME, ERRORLEVEL and CD replacements allowing */ 
+    /* override if existing env var called that name              */
+    } else if ((CompareString (LOCALE_USER_DEFAULT, 
+                              NORM_IGNORECASE | SORT_STRINGSORT,
+      	                      (p+1), 11, "ERRORLEVEL%", -1) == 2) &&
+              (GetEnvironmentVariable("ERRORLEVEL", cmd2, 1) == 0) &&
+              (GetLastError() == ERROR_ENVVAR_NOT_FOUND)) {
+      char output[10];
+      sprintf(output, "%d", errorlevel);
+      s = strdup (p+12);
+      strcpy (p, output);
+      strcat (p, s);
+
+    } else if ((CompareString (LOCALE_USER_DEFAULT, 
+                              NORM_IGNORECASE | SORT_STRINGSORT,
+      	                      (p+1), 5, "DATE%", -1) == 2) &&
+              (GetEnvironmentVariable("DATE", cmd2, 1) == 0) &&
+              (GetLastError() == ERROR_ENVVAR_NOT_FOUND)) {
+
+      GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, NULL, 
+                    NULL, cmd2, MAXSTRING); 
+      s = strdup (p+6);
+      strcpy (p, cmd2);
+      strcat (p, s);
+    
+    } else if ((CompareString (LOCALE_USER_DEFAULT, 
+                              NORM_IGNORECASE | SORT_STRINGSORT,
+      	                      (p+1), 5, "TIME%", -1) == 2) &&
+              (GetEnvironmentVariable("TIME", cmd2, 1) == 0) &&
+              (GetLastError() == ERROR_ENVVAR_NOT_FOUND)) {
+      GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, NULL, 
+                        NULL, cmd2, MAXSTRING);
+      s = strdup (p+6);
+      strcpy (p, cmd2);
+      strcat (p, s);
+    
+    } else if ((CompareString (LOCALE_USER_DEFAULT, 
+                              NORM_IGNORECASE | SORT_STRINGSORT,
+      	                      (p+1), 3, "CD%", -1) == 2) &&
+              (GetEnvironmentVariable("CD", cmd2, 1) == 0) &&
+              (GetLastError() == ERROR_ENVVAR_NOT_FOUND)) {
+      GetCurrentDirectory (MAXSTRING, cmd2);
+      s = strdup (p+4);
+      strcpy (p, cmd2);
+      strcat (p, s);
+
     } else {
       p++;
     }
-- 
1.3.0



More information about the wine-patches mailing list