scheme.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /* SCHEME.H */
  2. #ifndef _SCHEME_H
  3. #define _SCHEME_H
  4. #include <stdio.h>
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. /*
  9. * Default values for #define'd symbols
  10. */
  11. #ifndef STANDALONE /* If used as standalone interpreter */
  12. # define STANDALONE 1
  13. #endif
  14. #ifndef _MSC_VER
  15. # define USE_STRCASECMP 1
  16. # ifndef USE_STRLWR
  17. # define USE_STRLWR 1
  18. # endif
  19. # define SCHEME_EXPORT
  20. #else
  21. # define USE_STRCASECMP 0
  22. # define USE_STRLWR 0
  23. # ifdef _SCHEME_SOURCE
  24. # define SCHEME_EXPORT __declspec(dllexport)
  25. # else
  26. # define SCHEME_EXPORT __declspec(dllimport)
  27. # endif
  28. #endif
  29. #if USE_NO_FEATURES
  30. # define USE_MATH 0
  31. # define USE_CHAR_CLASSIFIERS 0
  32. # define USE_ASCII_NAMES 0
  33. # define USE_STRING_PORTS 0
  34. # define USE_ERROR_HOOK 0
  35. # define USE_TRACING 0
  36. # define USE_COLON_HOOK 0
  37. # define USE_DL 0
  38. # define USE_PLIST 0
  39. #endif
  40. /*
  41. * Leave it defined if you want continuations, and also for the Sharp Zaurus.
  42. * Undefine it if you only care about faster speed and not strict Scheme compatibility.
  43. */
  44. #define USE_SCHEME_STACK
  45. #if USE_DL
  46. # define USE_INTERFACE 1
  47. #endif
  48. #ifndef USE_MATH /* If math support is needed */
  49. # define USE_MATH 1
  50. #endif
  51. #ifndef USE_CHAR_CLASSIFIERS /* If char classifiers are needed */
  52. # define USE_CHAR_CLASSIFIERS 1
  53. #endif
  54. #ifndef USE_ASCII_NAMES /* If extended escaped characters are needed */
  55. # define USE_ASCII_NAMES 1
  56. #endif
  57. #ifndef USE_STRING_PORTS /* Enable string ports */
  58. # define USE_STRING_PORTS 1
  59. #endif
  60. #ifndef USE_TRACING
  61. # define USE_TRACING 1
  62. #endif
  63. #ifndef USE_PLIST
  64. # define USE_PLIST 0
  65. #endif
  66. /* To force system errors through user-defined error handling (see *error-hook*) */
  67. #ifndef USE_ERROR_HOOK
  68. # define USE_ERROR_HOOK 1
  69. #endif
  70. #ifndef USE_COLON_HOOK /* Enable qualified qualifier */
  71. # define USE_COLON_HOOK 1
  72. #endif
  73. #ifndef USE_STRCASECMP /* stricmp for Unix */
  74. # define USE_STRCASECMP 0
  75. #endif
  76. #ifndef USE_STRLWR
  77. # define USE_STRLWR 1
  78. #endif
  79. #ifndef STDIO_ADDS_CR /* Define if DOS/Windows */
  80. # define STDIO_ADDS_CR 0
  81. #endif
  82. #ifndef INLINE
  83. # define INLINE
  84. #endif
  85. #ifndef USE_INTERFACE
  86. # define USE_INTERFACE 0
  87. #endif
  88. #ifndef SHOW_ERROR_LINE /* Show error line in file */
  89. # define SHOW_ERROR_LINE 1
  90. #endif
  91. typedef struct scheme scheme;
  92. typedef struct cell *pointer;
  93. typedef void * (*func_alloc)(size_t);
  94. typedef void (*func_dealloc)(void *);
  95. /* num, for generic arithmetic */
  96. typedef struct num {
  97. char is_fixnum;
  98. union {
  99. long ivalue;
  100. double rvalue;
  101. } value;
  102. } num;
  103. SCHEME_EXPORT scheme *scheme_init_new();
  104. SCHEME_EXPORT scheme *scheme_init_new_custom_alloc(func_alloc malloc, func_dealloc free);
  105. SCHEME_EXPORT int scheme_init(scheme *sc);
  106. SCHEME_EXPORT int scheme_init_custom_alloc(scheme *sc, func_alloc, func_dealloc);
  107. SCHEME_EXPORT void scheme_deinit(scheme *sc);
  108. void scheme_set_input_port_file(scheme *sc, FILE *fin);
  109. void scheme_set_input_port_string(scheme *sc, char *start, char *past_the_end);
  110. SCHEME_EXPORT void scheme_set_output_port_file(scheme *sc, FILE *fin);
  111. void scheme_set_output_port_string(scheme *sc, char *start, char *past_the_end);
  112. SCHEME_EXPORT void scheme_load_file(scheme *sc, FILE *fin);
  113. SCHEME_EXPORT void scheme_load_named_file(scheme *sc, FILE *fin, const char *filename);
  114. SCHEME_EXPORT void scheme_load_string(scheme *sc, const char *cmd);
  115. SCHEME_EXPORT pointer scheme_apply0(scheme *sc, const char *procname);
  116. SCHEME_EXPORT pointer scheme_call(scheme *sc, pointer func, pointer args);
  117. SCHEME_EXPORT pointer scheme_eval(scheme *sc, pointer obj);
  118. void scheme_set_external_data(scheme *sc, void *p);
  119. SCHEME_EXPORT void scheme_define(scheme *sc, pointer env, pointer symbol, pointer value);
  120. typedef pointer (*foreign_func)(scheme *, pointer);
  121. pointer _cons(scheme *sc, pointer a, pointer b, int immutable);
  122. pointer mk_integer(scheme *sc, long num);
  123. pointer mk_real(scheme *sc, double num);
  124. pointer mk_symbol(scheme *sc, const char *name);
  125. pointer gensym(scheme *sc);
  126. pointer mk_string(scheme *sc, const char *str);
  127. pointer mk_counted_string(scheme *sc, const char *str, int len);
  128. pointer mk_empty_string(scheme *sc, int len, char fill);
  129. pointer mk_character(scheme *sc, int c);
  130. pointer mk_foreign_func(scheme *sc, foreign_func f);
  131. void putstr(scheme *sc, const char *s);
  132. int list_length(scheme *sc, pointer a);
  133. int eqv(pointer a, pointer b);
  134. #if USE_INTERFACE
  135. struct scheme_interface {
  136. void (*scheme_define)(scheme *sc, pointer env, pointer symbol, pointer value);
  137. pointer (*cons)(scheme *sc, pointer a, pointer b);
  138. pointer (*immutable_cons)(scheme *sc, pointer a, pointer b);
  139. pointer (*reserve_cells)(scheme *sc, int n);
  140. pointer (*mk_integer)(scheme *sc, long num);
  141. pointer (*mk_real)(scheme *sc, double num);
  142. pointer (*mk_symbol)(scheme *sc, const char *name);
  143. pointer (*gensym)(scheme *sc);
  144. pointer (*mk_string)(scheme *sc, const char *str);
  145. pointer (*mk_counted_string)(scheme *sc, const char *str, int len);
  146. pointer (*mk_character)(scheme *sc, int c);
  147. pointer (*mk_vector)(scheme *sc, int len);
  148. pointer (*mk_foreign_func)(scheme *sc, foreign_func f);
  149. void (*putstr)(scheme *sc, const char *s);
  150. void (*putcharacter)(scheme *sc, int c);
  151. int (*is_string)(pointer p);
  152. char *(*string_value)(pointer p);
  153. int (*is_number)(pointer p);
  154. num (*nvalue)(pointer p);
  155. long (*ivalue)(pointer p);
  156. double (*rvalue)(pointer p);
  157. int (*is_integer)(pointer p);
  158. int (*is_real)(pointer p);
  159. int (*is_character)(pointer p);
  160. long (*charvalue)(pointer p);
  161. int (*is_list)(scheme *sc, pointer p);
  162. int (*is_vector)(pointer p);
  163. int (*list_length)(scheme *sc, pointer vec);
  164. long (*vector_length)(pointer vec);
  165. void (*fill_vector)(pointer vec, pointer elem);
  166. pointer (*vector_elem)(pointer vec, int ielem);
  167. pointer (*set_vector_elem)(pointer vec, int ielem, pointer newel);
  168. int (*is_port)(pointer p);
  169. int (*is_pair)(pointer p);
  170. pointer (*pair_car)(pointer p);
  171. pointer (*pair_cdr)(pointer p);
  172. pointer (*set_car)(pointer p, pointer q);
  173. pointer (*set_cdr)(pointer p, pointer q);
  174. int (*is_symbol)(pointer p);
  175. char *(*symname)(pointer p);
  176. int (*is_syntax)(pointer p);
  177. int (*is_proc)(pointer p);
  178. int (*is_foreign)(pointer p);
  179. char *(*syntaxname)(pointer p);
  180. int (*is_closure)(pointer p);
  181. int (*is_macro)(pointer p);
  182. pointer (*closure_code)(pointer p);
  183. pointer (*closure_env)(pointer p);
  184. int (*is_continuation)(pointer p);
  185. int (*is_promise)(pointer p);
  186. int (*is_environment)(pointer p);
  187. int (*is_immutable)(pointer p);
  188. void (*setimmutable)(pointer p);
  189. void (*load_file)(scheme *sc, FILE *fin);
  190. void (*load_string)(scheme *sc, const char *input);
  191. };
  192. #endif
  193. #if !STANDALONE
  194. typedef struct scheme_registerable
  195. {
  196. foreign_func f;
  197. const char * name;
  198. }
  199. scheme_registerable;
  200. void scheme_register_foreign_func_list(scheme * sc,
  201. scheme_registerable * list,
  202. int n);
  203. #endif /* !STANDALONE */
  204. #ifdef __cplusplus
  205. }
  206. #endif
  207. #endif
  208. /*
  209. Local variables:
  210. c-file-style: "k&r"
  211. End:
  212. */