[CMD] Add a ExecuteCommandWithEcho() helper and use it in Batch() and as the implementation of RunInstance() FOR-loop helper.

This commit is contained in:
Hermès Bélusca-Maïto 2020-05-18 02:03:15 +02:00
parent ce543fbb72
commit 240f6737e9
No known key found for this signature in database
GPG Key ID: 3B2539C65E7B93D0
4 changed files with 34 additions and 26 deletions

View File

@ -353,18 +353,9 @@ INT Batch(LPTSTR fullname, LPTSTR firstword, LPTSTR param, PARSED_COMMAND *Cmd)
continue;
/* JPP 19980807 */
/* Echo batch file line */
if (bEcho && !bDisableBatchEcho && Cmd->Type != C_QUIET)
{
if (!bIgnoreEcho)
ConOutChar(_T('\n'));
PrintPrompt();
EchoCommand(Cmd);
ConOutChar(_T('\n'));
}
/* Echo the command and execute it */
bc->current = Cmd;
ret = ExecuteCommand(Cmd);
ret = ExecuteCommandWithEcho(Cmd);
FreeCommand(Cmd);
}

View File

@ -769,7 +769,8 @@ failed:
}
INT
ExecuteCommand(PARSED_COMMAND *Cmd)
ExecuteCommand(
IN PARSED_COMMAND *Cmd)
{
PARSED_COMMAND *Sub;
LPTSTR First, Rest;
@ -830,6 +831,24 @@ ExecuteCommand(PARSED_COMMAND *Cmd)
return Ret;
}
INT
ExecuteCommandWithEcho(
IN PARSED_COMMAND *Cmd)
{
/* Echo the reconstructed command line */
if (bEcho && !bDisableBatchEcho && Cmd->Type != C_QUIET)
{
if (!bIgnoreEcho)
ConOutChar(_T('\n'));
PrintPrompt();
EchoCommand(Cmd);
ConOutChar(_T('\n'));
}
/* Run the command */
return ExecuteCommand(Cmd);
}
LPTSTR
GetEnvVar(LPCTSTR varName)
{

View File

@ -80,7 +80,15 @@ INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, UINT len, BOOL bPutSeparator
HANDLE RunFile(DWORD, LPTSTR, LPTSTR, LPTSTR, INT);
INT ParseCommandLine(LPTSTR);
struct _PARSED_COMMAND;
INT ExecuteCommand(struct _PARSED_COMMAND *Cmd);
INT
ExecuteCommand(
IN struct _PARSED_COMMAND *Cmd);
INT
ExecuteCommandWithEcho(
IN struct _PARSED_COMMAND *Cmd);
LPCTSTR GetEnvVarOrSpecial ( LPCTSTR varName );
VOID AddBreakHandler (VOID);
VOID RemoveBreakHandler (VOID);

View File

@ -69,19 +69,9 @@ static BOOL GetNextElement(TCHAR **pStart, TCHAR **pEnd)
}
/* Execute a single instance of a FOR command */
static INT RunInstance(PARSED_COMMAND *Cmd)
{
if (bEcho && !bDisableBatchEcho && Cmd->Subcommands->Type != C_QUIET)
{
if (!bIgnoreEcho)
ConOutChar(_T('\n'));
PrintPrompt();
EchoCommand(Cmd->Subcommands);
ConOutChar(_T('\n'));
}
/* Just run the command (variable expansion is done in DoDelayedExpansion) */
return ExecuteCommand(Cmd->Subcommands);
}
/* Just run the command (variable expansion is done in DoDelayedExpansion) */
#define RunInstance(Cmd) \
ExecuteCommandWithEcho((Cmd)->Subcommands)
/* Check if this FOR should be terminated early */
static BOOL Exiting(PARSED_COMMAND *Cmd)