Description: <short summary of the patch>
 TODO: Put a short summary on the line above and replace this paragraph
 with a longer explanation of this change. Complete the meta-information
 with other relevant fields (see below for details). To make it easier, the
 information below has been extracted from the changelog. Adjust it or drop
 it.
 .
 gcl (2.6.10-15) unstable; urgency=high
 .
   * 2.6.11pre test 14
Author: Camm Maguire <camm@debian.org>

---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:

Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: http://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: <YYYY-MM-DD>

--- gcl-2.6.10.orig/cmpnew/gcl_cmpcall.lsp
+++ gcl-2.6.10/cmpnew/gcl_cmpcall.lsp
@@ -280,6 +280,7 @@
      ((setq fd (or (get fname 'Lfun) (get fname 'Ufun)))
       (check-fname-args fname args)
       (push-args args)
+      (wt-h "void " fd "();")
       (wt-nl fd "();")
       (unwind-exit 'fun-val nil fname)
       )
--- gcl-2.6.10.orig/cmpnew/gcl_cmpflet.lsp
+++ gcl-2.6.10/cmpnew/gcl_cmpflet.lsp
@@ -373,7 +373,7 @@
   (cond
    ((cadr fd)
     (push-args args)
-    (wt-nl "cclosure_call(") (wt-ccb-vs (fun-ref-ccb (car fd))) (wt ");"))
+    (wt-nl "funcall(") (wt-ccb-vs (fun-ref-ccb (car fd))) (wt ");"))
    ((and (listp args)
          *do-tail-recursion*
          *tail-recursion-info*
--- gcl-2.6.10.orig/cmpnew/gcl_cmpinline.lsp
+++ gcl-2.6.10/cmpnew/gcl_cmpinline.lsp
@@ -437,7 +437,7 @@
                     (case coersion
                      ((nil) (wt "object V" cvar "= ") (wt-loc loc1))
                      (FIXNUM-LOC (wt "int V" cvar "= ") (wt-fixnum-loc loc))
-		     (integer-loc (wt "GEN V" cvar "= ") (wt-integer-loc loc
+		     (integer-loc (wt "MP_INT * V" cvar "= ") (wt-integer-loc loc
 									 'get-inline-locs))
                      (CHARACTER-LOC
                       (wt "unsigned char V" cvar "= ") (wt-character-loc loc))
--- gcl-2.6.10.orig/cmpnew/gcl_cmpmain.lsp
+++ gcl-2.6.10/cmpnew/gcl_cmpmain.lsp
@@ -592,7 +592,7 @@ SYSTEM_SPECIAL_INIT
 			 #+expect-unresolved "-expect_unresolved '*'"
 			 na na na))	
 			    
-	     #+bsd "-w"
+	     #+bsd ""; "-w"
 	     #-(or aix3 bsd irix3) " 2> /dev/null ")
 		  
 		 
--- gcl-2.6.10.orig/cmpnew/gcl_cmpopt.lsp
+++ gcl-2.6.10/cmpnew/gcl_cmpopt.lsp
@@ -117,7 +117,7 @@
 
 ;;SYMBOL-LENGTH
  (push '((t) fixnum #.(flags rfa)
-  "@0;(type_of(#0)==t_symbol ? (#0)->s.st_fillp :not_a_variable((#0)))")
+  "@0;(type_of(#0)==t_symbol ? (#0)->s.s_fillp :not_a_variable((#0)))")
    (get 'symbol-length 'inline-always))
 
 ;;VECTOR-TYPE
--- gcl-2.6.10.orig/cmpnew/gcl_cmptop.lsp
+++ gcl-2.6.10/cmpnew/gcl_cmptop.lsp
@@ -1319,7 +1319,7 @@
 (defun rep-type (type)
        (case type
              (fixnum "long ")
-	     (integer "GEN ")
+	     (integer "MP_INT * ")
              (character "unsigned char ")
              (short-float "float ")
              (long-float "double ")
@@ -1506,8 +1506,7 @@
   (wt-h header ";")
   (wt-nl1 "{")
   (wt-nl1 "object *vs=vs_top;")
-  (wt-nl1 "object *old_top=vs_top+" vs-size ";")
-  (when (> vs-size 0) (wt-nl "vs_top=old_top;"))
+  (when (> vs-size 0) (wt-nl1 "object *old_top=vs_top+" vs-size ";")(wt-nl "vs_top=old_top;"))
   (wt-nl1 "{")
   (dolist** (s body)
     (cond ((stringp s) (wt-nl1 s))
--- gcl-2.6.10.orig/configure
+++ gcl-2.6.10/configure
@@ -4159,7 +4159,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 if test "$GCC" = "yes" ; then
 
-   TCFLAGS="-Wall -DVOL=volatile -fsigned-char"
+   TCFLAGS="-Wall -fsigned-char"
 
    #FIXME -Wno-unused-but-set-variable when time
    TMPF=-Wno-unused-but-set-variable
@@ -4190,7 +4190,7 @@ fi
    CFLAGS=$CFLAGS_ORI
 
 else
-   TCFLAGS="-DVOL=volatile -fsigned-char"
+   TCFLAGS="-fsigned-char"
 fi
 if test "$GCC" = "yes" ; then
 	TCFLAGS="$TCFLAGS -pipe"
@@ -6414,8 +6414,9 @@ else
 	#define EXTER
 	#include "$MP_INCLUDE"
 	#include "./h/enum.h"
-	#include "./h/bits.h"
 	#define OBJ_ALIGN
+	#include "./h/type.h"
+	#include "./h/lu.h"
 	#include "./h/object.h"
 
 int
@@ -6503,7 +6504,8 @@ else
 	#define EXTER
 	#include "$MP_INCLUDE"
 	#include "h/enum.h"
-	#include "h/bits.h"
+	#include "h/type.h"
+	#include "h/lu.h"
 	#include "h/object.h"
 	int main(int argc,char **argv,char **envp) {
 	FILE *f=fopen("conftest1","w");
@@ -6531,7 +6533,8 @@ else
 	#define EXTER
 	#include "$MP_INCLUDE"
 	#include "`pwd`/h/enum.h"
-	#include "`pwd`/h/bits.h"
+	#include "`pwd`/h/type.h"
+	#include "`pwd`/h/lu.h"
 	#include "`pwd`/h/object.h"
 	int main(int argc,char **argv,char **envp) {
 	FILE *f=fopen("conftest1","w");
@@ -8629,7 +8632,7 @@ EOF
 $as_echo_n "checking emacs site lisp directory... " >&6; }
 if [ "$EMACS_SITE_LISP" = "unknown" ] ; then
 	if [ "$EMACS" != "" ] ; then
-		EMACS_SITE_LISP=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | grep -v ^Warning: | sed -e /Loading/d | sed -e /load/d `
+		EMACS_SITE_LISP=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d  |sed -e /Warning:/d`
 	else
 		EMACS_SITE_LISP=""
 	fi
@@ -8653,7 +8656,7 @@ EOF
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking emacs default.el" >&5
 $as_echo_n "checking emacs default.el... " >&6; }
 if [ "$EMACS" != "" ] ; then
-	EMACS_DEFAULT_EL=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d `
+	EMACS_DEFAULT_EL=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d |sed -e /Warning:/d`
 else
 	EMACS_DEFAULT_EL=""
 fi
@@ -8686,7 +8689,7 @@ if test "$use" = "mingw" ; then
     INFO_DIR=\$\(prefix\)/lib/gcl-$VERSION/info/
 else
     if [ "$EMACS" != "" ] && [ "$INFO_DIR" = "unknown" ] ; then
-	INFO_DIR=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d `
+	INFO_DIR=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d  |sed -e /Warning:/d`
     fi
 fi
 
@@ -8893,6 +8896,39 @@ NOTIFY=$enable_notify
 # for sgbc the mprotect capabilities.
 
 # the time handling for unixtime, add timezone
+for ac_header in sys/mman.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mman_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_MMAN_H 1
+_ACEOF
+ for ac_func in mprotect
+do :
+  ac_fn_c_check_func "$LINENO" "mprotect" "ac_cv_func_mprotect"
+if test "x$ac_cv_func_mprotect" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MPROTECT 1
+_ACEOF
+
+fi
+done
+
+fi
+
+done
+
+for ac_header in alloca.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "alloca.h" "ac_cv_header_alloca_h" "$ac_includes_default"
+if test "x$ac_cv_header_alloca_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ALLOCA_H 1
+_ACEOF
+
+fi
+
+done
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
 if test "x$ac_cv_type_size_t" = xyes; then :
--- gcl-2.6.10.orig/configure.in
+++ gcl-2.6.10/configure.in
@@ -480,7 +480,7 @@ AC_SUBST(CC)
 
 if test "$GCC" = "yes" ; then
 
-   TCFLAGS="-Wall -DVOL=volatile -fsigned-char"
+   TCFLAGS="-Wall -fsigned-char"
 
    #FIXME -Wno-unused-but-set-variable when time
    TMPF=-Wno-unused-but-set-variable
@@ -491,7 +491,7 @@ if test "$GCC" = "yes" ; then
    CFLAGS=$CFLAGS_ORI
 
 else
-   TCFLAGS="-DVOL=volatile -fsigned-char"
+   TCFLAGS="-fsigned-char"
 fi
 if test "$GCC" = "yes" ; then
 	TCFLAGS="$TCFLAGS -pipe"
@@ -1246,8 +1246,9 @@ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
 	#define EXTER
 	#include "$MP_INCLUDE"
 	#include "./h/enum.h"
-	#include "./h/bits.h"
 	#define OBJ_ALIGN
+	#include "./h/type.h"
+	#include "./h/lu.h"
 	#include "./h/object.h"
 	]],[[
 	unsigned long i;
@@ -1278,7 +1279,8 @@ AC_TRY_RUN([#include <stdio.h>
 	#define EXTER
 	#include "$MP_INCLUDE"
 	#include "h/enum.h"
-	#include "h/bits.h"
+	#include "h/type.h"
+	#include "h/lu.h"
 	#include "h/object.h"
 	int main(int argc,char **argv,char **envp) {
 	FILE *f=fopen("conftest1","w");
@@ -1293,7 +1295,8 @@ AC_TRY_RUN([#include <stdio.h>
 	#define EXTER
 	#include "$MP_INCLUDE"
 	#include "`pwd`/h/enum.h"
-	#include "`pwd`/h/bits.h"
+	#include "`pwd`/h/type.h"
+	#include "`pwd`/h/lu.h"
 	#include "`pwd`/h/object.h"
 	int main(int argc,char **argv,char **envp) {
 	FILE *f=fopen("conftest1","w");
@@ -2495,7 +2498,7 @@ EOF
 AC_MSG_CHECKING([emacs site lisp directory])
 if [[ "$EMACS_SITE_LISP" = "unknown" ]] ; then
 	if [[ "$EMACS" != "" ]] ; then
-		EMACS_SITE_LISP=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | grep -v ^Warning: | sed -e /Loading/d | sed -e /load/d `
+		EMACS_SITE_LISP=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d  |sed -e /Warning:/d`
 	else
 		EMACS_SITE_LISP=""
 	fi
@@ -2517,7 +2520,7 @@ EOF
 
 AC_MSG_CHECKING([emacs default.el])
 if [[ "$EMACS" != "" ]] ; then
-	EMACS_DEFAULT_EL=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d `
+	EMACS_DEFAULT_EL=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d |sed -e /Warning:/d`
 else
 	EMACS_DEFAULT_EL=""
 fi
@@ -2548,7 +2551,7 @@ if test "$use" = "mingw" ; then
     INFO_DIR=\$\(prefix\)/lib/gcl-$VERSION/info/
 else
     if [[ "$EMACS" != "" ]] && [[ "$INFO_DIR" = "unknown" ]] ; then
-	INFO_DIR=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d `
+	INFO_DIR=`$EMACS -q -batch --no-site-file -l conftest.el 2>&1 | sed -e /Loading/d | sed -e /load/d  |sed -e /Warning:/d`
     fi
 fi
 
@@ -2679,7 +2682,8 @@ AC_SUBST(NOTIFY)
 # for sgbc the mprotect capabilities.
 
 # the time handling for unixtime, add timezone
-
+AC_CHECK_HEADERS(sys/mman.h,AC_CHECK_FUNCS(mprotect))
+AC_CHECK_HEADERS(alloca.h)
 AC_FUNC_ALLOCA
 
 # alloca
--- gcl-2.6.10.orig/h/386-bsd.h
+++ gcl-2.6.10/h/386-bsd.h
@@ -41,7 +41,7 @@
 #endif
 #define LISTEN_FOR_INPUT(fp) \
 {\
-  int fd = (fp)->_file;\
+  int fd = ((FILE *)fp)->_file;			\
   static struct timeval tv = {0,0};\
   static fd_set rmask; FD_ZERO(&rmask); FD_SET(fd,&rmask);\
   select(fd+1,&rmask,NULL,NULL,&tv);\
--- gcl-2.6.10.orig/h/386-macosx.h
+++ gcl-2.6.10/h/386-macosx.h
@@ -170,7 +170,7 @@ int main(void)
 #undef LISTEN_FOR_INPUT
 #define LISTEN_FOR_INPUT(fp)                                            \
 do {int c=0;                                                            \
-    if ((fp)->_r <=0 && (c=0, ioctl((fp)->_file, FIONREAD, &c), c<=0))  \
+  if (((FILE *)fp)->_r <=0 && (c=0, ioctl(((FILE *)fp)->_file, FIONREAD, &c), c<=0)) \
         return(FALSE);                                                  \
 } while (0)
 
--- gcl-2.6.10.orig/h/FreeBSD.h
+++ gcl-2.6.10/h/FreeBSD.h
@@ -49,7 +49,7 @@ do {								\
 								\
 	if (							\
 		(fp)->_r <= 0 &&				\
-		    (ioctl((fp)->_file, FIONREAD, &c), c <= 0)	\
+		(ioctl(((FILE *)fp)->_file, FIONREAD, &c), c <= 0)	\
 	)							\
 		return(FALSE);					\
 } while (0)
--- gcl-2.6.10.orig/h/NetBSD.h
+++ gcl-2.6.10/h/NetBSD.h
@@ -55,7 +55,7 @@
 #undef LISTEN_FOR_INPUT		/* default in bsd.h is loser in 386bsd */
 
 #define LISTEN_FOR_INPUT(fp) \
-  if((fp)->_r <=0 && (c=0,ioctl((fp)->_file, FIONREAD, &c),c<=0)) \
+  if(((FILE *)fp)->_r <=0 && (c=0,ioctl(((FILE *)fp)->_file, FIONREAD, &c),c<=0)) \
   return 0;
 
 /* end listen for input */
--- gcl-2.6.10.orig/h/OpenBSD.h
+++ gcl-2.6.10/h/OpenBSD.h
@@ -25,7 +25,7 @@
 
 #undef LISTEN_FOR_INPUT
 #define LISTEN_FOR_INPUT(fp) \
-  if ((fp)->_r <=0 && (c=0, ioctl((fp)->_file, FIONREAD, &c), c<=0)) \
+  if (((FILE *)fp)->_r <=0 && (c=0, ioctl(((FILE *)fp)->_file, FIONREAD, &c), c<=0)) \
 	return(FALSE)
 
 #ifdef IN_GBC
--- gcl-2.6.10.orig/h/att.h
+++ gcl-2.6.10/h/att.h
@@ -87,7 +87,7 @@
 
   /* if there is no input there return false */
 #define LISTEN_FOR_INPUT(fp) \
-  if((fp)->_cnt <=0 && (c=0,ioctl((fp)->_file, FIONREAD, &c),c<=0)) \
+   if(((FILE *)fp)->_cnt <=0 && (c=0,ioctl(((FILE *)fp)->_file, FIONREAD, &c),c<=0)) \
      return 0
 
  /* have sys/ioctl.h */
--- gcl-2.6.10.orig/h/bsd.h
+++ gcl-2.6.10/h/bsd.h
@@ -92,7 +92,7 @@ do {char *x=sbrk(0); \
 
   /* if there is no input there return false */
 #define LISTEN_FOR_INPUT(fp) \
-  if((fp)->_cnt <=0 && (c=0,ioctl((fp)->_file, FIONREAD, &c),c<=0)) \
+  if(((FILE *)fp)->_cnt <=0 && (c=0,ioctl(((FILE *)fp)->_file, FIONREAD, &c),c<=0)) \
      return 0
 
  /* have sys/ioctl.h */
--- gcl-2.6.10.orig/h/cmpincl1.h
+++ gcl-2.6.10/h/cmpincl1.h
@@ -1,2 +1,2 @@
-
 #define EXTER extern
+#define CMPINCLUDE
--- gcl-2.6.10.orig/h/cmponly.h
+++ gcl-2.6.10/h/cmponly.h
@@ -1,55 +1,41 @@
+#define CMPcar(x)	(x)->c.c_car
+#define CMPcdr(x)	(x)->c.c_cdr
+#define CMPcaar(x)	(x)->c.c_car->c.c_car
+#define CMPcadr(x)	(x)->c.c_cdr->c.c_car
+#define CMPcdar(x)	(x)->c.c_car->c.c_cdr
+#define CMPcddr(x)	(x)->c.c_cdr->c.c_cdr
+#define CMPcaaar(x)	(x)->c.c_car->c.c_car->c.c_car
+#define CMPcaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car
+#define CMPcadar(x)	(x)->c.c_car->c.c_cdr->c.c_car
+#define CMPcaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car
+#define CMPcdaar(x)	(x)->c.c_car->c.c_car->c.c_cdr
+#define CMPcdadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr
+#define CMPcddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr
+#define CMPcdddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr
+#define CMPcaaaar(x)	(x)->c.c_car->c.c_car->c.c_car->c.c_car
+#define CMPcaaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car->c.c_car
+#define CMPcaadar(x)	(x)->c.c_car->c.c_cdr->c.c_car->c.c_car
+#define CMPcaaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car->c.c_car
+#define CMPcadaar(x)	(x)->c.c_car->c.c_car->c.c_cdr->c.c_car
+#define CMPcadadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr->c.c_car
+#define CMPcaddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr->c.c_car
+#define CMPcadddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_car
+#define CMPcdaaar(x)	(x)->c.c_car->c.c_car->c.c_car->c.c_cdr
+#define CMPcdaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car->c.c_cdr
+#define CMPcdadar(x)	(x)->c.c_car->c.c_cdr->c.c_car->c.c_cdr
+#define CMPcdaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car->c.c_cdr
+#define CMPcddaar(x)	(x)->c.c_car->c.c_car->c.c_cdr->c.c_cdr
+#define CMPcddadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr->c.c_cdr
+#define CMPcdddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr->c.c_cdr
+#define CMPcddddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_cdr
 #define EQ(x,y) ((x)==(y))
-
 #define	CMPmake_fixnum(x) make_fixnum(x)
-
-object make_integer();
-  /* copy x to y, increasing space by factor of 2  */
-
-#ifndef GMP
-GEN otoi();
-/*
-object integ_temp;
-#define otoi(x) (integ_temp = (x) , (type_of(integ_temp) == t_bignum \
-   ? MP(integ_temp) :stoi(fix(integ_temp))))
-*/
-#define ISETQ_FIX(a,b,c) isetq_fix(a,c)
-void isetq_fix();
-#ifdef HAVE_ALLOCA
-#define SETQ_II(var,alloc,val) \
-  do{GEN _xx =(val) ; \
-  int _n = replace_copy1(_xx,var); \
-  if(_n) var = replace_copy2(_xx,alloca(_n));}while(0)
-
-#define SETQ_IO(var,alloc,val) {object _xx =(val) ; \
-			      int _n = obj_replace_copy1(_xx,var); \
-			    if(_n) var = obj_replace_copy2(_xx,alloca(_n));}
-#define IDECL(a,b,c) our_ulong b[4];a =(b[0]=0x1010000 +4,b) ; object c
-#else
-GEN setq_io(),setq_ii();
-#define SETQ_IO(x,alloc,val)   (x)=setq_io(x,&alloc,val)
-#define SETQ_II(x,alloc,val)   (x)=setq_ii(x,&alloc,val)
-#define IDECL(a,b,c) our_ulong b[4];a =(b[0]=0x1010000 +4,b);object c
-#endif
-
-#else
-
-typedef MP_INT * GEN;
-
-int obj_to_mpz(object,MP_INT *);
-int obj_to_mpz1(object,MP_INT *,void *);
-int mpz_to_mpz(MP_INT *,MP_INT *);
-int mpz_to_mpz1(MP_INT *,MP_INT *,void *);
-void isetq_fix(MP_INT *,int);
-MP_INT * otoi(object x);
-
-#ifndef HAVE_ALLOCA
-#error Need alloca for GMP
-#endif
-
-/* Add fourth argument af to the SETQ macros to allow for malloc allocation */
-/* inside setjmp frames, and faster alloca allocation otherwise.*/
-/* FIXME, verify that IDECL need not be changed, improve logic behind malloc */
-/* selection, e.g. closure boundaries.  CM 20031201*/
+#define ALLOCA_CONS(n) (alloca_val=alloca((n)*sizeof(struct cons))) 
+#define ON_STACK_CONS(x,y) (alloca_val=alloca(sizeof(struct cons)), on_stack_cons(x,y)) 
+#define ON_STACK_LIST on_stack_list
+#define ON_STACK_LIST_VECTOR_NEW on_stack_list_vector_new
+#define ON_STACK_MAKE_LIST on_stack_make_list
+#define KEYTYPE void *
 #define IDECL(a,b,c) mp_limb_t *c=(mp_limb_t *)alloca(1*sizeof(mp_limb_t));MP_INT b={1,1,c}; a = &b 
 #define SETQ_IO(var,alloc,val,af) { object _xx = (val); \
                                     int _n; \
@@ -61,16 +47,6 @@ MP_INT * otoi(object x);
                                       mpz_to_mpz1(_xx,(var),af(_n));}}
 #define ISETQ_FIX(a,b,c) isetq_fix(a,c)
 
-
-/*  #define IDECL(a,b,c) MP_INT b; a = (mpz_init(&b),&b) ; object c */
-/*  #define SETQ_IO(var,alloc,val) { object _xx = (val); \ */
-/*                                   obj_to_mpz(_xx,(var));} */
-/*  #define SETQ_II(var,alloc,val) { MP_INT * _xx = (val); \ */
-/*                                   mpz_to_mpz(_xx,(var));} */
-/*  #define ISETQ_FIX(a,b,c) isetq_fix(a,c) */
-
-
-#endif /* end no GMP */
-
-#define	cclosure_call	funcall
-
+#define save_avma 
+#define restore_avma 
+#define stp_ordinary 0 /*FIXME maxima*/
--- gcl-2.6.10.orig/h/compbas.h
+++ gcl-2.6.10/h/compbas.h
@@ -2,22 +2,3 @@
 #define _VA_LIST_DEFINED
 
 #include <setjmp.h>
-#include <stdio.h>
-
-/*  #define	endp(obje)	endp1(obje) */
-			   
-#define STSET(type,x,i,val)  do{SGC_TOUCH(x);STREF(type,x,i) = (val);} while(0)
-
-#ifndef HAVE_MATH_H
-#error Need math.h
-#endif
-#include <math.h>
-
-#ifndef HAVE_COMPLEX_H
-#error Need complex.h
-#endif
-#include <complex.h>
-
-#ifdef HAVE_ALLOCA_H /*FIXME check if this is truly optional*/
-#include <alloca.h>
-#endif
--- gcl-2.6.10.orig/h/compbas2.h
+++ gcl-2.6.10/h/compbas2.h
@@ -1,195 +0,0 @@
-/* if already mp.h has been included skip */
-#ifdef GMP
-#define save_avma 
-#define restore_avma 
-#endif
-
-#ifdef _MP_H
-#ifdef GMP
-
-#else /* no gmp */
-
-typedef  plong *GEN1;
-/* if genpari.h not loaded */
-#ifndef MAXBLOC
-typedef  plong *GEN;
-GEN1 addii(),mulii(),mulsi(),powerii(),shifti(),stoi(),dvmdii(),subii();
-int cmpii();
-plong itos();
-#define signe(x)          (((GEN1)(x))[1]>>24)
-#define lg(x)             (((GEN1)(x))[0]&0xffff)
-#define setlg(x,s)        (((GEN1)(x))[0]=(((GEN1)(x))[0]&0xffff0000)+s)
-#define lgef(x)           (((GEN1)(x))[1]&0xffff)
-#define setlgef(x,s)      (((GEN1)(x))[1]=(((GEN1)(x))[1]&0xffff0000)+s)
-
-#define our_ulong unsigned plong
-#endif /* end MAXBLOC */
-
-
-EXTER int in_saved_avma ;
-EXTER unsigned plong avma;
-EXTER GEN1 gzero;
-EXTER GEN1 icopy_x;
-/* #define DEBUG_AVMA */
-
-#ifdef DEBUG_AVMA
-#define save_avma long lvma = (in_saved_avma = 1, avma)
-#define restore_avma avma = (in_saved_avma = 0, lvma)
-#else
-#define save_avma long lvma = avma
-#define restore_avma avma = lvma
-#endif
-
-#endif /* NO GMP */
-#endif /*  _MP_H */
-
-  /* copy x to y, increasing space by factor of 2  */
-object make_integer();
-
-#define Mcar(x)	(x)->c.c_car
-#define Mcdr(x)	(x)->c.c_cdr
-#define Mcaar(x)	(x)->c.c_car->c.c_car
-#define Mcadr(x)	(x)->c.c_cdr->c.c_car
-#define Mcdar(x)	(x)->c.c_car->c.c_cdr
-#define Mcddr(x)	(x)->c.c_cdr->c.c_cdr
-#define Mcaaar(x)	(x)->c.c_car->c.c_car->c.c_car
-#define Mcaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car
-#define Mcadar(x)	(x)->c.c_car->c.c_cdr->c.c_car
-#define Mcaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car
-#define Mcdaar(x)	(x)->c.c_car->c.c_car->c.c_cdr
-#define Mcdadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr
-#define Mcddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr
-#define Mcdddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr
-#define Mcaaaar(x)	(x)->c.c_car->c.c_car->c.c_car->c.c_car
-#define Mcaaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car->c.c_car
-#define Mcaadar(x)	(x)->c.c_car->c.c_cdr->c.c_car->c.c_car
-#define Mcaaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car->c.c_car
-#define Mcadaar(x)	(x)->c.c_car->c.c_car->c.c_cdr->c.c_car
-#define Mcadadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr->c.c_car
-#define Mcaddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr->c.c_car
-#define Mcadddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_car
-#define Mcdaaar(x)	(x)->c.c_car->c.c_car->c.c_car->c.c_cdr
-#define Mcdaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car->c.c_cdr
-#define Mcdadar(x)	(x)->c.c_car->c.c_cdr->c.c_car->c.c_cdr
-#define Mcdaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car->c.c_cdr
-#define Mcddaar(x)	(x)->c.c_car->c.c_car->c.c_cdr->c.c_cdr
-#define Mcddadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr->c.c_cdr
-#define Mcdddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr->c.c_cdr
-#define Mcddddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_cdr
-
-/* for cmp */
-
-#define CMPcar(x)	(x)->c.c_car
-#define CMPcdr(x)	(x)->c.c_cdr
-#define CMPcaar(x)	(x)->c.c_car->c.c_car
-#define CMPcadr(x)	(x)->c.c_cdr->c.c_car
-#define CMPcdar(x)	(x)->c.c_car->c.c_cdr
-#define CMPcddr(x)	(x)->c.c_cdr->c.c_cdr
-#define CMPcaaar(x)	(x)->c.c_car->c.c_car->c.c_car
-#define CMPcaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car
-#define CMPcadar(x)	(x)->c.c_car->c.c_cdr->c.c_car
-#define CMPcaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car
-#define CMPcdaar(x)	(x)->c.c_car->c.c_car->c.c_cdr
-#define CMPcdadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr
-#define CMPcddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr
-#define CMPcdddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr
-#define CMPcaaaar(x)	(x)->c.c_car->c.c_car->c.c_car->c.c_car
-#define CMPcaaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car->c.c_car
-#define CMPcaadar(x)	(x)->c.c_car->c.c_cdr->c.c_car->c.c_car
-#define CMPcaaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car->c.c_car
-#define CMPcadaar(x)	(x)->c.c_car->c.c_car->c.c_cdr->c.c_car
-#define CMPcadadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr->c.c_car
-#define CMPcaddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr->c.c_car
-#define CMPcadddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_car
-#define CMPcdaaar(x)	(x)->c.c_car->c.c_car->c.c_car->c.c_cdr
-#define CMPcdaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car->c.c_cdr
-#define CMPcdadar(x)	(x)->c.c_car->c.c_cdr->c.c_car->c.c_cdr
-#define CMPcdaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car->c.c_cdr
-#define CMPcddaar(x)	(x)->c.c_car->c.c_car->c.c_cdr->c.c_cdr
-#define CMPcddadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr->c.c_cdr
-#define CMPcdddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr->c.c_cdr
-#define CMPcddddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_cdr
-#define CMPfuncall	funcall
-#define Creturn(v) return((vs_top=vs,(v)))
-/* end for cmp*/
-
-/* 2^6 is the limit on the number of args */
-#define F_NARG_WIDTH 6
-#define F_START_TYPES_POS   (2* F_NARG_WIDTH + F_end )
-enum F_arg_flags
-{ F_requires_nargs, /* if set, then caller must store VFUN_NARGS with number
-		       of args passed.   F_ARGD is used to set up the argd,
-		       and it sets this if minargs < maxargs.   */
-  F_caller_sets_one_val, /* If set, then the CALLER will look after setting the
-		       fcall.nvalues to 1, if necessary (eg the call is at the
-		       end of a function, or if multiple-values-list invokes
-		       the function.)  If foo is proclaimed to return exactly
-		       one value, then the CALLER might set this flag in the
-		       link argd, or it might do it in the case we have (setq
-		       x (foo)) or (values (foo)).   
-		      
-		       If this flag is not set, then the CALLED function is
-		       responsible for setting the number of values in
-		       fcall.nvalues, and also for always returning as C value
-		       Cnil, in the case that it sets fcall.nvalues == 0.  */
-  F_requires_fun_passed, /* if set, the caller must set VFUN_FUN to the
-			    calling function.  This is used by closures, but
-			    could be used by other things i suppose. */
-  F_end               /* 1 bigger than the largest flag */
-  };
-enum F_arg_types
-{ F_object,
-  F_int,  
-  F_double_ptr,
-  F_shortfloat  
-  };
-
-/* Make a mask for bits i < j, masking j-i bits */
-#define MASK_RANGE(i,j)  ((~(~0 << (j-i)))<< i)
-
-#define F_PLAIN(x) (((x) & MASK_RANGE( F_START_TYPES_POS,31)) == 0)
-#define ARG_LIMIT 63
-
-EXTER object MVloc[10];
-
-#define TYPEP(x,t) (type_of(x) == (t))
-
-
-#ifdef HAVE_ALLOCA
-/* #ifndef alloca */
-/* char *alloca(); */
-/* #endif */
-#include <stdlib.h>
-EXTER char *alloca_val;
-#define OUR_ALLOCA(n) alloca(n)
-#define ALLOCA_FREE(n) 
-
-#define ALLOCA_CONS(n) (alloca_val=alloca((n)*sizeof(struct cons))) 
-#define ON_STACK_CONS(x,y) (alloca_val=alloca(sizeof(struct cons)), on_stack_cons(x,y)) 
-#define ON_STACK_LIST on_stack_list
-#define ON_STACK_LIST_VECTOR on_stack_list_vector
-#define ON_STACK_LIST_VECTOR_NEW on_stack_list_vector_new
-#define ON_STACK_MAKE_LIST on_stack_make_list
-object on_stack_cons();
-object on_stack_list(int,...);
-/* object on_stack_list_vector(int,va_list); */
-object on_stack_list_vector_new(int,object,va_list);
-object on_stack_make_list();
-#else /* no HAVE_ALLOCA */
-#define OUR_ALLOCA(n) malloc(n)
-#define ALLOCA_FREE(n) free(n)
-#define ALLOCA_CONS(n) 0
-#define ON_STACK_CONS(x,y) MMcons(x,y)
-#define ON_STACK_LIST list
-#define ON_STACK_LIST_VECTOR list_vector
-#define ON_STACK_MAKE_LIST make_list
-#endif
-#ifndef KEYTYPE
-#define KEYTYPE void *
-#endif
-
-
-#define gethash_with_check(a_,b_) \
-  ({object _b=(b_);while (type_of(_b)!=t_hashtable) _b=wrong_type_argument(sLhash_table,_b);gethash(a_,_b);})
-#define sethash_with_check(a_,b_,c_) \
-  ({object _b=(b_);while (type_of(_b)!=t_hashtable) _b=wrong_type_argument(sLhash_table,_b);sethash(a_,_b,c_);})
--- /dev/null
+++ gcl-2.6.10/h/compdefs.h
@@ -0,0 +1,119 @@
+char_code(x)
+code_char(x)
+endp(x)
+eql(x,y)
+equal(x,y)
+equalp(x,y)
+fix(x)
+lf(x)
+make_fixnum(x)
+CMPmake_fixnum(x)
+small_fixnum(x)
+type_of(x)
+STREF(a,b,c)
+STSET(a,b,c,val)
+immnum_bool(a,b,c)
+immnum_ior(x,y)
+immnum_and(x,y)
+immnum_xor(x,y)
+immnum_not(x)
+immnum_nand(x,y)
+immnum_nor(x,y)
+immnum_eqv(x,y)
+immnum_andc1(x,y)
+immnum_andc2(x,y)
+immnum_orc1(x,y)
+immnum_orc2(x,y)
+listp(x)
+sf(x)
+atom(x)
+consp(x)
+OBJNULL
+Cnil
+Ct
+bds_check
+bds_unwind1
+bds_bind(a,b)
+va_arg(a,b)
+va_start(a,b)
+va_end(a)
+ON_STACK_CONS(x,y)
+frs_pop()
+frs_push(a,b)
+vs_push(x)
+vs_reserve(x)
+vs_head
+vs_pop
+vs_check
+ihs_check
+alloc_frame_id()
+complex
+I
+NOT_SPECIAL
+VOL
+compiled_functionp(x)
+mpz_even_p(x)
+mpz_odd_p(x)
+mpz_sgn(x)
+NULL
+FALSE
+TRUE
+is_imm_fixnum(x)
+aref1
+VFUN_NARGS
+KEYTYPE
+S_DATA(x)
+MMcons(x,y)
+MMcar(x)
+MMcdr(x)
+fcalln
+CMPcar(x)   
+CMPcdr(x)   
+CMPcaar(x)
+CMPcadr(x)
+CMPcdar(x)  
+CMPcddr(x)  
+CMPcaaar(x) 
+CMPcaadr(x) 
+CMPcadar(x) 
+CMPcaddr(x) 
+CMPcdaar(x) 
+CMPcdadr(x) 
+CMPcddar(x) 
+CMPcdddr(x) 
+CMPcaaaar(x)
+CMPcaaadr(x)
+CMPcaadar(x)
+CMPcaaddr(x)
+CMPcadaar(x)
+CMPcadadr(x)
+CMPcaddar(x)
+CMPcadddr(x)
+CMPcdaaar(x)
+CMPcdaadr(x)
+CMPcdadar(x)
+CMPcdaddr(x)
+CMPcddaar(x)
+CMPcddadr(x)
+CMPcdddar(x)
+CMPcddddr(x)
+ALLOCA_CONS(x)
+check_arg(x)
+endp_prop(x)
+fix_imm_fixnum(x)
+make_imm_fixnum(x)
+gethash_with_check(x,y)
+sethash_with_check(x,y,z)
+ON_STACK_LIST_VECTOR_NEW
+ON_STACK_MAKE_LIST
+SAFE_CDR(x)
+Scons
+EQ(x,y)
+IDECL(x,y,z)
+SETQ_IO(x,y,z,w)
+SETQ_II(x,y,z,w)
+ISETQ_FIX(x,y,z)
+aset
+save_avma
+restore_avma
+stp_ordinary
--- /dev/null
+++ gcl-2.6.10/h/compprotos.h
@@ -0,0 +1,181 @@
+bool eql1(object,object);
+bool equal1(object,object);
+bool equalp1(object,object);
+bool file_exists(object);
+bool integer_bitp(object,object);
+double big_to_double(object);
+frame_ptr frs_sch_catch(object);
+frame_ptr frs_sch(object);
+int length(object);
+int number_compare(object,object);
+int number_evenp(object);
+int number_minusp(object);
+int number_oddp(object);
+int number_plusp(object);
+int number_zerop(object);
+long int fixint(object);
+object alloc_object(enum type);
+object call_proc_new(object,void **,int,object,va_list);
+object coerce_to_string();
+object elt(object,int);
+object fixnum_big_shift(fixnum,fixnum);
+object fixnum_times(fixnum,fixnum);
+object fSsputprop(object,object,object);
+object get(object,object,object);
+object get_gcd(object,object);
+object get_lcm(object,object);
+object integer_count(object);
+object integer_length(object);
+object integer_shift(object,object);
+object listA(int,...);
+object list(int,...);
+object log_op2(fixnum,object,object);
+object make_cons(object,object);
+object make_fixnum1(long);
+object make_list(int);
+object make_longfloat(longfloat);
+object make_shortfloat(double);
+object make_simple_string(const char *);
+object number_abs(object);
+object number_divide(object, object);
+object number_dpb(object,object,object);
+object number_dpf(object,object,object);
+object number_ldb(object,object);
+object number_ldbt(object,object);
+object number_minus(object,object);
+object number_negate(object);
+object number_plus(object,object);
+object number_signum(object);
+object number_times(object,object);
+object princ(object,object);
+object read_char1(object,object);
+object structure_ref(object,object,fixnum);
+object structure_set(object,object,fixnum,object);
+object symbol_function(object);
+object symbol_name(object);
+object symbol_value(object);
+object terpri(object);
+object vs_overflow(void);
+void bds_overflow(void);
+void bds_unwind(bds_ptr);
+void do_init(object *);
+void frs_overflow(void);
+void intdivrem(object,object,fixnum,object *,object *);
+void princ_char(int,object);
+void princ_str(char *,object);
+void princ_str(char *,object);
+void sethash(object,object,object);
+void setq(object,object);
+void super_funcall_no_event(object);
+void unwind(frame_ptr,object);
+int object_to_int(object);
+fixnum object_to_fixnum(object);
+char object_to_char(object);
+void not_a_symbol(object);
+object number_expt(object,object);
+object fLrow_major_aref(object,fixnum);
+void * alloca(unsigned long);
+object car(object);
+object cdr(object);
+object caar(object);
+object cadr(object);
+object cdar(object);
+object cddr(object);
+object caaar(object);
+object caadr(object);
+object cadar(object);
+object caddr(object);
+object cdaar(object);
+object cdadr(object);
+object cddar(object);
+object cdddr(object);
+object caaaar(object);
+object caaadr(object);
+object caadar(object);
+object caaddr(object);
+object cadaar(object);
+object cadadr(object);
+object caddar(object);
+object cadddr(object);
+object cdaaar(object);
+object cdaadr(object);
+object cdadar(object);
+object cdaddr(object);
+object cddaar(object);
+object cddadr(object);
+object cdddar(object);
+object cddddr(object);
+object fcalln1(object,...);
+object append(object,object);
+object aset1(object,fixnum,object);
+void call_or_link(object,void **);
+object call_proc0(object,void *);
+object call_vproc_new(object,void *,object,va_list);
+void check_arg_failed (int);
+void check_other_key (object,int, ...);
+object elt_set(object,int,object);
+void FEerror(char *,int,...);
+void FEwrong_type_argument(object,object);
+void funcall(object);
+object getf(object,object,object);
+struct htent * gethash(object,object);
+void invalid_macro_call(void);
+long labs(long);
+object list_vector_new(int,object,va_list);
+object make_cclosure_new(void (*)(),object,object,object);
+object nconc(object,object);
+object nreverse(object);
+object one_plus(object);
+object one_minus(object);
+void parse_key(object *,bool,bool,int,...); 
+int parse_key_new_new();/* (int,object *,void *,object,va_list); */
+int parse_key_rest_new(); /* (object,int,object *,void *,object,va_list); */
+object prin1(object,object);
+object print(object,object);
+object putprop(object,object,object);
+object remprop(object,object);
+object reverse(object);
+object simple_symlispcall(object,object *,int);
+object sputprop(object,object,object);
+void symlispcall(object,object *,int);
+void too_few_arguments(void);
+void too_many_arguments(void);
+object wrong_type_argument(object,object);
+bool oeql(object,object);
+void call_or_link_closure(object,void **,void **);
+void check_alist(object);
+void lispcall(object *,int);
+object make_cclosure(void (*)(),object,object,object,char *,int);
+object simple_lispcall(object *,int);
+object sublis1(object,object,bool(*)());
+void turbo_closure(object);
+char * object_to_string(object);
+object on_stack_cons(object,object);
+object on_stack_list(int,...);
+object on_stack_list_vector_new(int,object,va_list);
+object on_stack_make_list(int);
+int obj_to_mpz(object,MP_INT *);
+int obj_to_mpz1(object,MP_INT *,void *);
+int mpz_to_mpz(MP_INT *,MP_INT *);
+int mpz_to_mpz1(MP_INT *,MP_INT *,void *);
+void isetq_fix(MP_INT *,int);
+MP_INT * otoi(object);
+object read_byte1(object,object);
+int not_a_variable(object);
+object make_integer(MP_INT *);
+object cmod(object);
+object ctimes(object,object);
+object cdifference(object,object);
+object cplus(object,object);
+void funcall_with_catcher(object,object);
+void check_type_symbol(object *);
+void ck_larg_exactly(int, object);
+double cos(double);
+double sin(double);
+double sqrt(double);
+double tan(double);
+#ifdef CMPINCLUDE
+int feof(void *);
+int getc(void *);
+int putc(int,void *);
+#endif
--- gcl-2.6.10.orig/h/enum.h
+++ gcl-2.6.10/h/enum.h
@@ -2,44 +2,6 @@
 #define t_doublefloat t_longfloat
 #endif
 
-enum type {
-  t_cons,
-  t_start = 0,
-  t_fixnum,
-  t_bignum,
-  t_ratio,
-  t_shortfloat,
-  t_doublefloat,
-  t_complex,
-  t_character,
-  t_symbol,
-  t_package,
-  t_hashtable,
-  t_array,
-  t_vector,
-  t_string,
-  t_bitvector,
-  t_structure,
-  t_stream,
-  t_random,
-  t_readtable,
-  t_pathname,
-  t_cfun,
-  t_cclosure,
-  t_sfun,
-  t_gfun,
-  t_vfun,
-  t_afun,
-  t_closure,
-  t_cfdata,
-  t_spice,
-  t_contiguous,
-  t_end=t_contiguous,
-  t_relocatable,
-  t_other
-};
-
-
 enum signals_allowed_values {
   sig_none,
   sig_normal,
--- /dev/null
+++ gcl-2.6.10/h/fixnum.h
@@ -0,0 +1,43 @@
+#if defined (LOW_SHFT)
+
+#define LOW_IM_FIX (1L<<(LOW_SHFT-1))
+#define INT_IN_BITS(a_,b_) ({fixnum _a=(fixnum)(a_);_a>>(b_)==_a>>(CHAR_SIZE*SIZEOF_LONG-1);})
+
+#define      make_imm_fixnum(a_)        ((object)a_)
+#define       fix_imm_fixnum(a_)        ((fixnum)a_)
+#define      mark_imm_fixnum(a_)        ((a_)=((object)((fixnum)(a_)+(LOW_IM_FIX<<1))))
+#define    unmark_imm_fixnum(a_)        ((a_)=((object)((fixnum)(a_)-(LOW_IM_FIX<<1))))
+#define        is_imm_fixnum(a_)        ((fixnum)(a_)<(fixnum)OBJNULL)
+#define is_unmrkd_imm_fixnum(a_)        ((fixnum)(a_)<LOW_IM_FIX)
+#define is_marked_imm_fixnum(a_)        (is_imm_fixnum(a_)*!is_unmrkd_imm_fixnum(a_))
+#define           is_imm_fix(a_)        INT_IN_BITS(a_,LOW_SHFT-1)
+#elif defined (IM_FIX_BASE) && defined(IM_FIX_LIM)
+#define      make_imm_fixnum(a_)        ((object)((a_)+(IM_FIX_BASE+(IM_FIX_LIM>>1))))
+#define       fix_imm_fixnum(a_)        (((fixnum)(a_))-(IM_FIX_BASE+(IM_FIX_LIM>>1)))
+#define      mark_imm_fixnum(a_)        ((a_)=((object)(((fixnum)(a_)) | IM_FIX_LIM)))
+#define    unmark_imm_fixnum(a_)        ((a_)=((object)(((fixnum)(a_)) &~ IM_FIX_LIM)))
+#define        is_imm_fixnum(a_)        (((ufixnum)(a_))>=IM_FIX_BASE)
+#define is_unmrkd_imm_fixnum(a_)        (is_imm_fixnum(a_)&&!is_marked_imm_fixnum(a_))
+#define is_marked_imm_fixnum(a_)        (((fixnum)(a_))&IM_FIX_LIM)
+#define           is_imm_fix(a_)        (!(((a_)+(IM_FIX_LIM>>1))&-IM_FIX_LIM))
+/* #define        un_imm_fixnum(a_)        ((a_)=((object)(((fixnum)(a_))&~(IM_FIX_BASE)))) */
+#else
+#define      make_imm_fixnum(a_)        make_fixnum1(a_)
+#define       fix_imm_fixnum(a_)        ((a_)->FIX.FIXVAL)
+#define      mark_imm_fixnum(a_)        
+#define    unmark_imm_fixnum(a_)        
+#define        is_imm_fixnum(a_)        0
+#define is_unmrkd_imm_fixnum(a_)        0
+#define is_marked_imm_fixnum(a_)        0
+#define           is_imm_fix(a_)        0
+/* #define        un_imm_fixnum(a_)         */
+#endif
+
+#define make_fixnum(a_)  ({register fixnum _q1=(a_);register object _q4; \
+      _q4=is_imm_fix(_q1) ? make_imm_fixnum(_q1) : make_fixnum1(_q1);_q4;})
+#define fix(a_)          ({register object _q2=(a_);register fixnum _q3;		\
+      _q3=is_imm_fixnum(_q2) ? fix_imm_fixnum(_q2) :  (_q2)->FIX.FIXVAL;_q3;})
+#define Mfix(a_)         fix(a_)
+#define small_fixnum(a_) make_fixnum(a_) /*make_imm_fixnum(a_)*/
+#define set_fix(a_,b_)   ((a_)->FIX.FIXVAL=(b_))
+
--- gcl-2.6.10.orig/h/funlink.h
+++ gcl-2.6.10/h/funlink.h
@@ -1,3 +1,5 @@
+#ifndef FUNLINK_H
+#define FUNLINK_H
 
 /* the link_desc, is an INT which carries the call information
    for all uses of that link.   It tells whether fcall.nargs is
@@ -20,6 +22,43 @@ A link arg descriptor:
     ai = i'th arg type in F_arg_types
 */
 
+/* 2^6 is the limit on the number of args */
+#define F_NARG_WIDTH 6
+#define F_START_TYPES_POS   (2* F_NARG_WIDTH + F_end )
+enum F_arg_flags
+{ F_requires_nargs, /* if set, then caller must store VFUN_NARGS with number
+		       of args passed.   F_ARGD is used to set up the argd,
+		       and it sets this if minargs < maxargs.   */
+  F_caller_sets_one_val, /* If set, then the CALLER will look after setting the
+		       fcall.nvalues to 1, if necessary (eg the call is at the
+		       end of a function, or if multiple-values-list invokes
+		       the function.)  If foo is proclaimed to return exactly
+		       one value, then the CALLER might set this flag in the
+		       link argd, or it might do it in the case we have (setq
+		       x (foo)) or (values (foo)).   
+		      
+		       If this flag is not set, then the CALLED function is
+		       responsible for setting the number of values in
+		       fcall.nvalues, and also for always returning as C value
+		       Cnil, in the case that it sets fcall.nvalues == 0.  */
+  F_requires_fun_passed, /* if set, the caller must set VFUN_FUN to the
+			    calling function.  This is used by closures, but
+			    could be used by other things i suppose. */
+  F_end               /* 1 bigger than the largest flag */
+  };
+enum F_arg_types
+{ F_object,
+  F_int,  
+  F_double_ptr,
+  F_shortfloat  
+  };
+
+/* Make a mask for bits i < j, masking j-i bits */
+#define MASK_RANGE(i,j)  ((~(~0 << (j-i)))<< i)
+
+#define F_PLAIN(x) (((x) & MASK_RANGE( F_START_TYPES_POS,31)) == 0)
+#define ARG_LIMIT 63
+
 /* We allow 2 bits for encoding arg types and return type */
 #define F_TYPE_WIDTH 2
 #define F_MIN_ARGS(x) (x & MASK_RANGE(0,F_NARG_WIDTH))
@@ -78,3 +117,4 @@ A link arg descriptor:
 
 #define FUNCALL(n,form) (VFUN_NARGS=n,form)
  
+#endif
--- gcl-2.6.10.orig/h/gclincl.h.in
+++ gcl-2.6.10/h/gclincl.h.in
@@ -159,6 +159,9 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
+/* Define to 1 if you have the `mprotect' function. */
+#undef HAVE_MPROTECT
+
 /* can use nsocket library */
 #undef HAVE_NSOCKET
 
@@ -213,6 +216,9 @@
 /* Define to 1 if you have the <sys/ioctl.h> header file. */
 #undef HAVE_SYS_IOCTL_H
 
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
 /* Define to 1 if you have the <sys/sockio.h> header file. */
 #undef HAVE_SYS_SOCKIO_H
 
@@ -321,9 +327,6 @@
 /* system pagewidth */
 #undef PAGEWIDTH
 
-/* instruction disassemble routine */
-#undef PRINT_INSN
-
 /* have sigcontext in signal.h */
 #undef SIGNAL_H_HAS_SIGCONTEXT
 
--- /dev/null
+++ gcl-2.6.10/h/globals.h
@@ -0,0 +1,24 @@
+EXTER union lispunion Cnil_body OBJ_ALIGN;
+EXTER union lispunion Ct_body OBJ_ALIGN;
+
+struct call_data { 
+  object fun;
+  int argd;
+  int nvalues;
+  object values[50];
+  double double_return;
+};
+EXTER struct call_data fcall;
+
+EXTER union lispunion character_table1[256+128] OBJ_ALIGN;
+
+EXTER object Cstd_key_defaults[15];   
+EXTER char *alloca_val;
+EXTER object keyword_package;
+
+EXTER object sLlist;
+EXTER object sLcons;
+EXTER object sLhash_table;
+
+EXTER object MVloc[10];
+
--- gcl-2.6.10.orig/h/gnuwin95.h
+++ gcl-2.6.10/h/gnuwin95.h
@@ -99,7 +99,7 @@ extern DBEGIN_TY _dbegin;
 #undef  LISTEN_FOR_INPUT
 #define LISTEN_FOR_INPUT(fp) do { \
   int c = 0; \
-  if (((fp)->_r <= 0) && (ioctl((fp)->_file, FIONREAD, &c), c<=0)) \
+  if ((((FILE *)fp)->_r <= 0) && (ioctl(((FILE *)fp)->_file, FIONREAD, &c), c<=0)) \
     return 0; \
 } while (0)
 
--- gcl-2.6.10.orig/h/include.h
+++ gcl-2.6.10/h/include.h
@@ -97,9 +97,22 @@ Foundation, 675 Mass Ave, Cambridge, MA
 #include "../h/mp.h"
 #endif
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <complex.h>
+#ifdef HAVE_ALLOCA_H
+#include <alloca.h>
+#endif
+
+#include "../h/sfun_argd.h"
 #include "../h/compbas.h"
 #include "../h/enum.h"
-#include "../h/bits.h"
+#include "../h/pageinfo.h"
+#include "../h/lu.h"
+#include "../h/globals.h"
+#include "../h/fixnum.h"
+#include "../h/type.h"
 #include "../h/object.h"
 #include "../h/vs.h"
 #include "../h/bds.h"
@@ -108,6 +121,7 @@ Foundation, 675 Mass Ave, Cambridge, MA
 #include "../h/eval.h"
 
 #include "../h/protoize.h"
+#include "../h/compprotos.h"
 #include "../h/notcomp.h"
 #include "../h/funlink.h"
 #include "../h/att_ext.h"
--- gcl-2.6.10.orig/h/linux.h
+++ gcl-2.6.10/h/linux.h
@@ -103,8 +103,8 @@ do {static struct sigaction action; \
 #undef LISTEN_FOR_INPUT
 #define LISTEN_FOR_INPUT(fp) \
 do { int c = 0; \
-  if(((fp)->_IO_read_ptr >= (fp)->_IO_read_end) \
-     && (ioctl((fp)->_fileno, FIONREAD, &c),c<=0)) \
+  if((((FILE *)fp)->_IO_read_ptr >= ((FILE *)fp)->_IO_read_end)	\
+     && (ioctl(((FILE *)fp)->_fileno, FIONREAD, &c),c<=0))	\
      return 0;} while (0)
 
 /* #define DATA_BEGIN((TXTRELOC+header.a_text+(SEGSIZ-1)) & ~(SEGSIZ-1)); */
--- /dev/null
+++ gcl-2.6.10/h/lu.h
@@ -0,0 +1,430 @@
+#include "pbits.h"
+
+#undef bool
+typedef int bool;
+
+typedef long long lfixnum;
+typedef unsigned long long ulfixnum;
+
+typedef long fixnum;
+typedef unsigned long ufixnum;
+
+typedef float shortfloat;
+typedef double longfloat;
+
+typedef union lispunion *object;
+
+#ifndef WORDS_BIGENDIAN
+
+#define FIRSTWORD ufixnum    e:1,m:1,f:1,s:1,tt:4,t:5,st:3,w:LM(16)
+#define FSTPWORD  ufixnum emfs:4,            tp:9,    st:3,w:LM(16)
+#define MARKWORD  ufixnum    e:1,   mf:2,s:1,tt:4,t:5,x:LM(13)
+#define SGCMWORD  ufixnum    e:1,mfs:3,      tt:4,t:5,x:LM(13)
+#define TYPEWORD  ufixnum  emf:3,        s:1,tt:4,t:5,x:LM(13)
+#define FUNWORD   ufixnum    e:1,m:1,f:1,s:1,tt:4,t:5,fun_minarg:6,fun_maxarg:6,fun_neval:5,fun_vv:1,y:LM(31)
+
+#else
+
+#define FIRSTWORD ufixnum w:LM(16),st:3,t:5,tt:4,s:1,f:1,m:1,e:1
+#define FSTPWORD  ufixnum w:LM(16),st:3,tp:9,             emfs:4
+#define MARKWORD  ufixnum x:LM(13),     t:5,tt:4,s:1,   mf:2,e:1
+#define SGCMWORD  ufixnum x:LM(13),     t:5,tt:4,      mfs:3,e:1
+#define TYPEWORD  ufixnum x:LM(13),     t:5,tt:4,s:1,      emf:3
+#define FUNWORD   ufixnum y:LM(31),fun_vv:1,fun_neval:5,fun_maxarg:6,fun_minarg:6,t:5,tt:4,s:1,f:1,m:1,e:1
+
+#endif
+
+#if SIZEOF_LONG < 8
+#define SPAD object pad
+#else
+#define SPAD
+#endif
+
+struct fixnum_struct {
+  FIRSTWORD;
+  fixnum FIXVAL;
+};
+
+struct shortfloat_struct {
+  FIRSTWORD;
+  shortfloat SFVAL;
+};
+
+struct longfloat_struct {
+  FIRSTWORD;
+  longfloat LFVAL;
+  SPAD;
+};
+
+struct bignum {
+  FIRSTWORD;
+#ifdef GMP
+  __mpz_struct big_mpz_t;
+#else
+  plong *big_self;
+  int big_length;
+#endif
+};
+
+struct ratio {
+  FIRSTWORD;
+  object rat_den;
+  object rat_num;
+  SPAD;
+
+};
+
+struct ocomplex {
+  FIRSTWORD;
+  object cmp_real;
+  object cmp_imag;
+  SPAD;
+};
+
+struct character {
+  FIRSTWORD;
+  unsigned short ch_code;
+  unsigned char ch_font;
+  unsigned char ch_bits;
+};
+
+
+struct symbol {
+  FIRSTWORD;
+  object s_dbind;
+  void (*s_sfdef) ();
+  char *s_self;
+  int s_fillp;
+  object s_gfdef;
+  object s_plist;
+  object s_hpack;
+  short s_stype;
+  short s_mflag;
+  SPAD;
+
+};
+
+struct package {
+  FIRSTWORD;
+  object p_name;
+  object p_nicknames;
+  object p_shadowings;
+  object p_uselist;
+  object p_usedbylist;
+  object *p_internal;
+  object *p_external;
+  int p_internal_size;
+  int p_external_size;
+  int p_internal_fp;
+  int p_external_fp;
+  struct package *p_link;
+  SPAD;
+};
+
+struct cons {
+#ifdef WIDE_CONS
+  FIRSTWORD;
+#endif
+  object c_cdr;
+  object c_car;
+};
+
+struct htent {
+  object hte_key;
+  object hte_value;
+};
+
+struct hashtable {
+  FIRSTWORD;
+  struct htent *ht_self;
+  object ht_rhsize;
+  object ht_rhthresh;
+  int ht_nent;
+  int ht_size;
+  short ht_test;
+  SPAD;
+
+};
+
+struct array {
+  FIRSTWORD;
+  object a_displaced;
+  short a_rank;
+  short a_elttype;
+  object *a_self;
+  short a_adjustable;
+  short a_offset;
+  int a_dim;
+  int *a_dims;
+  SPAD;
+
+};
+
+
+
+struct vector {
+  FIRSTWORD;
+  object v_displaced;
+  short v_hasfillp;
+  short v_elttype;
+  object *v_self;
+  int v_fillp;
+  int v_dim;
+  short v_adjustable;
+  short v_offset;
+  SPAD;
+};
+
+struct string {
+  FIRSTWORD;
+  object st_displaced;
+  short st_hasfillp;
+  short st_adjustable;
+  char *st_self;
+  int st_fillp;
+  int st_dim;
+};
+
+struct ustring {
+  FIRSTWORD;
+  object ust_displaced;
+  short ust_hasfillp;
+  short ust_adjustable;
+  unsigned char *ust_self;
+  int ust_fillp;
+  int ust_dim;
+};
+
+struct bitvector {
+  FIRSTWORD;
+  object bv_displaced;
+  short bv_hasfillp;
+  short bv_elttype;
+  char *bv_self;
+  int bv_fillp;
+  int bv_dim;
+  short bv_adjustable;
+  short bv_offset;
+  SPAD;
+};
+
+struct fixarray {
+  FIRSTWORD;
+  object fixa_displaced;
+  short fixa_rank;
+  short fixa_elttype;
+  fixnum *fixa_self;
+  short fixa_adjustable;
+  short fixa_offset;
+  int fixa_dim;
+  int *fixa_dims;
+  SPAD;
+};
+
+struct sfarray {
+  FIRSTWORD;
+  object sfa_displaced;
+  short sfa_rank;
+  short sfa_elttype;
+  shortfloat *sfa_self;
+  short sfa_adjustable;
+  short sfa_offset;
+  int sfa_dim;
+  int *sfa_dims;
+  SPAD;
+};
+
+struct lfarray {
+  FIRSTWORD;
+  object lfa_displaced;
+  short lfa_rank;
+  short lfa_elttype;
+  longfloat *lfa_self;
+  short lfa_adjustable;
+  short lfa_offset;
+  int lfa_dim;
+  int *lfa_dims;
+  SPAD;
+};
+
+struct s_data {
+  object name;
+  fixnum length;
+  object raw;
+  object included;
+  object includes;
+  object staticp;
+  object print_function;
+  object slot_descriptions;
+  object slot_position;
+  fixnum size;
+  object has_holes;
+};
+
+struct structure {
+  FIRSTWORD;
+  object str_def;
+  object *str_self;
+  SPAD;
+};
+
+struct stream {
+  FIRSTWORD;
+  void *sm_fp;
+  object sm_object0;
+  object sm_object1;
+  int sm_int0;
+  int sm_int1;
+  char *sm_buffer;
+  char sm_mode;
+  unsigned char sm_flags;
+  short sm_fd;
+};
+
+struct random {
+  FIRSTWORD;
+  __gmp_randstate_struct rnd_state;
+};
+
+
+struct readtable {
+  FIRSTWORD;
+  struct rtent *rt_self;
+};
+
+struct pathname {
+  FIRSTWORD;
+  object pn_host;
+  object pn_device;
+  object pn_directory;
+  object pn_name;
+  object pn_type;
+  object pn_version;
+  SPAD;
+};
+
+struct cfun {
+  FIRSTWORD;
+  object cf_name;
+  void (*cf_self) ();
+  object cf_data;
+};
+
+struct cclosure {
+  FIRSTWORD;
+  object cc_name;
+  void (*cc_self) ();
+  object cc_env;
+  object cc_data;
+  int cc_envdim;
+  object *cc_turbo;
+  SPAD;
+};
+
+struct closure {
+  FIRSTWORD;
+  object cl_name;
+  object (*cl_self) ();
+  object cl_data;
+  int cl_argd;
+  int cl_envdim;
+  object *cl_env;
+};
+
+struct sfun {
+  FIRSTWORD;
+  object sfn_name;
+  object (*sfn_self) ();
+  object sfn_data;
+  int sfn_argd;
+  SPAD;
+};
+
+struct vfun {
+  FIRSTWORD;
+  object vfn_name;
+  object (*vfn_self) ();
+  object vfn_data;
+  unsigned short vfn_minargs;
+  unsigned short vfn_maxargs;
+  SPAD;
+};
+struct cfdata {
+  FIRSTWORD;
+  char *cfd_start;
+  int cfd_size;
+  int cfd_fillp;
+  object *cfd_self;
+  SPAD;
+};
+
+struct spice {
+  FIRSTWORD;
+  int spc_dummy;
+};
+
+struct dummy {
+  FIRSTWORD;
+};
+struct ff {
+  ufixnum ff;
+};
+struct fstpw {
+  FSTPWORD;
+};
+union fstp
+{
+  ufixnum ff;
+  struct fstpw t;
+};
+struct mark {
+  MARKWORD;
+};
+struct typew {
+  TYPEWORD;
+};
+struct sgcm {
+  SGCMWORD;
+};
+
+union lispunion {
+  struct fixnum_struct FIX;
+  struct bignum big;
+  struct ratio rat;
+  struct shortfloat_struct SF;
+  struct longfloat_struct LF;
+  struct ocomplex cmp;
+  struct character ch;
+  struct symbol s;
+  struct package p;
+  struct cons c;
+  struct hashtable ht;
+  struct array a;
+  struct vector v;
+  struct string st;
+  struct ustring ust;
+  struct bitvector bv;
+  struct structure str;
+  struct stream sm;
+  struct random rnd;
+  struct readtable rt;
+  struct pathname pn;
+  struct cfun cf;
+  struct cclosure cc;
+  struct closure cl;
+  struct sfun sfn;
+  struct vfun vfn;
+  struct cfdata cfd;
+  struct spice spc;
+  struct dummy d;
+  struct fstpw fstp;
+  struct ff ff;
+  struct mark md;
+  struct sgcm smd;
+  struct typew td;
+  fixnum fw;
+  void *vw;
+  struct fixarray fixa;
+  struct sfarray sfa;
+  struct lfarray lfa;
+};
--- gcl-2.6.10.orig/h/mac2.h
+++ gcl-2.6.10/h/mac2.h
@@ -166,7 +166,7 @@ do {char *x=sbrk(0); \
 
   /* if there is no input there return false */
 #define LISTEN_FOR_INPUT(fp) \
-  if((fp)->_cnt <=0 && (c=0,ioctl((fp)->_file, FIONREAD, &c),c<=0)) \
+   if(((FILE *)fp)->_cnt <=0 && (c=0,ioctl(((FILE *)fp)->_file, FIONREAD, &c),c<=0)) \
      return 0
 
  /* have sys/ioctl.h */
--- gcl-2.6.10.orig/h/notcomp.h
+++ gcl-2.6.10/h/notcomp.h
@@ -288,3 +288,40 @@ gcl_init_cmp_anon(void);
 extern bool writable_malloc;
 #define writable_malloc_wrap(f_,rt_,a_...) ({rt_ v;bool w=writable_malloc;writable_malloc=1;v=f_(a_);writable_malloc=w;v;})
 #define fopen(a_,b_) writable_malloc_wrap(fopen,FILE *,a_,b_)
+
+#define Mcar(x)	(x)->c.c_car
+#define Mcdr(x)	(x)->c.c_cdr
+#define Mcaar(x)	(x)->c.c_car->c.c_car
+#define Mcadr(x)	(x)->c.c_cdr->c.c_car
+#define Mcdar(x)	(x)->c.c_car->c.c_cdr
+#define Mcddr(x)	(x)->c.c_cdr->c.c_cdr
+#define Mcaaar(x)	(x)->c.c_car->c.c_car->c.c_car
+#define Mcaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car
+#define Mcadar(x)	(x)->c.c_car->c.c_cdr->c.c_car
+#define Mcaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car
+#define Mcdaar(x)	(x)->c.c_car->c.c_car->c.c_cdr
+#define Mcdadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr
+#define Mcddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr
+#define Mcdddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr
+#define Mcaaaar(x)	(x)->c.c_car->c.c_car->c.c_car->c.c_car
+#define Mcaaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car->c.c_car
+#define Mcaadar(x)	(x)->c.c_car->c.c_cdr->c.c_car->c.c_car
+#define Mcaaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car->c.c_car
+#define Mcadaar(x)	(x)->c.c_car->c.c_car->c.c_cdr->c.c_car
+#define Mcadadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr->c.c_car
+#define Mcaddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr->c.c_car
+#define Mcadddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_car
+#define Mcdaaar(x)	(x)->c.c_car->c.c_car->c.c_car->c.c_cdr
+#define Mcdaadr(x)	(x)->c.c_cdr->c.c_car->c.c_car->c.c_cdr
+#define Mcdadar(x)	(x)->c.c_car->c.c_cdr->c.c_car->c.c_cdr
+#define Mcdaddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_car->c.c_cdr
+#define Mcddaar(x)	(x)->c.c_car->c.c_car->c.c_cdr->c.c_cdr
+#define Mcddadr(x)	(x)->c.c_cdr->c.c_car->c.c_cdr->c.c_cdr
+#define Mcdddar(x)	(x)->c.c_car->c.c_cdr->c.c_cdr->c.c_cdr
+#define Mcddddr(x)	(x)->c.c_cdr->c.c_cdr->c.c_cdr->c.c_cdr
+
+#define gethash_with_check(a_,b_) \
+  ({object _b=(b_);while (type_of(_b)!=t_hashtable) _b=wrong_type_argument(sLhash_table,_b);gethash(a_,_b);})
+#define sethash_with_check(a_,b_,c_) \
+  ({object _b=(b_);while (type_of(_b)!=t_hashtable) _b=wrong_type_argument(sLhash_table,_b);sethash(a_,_b,c_);})
+
--- gcl-2.6.10.orig/h/object.h
+++ gcl-2.6.10/h/object.h
@@ -27,12 +27,6 @@ Foundation, 675 Mass Ave, Cambridge, MA
 	Some system constants.
 */
 
-#if SIZEOF_LONG < 8
-#define SPAD object pad
-#else
-#define SPAD
-#endif
-
 #define	TRUE		1	/*  boolean true value  */
 #define	FALSE		0	/*  boolean false value  */
 
@@ -68,14 +62,6 @@ Foundation, 675 Mass Ave, Cambridge, MA
 #define CHAR_SIZE        8     /* number of bits in a char */
 #endif
 
-#undef bool
-typedef int bool;
-typedef long fixnum;
-typedef unsigned long ufixnum;
-typedef float shortfloat;
-typedef double longfloat;
-typedef unsigned short fatchar;
-
 #ifndef plong
 #define plong long
 #endif
@@ -90,226 +76,17 @@ typedef unsigned short fatchar;
 /*
 	Definition of the type of LISP objects.
 */
-typedef union lispunion *object;
-
 typedef union int_object iobject;
 union int_object {object o; fixnum i;};
 
-/*
-	OBJect NULL value.
-	It should not coincide with any legal object value.
-*/
-/* #define	OBJNULL		((object)NULL) */
-
-/*
-	Definition of each implementation type.
-*/
-
-struct fixnum_struct {
-		FIRSTWORD;
-	fixnum	FIXVAL;		/*  fixnum value  */
-};
-/* #define	Mfix(obje)	(obje)->FIX.FIXVAL */
-/* #define fix(x) Mfix(x) */
-
 #define	SMALL_FIXNUM_LIMIT	1024
 
-#if defined (LOW_SHFT)
-
-#define LOW_IM_FIX (1L<<(LOW_SHFT-1))
-#define INT_IN_BITS(a_,b_) ({fixnum _a=(fixnum)(a_);_a>>(b_)==_a>>(CHAR_SIZE*SIZEOF_LONG-1);})
-
-#define      make_imm_fixnum(a_)        ((object)a_)
-#define       fix_imm_fixnum(a_)        ((fixnum)a_)
-#define      mark_imm_fixnum(a_)        ((a_)=((object)((fixnum)(a_)+(LOW_IM_FIX<<1))))
-#define    unmark_imm_fixnum(a_)        ((a_)=((object)((fixnum)(a_)-(LOW_IM_FIX<<1))))
-#define        is_imm_fixnum(a_)        ((fixnum)(a_)<(fixnum)OBJNULL)
-#define is_unmrkd_imm_fixnum(a_)        ((fixnum)(a_)<LOW_IM_FIX)
-#define is_marked_imm_fixnum(a_)        (is_imm_fixnum(a_)*!is_unmrkd_imm_fixnum(a_))
-#define           is_imm_fix(a_)        INT_IN_BITS(a_,LOW_SHFT-1)
-#elif defined (IM_FIX_BASE) && defined(IM_FIX_LIM)
-#define      make_imm_fixnum(a_)        ((object)((a_)+(IM_FIX_BASE+(IM_FIX_LIM>>1))))
-#define       fix_imm_fixnum(a_)        (((fixnum)(a_))-(IM_FIX_BASE+(IM_FIX_LIM>>1)))
-#define      mark_imm_fixnum(a_)        ((a_)=((object)(((fixnum)(a_)) | IM_FIX_LIM)))
-#define    unmark_imm_fixnum(a_)        ((a_)=((object)(((fixnum)(a_)) &~ IM_FIX_LIM)))
-#define        is_imm_fixnum(a_)        (((ufixnum)(a_))>=IM_FIX_BASE)
-#define is_unmrkd_imm_fixnum(a_)        (is_imm_fixnum(a_)&&!is_marked_imm_fixnum(a_))
-#define is_marked_imm_fixnum(a_)        (((fixnum)(a_))&IM_FIX_LIM)
-#define           is_imm_fix(a_)        (!(((a_)+(IM_FIX_LIM>>1))&-IM_FIX_LIM))
-/* #define        un_imm_fixnum(a_)        ((a_)=((object)(((fixnum)(a_))&~(IM_FIX_BASE)))) */
-#else
-#define      make_imm_fixnum(a_)        make_fixnum1(a_)
-#define       fix_imm_fixnum(a_)        ((a_)->FIX.FIXVAL)
-#define      mark_imm_fixnum(a_)        
-#define    unmark_imm_fixnum(a_)        
-#define        is_imm_fixnum(a_)        0
-#define is_unmrkd_imm_fixnum(a_)        0
-#define is_marked_imm_fixnum(a_)        0
-#define           is_imm_fix(a_)        0
-/* #define        un_imm_fixnum(a_)         */
-#endif
-
-#define make_fixnum(a_)  ({register fixnum _q1=(a_);register object _q4; \
-      _q4=is_imm_fix(_q1) ? make_imm_fixnum(_q1) : make_fixnum1(_q1);_q4;})
-#define fix(a_)          ({register object _q2=(a_);register fixnum _q3;		\
-      _q3=is_imm_fixnum(_q2) ? fix_imm_fixnum(_q2) :  (_q2)->FIX.FIXVAL;_q3;})
-#define Mfix(a_)         fix(a_)
-#define small_fixnum(a_) make_fixnum(a_) /*make_imm_fixnum(a_)*/
-#define set_fix(a_,b_)   ((a_)->FIX.FIXVAL=(b_))
-
-#define Zcdr(a_)                 (*(object *)(a_))/* ((a_)->c.c_cdr) */ /*FIXME*/
-
-#ifndef WIDE_CONS
-
-#ifndef USE_SAFE_CDR
-#define SAFE_CDR(a_)             a_
-#define imcdr(a_)                is_imm_fixnum(Zcdr(a_))
-#else
-#define SAFE_CDR(a_)             ({object _a=(a_);is_imm_fixnum(_a) ? make_fixnum1(fix(_a)) : _a;})
-#ifdef DEBUG_SAFE_CDR
-#define imcdr(a_)                (is_imm_fixnum(Zcdr(a_)) && (error("imfix cdr"),1))
-#else
-#define imcdr(a_)                0
-#endif
-#endif
-
-#else
-
-#define SAFE_CDR(a_)             a_
-#define imcdr(a_)                0
-
-#endif
-
-#define is_marked(a_)            (imcdr(a_) ? is_marked_imm_fixnum(Zcdr(a_)) : (a_)->d.m)
-#define is_marked_or_free(a_)    (imcdr(a_) ? is_marked_imm_fixnum(Zcdr(a_)) : (a_)->md.mf)
-#define mark(a_)                 if (imcdr(a_)) mark_imm_fixnum(Zcdr(a_)); else (a_)->d.m=1
-#define unmark(a_)               if (imcdr(a_)) unmark_imm_fixnum(Zcdr(a_)); else (a_)->d.m=0
-#define is_free(a_)              (!is_imm_fixnum(a_) && !imcdr(a_) && (a_)->d.f)
-#define make_free(a_)            ({(a_)->fw=0;(a_)->d.f=1;(a_)->fw|=(fixnum)OBJNULL;})/*set_type_of(a_,t_other)*/
-#define make_unfree(a_)          {(a_)->d.f=0;}
-
-#ifdef WIDE_CONS
-#define valid_cdr(a_)            0
-#else
-#define valid_cdr(a_)            (!(a_)->d.e || imcdr(a_))
-#endif
-
-#define type_of(x)       ({register object _z=(object)(x);\
-                           (is_imm_fixnum(_z) ? t_fixnum : \
-			    (valid_cdr(_z) ?  (_z==Cnil ? t_symbol : t_cons)  : _z->d.t));})
-
-#ifdef WIDE_CONS
-#define TYPEWORD_TYPE_P(y_) 1
-#else
-#define TYPEWORD_TYPE_P(y_) (y_!=t_cons)
-#endif
-  
-/*Note preserve sgc flag here                                         VVV*/
-#define set_type_of(x,y) ({object _x=(object)(x);enum type _y=(y);_x->d.f=0;\
-    if (TYPEWORD_TYPE_P(_y)) {_x->d.e=1;_x->d.t=_y;_x->fw|=(fixnum)OBJNULL;}})
-
-#ifndef WIDE_CONS
-
-#define cdr_listp(x)     valid_cdr(x)
-#define consp(x)         ({register object _z=(object)(x);\
-                           (!is_imm_fixnum(_z) && valid_cdr(_z) && _z!=Cnil);})
-#define listp(x)         ({register object _z=(object)(x);\
-                           (!is_imm_fixnum(_z) && valid_cdr(_z));})
-#define atom(x)          ({register object _z=(object)(x);\
-                           (is_imm_fixnum(_z) || !valid_cdr(_z) || _z==Cnil);})
-
-#else
-
-#define cdr_listp(x)     listp(x)
-#define consp(x)         (type_of(x)==t_cons)
-#define listp(x)         ({object _x=x;type_of(_x)==t_cons || _x==Cnil;})
-#define atom(x)          !consp(x)
-
-#endif
-
-/* #define eql_is_eq(a_)    (is_imm_fixnum(a_) || ({enum type _tp=type_of(a_); _tp == t_cons || _tp > t_complex;})) */
-/* #define equal_is_eq(a_)  (is_imm_fixnum(a_) || type_of(a_)>t_bitvector) */
-
-
-
-struct shortfloat_struct {
-			FIRSTWORD;
-	shortfloat	SFVAL;	/*  shortfloat value  */
-};
 #define	Msf(obje)	(obje)->SF.SFVAL
 #define sf(x) Msf(x)
 
-struct longfloat_struct {
-  FIRSTWORD;
-  longfloat	LFVAL;	/*  longfloat value  */
-  SPAD;
-};
 #define	Mlf(obje)	(obje)->LF.LFVAL
 #define lf(x) Mlf(x)
 
-
-
-/*  #ifdef _MP_H */
-
-/*  #else */
-/*  typedef struct */
-/*  { */
-/*    int _mp_alloc;		 Number of *limbs* allocated and pointed  */
-/*  				   to by the _mp_d field.  */
-/*    int _mp_size;			 abs(_mp_size) is the number of limbs the  */
-/*  				   last field points to.  If _mp_size is  */
-/*  				   negative this is a negative number.   */
-/*    void *_mp_d;		 Pointer to the limbs.  */
-/*  } our_mpz_struct; */
-/*  #endif */
-
-struct bignum {
-  FIRSTWORD;
-#ifdef GMP
-  __mpz_struct big_mpz_t;
-#else
-  plong             *big_self;	/*  bignum body  */
-  int		big_length;	/*  bignum length  */
-#endif  
-};
-
-struct ratio {
-  FIRSTWORD;
-  object	rat_den;	/*  denominator  */
-				/*  must be an integer  */
-  object	rat_num;	/*  numerator  */
-				/*  must be an integer  */
-  SPAD;
-
-};
-
-struct ocomplex {
-  FIRSTWORD;
-  object	cmp_real;	/*  real part  */
-				/*  must be a number  */
-  object	cmp_imag;	/*  imaginary part  */
-				/*  must be a number  */
-  SPAD;
-};
-
-struct character {
-  FIRSTWORD;
-  unsigned short	ch_code;	/*  code  */
-  unsigned char	ch_font;	/*  font  */
-  unsigned char	ch_bits;	/*  bits  */
-};
-
-
-
-/* struct character character_table1[256+128]; */
-/* EXTER  */
-/* union lispunion character_table1[256+128]; */
-/* #define character_table (character_table1+128) */
-/* #define	code_char(c)		(object)(character_table+(c)) */
-/* #define	char_code(obje)		((object)obje)->ch.ch_code */
-/* #define	char_font(obje)		((object)obje)->ch.ch_font */
-/* #define	char_bits(obje)		((object)obje)->ch.ch_bits */
-
 enum stype {			/*  symbol type  */
 	stp_ordinary,		/*  ordinary  */
 	stp_constant,		/*  constant  */
@@ -322,57 +99,9 @@ enum stype {			/*  symbol type  */
 #define sLt Ct
 
 #define	NOT_SPECIAL		((void (*)())Cnil)
-#define	s_fillp		st_fillp
-#define	s_self		st_self
-
-struct symbol {
-  FIRSTWORD;
-  object	s_dbind;	/*  dynamic binding  */
-  void	(*s_sfdef)();	/*  special form definition  */
-  /*  This field coincides with c_car  */
-  char	*s_self;	/*  print name  */
-  /*  These fields coincide with  */
-  /*  st_fillp and st_self.  */
-  int	s_fillp;	/*  print name length  */
-  
-  object	s_gfdef;        /*  global function definition  */
-				/*  For a macro,  */
-				/*  its expansion function  */
-				/*  is to be stored.  */
-  object	s_plist;	/*  property list  */
-  object	s_hpack;	/*  home package  */
-				/*  Cnil for uninterned symbols  */
-  short	s_stype;	/*  symbol type  */
-  /*  of enum stype  */
-  short	s_mflag;	/*  macro flag  */
-  SPAD;
-
-};
 
 #define NOT_OBJECT_ALIGNED(a_) ({union lispunion _t={.vw=(void *)(a_)};_t.td.emf;})
 
-EXTER union lispunion Cnil_body OBJ_ALIGN;
-EXTER union lispunion Ct_body OBJ_ALIGN;
-
-struct package {
-  FIRSTWORD;
-  object	p_name;		/*  package name  */
-				/*  a string  */
-  object	p_nicknames;	/*  nicknames  */
-				/*  list of strings  */
-  object	p_shadowings;	/*  shadowing symbol list  */
-  object	p_uselist;	/*  use-list of packages  */
-  object	p_usedbylist;	/*  used-by-list of packages  */
-  object	*p_internal;	/*  hashtable for internal symbols  */
-  object	*p_external;	/*  hashtable for external symbols  */
-  int p_internal_size;    /* size of internal hash table*/
-  int p_external_size;     /* size of external hash table */
-  int p_internal_fp;       /* [rough] number of symbols */
-  int p_external_fp;    /* [rough]  number of symbols */
-  struct package *p_link;	/*  package link  */
-  SPAD;
-};
-
 /*
 	The values returned by intern and find_symbol.
 	File_symbol may return 0.
@@ -392,37 +121,12 @@ EXTER struct package *pack_pointer;	/*
 #define Scdr(a_) ({union lispunion _t={.vw=(a_)->c.c_cdr};unmark(&_t);_t.vw;})
 #endif
 
-struct cons {
-#ifdef WIDE_CONS
-  FIRSTWORD;
-#endif
-  object	c_cdr;		/*  cdr  */
-  object	c_car;		/*  car  */
-};
-
 enum httest {			/*  hash table key test function  */
 	htt_eq,			/*  eq  */
 	htt_eql,		/*  eql  */
 	htt_equal		/*  equal  */
 };
 
-struct htent {			/*  hash table entry  */
-  object	hte_key;	/*  key  */
-  object	hte_value;	/*  value  */
-};
-
-struct hashtable {		/*  hash table header  */
-  FIRSTWORD;
-  struct htent *ht_self;	/*  pointer to the hash table  */
-  object	ht_rhsize;	/*  rehash size  */
-  object	ht_rhthresh;	/*  rehash threshold  */
-  int	ht_nent;	/*  number of entries  */
-  int	ht_size;	/*  hash table size  */
-  short	ht_test;	/*  key test function  */
-  SPAD;
-				/*  of enum httest  */
-};
-
 enum aelttype {			/*  array element type  */
 	aet_object,		/*  t  */
 	aet_ch,			/*  string-char  */
@@ -435,62 +139,6 @@ enum aelttype {			/*  array element type
 	aet_short,              /* signed short */
 	aet_ushort,             /*  unsigned short   */
 	aet_last
-	  };
-
-struct array {			/*  array header  */
-  FIRSTWORD;
-  object	a_displaced;	/*  displaced  */
-  short	a_rank;		/*  array rank  */
-  short	a_elttype;	/*  element type  */
-  object	*a_self;	/*  pointer to the array  */
-  short	a_adjustable;	/*  adjustable flag  */
-  short	a_offset;	/*  bitvector offset  */
-  int	a_dim;		/*  dimension  */
-  int	*a_dims;	/*  table of dimensions  */
-  SPAD;
-
-};
-
-
-
-struct vector {			/*  vector header  */
-  FIRSTWORD;
-  object v_displaced;	/*  displaced  */
-  short	v_hasfillp;	/*  has-fill-pointer flag  */
-  short	v_elttype;	/*  element type  */
-  object *v_self;	/*  pointer to the vector  */
-  int	v_fillp;	/*  fill pointer  */
-  /*  For simple vectors,  */
-  /*  v_fillp is equal to v_dim.  */
-  int	v_dim;		/*  dimension  */
-  short	v_adjustable;	/*  adjustable flag  */
-  short	v_offset;	/*  not used  */
-  SPAD;
-};
-
-struct string {			/*  string header  */
-  FIRSTWORD;
-  object	st_displaced;	/*  displaced  */
-  short	st_hasfillp;	/*  has-fill-pointer flag  */
-  short	st_adjustable;	/*  adjustable flag  */
-  char	*st_self;	/*  pointer to the string  */
-  int	st_fillp;	/*  fill pointer  */
-  /*  For simple strings,  */
-  /*  st_fillp is equal to st_dim.  */
-  int	st_dim;		/*  dimension  */
-};
-
-struct ustring {
-  FIRSTWORD;
-  object	ust_displaced;
-  short	ust_hasfillp;
-  short	ust_adjustable;		
-  unsigned char *ust_self;
-  int	ust_fillp;
-  
-  int	ust_dim;
-  
-
 };
 
 #define USHORT_GCL(x,i) (((unsigned short *)(x)->ust.ust_self)[i])
@@ -503,96 +151,11 @@ struct ustring {
 		       type_of(x)== t_array ? x->a.a_offset=val : (abort(),0)))
 
 
-		       
-
-struct bitvector {		/*  bitvector header  */
-  FIRSTWORD;
-  object bv_displaced;	/*  displaced  */
-  short	bv_hasfillp;	/*  has-fill-pointer flag  */
-  short	bv_elttype;	/*  not used  */
-  char	*bv_self;	/*  pointer to the bitvector  */
-  int	bv_fillp;	/*  fill pointer  */
-  /*  For simple bitvectors,  */
-  /*  st_fillp is equal to st_dim.  */
-  int	bv_dim;		/*  dimension  */
-  /*  number of bits  */
-  short	bv_adjustable;	/*  adjustable flag  */
-  short	bv_offset;	/*  bitvector offset  */
-  /*  the position of the first bit  */
-  /*  in the first byte  */
-  SPAD;
-};
-
-struct fixarray {		/*  fixnum array header  */
-  FIRSTWORD;
-  object	fixa_displaced;	/*  displaced  */
-  short	fixa_rank;	/*  array rank  */
-  short	fixa_elttype;	/*  element type  */
-  fixnum	*fixa_self;	/*  pointer to the array  */
-  short	fixa_adjustable;/*  adjustable flag  */
-  short	fixa_offset;	/*  not used  */
-  int	fixa_dim;	/*  dimension  */
-  int	*fixa_dims;	/*  table of dimensions  */
-  SPAD;
-
-};
-
-struct sfarray {		/*  short-float array header  */
-  FIRSTWORD;
-  object	sfa_displaced;	/*  displaced  */
-  short	sfa_rank;	/*  array rank  */
-  short	sfa_elttype;	/*  element type  */
-  shortfloat
-  *sfa_self;	/*  pointer to the array  */
-  short	sfa_adjustable;	/*  adjustable flag  */
-  short	sfa_offset;	/*  not used  */
-  int	sfa_dim;	/*  dimension  */
-  
-  int	*sfa_dims;	/*  table of dimensions  */
-  
-  SPAD;
-
-};
-
-struct lfarray {		/*  plong-float array header  */
-  FIRSTWORD;
-  object	lfa_displaced;	/*  displaced  */
-  short	lfa_rank;	/*  array rank  */
-  short	lfa_elttype;	/*  element type  */
-  longfloat
-  *lfa_self;	/*  pointer to the array  */
-  short	lfa_adjustable;	/*  adjustable flag  */
-  short	lfa_offset;	/*  not used  */
-  int	lfa_dim;		/*  dimension  */
-  int	*lfa_dims;	/*  table of dimensions  */
-  SPAD;
-
-};
-
-struct structure {		/*  structure header  */
-  FIRSTWORD;
-  object	str_def;	/*  structure definition (a structure)  */
-  object	*str_self;	/*  structure self  */
-  SPAD;
-};
-
-struct s_data {object name;
-	       fixnum   length;
-	       object raw;
-	       object included;
-	       object includes;
-	       object staticp;
-	       object print_function;
-	       object slot_descriptions;
-	       object slot_position;
-	       fixnum   size;
-	       object has_holes;
-	     };
-
 #define S_DATA(x) ((struct s_data *)((x)->str.str_self))
 #define SLOT_TYPE(def,i) (((S_DATA(def))->raw->ust.ust_self[i]))
 #define SLOT_POS(def,i) USHORT_GCL(S_DATA(def)->slot_position,i)
 #define STREF(type,x,i) (*((type *)(((char *)((x)->str.str_self))+(i))))
+#define STSET(type,x,i,val)  do{SGC_TOUCH(x);STREF(type,x,i) = (val);} while(0)
 
 
 
@@ -635,19 +198,6 @@ enum smmode {			/*  stream mode  */
 /* for smm_string_{input,output} */
 #define STRING_STREAM_STRING(strm) ((strm)->sm.sm_object0)
 
-struct stream {
-  FIRSTWORD;
-  FILE	*sm_fp;		/*  file pointer  */
-  object	sm_object0;	/*  some object  */
-  object	sm_object1;	/*  some object */
-  int	sm_int0;	/*  some int  */
-  int	sm_int1;	/*  column for input or output, stream */
-  char  	*sm_buffer;     /*  ptr to BUFSIZE block of storage */
-  char	sm_mode;	/*  stream mode  */
-  unsigned char    sm_flags;         /* flags from gcl_sm_flags */
-  short sm_fd;         /* stream fd */
-  
-};
 /* flags */
 #define GET_STREAM_FLAG(strm,name) ((strm)->sm.sm_flags & (1<<(name)))
 #define SET_STREAM_FLAG(strm,name,val) {if (val) (strm)->sm.sm_flags |= (1<<(name)); else (strm)->sm.sm_flags &= ~(1<<(name));} 
@@ -665,35 +215,6 @@ enum gcl_sm_flags {
   
   
 };
-  
-#ifdef BSD
-#ifdef SUN3
-#define	BASEFF		(unsigned char *)0xffffffff
-#else
-#define	BASEFF		(char *)0xffffffff
-#endif
-#endif
-
-#ifdef ATT
-#define	BASEFF		(unsigned char *)0xffffffff
-#endif
-
-#ifdef E15
-#define	BASEFF		(unsigned char *)0xffffffff
-#endif
-
-#ifdef MV
-
-
-#endif
-
-struct random {
-
-  FIRSTWORD;
-
-  __gmp_randstate_struct  rnd_state;
-
-};
 
 enum chattrib {			/*  character attribute  */
 	cat_whitespace,		/*  whitespace  */
@@ -715,172 +236,13 @@ struct rtent {				/*  read table entry
 					/*  non-macro character  */
 };
 
-struct readtable {			/*  read table  */
-  FIRSTWORD;
-  struct rtent	*rt_self;	/*  read table itself  */
-};
-
-struct pathname {
-  FIRSTWORD;
-  object	pn_host;	/*  host  */
-  object	pn_device;	/*  device  */
-  object	pn_directory;	/*  directory  */
-  object	pn_name;	/*  name  */
-  object	pn_type;	/*  type  */
-  object	pn_version;	/*  version  */
-  SPAD;
-};
-
-struct cfun {			/*  compiled function header  */
-  FIRSTWORD;
-  object	cf_name;	/*  compiled function name  */
-  void	(*cf_self)();	/*  entry address  */
-  object	cf_data;	/*  data the function uses  */
-				/*  for GBC  */
-};
-
-struct cclosure {		/*  compiled closure header  */
-  FIRSTWORD;
-  object	cc_name;	/*  compiled closure name  */
-  void	(*cc_self)();	/*  entry address  */
-  object	cc_env;		/*  environment  */
-  object	cc_data;	/*  data the closure uses  */
-				/*  for GBC  */
-  int cc_envdim;
-  object	*cc_turbo;	/*  turbo charger */
-  SPAD;
-};
-
-struct closure {
-  FIRSTWORD; 
-  object	cl_name;       /* name */
-  object	(*cl_self)();  /* C start address of code */
-  object	cl_data;       /* To object holding VV vector */
-  int cl_argd;           /* description of args + number */
-  int cl_envdim;         /* length of the environment vector */
-  object *cl_env;        /* environment vector referenced by cl_self()*/
-  SPAD;
-};
-
-struct sfun {
-  FIRSTWORD; 
-  object	sfn_name;       /* name */
-  object	(*sfn_self)();  /* C start address of code */
-  object	sfn_data;       /* To object holding VV vector */
-  int sfn_argd;           /* description of args + number */
-  SPAD;
-};
-
-struct vfun {
-  FIRSTWORD; 
-  object	vfn_name;       /* name */
-  object	(*vfn_self)();  /* C start address of code */
-  object	vfn_data;       /* To object holding VV data */
-  unsigned short vfn_minargs; /* Min args and where varargs start */
-  unsigned short vfn_maxargs;    /* Max number of args */
-  SPAD;
- 
-};
-struct cfdata {
-  FIRSTWORD;
-  char *cfd_start;             /* beginning of contblock for fun */
-  int cfd_size;              /* size of contblock */
-  int cfd_fillp;             /* size of self */
-  object *cfd_self;          /* body */
-  SPAD;
-};
-
-struct spice {
-  FIRSTWORD;
-  int	spc_dummy;
-};
-
-/*
-	dummy type
-*/
-struct dummy {
-  FIRSTWORD;
-};
-struct ff         {ufixnum ff;};
-struct fstpw      {FSTPWORD;};
-union  fstp       {ufixnum ff;struct fstpw t;};
-struct mark       {MARKWORD;};
-struct typew      {TYPEWORD;};
-struct sgcm       {SGCMWORD;};
-
-/*
-	Definition of lispunion.
-*/
-union lispunion {
-	struct fixnum_struct
-			FIX;	/*  fixnum  */
-	struct bignum	big;	/*  bignum  */
-	struct ratio	rat;	/*  ratio  */
-	struct shortfloat_struct
-			SF;	/*  short floating-point number  */
-	struct longfloat_struct
-			LF;	/*  plong floating-point number  */
-	struct ocomplex	cmp;	/*  complex number  */
-	struct character
-			ch;	/*  character  */
-	struct symbol	s;	/*  symbol  */
-	struct package	p;	/*  package  */
-	struct cons	c;	/*  cons  */
-	struct hashtable
-			ht;	/*  hash table  */
-	struct array	a;	/*  array  */
-	struct vector	v;	/*  vector  */
-	struct string	st;	/*  string  */
-	struct ustring	ust;
-	struct bitvector
-			bv;	/*  bit-vector  */
-	struct structure
-			str;	/*  structure  */
-	struct stream	sm;	/*  stream  */
-	struct random	rnd;	/*  random-states  */
-	struct readtable
-			rt;	/*  read table  */
-	struct pathname	pn;	/*  path name  */
-	struct cfun	cf;	/*  compiled function  uses value stack] */
-	struct cclosure	cc;	/*  compiled closure  uses value stack */
-	struct closure	cl;	/*  compiled closure  uses c stack */
-	struct sfun     sfn;    /*  simple function */
-	struct vfun     vfn;    /*  function with variable number of args */
-	struct cfdata   cfd;    /* compiled fun data */
-	struct spice	spc;	/*  spice  */
-
-	struct dummy      d;	/*  dummy  */
-
-        struct fstpw   fstp; /*  fast type  */
-        struct ff        ff; /*  fast type  */
-        struct mark      md; /*  mark dummy  */
-        struct sgcm     smd; /*  sgc mark dummy  */
-        struct typew     td; /*  type dummy  */
-        fixnum           fw;
-        void *           vw;
-
-	struct fixarray	fixa;	/*  fixnum array  */
-	struct sfarray	sfa;	/*  short-float array  */
-	struct lfarray	lfa;	/*  plong-float array  */
-
-};
-
-
 /* struct character character_table1[256+128]; */
-EXTER union lispunion character_table1[256+128] OBJ_ALIGN;
 #define character_table (character_table1+128)
 #define	code_char(c)		(object)(character_table+((unsigned char)(c)))
 #define	char_code(obje)		((object)obje)->ch.ch_code
 #define	char_font(obje)		((object)obje)->ch.ch_font
 #define	char_bits(obje)		((object)obje)->ch.ch_bits
 
-/* EXTER */
-/* union lispunion small_fixnum_table[2*SMALL_FIXNUM_LIMIT]; */
-
-/* #define	small_fixnum(i)  \ */
-/* 	(object)(small_fixnum_table+SMALL_FIXNUM_LIMIT+(i)) */
-
-
 
 #define address_int unsigned long
 
@@ -903,11 +265,6 @@ struct freelist {
 #define	FREE	(-1)		/*  free object  */
 
 /*
-	Type_of.
-*/
-/* #define	type_of(obje)	((enum type)(((object)(obje))->d.t)) */
-
-/*
 	Storage manager for each type.
 */
 struct typemanager {
@@ -1009,31 +366,14 @@ char *tmp_alloc;
   (ALLOC_ALIGNED(f,(n)*sizeof(type),sizeof(type)))
 
 
-/* FIXME  Make all other page constants scale similarly by default. */
-/* #ifndef HOLEPAGE */
-/* #define	HOLEPAGE	(MAXPAGE/10) */
-/* #endif */
-
-
-/* /\* #define	INIT_HOLEPAGE	150 *\/ */
-/* /\* #define	INIT_NRBPAGE	50 *\/ */
-/* /\* #define	RB_GETA		512 *\/ */
-
-/* #define	INIT_HOLEPAGE	(6*HOLEPAGE/5) */
-/* #define	INIT_NRBPAGE	(INIT_HOLEPAGE/30) */
 #define	RB_GETA		PAGESIZE
 
 
 #ifdef AV
 #define	STATIC	register
 #endif
-#ifdef MV
-
-#endif
 
 #define	TIME_ZONE	(-9)
-/* EXTER  */
-/* fixnum FIXtemp; */
 
 /*  For IEEEFLOAT, the double may have exponent in the second word
 (little endian) or first word.*/
@@ -1054,25 +394,8 @@ char *tmp_alloc;
 #define	isLower(xxx)	(((xxx)&0200) == 0 && islower((int)xxx))
 #define	isDigit(xxx)	(((xxx)&0200) == 0 && isdigit((int)xxx))
 enum ftype {f_object,f_fixnum};
-EXTER 
-char *alloca_val;
-/*          ...xx|xx|xxxx|xxxx|   
-		     ret  Narg     */
-
-/*    a9a8a7a6a5a4a3a4a3a2a1a0rrrrnnnnnnnn
-         ai=argtype(i)         ret   nargs
- */
-#define SFUN_NARGS(x) (x & 0xff) /* 8 bits */
-#define RESTYPE(x) (x<<8)   /* 3 bits */
-   /* set if the VFUN_NARGS = m ; has been set correctly */
-#define VFUN_NARG_BIT (1 <<11) 
-#define ARGTYPE(i,x) ((x) <<(12+(i*2)))
-#define ARGTYPE1(x)  (1 | ARGTYPE(0,x))
-#define ARGTYPE2(x,y) (2 | ARGTYPE(0,x)  | ARGTYPE(1,y))
-#define ARGTYPE3(x,y,z) (3 | ARGTYPE(0,x) | ARGTYPE(1,y) | ARGTYPE(2,z))
 
 object make_si_sfun();
-EXTER object MVloc[10];
 
 /* Set new to be an (object *) whose [i]'th elmt is the
    ith elmnt in a va_list
@@ -1114,15 +437,6 @@ EXTER object MVloc[10];
 /* Number of args supplied to a variable arg t_vfun
  Used by the C function to set optionals */
 
-struct call_data { 
-  object fun;
-  int argd;
-  int nvalues;
-  object values[50];
-  double double_return;
-};
-EXTER struct call_data fcall;
-
 #define  VFUN_NARGS fcall.argd
 #define RETURN2(x,y) do{/*  object _x = (void *) x;  */\
 			  fcall.values[2]=y;fcall.nvalues=2; \
@@ -1138,14 +452,13 @@ EXTER struct call_data fcall;
 /* eg: RETURN(3,object,val1,(RV(val2),RV(val3))) */
 #define RETURN(n,typ,val1,listvals) \
    do{typ _val1 = val1; object *_p=&fcall.values[1]; listvals; fcall.nvalues= n; return _val1;}while(0)
-/* #define CALL(n,form) (VFUN_NARGS=n,form) */
 
 	
 
 /* we sometimes have to touch the header of arrays or structures
    to make sure the page is writable */
 #ifdef SGC
-#define SGC_TOUCH(x) if (is_marked(x)) system_error(); unmark(x)
+#define SGC_TOUCH(x) (x)->d.e=1 /*if (is_marked(x)) system_error(); unmark(x)*/
 #else
 #define SGC_TOUCH(x)
 #endif
@@ -1187,10 +500,7 @@ EXTER object sSlambda_block_expanded;
 
 void raise_pending_signals();
 
-EXTER unsigned plong signals_allowed, signals_pending  ;
-
-EXTER struct symbol Dotnil_body;
-#define Dotnil ((object)&Dotnil_body)
+EXTER unsigned plong signals_allowed, signals_pending;
 
 #define endp_prop(a) (consp(a) ? FALSE : ((a)==Cnil ? TRUE : (FEwrong_type_argument(sLlist, (a)),FALSE)))
 #define endp(a) endp_prop(a)
--- /dev/null
+++ gcl-2.6.10/h/pageinfo.h
@@ -0,0 +1,10 @@
+#include "pbits.h"
+
+struct pageinfo {
+  unsigned long type:6;
+  unsigned long magic:7;
+  unsigned long sgc_flags:2;
+  unsigned long in_use:LM(15);
+  struct pageinfo *next;
+};
+  
--- /dev/null
+++ gcl-2.6.10/h/pbits.h
@@ -0,0 +1,13 @@
+#define mjoin(a_,b_) a_ ## b_
+#define Mjoin(a_,b_) mjoin(a_,b_)
+
+#include "arth.h"
+
+#define LM(a_) AM(AT(SIZEOF_LONG,8),a_)
+#if SIZEOF_LONG == 4
+#define LL 2
+#elif SIZEOF_LONG == 8
+#define LL 3
+#else
+#error "unknown SIZEOF_LONG"
+#endif 
--- gcl-2.6.10.orig/h/powerpc-macosx.h
+++ gcl-2.6.10/h/powerpc-macosx.h
@@ -154,7 +154,7 @@ int main(void)
 #undef LISTEN_FOR_INPUT
 #define LISTEN_FOR_INPUT(fp)                                            \
 do {int c=0;                                                            \
-    if ((fp)->_r <=0 && (c=0, ioctl((fp)->_file, FIONREAD, &c), c<=0))  \
+  if (((FILE *)fp)->_r <=0 && (c=0, ioctl(((FILE *)fp)->_file, FIONREAD, &c), c<=0)) \
         return(FALSE);                                                  \
 } while (0)
 
--- gcl-2.6.10.orig/h/rios-aix3.h
+++ gcl-2.6.10/h/rios-aix3.h
@@ -212,7 +212,7 @@ for the kernel.   See aix3_mprotect dire
 
   /* if there is no input there return false */
 #define LISTEN_FOR_INPUT(fp) \
-  if((fp)->_cnt <=0 && (c=0,ioctl((fp)->_file, FIONREAD, &c),c<=0)) \
+    if(((FILE *)fp)->_cnt <=0 && (c=0,ioctl(((FILE *)fp)->_file, FIONREAD, &c),c<=0)) \
      return 0
 
  /* have sys/ioctl.h */
--- gcl-2.6.10.orig/h/rios.h
+++ gcl-2.6.10/h/rios.h
@@ -221,7 +221,7 @@ for the kernel.   See aix3_mprotect dire
 
   /* if there is no input there return false */
 #define LISTEN_FOR_INPUT(fp) \
-  if((fp)->_cnt <=0 && (c=0,ioctl((fp)->_file, FIONREAD, &c),c<=0)) \
+    if(((FILE *)fp)->_cnt <=0 && (c=0,ioctl(((FILE *)fp)->_file, FIONREAD, &c),c<=0)) \
      return 0
 
  /* have sys/ioctl.h */
--- gcl-2.6.10.orig/h/sfun_argd.h
+++ gcl-2.6.10/h/sfun_argd.h
@@ -1,3 +1,4 @@
+#define VFUN_NARG_BIT   (1 <<11) 
 #define SFUN_RETURN_MASK (0xf00 & ~VFUN_NARG_BIT)
 #define SFUN_ARG_TYPE_MASK (~0xfff)
 
@@ -8,3 +9,19 @@
 #define SFUN_NEXT_TYPE(x) ((enum ftype)((x=(x>>2))& 3))
 
 #define MAX_C_ARGS 9
+
+/*          ...xx|xx|xxxx|xxxx|   
+		     ret  Narg     */
+
+/*    a9a8a7a6a5a4a3a4a3a2a1a0rrrrnnnnnnnn
+         ai=argtype(i)         ret   nargs
+ */
+
+#define SFUN_NARGS(x)   (x & 0xff) /* 8 bits */
+#define RESTYPE(x)      (x<<8)   /* 2 bits */
+/* set if the VFUN_NARGS = m ; has been set correctly */
+#define ARGTYPE(i,x)    ((x) <<(12+(i*2)))
+#define ARGTYPE1(x)     (1 | ARGTYPE(0,x))
+#define ARGTYPE2(x,y)   (2 | ARGTYPE(0,x)  | ARGTYPE(1,y))
+#define ARGTYPE3(x,y,z) (3 | ARGTYPE(0,x) | ARGTYPE(1,y) | ARGTYPE(2,z))
+
--- /dev/null
+++ gcl-2.6.10/h/type.h
@@ -0,0 +1,107 @@
+enum type {
+  t_cons,
+  t_start = 0,
+  t_fixnum,
+  t_bignum,
+  t_ratio,
+  t_shortfloat,
+  t_longfloat,
+  t_complex,
+  t_character,
+  t_symbol,
+  t_package,
+  t_hashtable,
+  t_array,
+  t_vector,
+  t_string,
+  t_bitvector,
+  t_structure,
+  t_stream,
+  t_random,
+  t_readtable,
+  t_pathname,
+  t_cfun,
+  t_cclosure,
+  t_sfun,
+  t_gfun,
+  t_vfun,
+  t_afun,
+  t_closure,
+  t_cfdata,
+  t_spice,
+  t_contiguous,
+  t_end=t_contiguous,
+  t_relocatable,
+  t_other
+};
+
+
+#define Zcdr(a_)                 (*(object *)(a_))/* ((a_)->c.c_cdr) */ /*FIXME*/
+
+#ifndef WIDE_CONS
+
+#ifndef USE_SAFE_CDR
+#define SAFE_CDR(a_)             a_
+#define imcdr(a_)                is_imm_fixnum(Zcdr(a_))
+#else
+#define SAFE_CDR(a_)             ({object _a=(a_);is_imm_fixnum(_a) ? make_fixnum1(fix(_a)) : _a;})
+#ifdef DEBUG_SAFE_CDR
+#define imcdr(a_)                (is_imm_fixnum(Zcdr(a_)) && (error("imfix cdr"),1))
+#else
+#define imcdr(a_)                0
+#endif
+#endif
+
+#else
+
+#define SAFE_CDR(a_)             a_
+#define imcdr(a_)                0
+
+#endif
+
+#define is_marked(a_)            (imcdr(a_) ? is_marked_imm_fixnum(Zcdr(a_)) : (a_)->d.m)
+#define is_marked_or_free(a_)    (imcdr(a_) ? is_marked_imm_fixnum(Zcdr(a_)) : (a_)->md.mf)
+#define mark(a_)                 if (imcdr(a_)) mark_imm_fixnum(Zcdr(a_)); else (a_)->d.m=1
+#define unmark(a_)               if (imcdr(a_)) unmark_imm_fixnum(Zcdr(a_)); else (a_)->d.m=0
+#define is_free(a_)              (!is_imm_fixnum(a_) && !imcdr(a_) && (a_)->d.f)
+#define make_free(a_)            ({(a_)->fw=0;(a_)->d.f=1;(a_)->fw|=(fixnum)OBJNULL;})/*set_type_of(a_,t_other)*/
+#define make_unfree(a_)          {(a_)->d.f=0;}
+
+#ifdef WIDE_CONS
+#define valid_cdr(a_)            0
+#else
+#define valid_cdr(a_)            (!(a_)->d.e || imcdr(a_))
+#endif
+
+#define type_of(x)       ({register object _z=(object)(x);\
+                           (is_imm_fixnum(_z) ? t_fixnum : \
+			    (valid_cdr(_z) ?  (_z==Cnil ? t_symbol : t_cons)  : _z->d.t));})
+
+#ifdef WIDE_CONS
+#define TYPEWORD_TYPE_P(y_) 1
+#else
+#define TYPEWORD_TYPE_P(y_) (y_!=t_cons)
+#endif
+  
+/*Note preserve sgc flag here                                         VVV*/
+#define set_type_of(x,y) ({object _x=(object)(x);enum type _y=(y);_x->d.f=0;\
+    if (TYPEWORD_TYPE_P(_y)) {_x->d.e=1;_x->d.t=_y;_x->fw|=(fixnum)OBJNULL;}})
+
+#ifndef WIDE_CONS
+
+#define cdr_listp(x)     valid_cdr(x)
+#define consp(x)         ({register object _z=(object)(x);\
+                           (!is_imm_fixnum(_z) && valid_cdr(_z) && _z!=Cnil);})
+#define listp(x)         ({register object _z=(object)(x);\
+                           (!is_imm_fixnum(_z) && valid_cdr(_z));})
+#define atom(x)          ({register object _z=(object)(x);\
+                           (is_imm_fixnum(_z) || !valid_cdr(_z) || _z==Cnil);})
+
+#else
+
+#define cdr_listp(x)     listp(x)
+#define consp(x)         (type_of(x)==t_cons)
+#define listp(x)         ({object _x=x;type_of(_x)==t_cons || _x==Cnil;})
+#define atom(x)          !consp(x)
+
+#endif
--- gcl-2.6.10.orig/makefile
+++ gcl-2.6.10/makefile
@@ -244,23 +244,26 @@ clean: gclclean
 #	-cd binutils/bfd && $(MAKE) distclean
 #	-cd binutils/libiberty && $(MAKE) distclean
 
-CMPINCLUDE_FILES=$(HDIR)cmpincl1.h $(HDIR)gclincl.h $(HDIR)compbas.h $(HDIR)enum.h $(HDIR)mgmp.h $(HDIR)bits.h $(HDIR)object.h $(HDIR)vs.h \
+CMPINCLUDE_FILES=$(HDIR)cmpincl1.h $(HDIR)gclincl.h $(HDIR)compbas.h $(HDIR)type.h $(HDIR)mgmp.h \
+	$(HDIR)lu.h $(HDIR)globals.h  $(HDIR)vs.h \
 	$(HDIR)bds.h $(HDIR)frame.h \
-	$(HDIR)lex.h $(HDIR)eval.h    $(HDIR)funlink.h \
-	$(HDIR)att_ext.h $(HDIR)new_decl.h $(HDIR)compbas2.h \
-	$(HDIR)compat.h $(HDIR)cmponly.h $(ODIR)/regexp.h $(HDIR)/protoize.h $(HDIR)/immnum.h
+	$(HDIR)lex.h \
+	$(HDIR)compbas2.h \
+	$(HDIR)compprotos.h  $(HDIR)/immnum.h
 
 OTHERS=$(HDIR)notcomp.h $(HDIR)rgbc.h $(HDIR)stacks.h 
 
 $(HDIR)new_decl.h:
 	(cd o && $(MAKE) ../$@)
 
-$(HDIR)cmpinclude.h: $(CMPINCLUDE_FILES) $(HDIR)config.h
-	cat $(HDIR)config.h | sed -e "1,/Begin for cmpincl/d" -e "/End for cmpinclude/,50000d" > $(@F)
-	cd h && cpp tsgc.h 2>/dev/null| grep -v '^ *$$' | tail -1l | tr -d '"' >>../$(@F)
-	cat $(CMPINCLUDE_FILES)  >> $(@F)
-	$(CC) -E -I./$(HDIR)  -dD $(@F) | \
-	awk '/#define  *(__STDC_(_|HOSTED__) |(pu|ge)tc|__GCC_ATOMIC_|__GNU_PATCHLEVEL__ |__VERSION__ )/ {next}{print}' >tmpx1 && mv tmpx1 $(@F)
+$(HDIR)mcompdefs.h: $(HDIR)compdefs.h $(HDIR)new_decl.h
+	$(AWK) 'BEGIN {print "#include \"include.h\"";print "#include \"cmponly.h\"";print "---"} {print "\"#define " $$1 "\" " $$1}' $< |\
+	cpp -I$(HDIR) |\
+	$(AWK) '/^\-\-\-$$/ {i=1;next} {if (!i) next} {gsub("\"","");print}' >$@
+
+$(HDIR)cmpinclude.h: $(HDIR)mcompdefs.h $(CMPINCLUDE_FILES) $(HDIR)config.h
+	cp $< $(@F)
+	cat $(CMPINCLUDE_FILES) | $(CC) -E -I./$(HDIR) - | $(AWK) '/^# |^$$/ {next}{print}' >> $(@F)
 	./xbin/move-if-changed mv $(@F) $@
 	./xbin/move-if-changed cp $@ o/$(@F)
 
@@ -281,4 +284,4 @@ kcp:
 	(cd go ; $(MAKE)  "CFLAGS = -I../h -pg  -c -g ")
 	(cd unixport ; $(MAKE) gcp)
 
-#.INTERMEDIATE: unixport/saved_pcl_gcl
+.INTERMEDIATE: $(HDIR)/mcompdefs.h
--- gcl-2.6.10.orig/o/alloc.c
+++ gcl-2.6.10/o/alloc.c
@@ -27,11 +27,14 @@ Foundation, 675 Mass Ave, Cambridge, MA
 #include <string.h>
 #include <unistd.h>
 #include <stdlib.h>
-#include <sys/mman.h>
 
 #include "include.h"
 #include "page.h"
 
+#ifdef HAVE_MPROTECT
+#include <sys/mman.h>
+#endif
+
 static int
 t_from_type(object);
 
@@ -1076,8 +1079,10 @@ gcl_init_alloc(void *cs_start) {
   
   install_segmentation_catcher();
   
+#ifdef HAVE_MPROTECT
   if (data_start)
     mprotect(data_start,(void *)core_end-data_start,PROT_READ|PROT_WRITE|PROT_EXEC);
+#endif
 
 #ifdef SGC
 
--- gcl-2.6.10.orig/o/fasdump.c
+++ gcl-2.6.10/o/fasdump.c
@@ -1495,7 +1495,7 @@ read_fasl_vector(object in)
  object orig = in;
  object d;
  int tem;
- if (((tem=getc(in->sm.sm_fp)) == EOF) && feof(in->sm.sm_fp))
+ if (((tem=getc(((FILE *)in->sm.sm_fp))) == EOF) && feof(((FILE *)in->sm.sm_fp)))
    { d = coerce_to_pathname(in);
      d = make_pathname(d->pn.pn_host,
 		       d->pn.pn_device,
--- gcl-2.6.10.orig/o/file.d
+++ gcl-2.6.10/o/file.d
@@ -40,16 +40,16 @@ Foundation, 675 Mass Ave, Cambridge, MA
 
 #ifdef HAVE_READLINE
 #include <readline/readline.h>
-#define kclgetc(FP)		rl_getc_em(FP)
-#define kclungetc(C, FP)	rl_ungetc_em(C, FP)
-#define kclputc(C, FP)		rl_putc_em(C, FP)
+#define kclgetc(FP)		rl_getc_em(((FILE *)FP))
+#define kclungetc(C, FP)	rl_ungetc_em(C, ((FILE *)FP))
+#define kclputc(C, FP)		rl_putc_em(C, ((FILE *)FP))
 #else
-#define	kclgetc(FP)		getc(FP)
-#define	kclungetc(C, FP)	ungetc(C, FP)
-#define	kclputc(C, FP)		putc(C, FP)
+#define	kclgetc(FP)		getc(((FILE *)FP))
+#define	kclungetc(C, FP)	ungetc(C, ((FILE *)FP))
+#define	kclputc(C, FP)		putc(C, ((FILE *)FP))
 #endif /* HAVE_READLINE */
 
-#define	xkclfeof(c,FP)		feof(FP)
+#define	xkclfeof(c,FP)		feof(((FILE *)FP))
 
 #ifdef HAVE_AOUT
 #undef ATT
@@ -1122,7 +1122,7 @@ BEGIN:
 	case smm_input:
 		if (strm->sm.sm_fp == NULL)
 			closed_stream(strm);
-		if (isatty(fileno(strm->sm.sm_fp)) && !listen_stream(strm))
+		if (isatty(fileno((FILE *)strm->sm.sm_fp)) && !listen_stream(strm))
 		  return(feof(strm->sm.sm_fp) ? TRUE : FALSE);
 		{int prev_signals_allowed = signals_allowed;
 	       AGAIN:
--- gcl-2.6.10.orig/o/string.d
+++ gcl-2.6.10/o/string.d
@@ -53,7 +53,7 @@ int l;
 */
 object
 make_simple_string(s)
-char *s;
+const char *s;
 {
 	int l, i;
 	char *p;
--- gcl-2.6.10.orig/o/usig2.c
+++ gcl-2.6.10/o/usig2.c
@@ -265,7 +265,7 @@ before_interrupt(struct save_for_interru
  p->token_st_dim = MINN(token->st.st_dim,tok_leng+1);
  if (p->token_st_dim < sizeof(p->token_buf))
    p->token_bufp = p->token_buf;
- else { p->token_bufp= (void *)OUR_ALLOCA(p->token_st_dim);}
+ else { p->token_bufp= (void *)alloca(p->token_st_dim);}
  bcopy(token->st.st_self,p->token_bufp,p->token_st_dim);
   
 }
--- gcl-2.6.10.orig/pcl/impl/gcl/gcl_pcl_impl_low.lisp
+++ gcl-2.6.10/pcl/impl/gcl/gcl_pcl_impl_low.lisp
@@ -174,7 +174,7 @@ static object set_cclosure (object resul
   /* If we are currently using fast linking,     */
   /* make sure to remove the link for result_cc. */
   /*  (VFUN_NARGS=2,fSuse_fast_links_2(sLnil,result_cc));*/
-  fSuse_fast_links_2(sLnil,result_cc);
+  fSuse_fast_links_2(Cnil,result_cc);
 
 /*  use_fast_links(3,Cnil,result_cc); */
 
--- gcl-2.6.10.orig/xgcl-2/gcl_general.lsp
+++ gcl-2.6.10/xgcl-2/gcl_general.lsp
@@ -61,6 +61,7 @@
 
 ;; General routines.
 (defCfun "object lisp_string(object a_string, fixnum c_string) " 0
+  "extern long strlen(const char *);"
   "fixnum len = strlen((void *)c_string);"
   "a_string->st.st_dim = len;"
   "a_string->st.st_fillp = len;"
