mirror of
https://github.com/reactos/reactos.git
synced 2024-07-02 02:34:53 +00:00
allow nested (...) blocks (but still no support for else)
svn path=/trunk/; revision=32065
This commit is contained in:
parent
4a894bb597
commit
8f8faff777
|
@ -272,8 +272,8 @@ BOOL Batch (LPTSTR fullname, LPTSTR firstword, LPTSTR param)
|
||||||
SetFilePointer (bc->hBatchFile, 0, NULL, FILE_BEGIN);
|
SetFilePointer (bc->hBatchFile, 0, NULL, FILE_BEGIN);
|
||||||
bc->bEcho = bEcho; /* Preserve echo across batch calls */
|
bc->bEcho = bEcho; /* Preserve echo across batch calls */
|
||||||
bc->shiftlevel = 0;
|
bc->shiftlevel = 0;
|
||||||
bc->bCmdBlock = FALSE;
|
bc->bCmdBlock = -1;
|
||||||
|
|
||||||
bc->ffind = NULL;
|
bc->ffind = NULL;
|
||||||
bc->forvar = _T('\0');
|
bc->forvar = _T('\0');
|
||||||
bc->forproto = NULL;
|
bc->forproto = NULL;
|
||||||
|
@ -454,15 +454,25 @@ LPTSTR ReadBatchLine (LPBOOL bLocalEcho)
|
||||||
*++ip = _T('\0');
|
*++ip = _T('\0');
|
||||||
|
|
||||||
/* cmd block over multiple lines (..) */
|
/* cmd block over multiple lines (..) */
|
||||||
if (bc->bCmdBlock)
|
if (bc->bCmdBlock >= 0)
|
||||||
{
|
{
|
||||||
if (*first == _T(')'))
|
if (*first == _T(')'))
|
||||||
{
|
{
|
||||||
bc->bCmdBlock = FALSE;
|
bc->bCmdBlock--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!bc->bExecuteBlock)
|
if ((bc->bCmdBlock >= 0) && (bc->bCmdBlock < MAX_PATH))
|
||||||
continue;
|
if (!bc->bExecuteBlock[bc->bCmdBlock])
|
||||||
|
{
|
||||||
|
/* increase the bCmdBlock count when there is another conditon which opens a new bracket */
|
||||||
|
if ((_tcsncicmp (first, _T("if"), 2) == 0) && _tcschr(first, _T('(')))
|
||||||
|
{
|
||||||
|
bc->bCmdBlock++;
|
||||||
|
if ((bc->bCmdBlock > 0) && (bc->bCmdBlock < MAX_PATH))
|
||||||
|
bc->bExecuteBlock[bc->bCmdBlock] = bc->bExecuteBlock[bc->bCmdBlock - 1];
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ignore labels and empty lines */
|
/* ignore labels and empty lines */
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#ifndef _BATCH_H_INCLUDED_
|
#ifndef _BATCH_H_INCLUDED_
|
||||||
#define _BATCH_H_INCLUDED_
|
#define _BATCH_H_INCLUDED_
|
||||||
|
|
||||||
|
|
||||||
typedef struct tagBATCHCONTEXT
|
typedef struct tagBATCHCONTEXT
|
||||||
{
|
{
|
||||||
struct tagBATCHCONTEXT *prev;
|
struct tagBATCHCONTEXT *prev;
|
||||||
|
@ -23,8 +22,8 @@ typedef struct tagBATCHCONTEXT
|
||||||
TCHAR Out[MAX_PATH];
|
TCHAR Out[MAX_PATH];
|
||||||
TCHAR Err[MAX_PATH];
|
TCHAR Err[MAX_PATH];
|
||||||
TCHAR forvar;
|
TCHAR forvar;
|
||||||
BOOL bCmdBlock;
|
INT bCmdBlock;
|
||||||
BOOL bExecuteBlock;
|
BOOL bExecuteBlock[MAX_PATH];
|
||||||
} BATCH_CONTEXT, *LPBATCH_CONTEXT;
|
} BATCH_CONTEXT, *LPBATCH_CONTEXT;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -188,8 +188,13 @@ INT cmd_if (LPTSTR cmd, LPTSTR param)
|
||||||
{
|
{
|
||||||
if (bc)
|
if (bc)
|
||||||
{
|
{
|
||||||
bc->bCmdBlock = TRUE;
|
pp++;
|
||||||
bc->bExecuteBlock = x_flag & X_EXEC;
|
bc->bCmdBlock++;
|
||||||
|
if ((bc->bCmdBlock >= 0) && (bc->bCmdBlock < MAX_PATH))
|
||||||
|
bc->bExecuteBlock[bc->bCmdBlock] = x_flag & X_EXEC;
|
||||||
|
/* commands are in the next lines */
|
||||||
|
if (*pp == _T('\0'))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue