Jason Edmeades : cmd.exe: PROMPT option to show pushd levels.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 5 06:23:41 CST 2007


Module: wine
Branch: master
Commit: 8049ae1af8e431a8b54c34107c31cf85547972a5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8049ae1af8e431a8b54c34107c31cf85547972a5

Author: Jason Edmeades <us at edmeades.me.uk>
Date:   Sun Mar  4 22:34:20 2007 +0000

cmd.exe: PROMPT option to show pushd levels.

---

 programs/cmd/builtins.c |   11 +++++------
 programs/cmd/wcmd.h     |    9 +++++++++
 programs/cmd/wcmdmain.c |    9 ++++++++-
 3 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 3aeac71..8418ab4 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -42,12 +42,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(cmd);
 
 void WCMD_execute (char *orig_command, char *parameter, char *substitution);
 
-struct env_stack
-{
-  struct env_stack *next;
-  WCHAR *strings;
-};
-
 struct env_stack *saved_environment;
 struct env_stack *pushd_directories;
 
@@ -612,6 +606,11 @@ void WCMD_pushd (void) {
     } else {
       curdir -> next    = pushd_directories;
       curdir -> strings = thisdir;
+      if (pushd_directories == NULL) {
+        curdir -> stackdepth = 1;
+      } else {
+        curdir -> stackdepth = pushd_directories -> stackdepth + 1;
+      }
       pushd_directories = curdir;
     }
 }
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h
index 61e3044..49307c7 100644
--- a/programs/cmd/wcmd.h
+++ b/programs/cmd/wcmd.h
@@ -94,6 +94,15 @@ typedef struct {
   BOOL  skip_rest;      /* Skip the rest of the batch program and exit */
 } BATCH_CONTEXT;
 
+/* Data structure to save setlocal and pushd information */
+
+struct env_stack
+{
+  struct env_stack *next;
+  int    stackdepth;       /* Only used for pushd and popd */
+  WCHAR *strings;
+};
+
 #endif /* !RC_INVOKED */
 
 /*
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 4253f31..a1f426c 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -45,6 +45,7 @@ const char anykey[] = "Press Return key to continue: ";
 char quals[MAX_PATH], param1[MAX_PATH], param2[MAX_PATH];
 BATCH_CONTEXT *context = NULL;
 static HANDLE old_stdin = INVALID_HANDLE_VALUE, old_stdout = INVALID_HANDLE_VALUE;
+extern struct env_stack *pushd_directories;
 
 static char *WCMD_expand_envvar(char *start);
 
@@ -932,10 +933,16 @@ void WCMD_show_prompt (void) {
 	case 'V':
 	  lstrcat (q, version_string);
 	  while (*q) q++;
-         break;
+          break;
 	case '_':
 	  *q++ = '\n';
 	  break;
+	case '+':
+	  if (pushd_directories) {
+	    memset(q, '+', pushd_directories->stackdepth);
+	    q = q + pushd_directories->stackdepth;
+	  }
+	  break;
       }
       p++;
       *q = '\0';




More information about the wine-cvs mailing list