You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.9 KiB
78 lines
2.9 KiB
/******************************Module*Header*******************************\
|
|
* Module Name: extparse.hxx
|
|
*
|
|
* Copyright (c) 1998-2000 Microsoft Corporation
|
|
*
|
|
* asecchia 7-21-98
|
|
* Wrote it.
|
|
*
|
|
* These routines are designed to help in parsing debugger extensions.
|
|
*
|
|
\**************************************************************************/
|
|
|
|
#ifndef DBG_EXT_PARSE
|
|
#define DBG_EXT_PARSE
|
|
|
|
int parse_Tokenizer(char *cmdstr, char **tok);
|
|
int parse_FindNonSwitch(char **tok, int ntok, int start=0);
|
|
|
|
int parse_IsToken(char **tok, int tok_pos, char *chk);
|
|
int parse_iIsToken(char **tok, int tok_pos, char *chk);
|
|
|
|
int parse_FindToken(char **tok, int ntok, char *srchtok);
|
|
int parse_iFindToken(char **tok, int ntok, char *srchtok);
|
|
|
|
int parse_IsSwitch(char **tok, int tok_pos, char sw);
|
|
int parse_iIsSwitch(char **tok, int tok_pos, char sw);
|
|
int parse_FindSwitch(char **tok, int ntok, char sw);
|
|
int parse_iFindSwitch(char **tok, int ntok, char sw);
|
|
|
|
|
|
|
|
/*
|
|
* Parse the arguments passed to the extension
|
|
* Automatically handle the -? option
|
|
*/
|
|
#define PARSE_ARGUMENTS(ext_label) \
|
|
char tmp_args[200]; \
|
|
char *tokens[40]; \
|
|
int ntok, tok_pos; \
|
|
strcpy(tmp_args, args); \
|
|
ntok = parse_Tokenizer(tmp_args, tokens); \
|
|
if(ntok>0) { \
|
|
tok_pos=parse_FindSwitch(tokens, ntok, '?'); \
|
|
if(tok_pos>=0) { \
|
|
goto ext_label; \
|
|
} \
|
|
} \
|
|
tok_pos=0
|
|
|
|
/*
|
|
* Parse the arguments assuming a required parameter
|
|
* which is a pointer to be parsed with the expression
|
|
* handler.
|
|
*/
|
|
#define PARSE_POINTER(ext_label) \
|
|
ULONG64 arg; \
|
|
DEBUG_VALUE DbgValArg; \
|
|
PARSE_ARGUMENTS(ext_label); \
|
|
if (ntok < 1) { goto ext_label; } \
|
|
tok_pos = parse_FindNonSwitch(tokens, ntok); \
|
|
if (tok_pos == -1) { goto ext_label; } \
|
|
if (ExtQuery(Client) != S_OK) { goto ext_label; } \
|
|
if (g_pExtControl-> \
|
|
Evaluate(tokens[tok_pos], \
|
|
DEBUG_VALUE_INT64, \
|
|
&DbgValArg, \
|
|
NULL) == S_OK) \
|
|
{ \
|
|
arg = DbgValArg.I64; \
|
|
} \
|
|
else \
|
|
{ \
|
|
arg = 0; \
|
|
} \
|
|
ExtRelease()
|
|
|
|
#endif
|
|
|