[FLOPPY] Don't wait forever while trying to determine media type.
[reactos.git] / base / shell / cmd / cmd.h
1 /*
2 * CMD.H - header file for the modules in CMD.EXE
3 *
4 *
5 * History:
6 *
7 * 7-15-95 Tim Norman
8 * started
9 *
10 * 06/29/98 (Rob Lake)
11 * Moved error messages in here
12 *
13 * 07/12/98 (Rob Lake)
14 * Moved more error messages here.
15 *
16 * 30-Jul-1998 (John P Price <linux-guru@gcfl.net>)
17 * Added compile date to version.
18 *
19 * 26-Feb-1999 (Eric Kohl)
20 * Introduced a new version string.
21 * Thanks to Emanuele Aliberti!
22 */
23
24 #pragma once
25
26 #include <config.h>
27
28 #include "cmdver.h"
29 #include "cmddbg.h"
30
31 #define BREAK_BATCHFILE 1
32 #define BREAK_OUTOFBATCH 2
33 #define BREAK_INPUT 3
34 #define BREAK_IGNORE 4
35
36 /* define some error messages */
37 #define D_ON _T("on")
38 #define D_OFF _T("off")
39
40 /* command line buffer length */
41 #define CMDLINE_LENGTH 8192
42
43 /* 16k = max buffer size */
44 #define BUFF_SIZE 16384
45
46 /* Global variables */
47 extern LPTSTR lpOriginalEnvironment;
48 extern WORD wColor;
49 extern WORD wDefColor;
50 extern BOOL bCtrlBreak;
51 extern BOOL bIgnoreEcho;
52 extern BOOL bExit;
53 extern BOOL bDisableBatchEcho;
54 extern BOOL bEnableExtensions;
55 extern BOOL bDelayedExpansion;
56 extern INT nErrorLevel;
57
58
59 /* Prototypes for ALIAS.C */
60 VOID ExpandAlias (LPTSTR, INT);
61 INT CommandAlias (LPTSTR);
62
63 /* Prototypes for ASSOC.C */
64 INT CommandAssoc (LPTSTR);
65
66 /* Prototypes for ATTRIB.C */
67 INT CommandAttrib (LPTSTR);
68
69 /* Prototypes for BEEP.C */
70 INT cmd_beep (LPTSTR);
71
72 /* Prototypes for CALL.C */
73 INT cmd_call (LPTSTR);
74
75 /* Prototypes for CHOICE.C */
76 INT CommandChoice (LPTSTR);
77
78 /* Prototypes for CLS.C */
79 INT cmd_cls (LPTSTR);
80
81 /* Prototypes for CMD.C */
82 INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, UINT len, BOOL bPutSeparator);
83 HANDLE RunFile(DWORD, LPTSTR, LPTSTR, LPTSTR, INT);
84 INT ParseCommandLine(LPTSTR);
85 struct _PARSED_COMMAND;
86 INT ExecuteCommand(struct _PARSED_COMMAND *Cmd);
87 LPCTSTR GetEnvVarOrSpecial ( LPCTSTR varName );
88 VOID AddBreakHandler (VOID);
89 VOID RemoveBreakHandler (VOID);
90 BOOL SubstituteVars(TCHAR *Src, TCHAR *Dest, TCHAR Delim);
91 BOOL SubstituteForVars(TCHAR *Src, TCHAR *Dest);
92 LPTSTR DoDelayedExpansion(LPTSTR Line);
93 INT DoCommand(LPTSTR first, LPTSTR rest, struct _PARSED_COMMAND *Cmd);
94 BOOL ReadLine(TCHAR *commandline, BOOL bMore);
95
96 extern HANDLE CMD_ModuleHandle;
97
98
99 /* Prototypes for CMDINPUT.C */
100 BOOL ReadCommand (LPTSTR, INT);
101
102 extern TCHAR AutoCompletionChar;
103 extern TCHAR PathCompletionChar;
104
105 #define IS_COMPLETION_DISABLED(CompletionCtrl) \
106 ((CompletionCtrl) == 0x00 || (CompletionCtrl) == 0x0D || (CompletionCtrl) >= 0x20)
107
108
109 /* Prototypes for CMDTABLE.C */
110 #define CMD_SPECIAL 1
111 #define CMD_BATCHONLY 2
112 #define CMD_HIDE 4
113
114 typedef struct tagCOMMAND
115 {
116 LPTSTR name;
117 INT flags;
118 INT (*func)(LPTSTR);
119 } COMMAND, *LPCOMMAND;
120
121 extern COMMAND cmds[]; /* The internal command table */
122
123 VOID PrintCommandList (VOID);
124
125 LPCTSTR GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA );
126
127 /* Prototypes for CTTY.C */
128 #ifdef INCLUDE_CMD_CTTY
129 INT cmd_ctty(LPTSTR);
130 #endif
131
132 /* Prototypes for COLOR.C */
133 INT CommandColor(LPTSTR);
134
135 /* Prototypes for CONSOLE.C */
136 #include "console.h"
137
138 /* Prototypes for COPY.C */
139 INT cmd_copy (LPTSTR);
140
141 /* Prototypes for DATE.C */
142 INT cmd_date (LPTSTR);
143
144 /* Prototypes for DEL.C */
145 INT CommandDelete (LPTSTR);
146
147 /* Prototypes for DELAY.C */
148 INT CommandDelay (LPTSTR);
149
150 /* Prototypes for DIR.C */
151 INT FormatDate (TCHAR *, LPSYSTEMTIME, BOOL);
152 INT FormatTime (TCHAR *, LPSYSTEMTIME);
153 INT CommandDir (LPTSTR);
154
155 /* Prototypes for DIRSTACK.C */
156 VOID InitDirectoryStack (VOID);
157 VOID DestroyDirectoryStack (VOID);
158 INT GetDirectoryStackDepth (VOID);
159 INT CommandPushd (LPTSTR);
160 INT CommandPopd (LPTSTR);
161 INT CommandDirs (LPTSTR);
162
163 /* Prototypes for ECHO.C */
164 BOOL OnOffCommand(LPTSTR param, LPBOOL flag, INT message);
165 INT CommandEcho (LPTSTR);
166 INT CommandEchos (LPTSTR);
167 INT CommandEchoerr (LPTSTR);
168 INT CommandEchoserr (LPTSTR);
169
170 /* Prototypes for ERROR.C */
171 VOID ErrorMessage (DWORD, LPTSTR, ...);
172
173 VOID error_no_pipe (VOID);
174 VOID error_bad_command (LPTSTR);
175 VOID error_invalid_drive (VOID);
176 VOID error_req_param_missing (VOID);
177 VOID error_sfile_not_found (LPTSTR);
178 VOID error_file_not_found (VOID);
179 VOID error_path_not_found (VOID);
180 VOID error_too_many_parameters (LPTSTR);
181 VOID error_parameter_format(TCHAR);
182 VOID error_invalid_switch (TCHAR);
183 VOID error_invalid_parameter_format (LPTSTR);
184 VOID error_out_of_memory (VOID);
185 VOID error_syntax (LPTSTR);
186
187 VOID msg_pause (VOID);
188
189 /* Prototypes for FILECOMP.C */
190 #ifdef FEATURE_UNIX_FILENAME_COMPLETION
191 VOID CompleteFilename (LPTSTR, UINT);
192 INT ShowCompletionMatches (LPTSTR, INT);
193 #endif
194 #ifdef FEATURE_4NT_FILENAME_COMPLETION
195 VOID CompleteFilename (LPTSTR, BOOL, LPTSTR, UINT);
196 #endif
197
198
199 /* Prototypes for FOR.C */
200 #define FOR_DIRS 1 /* /D */
201 #define FOR_F 2 /* /F */
202 #define FOR_LOOP 4 /* /L */
203 #define FOR_RECURSIVE 8 /* /R */
204 INT cmd_for (LPTSTR);
205 INT ExecuteFor(struct _PARSED_COMMAND *Cmd);
206
207
208 /* Prototypes for FREE.C */
209 INT CommandFree (LPTSTR);
210
211 /* Prototypes for GOTO.C */
212 INT cmd_goto (LPTSTR);
213
214 /* Prototypes for HISTORY.C */
215 #ifdef FEATURE_HISTORY
216 LPCTSTR PeekHistory(INT);
217 VOID History (INT, LPTSTR);/*add entries browse history*/
218 VOID History_move_to_bottom(VOID);/*F3*/
219 VOID InitHistory(VOID);
220 VOID CleanHistory(VOID);
221 VOID History_del_current_entry(LPTSTR str);/*CTRL-D*/
222 INT CommandHistory (LPTSTR param);
223 #endif
224
225 /* Prototypes for IF.C */
226 #define IFFLAG_NEGATE 1 /* NOT */
227 #define IFFLAG_IGNORECASE 2 /* /I */
228 enum { IF_CMDEXTVERSION, IF_DEFINED, IF_ERRORLEVEL, IF_EXIST,
229 IF_STRINGEQ, /* == */
230 IF_EQU, IF_GTR, IF_GEQ, IF_LSS, IF_LEQ, IF_NEQ };
231 INT ExecuteIf(struct _PARSED_COMMAND *Cmd);
232
233 /* Prototypes for INTERNAL.C */
234 VOID InitLastPath (VOID);
235 VOID FreeLastPath (VOID);
236 INT cmd_chdir (LPTSTR);
237 INT cmd_mkdir (LPTSTR);
238 INT cmd_rmdir (LPTSTR);
239 INT CommandExit (LPTSTR);
240 INT CommandRem (LPTSTR);
241 INT CommandShowCommands (LPTSTR);
242
243 /* Prototypes for LABEL.C */
244 INT cmd_label (LPTSTR);
245
246 /* Prototypes for LOCALE.C */
247 extern TCHAR cDateSeparator;
248 extern INT nDateFormat;
249 extern TCHAR cTimeSeparator;
250 extern INT nTimeFormat;
251 extern TCHAR cThousandSeparator;
252 extern TCHAR cDecimalSeparator;
253 extern INT nNumberGroups;
254
255 VOID InitLocale (VOID);
256 LPTSTR GetDateString (VOID);
257 LPTSTR GetTimeString (VOID);
258
259 /* Prototypes for MEMORY.C */
260 INT CommandMemory (LPTSTR);
261
262 /* Prototypes for MKLINK.C */
263 INT cmd_mklink(LPTSTR);
264
265 /* Prototypes for MISC.C */
266 INT GetRootPath(TCHAR *InPath,TCHAR *OutPath,INT size);
267 BOOL SetRootPath(TCHAR *oldpath,TCHAR *InPath);
268 TCHAR cgetchar (VOID);
269 BOOL CheckCtrlBreak (INT);
270 BOOL add_entry (LPINT ac, LPTSTR **arg, LPCTSTR entry);
271 LPTSTR *split (LPTSTR, LPINT, BOOL, BOOL);
272 LPTSTR *splitspace (LPTSTR, LPINT);
273 VOID freep (LPTSTR *);
274 LPTSTR _stpcpy (LPTSTR, LPCTSTR);
275 VOID StripQuotes(LPTSTR);
276 BOOL IsValidPathName (LPCTSTR);
277 BOOL IsExistingFile (LPCTSTR);
278 BOOL IsExistingDirectory (LPCTSTR);
279 BOOL FileGetString (HANDLE, LPTSTR, INT);
280 VOID GetPathCase(TCHAR *, TCHAR *);
281
282 #define PROMPT_NO 0
283 #define PROMPT_YES 1
284 #define PROMPT_ALL 2
285 #define PROMPT_BREAK 3
286
287 BOOL __stdcall PagePrompt(PCON_PAGER Pager, DWORD Done, DWORD Total);
288 INT FilePromptYN (UINT);
289 INT FilePromptYNA (UINT);
290
291 /* Prototypes for MOVE.C */
292 INT cmd_move (LPTSTR);
293
294 /* Prototypes for MSGBOX.C */
295 INT CommandMsgbox (LPTSTR);
296
297 /* Prototypes from PARSER.C */
298 enum { C_COMMAND, C_QUIET, C_BLOCK, C_MULTI, C_IFFAILURE, C_IFSUCCESS, C_PIPE, C_IF, C_FOR };
299 typedef struct _PARSED_COMMAND
300 {
301 struct _PARSED_COMMAND *Subcommands;
302 struct _PARSED_COMMAND *Next;
303 struct _REDIRECTION *Redirections;
304 BYTE Type;
305 union
306 {
307 struct
308 {
309 TCHAR *Rest;
310 TCHAR First[];
311 } Command;
312 struct
313 {
314 BYTE Flags;
315 BYTE Operator;
316 TCHAR *LeftArg;
317 TCHAR *RightArg;
318 } If;
319 struct
320 {
321 BYTE Switches;
322 TCHAR Variable;
323 LPTSTR Params;
324 LPTSTR List;
325 struct tagFORCONTEXT *Context;
326 } For;
327 };
328 } PARSED_COMMAND;
329 PARSED_COMMAND *ParseCommand(LPTSTR Line);
330 VOID EchoCommand(PARSED_COMMAND *Cmd);
331 TCHAR *Unparse(PARSED_COMMAND *Cmd, TCHAR *Out, TCHAR *OutEnd);
332 VOID FreeCommand(PARSED_COMMAND *Cmd);
333
334 /* Prototypes from PATH.C */
335 INT cmd_path (LPTSTR);
336
337 /* Prototypes from PROMPT.C */
338 VOID InitPrompt (VOID);
339 VOID PrintPrompt (VOID);
340 INT cmd_prompt (LPTSTR);
341
342 /* Prototypes for REDIR.C */
343 HANDLE GetHandle(UINT Number);
344 VOID SetHandle(UINT Number, HANDLE Handle);
345
346 typedef enum _REDIR_MODE
347 {
348 REDIR_READ = 0,
349 REDIR_WRITE = 1,
350 REDIR_APPEND = 2
351 } REDIR_MODE;
352 typedef struct _REDIRECTION
353 {
354 struct _REDIRECTION *Next;
355 HANDLE OldHandle;
356 BYTE Number;
357 REDIR_MODE Mode;
358 TCHAR Filename[];
359 } REDIRECTION;
360 BOOL PerformRedirection(REDIRECTION *);
361 VOID UndoRedirection(REDIRECTION *, REDIRECTION *End);
362 INT GetRedirection(LPTSTR, REDIRECTION **);
363 VOID FreeRedirection(REDIRECTION *);
364
365 /* Prototypes for REN.C */
366 INT cmd_rename (LPTSTR);
367
368 /* Prototypes for REN.C */
369 INT cmd_replace (LPTSTR);
370
371 /* Prototypes for SCREEN.C */
372 INT CommandScreen (LPTSTR);
373
374 /* Prototypes for SET.C */
375 INT cmd_set (LPTSTR);
376
377 /* Prototypes for SETLOCAL.C */
378 LPTSTR DuplicateEnvironment(VOID);
379 INT cmd_setlocal (LPTSTR);
380 INT cmd_endlocal (LPTSTR);
381
382 /* Prototypes for START.C */
383 INT cmd_start (LPTSTR);
384
385 /* Prototypes for STRTOCLR.C */
386 BOOL StringToColor (LPWORD, LPTSTR *);
387
388 /* Prototypes for TIME.C */
389 INT cmd_time (LPTSTR);
390
391 /* Prototypes for TIMER.C */
392 INT CommandTimer (LPTSTR param);
393
394 /* Prototypes for TITLE.C */
395 INT cmd_title (LPTSTR);
396
397 /* Prototypes for TYPE.C */
398 INT cmd_type (LPTSTR);
399
400 /* Prototypes for VER.C */
401 VOID InitOSVersion(VOID);
402 VOID PrintOSVersion(VOID);
403 INT cmd_ver (LPTSTR);
404
405 /* Prototypes for VERIFY.C */
406 INT cmd_verify (LPTSTR);
407
408 /* Prototypes for VOL.C */
409 INT cmd_vol (LPTSTR);
410
411 /* Prototypes for WHERE.C */
412 BOOL SearchForExecutable (LPCTSTR, LPTSTR);
413
414 /* Prototypes for WINDOW.C */
415 INT CommandActivate (LPTSTR);
416 INT CommandWindow (LPTSTR);
417
418 /* The MSDOS Batch Commands [MS-DOS 5.0 User's Guide and Reference p359] */
419 int cmd_if(TCHAR *);
420 int cmd_pause(TCHAR *);
421 int cmd_shift(TCHAR *);