Jason Edmeades : cmd.exe: Add TYPE multiple file support.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 13 07:56:06 CDT 2007


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

Author: Jason Edmeades <us at edmeades.me.uk>
Date:   Tue Mar 13 00:09:33 2007 +0000

cmd.exe: Add TYPE multiple file support.

---

 programs/cmd/builtins.c |   51 +++++++++++++++++++++++++++++++++-------------
 programs/cmd/wcmd.h     |    2 +-
 programs/cmd/wcmdmain.c |    2 +-
 3 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index c86fa13..8359152 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1432,28 +1432,49 @@ void WCMD_title (char *command) {
  * Copy a file to standard output.
  */
 
-void WCMD_type (void) {
+void WCMD_type (char *command) {
 
-  HANDLE h;
-  char buffer[512];
-  DWORD count;
+  int   argno         = 0;
+  char *argN          = command;
+  BOOL  writeHeaders  = FALSE;
 
   if (param1[0] == 0x00) {
     WCMD_output ("Argument missing\n");
     return;
   }
-  h = CreateFile (param1, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
-  		FILE_ATTRIBUTE_NORMAL, NULL);
-  if (h == INVALID_HANDLE_VALUE) {
-    WCMD_print_error ();
-    return;
-  }
-  while (ReadFile (h, buffer, sizeof(buffer), &count, NULL)) {
-    if (count == 0) break;	/* ReadFile reports success on EOF! */
-    buffer[count] = 0;
-    WCMD_output_asis (buffer);
+
+  if (param2[0] != 0x00) writeHeaders = TRUE;
+
+  /* Loop through all args */
+  errorlevel = 0;
+  while (argN) {
+    char *thisArg = WCMD_parameter (command, argno++, &argN);
+
+    HANDLE h;
+    char buffer[512];
+    DWORD count;
+
+    if (!argN) break;
+
+    WINE_TRACE("type: Processing arg '%s'\n", thisArg);
+    h = CreateFile (thisArg, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
+		FILE_ATTRIBUTE_NORMAL, NULL);
+    if (h == INVALID_HANDLE_VALUE) {
+      WCMD_print_error ();
+      WCMD_output ("%s :Failed\n", thisArg);
+      errorlevel = 1;
+    } else {
+      if (writeHeaders) {
+        WCMD_output("\n%s\n\n", thisArg);
+      }
+      while (ReadFile (h, buffer, sizeof(buffer), &count, NULL)) {
+        if (count == 0) break;	/* ReadFile reports success on EOF! */
+        buffer[count] = 0;
+        WCMD_output_asis (buffer);
+      }
+      CloseHandle (h);
+    }
   }
-  CloseHandle (h);
 }
 
 /****************************************************************************
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h
index 67340b3..671019b 100644
--- a/programs/cmd/wcmd.h
+++ b/programs/cmd/wcmd.h
@@ -71,7 +71,7 @@ void WCMD_setshow_time (void);
 void WCMD_shift (char *command);
 void WCMD_show_prompt (void);
 void WCMD_title (char *);
-void WCMD_type (void);
+void WCMD_type (char *);
 void WCMD_verify (char *command);
 void WCMD_version (void);
 int  WCMD_volume (int mode, char *command);
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index eaac82b..037efcc 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -669,7 +669,7 @@ void WCMD_process_command (char *command)
           WCMD_title(&whichcmd[count+1]);
         break;
       case WCMD_TYPE:
-        WCMD_type ();
+        WCMD_type (p);
 	break;
       case WCMD_VER:
         WCMD_version ();




More information about the wine-cvs mailing list