/* global variables */
extern HANDLE hOut;
extern HANDLE hIn;
-extern HANDLE hConsole;
+extern LPTSTR lpOriginalEnvironment;
extern WORD wColor;
extern WORD wDefColor;
extern BOOL bCtrlBreak;
extern BOOL bIgnoreEcho;
extern BOOL bExit;
+extern BOOL bDisableBatchEcho;
+extern BOOL bDelayedExpansion;
extern INT nErrorLevel;
extern SHORT maxx;
extern SHORT maxy;
extern OSVERSIONINFO osvi;
-
+extern BOOL bUnicodeOutput;
/* Prototypes for ALIAS.C */
VOID ExpandAlias (LPTSTR, INT);
INT CommandAlias (LPTSTR);
+/* Prototypes for ASSOC.C */
+INT CommandAssoc (LPTSTR);
+
/* Prototypes for ATTRIB.C */
INT CommandAttrib (LPTSTR);
/* Prototypes for CMD.C */
-INT ConvertULargeInteger (ULARGE_INTEGER num, LPTSTR des, INT len, BOOL bPutSeperator);
+INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, INT len, BOOL bPutSeperator);
+HANDLE RunFile(DWORD, LPTSTR, LPTSTR, LPTSTR, INT);
VOID ParseCommandLine (LPTSTR);
struct _PARSED_COMMAND;
BOOL ExecuteCommand(struct _PARSED_COMMAND *Cmd);
LPCTSTR GetEnvVarOrSpecial ( LPCTSTR varName );
VOID AddBreakHandler (VOID);
VOID RemoveBreakHandler (VOID);
-BOOL DoCommand (LPTSTR line);
+BOOL SubstituteVars(TCHAR *Src, TCHAR *Dest, TCHAR Delim);
+BOOL SubstituteForVars(TCHAR *Src, TCHAR *Dest);
+LPTSTR DoDelayedExpansion(LPTSTR Line);
+BOOL DoCommand(LPTSTR first, LPTSTR rest, struct _PARSED_COMMAND *Cmd);
BOOL ReadLine(TCHAR *commandline, BOOL bMore);
int cmd_main (int argc, const TCHAR *argv[]);
/* Prototypes for CMDINPUT.C */
-VOID ReadCommand (LPTSTR, INT);
+BOOL ReadCommand (LPTSTR, INT);
/* Prototypes for CMDTABLE.C */
VOID ConOutChar (TCHAR);
VOID ConOutPuts (LPTSTR);
+VOID ConPrintf(LPTSTR, va_list, DWORD);
+INT ConPrintfPaging(BOOL NewPage, LPTSTR, va_list, DWORD);
VOID ConOutPrintf (LPTSTR, ...);
INT ConOutPrintfPaging (BOOL NewPage, LPTSTR, ...);
VOID ConErrChar (TCHAR);
/* Prototypes for DIR.C */
+INT FormatDate (TCHAR *, LPSYSTEMTIME, BOOL);
+INT FormatTime (TCHAR *, LPSYSTEMTIME);
INT CommandDir (LPTSTR);
/* Prototypes for ECHO.C */
+BOOL OnOffCommand(LPTSTR param, LPBOOL flag, INT message);
INT CommandEcho (LPTSTR);
INT CommandEchos (LPTSTR);
INT CommandEchoerr (LPTSTR);
VOID ErrorMessage (DWORD, LPTSTR, ...);
VOID error_no_pipe (VOID);
-VOID error_bad_command (VOID);
+VOID error_bad_command (LPTSTR);
VOID error_invalid_drive (VOID);
VOID error_req_param_missing (VOID);
VOID error_sfile_not_found (LPTSTR);
/* Prototypes for FOR.C */
+#define FOR_DIRS 1 /* /D */
+#define FOR_F 2 /* /F */
+#define FOR_LOOP 4 /* /L */
+#define FOR_RECURSIVE 8 /* /R */
INT cmd_for (LPTSTR);
+BOOL ExecuteFor(struct _PARSED_COMMAND *Cmd);
/* Prototypes for FREE.C */
VOID InitLocale (VOID);
-VOID PrintDate (VOID);
-VOID PrintTime (VOID);
+LPTSTR GetDateString (VOID);
+LPTSTR GetTimeString (VOID);
/* cache codepage */
extern UINT InputCodePage;
INT CommandMemory (LPTSTR);
+/* Prototypes for MKLINK.C */
+INT cmd_mklink(LPTSTR);
+
+
/* Prototypes for MISC.C */
INT GetRootPath(TCHAR *InPath,TCHAR *OutPath,INT size);
-BOOL SetRootPath(TCHAR *InPath);
+BOOL SetRootPath(TCHAR *oldpath,TCHAR *InPath);
TCHAR cgetchar (VOID);
BOOL CheckCtrlBreak (INT);
BOOL add_entry (LPINT ac, LPTSTR **arg, LPCTSTR entry);
/* Prototypes from PARSER.C */
-enum { C_COMMAND, C_QUIET, C_BLOCK, C_MULTI, C_IFFAILURE, C_IFSUCCESS, C_PIPE, C_IF };
+enum { C_COMMAND, C_QUIET, C_BLOCK, C_MULTI, C_IFFAILURE, C_IFSUCCESS, C_PIPE, C_IF, C_FOR };
typedef struct _PARSED_COMMAND
{
struct _PARSED_COMMAND *Subcommands;
{
struct
{
- TCHAR *Tail;
- TCHAR CommandLine[];
+ TCHAR *Rest;
+ TCHAR First[];
} Command;
struct
{
TCHAR *LeftArg;
TCHAR *RightArg;
} If;
+ struct
+ {
+ BYTE Switches;
+ TCHAR Variable;
+ LPTSTR Params;
+ LPTSTR List;
+ struct tagFORCONTEXT *Context;
+ } For;
};
} PARSED_COMMAND;
PARSED_COMMAND *ParseCommand(LPTSTR Line);
VOID EchoCommand(PARSED_COMMAND *Cmd);
+TCHAR *Unparse(PARSED_COMMAND *Cmd, TCHAR *Out, TCHAR *OutEnd);
VOID FreeCommand(PARSED_COMMAND *Cmd);
INT cmd_set (LPTSTR);
/* Prototypes for SETLOCAL.C */
+LPTSTR DuplicateEnvironment(VOID);
INT cmd_setlocal (LPTSTR);
INT cmd_endlocal (LPTSTR);