home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume2 / basic / part2 / newbs / bsdefs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1986-11-30  |  4.5 KB  |  182 lines

  1. /* bsdefs.h -- definition file for bs.
  2.  */
  3.  
  4. #include <stdio.h>
  5. #include <ctype.h>
  6.  
  7. /* 'Machine' status */
  8. extern int status;
  9. #define M_COMPILE    (1<<0)
  10. #define M_EXECUTE    (1<<1)
  11. #define M_INPUT        (1<<2)
  12. #define M_FIXUP        (1<<3)
  13. #define M_READ        (1<<4)
  14.  
  15. #define XMODE    (M_COMPILE|M_EXECUTE|M_INPUT|M_FIXUP|M_READ)
  16.  
  17.  
  18. /* line table. */
  19. #define LASTLINE    (struct line *)(&lastline)
  20.  
  21. struct line {
  22.     struct line *nextline;    /* next entry in list. */
  23.     int lnum;            /* its' number */
  24.     int (*list)();        /* its' definition */
  25.     char *text;            /* the original definition */
  26. };
  27.  
  28. extern struct line firstline,lastline,*curline;
  29.  
  30.  
  31. /* Variable types */
  32. #define Q_NRM    0    /* nice, ordinary variable */
  33. #define Q_ARY    1    /* array */
  34. #define Q_BF    2    /* builtin-function */
  35. #define Q_UFL    3    /* long user function */
  36. #define Q_UFS    4    /* short user function */
  37.  
  38.             /* in type part, a zero value is an undefined type. */
  39. #define T_INT    (1<<6)
  40. #define T_CHR    (2<<6)
  41. #define T_DBL    (3<<6)
  42. #define T_LBL    (4<<6)
  43.  
  44. #define T_QMASK        037        /* lower 5 bits for type qualifier */
  45. #define T_TMASK        (T_INT|T_CHR|T_DBL|T_LBL)
  46.  
  47. /* variable table */
  48. #define VLSIZ    150
  49.  
  50. struct label {
  51.     char *name;            /* what do we call it by. */
  52.     int (*where)();        /* and where does it live */
  53. };
  54. /* For arrays, storage of them is defined as follows:
  55.  *
  56.  *   1st item: number of dimensions in array <NDIMS>.
  57.  *   next <NDIMS> items: size of each dimension.
  58.  *   rest of items: the actual values.
  59.  *
  60.  * Until we can support varrying sized arrays this is the setup:
  61.  *
  62.  *   1,10,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10
  63.  *
  64.  * for a total size of 13 items.
  65.  */
  66. union value {
  67.     long ival;        /* T_INT */
  68.     double rval;    /* T_DBL */
  69.     char *sval;        /* T_CHR */
  70.     struct label lval;  /* T_LBL */
  71.     struct line *locval; /* for pushing line# list entries */
  72.     union value *arval; /* any+Q_ARY */
  73.     struct dictnode *vpval; /* for use when pushing variable pointers */
  74.     union value *plval; /* for use when pushing pointers to a value */
  75. };
  76.  
  77. struct dictnode {    /* format of vlist entry */
  78.     struct dictnode *father,*daughter;    /* doubly-linked list. */
  79.     char *name;        /* name of entry. */
  80.     int type_of_value;    /* its type. */
  81.     union value val;    /* and its value */
  82. };
  83.  
  84. extern struct dictnode *dicthead,*dictail,*curvp;
  85.  
  86. /* '_' Function table */
  87. extern
  88.     _print(),      _goto(),    _if(),        _else(),
  89.     _for(),        _next(),    _read(),    _data(),
  90.     _dsep(),    _spop(),    _pop(),        _stop(),
  91.     _end(),        _dlabel(),    _rlabel(),    _contin(),
  92.     _leave(),    _enter(),    _exitlp(),    _iadd(),
  93.     _isub(),    _imult(),    _idiv(),    _imod(),
  94.     _comma(),    _radd(),    _rsub(),    _rmult(),
  95.     _rdiv(),    _scolon(),    _gosub(),    _return(),
  96.     _not(),        _ieq(),        _req(),        _seq(),
  97.     _ineq(),    _rneq(),    _sneq(),    _ileq(),
  98.     _rleq(),    _sleq(),    _ilt(),        _rlt(),
  99.     _slt(),        _igeq(),    _rgeq(),    _sgeq(),
  100.     _igt(),        _rgt(),        _sgt(),        _or(),
  101.     _and(),        _itoa(),    _rtoa(),    _itor(),
  102.     _rtoi(),    _pushstate(),    _popstate(),    _scon(),
  103.     _rcon(),    _icon(),    _val(),        _store(),
  104.     _var();
  105.  
  106. /*
  107.  * Data table.
  108.  * Array of pointers into llist.
  109.  * Each is a line which has data.
  110.  */
  111. #define DLSIZ    100
  112. extern struct line *dlist[]; /* actual table, number of elems. is DLSIZ */
  113. extern int dlp;        /* index into dlist for current line of data */
  114. extern int dlindx;    /* index into current line for current data item. */
  115. extern int dtype;    /* in M_READ, operators set this to the type of 
  116.              * their operation.  When the expression is done
  117.              * executing, this variable will indicate its type.
  118.              */
  119.  
  120. /* error routines */
  121. extern int ULerror();
  122. extern int STerror();
  123. extern int FNerror();
  124. extern int ODerror();
  125. extern int BDerror();
  126. extern int VTerror();
  127.  
  128.  
  129. /*
  130.  * unions for storing data types in the code list 
  131.  *
  132.  * Used to convert from a double (for instance) into "int" sized chunks
  133.  * for the purpose of manipulating instances of them in code lists.
  134.  */
  135.  
  136.  
  137. union doni {
  138.     double d_in_doni;
  139.     int i_in_doni[sizeof(double)/sizeof(int)];
  140. };
  141. union loni {
  142.     long l_in_loni;
  143.     int i_in_loni[sizeof(long)/sizeof(int)];
  144. };
  145. union voni {
  146.     union value v_in_voni;
  147.     int i_in_voni[sizeof(union value)/sizeof(int)];
  148. };
  149.  
  150.  
  151. /* miscellaneous definitions. */
  152.  
  153. #define STKSIZ    500
  154. extern union value stack[];
  155. extern int stackp;
  156. extern int push();
  157. extern union value pop();
  158.  
  159. #define CSTKSIZ    5
  160. #define BFSIZ    200    /* input buffer */
  161. extern char pbbuf[];    /* unput() buffer */
  162. extern char ibuf[];
  163. extern int iptr,pbptr;
  164. extern char input();
  165. extern rdlin(),unput();
  166.  
  167. extern blcpy();
  168.  
  169. extern char bslash();
  170. extern char *scon_in();
  171. extern int num_in();
  172.  
  173. extern char *myalloc();
  174. extern union value *getplace();
  175. extern struct line *gllentry();
  176.  
  177. extern FILE *bsin;
  178.  
  179. extern int dbg;        /* debugging flag. */
  180. extern long atol();
  181. extern double atof();
  182.