home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols100 / vol153 / xlisp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1984-04-29  |  5.4 KB  |  214 lines

  1. /* 12/03/83 added def for Computer Innovations CI C86 compiler */
  2. /* xlisp - a small subset of lisp */
  3.  
  4. /* system specific definitions */
  5.  
  6. /* DEFEXT    define to enable default extension of '.lsp' on 'load' */
  7. /* FGETNAME    define if system supports 'fgetname' */
  8. /* NNODES    number of nodes to allocate in each request */
  9. /* TDEPTH    trace stack depth */
  10. /* KEYMAPCLASS    define to include the 'Keymap' class */
  11.  
  12. #define cic86 TRUE    /* select CI C86 compiler */
  13.  
  14. /* for the VAX-11 C compiler */
  15. #ifdef vms
  16. #define DEFEXT
  17. #define FGETNAME
  18. #define KEYMAPCLASS
  19. #define NNODES    2000
  20. #define TDEPTH    1000
  21. #endif
  22.  
  23. /* for the DECUS C compiler */
  24. #ifdef decus
  25. #define DEFEXT
  26. #define KEYMAPCLASS
  27. #define NNODES    200
  28. #define TDEPTH    100
  29. #endif
  30.  
  31. /* for unix compilers */
  32. #ifdef unix
  33. #define KEYMAPCLASS
  34. #define NNODES    200
  35. #define TDEPTH    100
  36. #endif
  37.  
  38. /* for computer innovations CI C86 compiler */
  39. #ifdef cic86
  40. #define DEFEXT
  41. #define KEYMAPCLASS
  42. #define NNODES    200
  43. #define TDEPTH    100
  44. #define kbin() bdos(6,0xff)    /* should read status only */
  45. #define strchr    index        /* Betz said this was because DECUS */
  46. #endif                /* compiler used strchr not index */
  47.  
  48. /* for the AZTEC C compiler */
  49. #ifdef AZTEC
  50. #define DEFEXT
  51. #define KEYMAPCLASS
  52. #define NNODES    200
  53. #define TDEPTH    100
  54. #define getc(fp)    getch(fp)
  55. #define kbin()        CPM(6,0xFF)
  56. #define malloc        alloc
  57. #define strchr        index
  58. #endif
  59.  
  60. /* default important definitions */
  61. #ifndef NNODES
  62. #define NNODES    200
  63. #endif
  64. #ifndef TDEPTH
  65. #define TDEPTH    100
  66. #endif
  67.  
  68. /* useful definitions */
  69. #define TRUE    1
  70. #define FALSE    0
  71.  
  72. /* program limits */
  73. #define STRMAX    100    /* maximum length of a string constant */
  74.  
  75. /* node types */
  76. #define FREE    0
  77. #define SUBR    1
  78. #define LIST    2
  79. #define SYM    3
  80. #define INT    4
  81. #define STR    5
  82. #define OBJ    6
  83. #define FPTR    7
  84. #define KMAP    8
  85.  
  86. /* node flags */
  87. #define MARK    1
  88. #define LEFT    2
  89.  
  90. /* string types */
  91. #define DYNAMIC    0
  92. #define STATIC    1
  93.  
  94. /* symbol structure */
  95. struct xsym {
  96.     char *xsy_name;        /* symbol name */
  97.     struct node *xsy_value;    /* the current value */
  98. };
  99.  
  100. /* subr node structure */
  101. struct xsubr {
  102.     struct node *(*xsu_subr)();    /* pointer to an internal routine */
  103. };
  104.  
  105. /* list node structure */
  106. struct xlist {
  107.     struct node *xl_value;    /* value at this node */
  108.     struct node *xl_next;    /* next node */
  109. };
  110.  
  111. /* integer node structure */
  112. struct xint {
  113.     int xi_int;            /* integer value */
  114. };
  115.  
  116. /* string node structure */
  117. struct xstr {
  118.     int xst_type;        /* string type */
  119.     char *xst_str;        /* string pointer */
  120. };
  121.  
  122. /* object node structure */
  123. struct xobj {
  124.     struct node *xo_obclass;    /* class of object */
  125.     struct node *xo_obdata;    /* instance data */
  126. };
  127.  
  128. /* file pointer node structure */
  129. struct xfptr {
  130.     FILE *xf_fp;        /* the file pointer */
  131. };
  132.  
  133. /* keymap structure */
  134. struct xkmap {
  135.     struct node *(*xkm_map)[];    /* selection pointer */
  136. };
  137.  
  138.  
  139. /* shorthand macros for accessing node substructures */
  140.  
  141. /* symbol node */
  142. #define n_symname    n_info.n_xsym.xsy_name
  143. #define n_symvalue    n_info.n_xsym.xsy_value
  144.  
  145. /* subr node */
  146. #define n_subr        n_info.n_xsubr.xsu_subr
  147.  
  148. /* list node (and message node and binding node) */
  149. #define n_listvalue    n_info.n_xlist.xl_value
  150. #define n_listnext    n_info.n_xlist.xl_next
  151. #define n_msg        n_info.n_xlist.xl_value
  152. #define n_msgcode    n_info.n_xlist.xl_next
  153. #define n_bndsym    n_info.n_xlist.xl_value
  154. #define n_bndvalue    n_info.n_xlist.xl_next
  155. #define n_left        n_info.n_xlist.xl_value
  156. #define n_right        n_info.n_xlist.xl_next
  157. #define n_ptr        n_info.n_xlist.xl_value
  158.  
  159. /* integer node */
  160. #define n_int        n_info.n_xint.xi_int
  161.  
  162. /* string node */
  163. #define n_str        n_info.n_xstr.xst_str
  164. #define n_strtype    n_info.n_xstr.xst_type
  165.  
  166. /* object node */
  167. #define n_obclass    n_info.n_xobj.xo_obclass
  168. #define n_obdata    n_info.n_xobj.xo_obdata
  169.  
  170. /* file pointer node */
  171. #define n_fname        n_info.n_xfptr.xf_name
  172. #define n_fp        n_info.n_xfptr.xf_fp
  173.  
  174. /* key map node */
  175. #define n_kmap        n_info.n_xkmap.xkm_map
  176.  
  177. /* node structure */
  178. struct node {
  179.     char n_type;        /* type of node */
  180.     char n_flags;        /* flag bits */
  181.     union {            /* value */
  182.     struct xsym n_xsym;    /*     symbol node */
  183.     struct xsubr n_xsubr;    /*     subr node */
  184.     struct xlist n_xlist;    /*     list node */
  185.     struct xint n_xint;    /*     integer node */
  186.     struct xstr n_xstr;    /*     string node */
  187.     struct xobj n_xobj;    /*     object node */
  188.     struct xfptr n_xfptr;    /*     file pointer node */
  189.     struct xkmap n_xkmap;    /*     key map node */
  190.     } n_info;
  191. };
  192.  
  193. /* external procedure declarations */
  194. extern struct node *xlread();        /* read an expression */
  195. extern struct node *xleval();        /* evaluate an expression */
  196. extern struct node *xlarg();        /* fetch an argument */
  197. extern struct node *xlevarg();        /* fetch and evaluate an argument */
  198. extern struct node *xlmatch();        /* fetch an typed argument */
  199. extern struct node *xlevmatch();    /* fetch and evaluate a typed arg */
  200. extern struct node *xlsend();        /* send a message to an object */
  201. extern struct node *xlmfind();        /* find the method for a message */
  202. extern struct node *xlxsend();        /* execute a message method */
  203. extern struct node *xlenter();        /* enter a symbol into the oblist */
  204. extern struct node *xlsave();        /* generate a stack frame */
  205. extern struct node *xlobsym();        /* find an object's class or instance
  206.                        variable */
  207. extern struct node *xlclass();        /* enter a class definition */
  208. extern struct node *xlivar();        /* get an instance variable */
  209. extern struct node *xlcvar();        /* get an instance variable */
  210. extern struct node *newnode();        /* allocate a new node */
  211.  
  212. extern char *stralloc();        /* allocate string space */
  213. extern char *strsave();            /* make a safe copy of a string */
  214.