awk.h - 9base - revived minimalist port of Plan 9 userland to Unix
 (HTM) git clone git://git.suckless.org/9base
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       awk.h (4625B)
       ---
            1 /*
            2 Copyright (c) Lucent Technologies 1997
            3         All Rights Reserved
            4 
            5 */
            6 
            7 typedef double        Awkfloat;
            8 
            9 /* unsigned char is more trouble than it's worth */
           10 
           11 typedef        unsigned char uschar;
           12 
           13 #define        xfree(a)        { if ((a) != NULL) { free((char *) a); a = NULL; } }
           14 
           15 #define        DEBUG
           16 #ifdef        DEBUG
           17                         /* uses have to be doubly parenthesized */
           18 #        define        dprintf(x)        if (dbg) printf x
           19 #else
           20 #        define        dprintf(x)
           21 #endif
           22 
           23 extern        char        errbuf[];
           24 
           25 extern int        compile_time;        /* 1 if compiling, 0 if running */
           26 extern int        safe;                /* 0 => unsafe, 1 => safe */
           27 
           28 #define        RECSIZE        (8 * 1024)        /* sets limit on records, fields, etc., etc. */
           29 extern int        recsize;        /* size of current record, orig RECSIZE */
           30 
           31 extern char        **FS;
           32 extern char        **RS;
           33 extern char        **ORS;
           34 extern char        **OFS;
           35 extern char        **OFMT;
           36 extern Awkfloat *NR;
           37 extern Awkfloat *FNR;
           38 extern Awkfloat *NF;
           39 extern char        **FILENAME;
           40 extern char        **SUBSEP;
           41 extern Awkfloat *RSTART;
           42 extern Awkfloat *RLENGTH;
           43 
           44 extern char        *record;        /* points to $0 */
           45 extern int        lineno;                /* line number in awk program */
           46 extern int        errorflag;        /* 1 if error has occurred */
           47 extern int        donefld;        /* 1 if record broken into fields */
           48 extern int        donerec;        /* 1 if record is valid (no fld has changed */
           49 extern char        inputFS[];        /* FS at time of input, for field splitting */
           50 
           51 extern int        dbg;
           52 
           53 extern        char        *patbeg;        /* beginning of pattern matched */
           54 extern        int        patlen;                /* length of pattern matched.  set in b.c */
           55 
           56 /* Cell:  all information about a variable or constant */
           57 
           58 typedef struct Cell {
           59         uschar        ctype;                /* OCELL, OBOOL, OJUMP, etc. */
           60         uschar        csub;                /* CCON, CTEMP, CFLD, etc. */
           61         char        *nval;                /* name, for variables only */
           62         char        *sval;                /* string value */
           63         Awkfloat fval;                /* value as number */
           64         int         tval;                /* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE */
           65         struct Cell *cnext;        /* ptr to next if chained */
           66 } Cell;
           67 
           68 typedef struct Array {                /* symbol table array */
           69         int        nelem;                /* elements in table right now */
           70         int        size;                /* size of tab */
           71         Cell        **tab;                /* hash table pointers */
           72 } Array;
           73 
           74 #define        NSYMTAB        50        /* initial size of a symbol table */
           75 extern Array        *symtab;
           76 
           77 extern Cell        *nrloc;                /* NR */
           78 extern Cell        *fnrloc;        /* FNR */
           79 extern Cell        *nfloc;                /* NF */
           80 extern Cell        *rstartloc;        /* RSTART */
           81 extern Cell        *rlengthloc;        /* RLENGTH */
           82 
           83 /* Cell.tval values: */
           84 #define        NUM        01        /* number value is valid */
           85 #define        STR        02        /* string value is valid */
           86 #define DONTFREE 04        /* string space is not freeable */
           87 #define        CON        010        /* this is a constant */
           88 #define        ARR        020        /* this is an array */
           89 #define        FCN        040        /* this is a function name */
           90 #define FLD        0100        /* this is a field $1, $2, ... */
           91 #define        REC        0200        /* this is $0 */
           92 
           93 
           94 /* function types */
           95 #define        FLENGTH        1
           96 #define        FSQRT        2
           97 #define        FEXP        3
           98 #define        FLOG        4
           99 #define        FINT        5
          100 #define        FSYSTEM        6
          101 #define        FRAND        7
          102 #define        FSRAND        8
          103 #define        FSIN        9
          104 #define        FCOS        10
          105 #define        FATAN        11
          106 #define        FTOUPPER 12
          107 #define        FTOLOWER 13
          108 #define        FFLUSH        14
          109 #define        FUTF        15
          110 
          111 /* Node:  parse tree is made of nodes, with Cell's at bottom */
          112 
          113 typedef struct Node {
          114         int        ntype;
          115         struct        Node *nnext;
          116         int        lineno;
          117         int        nobj;
          118         struct        Node *narg[1];        /* variable: actual size set by calling malloc */
          119 } Node;
          120 
          121 #define        NIL        ((Node *) 0)
          122 
          123 extern Node        *winner;
          124 extern Node        *nullstat;
          125 extern Node        *nullnode;
          126 
          127 /* ctypes */
          128 #define OCELL        1
          129 #define OBOOL        2
          130 #define OJUMP        3
          131 
          132 /* Cell subtypes: csub */
          133 #define        CFREE        7
          134 #define CCOPY        6
          135 #define CCON        5
          136 #define CTEMP        4
          137 #define CNAME        3 
          138 #define CVAR        2
          139 #define CFLD        1
          140 #define        CUNK        0
          141 
          142 /* bool subtypes */
          143 #define BTRUE        11
          144 #define BFALSE        12
          145 
          146 /* jump subtypes */
          147 #define JEXIT        21
          148 #define JNEXT        22
          149 #define        JBREAK        23
          150 #define        JCONT        24
          151 #define        JRET        25
          152 #define        JNEXTFILE        26
          153 
          154 /* node types */
          155 #define NVALUE        1
          156 #define NSTAT        2
          157 #define NEXPR        3
          158 
          159 
          160 extern        int        pairstack[], paircnt;
          161 
          162 #define notlegal(n)        (n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN] == nullproc)
          163 #define isvalue(n)        ((n)->ntype == NVALUE)
          164 #define isexpr(n)        ((n)->ntype == NEXPR)
          165 #define isjump(n)        ((n)->ctype == OJUMP)
          166 #define isexit(n)        ((n)->csub == JEXIT)
          167 #define        isbreak(n)        ((n)->csub == JBREAK)
          168 #define        iscont(n)        ((n)->csub == JCONT)
          169 #define        isnext(n)        ((n)->csub == JNEXT)
          170 #define        isnextfile(n)        ((n)->csub == JNEXTFILE)
          171 #define        isret(n)        ((n)->csub == JRET)
          172 #define isrec(n)        ((n)->tval & REC)
          173 #define isfld(n)        ((n)->tval & FLD)
          174 #define isstr(n)        ((n)->tval & STR)
          175 #define isnum(n)        ((n)->tval & NUM)
          176 #define isarr(n)        ((n)->tval & ARR)
          177 #define isfcn(n)        ((n)->tval & FCN)
          178 #define istrue(n)        ((n)->csub == BTRUE)
          179 #define istemp(n)        ((n)->csub == CTEMP)
          180 #define        isargument(n)        ((n)->nobj == ARG)
          181 /* #define freeable(p)        (!((p)->tval & DONTFREE)) */
          182 #define freeable(p)        ( ((p)->tval & (STR|DONTFREE)) == STR )
          183 
          184 #include "proto.h"
          185