This functionality is: case insensitivity comparisons (/I);
CMDEXTVERSION and DEFINED unary operators; EQU, NEQ, LSS, LEQ, GTR, GEQ
generic string comparators.
We note two things, when CMD searches for the corresponding label in the
batch file:
- the first character of the line is always ignored, unless it's a colon;
- the escape caret ^ is supported and interpreted.
Fixes some cmd_winetests.
CORE-13713 CORE-13736
- In case execution of all batch contexts is stopped (by selecting "All"
at the Ctrl-C/Ctrl-Break prompt), notify as well the CheckCtrlBreak()
signal handler once there are no more batch contexts (this in effect
resets the internal 'bLeaveAll' static flag in CheckCtrlBreak).
This is an adaptation of the fix present in FreeCOM 1.5, first
described in https://gcfl.net/FreeDOS/command.com/bugs074g.html .
- Introduce a ParseErrorEx() helper that sets the 'bParseError' flag and
displays a customized syntax-error message, only for the first syntax
error encountered. Implement ParseError() around the *Ex function.
- In batch mode, echo the original pre-parsed batch file line if a parse
error has been encountered.
- When running a compound command - including IF, FOR, command blocks -,
and that control flow is modified by any CALL/GOTO/EXIT command,
detect this while running the compound command so as to stop it and go
back to the main batch execution loop, that will then set up the actual
new command to run.
- In GOTO, do not process any more parts of a compound command only when
we have found a valid label.
- Use a common large string buffer for temporary command substitutions/expansions,
instead of having such a buffer in the local stack of the parsing and
echoing functions that may be called recursively. Since CMD executes
synchronously we know that this common buffer can only be used once at
a time.
- Also do a small code cleanup in ParseIf(), ParseFor() and ParseCommandPart().
Add a MSCMD_ECHO_COMMAND_COMPAT define to be able to switch back to our
older but less broken behaviour at compile-time.
- Append a trailing space to commands when those have a parameter,
as well as after a command-block closing parenthesis.
- Space around redirection strings need to be switched around.
- Use ConOutPuts() instead of ConOutPrintf() for displaying strings that
are not printf formatted.
- When echo-ing/unparsing FOR command, any possible FOR variables
present in the FOR parenthesized list (before the "do" part) should be
substituted as well.