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