231 lines
6.0 KiB
C
231 lines
6.0 KiB
C
/* Scheme In One Defun, but in C this time.
|
|
|
|
* COPYRIGHT (c) 1988-1992 BY *
|
|
* PARADIGM ASSOCIATES INCORPORATED, CAMBRIDGE, MASSACHUSETTS. *
|
|
* See the source file SLIB.C for more information. *
|
|
|
|
Declarations which are private to SLIB.C internals.
|
|
|
|
*/
|
|
|
|
#ifndef __SIODP_H__
|
|
#define __SIODP_H__
|
|
|
|
#include "io.h"
|
|
|
|
typedef int (*repl_getc_fn)(FILE *);
|
|
typedef void (*repl_ungetc_fn)(int,FILE *);
|
|
|
|
/* Will get to editline functions if supported */
|
|
extern repl_getc_fn siod_fancy_getc;
|
|
extern repl_ungetc_fn siod_fancy_ungetc;
|
|
extern "C" const char *repl_prompt;
|
|
|
|
extern char *tkbuffer;
|
|
extern LISP heap,heap_end,heap_org;
|
|
extern LISP oblistvar;
|
|
extern LISP open_files;
|
|
extern LISP eof_val;
|
|
extern LISP siod_docstrings;
|
|
extern int siod_interactive;
|
|
void sock_acknowledge_error();
|
|
extern FILE *fwarn;
|
|
extern LISP unbound_marker;
|
|
extern long gc_kind_copying;
|
|
extern LISP freelist;
|
|
extern long gc_cells_allocated;
|
|
extern int siod_server_socket;
|
|
extern "C" int rl_pos;
|
|
|
|
struct user_type_hooks
|
|
{
|
|
char *name;
|
|
char gc_free_once;
|
|
LISP (*gc_relocate)(LISP);
|
|
void (*gc_scan)(LISP);
|
|
LISP (*gc_mark)(LISP);
|
|
void (*gc_free)(LISP);
|
|
void (*gc_clear)(LISP);
|
|
void (*prin1)(LISP, FILE *);
|
|
void (*print_string)(LISP, char *);
|
|
LISP (*leval)(LISP, LISP *, LISP *);
|
|
long (*c_sxhash)(LISP,long);
|
|
LISP (*fast_print)(LISP,LISP);
|
|
LISP (*fast_read)(int,LISP);
|
|
LISP (*equal)(LISP,LISP);};
|
|
|
|
struct catch_frame
|
|
{LISP tag;
|
|
LISP retval;
|
|
jmp_buf cframe;
|
|
struct catch_frame *next;};
|
|
|
|
struct gc_protected
|
|
{LISP *location;
|
|
long length;
|
|
struct gc_protected *next;};
|
|
|
|
#define NEWCELL(_into,_type) \
|
|
{if (gc_kind_copying == 1) \
|
|
{if ((_into = heap) >= heap_end) \
|
|
gc_fatal_error(); \
|
|
heap = _into+1;} \
|
|
else \
|
|
{if NULLP(freelist) \
|
|
gc_for_newcell(); \
|
|
_into = freelist; \
|
|
freelist = CDR(freelist); \
|
|
++gc_cells_allocated;} \
|
|
(*_into).gc_mark = 0; \
|
|
(*_into).type = (short) _type;}
|
|
#if 0
|
|
#define NEWCELL(_into,_type) NNEWCELL(&_into,_type)
|
|
void NNEWCELL (LISP *_into,long _type);
|
|
#endif
|
|
|
|
#ifdef THINK_C
|
|
extern int ipoll_counter;
|
|
void full_interrupt_poll(int *counter);
|
|
#define INTERRUPT_CHECK() if (--ipoll_counter < 0) full_interrupt_poll(&ipoll_counter)
|
|
#else
|
|
#define INTERRUPT_CHECK()
|
|
#endif
|
|
|
|
extern char *stack_limit_ptr;
|
|
|
|
#define STACK_LIMIT(_ptr,_amt) (((char *)_ptr) - (_amt))
|
|
|
|
/* This is wrong if stack grows in different direction */
|
|
#define STACK_CHECK(_ptr) \
|
|
if (((char *) (_ptr)) < stack_limit_ptr) err_stack((char *) _ptr);
|
|
|
|
#define TKBUFFERN 256
|
|
|
|
void err_stack(char *);
|
|
|
|
#if defined(VMS) && defined(VAX)
|
|
#define SIG_restargs ,...
|
|
#else
|
|
#define SIG_restargs
|
|
#endif
|
|
|
|
void init_storage(int init_heap_size);
|
|
void init_subrs_base(void);
|
|
void init_subrs_core(void);
|
|
void init_subrs_doc(void);
|
|
void init_subrs_file(void);
|
|
void init_subrs_format(void);
|
|
void init_subrs_list(void);
|
|
void init_subrs_math(void);
|
|
void init_subrs_sys(void);
|
|
void init_subrs_srv(void);
|
|
void init_subrs_str(void);
|
|
void init_subrs_xtr(void);
|
|
|
|
void need_n_cells(int n);
|
|
|
|
char *must_malloc(unsigned long size);
|
|
|
|
LISP gc_relocate(LISP x);
|
|
void gc_fatal_error(void);
|
|
void gc_for_newcell(void);
|
|
struct user_type_hooks *get_user_type_hooks(long type);
|
|
void gc_mark(LISP ptr);
|
|
LISP newcell(long type);
|
|
|
|
void put_st(const char *st);
|
|
int f_getc(FILE *f);
|
|
void f_ungetc(int c, FILE *f);
|
|
long no_interrupt(long n);
|
|
LISP readtl(struct gen_readio *f);
|
|
long repl_driver(long want_sigint,long want_init,struct repl_hooks *);
|
|
|
|
LISP leval_args(LISP l,LISP env);
|
|
LISP extend_env(LISP actuals,LISP formals,LISP env);
|
|
LISP envlookup(LISP var,LISP env);
|
|
LISP closure(LISP env,LISP code);
|
|
extern struct catch_frame *catch_framep;
|
|
void close_open_files(void);
|
|
void close_open_files_upto(LISP end);
|
|
void pprintf(FILE *fd,LISP exp,int indent,int width, int depth,int length);
|
|
|
|
#if 0
|
|
void handle_sigfpe(int sig SIG_restargs);
|
|
void handle_sigint(int sig SIG_restargs);
|
|
void err_ctrl_c(void);
|
|
double myruntime(void);
|
|
void grepl_puts(char *,void (*)(char *));
|
|
LISP gen_intern(char *name,int freeable);
|
|
void scan_registers(void);
|
|
void init_storage_1(int heap_size);
|
|
LISP get_newspace(void);
|
|
void scan_newspace(LISP newspace);
|
|
void free_oldspace(LISP space,LISP end);
|
|
void gc_stop_and_copy(void);
|
|
void gc_mark_and_sweep(void);
|
|
void gc_ms_stats_start(void);
|
|
void gc_ms_stats_end(void);
|
|
void mark_protected_registers(void);
|
|
void mark_locations(LISP *start,LISP *end);
|
|
void mark_locations_array(LISP *x,long n);
|
|
void gc_sweep(void);
|
|
LISP leval_setq(LISP args,LISP env);
|
|
LISP syntax_define(LISP args);
|
|
LISP leval_define(LISP args,LISP env);
|
|
LISP leval_if(LISP *pform,LISP *penv);
|
|
LISP leval_lambda(LISP args,LISP env);
|
|
LISP leval_progn(LISP *pform,LISP *penv);
|
|
LISP leval_or(LISP *pform,LISP *penv);
|
|
LISP leval_and(LISP *pform,LISP *penv);
|
|
LISP leval_catch(LISP args,LISP env);
|
|
LISP lthrow(LISP tag,LISP value);
|
|
LISP leval_let(LISP *pform,LISP *penv);
|
|
LISP reverse(LISP l);
|
|
LISP let_macro(LISP form);
|
|
LISP leval_quote(LISP args,LISP env);
|
|
LISP leval_tenv(LISP args,LISP env);
|
|
int flush_ws(struct gen_readio *f,const char *eoferr);
|
|
LISP lreadr(struct gen_readio *f);
|
|
LISP lreadparen(struct gen_readio *f);
|
|
LISP arglchk(LISP x);
|
|
|
|
int rfs_getc(unsigned char **p);
|
|
void rfs_ungetc(unsigned char c,unsigned char **p);
|
|
LISP lreadstring(struct gen_readio *f);
|
|
|
|
void file_gc_free(LISP ptr);
|
|
void file_prin1(LISP ptr,FILE *f);
|
|
LISP fd_to_scheme_file(int fd,
|
|
const char *name, const char *how,
|
|
int close_on_error);
|
|
LISP lgetc(LISP p);
|
|
LISP lputc(LISP c,LISP p);
|
|
LISP lputs(LISP str,LISP p);
|
|
|
|
LISP lftell(LISP file);
|
|
LISP lfseek(LISP file,LISP offset,LISP direction);
|
|
LISP lfread(LISP size,LISP file);
|
|
LISP lfwrite(LISP string,LISP file);
|
|
|
|
|
|
LISP leval_while(LISP args,LISP env);
|
|
|
|
void init_subrs_a(void);
|
|
void init_subrs_1(void);
|
|
|
|
LISP stack_limit(LISP,LISP);
|
|
|
|
void err0(void);
|
|
void pr(LISP);
|
|
void prp(LISP *);
|
|
|
|
LISP closure_code(LISP exp);
|
|
LISP closure_env(LISP exp);
|
|
LISP lwhile(LISP form,LISP env);
|
|
|
|
LISP siod_send_lisp_to_client(LISP x);
|
|
#endif
|
|
|
|
|
|
#endif
|