home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / Xconq 7.1.0 / src / xconq-7.1.0 / kernel / lisp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-07  |  6.5 KB  |  200 lines  |  [TEXT/R*ch]

  1. /* Definitions for Lisp objects in Xconq.
  2.    Copyright (C) 1989, 1991, 1992, 1993, 1994, 1995 Stanley T. Shebs.
  3.  
  4. Xconq is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2, or (at your option)
  7. any later version.  See the file COPYING.  */
  8.  
  9. #ifndef LISP_H
  10. #define LISP_H
  11.  
  12. /* Lisp objects in Xconq are pretty basic, since they are used only for
  13.    game definition and (usually) not the core computations. */
  14.  
  15. /* The different types of Lisp objects. */
  16.  
  17. enum lisptype {
  18.   NIL,
  19.   CONS,
  20.   NUMBER,
  21.   STRING,
  22.   SYMBOL,
  23.   UTYPE,
  24.   MTYPE,
  25.   TTYPE,
  26.   POINTER,
  27.   EOFOBJ
  28.   };
  29.  
  30. /* Declaration of a cons cell. */
  31.  
  32. struct a_cons {
  33.     struct a_obj *car;
  34.     struct a_obj *cdr;
  35. };
  36.  
  37. /* A symbol includes its index and a pointer to its binding. */
  38.  
  39. struct a_symbol {
  40.     struct a_symentry *symentry;
  41.     struct a_obj *value;
  42. };
  43.  
  44. /* A pointer is an address with associated name.  Interpretation
  45.    and usage is up to the context. */
  46.  
  47. struct a_pointer {
  48.     struct a_obj *sym;
  49.     char *data;
  50. };
  51.  
  52. /* The basic Lisp object.  This should be small. */
  53.  
  54. typedef struct a_obj {
  55.     enum lisptype type;          /* type of the object */
  56.     union {
  57.     int num;       /* numeric value */
  58.     char *str;     /* string value */
  59.     struct a_symbol sym;
  60.     struct a_cons cons;
  61.     struct a_pointer ptr;
  62.     } v;               /* the "content" of the object */
  63. } Obj;
  64.  
  65. /* The symbol table is the way to map names into symbols. */
  66.  
  67. typedef struct a_symentry {
  68.     char *name;
  69.     struct a_obj *symbol;
  70.     char constantp;
  71.     struct a_symentry *next;
  72. } Symentry;
  73.  
  74. /* A stream is just a union of string pointer and file pointer. */
  75.  
  76. enum strmtype { stringstrm, filestrm };
  77.  
  78. typedef struct a_strm {
  79.     enum strmtype type;
  80.     union {
  81.     char *sp;
  82.     FILE *fp;
  83.     } ptr;
  84. } Strm;
  85.  
  86. /* Enum of all the random keywords. */
  87.  
  88. enum keywords {
  89.  
  90. #undef  DEF_KWD
  91. #define DEF_KWD(name,CODE)  CODE,
  92.  
  93. #include "keyword.def"
  94.  
  95.     LAST_KEYWORD
  96. };
  97.  
  98. #define match_keyword(ob,key) \
  99.   (symbolp(ob) && strcmp(c_string(ob), keyword_name(key)) == 0)
  100.  
  101. #define for_all_list(lis,rest)  \
  102.   for (rest = (lis); rest != lispnil; rest = cdr(rest))
  103.  
  104. /* All the Lisp interface declarations. */
  105.  
  106. extern Obj *lispnil;
  107. extern Obj *lispeof;
  108.  
  109. extern void init_lisp PARAMS ((void));
  110. extern int strmgetc PARAMS ((Strm *strm));
  111. extern void strmungetc PARAMS ((int ch, Strm *strm));
  112. extern Obj *read_form PARAMS ((FILE *fp, int *p1, int *p2));
  113. extern Obj *read_form_from_string PARAMS ((char *str, int *p1, int *p2));
  114. extern void sprintf_context PARAMS ((char *buf, int n, int *start, int *end, char *context));
  115. extern Obj *read_form_aux PARAMS ((Strm *strm));
  116. extern Obj *read_list PARAMS ((Strm *strm));
  117. extern int read_delimited_text PARAMS ((Strm *strm, char *delim, int spacedelimits, int eofdelimits));
  118. extern int length PARAMS ((Obj *list));
  119. extern Obj *new_string PARAMS ((char *str));
  120. extern Obj *new_number PARAMS ((int num));
  121. extern Obj *new_utype PARAMS ((int u));
  122. extern Obj *new_mtype PARAMS ((int r));
  123. extern Obj *new_ttype PARAMS ((int t));
  124. extern Obj *new_pointer PARAMS ((Obj *sym, char *ptr));
  125. extern Obj *cons PARAMS ((Obj *x, Obj *y));
  126. extern void type_warning PARAMS ((char *funname, Obj *x, char *typename, Obj *subst));
  127. extern Obj *car PARAMS ((Obj *x));
  128. extern Obj *cdr PARAMS ((Obj *x));
  129. extern Obj *cadr PARAMS ((Obj *x));
  130. extern Obj *cddr PARAMS ((Obj *x));
  131. extern Obj *caddr PARAMS ((Obj *x));
  132. extern void set_cdr PARAMS ((Obj *x, Obj *v));
  133. extern char *c_string PARAMS ((Obj *x));
  134. extern int c_number PARAMS ((Obj *x));
  135. extern Obj *intern_symbol PARAMS ((char *str));
  136. extern Obj *symbol_value PARAMS ((Obj *sym));
  137. extern Obj *setq PARAMS ((Obj *sym, Obj *x));
  138. extern void makunbound PARAMS ((Obj *sym));
  139. extern void flag_as_constant PARAMS ((Obj *sym));
  140. extern int constantp PARAMS ((Obj *sym));
  141. extern int numberp PARAMS ((Obj *x));
  142. extern int stringp PARAMS ((Obj *x));
  143. extern int symbolp PARAMS ((Obj *x));
  144. extern int consp PARAMS ((Obj *x));
  145. extern int utypep PARAMS ((Obj *x));
  146. extern int mtypep PARAMS ((Obj *x));
  147. extern int ttypep PARAMS ((Obj *x));
  148. extern int pointerp PARAMS ((Obj *x));
  149. extern int boundp PARAMS ((Obj *sym));
  150. extern int numberishp PARAMS ((Obj *x));
  151. extern int listp PARAMS ((Obj *x));
  152. extern int equal PARAMS ((Obj *x, Obj *y));
  153. extern int member PARAMS ((Obj *x, Obj *lis));
  154. extern Obj *elt PARAMS ((Obj *lis, int n));
  155. extern Obj *reverse PARAMS ((Obj *lis));
  156. extern Obj *find_at_key PARAMS ((Obj *lis, char *key));
  157. extern Obj *replace_at_key PARAMS ((Obj *lis, char *key, Obj *newval));
  158. extern void fprintlisp PARAMS ((FILE *fp, Obj *obj));
  159. extern void fprint_list PARAMS ((FILE *fp, Obj *obj));
  160. extern void sprintlisp PARAMS ((char *buf, Obj *obj));
  161. extern void sprint_list PARAMS ((char *buf, Obj *obj));
  162. extern void dlisp PARAMS ((Obj *x));
  163. extern void print_form_and_value PARAMS ((FILE *fp, Obj *form));
  164. extern Obj *append_two_lists PARAMS ((Obj *x1, Obj *x2));
  165. extern Obj *append_lists PARAMS ((Obj *lis));
  166. extern Obj *remove_from_list PARAMS ((Obj *elt, Obj *lis));
  167. extern void push_binding PARAMS ((Obj **lis, Obj *key, Obj *val));
  168. extern void push_cdr_binding PARAMS ((Obj **lis, Obj *key, Obj *val));
  169. extern void push_int_binding PARAMS ((Obj **lis, Obj *key, int val));
  170. extern void push_key_binding PARAMS ((Obj **lis, int key, Obj *val));
  171. extern void push_key_cdr_binding PARAMS ((Obj **lis, int key, Obj *val));
  172. extern void push_key_int_binding PARAMS ((Obj **lis, int key, int val));
  173. extern Obj *eval PARAMS ((Obj *x));
  174. extern Obj *eval_symbol PARAMS ((Obj *x));
  175. extern Obj *eval_list PARAMS ((Obj *x));
  176. extern int eval_boolean_expression PARAMS ((Obj *expr, int (*fn)(Obj *), int dflt));
  177. extern int interpolate_in_list PARAMS ((int val, Obj *lis, int *rslt));
  178. extern int interpolate_in_list_ext PARAMS ((int val, Obj *lis,
  179.             int mindo, int minval, int minrslt,
  180.             int maxdo, int maxval, int maxrslt,
  181.             int *rslt));
  182.  
  183. /* Functions that the Lisp code needs to have defined. */
  184.  
  185. extern void init_warning PARAMS ((char *str, ...));
  186. extern void low_init_warning PARAMS ((char *str));
  187. extern void init_error PARAMS ((char *str, ...));
  188. extern void low_init_error PARAMS ((char *str));
  189. extern void run_warning PARAMS ((char *str, ...));
  190. extern void low_run_warning PARAMS ((char *str));
  191. extern void run_error PARAMS ((char *str, ...));
  192. extern void low_run_error PARAMS ((char *str));
  193. extern void announce_read_progress PARAMS ((void));
  194. extern int keyword_code PARAMS ((char *str));
  195. extern char *keyword_name PARAMS ((enum keywords k));
  196. extern int lazy_bind PARAMS ((Obj *sym));
  197. extern void init_predefined_symbols PARAMS ((void));
  198.  
  199. #endif /* LISP_H */
  200.