/*
 *  BATCH.H - A structure to preserve the context of a batch file
 *
 *
 */

#pragma once

typedef struct tagBATCHCONTEXT
{
	struct tagBATCHCONTEXT *prev;
	HANDLE hBatchFile;
	TCHAR BatchFilePath[MAX_PATH];
	LPTSTR params;
	LPTSTR raw_params;   /* Holds the raw params given by the input */
	INT    shiftlevel[10];
	BOOL   bEcho;        /* Preserve echo flag across batch calls */
	REDIRECTION *RedirList;
	PARSED_COMMAND *current; 
	struct _SETLOCAL *setlocal;
} BATCH_CONTEXT, *LPBATCH_CONTEXT;

typedef struct tagFORCONTEXT
{
	struct tagFORCONTEXT *prev;
	TCHAR firstvar;
	UINT   varcount;
	LPTSTR *values;
} FOR_CONTEXT, *LPFOR_CONTEXT;


/*  The stack of current batch contexts.
 * NULL when no batch is active
 */
extern LPBATCH_CONTEXT bc;

extern LPFOR_CONTEXT fc;

extern BOOL bEcho;       /* The echo flag */

#define BATCH_BUFFSIZE  8192

extern TCHAR textline[BATCH_BUFFSIZE]; /* Buffer for reading Batch file lines */


LPTSTR FindArg (TCHAR, BOOL *);
LPTSTR BatchParams (LPTSTR, LPTSTR);
VOID   ExitBatch ();
INT    Batch (LPTSTR, LPTSTR, LPTSTR, PARSED_COMMAND *);
LPTSTR ReadBatchLine();
VOID AddBatchRedirection(REDIRECTION **);