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

#pragma once

typedef struct tagBATCHCONTEXT
{
	struct tagBATCHCONTEXT *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];
	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 (VOID);
INT    Batch (LPTSTR, LPTSTR, LPTSTR, PARSED_COMMAND *);
BOOL   BatchGetString (LPTSTR lpBuffer, INT nBufferLength);
LPTSTR ReadBatchLine(VOID);
VOID   AddBatchRedirection(REDIRECTION **);
