7 #define C_OP_LOWEST C_MULTI 8 #define C_OP_HIGHEST C_PIPE 19 #define IF_MAX_UNARY IF_EXIST 27 #define IF_MAX_COMPARISON IF_NEQ 31 #define STANDARD_SEPS _T(",;=") 75 while (Char ==
_T(
'\r'));
115 bInQuote ^= (Char ==
_T(
'"'));
118 if (Separators !=
NULL)
130 if ((Char >=
_T(
'0') && Char <=
_T(
'9') &&
137 if (Char == ExtraEnd)
148 if (Char ==
_T(
'\n'))
164 else if (Char ==
_T(
'('))
170 else if (Char ==
_T(
')'))
176 else if (Char ==
_T(
'&') || Char ==
_T(
'|'))
188 else if ((Char >=
_T(
'0') && Char <=
_T(
'9'))
189 || (Char ==
_T(
'<') || Char ==
_T(
'>')))
192 if (Char >=
_T(
'0') && Char <=
_T(
'9'))
211 if (Char >=
_T(
'0') && Char <=
_T(
'9'))
233 if (*Tok >=
_T(
'0') && *Tok <=
_T(
'9'))
238 if (*Tok++ ==
_T(
'<'))
263 while ((Redir = *
List))
277 WARN(
"Cannot allocate memory for Redir!\n");
283 Redir->
Mode = RedirMode;
305 WARN(
"Cannot allocate memory for Cmd!\n");
313 Cmd->Redirections = RedirList;
316 NextPtr = &
Cmd->Subcommands;
324 NextPtr = &Sub->
Next;
362 WARN(
"Cannot allocate memory for Cmd!\n");
440 if (
Cmd->Subcommands->Next ==
NULL)
463 WARN(
"Cannot allocate memory for Cmd!\n");
477 if (!
Cmd->For.Params)
490 if (!
Cmd->For.Params)
506 if ((
Cmd->For.Switches & (
Cmd->For.Switches - 1)) != 0
642 WARN(
"Cannot allocate memory for Cmd!\n");
650 Cmd->Redirections = RedirList;
652 Cmd->Command.Rest =
Cmd->Command.First + TailOffset;
687 WARN(
"Cannot allocate memory for Cmd!\n");
748 WARN(
"Cannot allocate memory for Cmd!\n");
757 Cmd->Subcommands = Left;
829 Sub =
Cmd->Subcommands;
830 if (Sub && !Sub->
Next)
852 Sub =
Cmd->Subcommands;
868 Sub =
Cmd->Subcommands;
889 for (Redir =
Cmd->Redirections; Redir; Redir = Redir->
Next)
918 if (Out == OutEnd) return NULL; \ 921 #define STRING(String) \ 923 if (Out + _tcslen(String) > OutEnd) return NULL; \ 924 Out = _stpcpy(Out, String); \ 926 #define PRINTF(Format, ...) \ 928 UINT Len = _sntprintf(Out, OutEnd - Out, Format, __VA_ARGS__); \ 929 if (Len > (UINT)(OutEnd - Out)) return NULL; \ 932 #define RECURSE(Subcommand) \ 934 Out = Unparse(Subcommand, Out, OutEnd); \ 935 if (!Out) return NULL; \ 955 for (Sub =
Cmd->Subcommands; Sub; Sub = Sub->
Next)
967 Sub =
Cmd->Subcommands;
983 Sub =
Cmd->Subcommands;
999 PRINTF(
_T(
" %%%c in (%s) do "),
Cmd->For.Variable,
Cmd->For.List);
1004 for (Redir =
Cmd->Redirections; Redir; Redir = Redir->
Next)
1017 if (
Cmd->Subcommands)
static int CurrentTokenType
static DECLSPEC_NOINLINE PARSED_COMMAND * ParseCommandPart(REDIRECTION *RedirList)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
#define RECURSE(Subcommand)
enum _REDIR_MODE REDIR_MODE
#define IFFLAG_IGNORECASE
static TCHAR CurrentToken[CMDLINE_LENGTH]
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
static PARSED_COMMAND * ParseBlock(REDIRECTION *RedirList)
#define INVALID_HANDLE_VALUE
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
BOOL SubstituteVars(TCHAR *Src, TCHAR *Dest, TCHAR Delim)
#define ConOutPrintf(szStr,...)
static BOOL IsSeparator(TCHAR Char)
VOID FreeCommand(PARSED_COMMAND *Cmd)
static VOID StripQuotes(LPSTR in)
struct _PARSED_COMMAND * Next
static int ParseToken(TCHAR ExtraEnd, TCHAR *Separators)
IN PVCB IN PBCB OUT PDIRENT IN USHORT IN POEM_STRING Filename
static BOOL bLineContinuations
static PARSED_COMMAND * ParseFor(void)
static BOOL ParseRedirection(REDIRECTION **List)
LPTSTR _stpcpy(LPTSTR, LPCTSTR)
#define PRINTF(Format,...)
size_t __cdecl _tcslen(const _TCHAR *str)
static PARSED_COMMAND * ParseIf(void)
_TCHAR * _tcschr(const _TCHAR *s, _XINT c)
PARSED_COMMAND * ParseCommand(LPTSTR Line)
void restart(int argc, const char *argv[])
static PARSED_COMMAND * ParseRem(void)
static TCHAR ParseLine[CMDLINE_LENGTH]
static const TCHAR *const IfOperatorString[]
static TCHAR ParseChar(void)
BOOL ReadLine(TCHAR *commandline, BOOL bMore)
static const TCHAR RedirString[][3]
#define memcpy(s1, s2, n)
static PARSED_COMMAND * ParseCommandOp(int OpType)
TCHAR * Unparse(PARSED_COMMAND *Cmd, TCHAR *Out, TCHAR *OutEnd)
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
BOOL SubstituteForVars(TCHAR *Src, TCHAR *Dest)
VOID error_syntax(LPTSTR)
static void ParseError(void)
#define FIELD_OFFSET(t, f)
static const TCHAR OpString[][3]
VOID FreeRedirection(REDIRECTION *)
struct _REDIRECTION * Next
#define IF_MAX_COMPARISON
#define DECLSPEC_NOINLINE
VOID EchoCommand(PARSED_COMMAND *Cmd)
static PARSED_COMMAND * ParsePrimary(void)