13 * Default values for #define'd symbols
15 #ifndef STANDALONE /* If used as standalone interpreter */
20 # define USE_STRCASECMP 1
24 # define SCHEME_EXPORT
26 # define USE_STRCASECMP 0
28 # ifdef _SCHEME_SOURCE
29 # define SCHEME_EXPORT __declspec(dllexport)
31 # define SCHEME_EXPORT __declspec(dllimport)
37 # define USE_CHAR_CLASSIFIERS 0
38 # define USE_ASCII_NAMES 0
39 # define USE_STRING_PORTS 0
40 # define USE_ERROR_HOOK 0
41 # define USE_TRACING 0
42 # define USE_COLON_HOOK 0
43 # define USE_COMPILE_HOOK 0
46 # define USE_SMALL_INTEGERS 0
48 # define USE_HISTORY 0
53 # define USE_INTERFACE 1
57 #ifndef USE_MATH /* If math support is needed */
61 #ifndef USE_CHAR_CLASSIFIERS /* If char classifiers are needed */
62 # define USE_CHAR_CLASSIFIERS 1
65 #ifndef USE_ASCII_NAMES /* If extended escaped characters are needed */
66 # define USE_ASCII_NAMES 1
69 #ifndef USE_STRING_PORTS /* Enable string ports */
70 # define USE_STRING_PORTS 1
74 # define USE_TRACING 1
81 /* If set, then every object can be tagged. */
86 /* Keep a history of function calls. This enables a feature similar
89 # define USE_HISTORY 1
92 /* To force system errors through user-defined error handling (see *error-hook*) */
93 #ifndef USE_ERROR_HOOK
94 # define USE_ERROR_HOOK 1
97 #ifndef USE_COLON_HOOK /* Enable qualified qualifier */
98 # define USE_COLON_HOOK 1
101 /* Compile functions using *compile-hook*. The default hook expands
103 #ifndef USE_COMPILE_HOOK
104 # define USE_COMPILE_HOOK 1
107 /* Enable faster opcode dispatch. */
108 #ifndef USE_THREADED_CODE
109 # define USE_THREADED_CODE 1
112 /* Use a static set of cells to represent small numbers. This set
113 * notably includes all opcodes, and hence saves a cell reservation
114 * during 's_save'. */
115 #ifndef USE_SMALL_INTEGERS
116 # define USE_SMALL_INTEGERS 1
119 #ifndef USE_STRCASECMP /* stricmp for Unix */
120 # define USE_STRCASECMP 0
124 # define USE_STRLWR 1
127 #ifndef STDIO_ADDS_CR /* Define if DOS/Windows */
128 # define STDIO_ADDS_CR 0
135 #ifndef USE_INTERFACE
136 # define USE_INTERFACE 0
139 #ifndef SHOW_ERROR_LINE /* Show error line in file */
140 # define SHOW_ERROR_LINE 1
143 typedef struct scheme scheme;
144 typedef struct cell *pointer;
146 typedef void * (*func_alloc)(size_t);
147 typedef void (*func_dealloc)(void *);
149 /* table of functions required for foreign objects */
150 typedef struct foreign_object_vtable {
151 void (*finalize)(scheme *sc, void *data);
152 void (*to_string)(scheme *sc, char *out, size_t size, void *data);
153 } foreign_object_vtable;
155 /* num, for generic arithmetic */
164 SCHEME_EXPORT scheme *scheme_init_new(void);
165 SCHEME_EXPORT scheme *scheme_init_new_custom_alloc(func_alloc malloc, func_dealloc free);
166 SCHEME_EXPORT int scheme_init(scheme *sc);
167 SCHEME_EXPORT int scheme_init_custom_alloc(scheme *sc, func_alloc, func_dealloc);
168 SCHEME_EXPORT void scheme_deinit(scheme *sc);
169 void scheme_set_input_port_file(scheme *sc, FILE *fin);
170 void scheme_set_input_port_string(scheme *sc, char *start, char *past_the_end);
171 SCHEME_EXPORT void scheme_set_output_port_file(scheme *sc, FILE *fin);
172 void scheme_set_output_port_string(scheme *sc, char *start, char *past_the_end);
173 SCHEME_EXPORT void scheme_load_file(scheme *sc, FILE *fin);
174 SCHEME_EXPORT void scheme_load_named_file(scheme *sc, FILE *fin, const char *filename);
175 SCHEME_EXPORT void scheme_load_string(scheme *sc, const char *cmd);
176 SCHEME_EXPORT pointer scheme_apply0(scheme *sc, const char *procname);
177 SCHEME_EXPORT pointer scheme_call(scheme *sc, pointer func, pointer args);
178 SCHEME_EXPORT pointer scheme_eval(scheme *sc, pointer obj);
179 void scheme_set_external_data(scheme *sc, void *p);
180 SCHEME_EXPORT void scheme_define(scheme *sc, pointer env, pointer symbol, pointer value);
182 typedef pointer (*foreign_func)(scheme *, pointer);
184 pointer _cons(scheme *sc, pointer a, pointer b, int immutable);
185 pointer mk_integer(scheme *sc, long num);
186 pointer mk_real(scheme *sc, double num);
187 pointer mk_symbol(scheme *sc, const char *name);
188 pointer gensym(scheme *sc);
189 pointer mk_string(scheme *sc, const char *str);
190 pointer mk_counted_string(scheme *sc, const char *str, int len);
191 pointer mk_empty_string(scheme *sc, int len, char fill);
192 pointer mk_character(scheme *sc, int c);
193 pointer mk_foreign_func(scheme *sc, foreign_func f);
194 pointer mk_foreign_object(scheme *sc, const foreign_object_vtable *vtable, void *data);
195 void putstr(scheme *sc, const char *s);
196 int list_length(scheme *sc, pointer a);
197 int eqv(pointer a, pointer b);
201 struct scheme_interface {
202 void (*scheme_define)(scheme *sc, pointer env, pointer symbol, pointer value);
203 pointer (*cons)(scheme *sc, pointer a, pointer b);
204 pointer (*immutable_cons)(scheme *sc, pointer a, pointer b);
205 pointer (*reserve_cells)(scheme *sc, int n);
206 pointer (*mk_integer)(scheme *sc, long num);
207 pointer (*mk_real)(scheme *sc, double num);
208 pointer (*mk_symbol)(scheme *sc, const char *name);
209 pointer (*gensym)(scheme *sc);
210 pointer (*mk_string)(scheme *sc, const char *str);
211 pointer (*mk_counted_string)(scheme *sc, const char *str, int len);
212 pointer (*mk_character)(scheme *sc, int c);
213 pointer (*mk_vector)(scheme *sc, int len);
214 pointer (*mk_foreign_func)(scheme *sc, foreign_func f);
215 pointer (*mk_foreign_object)(scheme *sc, const foreign_object_vtable *vtable, void *data);
216 const foreign_object_vtable *(*get_foreign_object_vtable)(pointer p);
217 void *(*get_foreign_object_data)(pointer p);
218 void (*putstr)(scheme *sc, const char *s);
219 void (*putcharacter)(scheme *sc, int c);
221 int (*is_string)(pointer p);
222 char *(*string_value)(pointer p);
223 int (*is_number)(pointer p);
224 num (*nvalue)(pointer p);
225 long (*ivalue)(pointer p);
226 double (*rvalue)(pointer p);
227 int (*is_integer)(pointer p);
228 int (*is_real)(pointer p);
229 int (*is_character)(pointer p);
230 long (*charvalue)(pointer p);
231 int (*is_list)(scheme *sc, pointer p);
232 int (*is_vector)(pointer p);
233 int (*list_length)(scheme *sc, pointer vec);
234 long (*vector_length)(pointer vec);
235 void (*fill_vector)(pointer vec, pointer elem);
236 pointer (*vector_elem)(pointer vec, int ielem);
237 pointer (*set_vector_elem)(pointer vec, int ielem, pointer newel);
238 int (*is_port)(pointer p);
240 int (*is_pair)(pointer p);
241 pointer (*pair_car)(pointer p);
242 pointer (*pair_cdr)(pointer p);
243 pointer (*set_car)(pointer p, pointer q);
244 pointer (*set_cdr)(pointer p, pointer q);
246 int (*is_symbol)(pointer p);
247 char *(*symname)(pointer p);
249 int (*is_syntax)(pointer p);
250 int (*is_proc)(pointer p);
251 int (*is_foreign)(pointer p);
252 char *(*syntaxname)(pointer p);
253 int (*is_closure)(pointer p);
254 int (*is_macro)(pointer p);
255 pointer (*closure_code)(pointer p);
256 pointer (*closure_env)(pointer p);
258 int (*is_continuation)(pointer p);
259 int (*is_promise)(pointer p);
260 int (*is_environment)(pointer p);
261 int (*is_immutable)(pointer p);
262 void (*setimmutable)(pointer p);
263 void (*load_file)(scheme *sc, FILE *fin);
264 void (*load_string)(scheme *sc, const char *input);
265 pointer (*mk_port_from_file)(scheme *sc, FILE *f, int kind);
270 typedef struct scheme_registerable
277 void scheme_register_foreign_func_list(scheme * sc,
278 scheme_registerable * list,
281 #endif /* !STANDALONE */