reactos/base/shell/cmd/batch.h

85 lines
2.2 KiB
C

/*
* BATCH.H - A structure to preserve the context of a batch file
*/
#pragma once
/*
* This batch type enumeration allows us to adjust the behaviour of some commands
* depending on whether they are run from within a .BAT or a .CMD file.
* The behaviour is selected when the top-level batch file is loaded,
* and it remains the same for any child batch file that may be loaded later.
*
* See https://ss64.com/nt/errorlevel.html for more details.
*/
typedef enum _BATCH_TYPE
{
NONE,
BAT_TYPE, /* Old-style DOS batch file */
CMD_TYPE /* New-style NT OS/2 batch file */
} BATCH_TYPE;
/* Enable this define for Windows' CMD batch-echo behaviour compatibility */
#define MSCMD_BATCH_ECHO
typedef struct _BATCH_CONTEXT
{
struct _BATCH_CONTEXT *prev;
char *mem; /* batchfile content in memory */
DWORD memsize; /* size of batchfile */
DWORD mempos; /* current position to read from */
BOOL memfree; /* true if it need to be freed when exitbatch is called */
TCHAR BatchFilePath[MAX_PATH];
LPTSTR params;
LPTSTR raw_params; /* Holds the raw params given by the input */
INT shiftlevel[10];
#ifndef MSCMD_BATCH_ECHO
BOOL bEcho; /* Preserve echo flag across batch calls */
#endif
REDIRECTION *RedirList;
PARSED_COMMAND *current;
struct _SETLOCAL *setlocal;
} BATCH_CONTEXT, *PBATCH_CONTEXT;
typedef struct _FOR_CONTEXT
{
struct _FOR_CONTEXT *prev;
TCHAR firstvar;
UINT varcount;
LPTSTR *values;
} FOR_CONTEXT, *PFOR_CONTEXT;
/*
* The stack of current batch contexts.
* NULL when no batch is active.
*/
extern BATCH_TYPE BatType;
extern PBATCH_CONTEXT bc;
extern PFOR_CONTEXT fc;
#ifdef MSCMD_BATCH_ECHO
extern BOOL bBcEcho;
#endif
extern BOOL bEcho; /* The echo flag */
#define BATCH_BUFFSIZE 8192
extern TCHAR textline[BATCH_BUFFSIZE]; /* Buffer for reading Batch file lines */
BOOL
FindArg(
IN TCHAR Char,
OUT PCTSTR* ArgPtr,
OUT BOOL* IsParam0);
VOID ExitBatch(VOID);
VOID ExitAllBatches(VOID);
INT Batch(LPTSTR, LPTSTR, LPTSTR, PARSED_COMMAND *);
BOOL BatchGetString(LPTSTR lpBuffer, INT nBufferLength);
LPTSTR ReadBatchLine(VOID);
VOID AddBatchRedirection(REDIRECTION **);