Annotation of coherent/d/bin/awk/awk.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * AWK header - typedefs and c.
                      3:  */
                      4: 
                      5: #include <stdio.h>
                      6: #include <setjmp.h>
                      7: #include <ctype.h>
                      8: 
                      9: #define        NWORD   400             /* Longest word or identifier in yylex */
                     10: #define        NCSET   256             /* Size of character set (ascii + top bit) */
                     11: #define        MAXRECORD 2048          /* Longest input record */
                     12: #define        NBPC    8               /* Bytes in a char */
                     13: #define        NHASH   64              /* Number of symbol table hash buckets */
                     14: #define        NSBRK   256             /* Amount sbroken per call in `xalloc' */
                     15: #define        NCLASSC 128             /* Number of class characters */
                     16: #define        NCLASS  (NCLASSC/NBPC)  /* Chars in a class */
                     17: #define        NOFILE  10              /* Limit on the number of open files */
                     18: #define        NNEST   15              /* For/while nesting */
                     19: 
                     20: typedef        double  FLOAT;          /* Floating point type */
                     21: typedef        long    INT;            /* Integer type */
                     22: typedef unsigned char CHAR;    /* Character type */
                     23: typedef        unsigned char *STRING;  /* String type */
                     24: 
                     25: #define        stof    atof            /* String to FLOAT */
                     26: #define        stoi    atol            /* String to INT */
                     27: 
                     28: /*
                     29:  * Used for identifiers, array elements,
                     30:  * and just constants. (The name field is
                     31:  * not used here).
                     32:  */
                     33: typedef        struct  TERM {
                     34:        CHAR    t_op;                   /* Op type */
                     35:        CHAR    t_flag;
                     36:        struct  TERM    *t_next;        /* Hash chain */
                     37:        unsigned t_hval;                /* Hash value for symbol table */
                     38:        unsigned t_ahval;               /* Hash value without array index */
                     39:        union {
                     40:                FLOAT   t_float;
                     41:                INT     t_int;
                     42:                STRING  t_str;
                     43:                struct {
                     44:                        union   NODE    *(*t_func)();
                     45:                        CHAR    t_minarg;
                     46:                        CHAR    t_maxarg;
                     47:                }       t_fun;
                     48:        }       t_un;
                     49:        CHAR    t_name[];               /* Name of array or identifier */
                     50: }      TERM;
                     51: 
                     52: /* Node types (t_flag) */
                     53: #define        T_NUM   01              /* Numeric value vs. string */
                     54: #define        T_INT   02              /* Integer vs. floating */
                     55: #define        T_VAR   04              /* Variable */
                     56: #define        T_ARRAY 010             /* Array */
                     57: #define        T_ALLOC 020             /* Allocated string */
                     58: 
                     59: /*
                     60:  * Expression tree node.
                     61:  */
                     62: typedef        struct  OPNODE {
                     63:        CHAR    n_op;
                     64:        CHAR    n_flag;
                     65:        union {
                     66:                CHAR    *n_charp;
                     67:                int     n_char;
                     68:                struct  NODE    *n_node;
                     69:        }       n_o1, n_o2, n_o3, n_o4;
                     70: }      OPNODE;
                     71: 
                     72: /* Defines to made operand NODES easier to type in */
                     73: #define        n_O1    n_o1.n_node
                     74: #define        n_O2    n_o2.n_node
                     75: #define        n_O3    n_o3.n_node
                     76: #define        n_O4    n_o4.n_node
                     77: #define        t_STRING t_un.t_str
                     78: #define        t_INT   t_un.t_int
                     79: #define        t_FLOAT t_un.t_float
                     80: #define        t_FUNC  t_un.t_fun.t_func
                     81: #define        t_MINARG t_un.t_fun.t_minarg
                     82: #define        t_MAXARG t_un.t_fun.t_maxarg
                     83: 
                     84: /*
                     85:  * Basic nodes -- union of a TERM
                     86:  * and an expression tree OPNODE.
                     87:  */
                     88: typedef        union   NODE {
                     89:        OPNODE  opnode;
                     90:        TERM    term;
                     91: }      NODE;
                     92: 
                     93: /*
                     94:  * An open file.
                     95:  */
                     96: typedef        struct  OFILE {
                     97:        int     of_flag;
                     98:        FILE    *of_fp;
                     99:        CHAR    *of_name;
                    100: }      OFILE;
                    101: 
                    102: /* of_flag bits */
                    103: #define        OFPIPE  01              /* This is a pipe output */
                    104: 
                    105: /* Defined functions */
                    106: #define        nel(x)          (sizeof(x)/sizeof((x)[0]))
                    107: #define        endof(x)        (&(x)[nel(x)])
                    108: #define        streq(s1,s2)    (strcmp(s1,s2)==0)
                    109: #define        bump(ip,t)      (ip+=sizeof(t)/sizeof(int))     /* bump for printf */
                    110: 
                    111: /* Function declaration */
                    112: CHAR   *xalloc();
                    113: STRING awkinput();
                    114: NODE   *lookup();
                    115: NODE   *alookup();
                    116: NODE   *install();
                    117: STRING evalstring();
                    118: INT    evalint();
                    119: FLOAT  evalfloat();
                    120: NODE   *evalexpr();
                    121: FLOAT  stof();
                    122: INT    stoi();
                    123: NODE   *node();
                    124: NODE   *cnode();
                    125: NODE   *cpnode();
                    126: NODE   *snode();
                    127: NODE   *fnode();
                    128: NODE   *inode();
                    129: NODE   *fargn();
                    130: NODE   *xadd();
                    131: NODE   *xsub();
                    132: NODE   *xmul();
                    133: NODE   *xdiv();
                    134: NODE   *xmod();
                    135: NODE   *xcmp();
                    136: NODE   *xconc();
                    137: NODE   *xarray();
                    138: NODE   *xfield();
                    139: NODE   *xassign();
                    140: NODE   *xinca();
                    141: NODE   *xdeca();
                    142: NODE   *xneg();
                    143: 
                    144: /*
                    145:  * Declaration of built-in
                    146:  * functions.
                    147:  */
                    148: NODE   *f_length();
                    149: NODE   *f_sqrt();
                    150: NODE   *f_log();
                    151: NODE   *f_exp();
                    152: NODE   *f_int();
                    153: NODE   *f_substr();
                    154: NODE   *f_index();
                    155: NODE   *f_sprintf();
                    156: NODE   *f_split();
                    157: NODE   *f_abs();
                    158: 
                    159: /*
                    160:  * External references.
                    161:  */
                    162: extern CHAR    *parg;          /* Program argument pointer */
                    163: extern FILE    *pfp;           /* Program file pointer */
                    164: extern int     lexre;          /* Reading regular expression -- yylex */
                    165: extern CHAR    wordbuf[NWORD];
                    166: extern TERM    xzero;
                    167: extern TERM    xone;
                    168: extern NODE    xfield0;
                    169: extern NODE    *codep;
                    170: extern int     beginflag;
                    171: extern int     endflag;
                    172: extern int     runflag;
                    173: extern int     yflag;
                    174: extern int     nlskip;
                    175: extern int     exitflag;
                    176: extern int     lineno;
                    177: extern int     whitesw;
                    178: extern CHAR    *inline;
                    179: extern jmp_buf nextenv;
                    180: extern jmp_buf fwenv[NNEST];
                    181: extern int     fwlevel;
                    182: extern int     brlevel;
                    183: extern int     outflag;
                    184: extern TERM    *symtab[NHASH];
                    185: extern NODE    *tempnodes;
                    186: extern CHAR    SNULL[];
                    187: extern OFILE   files[NOFILE];
                    188: extern CHAR    inbuf[BUFSIZ];
                    189: extern CHAR    outbuf[BUFSIZ];
                    190: 
                    191: /*
                    192:  * References to the built-in
                    193:  * values.
                    194:  */
                    195: extern NODE    *FILENAMEp;
                    196: extern NODE    *NFp;
                    197: extern NODE    *NRp;
                    198: extern NODE    *FSp;
                    199: extern NODE    *RSp;
                    200: extern NODE    *OFSp;
                    201: extern NODE    *ORSp;
                    202: extern NODE    *OFMTp;
                    203: 
                    204: #define        FILENAME (FILENAMEp->t_STRING)
                    205: #define        NF      (NFp->t_INT)
                    206: #define        NR      (NRp->t_INT)
                    207: #define        FS      (FSp->t_STRING)
                    208: #define        RS      (RSp->t_STRING)
                    209: #define        OFS     (OFSp->t_STRING)
                    210: #define        ORS     (ORSp->t_STRING)
                    211: #define        OFMT    (OFMTp->t_STRING)
                    212: #define        FSMAP   wordbuf         /* Map to speed up field selection */
                    213: 
                    214: /*
                    215:  * Operators in the expression tree.
                    216:  */
                    217: #define        AROOT   1               /* Root -- pattern, action */
                    218: #define        ARE     2               /* /RE/ */
                    219: #define        AREMAT  3               /* s ~ /RE/ */
                    220: #define        ARENMAT 4               /* S !~ /RE/ */
                    221: #define        AEQ     5               /* a==b */
                    222: #define        ANE     6               /* a!=b */
                    223: #define        AGT     7               /* a>b */
                    224: #define        AGE     8               /* a>=b */
                    225: #define        ALT     9               /* a<b */
                    226: #define        ALE     10              /* a<=b */
                    227: #define        AADD    11              /* a+b */
                    228: #define        ASUB    12              /* a-b */
                    229: #define        AMUL    13              /* a*b */
                    230: #define        ADIV    14              /* a/b */
                    231: #define        AMOD    15              /* a%b */
                    232: #define        AASGN   21              /* a=b */
                    233: #define        ANOT    22              /* !a */
                    234: #define        AANDAND 23              /* a&&b */
                    235: #define        AOROR   24              /* a||b */
                    236: #define        AARRAY  25              /* a[b] */
                    237: #define        AINCA   27              /* a++ */
                    238: #define        ADECA   29              /* a-- */
                    239: #define        ARCLOS  30              /* RE -- a* */
                    240: #define        ARNECL  31              /* RE -- a+ */
                    241: #define        ARZOCL  32              /* RE -- a? */
                    242: #define        AROR    33              /* RE -- a|b */
                    243: #define        ARBOL   34              /* RE -- ^ */
                    244: #define        AREOL   35              /* RE -- $ */
                    245: #define        ARANY   36              /* RE -- . */
                    246: #define        ARCON   37              /* RE - ab */
                    247: #define        ARCLASS 38              /* RE - [...] */
                    248: #define        ARDCLASS 39             /* RE -- class under `-y' */
                    249: #define        ARCHAR  40              /* RE -- CHAR */
                    250: #define        ARDCHAR 41              /* RE -- dual case CHAR */
                    251: #define        AFIELD  42              /* $a */
                    252: #define        APRINT  43              /* print */
                    253: #define        APRINTF 44              /* printf */
                    254: #define        AFUN    45              /* function */
                    255: #define        ALIST   46              /* a,b */
                    256: #define        ANUM    48              /* number or string */
                    257: #define        AFOUT   49              /* > file */
                    258: #define        AFAPP   50              /* >> file */
                    259: #define        AFPIPE  51              /* | command */
                    260: #define        AIF     52              /* if (exp) statement */
                    261: #define        AFORIN  53              /* for (x in array ) */
                    262: #define        AFOR    54              /* for(e;e;e) s */
                    263: #define        AWHILE  55              /* while(e)s */
                    264: #define        ABREAK  56              /* break */
                    265: #define        ACONTIN 57              /* continue */
                    266: #define        ACONC   58              /* s1 s2 */
                    267: #define        ABEGIN  59              /* begin */
                    268: #define        AEND    60              /* end */
                    269: #define        AEXIT   61              /* exit */
                    270: #define        ANEXT   62              /* next */
                    271: #define        ARANGE  63              /* a,b */
                    272: #define        ATERM   64              /* Terminal */
                    273: #define        AFUNC   65              /* Function */
                    274: #define        AKEYW   66              /* Dummy type for keyword */
                    275: #define ANEG   67              /* - a */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.