[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