Module: wine Branch: master Commit: 4ef2f8ba1a450dcb22a2a3211dbc652eac0014f0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4ef2f8ba1a450dcb22a2a3211d...
Author: Jason Edmeades us@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 ();