/*
 * the format strings may be:
 *              .*                      must match exactly
 *              .*\*.*          head and tail must match, with wild card in middle
 *              .*#                     head must match. tail can either be adjacent or next word
 *      at the moment '-' is not treated specialy
 *  note that 'middle' may be at either end since '.*' matches null.
 */

#define TAKESARG  0x20           /* tag to indicate argument or not */
#define FLAG      1              /* set the flag */
#define STRING    2 | TAKESARG   /* set the string, either from here, or next word */
#define SUBSTR    3 | TAKESARG   /* set single letter flags from substring */
#define NUMBER    4 | TAKESARG   /* set read in the number */
#define UNFLAG    5              /* turn the flag off */
#define PSHSTR    6 | TAKESARG   /* like string, but puts it on a LIST structure */
#define NOVSTR    7 | TAKESARG   /* like string, but complains about overwriting */

#define NUM_ARGS                50   /* Limit of flags passed from driver to pass */
#define MSC_ENVFLAGS            "MSC_CMD_FLAGS"
            /* Environment variable flags passed in, used for getenv() */
#define PUT_MSC_ENVFLAGS        "MSC_CMD_FLAGS="
            /* Environment variable flags passed in, used for putenv() */

/* return values from getflags */
#define R_SWITCH        1
#define R_CFILE         2
#define R_ASMFILE       3
#define R_OBJFILE       4
#define R_ERROR         5
#define R_FILE          6
#define R_EXIT          7
#define R_FFILE         8
#define R_PFILE         9
#define R_AFILE         10
#define R_OFILE         11
/* r. nevin, 1/11/85 */
#define R_HELP          12
/* b. nguyen, 4/7/86 */
#define R_HELPC         13
#define R_HELPF         14

struct cmdtab
        {
        WCHAR *format;           /* format matching string */
        char  *flag;             /* pointer to what to fill in */
/*  this is really a
 *      union
 *              {
 *              WCHAR **str;
 *              int  *flag;
 *              struct subtab *sub;
 *              struct LIST *list;
 *              } cm;
 *      but you cant initialize unions so we have to fake it.
 */
        char retval;            /* crack_cmd will return whatever is here */
        UCHAR type;             /* control mask */
        };

struct subtab
        {
        int letter;
        int type;
        int *flag;
        };