- Implement ProtocolResetComplete
[reactos.git] / base / shell / cmd / type.c
1 /*
2 * TYPE.C - type internal command.
3 *
4 * History:
5 *
6 * 07/08/1998 (John P. Price)
7 * started.
8 *
9 * 07/12/98 (Rob Lake)
10 * Changed error messages
11 *
12 * 27-Jul-1998 (John P Price <linux-guru@gcfl.net>)
13 * added config.h include
14 *
15 * 07-Jan-1999 (Eric Kohl)
16 * Added support for quoted arguments (type "test file.dat").
17 * Cleaned up.
18 *
19 * 19-Jan-1999 (Eric Kohl)
20 * Unicode and redirection ready!
21 *
22 * 19-Jan-1999 (Paolo Pantaleo <paolopan@freemail.it>)
23 * Added multiple file support (copied from y.c)
24 *
25 * 30-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
26 * Remove all hardcode string to En.rc
27 */
28
29 #include <precomp.h>
30
31 #ifdef INCLUDE_CMD_TYPE
32
33
34 INT cmd_type (LPTSTR cmd, LPTSTR param)
35 {
36 TCHAR buff[256];
37 HANDLE hFile, hConsoleOut;
38 BOOL bRet;
39 INT argc,i;
40 LPTSTR *argv;
41 LPTSTR errmsg;
42 BOOL bPaging = FALSE;
43 BOOL bFirstTime = TRUE;
44
45 hConsoleOut=GetStdHandle (STD_OUTPUT_HANDLE);
46
47 if (!_tcsncmp (param, _T("/?"), 2))
48 {
49 ConOutResPaging(TRUE,STRING_TYPE_HELP1);
50 return 0;
51 }
52
53 if (!*param)
54 {
55 error_req_param_missing ();
56 return 1;
57 }
58
59 argv = split (param, &argc, TRUE);
60
61 for(i = 0; i < argc; i++)
62 {
63 if(*argv[i] == _T('/') && _tcslen(argv[i]) >= 2 && _totupper(argv[i][1]) == _T('P'))
64 {
65 bPaging = TRUE;
66 }
67 }
68
69 for (i = 0; i < argc; i++)
70 {
71 if (_T('/') == argv[i][0] && _totupper(argv[i][1]) != _T('P'))
72 {
73 ConErrResPrintf(STRING_TYPE_ERROR1, argv[i] + 1);
74 continue;
75 }
76
77 nErrorLevel = 0;
78
79 hFile = CreateFile(argv[i],
80 GENERIC_READ,
81 FILE_SHARE_READ,NULL,
82 OPEN_EXISTING,
83 FILE_ATTRIBUTE_NORMAL,NULL);
84
85 if(hFile == INVALID_HANDLE_VALUE)
86 {
87 FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER |
88 FORMAT_MESSAGE_IGNORE_INSERTS |
89 FORMAT_MESSAGE_FROM_SYSTEM,
90 NULL,
91 GetLastError(),
92 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
93 (LPTSTR) &errmsg,
94 0,
95 NULL);
96 ConErrPrintf (_T("%s - %s"), argv[i], errmsg);
97 LocalFree (errmsg);
98 nErrorLevel = 1;
99 continue;
100 }
101
102 do
103 {
104 bRet = FileGetString (hFile, buff, sizeof(buff) / sizeof(TCHAR));
105 if(bPaging)
106 {
107 if(bRet)
108 {
109 if (ConOutPrintfPaging(bFirstTime, buff) == 1)
110 {
111 bCtrlBreak = FALSE;
112 return 0;
113 }
114 }
115 }
116 else
117 {
118 if(bRet)
119 ConOutPrintf(buff);
120 }
121 bFirstTime = FALSE;
122
123 } while(bRet);
124
125 CloseHandle(hFile);
126 }
127
128 freep (argv);
129
130 return 0;
131 }
132
133 #endif