/* Scheme In One Define.
 
The garbage collector, the name and other parts of this program are

 *                     COPYRIGHT (c) 1989 BY                              *
 *      PARADIGM ASSOCIATES INCORPORATED, CAMBRIDGE, MASSACHUSETTS.       *

Conversion  to  full scheme standard, characters, vectors, ports, complex &
rational numbers, and other major enhancments by

 *      Scaglione Ermanno, v. Pirinoli 16 IMPERIA P.M. 18100 ITALY        * 

Permission  to use, copy, modify, distribute and sell this software and its
documentation  for  any purpose and without fee is hereby granted, provided
that  the  above  copyright  notice appear in all copies and that both that
copyright   notice   and   this  permission  notice  appear  in  supporting
documentation,  and that the name of Paradigm Associates Inc not be used in
advertising or publicity pertaining to distribution of the software without
specific, written prior permission.

PARADIGM  DISCLAIMS  ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL  IMPLIED  WARRANTIES  OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
PARADIGM  BE  LIABLE  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
IN  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

*/

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <setjmp.h>
#include <signal.h>
#include <math.h>

#include "siod.h"

LISP heap,heap_end,heap_org;

long heap_size = 5000;
long full_set = 1;
char *init_file = (char *) NULL;
char tkbuffer[TKBUFFERN];
long quiet = 0;
long gc_cells_allocated = 0;

double gc_time_taken;
double gc_rt;
long gc_cells_collected;

LISP *stack_start_ptr;
LISP freelist;

jmp_buf errjmp;
long errjmp_ok = 0;
long nointerrupt = 1;
long interrupt_differed = 0;

struct gc_protected *protected_registers = NULL;

LISP truth = NIL;
LISP eof_val = NIL;
LISP sym_the_non_printing = NIL;
LISP sym_err_string = NIL;
LISP sym_errobj = NIL;
LISP sym_inspect = NIL;
LISP sym_err_han = NIL;
LISP sym_on_reset = NIL;
LISP sym_debug_mode = NIL;
LISP sym_gc_mode = NIL;
LISP sym_repl_mode = NIL;
LISP sym_stdin = NIL;
LISP sym_stdout = NIL;
LISP sym_scheme_top_level = NIL;
LISP sym_input_port = NIL;
LISP sym_output_port = NIL;
LISP val_scheme_top_level = NIL;
LISP val_input_port = NIL;
LISP val_output_port = NIL;
LISP sym_standard_input = NIL;
LISP sym_standard_output = NIL;
LISP sym_progn = NIL;
LISP sym_fluid_environment = NIL;
LISP sym_user_environment = NIL;
LISP sym_initial_environment = NIL;
LISP sym_lambda = NIL;
LISP sym_quote = NIL;
LISP sym_dot = NIL;
LISP sym_else = NIL;
LISP unbound_marker = NIL;
LISP cur_exp = NIL;
LISP cur_env = NIL;

LISP *chararray;
LISP *fixarray;
long fixarray_dim = 100;
LISP *obarray;
long obarray_dim = 100;
FILE *transfile=NULL;

struct catch_frame *catch_framep = (struct catch_frame *) NULL;

jmp_buf save_regs_gc_mark;

