home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / awk / awk.def next >
Encoding:
Text File  |  1979-05-06  |  3.0 KB  |  128 lines

  1. #define    xfree(a)    { if(a!=NULL) yfree(a); a=NULL;}
  2. #define yfree free
  3. #ifdef    DEBUG
  4. #    define    dprintf    if(dbg)printf
  5. #else
  6. #    define    dprintf(x1, x2, x3, x4)
  7. #endif
  8. typedef    double    awkfloat;
  9.  
  10. extern char    **FS;
  11. extern char    **RS;
  12. extern char    **ORS;
  13. extern char    **OFS;
  14. extern char    **OFMT;
  15. extern awkfloat *NR;
  16. extern awkfloat *NF;
  17. extern char    **FILENAME;
  18.  
  19. extern char    record[];
  20. extern int    dbg;
  21. extern int    lineno;
  22. extern int    errorflag;
  23. extern int    donefld;    /* 1 if record broken into fields */
  24. extern int    donerec;    /* 1 if record is valid (no fld has changed */
  25.  
  26. typedef struct val {    /* general value during processing */
  27.     char    *nval;    /* name, for variables only */
  28.     char    *sval;    /* string value */
  29.     awkfloat    fval;    /* value as number */
  30.     unsigned    tval;    /* type info */
  31.     struct val    *nextval;    /* ptr to next if chained */
  32. } cell;
  33. extern cell *symtab[];
  34. cell    *setsymtab(), *lookup(), **makesymtab();
  35.  
  36. extern cell    *recloc;    /* location of input record */
  37. extern cell    *nrloc;        /* NR */
  38. extern cell    *nfloc;        /* NF */
  39.  
  40. #define    STR    01    /* string value is valid */
  41. #define    NUM    02    /* number value is valid */
  42. #define FLD    04    /* FLD means don't free string space */
  43. #define    CON    010    /* this is a constant */
  44. #define    ARR    020    /* this is an array */
  45.  
  46. awkfloat setfval(), getfval();
  47. char    *setsval(), *getsval();
  48. char    *tostring(), *tokname(), *malloc();
  49. double    log(), sqrt(), exp(), atof();
  50.  
  51. /* function types */
  52. #define    FLENGTH    1
  53. #define    FSQRT    2
  54. #define    FEXP    3
  55. #define    FLOG    4
  56. #define    FINT    5
  57.  
  58. typedef struct {
  59.     char otype;
  60.     char osub;
  61.     cell *optr;
  62. } obj;
  63.  
  64. #define BOTCH    1
  65. struct nd {
  66.     char ntype;
  67.     char subtype;
  68.     struct nd *nnext;
  69.     int nobj;
  70.     struct nd *narg[BOTCH];    /* C won't take a zero length array */
  71. };
  72. typedef struct nd node;
  73. extern node    *winner;
  74. extern node    *nullstat;
  75.  
  76. /* otypes */
  77. #define OCELL    0
  78. #define OEXPR    1
  79. #define OBOOL    2
  80. #define OJUMP    3
  81.  
  82. /* cell subtypes */
  83. #define CTEMP    4
  84. #define CNAME    3 
  85. #define CVAR    2
  86. #define CFLD    1
  87. #define CCON    0
  88.  
  89. /* bool subtypes */
  90. #define BTRUE    1
  91. #define BFALSE    2
  92.  
  93. /* jump subtypes */
  94. #define JEXIT    1
  95. #define JNEXT    2
  96. #define    JBREAK    3
  97. #define    JCONT    4
  98.  
  99. /* node types */
  100. #define NVALUE    1
  101. #define NSTAT    2
  102. #define NEXPR    3
  103. #define NPA2    4
  104.  
  105. extern obj    (*proctab[])();
  106. extern obj    true, false;
  107. extern int    pairstack[], paircnt;
  108.  
  109. #define cantexec(n)    (n->ntype == NVALUE)
  110. #define notlegal(n)    (n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN]== nullproc)
  111. #define isexpr(n)    (n->ntype == NEXPR)
  112. #define isjump(n)    (n.otype == OJUMP)
  113. #define isexit(n)    (n.otype == OJUMP && n.osub == JEXIT)
  114. #define    isbreak(n)    (n.otype == OJUMP && n.osub == JBREAK)
  115. #define    iscont(n)    (n.otype == OJUMP && n.osub == JCONT)
  116. #define    isnext(n)    (n.otype == OJUMP && n.osub == JNEXT)
  117. #define isstr(n)    (n.optr->tval & STR)
  118. #define istrue(n)    (n.otype == OBOOL && n.osub == BTRUE)
  119. #define istemp(n)    (n.otype == OCELL && n.osub == CTEMP)
  120. #define isfld(n)    (!donefld && n.osub==CFLD && n.otype==OCELL && n.optr->nval==0)
  121. #define isrec(n)    (donefld && n.osub==CFLD && n.otype==OCELL && n.optr->nval!=0)
  122. obj    nullproc();
  123. obj    relop();
  124.  
  125. #define MAXSYM    16
  126. #define    HAT    0177    /* matches ^ in regular expr */
  127.             /* watch out for mach dep */
  128.