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