1 typedef struct {
2 /*========================================================================*/
3 /*                       setjmpup (continuations)                         */
4 /*========================================================================*/
5 void (*scheme_init_jmpup_buf)(Scheme_Jumpup_Buf *b);
6 int (*scheme_setjmpup_relative)(Scheme_Jumpup_Buf *b, void *base,
7 				       void * volatile start, struct Scheme_Cont *cont);
8 void (*scheme_longjmpup)(Scheme_Jumpup_Buf *b);
9 void (*scheme_reset_jmpup_buf)(Scheme_Jumpup_Buf *b);
10 #ifdef USE_MZ_SETJMP
11 Scheme_Setjmp_Proc (*scheme_get_mz_setjmp)(void);
12 int (*scheme_mz_setjmp)(mz_pre_jmp_buf b);
13 void (*scheme_mz_longjmp)(mz_pre_jmp_buf b, int v);
14 #endif
15 void (*scheme_clear_escape)(void);
16 Scheme_Jumpup_Buf_Holder *(*scheme_new_jmpupbuf_holder)(void);
17 /*========================================================================*/
18 /*                                parameters                              */
19 /*========================================================================*/
20 Scheme_Config *(*scheme_current_config)(void);
21 Scheme_Config *(*scheme_minimal_config)(void);
22 Scheme_Config *(*scheme_extend_config)(Scheme_Config *c, int pos, Scheme_Object *init_val);
23 void (*scheme_install_config)(Scheme_Config *);
24 Scheme_Object *(*scheme_get_param)(Scheme_Config *c, int pos);
25 void (*scheme_set_param)(Scheme_Config *c, int pos, Scheme_Object *o);
26 Scheme_Object *(*scheme_get_thread_param)(Scheme_Config *c, Scheme_Thread_Cell_Table *cells, int pos);
27 void (*scheme_set_thread_param)(Scheme_Config *c, Scheme_Thread_Cell_Table *cells, int pos, Scheme_Object *o);
28 Scheme_Env *(*scheme_get_env)(Scheme_Config *config);
29 Scheme_Thread_Cell_Table *(*scheme_empty_cell_table)();
30 Scheme_Thread_Cell_Table *(*scheme_inherit_cells)(Scheme_Thread_Cell_Table *cells);
31 Scheme_Object *(*scheme_current_break_cell)();
32 /*========================================================================*/
33 /*                                threads                                 */
34 /*========================================================================*/
35 #ifndef USE_THREAD_LOCAL
36 # ifndef LINK_EXTENSIONS_BY_TABLE
37 Scheme_Thread *scheme_current_thread;
38 volatile int scheme_fuel_counter;
39 # else
40 Scheme_Thread **scheme_current_thread_ptr;
41 volatile int *scheme_fuel_counter_ptr;
42 # endif
43 #endif
44 Scheme_Thread *(*scheme_get_current_thread)();
45 int (*scheme_is_atomic)(void);
46 void (*scheme_start_atomic)(void);
47 void (*scheme_end_atomic)(void);
48 void (*scheme_end_atomic_no_swap)(void);
49 void (*scheme_start_in_scheduler)(void);
50 void (*scheme_end_in_scheduler)(void);
51 void (*scheme_start_atomic_no_break)(void);
52 void (*scheme_end_atomic_can_break)(void);
53 void (*scheme_out_of_fuel)(void);
54 Scheme_Object *(*scheme_thread)(Scheme_Object *thunk);
55 Scheme_Object *(*scheme_thread_w_details)(Scheme_Object *thunk,
56 						 Scheme_Config *init_config,
57 						 Scheme_Thread_Cell_Table *copy_from,
58 						 Scheme_Object *break_cell,
59 						 Scheme_Custodian *owning_custodian,
60 						 int suspend_to_kill);
61 void (*scheme_kill_thread)(Scheme_Thread *p);
62 void (*scheme_break_thread)(Scheme_Thread *p);
63 void (*scheme_break_kind_thread)(Scheme_Thread *p, int kind);
64 void (*scheme_break_main_thread)();
65 void (*scheme_break_main_thread_at)(void *);
66 void (*scheme_break_kind_main_thread_at)(void *, int kind);
67 void *(*scheme_get_main_thread_break_handle)();
68 void (*scheme_set_break_main_target)(Scheme_Thread *p);
69 void (*scheme_thread_block)(float sleep_time);
70 void (*scheme_thread_block_enable_break)(float sleep_time, int enable);
71 void (*scheme_swap_thread)(Scheme_Thread *process);
72 void (*scheme_making_progress)();
73 void (*scheme_weak_suspend_thread)(Scheme_Thread *p);
74 void (*scheme_weak_resume_thread)(Scheme_Thread *p);
75 int (*scheme_block_until)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun, Scheme_Object *, float);
76 int (*scheme_block_until_enable_break)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun, Scheme_Object *,
77 					      float, int enable);
78 int (*scheme_block_until_unless)(Scheme_Ready_Fun f, Scheme_Needs_Wakeup_Fun fdf,
79 					Scheme_Object *data, float delay,
80 					Scheme_Object *unless,
81 					int enable_break);
82 void (*scheme_wait_input_allowed)(Scheme_Input_Port *port, int nonblock);
83 int (*scheme_unless_ready)(Scheme_Object *unless);
84 int (*scheme_in_main_thread)(void);
85 void (*scheme_cancel_sleep)(void);
86 void (*scheme_start_sleeper_thread)(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd);
87 void (*scheme_end_sleeper_thread)();
88 void (*scheme_set_place_sleep)(Scheme_Sleep_Proc slp);
89 void (*scheme_notify_sleep_progress)();
90 Scheme_Object *(*scheme_make_thread_cell)(Scheme_Object *def_val, int inherited);
91 Scheme_Object *(*scheme_thread_cell_get)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells);
92 void (*scheme_thread_cell_set)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v);
93 int (*scheme_tls_allocate)();
94 void (*scheme_tls_set)(int pos, void *v);
95 void *(*scheme_tls_get)(int pos);
96 Scheme_Custodian *(*scheme_make_custodian)(Scheme_Custodian *);
97 Scheme_Custodian_Reference *(*scheme_add_managed)(Scheme_Custodian *m, Scheme_Object *o,
98 							 Scheme_Close_Custodian_Client *f, void *data,
99 							 int strong);
100 Scheme_Custodian_Reference *(*scheme_add_managed_close_on_exit)(Scheme_Custodian *m, Scheme_Object *o,
101                                                                        Scheme_Close_Custodian_Client *f, void *data);
102 void (*scheme_custodian_check_available)(Scheme_Custodian *m, const char *who, const char *what);
103 int (*scheme_custodian_is_available)(Scheme_Custodian *m);
104 void (*scheme_remove_managed)(Scheme_Custodian_Reference *m, Scheme_Object *o);
105 void (*scheme_close_managed)(Scheme_Custodian *m);
106 void (*scheme_schedule_custodian_close)(Scheme_Custodian *c);
107 void (*scheme_add_custodian_extractor)(Scheme_Type t, Scheme_Custodian_Extractor e);
108 int (*scheme_flush_managed)(Scheme_Plumber *p, int catch_errors);
109 Scheme_Object *(*scheme_add_flush)(Scheme_Plumber *p, Scheme_Object *proc_or_port, int weak_flush);
110 void (*scheme_remove_flush)(Scheme_Object *h);
111 void (*scheme_add_atexit_closer)(Scheme_Exit_Closer_Func f);
112 int (*scheme_atexit)(void (*func)(void));
113 void (*scheme_add_evt)(Scheme_Type type,
114 				   Scheme_Ready_Fun ready,
115 				   Scheme_Needs_Wakeup_Fun wakeup,
116 				   Scheme_Sync_Filter_Fun filter,
117 				   int can_redirect);
118 void (*scheme_add_evt_through_sema)(Scheme_Type type,
119 					    Scheme_Sync_Sema_Fun sema,
120 					    Scheme_Sync_Filter_Fun filter);
121 int (*scheme_is_evt)(Scheme_Object *o);
122 Scheme_Object *(*scheme_sync)(int argc, Scheme_Object *argv[]);
123 Scheme_Object *(*scheme_sync_enable_break)(int argc, Scheme_Object *argv[]);
124 Scheme_Object *(*scheme_sync_timeout)(int argc, Scheme_Object *argv[]);
125 Scheme_Object *(*scheme_make_evt_set)(int argc, Scheme_Object **argv);
126 void (*scheme_add_swap_callback)(Scheme_Closure_Func f, Scheme_Object *data);
127 void (*scheme_add_swap_out_callback)(Scheme_Closure_Func f, Scheme_Object *data);
128 Scheme_Object *(*scheme_call_enable_break)(Scheme_Prim *prim, int argc, Scheme_Object *argv[]);
129 int (*scheme_close_should_force_port_closed)();
130 void (*scheme_push_kill_action)(Scheme_Kill_Action_Func f, void *d);
131 void (*scheme_pop_kill_action)();
132 void (*scheme_set_can_break)(int on);
133 void (*scheme_push_break_enable)(Scheme_Cont_Frame_Data *cframe, int on, int pre_check);
134 void (*scheme_pop_break_enable)(Scheme_Cont_Frame_Data *cframe, int post_check);
135 Scheme_Object *(*scheme_abort_continuation_no_dws)(Scheme_Object *pt, Scheme_Object *v);
136 Scheme_Object *(*scheme_call_with_composable_no_dws)(Scheme_Object *proc, Scheme_Object *pt);
137 Scheme_On_Atomic_Timeout_Proc (*scheme_set_on_atomic_timeout)(Scheme_On_Atomic_Timeout_Proc p, void *data);
138 /*========================================================================*/
139 /*                              error handling                            */
140 /*========================================================================*/
141 void (*scheme_signal_error)(const char *msg, ...);
142 void (*scheme_raise_exn)(int exnid, ...);
143 void (*scheme_warning)(char *msg, ...);
144 void (*scheme_raise)(Scheme_Object *exn);
145 int (*scheme_log_level_p)(Scheme_Logger *logger, int level);
146 int (*scheme_log_level_topic_p)(Scheme_Logger *logger, int level, Scheme_Object *name);
147 void (*scheme_log)(Scheme_Logger *logger, int level, int flags,
148                           const char *msg, ...);
149 void (*scheme_log_w_data)(Scheme_Logger *logger, int level, int flags,
150                                  Scheme_Object *data,
151                                  const char *msg, ...);
152 void (*scheme_log_message)(Scheme_Logger *logger, int level, char *buffer, intptr_t len, Scheme_Object *data);
153 void (*scheme_log_name_message)(Scheme_Logger *logger, int level, Scheme_Object *name,
154                                        char *buffer, intptr_t len, Scheme_Object *data);
155 void (*scheme_log_name_pfx_message)(Scheme_Logger *logger, int level, Scheme_Object *name,
156                                            char *buffer, intptr_t len, Scheme_Object *data,
157                                            int prefix_message);
158 void (*scheme_log_abort)(char *buffer);
159 void (*scheme_log_warning)(char *buffer);
160 void (*scheme_glib_log_message)(const char *log_domain, int log_level, const char *message, void *user_data);
161 void *(*scheme_glib_log_message_test)(char *str);
162 void (*scheme_out_of_memory_abort)();
163 void (*scheme_wrong_count)(const char *name, int minc, int maxc, int argc, Scheme_Object **argv);
164 void (*scheme_wrong_count_m)(const char *name, int minc, int maxc, int argc, Scheme_Object **argv, int is_method);
165 void (*scheme_case_lambda_wrong_count)(const char *name, int argc, Scheme_Object **argv, int is_method, int count, ...);
166 void (*scheme_wrong_type)(const char *name, const char *expected, int which, int argc, Scheme_Object **argv);
167 void (*scheme_wrong_contract)(const char *name, const char *expected, int which, int argc, Scheme_Object **argv);
168 void (*scheme_wrong_field_type)(Scheme_Object *c_name, const char *expected, Scheme_Object *o);
169 void (*scheme_wrong_field_contract)(Scheme_Object *c_name, const char *expected, Scheme_Object *o);
170 void (*scheme_arg_mismatch)(const char *name, const char *msg, Scheme_Object *o);
171 void (*scheme_contract_error)(const char *name, const char *msg, ...);
172 void (*scheme_wrong_return_arity)(const char *where, int expected, int got, Scheme_Object **argv, const char *context_detail, ...);
173 void (*scheme_unbound_global)(Scheme_Bucket *b);
174 Scheme_Object *(*scheme_dynamic_wind)(void (*pre)(void *),
175 					     Scheme_Object *(* volatile act)(void *),
176 					     void (* volatile post)(void *),
177 					     Scheme_Object *(*jmp_handler)(void *),
178 					     void * volatile data);
179 /*========================================================================*/
180 /*                                 types                                  */
181 /*========================================================================*/
182 Scheme_Type (*scheme_make_type)(const char *name);
183 char *(*scheme_get_type_name)(Scheme_Type type);
184 char *(*scheme_get_type_name_or_null)(Scheme_Type type);
185 /*========================================================================*/
186 /*                              constants                                 */
187 /*========================================================================*/
188 Scheme_Object *scheme_eof;
189 Scheme_Object *(*scheme_make_eof)(void);
190 Scheme_Object *scheme_null;
191 Scheme_Object *(*scheme_make_null)(void);
192 Scheme_Object *scheme_true;
193 Scheme_Object *(*scheme_make_true)(void);
194 Scheme_Object *scheme_false;
195 Scheme_Object *(*scheme_make_false)(void);
196 Scheme_Object *scheme_void;
197 Scheme_Object *(*scheme_make_void)(void);
198 Scheme_Object *scheme_undefined;
199 Scheme_Object *scheme_tail_call_waiting;
200 Scheme_Object *scheme_multiple_values;
201 unsigned short **scheme_uchar_table;
202 unsigned char **scheme_uchar_cases_table;
203 unsigned char **scheme_uchar_cats_table;
204 int *scheme_uchar_ups;
205 int *scheme_uchar_downs;
206 int *scheme_uchar_titles;
207 int *scheme_uchar_folds;
208 unsigned char *scheme_uchar_combining_classes;
209 void *scheme_on_demand_jit_code;
210 /*========================================================================*/
211 /*                              evaluation                                */
212 /*========================================================================*/
213 Scheme_Object *(*scheme_eval)(Scheme_Object *obj, Scheme_Env *env);
214 Scheme_Object *(*scheme_eval_multi)(Scheme_Object *obj, Scheme_Env *env);
215 Scheme_Object *(*scheme_eval_with_prompt)(Scheme_Object *obj, Scheme_Env *env);
216 Scheme_Object *(*scheme_eval_multi_with_prompt)(Scheme_Object *obj, Scheme_Env *env);
217 Scheme_Object *(*scheme_eval_compiled)(Scheme_Object *obj, Scheme_Env *env);
218 Scheme_Object *(*scheme_eval_compiled_multi)(Scheme_Object *obj, Scheme_Env *env);
219 Scheme_Object *(*_scheme_eval_compiled)(Scheme_Object *obj, Scheme_Env *env);
220 Scheme_Object *(*_scheme_eval_compiled_multi)(Scheme_Object *obj, Scheme_Env *env);
221 Scheme_Object *(*scheme_apply)(Scheme_Object *rator, int num_rands, Scheme_Object **rands);
222 Scheme_Object *(*scheme_apply_multi)(Scheme_Object *rator, int num_rands, Scheme_Object **rands);
223 Scheme_Object *(*scheme_apply_no_eb)(Scheme_Object *rator, int num_rands, Scheme_Object **rands);
224 Scheme_Object *(*scheme_apply_multi_no_eb)(Scheme_Object *rator, int num_rands, Scheme_Object **rands);
225 Scheme_Object *(*scheme_apply_to_list)(Scheme_Object *rator, Scheme_Object *argss);
226 Scheme_Object *(*scheme_apply_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands);
227 Scheme_Object *(*scheme_apply_multi_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands);
228 Scheme_Object *(*_scheme_apply_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands);
229 Scheme_Object *(*_scheme_apply_multi_with_prompt)(Scheme_Object *rator, int num_rands, Scheme_Object **rands);
230 Scheme_Object *(*scheme_eval_string)(const char *str, Scheme_Env *env);
231 Scheme_Object *(*scheme_eval_string_multi)(const char *str, Scheme_Env *env);
232 Scheme_Object *(*scheme_eval_string_all)(const char *str, Scheme_Env *env, int all);
233 Scheme_Object *(*scheme_eval_string_with_prompt)(const char *str, Scheme_Env *env);
234 Scheme_Object *(*scheme_eval_string_multi_with_prompt)(const char *str, Scheme_Env *env);
235 Scheme_Object *(*scheme_eval_string_all_with_prompt)(const char *str, Scheme_Env *env, int all);
236 Scheme_Object *(*scheme_eval_all_with_prompt)(Scheme_Object *port, Scheme_Env *env, int all);
237 Scheme_Object *(*scheme_eval_module_string)(const char *str, Scheme_Env *env);
238 Scheme_Object *(*_scheme_apply_known_prim_closure)(Scheme_Object *rator, int argc,
239 							  Scheme_Object **argv);
240 Scheme_Object *(*_scheme_apply_known_prim_closure_multi)(Scheme_Object *rator, int argc,
241 								Scheme_Object **argv);
242 Scheme_Object *(*_scheme_apply_prim_closure)(Scheme_Object *rator, int argc,
243 						    Scheme_Object **argv);
244 Scheme_Object *(*_scheme_apply_prim_closure_multi)(Scheme_Object *rator, int argc,
245 							  Scheme_Object **argv);
246 Scheme_Object **(*scheme_current_argument_stack)();
247 Scheme_Object *(*scheme_call_with_prompt)(Scheme_Closed_Prim f, void *data);
248 Scheme_Object *(*scheme_call_with_prompt_multi)(Scheme_Closed_Prim f, void *data);
249 Scheme_Object *(*_scheme_call_with_prompt)(Scheme_Closed_Prim f, void *data);
250 Scheme_Object *(*_scheme_call_with_prompt_multi)(Scheme_Closed_Prim f, void *data);
251 Scheme_Object *(*scheme_values)(int c, Scheme_Object **v);
252 Scheme_Object *(*scheme_check_one_value)(Scheme_Object *v);
253 /* Tail calls - only use these when you're writing new functions/syntax */
254 Scheme_Object *(*scheme_tail_apply)(Scheme_Object *f, int n, Scheme_Object **arg);
255 Scheme_Object *(*scheme_tail_apply_no_copy)(Scheme_Object *f, int n, Scheme_Object **arg);
256 Scheme_Object *(*scheme_tail_apply_to_list)(Scheme_Object *f, Scheme_Object *l);
257 Scheme_Object *(*scheme_tail_eval_expr)(Scheme_Object *obj);
258 void (*scheme_set_tail_buffer_size)(int s);
259 Scheme_Object *(*scheme_force_value)(Scheme_Object *);
260 Scheme_Object *(*scheme_force_one_value)(Scheme_Object *);
261 void (*scheme_ignore_result)(Scheme_Object *);
262 MZ_MARK_STACK_TYPE (*scheme_set_cont_mark)(Scheme_Object *key, Scheme_Object *val);
263 void (*scheme_push_continuation_frame)(Scheme_Cont_Frame_Data *);
264 void (*scheme_pop_continuation_frame)(Scheme_Cont_Frame_Data *);
265 void (*scheme_temp_dec_mark_depth)();
266 void (*scheme_temp_inc_mark_depth)();
267 Scheme_Object *(*scheme_current_continuation_marks)(Scheme_Object *prompt_tag);
268 Scheme_Object *(*scheme_extract_one_cc_mark)(Scheme_Object *mark_set,
269 						    Scheme_Object *key);
270 Scheme_Object *(*scheme_extract_one_cc_mark_to_tag)(Scheme_Object *mark_set,
271                                                            Scheme_Object *key,
272                                                            Scheme_Object *prompt_tag);
273 /* Internal */
274 Scheme_Object *(*scheme_do_eval)(Scheme_Object *obj, int _num_rands, Scheme_Object **rands, int val);
275 void (*scheme_detach_multple_array)(Scheme_Object **a);
276 /*========================================================================*/
277 /*                           memory management                            */
278 /*========================================================================*/
279 /* The core allocator functions depend on the GC. Macros in scheme.h */
280 /*  map to the apporpriate core allocation function. */
281 #ifndef SCHEME_NO_GC
282 # ifndef SCHEME_NO_GC_PROTO
283 void *(*GC_malloc)(size_t size_in_bytes);
284 void *(*GC_malloc_atomic)(size_t size_in_bytes);
285 #  ifdef MZ_PRECISE_GC
286 void *(*GC_malloc_one_tagged)(size_t size_in_bytes);
287 void *(*GC_malloc_atomic_uncollectable)(size_t size_in_bytes);
288 void *(*scheme_malloc_uncollectable)(size_t size_in_bytes);
289 void *(*GC_malloc_allow_interior)(size_t size_in_bytes);
290 void *(*GC_malloc_atomic_allow_interior)(size_t size_in_bytes);
291 void *(*GC_malloc_tagged_allow_interior)(size_t size_in_bytes);
292 #  else
293 void *(*GC_malloc_stubborn)(size_t size_in_bytes);
294 void *(*GC_malloc_uncollectable)(size_t size_in_bytes);
295 #  endif
296 # endif
297 #endif
298 void *(*scheme_malloc_code)(intptr_t size);
299 void *(*scheme_malloc_permanent_code)(intptr_t size);
300 void (*scheme_free_code)(void *p);
301 #ifndef MZ_PRECISE_GC
302 void *(*scheme_malloc_gcable_code)(intptr_t size);
303 #endif
304 void *(*scheme_malloc_eternal)(size_t n);
305 void (*scheme_end_stubborn_change)(void *p);
306 void *(*scheme_calloc)(size_t num, size_t size);
307 char *(*scheme_strdup)(const char *str);
308 char *(*scheme_strdup_eternal)(const char *str);
309 void *(*scheme_malloc_fail_ok)(void *(*f)(size_t), size_t);
310 #ifndef MZ_PRECISE_GC
311 void (*scheme_late_weak_reference)(void **p);
312 void (*scheme_late_weak_reference_indirect)(void **p, void *v);
313 void (*scheme_weak_reference)(void **p);
314 void (*scheme_weak_reference_indirect)(void **p, void *v);
315 void (*scheme_unweak_reference)(void **p);
316 #endif
317 void (*scheme_add_finalizer)(void *p, void (*f)(void *p, void *data), void *data);
318 void (*scheme_add_finalizer_once)(void *p, void (*f)(void *p, void *data), void *data);
319 void (*scheme_subtract_finalizer)(void *p, void (*f)(void *p, void *data), void *data);
320 void (*scheme_add_scheme_finalizer)(void *p, void (*f)(void *p, void *data), void *data);
321 void (*scheme_add_scheme_finalizer_once)(void *p, void (*f)(void *p, void *data), void *data);
322 void (*scheme_register_finalizer)(void *p,
323 					 void (*f)(void *p, void *data), void *data,
324 					 void (**oldf)(void *p, void *data),
325 					 void **olddata);
326 void (*scheme_remove_all_finalization)(void *p);
327 void (*scheme_dont_gc_ptr)(void *p);
328 void (*scheme_gc_ptr_ok)(void *p);
329 void (*scheme_collect_garbage)(void);
330 void (*scheme_collect_garbage_minor)(void);
331 void (*scheme_enable_garbage_collection)(int on);
332 void (*scheme_incremental_garbage_collection)(int on);
333 #ifdef MZ_PRECISE_GC
334 # ifndef USE_THREAD_LOCAL
335 void **GC_variable_stack;
336 # endif
337 void (*GC_register_traversers)(short tag, Size_Proc size, Mark_Proc mark, Fixup_Proc fixup,
338 				      int is_constant_size, int is_atomic);
339 void *(*GC_resolve)(void *p);
340 void (*GC_mark)(void *p);
341 void (*GC_fixup)(void *p);
342 void *(*GC_fixup_self)(void *p);
343 #endif
344 void **(*scheme_malloc_immobile_box)(void *p);
345 void (*scheme_free_immobile_box)(void **b);
346 Scheme_Object *(*scheme_add_gc_callback)(Scheme_Object *pre, Scheme_Object *post);
347 void (*scheme_remove_gc_callback)(Scheme_Object *key);
348 void (*scheme_register_type_gc_shape)(Scheme_Type type, intptr_t *shape_str);
349 /*========================================================================*/
350 /*                             hash tables                                */
351 /*========================================================================*/
352 Scheme_Bucket_Table *(*scheme_make_bucket_table)(intptr_t size_hint, int type);
353 void (*scheme_add_to_table)(Scheme_Bucket_Table *table, const char *key, void *val, int);
354 void (*scheme_change_in_table)(Scheme_Bucket_Table *table, const char *key, void *new_val);
355 void *(*scheme_lookup_in_table)(Scheme_Bucket_Table *table, const char *key);
356 Scheme_Bucket *(*scheme_bucket_from_table)(Scheme_Bucket_Table *table, const char *key);
357 int (*scheme_bucket_table_equal)(Scheme_Bucket_Table *t1, Scheme_Bucket_Table *t2);
358 Scheme_Bucket_Table *(*scheme_clone_bucket_table)(Scheme_Bucket_Table *bt);
359 void (*scheme_clear_bucket_table)(Scheme_Bucket_Table *bt);
360 int (*scheme_bucket_table_index)(Scheme_Bucket_Table *hash, mzlonglong pos, Scheme_Object **_key, Scheme_Object **_val);
361 Scheme_Object *(*scheme_bucket_table_next)(Scheme_Bucket_Table *hash, mzlonglong start);
362 Scheme_Hash_Table *(*scheme_make_hash_table)(int type);
363 Scheme_Hash_Table *(*scheme_make_hash_table_equal)();
364 Scheme_Hash_Table *(*scheme_make_hash_table_eqv)();
365 void (*scheme_hash_set)(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val);
366 Scheme_Object *(*scheme_hash_get)(Scheme_Hash_Table *table, Scheme_Object *key);
367 Scheme_Object *(*scheme_eq_hash_get)(Scheme_Hash_Table *table, Scheme_Object *key);
368 void (*scheme_hash_set_atomic)(Scheme_Hash_Table *table, Scheme_Object *key, Scheme_Object *val);
369 Scheme_Object *(*scheme_hash_get_atomic)(Scheme_Hash_Table *table, Scheme_Object *key);
370 int (*scheme_hash_table_equal)(Scheme_Hash_Table *t1, Scheme_Hash_Table *t2);
371 int (*scheme_is_hash_table_equal)(Scheme_Object *o);
372 int (*scheme_is_hash_table_eqv)(Scheme_Object *o);
373 Scheme_Hash_Table *(*scheme_clone_hash_table)(Scheme_Hash_Table *ht);
374 void (*scheme_clear_hash_table)(Scheme_Hash_Table *ht);
375 int (*scheme_hash_table_index)(Scheme_Hash_Table *hash, mzlonglong pos, Scheme_Object **_key, Scheme_Object **_val);
376 Scheme_Object *(*scheme_hash_table_next)(Scheme_Hash_Table *hash, mzlonglong start);
377 Scheme_Hash_Tree *(*scheme_make_hash_tree)(int kind);
378 Scheme_Hash_Tree *(*scheme_hash_tree_set)(Scheme_Hash_Tree *tree, Scheme_Object *key, Scheme_Object *val);
379 Scheme_Object *(*scheme_hash_tree_get)(Scheme_Hash_Tree *tree, Scheme_Object *key);
380 Scheme_Object *(*scheme_eq_hash_tree_get)(Scheme_Hash_Tree *tree, Scheme_Object *key);
381 mzlonglong (*scheme_hash_tree_next)(Scheme_Hash_Tree *tree, mzlonglong pos);
382 int (*scheme_hash_tree_index)(Scheme_Hash_Tree *tree, mzlonglong pos, Scheme_Object **_key, Scheme_Object **_val);
383 int (*scheme_hash_tree_equal)(Scheme_Hash_Tree *t1, Scheme_Hash_Tree *t2);
384 int (*scheme_is_hash_tree_equal)(Scheme_Object *o);
385 int (*scheme_is_hash_tree_eqv)(Scheme_Object *o);
386 /*========================================================================*/
387 /*                   basic Scheme value constructors                      */
388 /*========================================================================*/
389 Scheme_Object *(*scheme_make_prim)(Scheme_Prim *prim);
390 Scheme_Object *(*scheme_make_noneternal_prim)(Scheme_Prim *prim);
391 Scheme_Object *(*scheme_make_prim_w_arity)(Scheme_Prim *prim, const char *name,
392 					mzshort mina, mzshort maxa);
393 Scheme_Object *(*scheme_make_folding_prim)(Scheme_Prim *prim,
394 					const char *name,
395 					mzshort mina, mzshort maxa,
396 					short functional);
397 Scheme_Object *(*scheme_make_immed_prim)(Scheme_Prim *prim,
398 					        const char *name,
399 					        mzshort mina, mzshort maxa);
400 Scheme_Object *(*scheme_make_noncm_prim)(Scheme_Prim *prim,
401 						const char *name,
402 						mzshort mina, mzshort maxa);
403 Scheme_Object *(*scheme_make_noneternal_prim_w_arity)(Scheme_Prim *prim,
404 						   const char *name,
405 						   mzshort mina, mzshort maxa);
406 Scheme_Object *(*scheme_make_prim_w_everything)(Scheme_Prim *fun, int eternal,
407 						       const char *name,
408 						       mzshort mina, mzshort maxa,
409 						       int folding,
410 						       mzshort minr, mzshort maxr);
411 Scheme_Object *(*scheme_make_prim_closure_w_arity)(Scheme_Primitive_Closure_Proc *prim,
412 							  int size, Scheme_Object **vals,
413 							  const char *name,
414 							  mzshort mina, mzshort maxa);
415 Scheme_Object *(*scheme_make_folding_prim_closure)(Scheme_Primitive_Closure_Proc *prim,
416 							  int size, Scheme_Object **vals,
417 							  const char *name,
418 							  mzshort mina, mzshort maxa,
419 							  short functional);
420 Scheme_Object *(*scheme_make_closed_prim)(Scheme_Closed_Prim *prim, void *data);
421 Scheme_Object *(*scheme_make_closed_prim_w_arity)(Scheme_Closed_Prim *prim,
422 							 void *data, const char *name,
423 							 mzshort mina, mzshort maxa);
424 Scheme_Object *(*scheme_make_folding_closed_prim)(Scheme_Closed_Prim *prim,
425 							 void *data, const char *name,
426 							 mzshort mina, mzshort maxa,
427 							 short functional);
428 Scheme_Object *(*scheme_make_closed_prim_w_everything)(Scheme_Closed_Prim *fun,
429 							      void *data,
430 							      const char *name,
431 							      mzshort mina, mzshort maxa,
432 							      short folding,
433 							      mzshort minr, mzshort maxr);
434 void (*scheme_prim_is_method)(Scheme_Object *o);
435 Scheme_Object *(*scheme_make_pair)(Scheme_Object *car, Scheme_Object *cdr);
436 Scheme_Object *(*scheme_make_mutable_pair)(Scheme_Object *car, Scheme_Object *cdr);
437 Scheme_Object *(*scheme_make_list_pair)(Scheme_Object *car, Scheme_Object *cdr);
438 Scheme_Object *(*scheme_make_raw_pair)(Scheme_Object *, Scheme_Object *);
439 Scheme_Object *(*scheme_make_byte_string)(const char *chars);
440 Scheme_Object *(*scheme_make_sized_byte_string)(char *chars, intptr_t len, int copy);
441 Scheme_Object *(*scheme_make_sized_offset_byte_string)(char *chars, intptr_t d, intptr_t len, int copy);
442 Scheme_Object *(*scheme_make_immutable_sized_byte_string)(char *chars, intptr_t len, int copy);
443 Scheme_Object *(*scheme_make_byte_string_without_copying)(char *chars);
444 Scheme_Object *(*scheme_alloc_byte_string)(intptr_t size, char fill);
445 Scheme_Object *(*scheme_append_byte_string)(Scheme_Object *, Scheme_Object *);
446 Scheme_Object *(*scheme_make_utf8_string)(const char *chars);
447 Scheme_Object *(*scheme_make_sized_utf8_string)(char *chars, intptr_t len);
448 Scheme_Object *(*scheme_make_sized_offset_utf8_string)(char *chars, intptr_t d, intptr_t len);
449 Scheme_Object *(*scheme_make_immutable_sized_utf8_string)(char *chars, intptr_t len);
450 Scheme_Object *(*scheme_make_locale_string)(const char *chars);
451 Scheme_Object *(*scheme_char_string_to_byte_string)(Scheme_Object *s);
452 Scheme_Object *(*scheme_byte_string_to_char_string)(Scheme_Object *s);
453 Scheme_Object *(*scheme_char_string_to_byte_string_locale)(Scheme_Object *s);
454 Scheme_Object *(*scheme_byte_string_to_char_string_locale)(Scheme_Object *s);
455 Scheme_Object *(*scheme_char_string_to_path)(Scheme_Object *p);
456 Scheme_Object *(*scheme_path_to_char_string)(Scheme_Object *p);
457 Scheme_Object *(*scheme_make_char_string)(const mzchar *chars);
458 Scheme_Object *(*scheme_make_sized_char_string)(mzchar *chars, intptr_t len, int copy);
459 Scheme_Object *(*scheme_make_sized_offset_char_string)(mzchar *chars, intptr_t d, intptr_t len, int copy);
460 Scheme_Object *(*scheme_make_immutable_sized_char_string)(mzchar *chars, intptr_t len, int copy);
461 Scheme_Object *(*scheme_make_char_string_without_copying)(mzchar *chars);
462 Scheme_Object *(*scheme_alloc_char_string)(intptr_t size, mzchar fill);
463 Scheme_Object *(*scheme_append_char_string)(Scheme_Object *, Scheme_Object *);
464 mzchar *(*scheme_string_recase)(mzchar *s, int d, int len, int mode, int inplace, int *_len);
465 Scheme_Object *(*scheme_make_vector)(intptr_t size, Scheme_Object *fill);
466 Scheme_Double_Vector *(*scheme_alloc_flvector)(intptr_t size);
467 #ifdef MZ_LONG_DOUBLE
468 Scheme_Long_Double_Vector *(*scheme_alloc_extflvector)(intptr_t size);
469 #endif
470 Scheme_Vector *(*scheme_alloc_fxvector)(intptr_t size);
471 Scheme_Object *(*scheme_make_integer_value)(intptr_t i);
472 Scheme_Object *(*scheme_make_integer_value_from_unsigned)(uintptr_t i);
473 Scheme_Object *(*scheme_make_integer_value_from_long_long)(mzlonglong i);
474 Scheme_Object *(*scheme_make_integer_value_from_unsigned_long_long)(umzlonglong i);
475 Scheme_Object *(*scheme_make_integer_value_from_long_halves)(uintptr_t lowhalf, uintptr_t hihalf);
476 Scheme_Object *(*scheme_make_integer_value_from_unsigned_long_halves)(uintptr_t lowhalf, uintptr_t hihalf);
477 Scheme_Object *(*scheme_make_double)(double d);
478 #ifdef MZ_LONG_DOUBLE
479 Scheme_Object *(*scheme_make_long_double)(mz_long_double d);
480 #endif
481 #ifdef MZ_USE_SINGLE_FLOATS
482 Scheme_Object *(*scheme_make_float)(float f) ;
483 #endif
484 Scheme_Object *(*scheme_make_char)(mzchar ch);
485 Scheme_Object *(*scheme_make_char_or_nul)(mzchar ch);
486 Scheme_Object *(*scheme_make_sema)(intptr_t v);
487 void (*scheme_post_sema)(Scheme_Object *o);
488 void (*scheme_post_sema_all)(Scheme_Object *o);
489 int (*scheme_wait_sema)(Scheme_Object *o, int just_try);
490 int (*scheme_try_plain_sema)(Scheme_Object *o);
491 Scheme_Object **scheme_char_constants;
492 Scheme_Object *(*scheme_make_channel)();
493 Scheme_Object *(*scheme_make_channel_put_evt)(Scheme_Object *ch, Scheme_Object *v);
494 int (*scheme_get_int_val)(Scheme_Object *o, intptr_t *v);
495 int (*scheme_get_unsigned_int_val)(Scheme_Object *o, uintptr_t *v);
496 int (*scheme_get_long_long_val)(Scheme_Object *o, mzlonglong *v);
497 int (*scheme_get_unsigned_long_long_val)(Scheme_Object *o, umzlonglong *v);
498 double (*scheme_real_to_double)(Scheme_Object *r);
499 #ifdef MZ_LONG_DOUBLE
500 mz_long_double (*scheme_real_to_long_double)(Scheme_Object *r);
501 #endif
502 Scheme_Object *(*scheme_make_cptr)(void *cptr, Scheme_Object *typetag);
503 Scheme_Object *(*scheme_make_offset_cptr)(void *cptr, intptr_t offset, Scheme_Object *typetag);
504 Scheme_Object *(*scheme_make_external_cptr)(void *cptr, Scheme_Object *typetag);
505 Scheme_Object *(*scheme_make_offset_external_cptr)(void *cptr, intptr_t offset, Scheme_Object *typetag);
506 int (*scheme_is_cpointer)(Scheme_Object *cp);
507 const char *(*scheme_get_proc_name)(Scheme_Object *p, int *len, int for_error);
508 /*========================================================================*/
509 /*                               strings                                  */
510 /*========================================================================*/
511 intptr_t (*scheme_utf8_decode)(const unsigned char *s, intptr_t start, intptr_t end,
512 				      unsigned int *us, intptr_t dstart, intptr_t dend,
513 				      intptr_t *ipos, char utf16, int permissive);
514 intptr_t (*scheme_utf8_decode_offset_prefix)(const unsigned char *s, intptr_t start, intptr_t end,
515                                                     unsigned int *us, intptr_t dstart, intptr_t dend,
516                                                     intptr_t *ipos, char utf16, int permissive);
517 intptr_t (*scheme_utf8_decode_as_prefix)(const unsigned char *s, intptr_t start, intptr_t end,
518 						unsigned int *us, intptr_t dstart, intptr_t dend,
519 						intptr_t *ipos, char utf16, int permissive);
520 intptr_t (*scheme_utf8_decode_all)(const unsigned char *s, intptr_t len, unsigned int *us,
521 					  int permissive);
522 intptr_t (*scheme_utf8_decode_prefix)(const unsigned char *s, intptr_t len, unsigned int *us,
523 					     int permissive);
524 mzchar *(*scheme_utf8_decode_to_buffer)(const unsigned char *s, intptr_t len,
525 					       mzchar *buf, intptr_t blen);
526 mzchar *(*scheme_utf8_decode_to_buffer_len)(const unsigned char *s, intptr_t len,
527 						   mzchar *buf, intptr_t blen, intptr_t *rlen);
528 intptr_t (*scheme_utf8_decode_count)(const unsigned char *s, intptr_t start, intptr_t end,
529 							   int *_state, int might_continue, int permissive);
530 intptr_t (*scheme_utf8_encode)(const unsigned int *us, intptr_t start, intptr_t end,
531 				      unsigned char *s, intptr_t dstart,
532 				      char utf16);
533 intptr_t (*scheme_utf8_encode_all)(const unsigned int *us, intptr_t len, unsigned char *s);
534 char *(*scheme_utf8_encode_to_buffer)(const mzchar *s, intptr_t len,
535 					     char *buf, intptr_t blen);
536 char *(*scheme_utf8_encode_to_buffer_len)(const mzchar *s, intptr_t len,
537 						 char *buf, intptr_t blen, intptr_t *rlen);
538 unsigned short *(*scheme_ucs4_to_utf16)(const mzchar *text, intptr_t start, intptr_t end,
539 					       unsigned short *buf, intptr_t bufsize,
540 					       intptr_t *ulen, intptr_t term_size);
541 mzchar *(*scheme_utf16_to_ucs4)(const unsigned short *text, intptr_t start, intptr_t end,
542 				       mzchar *buf, intptr_t bufsize,
543 				       intptr_t *ulen, intptr_t term_size);
544 Scheme_Object *(*scheme_open_converter)(const char *from_e, const char *to_e);
545 void (*scheme_close_converter)(Scheme_Object *conv);
546 char *(*scheme_getenv)(char *name);
547 /*========================================================================*/
548 /*                               bignums                                  */
549 /*========================================================================*/
550 Scheme_Object *(*scheme_make_bignum)(intptr_t v);
551 Scheme_Object *(*scheme_make_bignum_from_unsigned)(uintptr_t v);
552 Scheme_Object *(*scheme_make_bignum_from_long_long)(mzlonglong v);
553 Scheme_Object *(*scheme_make_bignum_from_unsigned_long_long)(umzlonglong v);
554 double (*scheme_bignum_to_double)(const Scheme_Object *n);
555 Scheme_Object *(*scheme_bignum_from_double)(double d);
556 #ifdef MZ_LONG_DOUBLE
557 mz_long_double (*scheme_bignum_to_long_double)(const Scheme_Object *n);
558 Scheme_Object *(*scheme_bignum_from_long_double)(mz_long_double d);
559 #endif
560 #ifdef MZ_USE_SINGLE_FLOATS
561 float (*scheme_bignum_to_float)(const Scheme_Object *n);
562 Scheme_Object *(*scheme_bignum_from_float)(float d);
563 #else
564 # define scheme_bignum_to_float scheme_bignum_to_double
565 # define scheme_bignum_from_float scheme_bignum_from_double
566 #endif
567 char *(*scheme_bignum_to_string)(const Scheme_Object *n, int radix);
568 char *(*scheme_bignum_to_allocated_string)(const Scheme_Object *n, int radix, int alloc);
569 Scheme_Object *(*scheme_read_bignum)(const mzchar *str, int offset, int radix);
570 Scheme_Object *(*scheme_read_bignum_bytes)(const char *str, int offset, int radix);
571 Scheme_Object *(*scheme_bignum_normalize)(const Scheme_Object *n);
572 /*========================================================================*/
573 /*                              rationals                                 */
574 /*========================================================================*/
575 Scheme_Object *(*scheme_make_rational)(const Scheme_Object *r, const Scheme_Object *d);
576 double (*scheme_rational_to_double)(const Scheme_Object *n);
577 Scheme_Object *(*scheme_rational_from_double)(double d);
578 #ifdef MZ_LONG_DOUBLE
579 mz_long_double (*scheme_rational_to_long_double)(const Scheme_Object *n);
580 Scheme_Object *(*scheme_rational_from_long_double)(mz_long_double d);
581 #endif
582 #ifdef MZ_USE_SINGLE_FLOATS
583 float (*scheme_rational_to_float)(const Scheme_Object *n);
584 Scheme_Object *(*scheme_rational_from_float)(float d);
585 #else
586 # define scheme_rational_to_float scheme_rational_to_double
587 # define scheme_rational_from_float scheme_rational_from_double
588 #endif
589 Scheme_Object *(*scheme_rational_normalize)(const Scheme_Object *n);
590 Scheme_Object *(*scheme_rational_numerator)(const Scheme_Object *n);
591 Scheme_Object *(*scheme_rational_denominator)(const Scheme_Object *n);
592 /*========================================================================*/
593 /*                              complexes                                 */
594 /*========================================================================*/
595 Scheme_Object *(*scheme_make_complex)(const Scheme_Object *r, const Scheme_Object *i);
596 Scheme_Object *(*scheme_complex_normalize)(const Scheme_Object *n);
597 Scheme_Object *(*scheme_complex_real_part)(const Scheme_Object *n);
598 Scheme_Object *(*scheme_complex_imaginary_part)(const Scheme_Object *n);
599 /* Exact/inexact: */
600 int (*scheme_is_exact)(const Scheme_Object *n);
601 int (*scheme_is_inexact)(const Scheme_Object *n);
602 /*========================================================================*/
603 /*                 macros, syntax, and compilation                        */
604 /*========================================================================*/
605 Scheme_Object *(*scheme_expand)(Scheme_Object *form, Scheme_Env *env);
606 Scheme_Object *(*scheme_compile)(Scheme_Object *form, Scheme_Env *env, int writeable);
607 /*========================================================================*/
608 /*                               ports                                    */
609 /*========================================================================*/
610 Scheme_Object *(*scheme_read)(Scheme_Object *port);
611 Scheme_Object *(*scheme_read_syntax)(Scheme_Object *port, Scheme_Object *stxsrc);
612 void (*scheme_write)(Scheme_Object *obj, Scheme_Object *port);
613 void (*scheme_print)(Scheme_Object *obj, Scheme_Object *port);
614 void (*scheme_display)(Scheme_Object *obj, Scheme_Object *port);
615 void (*scheme_write_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl);
616 void (*scheme_display_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl);
617 void (*scheme_print_w_max)(Scheme_Object *obj, Scheme_Object *port, intptr_t maxl);
618 void (*scheme_write_byte_string)(const char *str, intptr_t len, Scheme_Object *port);
619 void (*scheme_write_char_string)(const mzchar *str, intptr_t len, Scheme_Object *port);
620 intptr_t (*scheme_put_byte_string)(const char *who, Scheme_Object *port,
621 				      const char *str, intptr_t d, intptr_t len,
622 				      int rarely_block);
623 intptr_t (*scheme_put_char_string)(const char *who, Scheme_Object *port,
624 				      const mzchar *str, intptr_t d, intptr_t len);
625 char *(*scheme_write_to_string)(Scheme_Object *obj, intptr_t *len);
626 char *(*scheme_display_to_string)(Scheme_Object *obj, intptr_t *len);
627 char *(*scheme_print_to_string)(Scheme_Object *obj, intptr_t *len);
628 char *(*scheme_write_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl);
629 char *(*scheme_display_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl);
630 char *(*scheme_print_to_string_w_max)(Scheme_Object *obj, intptr_t *len, intptr_t maxl);
631 void (*scheme_debug_print)(Scheme_Object *obj);
632 void (*scheme_flush_output)(Scheme_Object *port);
633 char *(*scheme_format)(mzchar *format, int flen, int argc, Scheme_Object **argv, intptr_t *rlen);
634 void (*scheme_printf)(mzchar *format, int flen, int argc, Scheme_Object **argv);
635 char *(*scheme_format_utf8)(char *format, int flen, int argc, Scheme_Object **argv, intptr_t *rlen);
636 void (*scheme_printf_utf8)(char *format, int flen, int argc, Scheme_Object **argv);
637 int (*scheme_getc)(Scheme_Object *port);
638 int (*scheme_get_byte)(Scheme_Object *port);
639 int (*scheme_peekc)(Scheme_Object *port);
640 int (*scheme_peek_byte)(Scheme_Object *port);
641 int (*scheme_peekc_skip)(Scheme_Object *port, Scheme_Object *skip);
642 int (*scheme_peek_byte_skip)(Scheme_Object *port, Scheme_Object *skip, Scheme_Object *unless_evt);
643 int (*scheme_getc_special_ok)(Scheme_Object *port);
644 int (*scheme_get_byte_special_ok)(Scheme_Object *port);
645 int (*scheme_peekc_special_ok)(Scheme_Object *port);
646 int (*scheme_peek_byte_special_ok_skip)(Scheme_Object *port, Scheme_Object *skip, Scheme_Object *unless_evt);
647 int (*scheme_peekc_special_ok_skip)(Scheme_Object *port, Scheme_Object *skip);
648 void (*scheme_ungetc)(int ch, Scheme_Object *port);
649 int (*scheme_byte_ready)(Scheme_Object *port);
650 int (*scheme_char_ready)(Scheme_Object *port);
651 int (*scheme_peekc_is_ungetc)(Scheme_Object *port);
652 void (*scheme_need_wakeup)(Scheme_Object *port, void *fds);
653 intptr_t (*scheme_get_byte_string)(const char *who,
654 				      Scheme_Object *port,
655 				      char *buffer, intptr_t offset, intptr_t size,
656 				      int only_avail,
657 				      int peek, Scheme_Object *peek_skip);
658 intptr_t (*scheme_get_byte_string_unless)(const char *who,
659 					     Scheme_Object *port,
660 					     char *buffer, intptr_t offset, intptr_t size,
661 					     int only_avail,
662 					     int peek, Scheme_Object *peek_skip,
663 					     Scheme_Object *unless_evt);
664 intptr_t (*scheme_get_byte_string_special_ok_unless)(const char *who,
665 							Scheme_Object *port,
666 							char *buffer, intptr_t offset, intptr_t size,
667 							int only_avail,
668 							int peek, Scheme_Object *peek_skip,
669 							Scheme_Object *unless_evt);
670 Scheme_Object *(*scheme_progress_evt)(Scheme_Object *port);
671 int (*scheme_peeked_read)(Scheme_Object *port,
672 				 intptr_t size,
673 				 Scheme_Object *unless_evt,
674 				 Scheme_Object *target_evt);
675 intptr_t (*scheme_get_char_string)(const char *who,
676 				      Scheme_Object *port,
677 				      mzchar *buffer, intptr_t offset, intptr_t size,
678 				      int peek, Scheme_Object *peek_skip);
679 intptr_t (*scheme_get_bytes)(Scheme_Object *port, intptr_t size, char *buffer, int offset);
680 Scheme_Object *(*scheme_get_ready_special)(Scheme_Object *port, Scheme_Object *stxsrc, int peek);
681 intptr_t (*scheme_tell)(Scheme_Object *port);
682 intptr_t (*scheme_tell_can_redirect)(Scheme_Object *port, int not_via_loc);
683 intptr_t (*scheme_output_tell)(Scheme_Object *port);
684 intptr_t (*scheme_tell_line)(Scheme_Object *port);
685 intptr_t (*scheme_tell_column)(Scheme_Object *port);
686 void (*scheme_tell_all)(Scheme_Object *port, intptr_t *line, intptr_t *col, intptr_t *pos);
687 void (*scheme_set_port_location)(int argc, Scheme_Object **argv);
688 void (*scheme_count_lines)(Scheme_Object *port);
689 void (*scheme_close_input_port)(Scheme_Object *port);
690 void (*scheme_close_output_port)(Scheme_Object *port);
691 Scheme_Object *(*scheme_write_special)(int argc, Scheme_Object *argv[]);
692 Scheme_Object *(*scheme_write_special_nonblock)(int argc, Scheme_Object *argv[]);
693 Scheme_Object *(*scheme_make_write_evt)(const char *who, Scheme_Object *port,
694 					       Scheme_Object *special, char *str, intptr_t start, intptr_t size);
695 Scheme_Port *(*scheme_port_record)(Scheme_Object *port);
696 Scheme_Input_Port *(*scheme_input_port_record)(Scheme_Object *port);
697 Scheme_Output_Port *(*scheme_output_port_record)(Scheme_Object *port);
698 int (*scheme_is_input_port)(Scheme_Object *port);
699 int (*scheme_is_output_port)(Scheme_Object *port);
700 Scheme_Object *(*scheme_make_port_type)(const char *name);
701 Scheme_Input_Port *(*scheme_make_input_port)(Scheme_Object *subtype, void *data,
702 						    Scheme_Object *name,
703 						    Scheme_Get_String_Fun get_byte_string_fun,
704 						    Scheme_Peek_String_Fun peek_string_fun,
705 						    Scheme_Progress_Evt_Fun progress_evt_fun,
706 						    Scheme_Peeked_Read_Fun peeked_read_fun,
707 						    Scheme_In_Ready_Fun byte_ready_fun,
708 						    Scheme_Close_Input_Fun close_fun,
709 						    Scheme_Need_Wakeup_Input_Fun need_wakeup_fun,
710 						    int must_close);
711 Scheme_Output_Port *(*scheme_make_output_port)(Scheme_Object *subtype, void *data,
712 						      Scheme_Object *name,
713 						      Scheme_Write_String_Evt_Fun write_byte_string_evt_fun,
714 						      Scheme_Write_String_Fun write_byte_string_fun,
715 						      Scheme_Out_Ready_Fun ready_fun,
716 						      Scheme_Close_Output_Fun close_fun,
717 						      Scheme_Need_Wakeup_Output_Fun need_wakeup_fun,
718 						      Scheme_Write_Special_Evt_Fun write_special_evt_fun,
719 						      Scheme_Write_Special_Fun write_special_fun,
720 						      int must_close);
721 void (*scheme_set_next_port_custodian)(Scheme_Custodian *c);
722 void (*scheme_set_port_location_fun)(Scheme_Port *port,
723 					    Scheme_Location_Fun location_fun);
724 void (*scheme_set_port_count_lines_fun)(Scheme_Port *port,
725 					       Scheme_Count_Lines_Fun count_lines_fun);
726 void (*scheme_port_count_lines)(Scheme_Port *ip, const char *buffer,
727                                        intptr_t offset, intptr_t got);
728 Scheme_Object *(*scheme_progress_evt_via_get)(Scheme_Input_Port *port);
729 int (*scheme_peeked_read_via_get)(Scheme_Input_Port *port,
730 					 intptr_t size,
731 					 Scheme_Object *unless_evt,
732 					 Scheme_Object *target_ch);
733 Scheme_Object *(*scheme_write_evt_via_write)(Scheme_Output_Port *port,
734 						    const char *str, intptr_t offset, intptr_t size);
735 Scheme_Object *(*scheme_write_special_evt_via_write_special)(Scheme_Output_Port *port,
736 								    Scheme_Object *special);
737 Scheme_Object *(*scheme_open_input_file)(const char *name, const char *who);
738 Scheme_Object *(*scheme_open_output_file)(const char *name, const char *who);
739 Scheme_Object *(*scheme_open_input_output_file)(const char *name, const char *who, Scheme_Object **oport);
740 Scheme_Object *(*scheme_open_output_file_with_mode)(const char *name, const char *who, int text);
741 Scheme_Object *(*scheme_make_file_input_port)(FILE *fp);
742 Scheme_Object *(*scheme_make_named_file_input_port)(FILE *fp, Scheme_Object *name);
743 Scheme_Object *(*scheme_make_file_output_port)(FILE *fp);
744 Scheme_Object *(*scheme_make_fd_input_port)(int fd, Scheme_Object *name, int regfile, int win_textmode);
745 Scheme_Object *(*scheme_make_fd_output_port)(int fd, Scheme_Object *name, int regfile, int win_textmode, int read_too);
746 Scheme_Object *(*scheme_make_byte_string_input_port)(const char *str);
747 Scheme_Object *(*scheme_make_sized_byte_string_input_port)(const char *str, intptr_t len);
748 Scheme_Object *(*scheme_make_byte_string_output_port)();
749 char *(*scheme_get_sized_byte_string_output)(Scheme_Object *port, intptr_t *len);
750 char *(*scheme_get_reset_sized_byte_string_output)(Scheme_Object *port, intptr_t *len, int reset, intptr_t startpos, intptr_t endpos);
751 void (*scheme_pipe)(Scheme_Object **read, Scheme_Object **write);
752 void (*scheme_pipe_with_limit)(Scheme_Object **write, Scheme_Object **read, int maxsize);
753 Scheme_Object *(*scheme_make_null_output_port)(int can_write_special);
754 Scheme_Object *(*scheme_make_redirect_output_port)(Scheme_Object *port);
755 intptr_t (*scheme_set_file_position)(Scheme_Object *port, intptr_t pos);
756 int (*scheme_file_exists)(char *filename);
757 int (*scheme_directory_exists)(char *dirname);
758 char *(*scheme_expand_filename)(char* filename, int ilen, const char *errorin, int *ex, int guards);
759 char *(*scheme_expand_user_filename)(char* filename, int ilen, const char *errorin, int *ex, int guards);
760 char *(*scheme_expand_string_filename)(Scheme_Object *f, const char *errorin, int *ex, int guards);
761 char *(*scheme_os_getcwd)(char *buf, size_t buflen, int *actlen, int noexn);
762 int (*scheme_os_setcwd)(char *buf, int noexn);
763 char *(*scheme_getdrive)(void);
764 Scheme_Object *(*scheme_split_path)(const char *path, int len, Scheme_Object **base, int *isdir, int kind);
765 Scheme_Object *(*scheme_build_path)(int argc, Scheme_Object **argv);
766 Scheme_Object *(*scheme_path_to_directory_path)(Scheme_Object *p);
767 Scheme_Object *(*scheme_path_to_complete_path)(Scheme_Object *path, Scheme_Object *relto_path);
768 Scheme_Object *(*scheme_simplify_path)(int argc, Scheme_Object *argv[]);
769 Scheme_Object *(*scheme_make_path)(const char *chars);
770 Scheme_Object *(*scheme_make_sized_path)(char *chars, intptr_t len, int copy);
771 Scheme_Object *(*scheme_make_sized_offset_path)(char *chars, intptr_t d, intptr_t len, int copy);
772 Scheme_Object *(*scheme_make_sized_offset_kind_path)(char *chars, intptr_t d, intptr_t len, int copy, int kind);
773 Scheme_Object *(*scheme_make_path_without_copying)(char *chars);
774 void *(*scheme_alloc_fdset_array)(int count, int permanent);
775 void *(*scheme_init_fdset_array)(void *fdarray, int count);
776 void *(*scheme_get_fdset)(void *fdarray, int pos);
777 void (*scheme_fdzero)(void *fd);
778 void (*scheme_fdset)(void *fd, int pos);
779 void (*scheme_fdclr)(void *fd, int pos);
780 int (*scheme_fdisset)(void *fd, int pos);
781 void (*scheme_add_fd_handle)(void *h, void *fds, int repost);
782 void (*scheme_add_fd_eventmask)(void *fds, int mask);
783 void (*scheme_collapse_win_fd)(void *fds);
784 void (*scheme_set_wakeup_time)(void *fds, double end_time);
785 void (*scheme_security_check_file)(const char *who, const char *filename, int guards);
786 void (*scheme_security_check_file_link)(const char *who, const char *filename, const char *content);
787 void (*scheme_security_check_network)(const char *who, const char *host, int port, int client);
788 struct mz_addrinfo *(*scheme_get_host_address)(const char *address, int id, int *err,
789 						      int family, int passive, int tcp);
790 void (*scheme_free_host_address)(struct mz_addrinfo *a);
791 const char *(*scheme_host_address_strerror)(int errnum);
792 void (*scheme_getnameinfo)(void *sa, int salen,
793 				  char *host, int hostlen,
794 				  char *serv, int servlen);
795 int (*scheme_get_port_file_descriptor)(Scheme_Object *p, intptr_t *_fd);
796 intptr_t (*scheme_get_port_fd)(Scheme_Object *p);
797 int (*scheme_get_port_socket)(Scheme_Object *p, intptr_t *_s);
798 void (*scheme_socket_to_ports)(intptr_t s, const char *name, int takeover,
799                                       Scheme_Object **_inp, Scheme_Object **_outp);
800 Scheme_Object *(*scheme_fd_to_semaphore)(intptr_t fd, int mode, int is_socket);
801 void (*scheme_set_type_printer)(Scheme_Type stype, Scheme_Type_Printer printer);
802 void (*scheme_print_bytes)(Scheme_Print_Params *pp, const char *str, int offset, int len);
803 void (*scheme_print_utf8)(Scheme_Print_Params *pp, const char *str, int offset, int len);
804 void (*scheme_print_string)(Scheme_Print_Params *pp, const mzchar *str, int offset, int len);
805 Scheme_Object *(*scheme_read_byte_string)(Scheme_Object *port);
806 /*========================================================================*/
807 /*                        namespace/environment                           */
808 /*========================================================================*/
809 Scheme_Object *(*scheme_make_namespace)(int argc, Scheme_Object *argv[]);
810 void (*scheme_add_global)(const char *name, Scheme_Object *val, Scheme_Env *env);
811 void (*scheme_add_global_symbol)(Scheme_Object *name, Scheme_Object *val,
812                                         Scheme_Env *env);
813 Scheme_Object *(*scheme_make_envunbox)(Scheme_Object *value);
814 Scheme_Object *(*scheme_lookup_global)(Scheme_Object *symbol, Scheme_Env *env);
815 Scheme_Bucket *(*scheme_global_bucket)(Scheme_Object *symbol, Scheme_Env *env);
816 Scheme_Bucket *(*scheme_module_bucket)(Scheme_Object *mod, Scheme_Object *var, int pos, Scheme_Env *env);
817 Scheme_Object *(*scheme_builtin_value)(const char *name); /* convenience */
818 void (*scheme_set_global_bucket)(char *proc, Scheme_Bucket *var, Scheme_Object *val,
819                                         int set_undef);
820 Scheme_Env *(*scheme_primitive_module)(Scheme_Object *name, Scheme_Env *for_env);
821 void (*scheme_finish_primitive_module)(Scheme_Env *env);
822 void (*scheme_set_primitive_module_phaseless)(Scheme_Env *env, int phaseless);
823 void (*scheme_protect_primitive_provide)(Scheme_Env *env, Scheme_Object *name);
824 Scheme_Object *(*scheme_make_modidx)(Scheme_Object *path,
825                                             Scheme_Object *base,
826                                             Scheme_Object *resolved);
827 Scheme_Object *(*scheme_dynamic_require)(int argc, Scheme_Object *argv[]);
828 Scheme_Object *(*scheme_dynamic_require_reader)(int argc, Scheme_Object *argv[]);
829 Scheme_Object *(*scheme_namespace_require)(Scheme_Object *);
830 int (*scheme_is_module_path)(Scheme_Object *);
831 int (*scheme_is_module_path_index)(Scheme_Object *);
832 int (*scheme_is_resolved_module_path)(Scheme_Object *);
833 Scheme_Object *(*scheme_datum_to_kernel_stx)(Scheme_Object *e);
834 int (*scheme_module_is_declared)(Scheme_Object *name, int try_load);
835 /*========================================================================*/
836 /*                                symbols                                 */
837 /*========================================================================*/
838 Scheme_Object *(*scheme_intern_symbol)(const char *name);
839 Scheme_Object *(*scheme_intern_exact_symbol)(const char *name, uintptr_t len);
840 Scheme_Object *(*scheme_intern_exact_char_symbol)(const mzchar *name, uintptr_t len);
841 Scheme_Object *(*scheme_make_symbol)(const char *name); /* Make uninterned */
842 Scheme_Object *(*scheme_make_exact_symbol)(const char *name, uintptr_t len); /* Exact case */
843 Scheme_Object *(*scheme_make_exact_char_symbol)(const mzchar *name, uintptr_t len); /* Exact case */
844 const char *(*scheme_symbol_name)(Scheme_Object *sym);
845 const char *(*scheme_symbol_name_and_size)(Scheme_Object *sym, uintptr_t *l, int flags);
846 char *(*scheme_symbol_val)(Scheme_Object *sym);
847 Scheme_Object *(*scheme_intern_exact_keyword)(const char *name, uintptr_t len);
848 Scheme_Object *(*scheme_intern_exact_char_keyword)(const mzchar *name, uintptr_t len);
849 /*========================================================================*/
850 /*                                structs                                 */
851 /*========================================================================*/
852 Scheme_Object **(*scheme_make_struct_values)(Scheme_Object *struct_type,
853                                                     Scheme_Object **names,
854                                                     int count, int flags);
855 Scheme_Object **(*scheme_make_struct_names)(Scheme_Object *base,
856                                                    Scheme_Object *field_names,
857                                                    int flags, int *count_out);
858 Scheme_Object *(*scheme_make_struct_type)(Scheme_Object *base,
859 						 Scheme_Object *parent,
860 						 Scheme_Object *inspector,
861 						 int num_fields, int num_uninit_fields,
862 						 Scheme_Object *uninit_val,
863 						 Scheme_Object *properties,
864 						 Scheme_Object *guard);
865 Scheme_Object *(*scheme_make_struct_type2)(Scheme_Object *base,
866                                                   Scheme_Object *parent,
867                                                   Scheme_Object *inspector,
868                                                   int num_fields, int num_uninit_fields,
869                                                   Scheme_Object *uninit_val,
870                                                   Scheme_Object *proc_attr,
871                                                   Scheme_Object *properties,
872                                                   char *immutable_array,
873                                                   Scheme_Object *guard);
874 Scheme_Object *(*scheme_make_struct_instance)(Scheme_Object *stype,
875 						     int argc,
876 						     Scheme_Object **argv);
877 int (*scheme_is_struct_instance)(Scheme_Object *type, Scheme_Object *v);
878 Scheme_Object *(*scheme_struct_ref)(Scheme_Object *s, int pos);
879 void (*scheme_struct_set)(Scheme_Object *s, int pos, Scheme_Object *v);
880 Scheme_Object *(*scheme_make_struct_type_property)(Scheme_Object *name);
881 Scheme_Object *(*scheme_make_struct_type_property_w_guard)(Scheme_Object *name, Scheme_Object *guard);
882 Scheme_Object *(*scheme_struct_type_property_ref)(Scheme_Object *prop, Scheme_Object *s);
883 Scheme_Object *(*scheme_chaperone_struct_type_property_ref)(Scheme_Object *prop, Scheme_Object *s);
884 Scheme_Object *(*scheme_make_location)(Scheme_Object *src,
885 					      Scheme_Object *line,
886 					      Scheme_Object *col,
887 					      Scheme_Object *pos,
888 					      Scheme_Object *span);
889 int (*scheme_is_location)(Scheme_Object *o);
890 Scheme_Object *(*scheme_make_inspector)(Scheme_Object *superior);
891 int (*scheme_is_subinspector)(Scheme_Object *i, Scheme_Object *sup);
892 /*========================================================================*/
893 /*                              utilities                                 */
894 /*========================================================================*/
895 int (*scheme_eq)(Scheme_Object *obj1, Scheme_Object *obj2);
896 int (*scheme_eqv)(Scheme_Object *obj1, Scheme_Object *obj2);
897 int (*scheme_equal)(Scheme_Object *obj1, Scheme_Object *obj2);
898 int (*scheme_chaperone_of)(Scheme_Object *obj1, Scheme_Object *obj2);
899 int (*scheme_impersonator_of)(Scheme_Object *obj1, Scheme_Object *obj2);
900 #ifdef MZ_PRECISE_GC
901 intptr_t (*scheme_hash_key)(Scheme_Object *o);
902 #endif
903 intptr_t (*scheme_equal_hash_key)(Scheme_Object *o);
904 intptr_t (*scheme_equal_hash_key2)(Scheme_Object *o);
905 intptr_t (*scheme_recur_equal_hash_key)(Scheme_Object *o, void *cycle_data);
906 intptr_t (*scheme_recur_equal_hash_key2)(Scheme_Object *o, void *cycle_data);
907 intptr_t (*scheme_eqv_hash_key)(Scheme_Object *o);
908 intptr_t (*scheme_eqv_hash_key2)(Scheme_Object *o);
909 void (*scheme_set_type_equality)(Scheme_Type type,
910                                         Scheme_Equal_Proc f,
911                                         Scheme_Primary_Hash_Proc hash1,
912                                         Scheme_Secondary_Hash_Proc hash2);
913 int (*scheme_recur_equal)(Scheme_Object *obj1, Scheme_Object *obj2, void *cycle_info);
914 Scheme_Object *(*scheme_build_list)(int argc, Scheme_Object **argv);
915 Scheme_Object *(*scheme_build_list_offset)(int argc, Scheme_Object **argv, int delta);
916 int (*scheme_is_list)(Scheme_Object *obj1);
917 int (*scheme_list_length)(Scheme_Object *list);
918 int (*scheme_proper_list_length)(Scheme_Object *list);
919 Scheme_Object *(*scheme_alloc_list)(int size);
920 Scheme_Object *(*scheme_map_1)(Scheme_Object *(*f)(Scheme_Object*), Scheme_Object *l);
921 Scheme_Object *(*scheme_car)(Scheme_Object *pair);
922 Scheme_Object *(*scheme_cdr)(Scheme_Object *pair);
923 Scheme_Object *(*scheme_cadr)(Scheme_Object *pair);
924 Scheme_Object *(*scheme_caddr)(Scheme_Object *pair);
925 Scheme_Object *(*scheme_vector_to_list)(Scheme_Object *vec);
926 Scheme_Object *(*scheme_list_to_vector)(Scheme_Object *list);
927 Scheme_Object *(*scheme_append)(Scheme_Object *lstx, Scheme_Object *lsty);
928 Scheme_Object *(*scheme_reverse)(Scheme_Object *l);
929 Scheme_Object *(*scheme_box)(Scheme_Object *v);
930 Scheme_Object *(*scheme_unbox)(Scheme_Object *obj);
931 void (*scheme_set_box)(Scheme_Object *b, Scheme_Object *v);
932 Scheme_Object *(*scheme_make_weak_box)(Scheme_Object *v);
933 Scheme_Object *(*scheme_make_late_weak_box)(Scheme_Object *v);
934 Scheme_Object *(*scheme_make_ephemeron)(Scheme_Object *key, Scheme_Object *val);
935 Scheme_Object *(*scheme_ephemeron_value)(Scheme_Object *o);
936 Scheme_Object *(*scheme_ephemeron_key)(Scheme_Object *o);
937 Scheme_Object *(*scheme_make_late_will_executor)();
938 Scheme_Object *(*scheme_load)(const char *file);
939 Scheme_Object *(*scheme_load_extension)(const char *filename, Scheme_Env *env);
940 void (*scheme_register_extension_global)(void *ptr, intptr_t size);
941 intptr_t (*scheme_get_seconds)(void);
942 uintptr_t (*scheme_get_milliseconds)(void);
943 double (*scheme_get_inexact_milliseconds)(void);
944 intptr_t (*scheme_get_process_milliseconds)(void);
945 intptr_t (*scheme_get_process_children_milliseconds)(void);
946 intptr_t (*scheme_get_thread_milliseconds)(Scheme_Object *thrd);
947 char *(*scheme_banner)(void);
948 char *(*scheme_version)(void);
949 int (*scheme_check_proc_arity)(const char *where, int a,
950 				      int which, int argc, Scheme_Object **argv);
951 int (*scheme_check_proc_arity2)(const char *where, int a,
952 				       int which, int argc, Scheme_Object **argv,
953 				       int false_ok);
954 char *(*scheme_make_provided_string)(Scheme_Object *o, int count, intptr_t *len);
955 char *(*scheme_make_args_string)(const char *s, int which, int argc, Scheme_Object **argv, intptr_t *len);
956 char *(*scheme_make_arg_lines_string)(const char *s, int which, int argc, Scheme_Object **argv, intptr_t *len);
957 const char *(*scheme_system_library_subpath)();
958 void (*scheme_signal_received)(void);
959 void (*scheme_signal_received_at)(void *);
960 void *(*scheme_get_signal_handle)();
961 void (*scheme_wait_until_signal_received)(void);
962 intptr_t (*scheme_char_strlen)(const mzchar *s);
963 Scheme_Object *(*scheme_stx_extract_marks)(Scheme_Object *stx);
964 int (*scheme_get_place_id)(void);
965 Scheme_Hash_Table *(*scheme_get_place_table)(void);
966 void *(*scheme_register_process_global)(const char *key, void *val);
967 Scheme_Object *(*scheme_malloc_key)(void);
968 void (*scheme_free_key)(Scheme_Object *k);
969 void *(*scheme_jit_find_code_end)(void *p);
970 void (*scheme_jit_now)(Scheme_Object *f);
971 void (*scheme_set_signal_handler)(int sig_id, Scheme_Signal_Handler_Proc proc);
972 #ifndef SCHEME_EX_INLINE
973 } Scheme_Extension_Table;
974 #endif
975