home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / 32XLISP.ZIP / XLDMEM.H < prev    next >
Text File  |  1988-09-17  |  6KB  |  202 lines

  1. /* xldmem.h - dynamic memory definitions */
  2. /*    Copyright (c) 1987, by David Michael Betz
  3.     All Rights Reserved
  4.     Permission is granted for unrestricted non-commercial use    */
  5.  
  6. /* small fixnum range */
  7. #define SFIXMIN        (-128)
  8. #define SFIXMAX        255
  9. #define SFIXSIZE    384
  10.  
  11. /* character range */
  12. #define CHARMIN        0
  13. #define CHARMAX        255
  14. #define CHARSIZE    256
  15.  
  16. /* new node access macros */
  17. #define ntype(x)    ((x)->n_type)
  18.  
  19. /* cons access macros */
  20. #define car(x)        ((x)->n_car)
  21. #define cdr(x)        ((x)->n_cdr)
  22. #define rplaca(x,y)    ((x)->n_car = (y))
  23. #define rplacd(x,y)    ((x)->n_cdr = (y))
  24.  
  25. /* symbol access macros */
  26. #define getvalue(x)     ((x)->n_vdata[0])
  27. #define setvalue(x,v)     ((x)->n_vdata[0] = (v))
  28. #define getfunction(x)     ((x)->n_vdata[1])
  29. #define setfunction(x,v) ((x)->n_vdata[1] = (v))
  30. #define getplist(x)     ((x)->n_vdata[2])
  31. #define setplist(x,v)     ((x)->n_vdata[2] = (v))
  32. #define getpname(x)     ((x)->n_vdata[3])
  33. #define setpname(x,v)     ((x)->n_vdata[3] = (v))
  34. #define SYMSIZE        4
  35.  
  36. /* closure access macros */
  37. #define getname(x)         ((x)->n_vdata[0])
  38. #define setname(x,v)       ((x)->n_vdata[0] = (v))
  39. #define gettype(x)        ((x)->n_vdata[1])
  40. #define settype(x,v)      ((x)->n_vdata[1] = (v))
  41. #define getargs(x)         ((x)->n_vdata[2])
  42. #define setargs(x,v)       ((x)->n_vdata[2] = (v))
  43. #define getoargs(x)        ((x)->n_vdata[3])
  44. #define setoargs(x,v)      ((x)->n_vdata[3] = (v))
  45. #define getrest(x)         ((x)->n_vdata[4])
  46. #define setrest(x,v)       ((x)->n_vdata[4] = (v))
  47. #define getkargs(x)        ((x)->n_vdata[5])
  48. #define setkargs(x,v)      ((x)->n_vdata[5] = (v))
  49. #define getaargs(x)        ((x)->n_vdata[6])
  50. #define setaargs(x,v)      ((x)->n_vdata[6] = (v))
  51. #define getbody(x)         ((x)->n_vdata[7])
  52. #define setbody(x,v)       ((x)->n_vdata[7] = (v))
  53. #define getenv(x)    ((x)->n_vdata[8])
  54. #define setenv(x,v)    ((x)->n_vdata[8] = (v))
  55. #define getfenv(x)    ((x)->n_vdata[9])
  56. #define setfenv(x,v)    ((x)->n_vdata[9] = (v))
  57. #define getlambda(x)    ((x)->n_vdata[10])
  58. #define setlambda(x,v)    ((x)->n_vdata[10] = (v))
  59. #define CLOSIZE        11
  60.  
  61. /* vector access macros */
  62. #define getsize(x)    ((x)->n_vsize)
  63. #define getelement(x,i)    ((x)->n_vdata[i])
  64. #define setelement(x,i,v) ((x)->n_vdata[i] = (v))
  65.  
  66. /* object access macros */
  67. #define getclass(x)    ((x)->n_vdata[0])
  68. #define getivar(x,i)    ((x)->n_vdata[i+1])
  69. #define setivar(x,i,v)    ((x)->n_vdata[i+1] = (v))
  70.  
  71. /* subr/fsubr access macros */
  72. #define getsubr(x)    ((x)->n_subr)
  73. #define getoffset(x)    ((x)->n_offset)
  74.  
  75. /* fixnum/flonum/char access macros */
  76. #define getfixnum(x)    ((x)->n_fixnum)
  77. #define getflonum(x)    ((x)->n_flonum)
  78. #define getchcode(x)    ((x)->n_chcode)
  79.  
  80. /* string access macros */
  81. #define getstring(x)    ((x)->n_string)
  82. #define getslength(x)    ((x)->n_strlen)
  83.  
  84. /* file stream access macros */
  85. #define getfile(x)    ((x)->n_fp)
  86. #define setfile(x,v)    ((x)->n_fp = (v))
  87. #define getsavech(x)    ((x)->n_savech)
  88. #define setsavech(x,v)    ((x)->n_savech = (v))
  89.  
  90. /* unnamed stream access macros */
  91. #define gethead(x)    ((x)->n_car)
  92. #define sethead(x,v)    ((x)->n_car = (v))
  93. #define gettail(x)    ((x)->n_cdr)
  94. #define settail(x,v)    ((x)->n_cdr = (v))
  95.  
  96. /* node types */
  97. #define FREE    0
  98. #define SUBR    1
  99. #define FSUBR    2
  100. #define CONS    3
  101. #define SYMBOL    4
  102. #define FIXNUM    5
  103. #define FLONUM    6
  104. #define STRING    7
  105. #define OBJECT    8
  106. #define STREAM    9
  107. #define VECTOR    10
  108. #define CLOSURE    11
  109. #define CHAR    12
  110. #define USTREAM    13
  111. #define STRUCT    14
  112.  
  113. /* subr/fsubr node */
  114. #define n_subr        n_info.n_xsubr.xs_subr
  115. #define n_offset    n_info.n_xsubr.xs_offset
  116.  
  117. /* cons node */
  118. #define n_car        n_info.n_xcons.xc_car
  119. #define n_cdr        n_info.n_xcons.xc_cdr
  120.  
  121. /* fixnum node */
  122. #define n_fixnum    n_info.n_xfixnum.xf_fixnum
  123.  
  124. /* flonum node */
  125. #define n_flonum    n_info.n_xflonum.xf_flonum
  126. /* character node */
  127. #define n_chcode    n_info.n_xchar.xc_chcode
  128.  
  129. /* string node */
  130. #define n_string    n_info.n_xstring.xs_string
  131. #define n_strlen    n_info.n_xstring.xs_length
  132.  
  133. /* stream node */
  134. #define n_fp        n_info.n_xstream.xs_fp
  135. #define n_savech    n_info.n_xstream.xs_savech
  136.  
  137. /* vector/object node */
  138. #define n_vsize        n_info.n_xvector.xv_size
  139. #define n_vdata        n_info.n_xvector.xv_data
  140.  
  141. /* node structure */
  142. typedef struct node {
  143.     char n_type;        /* type of node */
  144.     char n_flags;        /* flag bits */
  145.     union ninfo {         /* value */
  146.     struct xsubr {        /* subr/fsubr node */
  147.         struct node *(*xs_subr)();    /* function pointer */
  148.         int xs_offset;        /* offset into funtab */
  149.     } n_xsubr;
  150.     struct xcons {        /* cons node */
  151.         struct node *xc_car;    /* the car pointer */
  152.         struct node *xc_cdr;    /* the cdr pointer */
  153.     } n_xcons;
  154.     struct xfixnum {    /* fixnum node */
  155.         FIXTYPE xf_fixnum;        /* fixnum value */
  156.     } n_xfixnum;
  157.     struct xflonum {    /* flonum node */
  158.         FLOTYPE xf_flonum;        /* flonum value */
  159.     } n_xflonum;
  160.     struct xchar {        /* character node */
  161.         int xc_chcode;        /* character code */
  162.     } n_xchar;
  163.     struct xstring {    /* string node */
  164.         int xs_length;        /* string length */
  165.         unsigned char *xs_string;    /* string pointer */
  166.     } n_xstring;
  167.     struct xstream {     /* stream node */
  168.         FILE *xs_fp;        /* the file pointer */
  169.         int xs_savech;        /* lookahead character */
  170.     } n_xstream;
  171.     struct xvector {    /* vector/object/symbol/structure node */
  172.         int xv_size;        /* vector size */
  173.         struct node **xv_data;    /* vector data */
  174.     } n_xvector;
  175.     } n_info;
  176. } *LVAL;
  177.  
  178. /* memory segment structure definition */
  179. typedef struct segment {
  180.     int sg_size;
  181.     struct segment *sg_next;
  182.     struct node sg_nodes[1];
  183. } SEGMENT;
  184.  
  185. /* memory allocation functions */
  186. extern LVAL cons();        /* (cons x y) */
  187. extern LVAL cvsymbol();           /* convert a string to a symbol */
  188. extern LVAL cvstring();           /* convert a string */
  189. extern LVAL cvfile();        /* convert a FILE * to a file */
  190. extern LVAL cvsubr();        /* convert a function to a subr/fsubr */
  191. extern LVAL cvfixnum();           /* convert a fixnum */
  192. extern LVAL cvflonum();           /* convert a flonum */
  193. extern LVAL cvchar();        /* convert a character */
  194.  
  195. extern LVAL newstring();    /* create a new string */
  196. extern LVAL newvector();    /* create a new vector */
  197. extern LVAL newobject();    /* create a new object */
  198. extern LVAL newclosure();    /* create a new closure */
  199. extern LVAL newustream();    /* create a new unnamed stream */
  200. extern LVAL newstruct();    /* create a new structure */
  201.  
  202.