www.pudn.com > BAWK_NEW.zip > BAWK.H


/* 
 * Bawk constants and variable declarations. 
 */ 
#ifdef BDS_C 
#define EXTERN /* */ 
#else 
 
#ifdef MAIN 
#define EXTERN /* */ 
#else 
#define EXTERN extern 
#endif 
 
#endif 
 
 
#define DEBUG 1     /* remove this line to compile without debug statements */ 
#ifdef DEBUG 
EXTERN char Debug;       /* debug print flag */ 
#endif 
 
/* 
 * Table and buffer sizes 
 */ 
#define MAXLINELEN  128  /* longest input line */ 
#define MAXWORDS    (MAXLINELEN/2) /* max # of words in a line */ 
#define MAXWORKBUFLEN    4096 /* longest action or regular expression */ 
#define MAXVARTABSZ 50   /* max # of symbols */ 
#define MAXVARLEN   10   /* symbol name length */ 
#define MAXSTACKSZ  40   /* max value stack length (for expressions) */ 
 
 
/********************************************************** 
 * Current Input File variables                           * 
 **********************************************************/ 
/* 
 * Current Input File pointer: 
 */ 
#ifdef BDS_C 
EXTERN char *Fileptr, Curfbuf[ BUFSIZ ]; 
#else 
EXTERN FILE *Fileptr; 
#endif 
EXTERN char *Filename;        /* current input file name */ 
EXTERN int Linecount;         /* current input line number */ 
EXTERN int Recordcount;       /* record count */ 
/* 
 * Working buffers. 
 */ 
EXTERN char Linebuf[ MAXLINELEN ]; /* current input line buffer */ 
EXTERN char *Fields[ MAXWORDS ];        /* pointers to the words in Linebuf */ 
EXTERN int Fieldcount;             /* and the # of words */ 
EXTERN char Workbuf[ MAXWORKBUFLEN ];   /* work area for C action and */ 
                         /* regular expression parsers */ 
 
/********************************************************** 
 * Regular Expression Parser variables                    * 
 **********************************************************/ 
/* 
 * Tokens: 
 */ 
#define CHAR   1 
#define BOL    2 
#define EOL    3 
#define ANY    4 
#define CLASS  5 
#define NCLASS 6 
#define STAR   7 
#define PLUS   8 
#define MINUS  9 
#define ALPHA  10 
#define DIGIT  11 
#define NALPHA 12 
#define PUNCT  13 
#define RANGE  14 
#define ENDPAT 15 
 
 
/********************************************************** 
 * C Actions Interpreter variables                        * 
 **********************************************************/ 
/* 
 * Tokens: 
 */ 
#define T_STRING    'S'  /* primaries: */ 
#define T_DOLLAR    '$' 
#define T_REGEXP    'r' 
#define T_CONSTANT  'C' 
#define T_VARIABLE  'V' 
#define T_FUNCTION  'F' 
#define T_SEMICOLON ';'  /* punctuation */ 
#define T_EOF       'Z' 
#define T_LBRACE    '{' 
#define T_RBRACE    '}' 
#define T_LPAREN    '(' 
#define T_RPAREN    ')' 
#define T_LBRACKET  '[' 
#define T_RBRACKET  ']' 
#define T_COMMA          ',' 
#define T_ASSIGN    '='  /* operators: */ 
#define T_MUL       '*' 
#define T_DIV       '/' 
#define T_MOD       '%' 
#define T_ADD       '+' 
#define T_SUB       '-' 
#define T_SHL       'L' 
#define T_SHR       'R' 
#define T_LT        '<' 
#define T_LE        'l' 
#define T_GT        '>' 
#define T_GE        'g' 
#define T_EQ        'q' 
#define T_NE        'n' 
#define T_NOT       '~' 
#define T_AND       '&' 
#define T_XOR       '^' 
#define T_IOR       '|' 
#define T_LNOT      '!' 
#define T_LAND      'a' 
#define T_LIOR      'o' 
#define T_INCR      'p' 
#define T_DECR      'm' 
#define T_IF        'i'  /* keywords: */ 
#define T_ELSE      'e' 
#define T_WHILE          'w' 
#define T_BREAK          'b' 
#define T_CHAR      'c' 
#define T_INT       't' 
#define T_BEGIN          'B' 
#define T_END       'E' 
#define T_NF        'f' 
#define T_NR        '#' 
#define T_FS        ' ' 
#define T_RS        '\n' 
#define T_FILENAME  'z' 
 
#define PATTERN     'P'  /* indicates C statement is within a pattern */ 
#define ACTION 'A'  /* indicates C statement is within an action */ 
 
/* 
 * Symbol Table values 
 */ 
#define ACTUAL      0 
#define LVALUE      1 
#define BYTE        1 
#define WORD        2 
/* 
 * Symbol table 
 */ 
struct variable { 
     char vname[ MAXVARLEN ]; 
     char vclass; 
     char vsize; 
     int  vlen; 
     char *vptr; 
}; 
#define VARIABLE struct variable 
EXTERN VARIABLE Vartab[ MAXVARTABSZ ], *Nextvar; 
/* 
 * Value stack 
 */ 
union datum { 
     int  ival; 
     char      *dptr; 
     char **ptrptr; 
}; 
#define DATUM union datum 
struct item { 
     char class; 
     char lvalue; 
     char size; 
     DATUM     value; 
}; 
#define ITEM struct item 
EXTERN ITEM Stackbtm[ MAXSTACKSZ ], *Stackptr, *Stacktop; 
/* 
 * Miscellaneous 
 */ 
EXTERN char *Actptr;     /* pointer into Workbuf during compilation */ 
EXTERN char Token;  /* current input token */ 
EXTERN DATUM Value; /* and its value */ 
EXTERN char Saw_break;   /* set when break stmt seen */ 
EXTERN char Where;  /* indicates whether C stmt is a PATTERN or ACTION */ 
EXTERN char Fieldsep[3]; /* field seperator */ 
EXTERN char Recordsep[3];     /* record seperator */ 
EXTERN char *Beginact;   /* BEGINning of input actions */ 
EXTERN char *Endact;     /* END of input actions */ 
 
/********************************************************** 
 * Rules structure                                        * 
 **********************************************************/ 
struct rule { 
     struct { 
          char *start;   /* C statements that match pattern start */ 
          char *stop;    /* C statements that match pattern end */ 
          char startseen;     /* set if both a start and stop pattern */ 
                    /* given and if an input line matched the */ 
                    /* start pattern */ 
     } pattern; 
     char *action;       /* contains quasi-C statements of actions */ 
     struct rule *nextrule;   /* pointer to next rule */ 
}; 
#define RULE struct rule 
EXTERN RULE *Rules,      /* rule structures linked list head */ 
     *Rulep;             /* working pointer */ 
 
 
/********************************************************** 
 * Miscellaneous                                          * 
 **********************************************************/ 
/* 
 * Error exit values (returned to command shell) 
 */ 
#define USAGE_ERROR 1    /* error in invokation */ 
#define FILE_ERROR  2    /* file not found errors */ 
#define RE_ERROR    3    /* bad regular expression */ 
#define ACT_ERROR   4    /* bad C action stmt */ 
#define MEM_ERROR   5    /* out of memory errors */ 
/* 
 * Functions that return something special: 
 */ 
char *str_compile(), *getmem(), *cclass(), *pmatch(), *fetchptr(); 
VARIABLE *findvar(), *addvar(), *decl();