home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / NEWS / RADIANCE / SRC / COMMON / CALCOMP.H < prev    next >
C/C++ Source or Header  |  1993-10-07  |  2KB  |  68 lines

  1. /* Copyright (c) 1986 Regents of the University of California */
  2.  
  3. /* SCCSid "@(#)calcomp.h 2.1 11/12/91 LBL" */
  4.  
  5. /*
  6.  *  calcomp.h - header file for expression parser.
  7.  *
  8.  */
  9.                 /* EPNODE types */
  10. #define  VAR            1
  11. #define  NUM            2
  12. #define  UMINUS         3
  13. #define  CHAN           4
  14. #define  FUNC           5
  15. #define  ARG            6
  16. #define  TICK           7
  17. #define  SYM            8
  18.                 /* also: '+', '-', '*', '/', '^', '=', ':' */
  19.  
  20. typedef struct {
  21.     char  *fname;               /* function name */
  22.     short  nargs;               /* # of required arguments */
  23.     short  atyp;                /* assignment type (':' or '=') */
  24.     double  (*f)();             /* pointer to function */
  25. }  LIBR;                /* a library function */
  26.  
  27. typedef struct epnode {
  28.     int  type;                  /* node type */
  29.     struct epnode  *sibling;    /* next child this level */
  30.     union {
  31.     struct epnode  *kid;    /* first child */
  32.     double  num;            /* number */
  33.     char  *name;            /* symbol name */
  34.     int  chan;              /* channel number */
  35.     long  tick;             /* timestamp */
  36.     struct vardef {
  37.         char  *name;                /* variable name */
  38.         int  nlinks;                /* number of references */
  39.         struct epnode  *def;        /* definition */
  40.         LIBR  *lib;                 /* library definition */
  41.         struct vardef  *next;       /* next in hash list */
  42.     }  *ln;                 /* link */
  43.     } v;                /* value */
  44. }  EPNODE;      /* an expression node */
  45.  
  46. typedef struct vardef  VARDEF;  /* a variable definition */
  47.  
  48. #define  MAXWORD        63              /* maximum word/id length */
  49. #define  CNTXMARK       '`'             /* context mark */
  50.  
  51. #define  isid(c)        (isalnum(c) || (c) == '_' || \
  52.             (c) == '.' || (c) == CNTXMARK)
  53.  
  54. extern double  eval(), varvalue(), chanvalue(), funvalue();
  55. extern double  argument(), getnum();
  56. extern double  (*eoper[])();
  57. extern int  getinum();
  58. extern char  *getname(), *qualname(), *setcontext(), *argfun();
  59. extern EPNODE  *eparse(), *ekid(), *dlookup(), *dpop(), *dfirst(), *dnext();
  60. extern EPNODE  *getdefn(), *getchan();
  61. extern EPNODE  *getE1(), *getE2(), *getE3(), *getE4(), *getE5(), *rconst();
  62. extern VARDEF  *varinsert(), *varlookup(), *argf();
  63. extern LIBR  *liblookup();
  64. extern long  eclock;
  65. extern int  nextc;
  66.  
  67. #define  evalue(ep)     (*eoper[(ep)->type])(ep)
  68.