Annotation of coherent/d/bin/awk/awk.h, revision 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.