1 /* externs.h
2  * Copyright 1984-2017 Cisco Systems, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /* This file sets up platform-dependent includes and extern declarations
18  * for Scheme globals not intended for use outside of the system (prefixed
19  * with S_).  Scheme globals intended for use outside of the system
20  * (prefixed with S) are declared in scheme.h
21  */
22 
23 #include <stdlib.h>
24 #include <string.h>
25 #include <errno.h>
26 #include <time.h>
27 
28 #ifndef WIN32
29 #include <unistd.h>
30 
31 #if (machine_type == machine_type_i3qnx || machine_type == machine_type_ti3qnx)
32 off64_t lseek64(int,off64_t,int);
33 #endif
34 
35 #endif
36 
37 #ifdef SOLARIS
38 #include <fcntl.h>
39 #include <sys/wait.h>
40 #include <setjmp.h>
41 #endif
42 
43 #ifdef WIN32
44 #include <fcntl.h>
45 #include <direct.h> /* for _getcwd */
46 #include <setjmp.h>
47 #endif
48 
49 #if !defined(NORETURN)
50 # if defined(__GNUC__) || defined(__clang__)
51 #  define NORETURN __attribute__((noreturn))
52 # elif defined(_MSC_VER)
53 #  define NORETURN __declspec(noreturn)
54 # else
55 #  define NORETURN
56 # endif /* defined(__GNUC__) || defined(__clang__) */
57 #endif /* !defined(NORETURN) */
58 
59 /* external procedure declarations */
60 /* prototypes gen. by ProtoGen Version 0.31 (Haydn Huntley) 1/18/93 */
61 
62 /* alloc.c */
63 extern void S_alloc_init PROTO((void));
64 extern void S_protect PROTO((ptr *p));
65 extern void S_reset_scheme_stack PROTO((ptr tc, iptr n));
66 extern void S_reset_allocation_pointer PROTO((ptr tc)); /* call S_maybe_fire_collector afterward outside alloc mutex */
67 extern void S_maybe_fire_collector(thread_gc *tgc);
68 extern ptr S_compute_bytes_allocated PROTO((ptr xg, ptr xs));
69 extern ptr S_bytes_finalized PROTO(());
70 extern ptr S_find_more_room PROTO((ISPC s, IGEN g, iptr n, ptr old));
71 extern void S_record_new_dirty_card PROTO((thread_gc *tgc, ptr *ppp, IGEN to_g));
72 extern ptr S_find_more_gc_room PROTO((thread_gc *tgc, IGEN g, ISPC s, iptr n, ptr old));
73 extern void S_close_off_thread_local_segment PROTO((ptr tc, ISPC s, IGEN g));
74 extern void S_dirty_set PROTO((ptr *loc, ptr x));
75 extern void S_mark_card_dirty PROTO((uptr card, IGEN to_g));
76 extern void S_scan_dirty PROTO((ptr *p, ptr *endp));
77 extern void S_scan_remembered_set PROTO((void));
78 extern void S_get_more_room PROTO((void));
79 extern ptr S_get_more_room_help PROTO((ptr tc, uptr ap, uptr type, uptr size));
80 extern ptr S_list_bits_ref PROTO((ptr p));
81 extern void S_list_bits_set PROTO((ptr p, iptr bits));
82 extern ptr S_cons_in PROTO((ptr tc, ISPC s, IGEN g, ptr car, ptr cdr));
83 extern ptr S_ephemeron_cons_in PROTO((IGEN g, ptr car, ptr cdr));
84 extern ptr S_symbol PROTO((ptr name));
85 extern ptr S_rational PROTO((ptr n, ptr d));
86 extern ptr S_tlc PROTO((ptr keyval, ptr tconc, ptr next));
87 extern ptr S_vector_in PROTO((ptr tc, ISPC s, IGEN g, iptr n));
88 extern ptr S_vector PROTO((iptr n));
89 extern ptr S_fxvector PROTO((iptr n));
90 extern ptr S_flvector PROTO((iptr n));
91 extern ptr S_bytevector PROTO((iptr n));
92 extern ptr S_bytevector2 PROTO((ptr tc, iptr n, ISPC spc));
93 extern ptr S_null_immutable_vector PROTO((void));
94 extern ptr S_null_immutable_fxvector PROTO((void));
95 extern ptr S_null_immutable_bytevector PROTO((void));
96 extern ptr S_null_immutable_string PROTO((void));
97 extern ptr S_stencil_vector PROTO((uptr mask));
98 extern ptr S_record PROTO((iptr n));
99 extern ptr S_closure PROTO((ptr cod, iptr n));
100 extern ptr S_mkcontinuation PROTO((ISPC s, IGEN g, ptr nuate, ptr stack,
101                 iptr length, iptr clength, ptr link, ptr ret, ptr winders,
102                 ptr attachments));
103 extern ptr S_inexactnum PROTO((double rp, double ip));
104 extern ptr S_exactnum PROTO((ptr a, ptr b));
105 extern ptr S_thread PROTO((ptr tc));
106 extern ptr S_string PROTO((const char *s, iptr n));
107 extern ptr S_bignum PROTO((ptr tc, iptr n, IBOOL sign));
108 extern ptr S_code PROTO((ptr tc, iptr type, iptr n));
109 extern ptr S_relocation_table PROTO((iptr n));
110 extern ptr S_weak_cons PROTO((ptr car, ptr cdr));
111 extern ptr S_box2 PROTO((ptr ref, IBOOL immobile));
112 extern ptr S_phantom_bytevector PROTO((uptr sz));
113 extern void S_phantom_bytevector_adjust PROTO((ptr ph, uptr new_sz));
114 
115 /* fasl.c */
116 extern void S_fasl_init PROTO((void));
117 extern ptr S_fasl_read PROTO((INT fd, IFASLCODE situation, ptr path, ptr externals));
118 extern ptr S_bv_fasl_read PROTO((ptr bv, int ty, uptr offset, uptr len, ptr path, ptr externals));
119 extern ptr S_boot_read PROTO((INT fd, const char *path));
120 extern char *S_format_scheme_version PROTO((uptr n));
121 extern char *S_lookup_machine_type PROTO((uptr n));
122 extern void S_set_code_obj PROTO((char *who, IFASLCODE typ, ptr p, iptr n,
123              ptr x, iptr o));
124 extern ptr S_get_code_obj PROTO((IFASLCODE typ, ptr p, iptr n, iptr o));
125 extern int S_fasl_stream_read PROTO((void *stream, octet *dest, iptr n));
126 extern int S_fasl_intern_rtd(ptr *x);
127 #ifdef X86_64
128 extern void x86_64_set_popcount_present PROTO((ptr code));
129 #endif
130 #ifdef PORTABLE_BYTECODE_BIGENDIAN
131 extern void S_swap_dounderflow_header_endian PROTO((ptr code));
132 #endif
133 
134 /* vfasl.c */
135 extern ptr S_vfasl PROTO((ptr bv, void *stream, iptr offset, iptr len));
136 extern ptr S_vfasl_to PROTO((ptr v));
137 
138 /* flushcache.c */
139 extern void S_record_code_mod PROTO((ptr tc, uptr addr, uptr bytes));
140 extern void S_flush_instruction_cache PROTO((ptr tc));
141 extern void S_flushcache_init PROTO((void));
142 
143 /* foreign.c */
144 extern void S_foreign_init PROTO((void));
145 extern void S_foreign_entry PROTO((void));
146 
147 /* gcwrapper.c */
148 extern void S_ptr_tell PROTO((ptr p));
149 extern void S_addr_tell PROTO((ptr p));
150 extern void S_gc_init PROTO((void));
151 #ifndef WIN32
152 extern void S_register_child_process PROTO((INT child));
153 #endif /* WIN32 */
154 extern void S_fixup_counts PROTO((ptr counts));
155 extern ptr S_do_gc PROTO((IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots));
156 extern ptr S_gc PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots));
157 extern void S_gc_init PROTO((void));
158 extern void S_set_maxgen PROTO((IGEN g));
159 extern IGEN S_maxgen PROTO((void));
160 extern void S_set_minfreegen PROTO((IGEN g));
161 extern IGEN S_minfreegen PROTO((void));
162 extern void S_set_minmarkgen PROTO((IGEN g));
163 extern IGEN S_minmarkgen PROTO((void));
164 #ifndef WIN32
165 extern void S_register_child_process PROTO((INT child));
166 #endif /* WIN32 */
167 extern IBOOL S_enable_object_counts PROTO((void));
168 extern void S_set_enable_object_counts PROTO((IBOOL eoc));
169 extern ptr S_object_counts PROTO((void));
170 extern IBOOL S_enable_object_backreferences PROTO((void));
171 extern void S_set_enable_object_backreferences PROTO((IBOOL eoc));
172 extern ptr S_object_backreferences PROTO((void));
173 extern void S_immobilize_object PROTO((ptr v));
174 extern void S_mobilize_object PROTO((ptr v));
175 extern ptr S_locked_objects PROTO((void));
176 extern ptr S_unregister_guardian PROTO((ptr tconc));
177 extern void S_compact_heap PROTO((void));
178 extern void S_check_heap PROTO((IBOOL aftergc, IGEN target_gen));
179 
180 /* gc-011.c */
181 extern void S_gc_011 PROTO((ptr tc));
182 
183 /* gc-par.c */
184 extern ptr S_gc_par PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots));
185 
186 /* gc-ocd.c */
187 extern ptr S_gc_ocd PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots));
188 
189 /* gc-oce.c */
190 extern ptr S_gc_oce PROTO((ptr tc, IGEN max_cg, IGEN min_tg, IGEN max_tg, ptr count_roots));
191 extern ptr S_count_size_increments PROTO((ptr ls, IGEN generation));
192 
193 /* intern.c */
194 extern void S_intern_init PROTO((void));
195 extern void S_resize_oblist PROTO((void));
196 extern ptr S_intern PROTO((const unsigned char *s));
197 extern ptr S_intern_sc PROTO((const string_char *s, iptr n, ptr name_str));
198 extern ptr S_intern3 PROTO((const string_char *pname, iptr plen, const string_char *uname, iptr ulen, ptr pname_str, ptr uame_str));
199 extern ptr S_intern4 PROTO((ptr sym));
200 extern void S_intern_gensym PROTO((ptr g));
201 extern void S_retrofit_nonprocedure_code PROTO((void));
202 extern ptr S_mkstring PROTO((const string_char *s, iptr n));
203 extern I32 S_symbol_hash32(ptr str);
204 extern I64 S_symbol_hash64(ptr str);
205 
206 /* io.c */
207 extern IBOOL S_file_existsp PROTO((const char *inpath, IBOOL followp));
208 extern IBOOL S_file_regularp PROTO((const char *inpath, IBOOL followp));
209 extern IBOOL S_file_directoryp PROTO((const char *inpath, IBOOL followp));
210 extern IBOOL S_file_symbolic_linkp PROTO((const char *inpath));
211 #ifdef WIN32
212 extern ptr S_find_files PROTO((const char *wildpath));
213 #else
214 extern ptr S_directory_list PROTO((const char *inpath));
215 #endif
216 extern char *S_malloc_pathname PROTO((const char *inpath));
217 #ifdef WIN32
218 extern wchar_t *S_malloc_wide_pathname PROTO((const char *inpath));
219 #endif
220 extern IBOOL S_fixedpathp PROTO((const char *inpath));
221 
222 /* compress-io.c */
223 extern INT S_zlib_compress_level PROTO((INT compress_level));
224 extern INT S_lz4_compress_level PROTO((INT compress_level));
225 extern glzFile S_glzdopen_output PROTO((INT fd, INT compress_format, INT compress_level));
226 extern glzFile S_glzdopen_input PROTO((INT fd));
227 extern glzFile S_glzopen_input PROTO((const char *path));
228 #ifdef WIN32
229 extern glzFile S_glzopen_input_w PROTO((const wchar_t *path));
230 #endif
231 extern IBOOL S_glzdirect PROTO((glzFile file));
232 extern INT S_glzclose PROTO((glzFile file));
233 
234 extern INT S_glzread PROTO((glzFile file, void *buffer, UINT count));
235 extern INT S_glzwrite PROTO((glzFile file, void *buffer, UINT count));
236 extern long S_glzseek PROTO((glzFile file, long offset, INT whence));
237 extern INT S_glzgetc PROTO((glzFile file));
238 extern INT S_glzungetc PROTO((INT c, glzFile file));
239 extern INT S_glzrewind PROTO((glzFile file));
240 
241 extern void S_glzerror PROTO((glzFile file, INT *errnum));
242 extern void S_glzclearerr PROTO((glzFile fdfile));
243 
244 
245 /* new-io.c */
246 extern INT S_gzxfile_fd PROTO((ptr x));
247 extern glzFile S_gzxfile_gzfile PROTO((ptr x));
248 extern ptr S_new_open_input_fd PROTO((const char *filename, IBOOL compressed));
249 extern ptr S_new_open_output_fd PROTO((const char *filename, INT mode, INT options));
250 extern ptr S_new_open_input_output_fd PROTO((const char *filename, INT mode, INT options));
251 extern ptr S_close_fd PROTO((ptr file, IBOOL gzflag));
252 extern ptr S_compress_input_fd PROTO((INT fd, I64 fp));
253 extern ptr S_compress_output_fd PROTO((INT fd));
254 
255 extern ptr S_bytevector_read PROTO((ptr file, ptr buffer, iptr start, iptr count, IBOOL gzflag));
256 extern ptr S_bytevector_read_nb PROTO((ptr file, ptr buffer, iptr start, iptr count, IBOOL gzflag));
257 extern ptr S_bytevector_write PROTO((ptr file, ptr buffer, iptr start, iptr count, IBOOL gzflag));
258 extern ptr S_put_byte PROTO((ptr file, INT byte, IBOOL gzflag));
259 
260 extern ptr S_get_fd_pos PROTO((ptr file, IBOOL gzflag));
261 extern ptr S_set_fd_pos PROTO((ptr file, ptr pos, IBOOL gzflag));
262 extern ptr S_get_fd_non_blocking PROTO((ptr file, IBOOL gzflag));
263 extern ptr S_set_fd_non_blocking PROTO((ptr file, IBOOL x, IBOOL gzflag));
264 extern ptr S_get_fd_length PROTO((ptr file, IBOOL gzflag));
265 extern ptr S_set_fd_length PROTO((ptr file, ptr length, IBOOL gzflag));
266 extern void S_new_io_init PROTO((void));
267 
268 extern uptr S_bytevector_compress_size PROTO((iptr s_count, INT compress_format));
269 extern ptr S_bytevector_compress PROTO((ptr dest_bv, iptr d_start, iptr d_count,
270                                         ptr src_bv, iptr s_start, iptr s_count,
271                                         INT compress_format));
272 extern ptr S_bytevector_uncompress PROTO((ptr dest_bv, iptr d_start, iptr d_count,
273                                           ptr src_bv, iptr s_start, iptr s_count,
274                                           INT compress_format));
275 
276 /* thread.c */
277 extern void S_thread_init PROTO((void));
278 extern ptr S_create_thread_object PROTO((const char *who, ptr p_tc));
279 #ifdef PTHREADS
280 extern ptr S_fork_thread PROTO((ptr thunk));
281 extern scheme_mutex_t *S_make_mutex PROTO((void));
282 extern void S_mutex_free PROTO((scheme_mutex_t *m));
283 extern void S_mutex_acquire PROTO((scheme_mutex_t *m));
284 extern INT S_mutex_tryacquire PROTO((scheme_mutex_t *m));
285 extern void S_mutex_release PROTO((scheme_mutex_t *m));
286 extern IBOOL S_mutex_is_owner PROTO((scheme_mutex_t *m));
287 extern s_thread_cond_t *S_make_condition PROTO((void));
288 extern void S_condition_free PROTO((s_thread_cond_t *c));
289 extern IBOOL S_condition_wait PROTO((s_thread_cond_t *c, scheme_mutex_t *m, ptr t));
290 extern INT S_activate_thread PROTO((void));
291 extern void S_unactivate_thread PROTO((int mode));
292 #endif
293 
294 /* scheme.c */
295 extern void S_generic_invoke PROTO((ptr tc, ptr code));
296 
297 /* number.c */
298 extern void S_number_init PROTO((void));
299 extern ptr S_normalize_bignum PROTO((ptr x));
300 extern IBOOL S_integer_valuep PROTO((ptr x));
301 extern iptr S_integer_value PROTO((const char *who, ptr x));
302 extern I64 S_int64_value PROTO((char *who, ptr x));
303 extern IBOOL S_big_eq PROTO((ptr x, ptr y));
304 extern IBOOL S_big_lt PROTO((ptr x, ptr y));
305 extern ptr S_big_negate PROTO((ptr x));
306 extern ptr S_add PROTO((ptr x, ptr y));
307 extern ptr S_sub PROTO((ptr x, ptr y));
308 extern ptr S_mul PROTO((ptr x, ptr y));
309 extern ptr S_div PROTO((ptr x, ptr y));
310 extern ptr S_rem PROTO((ptr x, ptr y));
311 extern ptr S_trunc PROTO((ptr x, ptr y));
312 extern void S_trunc_rem PROTO((ptr tc, ptr x, ptr y, ptr *q, ptr *r));
313 extern ptr S_gcd PROTO((ptr x, ptr y));
314 extern ptr S_ash PROTO((ptr x, ptr n));
315 extern ptr S_big_positive_bit_field PROTO((ptr x, ptr fxstart, ptr fxend));
316 extern ptr S_integer_length PROTO((ptr x));
317 extern ptr S_big_trailing_zero_bits PROTO((ptr x));
318 extern ptr S_big_first_bit_set PROTO((ptr x));
319 extern double S_random_double PROTO((U32 m1, U32 m2,
320                U32 m3, U32 m4, double scale));
321 extern double S_floatify PROTO((ptr x));
322 extern ptr S_decode_float PROTO((double d));
323 extern ptr S_logand PROTO((ptr x, ptr y));
324 extern ptr S_logbitp PROTO((ptr k, ptr x));
325 extern ptr S_logbit0 PROTO((ptr k, ptr x));
326 extern ptr S_logbit1 PROTO((ptr k, ptr x));
327 extern ptr S_logtest PROTO((ptr x, ptr y));
328 extern ptr S_logor PROTO((ptr x, ptr y));
329 extern ptr S_logxor PROTO((ptr x, ptr y));
330 extern ptr S_lognot PROTO((ptr x));
331 extern void S_bignum_mask_test PROTO((void));
332 
333 /* prim.c */
334 extern ptr S_lookup_library_entry PROTO((iptr n, IBOOL errorp));
335 extern ptr S_lookup_c_entry PROTO((iptr i));
336 extern void S_prim_init PROTO((void));
337 extern void S_install_c_entry PROTO((iptr i, ptr x));
338 extern void S_check_c_entry_vector PROTO((void));
339 
340 /* prim5.c */
341 extern ptr S_strerror PROTO((INT errnum));
342 extern void S_prim5_init PROTO((void));
343 extern void S_dump_tc PROTO((ptr tc));
344 extern ptr S_uninterned PROTO((ptr x));
345 
346 /* print.c */
347 extern void S_print_init PROTO((void));
348 extern void S_prin1 PROTO((ptr x));
349 
350 /* schsig.c */
351 extern ptr S_get_scheme_arg PROTO((ptr tc, iptr n));
352 extern void S_put_scheme_arg PROTO((ptr tc, iptr n, ptr x));
353 extern iptr S_continuation_depth PROTO((ptr k));
354 extern ptr S_single_continuation PROTO((ptr k, iptr n));
355 extern void S_promote_to_multishot PROTO((ptr k));
356 extern void S_split_and_resize PROTO((void));
357 extern void S_handle_overflow PROTO((void));
358 extern void S_handle_overflood PROTO((void));
359 extern void S_handle_apply_overflood PROTO((void));
360 extern void S_overflow PROTO((ptr tc, iptr frame_request));
361 extern NORETURN void S_error_reset PROTO((const char *s));
362 extern NORETURN void S_error_abort PROTO((const char *s));
363 extern NORETURN void S_abnormal_exit PROTO((void));
364 extern NORETURN void S_error PROTO((const char *who, const char *s));
365 extern NORETURN void S_error1 PROTO((const char *who, const char *s, ptr x));
366 extern NORETURN void S_error2 PROTO((const char *who, const char *s, ptr x, ptr y));
367 extern NORETURN void S_error3 PROTO((const char *who, const char *s, ptr x, ptr y, ptr z));
368 extern NORETURN void S_boot_error PROTO((const ptr who, ptr s, ptr args));
369 extern void S_handle_docall_error PROTO((void));
370 extern void S_handle_arg_error PROTO((void));
371 extern void S_handle_nonprocedure_symbol PROTO((void));
372 extern void S_handle_values_error PROTO((void));
373 extern void S_handle_mvlet_error PROTO((void));
374 extern void S_handle_event_detour PROTO((void));
375 extern ptr S_allocate_scheme_signal_queue PROTO((void));
376 extern ptr S_dequeue_scheme_signals PROTO((ptr tc));
377 extern void S_register_scheme_signal PROTO((iptr sig));
378 extern void S_fire_collector PROTO((void));
379 extern NORETURN void S_noncontinuable_interrupt PROTO((void));
380 extern void S_schsig_init PROTO((void));
381 #ifdef DEFINE_MATHERR
382 #include <math.h>
383 extern INT matherr PROTO((struct exception *x));
384 #endif /* DEFINE_MATHERR */
385 
386 /* segment.c */
387 extern void S_segment_init PROTO((void));
388 extern void *S_getmem PROTO((iptr bytes, IBOOL zerofill, IBOOL for_code));
389 extern void S_freemem PROTO((void *addr, iptr bytes));
390 extern iptr S_find_segments PROTO((thread_gc *creator, ISPC s, IGEN g, iptr n));
391 extern void S_free_chunk PROTO((chunkinfo *chunk));
392 extern void S_free_chunks PROTO((void));
393 extern uptr S_curmembytes PROTO((void));
394 extern uptr S_maxmembytes PROTO((void));
395 extern void S_resetmaxmembytes PROTO((void));
396 extern void S_adjustmembytes PROTO((iptr amt));
397 extern void S_move_to_chunk_list PROTO((chunkinfo *chunk, chunkinfo **pchunk_list));
398 extern void S_thread_start_code_write PROTO((ptr tc, IGEN maxg, IBOOL current, void *hint, uptr hint_len));
399 extern void S_thread_end_code_write PROTO((ptr tc, IGEN maxg, IBOOL current, void *hint, uptr hint_len));
400 
401 /* stats.c */
402 extern void S_stats_init PROTO((void));
403 extern ptr S_cputime PROTO((void));
404 extern ptr S_realtime PROTO((void));
405 extern ptr S_clock_gettime PROTO((I32 typeno));
406 extern ptr S_gmtime PROTO((ptr tzoff, ptr tspair));
407 extern ptr S_asctime PROTO((ptr dtvec));
408 extern ptr S_mktime PROTO((ptr dtvec));
409 extern ptr S_unique_id PROTO((void));
410 extern void S_gettime PROTO((INT typeno, struct timespec *tp));
411 
412 /* symbol.c */
413 extern ptr S_symbol_value PROTO((ptr sym));
414 extern ptr S_symbol_racy_value PROTO((ptr sym));
415 extern void S_set_symbol_value PROTO((ptr sym, ptr val));
416 
417 /* machine-dependent .c files, e.g., x88k.c */
418 #ifdef FLUSHCACHE
419 extern INT S_flushcache_max_gap PROTO((void));
420 extern void S_doflush PROTO((uptr start, uptr end));
421 #endif
422 extern void S_machine_init PROTO((void));
423 
424 /* schlib.c */
425 extern void S_initframe PROTO((ptr tc, iptr n));
426 extern void S_put_arg PROTO((ptr tc, iptr i, ptr x));
427 extern void S_return PROTO((void));
428 extern void S_call_help PROTO((ptr tc, IBOOL singlep, IBOOL lock_ts));
429 extern void S_call_one_result PROTO((void));
430 extern void S_call_any_results PROTO((void));
431 
432 #ifdef PORTABLE_BYTECODE
433 /* pb.c */
434 extern void S_pb_interp(ptr tc, void *bytecode);
435 #endif
436 
437 #ifdef WIN32
438 /* windows.c */
439 extern INT S_getpagesize(void);
440 extern ptr S_LastErrorString(void);
441 extern void *S_ntdlopen(const char *path);
442 extern void *S_ntdlsym(void *h, const char *s);
443 extern ptr S_ntdlerror(void);
444 extern int S_windows_flock(int fd, int operation);
445 extern int S_windows_chdir(const char *pathname);
446 extern int S_windows_chmod(const char *pathname, int mode);
447 extern int S_windows_mkdir(const char *pathname);
448 extern int S_windows_open(const char *pathname, int flags, int mode);
449 extern int S_windows_rename(const char *oldpathname, const char *newpathname);
450 extern int S_windows_rmdir(const char *pathname);
451 extern int S_windows_stat64(const char *pathname, struct STATBUF *buffer);
452 extern int S_windows_system(const char *command);
453 extern int S_windows_unlink(const char *pathname);
454 extern char *S_windows_getcwd(char *buffer, int maxlen);
455 #endif /* WIN32 */
456 
457 #ifdef FEATURE_EXPEDITOR
458 /* expeditor.c */
459 extern void S_expeditor_init PROTO((void));
460 #endif /* FEATURE_EXPEDITOR */
461 
462 /* random.c */
463 uptr S_random_state_next_integer PROTO((ptr s, uptr n));
464 double S_random_state_next_double PROTO((ptr s));
465 void S_random_state_init PROTO((ptr s, UINT x));
466 IBOOL S_random_state_check PROTO((double x10, double x11, double x12,
467                                   double x20, double x21, double x22));
468 
469 /* statics.c */
470 extern void scheme_statics();
471