ReactOS  0.4.15-dev-1203-g0e5a4d5
batch.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _BATCH_CONTEXT
 
struct  _FOR_CONTEXT
 

Macros

#define MSCMD_BATCH_ECHO
 
#define BATCH_BUFFSIZE   8192
 

Typedefs

typedef enum _BATCH_TYPE BATCH_TYPE
 
typedef struct _BATCH_CONTEXT BATCH_CONTEXT
 
typedef struct _BATCH_CONTEXTPBATCH_CONTEXT
 
typedef struct _FOR_CONTEXT FOR_CONTEXT
 
typedef struct _FOR_CONTEXTPFOR_CONTEXT
 

Enumerations

enum  _BATCH_TYPE { NONE, BAT_TYPE, CMD_TYPE }
 

Functions

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 **)
 

Variables

BATCH_TYPE BatType
 
PBATCH_CONTEXT bc
 
PFOR_CONTEXT fc
 
BOOL bBcEcho
 
BOOL bEcho
 
TCHAR textline [BATCH_BUFFSIZE]
 

Macro Definition Documentation

◆ BATCH_BUFFSIZE

#define BATCH_BUFFSIZE   8192

Definition at line 68 of file batch.h.

◆ MSCMD_BATCH_ECHO

#define MSCMD_BATCH_ECHO

Definition at line 24 of file batch.h.

Typedef Documentation

◆ BATCH_CONTEXT

◆ BATCH_TYPE

◆ FOR_CONTEXT

◆ PBATCH_CONTEXT

◆ PFOR_CONTEXT

Enumeration Type Documentation

◆ _BATCH_TYPE

Enumerator
NONE 
BAT_TYPE 
CMD_TYPE 

Definition at line 15 of file batch.h.

16 {
17  NONE,
18  BAT_TYPE, /* Old-style DOS batch file */
19  CMD_TYPE /* New-style NT OS/2 batch file */
20 } BATCH_TYPE;
Definition: batch.h:18
enum _BATCH_TYPE BATCH_TYPE
Definition: batch.h:19
Definition: batch.h:17

Function Documentation

◆ AddBatchRedirection()

VOID AddBatchRedirection ( REDIRECTION **  )

Definition at line 506 of file batch.c.

507 {
509 
510  /* Prepend the list to the batch context's list */
511  ListEnd = RedirList;
512  while (*ListEnd)
513  ListEnd = &(*ListEnd)->Next;
514  *ListEnd = bc->RedirList;
515  bc->RedirList = *RedirList;
516 
517  /* Null out the pointer so that the list will not be cleared prematurely.
518  * These redirections should persist until the batch file exits. */
519  *RedirList = NULL;
520 }
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY ListEnd
Definition: exfuncs.h:1223
smooth NULL
Definition: ftsmooth.c:416
PBATCH_CONTEXT bc
Definition: batch.c:67
REDIRECTION * RedirList
Definition: batch.h:40

Referenced by Batch().

◆ Batch()

INT Batch ( LPTSTR  ,
LPTSTR  ,
LPTSTR  ,
PARSED_COMMAND  
)

Definition at line 300 of file batch.c.

301 {
302  INT ret = 0;
303  INT i;
304  HANDLE hFile = NULL;
305  BOOLEAN bSameFn = FALSE;
306  BOOLEAN bTopLevel;
307  BATCH_CONTEXT new;
308  PFOR_CONTEXT saved_fc;
309 
310  SetLastError(0);
311  if (bc && bc->mem)
312  {
313  TCHAR fpname[MAX_PATH];
314  GetFullPathName(fullname, ARRAYSIZE(fpname), fpname, NULL);
315  if (_tcsicmp(bc->BatchFilePath, fpname) == 0)
316  bSameFn = TRUE;
317  }
318  TRACE("Batch(\'%s\', \'%s\', \'%s\') bSameFn = %d\n",
319  debugstr_aw(fullname), debugstr_aw(firstword), debugstr_aw(param), bSameFn);
320 
321  if (!bSameFn)
322  {
326 
328  {
330  return 1;
331  }
332  }
333 
334  /*
335  * Remember whether this is a top-level batch context, i.e. if there is
336  * no batch context existing prior (bc == NULL originally), and we are
337  * going to create one below.
338  */
339  bTopLevel = !bc;
340 
341  if (bc != NULL && Cmd == bc->current)
342  {
343  /* Then we are transferring to another batch */
344  ClearBatch();
345  AddBatchRedirection(&Cmd->Redirections);
346  }
347  else
348  {
349  struct _SETLOCAL *setlocal = NULL;
350 
351  if (Cmd == NULL)
352  {
353  /* This is a CALL. CALL will set errorlevel to our return value, so
354  * in order to keep the value of errorlevel unchanged in the case
355  * of calling an empty batch file, we must return that same value. */
356  ret = nErrorLevel;
357  }
358  else if (bc)
359  {
360  /* If a batch file runs another batch file as part of a compound command
361  * (e.g. "x.bat & somethingelse") then the first file gets terminated. */
362 
363  /* Get its SETLOCAL stack so it can be migrated to the new context */
364  setlocal = bc->setlocal;
365  bc->setlocal = NULL;
366  ExitBatch();
367  }
368 
369  /* Create a new context. This function will not
370  * return until this context has been exited */
371  new.prev = bc;
372  /* copy some fields in the new structure if it is the same file */
373  if (bSameFn)
374  {
375  new.mem = bc->mem;
376  new.memsize = bc->memsize;
377  new.mempos = 0;
378  new.memfree = FALSE; /* don't free this, being used before this */
379  }
380  bc = &new;
381  bc->RedirList = NULL;
382  bc->setlocal = setlocal;
383  }
384 
386 
387  /* If a new batch file, load it into memory and close the file */
388  if (!bSameFn)
389  {
392  }
393 
394  bc->mempos = 0; /* Go to the beginning of the batch file */
395 #ifndef MSCMD_BATCH_ECHO
396  bc->bEcho = bEcho; /* Preserve echo across batch calls */
397 #endif
398  for (i = 0; i < 10; i++)
399  bc->shiftlevel[i] = i;
400 
401  /* Parse the batch parameters */
402  if (!BatchParams(firstword, param, &bc->raw_params, &bc->params))
403  return 1;
404 
405  /* If we are calling from inside a FOR, hide the FOR variables */
406  saved_fc = fc;
407  fc = NULL;
408 
409  /* Perform top-level batch initialization */
410  if (bTopLevel)
411  {
412  /* Default the top-level batch context type to .BAT */
413  BatType = BAT_TYPE;
414 
415  /* If this is a .CMD file, adjust the type */
416  TCHAR *dot = _tcsrchr(bc->BatchFilePath, _T('.'));
417  if (dot && (!_tcsicmp(dot, _T(".cmd"))))
418  {
419  BatType = CMD_TYPE;
420  }
421 
422 #ifdef MSCMD_BATCH_ECHO
423  bBcEcho = bEcho;
424 #endif
425  }
426 
427  /* If this is a "CALL :label args ...", call a subroutine of
428  * the current batch file, only if extensions are enabled. */
429  if (bEnableExtensions && (*firstword == _T(':')))
430  {
431  LPTSTR expLabel;
432 
433  /* Position at the place of the parent file (which is the same as the caller) */
434  bc->mempos = (bc->prev ? bc->prev->mempos : 0);
435 
436  /*
437  * Jump to the label. Strip the label's colon; as a side-effect
438  * this will forbid "CALL :EOF"; however "CALL ::EOF" will work!
439  */
440  bc->current = Cmd;
441  ++firstword;
442 
443  /* Expand the label only! (simulate a GOTO command as in Windows' CMD) */
444  expLabel = DoDelayedExpansion(firstword);
445  ret = cmd_goto(expLabel ? expLabel : firstword);
446  if (expLabel)
447  cmd_free(expLabel);
448  }
449 
450  /* If we have created a new context, don't return
451  * until this batch file has completed. */
452  while (bc == &new && !bExit)
453  {
454  Cmd = ParseCommand(NULL);
455  if (!Cmd)
456  {
457  if (!bParseError)
458  continue;
459 
460  /* Echo the pre-parsed batch file line on error */
461  if (bEcho && !bDisableBatchEcho)
462  {
463  if (!bIgnoreEcho)
464  ConOutChar(_T('\n'));
465  PrintPrompt();
467  ConOutChar(_T('\n'));
468  }
469  /* Stop all execution */
470  ExitAllBatches();
471  ret = 1;
472  break;
473  }
474 
475  /* JPP 19980807 */
476  /* Echo the command and execute it */
477  bc->current = Cmd;
479  FreeCommand(Cmd);
480  }
481  if (bExit)
482  {
483  /* Stop all execution */
484  ExitAllBatches();
485  }
486 
487  /* Perform top-level batch cleanup */
488  if (!bc || bTopLevel)
489  {
490  /* Reset the top-level batch context type */
491  BatType = NONE;
492 
493 #ifdef MSCMD_BATCH_ECHO
494  bEcho = bBcEcho;
495 #endif
496  }
497 
498  /* Restore the FOR variables */
499  fc = saved_fc;
500 
501  /* Always return the last command's return code */
502  TRACE("Batch: returns %d\n", ret);
503  return ret;
504 }
INT nErrorLevel
Definition: cmd.c:158
#define NONE
Definition: ntddpar.h:94
#define CloseHandle
Definition: compat.h:598
TCHAR BatchFilePath[MAX_PATH]
Definition: batch.h:33
DWORD mempos
Definition: batch.h:31
BOOL bIgnoreEcho
Definition: cmd.c:155
#define _tcsicmp
Definition: xmlstorage.h:205
PTSTR DoDelayedExpansion(IN PCTSTR Line)
Definition: cmd.c:1638
Definition: batch.h:18
#define TRUE
Definition: types.h:120
VOID ConOutChar(TCHAR c)
Definition: console.c:123
INT cmd_goto(LPTSTR)
Definition: goto.c:36
INT ExecuteCommandWithEcho(IN PARSED_COMMAND *Cmd)
Definition: cmd.c:864
#define ConErrResPuts(uID)
Definition: console.h:39
VOID AddBatchRedirection(REDIRECTION **RedirList)
Definition: batch.c:506
#define debugstr_aw
Definition: precomp.h:43
BOOL bEcho
Definition: batch.c:73
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
PARSED_COMMAND * ParseCommand(IN PCTSTR Line)
Definition: parser.c:1461
int32_t INT
Definition: typedefs.h:58
CHAR * LPTSTR
Definition: xmlstorage.h:192
#define FILE_SHARE_READ
Definition: compat.h:136
LPTSTR params
Definition: batch.h:34
VOID FreeCommand(IN OUT PARSED_COMMAND *Cmd)
Definition: parser.c:527
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static BOOL BatchParams(IN PCTSTR Arg0, IN PCTSTR Args, OUT PTSTR *RawParams, OUT PTSTR *ParamList)
Definition: batch.c:120
#define FALSE
Definition: types.h:117
INT shiftlevel[10]
Definition: batch.h:36
VOID ExitAllBatches(VOID)
Definition: batch.c:262
struct _SETLOCAL * setlocal
Definition: batch.h:42
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
VOID ExitBatch(VOID)
Definition: batch.c:223
#define OPEN_EXISTING
Definition: compat.h:634
Definition: batch.h:19
char TCHAR
Definition: xmlstorage.h:189
#define _T(x)
Definition: vfdio.h:22
BATCH_TYPE BatType
Definition: batch.c:66
#define TRACE(s)
Definition: solgame.cpp:4
if(!(yy_init))
Definition: macro.lex.yy.c:714
static VOID ClearBatch(VOID)
Definition: batch.c:199
GLfloat param
Definition: glext.h:5796
#define MAX_PATH
Definition: compat.h:34
BOOL bDisableBatchEcho
Definition: cmd.c:160
#define SetLastError(x)
Definition: compat.h:611
struct _BATCH_CONTEXT * prev
Definition: batch.h:28
BOOL bEnableExtensions
Definition: cmd.c:161
PFOR_CONTEXT fc
Definition: for.c:57
int ret
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
const char * fullname
Definition: shader.c:1766
Definition: sacdrv.h:277
#define GetFullPathName
Definition: winbase.h:3661
#define GENERIC_READ
Definition: compat.h:135
_In_ HANDLE hFile
Definition: mswsock.h:90
BOOL bBcEcho
Definition: batch.c:70
char * mem
Definition: batch.h:29
LPTSTR raw_params
Definition: batch.h:35
#define cmd_free(ptr)
Definition: cmddbg.h:31
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
Definition: fatprocs.h:913
#define FILE_FLAG_SEQUENTIAL_SCAN
Definition: disk.h:43
PARSED_COMMAND * current
Definition: batch.h:41
BOOL bExit
Definition: cmd.c:152
_TCHAR * _tcsrchr(const _TCHAR *s, _XINT c)
Definition: tcsrchr.h:4
PBATCH_CONTEXT bc
Definition: batch.c:67
static void BatchFile2Mem(HANDLE hBatchFile)
Definition: batch.c:271
REDIRECTION * RedirList
Definition: batch.h:40
VOID PrintPrompt(VOID)
Definition: prompt.c:109
DWORD memsize
Definition: batch.h:30
BOOL bParseError
Definition: parser.c:90
VOID ConOutPuts(LPTSTR szText)
Definition: tee.c:27
#define STRING_BATCH_ERROR
Definition: resource.h:23
TCHAR ParseLine[CMDLINE_LENGTH]
Definition: parser.c:92

◆ BatchGetString()

BOOL BatchGetString ( LPTSTR  lpBuffer,
INT  nBufferLength 
)

Definition at line 526 of file batch.c.

527 {
528  LPSTR lpString;
529  INT len = 0;
530 #ifdef _UNICODE
531  lpString = cmd_alloc(nBufferLength);
532  if (!lpString)
533  {
534  WARN("Cannot allocate memory for lpString\n");
536  return FALSE;
537  }
538 #else
539  lpString = lpBuffer;
540 #endif
541  /* read all chars from memory until a '\n' is encountered */
542  if (bc->mem)
543  {
544  for (; (bc->mempos < bc->memsize && len < (nBufferLength-1)); len++)
545  {
546  lpString[len] = bc->mem[bc->mempos++];
547  if (lpString[len] == '\n' )
548  {
549  len++;
550  break;
551  }
552  }
553  }
554 
555  if (!len)
556  {
557 #ifdef _UNICODE
558  cmd_free(lpString);
559 #endif
560  return FALSE;
561  }
562 
563  lpString[len++] = '\0';
564 #ifdef _UNICODE
565  MultiByteToWideChar(OutputCodePage, 0, lpString, -1, lpBuffer, len);
566  cmd_free(lpString);
567 #endif
568  return TRUE;
569 }
DWORD mempos
Definition: batch.h:31
#define TRUE
Definition: types.h:120
#define WARN(fmt,...)
Definition: debug.h:112
char * LPSTR
Definition: xmlstorage.h:182
int32_t INT
Definition: typedefs.h:58
#define FALSE
Definition: types.h:117
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:173
VOID error_out_of_memory(VOID)
Definition: error.c:138
_In_ LPCSTR _In_opt_ LPCSTR _In_ DWORD nBufferLength
Definition: winbase.h:3034
UINT OutputCodePage
Definition: console.c:26
GLenum GLsizei len
Definition: glext.h:6722
char * mem
Definition: batch.h:29
#define cmd_alloc(size)
Definition: cmddbg.h:29
#define cmd_free(ptr)
Definition: cmddbg.h:31
#define MultiByteToWideChar
Definition: compat.h:110
PBATCH_CONTEXT bc
Definition: batch.c:67
DWORD memsize
Definition: batch.h:30

Referenced by cmd_goto(), and ReadBatchLine().

◆ ExitAllBatches()

VOID ExitAllBatches ( VOID  )

Definition at line 262 of file batch.c.

263 {
264  while (bc)
265  ExitBatch();
266 }
VOID ExitBatch(VOID)
Definition: batch.c:223
PBATCH_CONTEXT bc
Definition: batch.c:67

Referenced by Batch(), and ReadBatchLine().

◆ ExitBatch()

VOID ExitBatch ( VOID  )

Definition at line 223 of file batch.c.

224 {
225  ClearBatch();
226 
227  TRACE("ExitBatch\n");
228 
231 
232 #ifndef MSCMD_BATCH_ECHO
233  /* Preserve echo state across batch calls */
234  bEcho = bc->bEcho;
235 #endif
236 
237  while (bc->setlocal)
238  cmd_endlocal(_T(""));
239 
240  bc = bc->prev;
241 
242 #if 0
243  /* Do not process any more parts of a compound command */
244  bc->current = NULL;
245 #endif
246 
247  /* If there is no more batch contexts, notify the signal handler */
248  if (!bc)
249  {
251  BatType = NONE;
252 
253 #ifdef MSCMD_BATCH_ECHO
254  bEcho = bBcEcho;
255 #endif
256  }
257 }
BOOL CheckCtrlBreak(INT)
Definition: misc.c:132
#define NONE
Definition: ntddpar.h:94
BOOL bEcho
Definition: batch.c:73
INT cmd_endlocal(LPTSTR)
Definition: setlocal.c:110
struct _SETLOCAL * setlocal
Definition: batch.h:42
smooth NULL
Definition: ftsmooth.c:416
#define _T(x)
Definition: vfdio.h:22
BATCH_TYPE BatType
Definition: batch.c:66
#define TRACE(s)
Definition: solgame.cpp:4
static VOID ClearBatch(VOID)
Definition: batch.c:199
struct _BATCH_CONTEXT * prev
Definition: batch.h:28
VOID UndoRedirection(REDIRECTION *, REDIRECTION *End)
Definition: redir.c:142
BOOL bBcEcho
Definition: batch.c:70
PARSED_COMMAND * current
Definition: batch.h:41
#define BREAK_OUTOFBATCH
Definition: cmd.h:35
VOID FreeRedirection(REDIRECTION *)
Definition: redir.c:153
PBATCH_CONTEXT bc
Definition: batch.c:67
REDIRECTION * RedirList
Definition: batch.h:40

Referenced by Batch(), cmd_goto(), ExitAllBatches(), and ReadBatchLine().

◆ FindArg()

BOOL FindArg ( IN TCHAR  Char,
OUT PCTSTR ArgPtr,
OUT BOOL IsParam0 
)

Definition at line 85 of file batch.c.

89 {
90  PCTSTR pp;
91  INT n = Char - _T('0');
92 
93  TRACE("FindArg: (%d)\n", n);
94 
95  *ArgPtr = NULL;
96 
97  if (n < 0 || n > 9)
98  return FALSE;
99 
100  n = bc->shiftlevel[n];
101  *IsParam0 = (n == 0);
102  pp = bc->params;
103 
104  /* Step up the strings till we reach
105  * the end or the one we want. */
106  while (*pp && n--)
107  pp += _tcslen(pp) + 1;
108 
109  *ArgPtr = pp;
110  return TRUE;
111 }
LPCSTR PCTSTR
Definition: ntbasedef.h:489
#define TRUE
Definition: types.h:120
GLdouble n
Definition: glext.h:7729
int32_t INT
Definition: typedefs.h:58
LPTSTR params
Definition: batch.h:34
#define FALSE
Definition: types.h:117
INT shiftlevel[10]
Definition: batch.h:36
#define pp
Definition: hlsl.yy.c:1208
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
smooth NULL
Definition: ftsmooth.c:416
#define _T(x)
Definition: vfdio.h:22
#define TRACE(s)
Definition: solgame.cpp:4
PBATCH_CONTEXT bc
Definition: batch.c:67

Referenced by GetBatchVar().

◆ ReadBatchLine()

LPTSTR ReadBatchLine ( VOID  )

Definition at line 579 of file batch.c.

580 {
581  TRACE("ReadBatchLine()\n");
582 
583  /* User halt */
585  {
586  ExitAllBatches();
587  return NULL;
588  }
589 
591  {
592  TRACE("ReadBatchLine(): Reached EOF!\n");
593  /* End of file */
594  ExitBatch();
595  return NULL;
596  }
597 
598  TRACE("ReadBatchLine(): textline: \'%s\'\n", debugstr_aw(textline));
599 
600 #if 1
601  //
602  // FIXME: This is redundant, but keep it for the moment until we correctly
603  // hande the end-of-file situation here, in ReadLine() and in the parser.
604  // (In an EOF, the previous BatchGetString() call will return FALSE but
605  // we want not to run the ExitBatch() at first, but wait later to do it.)
606  //
607  if (textline[_tcslen(textline) - 1] != _T('\n'))
608  _tcscat(textline, _T("\n"));
609 #endif
610 
611  return textline;
612 }
BOOL CheckCtrlBreak(INT)
Definition: misc.c:132
#define BREAK_BATCHFILE
Definition: cmd.h:34
#define debugstr_aw
Definition: precomp.h:43
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
BOOL BatchGetString(LPTSTR lpBuffer, INT nBufferLength)
Definition: batch.c:526
VOID ExitAllBatches(VOID)
Definition: batch.c:262
size_t __cdecl _tcslen(const _TCHAR *str)
Definition: tcslen.h:9
smooth NULL
Definition: ftsmooth.c:416
VOID ExitBatch(VOID)
Definition: batch.c:223
TCHAR textline[BATCH_BUFFSIZE]
Definition: batch.c:76
#define _T(x)
Definition: vfdio.h:22
#define TRACE(s)
Definition: solgame.cpp:4
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
Definition: tcscat.h:8

Referenced by ReadLine().

Variable Documentation

◆ BatType

BATCH_TYPE BatType

Definition at line 66 of file batch.c.

Referenced by Batch(), cmd_path(), cmd_prompt(), cmd_set(), CommandAssoc(), and ExitBatch().

◆ bBcEcho

BOOL bBcEcho

Definition at line 70 of file batch.c.

Referenced by Batch(), and ExitBatch().

◆ bc

◆ bEcho

BOOL bEcho

Definition at line 73 of file batch.c.

Referenced by Batch(), CommandEcho(), ExecuteCommandWithEcho(), ExitBatch(), ReadFromConsole(), and ReadLine().

◆ fc

◆ textline

TCHAR textline[BATCH_BUFFSIZE]

Definition at line 76 of file batch.c.

Referenced by cmd_goto(), and ReadBatchLine().