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