aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lang/scm/Makefile70
-rw-r--r--lang/scm/distinfo8
-rw-r--r--lang/scm/files/ia64-patch9
-rw-r--r--lang/scm/files/patch-build.scm15
-rw-r--r--lang/scm/files/patch-scmfig.h22
-rw-r--r--lang/scm/files/patch-warnings6855
6 files changed, 6922 insertions, 57 deletions
diff --git a/lang/scm/Makefile b/lang/scm/Makefile
index 19249920ef47..8e5fd33fafce 100644
--- a/lang/scm/Makefile
+++ b/lang/scm/Makefile
@@ -2,27 +2,29 @@
# $FreeBSD$
PORTNAME= scm
-PORTVERSION= 5f1
-PORTREVISION= 1
+PORTVERSION= 5f2
CATEGORIES= lang scheme
MASTER_SITES= http://groups.csail.mit.edu/mac/ftpdir/scm/%SUBDIR%/
MASTER_SITE_SUBDIR= . OLD
-DISTFILES= ${DISTNAME}${EXTRACT_SUFX} slib-3b4.zip slib-psd1-3.tar.gz
-EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} slib-3b4.zip
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX} slib-3b5.zip slib-psd1-3.tar.gz
+EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
-MAINTAINER= ports@FreeBSD.org
+MAINTAINER= mi@aldan.algebra.com
COMMENT= Scheme interpreter
LICENSE= LGPL21
WRKSRC= ${WRKDIR}/${PORTNAME}
-USES= gmake readline zip
+USES= readline zip
USE_GCC= any
HAS_CONFIGURE= yes
CONFIGURE_ENV= --prefix=${PREFIX}
MAKE_JOBS_UNSAFE= yes
+CFLAGS+= -Wall -Wwrite-strings -Wmissing-declarations -Wredundant-decls -Wcast-qual
+CFLAGS+= -Wno-unused-label -Wno-uninitialized
+
SUB_FILES= require.scm
PLIST_SUB= VERSION="${PORTVERSION}"
@@ -49,18 +51,26 @@ SCM_MODULES_X11=x.so
.include <bsd.port.options.mk>
-.if ${ARCH} == "ia64" || ${ARCH} == "powerpc" || ${ARCH} == "sparc64"
-BROKEN= Does not compile on ia64, powerpc, or sparc64
+.if ${PORT_OPTIONS:MX11}
+SCM_MODULES+= ${SCM_MODULES_X11}
+SCM_DATA+= ${SCM_DATA_X11}
+.endif
+
+.if ${ARCH} == "ia64"
+EXTRA_PATCHES+= ${FILESDIR}/ia64-patch
+ARCHOBJS= continue-ia64.S
.endif
post-extract:
- @${TAR} -C ${WRKDIR} -zxf ${DISTDIR}/slib-psd1-3.tar.gz
+ # Certain .scm files are needed during build:
+ @${TAR} -C ${WRKDIR} -zxf ${DISTDIR}/${DISTFILES:Mslib*.zip} '*.scm'
post-patch:
@${REINPLACE_CMD} -e 's|/usr/include|${LOCALBASE}/include| ; \
/strip/s|^|#|' ${WRKSRC}/Makefile
@${REINPLACE_CMD} -e 's|%%CC%%|${CC}|g ; \
s|%%CFLAGS%%|${CFLAGS}|g ; \
+ s|%%ARCHOBJS%%|${ARCHOBJS}|g ; \
s|%%LOCALBASE%%|${LOCALBASE}|g' ${WRKSRC}/build.scm
@${REINPLACE_CMD} -e 's|__osf__|__FreeBSD__|' ${WRKSRC}/gmalloc.c
@${REINPLACE_CMD} -e 's|gnuregex\.h|gnu/regex.h|g' ${WRKSRC}/rgx.c
@@ -68,38 +78,16 @@ post-patch:
${WRKSRC}/xgen.scm
do-install:
- (cd ${WRKSRC} && ${INSTALL_PROGRAM} scm scmlit \
- ${STAGEDIR}${PREFIX}/bin)
- (cd ${WRKSRC} && ${INSTALL_MAN} scm.1 \
- ${STAGEDIR}${MANPREFIX}/man/man1)
+ ${INSTALL_PROGRAM} ${WRKSRC}/scm ${WRKSRC}/scmlit \
+ ${STAGEDIR}${PREFIX}/bin
+ ${INSTALL_MAN} ${WRKSRC}/scm.1 ${STAGEDIR}${MANPREFIX}/man/man1
@${MKDIR} ${STAGEDIR}${PREFIX}/lib/scm
- (cd ${WRKDIR} && ${INSTALL_DATA} require.scm \
- ${STAGEDIR}${PREFIX}/lib/scm)
-.for i in ${SCM_DATA}
- (cd ${WRKSRC} && ${INSTALL_DATA} ${i} \
- ${STAGEDIR}${PREFIX}/lib/scm)
-.endfor
-.for i in ${SCM_MODULES}
- (cd ${WRKSRC} && ${INSTALL_LIB} ${i} \
- ${STAGEDIR}${PREFIX}/lib/scm)
-.endfor
-.if ${PORT_OPTIONS:MX11}
-.for i in ${SCM_DATA_X11}
- (cd ${WRKSRC} && ${INSTALL_DATA} ${i} \
- ${STAGEDIR}${PREFIX}/lib/scm)
-.endfor
-.for i in ${SCM_MODULES_X11}
- (cd ${WRKSRC} && ${INSTALL_LIB} ${i} \
- ${STAGEDIR}${PREFIX}/lib/scm)
-.endfor
-.endif
- @${MKDIR} ${STAGEDIR}${PREFIX}/lib/scm/slib
- (cd ${WRKDIR}/slib && ${INSTALL_DATA} *.scm \
- ${STAGEDIR}${PREFIX}/lib/scm/slib)
- @${MKDIR} ${STAGEDIR}${PREFIX}/lib/scm/slib/psd
- (cd ${WRKDIR}/slib/psd && ${INSTALL_DATA} *.scm \
- ${STAGEDIR}${PREFIX}/lib/scm/slib/psd)
- (cd ${WRKDIR}/scm && ${INSTALL_DATA} scm.info \
- ${STAGEDIR}${PREFIX}/${INFO_PATH})
+ ${INSTALL_DATA} ${WRKDIR}/require.scm ${SCM_DATA:S|^|${WRKSRC}/|} \
+ ${STAGEDIR}${PREFIX}/lib/scm
+ ${INSTALL_LIB} ${SCM_MODULES:S|^|${WRKSRC}/|} \
+ ${STAGEDIR}${PREFIX}/lib/scm
+ ${TAR} -C ${STAGEDIR}${PREFIX}/lib/scm -xf ${DISTDIR}/${DISTFILES:Mslib*.tar.gz} '*.scm'
+ ${INSTALL_DATA} ${WRKDIR}/slib/*.scm ${STAGEDIR}${PREFIX}/lib/scm/slib/
+ ${INSTALL_DATA} ${WRKDIR}/scm/scm.info ${STAGEDIR}${PREFIX}/${INFO_PATH}
.include <bsd.port.mk>
diff --git a/lang/scm/distinfo b/lang/scm/distinfo
index f715cdbb12ec..27a1f11b8572 100644
--- a/lang/scm/distinfo
+++ b/lang/scm/distinfo
@@ -1,6 +1,6 @@
-SHA256 (scm-5f1.zip) = f469e08e03fef5e2fa54349faaff630e63e88fc39f5fc98a6a55a6aa865a57c0
-SIZE (scm-5f1.zip) = 952965
-SHA256 (slib-3b4.zip) = ddfa66c61db1dec44147cad98e46cb9ec151f62dfaa10aa2508fbd26d46272a7
-SIZE (slib-3b4.zip) = 1099910
+SHA256 (scm-5f2.zip) = 29f182bb5e675d4dcffac897b5e08c59739513fd09e5f1928c2c5419ca921114
+SIZE (scm-5f2.zip) = 954890
+SHA256 (slib-3b5.zip) = f8b64a9820c2ccbdb263a0cb7bcf4caadce0857fdf4e2f52111ca33b4a131760
+SIZE (slib-3b5.zip) = 1105432
SHA256 (slib-psd1-3.tar.gz) = 1665fc6cf572e6d8d99e81b4f6b1e65b04a095b69baebd85d0085ad552dc2955
SIZE (slib-psd1-3.tar.gz) = 62397
diff --git a/lang/scm/files/ia64-patch b/lang/scm/files/ia64-patch
new file mode 100644
index 000000000000..4b8328df4a81
--- /dev/null
+++ b/lang/scm/files/ia64-patch
@@ -0,0 +1,9 @@
+--- Makefile 2013-03-10 03:29:54.000000000 +0000
++++ Makefile 2015-01-23 21:59:51.747074000 +0000
+@@ -104,5 +104,5 @@
+ ofiles = scm.o time.o repl.o scl.o sys.o eval.o subr.o unif.o rope.o \
+ continue.o findexec.o script.o debug.o
+-# continue-ia64.o
++ofiles+= continue-ia64.o
+ ifiles = Init$(VERSION).scm Transcen.scm Link.scm Macro.scm Macexp.scm \
+ Tscript.scm compile.scm Iedline.scm Idiffer.scm
diff --git a/lang/scm/files/patch-build.scm b/lang/scm/files/patch-build.scm
index 692742b7a86e..2c31ead1237a 100644
--- a/lang/scm/files/patch-build.scm
+++ b/lang/scm/files/patch-build.scm
@@ -1,11 +1,18 @@
---- build.scm.orig 2009-08-04 03:35:57.000000000 +0900
-+++ build.scm 2009-08-07 01:59:30.000000000 +0900
+--- build.scm 2009-08-04 03:35:57.000000000 +0900
++++ build.scm 2015-01-23 16:23:32.000000000 -0500
+@@ -618,5 +618,5 @@
+
+ (nostart gcc "" "-e __start -nostartfiles" #f ("ecrt0.c") ())
+- (dump gcc "" "" #f ("unexelf.c" "gmalloc.c") ())
++ (dump gcc "" "" #f ("unexelf.c") ())
+
+ (m hp-ux "" "-lm" #f () ())
@@ -665,14 +665,15 @@
(dump darwin "" "" #f ("unexmacosx.c" "lastfile.c") ())
(dlll darwin "-DSUN_DL" "-ldl" "" () ())
- (c freebsd "" "-export-dynamic" #f () ())
-+ (c freebsd "" "-Wl,-export-dynamic" #f () ())
++ (c freebsd "" "-Wl,-export-dynamic %%ARCHOBJS%%" #f () ())
(m freebsd "" "-lm" #f () ())
- (curses freebsd "" "-lncurses" "/usr/lib/libncurses.a" () ())
+ (curses freebsd "" "-lcurses" "/usr/lib/libcurses.a" () ())
@@ -17,7 +24,7 @@
+ (graphics freebsd "-I%%LOCALBASE%%/include -DX11" "-lX11" "-L%%LOCALBASE%%/lib" () ())
+ (dlll freebsd "-DSUN_DL" "" "" () ())
+ (nostart freebsd "" "" #f () ())
-+ (dump freebsd "" "" #f ("unexelf.c" "gmalloc.c") ())
++ (dump freebsd "" "" #f ("unexelf.c") ())
(curses netbsd "-I/usr/pkg/include" "-lncurses" "-Wl,-rpath -Wl,/usr/pkg/lib -L/usr/pkg/lib" () ())
(editline netbsd "-I/usr/pkg/include" "-lreadline" "-Wl,-rpath -Wl,/usr/pkg/lib -L/usr/pkg/lib" () ())
(graphics netbsd "-I/usr/X11R6/include -DX11" "-lX11" "-Wl,-rpath -Wl,/usr/X11R6/lib -L/usr/X11R6/lib" () ())
diff --git a/lang/scm/files/patch-scmfig.h b/lang/scm/files/patch-scmfig.h
index 0b193ee5fd15..5c0cd0613feb 100644
--- a/lang/scm/files/patch-scmfig.h
+++ b/lang/scm/files/patch-scmfig.h
@@ -1,4 +1,4 @@
---- scmfig.h.orig
+--- scmfig.h
+++ scmfig.h
@@ -256,11 +256,7 @@
#ifdef __alpha
@@ -9,24 +9,30 @@
-# define CDR_DOUBLES
-#endif
-#ifdef __x86_64
-+#if defined(__amd64__) || defined(__ia64__) || defined(__powerpc64__) || defined(__x86_64__)
++#if defined(__amd64__) || defined(__ia64__) || defined(__powerpc64__) || defined(__x86_64__) || defined(__sparc64__)
# define SHORT_INT
# define CDR_DOUBLES
#endif
-@@ -393,14 +389,10 @@
+@@ -393,14 +389,6 @@
# define WHITE_SPACES ' ':case '\t':case '\r':case '\f'
#endif
-#ifdef __ia64__
-+# if defined(__amd64__) || defined(__ia64__) || defined(__powerpc64__) || defined(__x86_64__)
- # define PTR2INT(x) ((long)(x))
- #else
+-# define PTR2INT(x) ((long)(x))
++#define PTR2INT(x) ((intptr_t)(x))
+-#else
-# ifdef __x86_64
-# define PTR2INT(x) ((long)(x))
-# else
-# define PTR2INT(x) ((int)(x))
-# endif
-+# define PTR2INT(x) ((int)(x))
- #endif
+-#endif
#ifndef __builtin_expect
+@@ -824,5 +816,5 @@
+ # ifdef ARM_ULIB
+ extern volatile int errno;
+-# else
++# elif defined(PLAN9)
+ extern int errno;
+ # endif
diff --git a/lang/scm/files/patch-warnings b/lang/scm/files/patch-warnings
new file mode 100644
index 000000000000..ff5257b9b27e
--- /dev/null
+++ b/lang/scm/files/patch-warnings
@@ -0,0 +1,6855 @@
+--- byte.c 2008-01-30 22:31:40.000000000 -0500
++++ byte.c 2015-01-23 18:55:19.000000000 -0500
+@@ -21,6 +21,6 @@
+ #include "scm.h"
+
+-char s_make_bytes[] = "make-bytes";
+-SCM scm_make_bytes(k, n)
++static const char s_make_bytes[] = "make-bytes";
++static SCM scm_make_bytes(k, n)
+ SCM k, n;
+ {
+@@ -39,5 +39,5 @@
+ }
+ #define s_bytes (s_make_bytes+5)
+-SCM scm_bytes(ints)
++static SCM scm_bytes(ints)
+ SCM ints;
+ {
+@@ -55,6 +55,6 @@
+ return res;
+ }
+-static char s_bt_ref[] = "byte-ref";
+-SCM scm_byte_ref(str, k)
++static const char s_bt_ref[] = "byte-ref";
++static SCM scm_byte_ref(str, k)
+ SCM str, k;
+ {
+@@ -64,6 +64,6 @@
+ return MAKINUM(UCHARS(str)[INUM(k)]);
+ }
+-static char s_bt_set[] = "byte-set!";
+-SCM scm_byte_set(str, k, n)
++static const char s_bt_set[] = "byte-set!";
++static SCM scm_byte_set(str, k, n)
+ SCM str, k, n;
+ {
+@@ -75,6 +75,6 @@
+ return UNSPECIFIED;
+ }
+-static char s_bytes2list[] = "bytes->list";
+-SCM scm_bytes2list(str)
++static const char s_bytes2list[] = "bytes->list";
++static SCM scm_bytes2list(str)
+ SCM str;
+ {
+@@ -87,6 +87,6 @@
+ return res;
+ }
+-static char s_bt_reverse[] = "bytes-reverse!";
+-SCM scm_bytes_reverse(str)
++static const char s_bt_reverse[] = "bytes-reverse!";
++static SCM scm_bytes_reverse(str)
+ SCM str;
+ {
+@@ -103,6 +103,6 @@
+ return str;
+ }
+-static char s_write_byte[] = "write-byte";
+-SCM scm_write_byte(chr, port)
++static const char s_write_byte[] = "write-byte";
++static SCM scm_write_byte(chr, port)
+ SCM chr, port;
+ {
+@@ -114,6 +114,6 @@
+ return UNSPECIFIED;
+ }
+-static char s_read_byte[] = "read-byte";
+-SCM scm_read_byte(port)
++static const char s_read_byte[] = "read-byte";
++static SCM scm_read_byte(port)
+ SCM port;
+ {
+@@ -126,6 +126,6 @@
+ }
+
+-static char s_sub_rd[] = "subbytes-read!";
+-SCM scm_subbytes_read(sstr, start, args)
++static const char s_sub_rd[] = "subbytes-read!";
++static SCM scm_subbytes_read(sstr, start, args)
+ SCM sstr, start, args;
+ {
+@@ -173,6 +173,6 @@
+ }
+
+-static char s_sub_wr[] = "subbytes-write";
+-SCM scm_subbytes_write(sstr, start, args)
++static const char s_sub_wr[] = "subbytes-write";
++static SCM scm_subbytes_write(sstr, start, args)
+ SCM sstr, start, args;
+ {
+--- bytenumb.c 2013-03-24 19:37:38.000000000 -0400
++++ bytenumb.c 2015-01-23 18:55:19.000000000 -0500
+@@ -27,5 +27,5 @@
+ #include "scm.h"
+
+-int get_bytes_length(obj)
++static int get_bytes_length(obj)
+ SCM obj;
+ {
+@@ -47,8 +47,8 @@
+ }
+
+-static char s_wrong_length[] = "wrong length";
++static const char s_wrong_length[] = "wrong length";
+ static SCM list_of_0;
+
+-char * get_bytes(obj, minlen, s_name)
++static void * get_bytes(obj, minlen, s_name)
+ SCM obj;
+ int minlen;
+@@ -60,13 +60,15 @@
+ obj, ARG1, s_name);
+ {
++#ifndef RECKLESS
+ int byvlen = get_bytes_length(obj);
++#endif
+ ASRTER((minlen < 0) ? byvlen >= -minlen : byvlen == minlen,
+ MAKINUM(byvlen), s_wrong_length, s_name);
+- return (char*)scm_addr(cons(obj, list_of_0), s_name);
++ return scm_addr(cons(obj, list_of_0), s_name);
+ }
+ }
+
+-static char s_bytes_to_integer[] = "bytes->integer";
+-SCM scm_bytes_to_integer(sbyts, sn)
++static const char s_bytes_to_integer[] = "bytes->integer";
++static SCM scm_bytes_to_integer(sbyts, sn)
+ SCM sbyts;
+ SCM sn;
+@@ -76,5 +78,5 @@
+ {
+ int cnt = abs(n);
+- char *byts = get_bytes(sbyts, -cnt, s_bytes_to_integer);
++ const unsigned char *byts = get_bytes(sbyts, -cnt, s_bytes_to_integer);
+ int iu = 0, id = cnt - sizeof(BIGDIG);
+ sizet ndigs = (cnt + sizeof(BIGDIG) - 1) / sizeof(BIGDIG);
+@@ -88,5 +90,5 @@
+ for (; j < sizeof(BIGDIG); j++) {
+ dig = (dig<<8) +
+- (0xFF ^ ((id + j >= 0) ? (((unsigned char *)byts)[id + j]) : 255));
++ (0xFF ^ ((id + j >= 0) ? byts[id + j] : 255));
+ /* printf("byts[%d + %d] = %lx\n", id, j, 0xFF & dig); */
+ }
+@@ -102,5 +104,5 @@
+ for (; j < sizeof(BIGDIG); j++) {
+ dig = (dig<<8) +
+- ((id + j >= 0) ? (((unsigned char *)byts)[id + j]) : 0);
++ ((id + j >= 0) ? byts[id + j] : 0);
+ }
+ digs[iu] = dig;
+@@ -112,6 +114,6 @@
+ }
+
+-static char s_integer_to_bytes[] = "integer->bytes";
+-SCM scm_integer_to_bytes(sn, slen)
++static const char s_integer_to_bytes[] = "integer->bytes";
++static SCM scm_integer_to_bytes(sn, slen)
+ SCM sn;
+ SCM slen;
+@@ -150,5 +152,5 @@
+ sizet j = sizeof(BIGDIG);
+ dig = (iu < ndigs) ? digs[iu] : 0;
+- dig = dig ^ ((1 << (8 * sizeof(BIGDIG))) - 1);
++ dig = dig ^ ((1UL << (8 * sizeof(BIGDIG))) - 1);
+ /* printf("j = %d; id = %d; iu = %d; dig = %04x; borrow = %d\n", j, id, iu, dig, borrow); */
+ for (; 0 < j-- && 0 <= id;) {
+@@ -156,5 +158,5 @@
+ int dg = (0xFF & dig) + borrow;
+ borrow = dg >> 8;
+- ((unsigned char *)byts)[id--] = dg;
++ byts[id--] = dg;
+ dig = (dig)>>8;
+ }
+@@ -167,5 +169,5 @@
+ for (; 0 < j-- && 0 <= id;) {
+ /* printf("byts[%d] = %02x\n", id, 0xFF & dig); */
+- ((unsigned char *)byts)[id--] = 0xFF & dig;
++ byts[id--] = 0xFF & dig;
+ dig = (dig>>8);
+ }
+@@ -177,23 +179,23 @@
+ }
+
+-static char s_bytes_to_ieee_float[] = "bytes->ieee-float";
+-SCM scm_bytes_to_ieee_float(sbyts)
++static const char s_bytes_to_ieee_float[] = "bytes->ieee-float";
++static SCM scm_bytes_to_ieee_float(sbyts)
+ SCM sbyts;
+ {
+- char *byts = get_bytes(sbyts, 4, s_bytes_to_ieee_float);
++ const unsigned char *byts = get_bytes(sbyts, 4, s_bytes_to_ieee_float);
+ int len = LENGTH(sbyts);
+- int s = (1<<(7)) & ((((unsigned char*)(byts))[0]));
+- int e = ((0x7f&((((unsigned char*)(byts))[0])))<<1)
+- + ((0x80&((((unsigned char*)(byts))[1])))>>7);
+- float f = (((unsigned char*)(byts))[ -1 + (len)]);
++ int s = (1<<(7)) & (((byts)[0]));
++ int e = ((0x7f&(((byts))[0]))<<1)
++ + ((0x80&((((byts))[1])))>>7);
++ float f = (((byts))[ -1 + (len)]);
+ int idx = -2 + (len);
+ while (!((idx)<=1)) {
+ {
+ int T_idx = -1 + (idx);
+- f = ((((unsigned char*)(byts))[idx])) + ((f) / 0x100);
++ f = ((((byts))[idx])) + ((f) / 0x100);
+ idx = T_idx;
+ }
+ }
+- f = ((0x7f&((((unsigned char*)(byts))[1]))) + ((f) / 0x100)) / 0x80;
++ f = ((0x7f&((((byts))[1]))) + ((f) / 0x100)) / 0x80;
+ if ((0<(e))
+ && ((e)<0xff))
+@@ -207,23 +209,23 @@
+ }
+
+-static char s_bytes_to_ieee_double[] = "bytes->ieee-double";
+-SCM scm_bytes_to_ieee_double(sbyts)
++static const char s_bytes_to_ieee_double[] = "bytes->ieee-double";
++static SCM scm_bytes_to_ieee_double(sbyts)
+ SCM sbyts;
+ {
+- char *byts = get_bytes(sbyts, 8, s_bytes_to_ieee_double);
++ const unsigned char *byts = get_bytes(sbyts, 8, s_bytes_to_ieee_double);
+ int len = LENGTH(sbyts);
+- int s = (1<<(7)) & ((((unsigned char*)(byts))[0]));
+- int e = ((0x7f&((((unsigned char*)(byts))[0])))<<4)
+- + ((0xf0&((((unsigned char*)(byts))[1])))>>4);
+- double f = (((unsigned char*)(byts))[ -1 + (len)]);
++ int s = (1<<(7)) & ((((byts))[0]));
++ int e = ((0x7f&((((byts))[0])))<<4)
++ + ((0xf0&((((byts))[1])))>>4);
++ double f = (((byts))[ -1 + (len)]);
+ int idx = -2 + (len);
+ while (!((idx)<=1)) {
+ {
+ int T_idx = -1 + (idx);
+- f = ((((unsigned char*)(byts))[idx])) + ((f) / 0x100);
++ f = ((((byts))[idx])) + ((f) / 0x100);
+ idx = T_idx;
+ }
+ }
+- f = ((0xf&((((unsigned char*)(byts))[1]))) + ((f) / 0x100)) / 0x10;
++ f = ((0xf&((((byts))[1]))) + ((f) / 0x100)) / 0x10;
+ if ((0<(e))
+ && ((e)<0x7ff))
+@@ -237,6 +239,6 @@
+ }
+
+-static char s_ieee_float_to_bytes[] = "ieee-float->bytes";
+-SCM scm_ieee_float_to_bytes(in_flt)
++static const char s_ieee_float_to_bytes[] = "ieee-float->bytes";
++static SCM scm_ieee_float_to_bytes(in_flt)
+ SCM in_flt;
+ {
+@@ -318,6 +320,6 @@
+ }
+
+-static char s_ieee_double_to_bytes[] = "ieee-double->bytes";
+-SCM scm_ieee_double_to_bytes(in_flt)
++static const char s_ieee_double_to_bytes[] = "ieee-double->bytes";
++static SCM scm_ieee_double_to_bytes(in_flt)
+ SCM in_flt;
+ {
+@@ -398,18 +400,18 @@
+ }
+
+-static char s_integer_byte_collate_M[] = "integer-byte-collate!";
+-SCM scm_integer_byte_collate_M(byte_vector)
++static const char s_integer_byte_collate_M[] = "integer-byte-collate!";
++static SCM scm_integer_byte_collate_M(byte_vector)
+ SCM byte_vector;
+ {
+- char* bv = get_bytes(byte_vector, -1, s_integer_byte_collate_M);
++ unsigned char* bv = get_bytes(byte_vector, -1, s_integer_byte_collate_M);
+ bv[0] = 0x80^(bv[0]);
+ return byte_vector;
+ }
+
+-static char s_ieee_byte_collate_M[] = "ieee-byte-collate!";
+-SCM scm_ieee_byte_collate_M(byte_vector)
++static const char s_ieee_byte_collate_M[] = "ieee-byte-collate!";
++static SCM scm_ieee_byte_collate_M(byte_vector)
+ SCM byte_vector;
+ {
+- char* byv = get_bytes(byte_vector, 4, s_ieee_byte_collate_M);
++ unsigned char* byv = get_bytes(byte_vector, 4, s_ieee_byte_collate_M);
+ int byvlen = get_bytes_length(byte_vector);
+ if (0x80&(byv[0])) {
+@@ -425,9 +427,9 @@
+ }
+
+-static char s_ieee_byte_decollate_M[] = "ieee-byte-decollate!";
+-SCM scm_ieee_byte_decollate_M(byte_vector)
++static const char s_ieee_byte_decollate_M[] = "ieee-byte-decollate!";
++static SCM scm_ieee_byte_decollate_M(byte_vector)
+ SCM byte_vector;
+ {
+- char* byv = get_bytes(byte_vector, 4, s_ieee_byte_collate_M);
++ unsigned char* byv = get_bytes(byte_vector, 4, s_ieee_byte_collate_M);
+ int byvlen = get_bytes_length(byte_vector);
+ if (!(0x80&(byv[0]))) {
+--- continue.h 2008-02-19 00:12:54.000000000 -0500
++++ continue.h 2015-01-26 23:02:16.000000000 -0500
+@@ -70,5 +66,9 @@
+
+ #ifdef sparc
+-# define FLUSH_REGISTER_WINDOWS asm("ta 3")
++# ifdef __sparcv9
++# define FLUSH_REGISTER_WINDOWS asm("flushw")
++# else
++# define FLUSH_REGISTER_WINDOWS asm("ta 3")
++# endif
+ #else
+ # define FLUSH_REGISTER_WINDOWS /* empty */
+@@ -142,4 +138,6 @@
+
+ extern long thrown_value;
++void init_storage P((STACKITEM *start, long init_heap_size));
++void mark_locations P((const STACKITEM x[], sizet n));
+ long stack_size P((STACKITEM *start));
+ CONTINUATION *make_root_continuation P((STACKITEM *stack_base));
+--- crs.c 2009-10-21 15:41:30.000000000 -0400
++++ crs.c 2015-01-23 18:55:19.000000000 -0500
+@@ -43,5 +43,5 @@
+ #define WIN(obj) ((WINDOW*)CDR(obj))
+ #define WINP(obj) (tc16_window==TYP16(obj))
+-int freewindow(win)
++static int freewindow(win)
+ WINDOW *win;
+ {
+@@ -50,9 +50,9 @@
+ return 0;
+ }
+-int bwaddch(c, win) int c; WINDOW *win; {waddch(win, c);return c;}
+-int bwaddstr(str, win) char *str; WINDOW *win; {waddstr(win, str);return 0;}
+-sizet bwwrite(str, siz, num, win)
++static int bwaddch(c, win) int c; WINDOW *win; {waddch(win, c);return c;}
++static int bwaddstr(str, win) const char *str; WINDOW *win; {waddstr(win, str);return 0;}
++static sizet bwwrite(str, siz, num, win)
+ sizet siz, num;
+- char *str; WINDOW *win;
++ const char *str; WINDOW *win;
+ {
+ sizet i = 0, prod = siz*num;
+@@ -74,5 +74,5 @@
+ freewindow};
+
+-SCM mkwindow(win)
++static SCM mkwindow(win)
+ WINDOW *win;
+ {
+@@ -85,6 +85,6 @@
+ }
+
+-SCM *loc_stdscr = 0;
+-SCM linitscr()
++static SCM *loc_stdscr = NULL;
++static SCM linitscr(void)
+ {
+ WINDOW *win;
+@@ -96,5 +96,5 @@
+ return *loc_stdscr = mkwindow(win);
+ }
+-SCM lendwin()
++static SCM lendwin(void)
+ {
+ if (IMP(*loc_stdscr)) return BOOL_F;
+@@ -102,7 +102,7 @@
+ }
+
+-static char s_newwin[] = "newwin", s_subwin[] = "subwin", s_mvwin[] = "mvwin",
++static const char s_newwin[] = "newwin", s_subwin[] = "subwin", s_mvwin[] = "mvwin",
+ s_overlay[] = "overlay", s_overwrite[] = "overwrite";
+-SCM lnewwin(lines, cols, args)
++static SCM lnewwin(lines, cols, args)
+ SCM lines, cols, args;
+ {
+@@ -121,5 +121,5 @@
+ }
+
+-SCM lmvwin(win, y, x)
++static SCM lmvwin(win, y, x)
+ SCM win, y, x;
+ {
+@@ -130,5 +130,5 @@
+ }
+
+-SCM lsubwin(win, lines, args)
++static SCM lsubwin(win, lines, args)
+ SCM win, lines, args;
+ {
+@@ -150,5 +150,5 @@
+ }
+
+-SCM loverlay(srcwin, dstwin)
++static SCM loverlay(srcwin, dstwin)
+ SCM srcwin, dstwin;
+ {
+@@ -158,5 +158,5 @@
+ }
+
+-SCM loverwrite(srcwin, dstwin)
++static SCM loverwrite(srcwin, dstwin)
+ SCM srcwin, dstwin;
+ {
+@@ -166,7 +166,7 @@
+ }
+
+-static char s_wmove[] = "wmove", s_wadd[] = "wadd", s_winsch[] = "winsch",
++static const char s_wmove[] = "wmove", s_wadd[] = "wadd", s_winsch[] = "winsch",
+ s_box[] = "box";
+-SCM lwmove(win, y, x)
++static SCM lwmove(win, y, x)
+ SCM win, y, x;
+ {
+@@ -177,5 +177,5 @@
+ }
+
+-SCM lwadd(win, obj)
++static SCM lwadd(win, obj)
+ SCM win, obj;
+ {
+@@ -189,5 +189,5 @@
+ }
+
+-SCM lwinsch(win, obj)
++static SCM lwinsch(win, obj)
+ SCM win, obj;
+ {
+@@ -199,5 +199,5 @@
+ }
+
+-SCM lbox(win, vertch, horch)
++static SCM lbox(win, vertch, horch)
+ SCM win, vertch, horch;
+ {
+@@ -217,6 +217,6 @@
+ }
+
+-static char s_getyx[] = "getyx", s_winch[] = "winch", s_unctrl[] = "unctrl";
+-SCM lgetyx(win)
++static const char s_getyx[] = "getyx", s_winch[] = "winch", s_unctrl[] = "unctrl";
++static SCM lgetyx(win)
+ SCM win;
+ {
+@@ -227,5 +227,5 @@
+ }
+
+-SCM lwinch(win)
++static SCM lwinch(win)
+ SCM win;
+ {
+@@ -234,16 +234,16 @@
+ }
+
+-SCM lunctrl(c)
++static SCM lunctrl(c)
+ SCM c;
+ {
+ ASRTER(ICHRP(c), c, ARG1, s_unctrl);
+ {
+- char *str = unctrl(ICHR(c));
++ const char *str = unctrl(ICHR(c));
+ return makfrom0str(str);
+ }
+ }
+-static char s_owidth[] = "output-port-width";
+-static char s_oheight[] = "output-port-height";
+-SCM owidth(arg)
++static const char s_owidth[] = "output-port-width";
++static const char s_oheight[] = "output-port-height";
++static SCM owidth(arg)
+ SCM arg;
+ {
+@@ -256,20 +256,21 @@
+ return MAKINUM(80);
+ }
+-SCM oheight(arg)
++static SCM oheight(arg)
+ SCM arg;
+ {
+ if (UNBNDP(arg)) arg = cur_outp;
+ ASRTER(NIMP(arg) && OPOUTPORTP(arg), arg, ARG1, s_owidth);
+- if (NIMP(*loc_stdscr))
++ if (NIMP(*loc_stdscr)) {
+ if (WINP(arg)) return MAKINUM(WIN(arg)->_maxy+1);
+ else return MAKINUM(LINES);
++ }
+ return MAKINUM(24);
+ }
+-SCM lrefresh()
++static SCM lrefresh()
+ {
+ return MAKINUM(wrefresh(curscr));
+ }
+
+-#define SUBR0(lname, name) SCM lname(){name();return UNSPECIFIED;}
++#define SUBR0(lname, name) static SCM lname(){name();return UNSPECIFIED;}
+ SUBR0(lnl, nl)
+ SUBR0(lnonl, nonl)
+@@ -283,5 +284,5 @@
+ SUBR0(lresetty, resetty)
+
+-static char s_nonl[] = "nonl", s_nocbreak[] = "nocbreak",
++static const char s_nonl[] = "nonl", s_nocbreak[] = "nocbreak",
+ s_noecho[] = "noecho", s_noraw[] = "noraw";
+
+@@ -302,6 +303,6 @@
+ {0, 0}};
+
+-#define SUBRW(ln, n, s_n, sn) static char s_n[]=sn;\
+- SCM ln(w)SCM w;\
++#define SUBRW(ln, n, s_n, sn) static const char s_n[]=sn;\
++ static SCM ln(w)SCM w;\
+ {ASRTER(NIMP(w) && WINP(w), w, ARG1, sn);\
+ return ERR==n(WIN(w))?BOOL_F:BOOL_T;}
+@@ -336,6 +337,6 @@
+ {0, 0}};
+
+-#define SUBROPT(ln, n, s_n, sn) static char s_n[]=sn;\
+- SCM ln(w, b)SCM w, b;\
++#define SUBROPT(ln, n, s_n, sn) static const char s_n[]=sn;\
++ static SCM ln(w, b)SCM w, b;\
+ {ASRTER(NIMP(w) && WINP(w), w, ARG1, sn);\
+ return ERR==n(WIN(w), BOOL_F != b)?BOOL_F:BOOL_T;}
+@@ -347,6 +348,6 @@
+
+ /* SUBROPT(lclearok, clearok, s_clearok, "clearok") */
+-static char s_clearok[] = "clearok";
+-SCM lclearok(w, b) SCM w, b;
++static const char s_clearok[] = "clearok";
++static SCM lclearok(w, b) SCM w, b;
+ {
+ if (BOOL_T==w) return ERR==clearok(curscr, BOOL_F != b)?BOOL_F:BOOL_T;
+--- debug.c 2008-01-30 22:31:48.000000000 -0500
++++ debug.c 2015-01-23 18:55:19.000000000 -0500
+@@ -291,5 +291,8 @@
+ int writing;
+ {
+- SCM env, linum = UNDEFINED;
++ SCM env;
++#ifdef CAUTIOUS
++ SCM linum = UNDEFINED;
++#endif
+ proc = CODE(proc);
+ lputs("#<CLOSURE ", port);
+@@ -320,6 +323,6 @@
+ }
+
+-static char s_int2linum[] = "integer->line-number";
+-SCM scm_int2linum(n)
++static const char s_int2linum[] = "integer->line-number";
++static SCM scm_int2linum(n)
+ SCM n;
+ {
+@@ -329,6 +332,6 @@
+ }
+
+-static char s_linum2int[] = "line-number->integer";
+-SCM scm_linum2int(linum)
++static const char s_linum2int[] = "line-number->integer";
++static SCM scm_linum2int(linum)
+ SCM linum;
+ {
+@@ -337,5 +340,5 @@
+ }
+
+-SCM scm_linump(obj)
++static SCM scm_linump(obj)
+ SCM obj;
+ {
+@@ -343,6 +346,6 @@
+ }
+
+-static char s_remove_linums[] = "remove-line-numbers!";
+-SCM scm_remove_linums(x)
++static const char s_remove_linums[] = "remove-line-numbers!";
++static SCM scm_remove_linums(x)
+ SCM x;
+ {
+@@ -377,5 +380,5 @@
+
+ #ifdef CAUTIOUS
+-long num_frames(estk, i)
++static long num_frames(estk, i)
+ SCM estk;
+ int i;
+@@ -390,5 +393,5 @@
+ }
+
+-SCM *estk_frame(estk, i, nf)
++static SCM *estk_frame(estk, i, nf)
+ SCM estk;
+ int i, nf;
+@@ -408,5 +411,5 @@
+ }
+
+-SCM stacktrace1(estk, i)
++static SCM stacktrace1(estk, i)
+ SCM estk;
+ int i;
+@@ -444,5 +447,5 @@
+ }
+
+-SCM *cont_frame(contin, nf)
++static SCM *cont_frame(contin, nf)
+ SCM contin;
+ int nf;
+@@ -455,5 +458,5 @@
+ }
+
+-static char s_stack_trace[] = "stack-trace";
++static const char s_stack_trace[] = "stack-trace";
+ SCM scm_stack_trace(contin)
+ SCM contin;
+@@ -476,6 +479,6 @@
+ }
+
+-static char s_frame_trace[] = "frame-trace";
+-SCM scm_frame_trace(contin, nf)
++static const char s_frame_trace[] = "frame-trace";
++static SCM scm_frame_trace(contin, nf)
+ SCM contin, nf;
+ {
+@@ -493,6 +496,6 @@
+ }
+
+-static char s_frame2env[] = "frame->environment";
+-SCM scm_frame2env(contin, nf)
++static const char s_frame2env[] = "frame->environment";
++static SCM scm_frame2env(contin, nf)
+ SCM contin, nf;
+ {
+@@ -506,6 +509,6 @@
+ }
+
+-static char s_frame_eval[] = "frame-eval";
+-SCM scm_frame_eval(contin, nf, expr)
++static const char s_frame_eval[] = "frame-eval";
++static SCM scm_frame_eval(contin, nf, expr)
+ SCM contin, nf, expr;
+ {
+@@ -526,5 +529,5 @@
+ #endif
+
+-static char s_scope_trace[] = "scope-trace";
++static const char s_scope_trace[] = "scope-trace";
+ SCM scm_scope_trace(env)
+ SCM env;
+@@ -593,6 +596,6 @@
+ }
+
+-static char s_env_annotation[] = "environment-annotation";
+-SCM scm_env_annotation(var, stenv)
++static const char s_env_annotation[] = "environment-annotation";
++static SCM scm_env_annotation(var, stenv)
+ SCM var, stenv;
+ {
+--- differ.c 2010-08-21 22:12:34.000000000 -0400
++++ differ.c 2015-01-23 18:55:19.000000000 -0500
+@@ -24,69 +24,81 @@
+ #include "scm.h"
+
+-#ifdef __x86_64
+-# define I32 int
+-#else
+-# define I32 long
+-#endif
+-/* Currently A:fixZ32b are actually A:fixZ64b. Remove next line when
++/* Currently A:fixZ32b are actually A:fixZ64b. Use int64_t, when
+ this gets fixed. */
+-#define I32 long
+-
+-SCM_EXPORT SCM array_dims P((SCM ra));
++#define I32 int64_t
+
+ typedef int (*int_function) ();
+
+ typedef struct {
+- void* (*subarray) ();
++ const void * (*subarray)(const void *, int start, int end);
+ int_function array_refsEql_P;
+ int_function array_refs_revEql_P;
+ } fp_procs;
+
+-int fp_compare(I32 *fp,int fpoff,I32 *cc,void *a,int m,void *b,int n,int_function array_refsEql_P,int p_lim);
++static int fp_compare(I32 *fp, int fpoff, I32 *cc,
++ const void *a, int m,
++ const void *b, int n,
++ int_function array_refsEql_P, int p_lim);
+
+-int fp_run(I32 *fp,int fpoff,int k,void *a,int m,void *b,int n,int_function array_refsEql_P,I32 *cc,int p);
++static int fp_run(I32 *fp, int fpoff, int k,
++ const void *a, int m,
++ const void *b, int n,
++ int_function array_refsEql_P,
++ I32 *cc, int p);
+
+-int diff_mid_split(int n,I32 *rr,I32 *cc,int cost);
++static int diff_mid_split(int n, const I32 *rr, const I32 *cc,int cost);
+
+-void fp_init(I32 *fp,int fpoff,int fill,int mindx,int maxdx);
++static void fp_init(I32 *fp, int fpoff, int fill, int mindx, int maxdx);
+
+-int diff_divide_and_conquer(I32 *fp,int fpoff,I32 *ccrr,void *a,int start_a,int end_a,void *b,int start_b,int end_b,I32 *edits,int edx,int epo,fp_procs *procs,int p_lim);
++static int diff_divide_and_conquer(I32 *fp, int fpoff, I32 *ccrr,
++ const void *a, int start_a, int end_a,
++ const void *b, int start_b, int end_b,
++ I32 *edits, int edx, int epo, const fp_procs *procs, int p_lim);
+
+-int diff2et(I32 *fp,int fpoff,I32 *ccrr,void *a,int start_a,int end_a,void *b,int start_b,int end_b,I32 *edits,int edx,int epo,fp_procs *procs,int p_lim);
++static int diff2et(I32 *fp, int fpoff, I32 *ccrr,
++ const void *a, int start_a, int end_a,
++ const void *b, int start_b, int end_b,
++ I32 *edits, int edx, int epo, const fp_procs *procs, int p_lim);
+
+-int diff2ez(I32 *fp,int fpoff,I32 *ccrr,void *a,int start_a,int end_a,void *b,int start_b,int end_b,I32 *edits,int edx,int epo,fp_procs *procs,int p_lim);
++static int diff2ez(I32 *fp, int fpoff, I32 *ccrr,
++ const void *a, int start_a, int end_a,
++ const void *b, int start_b, int end_b,
++ I32 *edits, int edx, int epo, const fp_procs *procs, int p_lim);
+
+-void check_cost(unsigned char *name,int est,int cost);
++static void check_cost(const char *name, int est, int cost);
+
+-SCM_EXPORT SCM diff2edits P((SCM Edits, SCM Fp, SCM Args));
++static SCM diff2edits P((SCM Edits, SCM Fp, SCM Args));
+
+-SCM_EXPORT SCM diff2editlen P((SCM Fp, SCM A, SCM Args));
++static SCM diff2editlen P((SCM Fp, SCM A, SCM Args));
+
+ #define MAX(a,b) (a<b ? b : a)
+ #define MIN(a,b) (a>b ? b : a)
+
+-I32 *long_subarray(ra, start, end)
+- I32 *ra; int start, end;
++static const void *I32_subarray(_ra, start, end)
++ const void *_ra; int start, end;
+ {
++ const I32 *ra = _ra;
+ return &(ra[start]);
+ }
+-short *short_subarray(ra, start, end)
+- short *ra; int start, end;
++static const void *short_subarray(_ra, start, end)
++ const void *_ra; int start, end;
+ {
++ const short *ra = _ra;
+ return &(ra[start]);
+ }
+-char *char_subarray(ra, start, end)
+- char *ra; int start, end;
++static const void *char_subarray(_ra, start, end)
++ const void *_ra; int start, end;
+ {
++ const char *ra = _ra;
+ return &(ra[start]);
+ }
+
+-int long_array_refsEql_P(a, x, m, b, y, n)
++static int long_array_refsEql_P(a, x, m, b, y, n)
+ I32 *a; int x, m; I32 *b; int y, n;
+ {
+ return (a[x])==(b[y]);
+ }
+-int long_array_refs_revEql_P(a, x, m, b, y, n)
+- I32 *a; int x, m; I32 *b; int y, n;
++static int long_array_refs_revEql_P(a, x, m, b, y, n)
++ const I32 *a; int x, m; const I32 *b; int y, n;
+ {
+ /* if (x > m) printf("long x(%d) > m(%d)\n", x, m); */
+@@ -94,11 +106,11 @@
+ return a[(m)-(x)-1]==b[(n)-(y)-1];
+ }
+-int short_array_refsEql_P(a, x, m, b, y, n)
+- short *a; int x, m; short *b; int y, n;
++static int short_array_refsEql_P(a, x, m, b, y, n)
++ const short *a; int x, m; const short *b; int y, n;
+ {
+ return (a[x])==(b[y]);
+ }
+-int short_array_refs_revEql_P(a, x, m, b, y, n)
+- short *a; int x, m; short *b; int y, n;
++static int short_array_refs_revEql_P(a, x, m, b, y, n)
++ const short *a; int x, m; const short *b; int y, n;
+ {
+ /* if (x > m) printf("short x(%d) > m(%d)\n", x, m); */
+@@ -106,11 +118,11 @@
+ return a[(m)-(x)-1]==b[(n)-(y)-1];
+ }
+-int char_array_refsEql_P(a, x, m, b, y, n)
+- char *a; int x, m; char *b; int y, n;
++static int char_array_refsEql_P(a, x, m, b, y, n)
++ const char *a; int x, m; const char *b; int y, n;
+ {
+ return (a[x])==(b[y]);
+ }
+-int char_array_refs_revEql_P(a, x, m, b, y, n)
+- char *a; int x, m; char *b; int y, n;
++static int char_array_refs_revEql_P(a, x, m, b, y, n)
++ const char *a; int x, m; const char *b; int y, n;
+ {
+ /* if (x > m) printf("char x(%d) > m(%d)\n", x, m); */
+@@ -120,5 +132,5 @@
+
+ fp_procs long_procs =
+- {long_subarray,
++ {I32_subarray,
+ long_array_refsEql_P,
+ long_array_refs_revEql_P};
+@@ -136,7 +148,7 @@
+ int fpoff;
+ I32 *cc;
+- void *a;
++ const void *a;
+ int m;
+- void *b;
++ const void *b;
+ int n;
+ int_function array_refsEql_P;
+@@ -189,7 +201,7 @@
+ int fpoff;
+ int k;
+- void *a;
++ const void *a;
+ int m;
+- void *b;
++ const void *b;
+ int n;
+ int_function array_refsEql_P;
+@@ -228,6 +240,6 @@
+ int diff_mid_split(n, rr, cc, cost)
+ int n;
+- I32 *rr;
+- I32 *cc;
++ const I32 *rr;
++ const I32 *cc;
+ int cost;
+ {
+@@ -276,8 +288,8 @@
+ int fpoff;
+ I32 *ccrr;
+- void *a;
++ const void *a;
+ int start_a;
+ int end_a;
+- void *b;
++ const void *b;
+ int start_b;
+ int end_b;
+@@ -285,5 +297,5 @@
+ int edx;
+ int epo;
+- fp_procs *procs;
++ const fp_procs *procs;
+ int p_lim;
+ {
+@@ -320,8 +332,8 @@
+ int fpoff;
+ I32 *ccrr;
+- void *a;
++ const void *a;
+ int start_a;
+ int end_a;
+- void *b;
++ const void *b;
+ int start_b;
+ int end_b;
+@@ -329,5 +341,5 @@
+ int edx;
+ int epo;
+- fp_procs *procs;
++ const fp_procs *procs;
+ int p_lim;
+ {
+@@ -370,8 +382,8 @@
+ int fpoff;
+ I32 *ccrr;
+- void *a;
++ const void *a;
+ int start_a;
+ int end_a;
+- void *b;
++ const void *b;
+ int start_b;
+ int end_b;
+@@ -379,5 +391,5 @@
+ int edx;
+ int epo;
+- fp_procs *procs;
++ const fp_procs *procs;
+ int p_lim;
+ {
+@@ -450,6 +462,6 @@
+ }
+
+-void check_cost(name, est, cost)
+- unsigned char *name;
++static void check_cost(name, est, cost)
++ const char *name;
+ int est;
+ int cost;
+@@ -464,7 +476,7 @@
+
+ /* Return the fp_procs appropriate for SCM array prototype */
+-fp_procs *raprot2procs(prot, s_name)
++static fp_procs *raprot2procs(prot, s_name)
+ SCM prot;
+- char *s_name;
++ const char *s_name;
+ {
+ fp_procs *procs;
+@@ -481,17 +493,17 @@
+ static SCM list_of_0;
+
+-void* array2addr(RA, prot, pos, s_name)
++static void* array2addr(RA, prot, pos, s_name)
+ SCM RA, prot;
+- char *pos;
+- char s_name[];
++ intptr_t pos;
++ const char s_name[];
+ {
+ ASRTER(BOOL_T==arrayp(RA, UNDEFINED) && array_prot(RA)==prot, RA,
+- pos, s_name);
++ (const char *)pos, s_name);
+ return scm_addr(cons(RA, list_of_0), s_name);
+ }
+
+ /* A not longer than B (M <= N) */
+-static char s_d2es[] = "diff2edits!";
+-static char s_incomp[] = "incompatible array types";
++static const char s_d2es[] = "diff2edits!";
++static const char s_incomp[] = "incompatible array types";
+ SCM diff2edits(Edits, Fp, Args)
+ SCM Edits, Fp, Args; /* Ccrr, A, B; */
+@@ -533,5 +545,5 @@
+ /* A not longer than B (M <= N) */
+
+-static char s_d2el[] = "diff2editlen";
++static const char s_d2el[] = "diff2editlen";
+ SCM diff2editlen(Fp, A, Args)
+ SCM Fp, A, Args; /* B, P_lim */
+@@ -573,5 +585,5 @@
+ }
+
+-static char s_Idiffer[] = "Idiffer.scm";
++static const char s_Idiffer[] = "Idiffer.scm";
+ void init_differ()
+ {
+--- dynl.c 2013-04-06 21:49:18.000000000 -0400
++++ dynl.c 2015-01-23 18:55:19.000000000 -0500
+@@ -45,5 +45,5 @@
+ }
+
+-static char s_link[] = "dyn:link", s_call[] = "dyn:call";
++static const char s_link[] = "dyn:link", s_call[] = "dyn:call";
+ SCM l_dyn_link(fname)
+ SCM fname;
+@@ -82,5 +82,5 @@
+ return BOOL_T;
+ }
+-static char s_main_call[] = "dyn:main-call";
++static const char s_main_call[] = "dyn:main-call";
+ SCM l_dyn_main_call(symb, shl, args)
+ SCM symb, shl, args;
+@@ -113,5 +113,5 @@
+ }
+
+-static char s_unlink[] = "dyn:unlink";
++static const char s_unlink[] = "dyn:unlink";
+ SCM l_dyn_unlink(fname)
+ SCM fname;
+@@ -165,5 +165,5 @@
+ static smobfuns shlsmob = {mark0, free0, prinshl};
+
+-static char s_link[] = "dyn:link", s_call[] = "dyn:call";
++static const char s_link[] = "dyn:link", s_call[] = "dyn:call";
+ SCM l_dyn_link(fname)
+ SCM fname;
+@@ -207,5 +207,5 @@
+ }
+
+-static char s_main_call[] = "dyn:main-call";
++static const char s_main_call[] = "dyn:main-call";
+ SCM l_dyn_main_call(symb, shl, args)
+ SCM symb, shl, args;
+@@ -235,5 +235,5 @@
+ }
+
+-static char s_unlink[] = "dyn:unlink";
++static const char s_unlink[] = "dyn:unlink";
+ SCM l_dyn_unlink(shl)
+ SCM shl;
+@@ -288,5 +288,5 @@
+ return(x);}
+
+-static char s_dynl[] = "vms:dynamic-link-call";
++static const char s_dynl[] = "vms:dynamic-link-call";
+ SCM dynl(dir, symbol, fname)
+ SCM dir, symbol, fname;
+@@ -340,5 +340,5 @@
+ # endif
+
+-sizet frshl(ptr)
++static sizet frshl(ptr)
+ CELLPTR ptr;
+ {
+@@ -352,5 +352,5 @@
+ }
+
+-int prinshl(exp, port, writing)
++static int prinshl(exp, port, writing)
+ SCM exp; SCM port; int writing;
+ {
+@@ -363,6 +363,6 @@
+ static smobfuns shlsmob = {mark0, frshl, prinshl};
+
+-static char s_link[] = "dyn:link", s_call[] = "dyn:call";
+-SCM l_dyn_link(fname)
++static const char s_link[] = "dyn:link", s_call[] = "dyn:call";
++static SCM l_dyn_link(fname)
+ SCM fname;
+ {
+@@ -393,5 +393,5 @@
+ }
+
+-SCM l_dyn_call(symb, shl)
++static SCM l_dyn_call(symb, shl)
+ SCM symb, shl;
+ {
+@@ -419,6 +419,6 @@
+ return BOOL_T;
+ }
+-static char s_main_call[] = "dyn:main-call";
+-SCM l_dyn_main_call(symb, shl, args)
++static const char s_main_call[] = "dyn:main-call";
++static SCM l_dyn_main_call(symb, shl, args)
+ SCM symb, shl, args;
+ {
+@@ -453,6 +453,6 @@
+ }
+
+-static char s_unlink[] = "dyn:unlink";
+-SCM l_dyn_unlink(shl)
++static const char s_unlink[] = "dyn:unlink";
++static SCM l_dyn_unlink(shl)
+ SCM shl;
+ {
+@@ -490,5 +490,5 @@
+ # define SHL(obj) ((void*)CDR(obj))
+
+-sizet frshl(ptr)
++static sizet frshl(ptr)
+ CELLPTR ptr;
+ {
+@@ -502,5 +502,5 @@
+ }
+
+-int prinshl(exp, port, writing)
++static int prinshl(exp, port, writing)
+ SCM exp; SCM port; int writing;
+ {
+@@ -513,6 +513,6 @@
+ static smobfuns shlsmob = {mark0, frshl, prinshl};
+
+-static char s_link[] = "dyn:link", s_call[] = "dyn:call";
+-SCM l_dyn_link(fname)
++static const char s_link[] = "dyn:link", s_call[] = "dyn:call";
++static SCM l_dyn_link(fname)
+ SCM fname;
+ {
+@@ -545,5 +545,5 @@
+ }
+
+-SCM l_dyn_call(symb, shl)
++static SCM l_dyn_call(symb, shl)
+ SCM symb, shl;
+ {
+@@ -574,6 +574,6 @@
+ return BOOL_T;
+ }
+-static char s_main_call[] = "dyn:main-call";
+-SCM l_dyn_main_call(symb, shl, args)
++static const char s_main_call[] = "dyn:main-call";
++static SCM l_dyn_main_call(symb, shl, args)
+ SCM symb, shl, args;
+ {
+@@ -610,6 +610,6 @@
+ }
+
+-static char s_unlink[] = "dyn:unlink";
+-SCM l_dyn_unlink(shl)
++static const char s_unlink[] = "dyn:unlink";
++static SCM l_dyn_unlink(shl)
+ SCM shl;
+ {
+@@ -646,5 +646,5 @@
+ # include <windows.h>
+ # define SHL(obj) ((HINSTANCE)(CDR(obj)))
+-int prinshl(exp, port, writing)
++static int prinshl(exp, port, writing)
+ SCM exp; SCM port; int writing;
+ {
+@@ -658,6 +658,6 @@
+ static smobfuns shlsmob = {mark0, free0, prinshl};
+
+-static char s_link[] = "dyn:link";
+-SCM scm_dyn_link(fname)
++static const char s_link[] = "dyn:link";
++static SCM scm_dyn_link(fname)
+ SCM fname;
+ {
+@@ -677,6 +677,6 @@
+ }
+
+-static char s_unlink[] = "dyn:unlink";
+-SCM scm_dyn_unlink(shl)
++static const char s_unlink[] = "dyn:unlink";
++static SCM scm_dyn_unlink(shl)
+ SCM shl;
+ {
+@@ -689,6 +689,6 @@
+ }
+
+-static char s_call[] = "dyn:call";
+-SCM scm_dyn_call(symb, shl)
++static const char s_call[] = "dyn:call";
++static SCM scm_dyn_call(symb, shl)
+ SCM symb, shl;
+ {
+@@ -705,6 +705,6 @@
+ }
+
+-static char s_main_call[] = "dyn:main-call";
+-SCM scm_dyn_main_call(symb, shl, args)
++static const char s_main_call[] = "dyn:main-call";
++static SCM scm_dyn_main_call(symb, shl, args)
+ SCM symb, shl, args;
+ {
+--- edline.c 2008-01-30 22:31:53.000000000 -0500
++++ edline.c 2015-01-23 18:55:19.000000000 -0500
+@@ -20,11 +20,11 @@
+
+ #include "scm.h"
++#include <readline/readline.h>
++#include <readline/history.h>
+
+-char *readline P((const char *prompt));
+-void add_history P((char *p));
+
+ /* Reads on stdin/stdout only */
+-static char s_readline[] = "read-edited-line";
+-SCM lreadline(prompt)
++static const char s_readline[] = "read-edited-line";
++static SCM lreadline(prompt)
+ SCM prompt;
+ {
+@@ -41,6 +41,6 @@
+ return res;
+ }
+-static char s_add_history[] = "add-history";
+-SCM ladd_history(line)
++static const char s_add_history[] = "add-history";
++static SCM ladd_history(line)
+ SCM line;
+ {
+@@ -49,15 +49,15 @@
+ return UNSPECIFIED;
+ }
+-static char s_def_inport[] = "default-input-port";
+-SCM def_inport()
++static const char s_def_inport[] = "default-input-port";
++static SCM def_inport()
+ {
+ return def_inp;
+ }
+-static char s_def_outport[] = "default-output-port";
+-SCM def_outport()
++static const char s_def_outport[] = "default-output-port";
++static SCM def_outport()
+ {
+ return def_outp;
+ }
+-static char s_Iedline[] = "Iedline.scm";
++static const char s_Iedline[] = "Iedline.scm";
+ void init_edline()
+ {
+--- eval.c 2013-04-06 21:52:40.000000000 -0400
++++ eval.c 2015-01-27 02:14:16.000000000 -0500
+@@ -92,37 +92,33 @@
+ transformers. */
+
+-SCM nconc2copy P((SCM x));
+-SCM scm_cp_list P((SCM x, int minlen));
+-SCM scm_v2lst P((long argc, SCM *argv, SCM end));
+-SCM renamed_ident P((SCM id, SCM env));
+-SCM eqv P((SCM x, SCM y));
+-SCM scm_multi_set P((SCM syms, SCM vals));
+-SCM eval_args P((SCM x));
+-SCM m_quote P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_begin P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_if P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_set P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_and P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_or P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_cond P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_case P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_lambda P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_letstar P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_do P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_quasiquote P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_delay P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_define P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_letrec P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_let P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_apply P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_syn_quote P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_let_syntax P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_letrec_syntax P((SCM xorig, SCM env, SCM ctxt));
+-SCM m_the_macro P((SCM xorig, SCM env, SCM ctxt));
+-void scm_dynthrow P((SCM cont, SCM arg1, SCM arg2, SCM rest));
+-void scm_egc P((void));
+-void scm_estk_grow P((void));
+-void scm_estk_shrink P((void));
+-int badargsp P((SCM formals, SCM args));
++static SCM nconc2copy P((SCM x));
++static SCM scm_cp_list P((SCM x, int minlen));
++static SCM scm_v2lst P((long argc, SCM *argv, SCM end));
++static SCM scm_multi_set P((SCM syms, SCM vals));
++static SCM eval_args P((SCM x));
++static SCM m_quote P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_begin P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_if P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_set P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_and P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_or P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_cond P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_case P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_lambda P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_letstar P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_do P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_quasiquote P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_delay P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_define P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_letrec P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_let P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_apply P((SCM xorig, SCM env, SCM ctxt));
++#ifdef MACRO
++static SCM m_syn_quote P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_let_syntax P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_letrec_syntax P((SCM xorig, SCM env, SCM ctxt));
++static SCM m_the_macro P((SCM xorig, SCM env, SCM ctxt));
++#endif
++static int badargsp P((SCM formals, SCM args));
+
+ static SCM *lookupcar P((SCM vloc));
+@@ -132,5 +128,9 @@
+ static SCM evalatomcar P((SCM x, int no_error));
+ static SCM evalcar P((SCM x));
++#ifdef MACRO
+ static SCM id2sym P((SCM id));
++static int topdenote_eq P((SCM sym, SCM id, SCM env));
++static int prinid P((SCM exp, SCM port, int writing));
++#endif
+ static SCM iqq P((SCM form));
+ static SCM m_body P((SCM xorig, SCM env, SCM ctxt));
+@@ -151,8 +151,6 @@
+ static SCM m_expr P((SCM x, SCM env, SCM ctxt));
+ static void checked_define P((SCM name, SCM val, const char *what));
+-static int topdenote_eq P((SCM sym, SCM id, SCM env));
+ static int constant_p P((SCM x));
+ static int prinenv P((SCM exp, SCM port, int writing));
+-static int prinid P((SCM exp, SCM port, int writing));
+ static int prinmacro P((SCM exp, SCM port, int writing));
+ static int prinprom P((SCM exp, SCM port, int writing));
+@@ -238,5 +236,5 @@
+ #ifdef MACRO
+ long tc16_ident; /* synthetic macro identifier */
+-static char s_escaped[] = "escaped synthetic identifier";
++static const char s_escaped[] = "escaped synthetic identifier";
+ # define KEYWORDP(x) (NIMP(x) && IM_KEYWORD==CAR(x))
+ # define KEYWORD_MACRO CDR
+@@ -317,5 +315,5 @@
+ SCM x;
+ {
+- register CELLPTR ptr;
++ CELLPTR ptr;
+ if (NCELLP(x)) return 0;
+ ptr = (CELLPTR)SCM2PTR(x);
+@@ -377,9 +375,9 @@
+ #endif /* CAREFUL_INTS */
+
+-SCM *ilookup(iloc)
++static SCM *ilookup(iloc)
+ SCM iloc;
+ {
+- register int ir = IFRAME(iloc);
+- register SCM er, *eloc;
++ int ir = IFRAME(iloc);
++ SCM er, *eloc;
+ #ifdef SCM_PROFILE
+ ilookup_cases[ir<10 ? ir : 9]
+@@ -398,9 +396,9 @@
+ return &CAR(*eloc);
+ }
+-SCM *farlookup(farloc)
++static SCM *farlookup(farloc)
+ SCM farloc;
+ {
+- register int ir;
+- register SCM er;
++ int ir;
++ SCM er;
+ SCM x = CDR(farloc);
+ DEFER_INTS_EGC;
+@@ -417,7 +415,9 @@
+ }
+
+-char s_badenv[] = "damaged environment";
+-static char s_lookup[] = "scm_env_lookup",
++const char s_badenv[] = "damaged environment";
++static const char s_lookup[] = "scm_env_lookup",
++#ifdef MACRO
+ s_badkey[] = "Use of keyword as variable",
++#endif
+ s_unbnd[] = "unbound variable: ",
+ s_wtap[] = "Wrong type to apply: ",
+@@ -861,6 +861,6 @@
+ }
+
+-static char s_values[] = "values";
+-static char s_call_wv[] = "call-with-values";
++static const char s_values[] = "values";
++static const char s_call_wv[] = "call-with-values";
+ SCM scm_values(arg1, arg2, rest, what)
+ SCM arg1, arg2, rest;
+@@ -877,15 +877,15 @@
+ * some memoized forms have different syntax */
+
+-static char s_expression[] = "missing or extra expression";
+-static char s_test[] = "bad test";
+-static char s_body[] = "bad body";
+-static char s_bindings[] = "bad bindings";
+-static char s_variable[] = "bad variable";
+-static char s_bad_else_clause[] = "bad ELSE clause";
+-static char s_clauses[] = "bad or missing clauses";
+-static char s_formals[] = "bad formals";
+-static char s_expr[] = "bad expression";
++static const char s_expression[] = "missing or extra expression";
++static const char s_test[] = "bad test";
++static const char s_body[] = "bad body";
++static const char s_bindings[] = "bad bindings";
++static const char s_variable[] = "bad variable";
++static const char s_bad_else_clause[] = "bad ELSE clause";
++static const char s_clauses[] = "bad or missing clauses";
++static const char s_formals[] = "bad formals";
++static const char s_expr[] = "bad expression";
+ #define ASSYNT(_cond, _arg, _pos, _subr)\
+- if (!(_cond))scm_experr(_arg, (char *)_pos, _subr);
++ if (!(_cond))scm_experr(_arg, (const char *)_pos, _subr);
+
+ /* These symbols are needed by the reader, in repl.c */
+@@ -1157,5 +1157,5 @@
+ {
+ SCM v1, vs;
+- char *opstr = ISYMCHARS(op) + 2;
++ const char *opstr = ISYMCHARS(op) + 2;
+ int argc = 0;
+ vars = scm_check_linum(vars, 0L);
+@@ -1218,6 +1218,6 @@
+ static int env_depth()
+ {
+- register int depth = 0;
+- register SCM env;
++ int depth = 0;
++ SCM env;
+ DEFER_INTS_EGC;
+ env = scm_env;
+@@ -1231,5 +1231,5 @@
+ int depth;
+ {
+- register SCM env;
++ SCM env;
+ DEFER_INTS_EGC;
+ env = scm_env;
+@@ -1253,5 +1253,5 @@
+ #endif
+
+-static char s_nullenv_p[] = "scm_nullenv_p";
++static const char s_nullenv_p[] = "scm_nullenv_p";
+ int scm_nullenv_p(env)
+ SCM env;
+@@ -1468,7 +1468,6 @@
+ }
+
+-extern char s_redefining[];
+ #ifndef RECKLESS
+-char s_built_in_syntax[] = "built-in syntax ";
++static const char s_built_in_syntax[] = "built-in syntax ";
+ # define s_syntax (&s_built_in_syntax[9])
+ #endif
+@@ -1993,6 +1992,6 @@
+ #endif
+
+-char s_map[] = "map", s_for_each[] = "for-each", s_eval[] = "@eval";
+-char s_call_cc[] = "call-with-current-continuation"; /* s_apply[] = "apply"; */
++const char s_map[] = "map", s_for_each[] = "for-each", s_eval[] = "@eval";
++const char s_call_cc[] = "call-with-current-continuation"; /* s_apply[] = "apply"; */
+
+ /* static int checking_defines_p(ctxt) SCM ctxt; */
+@@ -2055,9 +2054,9 @@
+ }
+
+-SCM scm_apply_cxr(proc, arg1)
++static SCM scm_apply_cxr(proc, arg1)
+ SCM proc, arg1;
+ {
+- double y;
+ #ifdef FLOATS
++ double y;
+ if (SUBRF(proc)) {
+ if (INUMP(arg1)) {
+@@ -2821,6 +2820,6 @@
+ }
+
+-static char s_proc_doc[] = "procedure-documentation";
+-SCM l_proc_doc(proc)
++static const char s_proc_doc[] = "procedure-documentation";
++static SCM l_proc_doc(proc)
+ SCM proc;
+ {
+@@ -3169,5 +3168,5 @@
+ int argc;
+ {
+- register SCM z;
++ SCM z;
+ NEWCELL(z);
+ SETCODE(z, code);
+@@ -3186,5 +3185,5 @@
+ SCM code;
+ {
+- register SCM z;
++ SCM z;
+ NEWCELL(z);
+ CDR(z) = code;
+@@ -3210,5 +3209,5 @@
+ const char *what;
+ {
+- register SCM z;
++ SCM z;
+ ASRTER(scm_arity_check(code, (MAC_PRIMITIVE & flags ? 3L : 2L),
+ (char *)0), code, ARG1, what);
+@@ -3218,5 +3217,5 @@
+ return z;
+ }
+-static char s_makacro[] = "procedure->syntax";
++static const char s_makacro[] = "procedure->syntax";
+ SCM makacro(code)
+ SCM code;
+@@ -3224,5 +3223,5 @@
+ return makro(code, MAC_ACRO, s_makacro);
+ }
+-static char s_makmacro[] = "procedure->macro";
++static const char s_makmacro[] = "procedure->macro";
+ SCM makmacro(code)
+ SCM code;
+@@ -3230,5 +3229,5 @@
+ return makro(code, MAC_MACRO, s_makmacro);
+ }
+-static char s_makmmacro[] = "procedure->memoizing-macro";
++static const char s_makmmacro[] = "procedure->memoizing-macro";
+ SCM makmmacro(code)
+ SCM code;
+@@ -3236,5 +3235,5 @@
+ return makro(code, MAC_MMACRO, s_makmmacro);
+ }
+-static char s_makidmacro[] = "procedure->identifier-macro";
++static const char s_makidmacro[] = "procedure->identifier-macro";
+ SCM makidmacro(code)
+ SCM code;
+@@ -3251,6 +3250,6 @@
+ (BEGIN #F) will be returned instead of #F if #F is the result.
+ */
+-static char s_macroexpand1[] = "@macroexpand1";
+-SCM scm_macroexpand1(x, env)
++static const char s_macroexpand1[] = "@macroexpand1";
++static SCM scm_macroexpand1(x, env)
+ SCM x, env;
+ {
+@@ -3276,6 +3275,6 @@
+ }
+
+-static char s_eval_syntax[] = "eval-syntax";
+-SCM scm_eval_syntax(x, env)
++static const char s_eval_syntax[] = "eval-syntax";
++static SCM scm_eval_syntax(x, env)
+ SCM x, env;
+ {
+@@ -3403,6 +3402,6 @@
+ }
+
+-static char s_definedp[] = "defined?";
+-SCM definedp(xorig, env, ctxt)
++static const char s_definedp[] = "defined?";
++static SCM definedp(xorig, env, ctxt)
+ SCM xorig, env, ctxt;
+ {
+@@ -3422,5 +3421,5 @@
+
+ #ifdef MACRO
+-static char s_identp[] = "identifier?";
++static const char s_identp[] = "identifier?";
+ SCM identp(obj)
+ SCM obj;
+@@ -3429,5 +3428,5 @@
+ }
+
+-static char s_ident_eqp[] = "identifier-equal?";
++static const char s_ident_eqp[] = "identifier-equal?";
+ SCM ident_eqp(id1, id2, env)
+ SCM id1, id2, env;
+@@ -3454,5 +3453,5 @@
+ }
+
+-static char s_ident2sym[] = "identifier->symbol";
++static const char s_ident2sym[] = "identifier->symbol";
+ SCM ident2sym(id)
+ SCM id;
+@@ -3463,5 +3462,5 @@
+ }
+
+-static char s_renamed_ident[] = "renamed-identifier";
++static const char s_renamed_ident[] = "renamed-identifier";
+ SCM renamed_ident(id, env)
+ SCM id, env;
+@@ -3500,5 +3499,5 @@
+ }
+
+-static char s_syn_quote[] = "syntax-quote";
++static const char s_syn_quote[] = "syntax-quote";
+ SCM m_syn_quote(xorig, env, ctxt)
+ SCM xorig, env, ctxt;
+@@ -3508,6 +3507,6 @@
+ }
+
+-static char s_defsyntax[] = "defsyntax";
+-SCM m_defsyntax(xorig, env, ctxt)
++static const char s_defsyntax[] = "defsyntax";
++static SCM m_defsyntax(xorig, env, ctxt)
+ SCM xorig, env, ctxt;
+ {
+@@ -3541,5 +3540,5 @@
+ return cons2(IM_LET_SYNTAX, env, m_body(body, env, ctxt));
+ }
+-static char s_letrec_syntax[] = "letrec-syntax";
++static const char s_letrec_syntax[] = "letrec-syntax";
+ SCM m_letrec_syntax(xorig, env, ctxt)
+ SCM xorig, env, ctxt;
+@@ -3564,5 +3563,5 @@
+ }
+
+-static char s_the_macro[] = "the-macro";
++static const char s_the_macro[] = "the-macro";
+ SCM m_the_macro(xorig, env, ctxt)
+ SCM xorig, env, ctxt;
+@@ -3624,5 +3623,5 @@
+ #endif
+
+-SCM make_synt(name, flags, fcn)
++static SCM make_synt(name, flags, fcn)
+ const char *name;
+ long flags;
+@@ -3638,10 +3637,10 @@
+ return CAR(symcell);
+ }
+-SCM make_specfun(name, typ, flags)
+- char *name;
++static SCM make_specfun(name, typ, flags)
++ const char *name;
+ int typ, flags;
+ {
+ SCM symcell = sysintern(name, UNDEFINED);
+- register SCM z;
++ SCM z;
+ NEWCELL(z);
+ CAR(z) = (long)typ | ((long)flags)<<16;
+--- findexec.c 2012-12-18 23:00:10.000000000 -0500
++++ findexec.c 2015-01-23 18:55:19.000000000 -0500
+@@ -132,4 +132,6 @@
+ # endif
+
++#include "scm.h"
++
+ static char *copy_of(s)
+ register const char *s;
+@@ -154,6 +156,6 @@
+ const char *name;
+ {
+- char *search;
+- register char *p;
++ const char *search;
++ const char *p;
+ char tbuf[MAXPATHLEN];
+
+@@ -173,6 +175,6 @@
+ }
+
+- if (((search = (char *) getenv("DLDPATH")) == 0) &&
+- ((search = (char *) getenv("PATH")) == 0))
++ if (((search = getenv("DLDPATH")) == 0) &&
++ ((search = getenv("PATH")) == 0))
+ search = DEFAULT_PATH;
+
+--- gmalloc.c 2008-01-30 22:44:00.000000000 -0500
++++ gmalloc.c 2015-01-23 18:55:19.000000000 -0500
+@@ -1622,5 +1622,5 @@
+ #endif
+ #else
+-#ifndef __osf__ /* declared in <unistd.h> */
++#ifndef __FreeBSD__ /* declared in <unistd.h> */
+ #ifndef hpux /* declared in <unistd.h> */
+ #ifndef __svr4__ /* declared in <unistd.h> */
+--- gsubr.c 2008-01-30 22:32:00.000000000 -0500
++++ gsubr.c 2015-01-23 18:55:19.000000000 -0500
+@@ -31,35 +31,7 @@
+
+ static SCM f_gsubr_apply;
+-SCM make_gsubr(name, req, opt, rst, fcn)
+- const char *name;
+- int req, opt, rst;
+- SCM (*fcn)();
+-{
+- switch GSUBR_MAKTYPE(req, opt, rst) {
+- case GSUBR_MAKTYPE(0, 0, 0): return make_subr(name, tc7_subr_0, fcn);
+- case GSUBR_MAKTYPE(1, 0, 0): return make_subr(name, tc7_subr_1, fcn);
+- case GSUBR_MAKTYPE(0, 1, 0): return make_subr(name, tc7_subr_1o, fcn);
+- case GSUBR_MAKTYPE(1, 1, 0): return make_subr(name, tc7_subr_2o, fcn);
+- case GSUBR_MAKTYPE(2, 0, 0): return make_subr(name, tc7_subr_2, fcn);
+- case GSUBR_MAKTYPE(3, 0, 0): return make_subr(name, tc7_subr_3, fcn);
+- case GSUBR_MAKTYPE(0, 0, 1): return make_subr(name, tc7_lsubr, fcn);
+- case GSUBR_MAKTYPE(2, 0, 1): return make_subr(name, tc7_lsubr_2, fcn);
+- default:
+- {
+- SCM symcell = sysintern(name, UNDEFINED);
+- SCM z = scm_maksubr(name, tc7_subr_0, fcn);
+- SCM cclo = makcclo(f_gsubr_apply, 3L);
+- ASRTER(GSUBR_MAX >= req + opt + rst, MAKINUM(req + opt + rst),
+- OUTOFRANGE, "make_gsubr");
+- GSUBR_PROC(cclo) = z;
+- GSUBR_TYPE(cclo) = MAKINUM(GSUBR_MAKTYPE(req, opt, rst));
+- CDR(symcell) = cclo;
+- return cclo;
+- }
+- }
+-}
+
+-char s_gsubr_apply[] = " gsubr-apply";
+-SCM gsubr_apply(args)
++static const char s_gsubr_apply[] = " gsubr-apply";
++static SCM gsubr_apply(args)
+ SCM args;
+ {
+@@ -69,5 +41,4 @@
+ int i, n = GSUBR_REQ(typ) + GSUBR_OPT(typ) + GSUBR_REST(typ);
+ SCM v[10];
+- if (n > 10) wta(self, "internal programming error", s_gsubr_apply);
+ args = CDR(args);
+ for (i = 0; i < GSUBR_REQ(typ); i++) {
+@@ -101,9 +72,8 @@
+ case 9: return (*fcn)(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8]);
+ case 10: return (*fcn)(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]);
++ default: wta(self, "internal programming error", s_gsubr_apply);
+ }
+ }
+
+-SCM_DLL_EXPORT void init_gsubr P((void));
+-
+ void init_gsubr()
+ {
+--- ioext.c 2010-04-01 15:05:09.000000000 -0400
++++ ioext.c 2015-01-23 18:55:19.000000000 -0500
+@@ -35,5 +35,4 @@
+ # include <io.h>
+ # endif
+-SCM stat2scm P((struct stat *stat_temp));
+ /* int mkdir P((const char *path, mode_t mode)); */
+ #endif
+@@ -107,6 +106,6 @@
+ #endif
+
+-static char s_read_line[] = "read-line";
+-SCM read_line(port)
++static const char s_read_line[] = "read-line";
++static SCM read_line(port)
+ SCM port;
+ {
+@@ -136,6 +135,6 @@
+ }
+ }
+-static char s_read_line1[] = "read-line!";
+-SCM read_line1(str, port)
++static const char s_read_line1[] = "read-line!";
++static SCM read_line1(str, port)
+ SCM str, port;
+ {
+@@ -166,6 +165,6 @@
+ }
+ }
+-static char s_write_line[] = "write-line";
+-SCM l_write_line(obj, port)
++static const char s_write_line[] = "write-line";
++static SCM l_write_line(obj, port)
+ SCM obj, port;
+ {
+@@ -174,6 +173,6 @@
+ }
+
+-static char s_reopen_file[] = "reopen-file";
+-SCM reopen_file(filename, modes, port)
++static const char s_reopen_file[] = "reopen-file";
++static SCM reopen_file(filename, modes, port)
+ SCM filename, modes, port;
+ {
+@@ -205,6 +204,6 @@
+ #ifndef MCH_AMIGA
+ # ifndef macintosh
+-static char s_dup[]="duplicate-port";
+-SCM l_dup(oldpt, modes)
++static const char s_dup[]="duplicate-port";
++static SCM l_dup(oldpt, modes)
+ SCM oldpt, modes;
+ {
+@@ -239,6 +238,6 @@
+ return newpt;
+ }
+-static char s_dup2[]="redirect-port!";
+-SCM l_dup2(into_pt, from_pt)
++static const char s_dup2[]="redirect-port!";
++static SCM l_dup2(into_pt, from_pt)
+ SCM into_pt, from_pt;
+ {
+@@ -257,11 +256,11 @@
+
+ # ifndef vms
+-static char s_opendir[]="opendir";
+-static char s_readdir[]="readdir";
+-static char s_rewinddir[]="rewinddir";
+-static char s_closedir[]="closedir";
++static const char s_opendir[]="opendir";
++static const char s_readdir[]="readdir";
++static const char s_rewinddir[]="rewinddir";
++static const char s_closedir[]="closedir";
+ # ifndef _WIN32
+ # include <dirent.h>
+-SCM l_opendir(dirname)
++static SCM l_opendir(dirname)
+ SCM dirname;
+ {
+@@ -279,5 +278,5 @@
+ }
+
+-SCM l_readdir(port)
++static SCM l_readdir(port)
+ SCM port;
+ {
+@@ -292,5 +291,5 @@
+ }
+
+-SCM l_rewinddir(port)
++static SCM l_rewinddir(port)
+ SCM port;
+ {
+@@ -300,5 +299,5 @@
+ }
+
+-SCM l_closedir(port)
++static SCM l_closedir(port)
+ SCM port;
+ {
+@@ -314,5 +313,5 @@
+ }
+
+-int dir_print(sexp, port, writing)
++static int dir_print(sexp, port, writing)
+ SCM sexp; SCM port; int writing;
+ {
+@@ -320,5 +319,5 @@
+ return !0;
+ }
+-sizet dir_free(p)
++static sizet dir_free(p)
+ CELLPTR p;
+ {
+@@ -334,5 +333,5 @@
+ };
+
+-SCM l_opendir(dirname)
++static SCM l_opendir(dirname)
+ SCM dirname;
+ {
+@@ -362,5 +361,5 @@
+ }
+
+-SCM l_readdir(port)
++static SCM l_readdir(port)
+ SCM port;
+ {
+@@ -382,5 +381,5 @@
+ }
+
+-SCM l_rewinddir(port)
++static SCM l_rewinddir(port)
+ SCM port;
+ {
+@@ -396,5 +395,5 @@
+ }
+
+-SCM l_closedir(port)
++static SCM l_closedir(port)
+ SCM port;
+ {
+@@ -429,5 +428,5 @@
+ return 0;
+ }
+-SCM dir_mark(ptr)
++static SCM dir_mark(ptr)
+ SCM ptr;
+ {
+@@ -439,6 +438,6 @@
+ # endif /* vms */
+
+-static char s_mkdir[] = "mkdir";
+-SCM l_mkdir(path, mode)
++static const char s_mkdir[] = "mkdir";
++static SCM l_mkdir(path, mode)
+ SCM path, mode;
+ {
+@@ -455,8 +454,8 @@
+ }
+ # ifdef vms
+-static char s_dot_dir[] = ".DIR";
++static const char s_dot_dir[] = ".DIR";
+ # endif
+-static char s_rmdir[] = "rmdir";
+-SCM l_rmdir(path)
++static const char s_rmdir[] = "rmdir";
++static SCM l_rmdir(path)
+ SCM path;
+ {
+@@ -473,6 +472,6 @@
+
+ #ifndef THINK_C
+-static char s_chdir[] = "chdir";
+-SCM lchdir(str)
++static const char s_chdir[] = "chdir";
++static SCM lchdir(str)
+ SCM str;
+ {
+@@ -486,5 +485,5 @@
+ # include <dir.h>
+ # endif
+-SCM l_getcwd()
++static SCM l_getcwd()
+ {
+ char *ans;
+@@ -500,6 +499,6 @@
+
+ # ifndef __MWERKS__
+-static char s_chmod[] = "chmod";
+-SCM l_chmod(pathname, mode)
++static const char s_chmod[] = "chmod";
++static SCM l_chmod(pathname, mode)
+ SCM pathname, mode;
+ {
+@@ -522,6 +521,6 @@
+ # endif
+ # endif
+-static char s_utime[] = "utime";
+-SCM l_utime(pathname, acctime, modtime)
++static const char s_utime[] = "utime";
++static SCM l_utime(pathname, acctime, modtime)
+ SCM pathname, acctime, modtime;
+ {
+@@ -537,6 +536,6 @@
+
+ # ifndef __MWERKS__
+-static char s_umask[] = "umask";
+-SCM l_umask(mode)
++static const char s_umask[] = "umask";
++static SCM l_umask(mode)
+ SCM mode;
+ {
+@@ -548,6 +547,6 @@
+ #endif /* THINK_C */
+
+-static char s_ren_fil[] = "rename-file";
+-SCM ren_fil(oldname, newname)
++static const char s_ren_fil[] = "rename-file";
++static SCM ren_fil(oldname, newname)
+ SCM oldname, newname;
+ {
+@@ -570,6 +569,6 @@
+ #endif
+ }
+-static char s_copy_file[] = "copy-file";
+-SCM scm_copy_file(oldname, newname)
++static const char s_copy_file[] = "copy-file";
++static SCM scm_copy_file(oldname, newname)
+ SCM oldname, newname;
+ {
+@@ -618,6 +617,6 @@
+ }
+
+-static char s_fileno[] = "fileno";
+-SCM l_fileno(port)
++static const char s_fileno[] = "fileno";
++static SCM l_fileno(port)
+ SCM port;
+ {
+@@ -634,6 +633,6 @@
+ # define R_OK 04
+ # endif
+-static char s_access[] = "access";
+-SCM l_access(pathname, mode)
++static const char s_access[] = "access";
++static SCM l_access(pathname, mode)
+ SCM pathname, mode;
+ {
+@@ -653,8 +652,6 @@
+ # endif /* __MWERKS__ */
+
+-SCM stat2scm P((struct stat *stat_temp));
+-
+-char s_stat[] = "stat";
+-SCM l_stat(str)
++static const char s_stat[] = "stat";
++static SCM l_stat(str)
+ SCM str;
+ {
+@@ -677,5 +674,5 @@
+ # ifdef MCH_AMIGA
+ SCM stat2scm(stat_temp)
+- struct stat *stat_temp;
++ const struct stat *stat_temp;
+ {
+ SCM ans = make_vector(MAKINUM(3), UNSPECIFIED);
+@@ -688,5 +685,5 @@
+ # else
+ SCM stat2scm(stat_temp)
+- struct stat *stat_temp;
++ const struct stat *stat_temp;
+ {
+ SCM ans = make_vector(MAKINUM(11), UNSPECIFIED);
+@@ -708,5 +705,5 @@
+ # include <process.h>
+ # endif
+-SCM l_getpid()
++static SCM l_getpid()
+ {
+ return MAKINUM((unsigned long)getpid());
+@@ -722,8 +719,8 @@
+ # include <process.h>
+ # endif
+-char s_execv[] = "execv";
+-char s_execvp[] = "execvp";
+-SCM i_execv(modes, path, args)
+- char * modes;
++const char s_execv[] = "execv";
++const char s_execvp[] = "execvp";
++static SCM i_execv(modes, path, args)
++ const char * modes;
+ SCM path, args;
+ {
+@@ -743,26 +740,26 @@
+ return MAKINUM(errno);
+ }
+-SCM lexec(path, arg0, args)
++static SCM lexec(path, arg0, args)
+ SCM path, arg0, args;
+ {
+ return i_execv("", path, cons(arg0, args));
+ }
+-SCM lexecp(path, arg0, args)
++static SCM lexecp(path, arg0, args)
+ SCM path, arg0, args;
+ {
+ return i_execv("p", path, cons(arg0, args));
+ }
+-SCM lexecv(path, args)
++static SCM lexecv(path, args)
+ SCM path, args;
+ {
+ return i_execv("", path, args);
+ }
+-SCM lexecvp(path, args)
++static SCM lexecvp(path, args)
+ SCM path, args;
+ {
+ return i_execv("p", path, args);
+ }
+-static char s_putenv[] = "putenv";
+-SCM l_putenv(str)
++static const char s_putenv[] = "putenv";
++static SCM l_putenv(str)
+ SCM str;
+ {
+@@ -819,5 +816,5 @@
+ #include <fcntl.h> /* for O_RDONLY, O_RDWR, O_EXCL */
+ #ifdef O_EXCL
+-SCM scm_try_create_file(fname, modes, perms)
++static SCM scm_try_create_file(fname, modes, perms)
+ SCM fname, modes, perms;
+ {
+@@ -865,6 +862,4 @@
+ {0, 0}};
+
+-SCM_DLL_EXPORT void init_ioext P((void));
+-
+ void init_ioext()
+ {
+--- posix.c 2008-01-30 22:32:26.000000000 -0500
++++ posix.c 2015-01-23 18:55:19.000000000 -0500
+@@ -46,6 +46,6 @@
+ #endif
+
+-static char s_chown[] = "chown";
+-SCM l_chown(path, owner, group)
++static const char s_chown[] = "chown";
++static SCM l_chown(path, owner, group)
+ SCM path, owner, group;
+ {
+@@ -58,6 +58,6 @@
+ }
+
+-static char s_link[] = "link";
+-SCM l_link(oldpath, newpath)
++static const char s_link[] = "link";
++static SCM l_link(oldpath, newpath)
+ SCM oldpath, newpath;
+ {
+@@ -69,5 +69,5 @@
+ }
+
+-SCM l_pipe()
++static SCM l_pipe()
+ {
+ int fd[2], ret;
+@@ -96,6 +96,6 @@
+ }
+
+-char s_op_pipe[] = "open-pipe";
+-SCM open_pipe(pipestr, modes)
++const char s_op_pipe[] = "open-pipe";
++static SCM open_pipe(pipestr, modes)
+ SCM pipestr, modes;
+ {
+@@ -118,6 +118,6 @@
+ }
+
+-static char scm_s_getgroups[] = "getgroups";
+-SCM scm_getgroups()
++static const char scm_s_getgroups[] = "getgroups";
++static SCM scm_getgroups()
+ {
+ SCM grps, ans;
+@@ -147,6 +147,6 @@
+ before access to that structure is completed */
+
+-static char s_pwinfo[] = "getpw";
+-SCM l_pwinfo(user)
++static const char s_pwinfo[] = "getpw";
++static SCM l_pwinfo(user)
+ SCM user;
+ {
+@@ -173,6 +173,6 @@
+ }
+ #include <grp.h>
+-static char s_grinfo[] = "getgr";
+-SCM l_grinfo(name)
++static const char s_grinfo[] = "getgr";
++static SCM l_grinfo(name)
+ SCM name;
+ {
+@@ -192,8 +192,8 @@
+ ve[ 1] = makfrom0str(entry->gr_passwd);
+ ve[ 2] = ulong2num((unsigned long)entry->gr_gid);
+- ve[ 3] = makfromstrs(-1, entry->gr_mem);
++ ve[ 3] = makfromstrs(-1, (const char * const *)entry->gr_mem);
+ return ans;
+ }
+-SCM l_setgr(arg)
++static SCM l_setgr(arg)
+ SCM arg;
+ {
+@@ -202,5 +202,5 @@
+ return UNSPECIFIED;
+ }
+-SCM l_setpw(arg)
++static SCM l_setpw(arg)
+ SCM arg;
+ {
+@@ -210,6 +210,6 @@
+ }
+
+-static char s_kill[] = "kill";
+-SCM l_kill(pid, sig)
++static const char s_kill[] = "kill";
++static SCM l_kill(pid, sig)
+ SCM pid, sig;
+ {
+@@ -220,6 +220,6 @@
+ return MAKINUM(0L+i);
+ }
+-static char s_waitpid[] = "waitpid";
+-SCM l_waitpid(pid, options)
++static const char s_waitpid[] = "waitpid";
++static SCM l_waitpid(pid, options)
+ SCM pid, options;
+ {
+@@ -231,23 +231,23 @@
+ }
+
+-SCM l_getppid()
++static SCM l_getppid()
+ {
+ return MAKINUM(0L+getppid());
+ }
+
+-SCM l_getuid()
++static SCM l_getuid()
+ {
+ return MAKINUM(0L+getuid());
+ }
+-SCM l_getgid()
++static SCM l_getgid()
+ {
+ return MAKINUM(0L+getgid());
+ }
+ #ifndef LACK_E_IDs
+-SCM l_geteuid()
++static SCM l_geteuid()
+ {
+ return MAKINUM(0L+geteuid());
+ }
+-SCM l_getegid()
++static SCM l_getegid()
+ {
+ return MAKINUM(0L+getegid());
+@@ -255,6 +255,6 @@
+ #endif
+
+-static char s_setuid[] = "setuid";
+-SCM l_setuid(id)
++static const char s_setuid[] = "setuid";
++static SCM l_setuid(id)
+ SCM id;
+ {
+@@ -262,6 +262,6 @@
+ return setuid(INUM(id)) ? BOOL_F : BOOL_T;
+ }
+-static char s_setgid[] = "setgid";
+-SCM l_setgid(id)
++static const char s_setgid[] = "setgid";
++static SCM l_setgid(id)
+ SCM id;
+ {
+@@ -271,6 +271,6 @@
+
+ #ifndef LACK_E_IDs
+-static char s_seteuid[] = "seteuid";
+-SCM l_seteuid(id)
++static const char s_seteuid[] = "seteuid";
++static SCM l_seteuid(id)
+ SCM id;
+ {
+@@ -278,6 +278,6 @@
+ return seteuid(INUM(id)) ? BOOL_F : BOOL_T;
+ }
+-static char s_setegid[] = "setegid";
+-SCM l_setegid(id)
++static const char s_setegid[] = "setegid";
++static SCM l_setegid(id)
+ SCM id;
+ {
+@@ -287,6 +287,6 @@
+ #endif
+
+-static char s_ttyname[] = "ttyname";
+-SCM l_ttyname(port)
++static const char s_ttyname[] = "ttyname";
++static SCM l_ttyname(port)
+ SCM port;
+ {
+@@ -299,5 +299,5 @@
+ }
+
+-SCM l_fork()
++static SCM l_fork()
+ {
+ long pid = 0L + fork();
+@@ -306,5 +306,5 @@
+
+ #include <sys/utsname.h>
+-SCM l_uname()
++static SCM l_uname()
+ {
+ struct utsname buf;
+--- ramap.c 2013-03-12 23:30:27.000000000 -0400
++++ ramap.c 2015-01-23 18:55:19.000000000 -0500
+@@ -21,8 +21,8 @@
+ #include "scm.h"
+
+-SCM sc2array P((SCM s, SCM ra, SCM prot));
++static SCM sc2array P((SCM s, SCM ra, SCM prot));
+
+ typedef struct {
+- char *name;
++ const char *name;
+ SCM sproc;
+ int (* vproc)();
+@@ -64,5 +64,5 @@
+ 0 --> no match.
+ */
+-int ra_matchp(ra0, ras)
++static int ra_matchp(ra0, ras)
+ SCM ra0, ras;
+ {
+@@ -137,6 +137,6 @@
+ }
+
+-static char s_ra_mismatch[] = "array shape mismatch";
+-int ramapc(cproc, data, ra0, lra, what)
++static const char s_ra_mismatch[] = "array shape mismatch";
++static int ramapc(cproc, data, ra0, lra, what)
+ int (*cproc)();
+ SCM data, ra0, lra;
+@@ -258,5 +258,5 @@
+ }
+
+-SCM array_fill(ra, fill)
++static SCM array_fill(ra, fill)
+ SCM ra, fill;
+ {
+@@ -265,6 +265,6 @@
+ }
+
+-static char s_sarray_copy[] = "serial-array:copy!";
+-static char s_array_copy[] = "array:copy!";
++static const char s_sarray_copy[] = "serial-array:copy!";
++static const char s_array_copy[] = "array:copy!";
+ static int racp(src, dst)
+ SCM dst, src;
+@@ -466,5 +466,5 @@
+ return 1;
+ }
+-SCM array_copy(dst, src)
++static SCM array_copy(dst, src)
+ SCM dst;
+ SCM src;
+@@ -479,5 +479,5 @@
+ }
+
+-SCM ra2contig(ra, copy)
++static SCM ra2contig(ra, copy)
+ SCM ra;
+ int copy;
+@@ -511,6 +511,6 @@
+ }
+
+-static char s_ura_rd[] = "uniform-array-read!";
+-SCM ura_read(ra, port)
++static const char s_ura_rd[] = "uniform-array-read!";
++static SCM ura_read(ra, port)
+ SCM ra, port;
+ {
+@@ -525,6 +525,6 @@
+ }
+
+-static char s_ura_wr[] = "uniform-array-write";
+-SCM ura_write(ra, port)
++static const char s_ura_wr[] = "uniform-array-write";
++static SCM ura_write(ra, port)
+ SCM ra, port;
+ {
+@@ -535,5 +535,5 @@
+ }
+
+-static char s_sc2array[] = "scalar->array";
++static const char s_sc2array[] = "scalar->array";
+ SCM sc2array(s, ra, prot)
+ SCM s, ra, prot;
+@@ -604,5 +604,5 @@
+
+ /* Functions callable by ARRAY-MAP! */
+-int ra_eqp(ra0, ras)
++static int ra_eqp(ra0, ras)
+ SCM ra0, ras;
+ {
+@@ -725,20 +725,20 @@
+ return 1;
+ }
+-int ra_lessp(ra0, ras)
++static int ra_lessp(ra0, ras)
+ SCM ra0, ras;
+ {
+ return ra_compare(ra0, CAR(ras), CAR(CDR(ras)), 0);
+ }
+-int ra_leqp(ra0, ras)
++static int ra_leqp(ra0, ras)
+ SCM ra0, ras;
+ {
+ return ra_compare(ra0, CAR(CDR(ras)), CAR(ras), 1);
+ }
+-int ra_grp(ra0, ras)
++static int ra_grp(ra0, ras)
+ SCM ra0, ras;
+ {
+ return ra_compare(ra0, CAR(CDR(ras)), CAR(ras), 0);
+ }
+-int ra_greqp(ra0, ras)
++static int ra_greqp(ra0, ras)
+ SCM ra0, ras;
+ {
+@@ -746,5 +746,5 @@
+ }
+
+-int ra_sum(ra0, ras)
++static int ra_sum(ra0, ras)
+ SCM ra0, ras;
+ {
+@@ -832,5 +832,5 @@
+ }
+
+-int ra_difference(ra0, ras)
++static int ra_difference(ra0, ras)
+ SCM ra0, ras;
+ {
+@@ -963,5 +963,5 @@
+ }
+
+-int ra_product(ra0, ras)
++static int ra_product(ra0, ras)
+ SCM ra0, ras;
+ {
+@@ -1052,5 +1052,5 @@
+ return 1;
+ }
+-int ra_divide(ra0, ras)
++static int ra_divide(ra0, ras)
+ SCM ra0, ras;
+ {
+@@ -1209,5 +1209,8 @@
+ ra1 = ARRAY_V(ra1);
+ switch TYP7(ra0) {
+- default: gencase:
++ default:
++#ifdef FLOATS
++ gencase:
++#endif
+ for (; n-- > 0; i0 += inc0, i1 += inc1) {
+ e1 = cvref(ra1, i1, e1);
+@@ -1369,7 +1372,7 @@
+ {0, 0, 0}};
+
+-static char s_sarray_map[] = "serial-array-map!";
++static const char s_sarray_map[] = "serial-array-map!";
+ # define s_array_map (s_sarray_map + 7)
+-SCM array_map(ra0, proc, lra)
++static SCM array_map(ra0, proc, lra)
+ SCM ra0, proc, lra;
+ {
+@@ -1413,12 +1416,13 @@
+ case tc7_asubr:
+ if (NULLP(lra)) {
+- SCM prot, fill = SUBRF(proc)(UNDEFINED, UNDEFINED);
++ SCM fill = SUBRF(proc)(UNDEFINED, UNDEFINED);
++# ifdef FLOATS
++ SCM prot;
+ if (INUMP(fill)) {
+ prot = array_prot(ra0);
+-# ifdef FLOATS
+ if (NIMP(prot) && INEXP(prot))
+ fill = makdbl((double)INUM(fill), 0.0);
+-# endif
+ }
++# endif
+ array_fill(ra0, fill);
+ }
+@@ -1496,6 +1500,6 @@
+ return 1;
+ }
+-static char s_array_for_each[] = "array-for-each";
+-SCM array_for_each(proc, ra0, lra)
++static const char s_array_for_each[] = "array-for-each";
++static SCM array_for_each(proc, ra0, lra)
+ SCM proc, ra0, lra;
+ {
+@@ -1523,6 +1527,6 @@
+ }
+
+-static char s_array_index_for_each[] = "array-index-for-each";
+-SCM scm_array_index_for_each(ra, proc)
++static const char s_array_index_for_each[] = "array-index-for-each";
++static SCM scm_array_index_for_each(ra, proc)
+ SCM ra, proc;
+ {
+@@ -1594,6 +1598,6 @@
+ }
+
+-static char s_array_imap[] = "array-index-map!";
+-SCM array_imap(ra, proc)
++static const char s_array_imap[] = "array-index-map!";
++static SCM array_imap(ra, proc)
+ SCM ra, proc;
+ {
+@@ -1666,5 +1670,6 @@
+ }
+
+-SCM array_equal P((SCM ra0, SCM ra1));
++static SCM array_equal(SCM ra0, SCM ra1); /* Forward declaration */
++
+ static int raeql_1(ra0, as_equal, ra1)
+ SCM ra0, as_equal, ra1;
+@@ -1794,6 +1799,6 @@
+ return (raeql(ra0, BOOL_T, ra1) ? BOOL_T : BOOL_F);
+ }
+-static char s_array_equalp[] = "array-equal?";
+-SCM array_equal(ra0, ra1)
++static const char s_array_equalp[] = "array-equal?";
++static SCM array_equal(ra0, ra1)
+ SCM ra0, ra1;
+ {
+@@ -1846,6 +1851,4 @@
+ }
+
+-SCM_DLL_EXPORT void init_ramap P((void));
+-
+ void init_ramap()
+ {
+--- record.c 2008-10-30 11:55:09.000000000 -0400
++++ record.c 2015-01-23 18:55:19.000000000 -0500
+@@ -56,12 +56,12 @@
+ #endif
+
+-static char s_record[] = "record";
+-static char s_recordp[] = "record?";
+-SCM recordp(obj)
++static const char s_record[] = "record";
++static const char s_recordp[] = "record?";
++static SCM recordp(obj)
+ SCM obj;
+ {
+ return (NIMP(obj) && RECP(obj) ? BOOL_T : BOOL_F);
+ }
+-SCM rec_pred1(cclo, obj)
++static SCM rec_pred1(cclo, obj)
+ SCM cclo, obj;
+ {
+@@ -71,6 +71,6 @@
+ }
+ static SCM f_rec_pred1;
+-static char s_rec_pred[] = "record-predicate";
+-SCM rec_pred(rtd)
++static const char s_rec_pred[] = "record-predicate";
++static SCM rec_pred(rtd)
+ SCM rtd;
+ {
+@@ -81,6 +81,6 @@
+ }
+
+-static char s_rec_rtd[] = "record-type-descriptor";
+-SCM rec_rtd(rec)
++static const char s_rec_rtd[] = "record-type-descriptor";
++static SCM rec_rtd(rec)
+ SCM rec;
+ {
+@@ -90,6 +90,6 @@
+
+ static SCM f_rec_constr1;
+-static char s_rec_constr[] = "record-constructor";
+-SCM rec_constr(rtd, flds)
++static const char s_rec_constr[] = "record-constructor";
++static SCM rec_constr(rtd, flds)
+ SCM rtd, flds;
+ {
+@@ -130,5 +130,6 @@
+ SCM arg, rtd;
+ int i;
+- char *pos, *what;
++ intptr_t pos;
++ const char *what;
+ {
+ SCM recname = RTD_NAME(rtd);
+@@ -143,9 +144,9 @@
+ else
+ mesg = st_append(cons2(mesg, recname, EOL));
+- wta(arg, pos, CHARS(mesg));
++ wta(arg, (char *)pos, CHARS(mesg));
+ }
+ #endif
+-static char s_rec_constr1[] = "record constructor: ";
+-SCM rec_constr1(args)
++static const char s_rec_constr1[] = "record constructor: ";
++static SCM rec_constr1(args)
+ SCM args;
+ {
+@@ -193,6 +194,6 @@
+ return cclo;
+ }
+-static char s_rec_accessor1[] = "record accessor: ";
+-SCM rec_accessor1(cclo, rec)
++static const char s_rec_accessor1[] = "record accessor: ";
++static SCM rec_accessor1(cclo, rec)
+ SCM cclo, rec;
+ {
+@@ -204,6 +205,6 @@
+ return VELTS(rec)[i];
+ }
+-static char s_rec_modifier1[] = "record modifier: ";
+-SCM rec_modifier1(cclo, rec, val)
++static const char s_rec_modifier1[] = "record modifier: ";
++static SCM rec_modifier1(cclo, rec, val)
+ SCM cclo, rec, val;
+ {
+@@ -217,6 +218,6 @@
+ }
+ static SCM f_rec_accessor1;
+-static char s_rec_accessor[] = "record-accessor";
+-SCM rec_accessor(rtd, field)
++static const char s_rec_accessor[] = "record-accessor";
++static SCM rec_accessor(rtd, field)
+ SCM rtd, field;
+ {
+@@ -224,13 +225,13 @@
+ }
+ static SCM f_rec_modifier1;
+-static char s_rec_modifier[] = "record-modifier";
+-SCM rec_modifier(rtd, field)
++static const char s_rec_modifier[] = "record-modifier";
++static SCM rec_modifier(rtd, field)
+ SCM rtd, field;
+ {
+ return makrecclo(f_rec_modifier1, rtd, field, s_rec_accessor);
+ }
+-SCM *loc_makrtd;
+-static char s_makrectyp[] = "make-record-type";
+-SCM makrectyp(name, fields)
++static SCM *loc_makrtd;
++static const char s_makrectyp[] = "make-record-type";
++static SCM makrectyp(name, fields)
+ SCM name, fields;
+ {
+@@ -247,6 +248,6 @@
+ }
+
+-static char s_rec_prinset[] = "record-printer-set!";
+-SCM rec_prinset(rtd, printer)
++static const char s_rec_prinset[] = "record-printer-set!";
++static SCM rec_prinset(rtd, printer)
+ SCM rtd, printer;
+ {
+@@ -276,5 +277,8 @@
+ int writing;
+ {
+- SCM names, printer = RTD_PRINTER(REC_RTD(exp));
++#ifdef SCM_SHOW_RECORD_FIELDS
++ SCM names;
++#endif
++ SCM printer = RTD_PRINTER(REC_RTD(exp));
+ SCM argv[3];
+ if (NIMP(printer)) {
+@@ -293,5 +297,7 @@
+ }
+ }
++#ifdef SCM_SHOW_RECORD_FIELDS
+ names = RTD_FIELDS(REC_RTD(exp));
++#endif
+ lputs("#s(", port);
+ scm_iprin1(RTD_NAME(REC_RTD(exp)), port, 0);
+@@ -316,5 +322,5 @@
+
+ static SCM f_rtdprin1;
+-SCM rec_rtdprin1(rtd, port, writing_p)
++static SCM rec_rtdprin1(rtd, port, writing_p)
+ SCM rtd, port, writing_p;
+ {
+@@ -332,5 +338,5 @@
+ }
+
+-SCM recequal(rec0, rec1)
++static SCM recequal(rec0, rec1)
+ SCM rec0, rec1;
+ {
+@@ -356,6 +362,4 @@
+ {0, 0}};
+
+-SCM_DLL_EXPORT void init_record P((void));
+-
+ void init_record()
+ {
+--- repl.c 2013-04-06 21:53:18.000000000 -0400
++++ repl.c 2015-01-27 01:03:08.000000000 -0500
+@@ -21,8 +21,4 @@
+ #include "scm.h"
+ #include "setjump.h"
+-void igc P((const char *what, SCM basecont));
+-void unexec P((char *new_name, char *a_name, unsigned data_start,
+- unsigned bss_start, unsigned entry_address));
+-void scm_fill_freelist P((void));
+
+ #ifdef __CYGWIN__
+@@ -30,10 +26,6 @@
+ #endif
+
+-#ifdef __NetBSD__
+-# include <ctype.h>
+-# include <unistd.h>
+-#endif
+-
+-#ifdef __OpenBSD__
++#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
++ defined(__DragonFlyBSD__)
+ # include <ctype.h>
+ # include <unistd.h>
+@@ -62,8 +54,12 @@
+ #endif
+
++#ifdef CAN_DUMP
++static const char s_unexec[] = "unexec";
++#endif
++
+ unsigned char upcase[CHAR_CODE_LIMIT];
+ unsigned char downcase[CHAR_CODE_LIMIT];
+-unsigned char lowers[] = "abcdefghijklmnopqrstuvwxyz";
+-unsigned char uppers[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
++static const unsigned char lowers[] = "abcdefghijklmnopqrstuvwxyz";
++static const unsigned char uppers[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ void init_tables()
+ {
+@@ -77,5 +73,5 @@
+
+ #ifdef EBCDIC
+-char *charnames[] = {
++const char *charnames[] = {
+ "nul","soh","stx","etx", "pf", "ht", "lc","del",
+ 0 , 0 ,"smm", "vt", "ff", "cr", "so", "si",
+@@ -87,5 +83,5 @@
+ 0 , 0 , 0 , 0 ,"dc4","nak", 0 ,"sub",
+ "space", s_newline, "tab", "backspace", "return", "page", "null"};
+-char charnums[] =
++const char charnums[] =
+ "\000\001\002\003\004\005\006\007\
+ \010\011\012\013\014\015\016\017\
+@@ -99,5 +95,5 @@
+ #endif /* def EBCDIC */
+ #ifdef ASCII
+-char *charnames[] = {
++const char *charnames[] = {
+ "nul","soh","stx","etx","eot","enq","ack","bel",
+ "bs", "ht", "nl", "vt", "np", "cr", "so", "si",
+@@ -105,5 +101,5 @@
+ "can", "em","sub","esc", "fs", "gs", "rs", "us",
+ "space", s_newline, "tab", "backspace", "return", "page", "null", "del"};
+-char charnums[] =
++const char charnums[] =
+ "\000\001\002\003\004\005\006\007\
+ \010\011\012\013\014\015\016\017\
+@@ -112,5 +108,5 @@
+ \n\t\b\r\f\0\177";
+ #endif /* def ASCII */
+-char *isymnames[] = {
++const char *isymnames[] = {
+ /* Special Forms */
+ /* NUM_ISPCSYMS ISPCSYMS here */
+@@ -128,19 +124,19 @@
+ };
+
+-static char s_read_char[] = "read-char", s_peek_char[] = "peek-char";
+-char s_write[] = "write", s_newline[] = "newline";
+-static char s_display[] = "display", s_write_char[] = "write-char";
+-static char s_freshline[] = "freshline";
++static const char s_read_char[] = "read-char", s_peek_char[] = "peek-char";
++const char s_write[] = "write", s_newline[] = "newline";
++static const char s_display[] = "display", s_write_char[] = "write-char";
++static const char s_freshline[] = "freshline";
+
+-static char s_eofin[] = "end of file in ";
+-static char s_unknown_sharp[] = "unknown # object";
++static const char s_eofin[] = "end of file in ";
++static const char s_unknown_sharp[] = "unknown # object";
+
+ static SCM scm_lread1 P((SCM port, int flgs, const char *what));
+ static SCM scm_lreadr P((SCM tok_buf, SCM port, int flgs));
+ static SCM scm_lreadpr P((SCM tok_buf, SCM port, int flgs));
+-static SCM scm_lreadparen P((SCM tok_buf, SCM port, int flgs, char *name));
++static SCM scm_lreadparen P((SCM tok_buf, SCM port, int flgs, const char *name));
+ static SCM scm_lread_rec P((SCM tok_buf, SCM port));
+ static sizet scm_read_token P((int ic, SCM tok_buf, SCM port, int flgs));
+-static void err_head P((char *str));
++static void err_head P((const char *str));
+ extern int case_sensitize_symbols; /* 0 or 8 */
+
+@@ -155,5 +151,5 @@
+
+ void scm_ipruk(hdr, ptr, port)
+- char *hdr;
++ const char *hdr;
+ SCM ptr;
+ SCM port;
+@@ -173,6 +169,6 @@
+ }
+
+-void scm_iprlist(hdr, exp, tlr, port, writing)
+- char *hdr, tlr;
++static void scm_iprlist(hdr, exp, tlr, port, writing)
++ const char *hdr, tlr;
+ SCM exp;
+ SCM port;
+@@ -383,5 +379,5 @@
+ }
+
+-static char s_char_readyp[]="char-ready?";
++static const char s_char_readyp[]="char-ready?";
+
+ #ifdef __IBMC__
+@@ -452,5 +448,5 @@
+ #endif
+ /* perhaps should undefine MSDOS from __IBMC__ here */
+-SCM char_readyp(port)
++static SCM char_readyp(port)
+ SCM port;
+ {
+@@ -476,6 +472,6 @@
+ # define timet long
+ #endif
+-static char s_wfi[] = "wait-for-input";
+-SCM wait_for_input(args)
++static const char s_wfi[] = "wait-for-input";
++static SCM wait_for_input(args)
+ SCM args;
+ {
+@@ -616,6 +612,6 @@
+ ;
+ }
+-static char s_force_output[] = "force-output";
+-SCM scm_force_output(port)
++static const char s_force_output[] = "force-output";
++static SCM scm_force_output(port)
+ SCM port;
+ {
+@@ -626,5 +622,5 @@
+ }
+
+-SCM scm_write(obj, port)
++static SCM scm_write(obj, port)
+ SCM obj, port;
+ {
+@@ -660,5 +656,5 @@
+ return UNSPECIFIED;
+ }
+-SCM scm_freshline(port)
++static SCM scm_freshline(port)
+ SCM port;
+ {
+@@ -716,5 +712,5 @@
+ }
+ sizet lfwrite(ptr, size, nitems, port)
+- char *ptr;
++ const char *ptr;
+ sizet size;
+ sizet nitems;
+@@ -843,9 +839,9 @@
+ /* Top-level readers */
+ static SCM p_read_for_load, p_read;
+-static char s_read[] = "read";
+-static char s_read_for_load[] = "read-for-load";
++static const char s_read[] = "read";
++static const char s_read_for_load[] = "read-for-load";
+ #ifndef MEMOIZE_LOCALS
+ static SCM p_read_numbered;
+-static char s_read_numbered[] = "read-numbered";
++static const char s_read_numbered[] = "read-numbered";
+ #endif
+ SCM scm_read(port)
+@@ -855,5 +851,5 @@
+ }
+
+-SCM scm_read_for_load(port)
++static SCM scm_read_for_load(port)
+ SCM port;
+ {
+@@ -1134,5 +1130,5 @@
+ SCM port;
+ int flgs;
+- char *name;
++ const char *name;
+ {
+ SCM lst, fst,
+@@ -1162,6 +1158,6 @@
+ with an atomic test-and-set instruction can use it here (and not
+ DEFER_INTS). */
+-char s_swapcar[] = "swap-car!";
+-SCM swapcar(pair, value)
++static const char s_swapcar[] = "swap-car!";
++static SCM swapcar(pair, value)
+ SCM pair, value;
+ {
+@@ -1174,8 +1170,8 @@
+ return ret;
+ }
+-char s_tryarb[] = "try-arbiter";
+-char s_relarb[] = "release-arbiter";
++static const char s_tryarb[] = "try-arbiter";
++static const char s_relarb[] = "release-arbiter";
+ long tc16_arbiter;
+-SCM tryarb(arb)
++static SCM tryarb(arb)
+ SCM arb;
+ {
+@@ -1202,5 +1198,5 @@
+ SCM name;
+ {
+- register SCM z;
++ SCM z;
+ NEWCELL(z);
+ CDR(z) = name;
+@@ -1218,12 +1214,12 @@
+ }
+
+-static char s_tryload[] = "try-load";
++static const char s_tryload[] = "try-load";
+ #define s_load (&s_tryload[4])
+
+-struct errdesc {char *msg;char *s_response;short parent_err;};
++struct errdesc {const char *msg; const char *s_response; short parent_err;};
+ struct errdesc errmsgs[] = {
+- {"Wrong number of args", 0, 0},
+- {"numerical overflow", 0, FPE_SIGNAL},
+- {"Argument out of range", 0, FPE_SIGNAL},
++ {"Wrong number of args", NULL, 0},
++ {"numerical overflow", NULL, FPE_SIGNAL},
++ {"Argument out of range", NULL, FPE_SIGNAL},
+ {"Could not allocate", "out-of-storage", 0},
+ {"Thrashing", "thrashing", 0},
+@@ -1232,6 +1228,6 @@
+ {"user interrupt", "user-interrupt", 0},
+ {"arithmetic error", "arithmetic-error", 0},
+- {"bus error", 0, 0},
+- {"segment violation", 0, 0},
++ {"bus error", NULL, 0},
++ {"segment violation", NULL, 0},
+ {"alarm", "alarm-interrupt", 0},
+ {"virtual alarm", "virtual-alarm-interrupt", 0},
+@@ -1240,5 +1236,5 @@
+
+ void (* deferred_proc) P((void)) = 0;
+-char *errjmp_bad = "init";
++const char *errjmp_bad = "init";
+ VOLATILE int ints_disabled = 1;
+ unsigned long SIG_deferred = 0;
+@@ -1248,5 +1244,5 @@
+ static int errobj_codep;
+ static SCM err_exp, err_env;
+-static char *err_pos, *err_s_subr;
++static const char *err_pos, *err_s_subr;
+ static cell tmp_errobj = {(SCM)UNDEFINED, (SCM)EOL};
+ static cell tmp_loadpath = {(SCM)BOOL_F, (SCM)EOL};
+@@ -1266,7 +1262,7 @@
+ {
+ SCM proc;
+- char *name = errmsgs[i-WNA].s_response;
++ const char *name = errmsgs[i-WNA].s_response;
+ if (errjmp_bad || errjmp_recursive)
+- wta(UNDEFINED, (char *)i, ""); /* sends it to def_err_response */
++ wta(UNDEFINED, (char *)(intptr_t)i, ""); /* sends it to def_err_response */
+ /* NEWCELL does not defer interrupts; so be careful to maintain the
+ freelist integrity. */
+@@ -1321,8 +1317,7 @@
+
+ SCM exitval = MAKINUM(EXIT_FAILURE); /* INUM return value */
+-extern char s_unexec[];
+ SCM scm_top_level(initpath, toplvl_fun)
+- char *initpath;
+- SCM (*toplvl_fun)();
++ const char *initpath;
++ SCM (*toplvl_fun)(void);
+ {
+ SCM ret;
+@@ -1342,5 +1337,5 @@
+ default:
+ {
+- char *name = errmsgs[i-WNA].s_response;
++ const char *name = errmsgs[i-WNA].s_response;
+ if (name) {
+ SCM proc = CDR(intern(name, (sizet)strlen(name)));
+@@ -1354,5 +1349,5 @@
+ case 0:
+ exitval = MAKINUM(EXIT_SUCCESS);
+- errjmp_bad = (char *)0;
++ errjmp_bad = NULL;
+ errjmp_recursive = 0;
+ if (NIMP(sys_errp) && OPOUTPORTP(sys_errp)) lfflush(sys_errp);
+@@ -1382,5 +1377,5 @@
+ reset_toplvl:
+ ints_disabled = 1;
+- errjmp_bad = (char *)0;
++ errjmp_bad = NULL;
+ errjmp_recursive = 0;
+ if (NIMP(sys_errp) && OPOUTPORTP(sys_errp)) lfflush(sys_errp);
+@@ -1442,5 +1437,5 @@
+ }
+
+-SCM line_num()
++static SCM line_num()
+ {
+ if (IMP(loadports))
+@@ -1448,5 +1443,5 @@
+ return scm_port_line(CAR(loadports));
+ }
+-static char s_port_line[] = "port-line";
++static const char s_port_line[] = "port-line";
+ SCM scm_port_line(port)
+ SCM port;
+@@ -1466,5 +1461,5 @@
+ return MAKINUM(lnum);
+ }
+-static char s_port_col[] = "port-column";
++static const char s_port_col[] = "port-column";
+ SCM scm_port_col(port)
+ SCM port;
+@@ -1487,5 +1482,5 @@
+ }
+
+-static char s_file_position[] = "file-position";
++static const char s_file_position[] = "file-position";
+ SCM scm_file_position(port, pos)
+ SCM port, pos;
+@@ -1530,6 +1525,6 @@
+ }
+
+-static char s_port_filename[] = "port-filename";
+-SCM scm_port_filename(port)
++static const char s_port_filename[] = "port-filename";
++static SCM scm_port_filename(port)
+ SCM port;
+ {
+@@ -1549,7 +1544,7 @@
+ extern char s_heap[];
+ void growth_mon(obj, size, units, grewp)
+- char *obj;
++ const char *obj;
+ long size;
+- char *units;
++ const char *units;
+ int grewp;
+ {
+@@ -1648,7 +1643,7 @@
+ scm_init_brk = (unsigned long)sbrk(0);
+ }
+-void scm_brk_report()
++static void scm_brk_report()
+ {
+- unsigned long scm_curbrk = (unsigned long)sbrk(0),
++ intptr_t scm_curbrk = (unsigned long)sbrk(0),
+ dif1 = ((dumped ? scm_dumped_brk : scm_curbrk) - scm_init_brk)/1024,
+ dif2 = (scm_curbrk - scm_dumped_brk)/1024;
+@@ -1798,11 +1793,11 @@
+ longjump(CONT(rootcont)->jmpbuf, COOKIE(-1));
+ }
+-SCM abrt()
++static SCM abrt()
+ {
+ if (errjmp_bad) exit(EXIT_FAILURE);
+ longjump(CONT(rootcont)->jmpbuf, COOKIE(-2));
+ }
+-char s_restart[] = "restart";
+-SCM restart()
++static const char s_restart[] = "restart";
++static SCM restart()
+ {
+ /* ASRTER(!dumped, UNDEFINED, "dumped can't", s_restart); */
+@@ -1811,5 +1806,4 @@
+
+ #ifdef CAN_DUMP
+-char s_unexec[] = "unexec";
+ SCM scm_unexec(newpath)
+ SCM newpath;
+@@ -1904,6 +1898,6 @@
+ return BOOL_T;
+ }
+-static char s_eval_string[] = "eval-string";
+-static char s_load_string[] = "load-string";
++static const char s_eval_string[] = "eval-string";
++static const char s_load_string[] = "load-string";
+ static SCM i_eval_string = 0;
+ SCM scm_eval_string(str)
+@@ -1969,5 +1963,5 @@
+
+ static void err_head(str)
+- char *str;
++ const char *str;
+ {
+ SCM lps;
+@@ -1993,5 +1987,5 @@
+ }
+ void scm_warn(str1, str2, obj)
+- char *str1, *str2;
++ const char *str1, *str2;
+ SCM obj;
+ {
+@@ -2010,5 +2004,5 @@
+ }
+
+-SCM lerrno(arg)
++static SCM lerrno(arg)
+ SCM arg;
+ {
+@@ -2020,6 +2014,6 @@
+ return MAKINUM(old);
+ }
+-static char s_perror[] = "perror";
+-SCM lperror(arg)
++static const char s_perror[] = "perror";
++static SCM lperror(arg)
+ SCM arg;
+ {
+@@ -2075,8 +2069,8 @@
+ else if (WNA > (long)err_pos) {
+ lputs("Wrong type in arg", cur_errp);
+- lputc((long)err_pos <= ARGn ? ' ' : '1' + (int)err_pos - ARG1, cur_errp);
++ lputc((long)err_pos <= ARGn ? ' ' : '1' + (intptr_t)err_pos - ARG1, cur_errp);
+ }
+ #endif
+- else lputs(errmsgs[((int)err_pos)-WNA].msg, cur_errp);
++ else lputs(errmsgs[((intptr_t)err_pos)-WNA].msg, cur_errp);
+ lputs(((long)err_pos==WNA)?" given ":" ", cur_errp);
+ err_pos = 0;
+@@ -2137,5 +2131,5 @@
+ longjump(CONT(rootcont)->jmpbuf,
+ (~0x1fL) & (long)pos || (WNA > (long)pos) ?
+- COOKIE(1) : COOKIE((int)pos));
++ COOKIE(1) : COOKIE((intptr_t)pos));
+ /* will do error processing at stack base */
+ }
+@@ -2160,20 +2154,20 @@
+ #endif
+ }
+-SCM cur_input_port()
++static SCM cur_input_port()
+ {
+ return cur_inp;
+ }
+-SCM cur_output_port()
++static SCM cur_output_port()
+ {
+ return cur_outp;
+ }
+-SCM cur_error_port()
++static SCM cur_error_port()
+ {
+ return cur_errp;
+ }
+-char s_cur_inp[] = "set-current-input-port";
+-char s_cur_outp[] = "set-current-output-port";
+-char s_cur_errp[] = "set-current-error-port";
+-SCM set_inp(port)
++static const char s_cur_inp[] = "set-current-input-port";
++static const char s_cur_outp[] = "set-current-output-port";
++static const char s_cur_errp[] = "set-current-error-port";
++static SCM set_inp(port)
+ SCM port;
+ {
+@@ -2186,5 +2180,5 @@
+ return oinp;
+ }
+-SCM set_outp(port)
++static SCM set_outp(port)
+ SCM port;
+ {
+@@ -2197,5 +2191,5 @@
+ return ooutp;
+ }
+-SCM set_errp(port)
++static SCM set_errp(port)
+ SCM port;
+ {
+@@ -2208,6 +2202,6 @@
+ return oerrp;
+ }
+-static char s_isatty[] = "isatty?";
+-SCM l_isatty(port)
++static const char s_isatty[] = "isatty?";
++static SCM l_isatty(port)
+ SCM port;
+ {
+@@ -2270,5 +2264,5 @@
+
+ static smobfuns arbsmob = {markcdr, free0, prinarb};
+-char s_ccl[] = "char-code-limit";
++const char s_ccl[] = "char-code-limit";
+
+ void init_repl( iverbose )
+--- rgx.c 2013-03-14 00:42:23.000000000 -0400
++++ rgx.c 2015-01-23 18:55:19.000000000 -0500
+@@ -21,5 +21,5 @@
+ #include "scm.h"
+ #ifdef __FreeBSD__
+-# include "gnuregex.h"
++# include "gnu/regex.h"
+ #else
+ # include "regex.h"
+@@ -31,7 +31,4 @@
+ #endif
+
+-static char rcsid[] =
+- "$Id: rgx.c,v 1.20 2013/03/14 04:42:23 jaffer Exp $";
+-
+ #ifdef HAVE_ALLOCA
+ # include <alloca.h>
+@@ -54,17 +51,17 @@
+ /* forward function defs */
+
+-SCM lregsearch();
+-SCM lregsearchv();
++static SCM lregsearch();
++static SCM lregsearchv();
+
+ /* Posix regexp bindings. */
+
+-static char s_regex[] = "regex";
+-static char s_regcomp[] = "regcomp", s_regerror[] = "regerror";
+-static char s_regexec[] = "regexec", s_regmatp[] = "regmatch?";
+-static char s_regsearch[] = "regsearch", s_regmatch[] = "regmatch";
+-static char s_regsearchv[] = "regsearchv", s_regmatchv[] = "regmatchv";
+-static char s_stringsplit[] = "string-split";
+-static char s_stringsplitv[] = "string-splitv";
+-static char s_stringedit[] = "string-edit";
++static const char s_regex[] = "regex";
++static const char s_regcomp[] = "regcomp", s_regerror[] = "regerror";
++static const char s_regexec[] = "regexec", s_regmatp[] = "regmatch?";
++static const char s_regsearch[] = "regsearch", s_regmatch[] = "regmatch";
++static const char s_regsearchv[] = "regsearchv", s_regmatchv[] = "regmatchv";
++static const char s_stringsplit[] = "string-split";
++static const char s_stringsplitv[] = "string-splitv";
++static const char s_stringedit[] = "string-edit";
+
+ #define s_error &s_regerror[3]
+@@ -95,5 +92,5 @@
+ } regex_info;
+
+-sizet fregex(ptr)
++static sizet fregex(ptr)
+ CELLPTR ptr;
+ {
+@@ -108,5 +105,5 @@
+ }
+
+-int prinregex(exp, port, writing)
++static int prinregex(exp, port, writing)
+ SCM exp; SCM port; int writing;
+ {
+@@ -119,5 +116,5 @@
+ }
+
+-SCM markregex(ptr)
++static SCM markregex(ptr)
+ SCM ptr;
+ {
+@@ -129,5 +126,5 @@
+ static smobfuns rgxsmob = {markregex, fregex, prinregex};
+
+-SCM lregerror(scode)
++static SCM lregerror(scode)
+ SCM scode;
+ {
+@@ -155,5 +152,5 @@
+ }
+
+-SCM lregcomp(pattern, flags)
++static SCM lregcomp(pattern, flags)
+ SCM pattern, flags;
+ {
+@@ -273,5 +270,5 @@
+ }
+
+-SCM lregexec(prog, str)
++static SCM lregexec(prog, str)
+ SCM prog, str;
+ {
+@@ -307,5 +304,5 @@
+ }
+
+-SCM lregmatp(prog, str)
++static SCM lregmatp(prog, str)
+ SCM prog, str;
+ {
+@@ -334,5 +331,5 @@
+ #define SEARCH 1
+
+-SCM lregsearchmatch(prog, str, args, search, vector)
++static SCM lregsearchmatch(prog, str, args, search, vector)
+ SCM prog, str, args;
+ int vector, search;
+@@ -446,5 +443,5 @@
+ }
+
+-SCM lregsearch(prog, str, args)
++static SCM lregsearch(prog, str, args)
+ SCM prog, str, args;
+ {
+@@ -452,5 +449,5 @@
+ }
+
+-SCM lregsearchv(prog, str, args)
++static SCM lregsearchv(prog, str, args)
+ SCM prog, str, args;
+ {
+@@ -458,5 +455,5 @@
+ }
+
+-SCM lregmatch(prog, str, args)
++static SCM lregmatch(prog, str, args)
+ SCM prog, str, args;
+ {
+@@ -464,5 +461,5 @@
+ }
+
+-SCM lregmatchv(prog, str, args)
++static SCM lregmatchv(prog, str, args)
+ SCM prog, str, args;
+ {
+@@ -470,5 +467,5 @@
+ }
+
+-SCM stringsplitutil(prog, str, vector)
++static SCM stringsplitutil(prog, str, vector)
+ SCM prog, str;
+ int vector;
+@@ -528,5 +525,5 @@
+ }
+
+-SCM lstringsplit(prog, str)
++static SCM lstringsplit(prog, str)
+ SCM prog, str;
+ {
+@@ -534,5 +531,5 @@
+ }
+
+-SCM lstringsplitv(prog, str)
++static SCM lstringsplitv(prog, str)
+ SCM prog, str;
+ {
+@@ -560,5 +557,5 @@
+
+ /* (string-edit <re> <edit-spec> <string> [<count>]) */
+-SCM lstringedit(prog, editspec, args)
++static SCM lstringedit(prog, editspec, args)
+ SCM prog, editspec, args;
+ {
+--- rope.c 2013-03-24 21:58:34.000000000 -0400
++++ rope.c 2015-01-23 18:55:19.000000000 -0500
+@@ -59,5 +59,5 @@
+ unsigned char num2uchar(num, pos, s_caller)
+ SCM num;
+- char *pos, *s_caller;
++ const char *pos, *s_caller;
+ {
+ unsigned long res = INUM(num);
+@@ -67,5 +67,5 @@
+ unsigned short num2ushort(num, pos, s_caller)
+ SCM num;
+- char *pos, *s_caller;
++ const char *pos, *s_caller;
+ {
+ unsigned long res = INUM(num);
+@@ -75,5 +75,5 @@
+ unsigned long num2ulong(num, pos, s_caller)
+ SCM num;
+- char *pos, *s_caller;
++ const char *pos, *s_caller;
+ {
+ unsigned long res;
+@@ -106,5 +106,5 @@
+ long num2long(num, pos, s_caller)
+ SCM num;
+- char *pos, *s_caller;
++ const char *pos, *s_caller;
+ {
+ long res;
+@@ -138,5 +138,5 @@
+ short num2short(num, pos, s_caller)
+ SCM num;
+- char *pos, *s_caller;
++ const char *pos, *s_caller;
+ {
+ long lres = INUM((long)num);
+@@ -147,5 +147,5 @@
+ signed char num2char(num, pos, s_caller)
+ SCM num;
+- char *pos, *s_caller;
++ const char *pos, *s_caller;
+ {
+ long lres = INUM((long)num);
+@@ -157,5 +157,5 @@
+ double num2dbl(num, pos, s_caller)
+ SCM num;
+- char *pos, *s_caller;
++ const char *pos, *s_caller;
+ {
+ if (INUMP(num)) return (double)INUM(num);
+@@ -235,5 +235,5 @@
+ /* Hooks to call SCM from C */
+ SCM scm_evstr(str)
+- char *str;
++ const char *str;
+ {
+ SCM lsym;
+@@ -244,5 +244,5 @@
+ }
+ void scm_ldstr(str)
+- char *str;
++ const char *str;
+ {
+ SCM lsym;
+@@ -253,5 +253,5 @@
+ }
+ int scm_ldfile(path)
+- char *path;
++ const char *path;
+ {
+ SCM name = makfrom0str(path);
+@@ -260,5 +260,5 @@
+ }
+ int scm_ldprog(path)
+- char *path;
++ const char *path;
+ {
+ SCM name = makfrom0str(path);
+@@ -270,5 +270,4 @@
+ /* Get byte address of SCM array */
+ #ifdef ARRAYS
+-long aind P((SCM ra, SCM args, const char *what));
+ void* scm_addr(args, s_name)
+ SCM args;
+--- sc2.c 2008-01-30 22:32:35.000000000 -0500
++++ sc2.c 2015-01-23 18:55:19.000000000 -0500
+@@ -21,6 +21,6 @@
+ #include "scm.h"
+
+-static char s_last_pair[] = "last-pair";
+-SCM last_pair(sx)
++static const char s_last_pair[] = "last-pair";
++static SCM last_pair(sx)
+ SCM sx;
+ {
+@@ -40,6 +40,6 @@
+ }
+
+-static char s_subml[] = "substring-move-left!";
+-SCM subml(str1, start1, args)
++static const char s_subml[] = "substring-move-left!";
++static SCM subml(str1, start1, args)
+ SCM str1, start1, args;
+ {
+@@ -63,6 +63,6 @@
+ return UNSPECIFIED;
+ }
+-static char s_submr[] = "substring-move-right!";
+-SCM submr(str1, start1, args)
++static const char s_submr[] = "substring-move-right!";
++static SCM submr(str1, start1, args)
+ SCM str1, start1, args;
+ {
+@@ -86,6 +86,6 @@
+ return UNSPECIFIED;
+ }
+-static char s_subfl[] = "substring-fill!";
+-SCM subfl(str, start, args)
++static const char s_subfl[] = "substring-fill!";
++static SCM subfl(str, start, args)
+ SCM str, start, args;
+ {
+@@ -107,6 +107,6 @@
+ }
+
+-static char s_strnullp[] = "string-null?";
+-SCM strnullp(str)
++static const char s_strnullp[] = "string-null?";
++static SCM strnullp(str)
+ SCM str;
+ {
+@@ -116,6 +116,6 @@
+ }
+
+-static char s_appendb[] = "append!";
+-SCM appendb(args)
++static const char s_appendb[] = "append!";
++static SCM appendb(args)
+ SCM args;
+ {
+@@ -138,6 +138,4 @@
+ {0, 0}};
+
+-SCM_DLL_EXPORT void init_sc2 P((void));
+-
+ void init_sc2()
+ {
+--- scl.c 2015-01-02 22:43:33.000000000 -0500
++++ scl.c 2015-01-23 18:55:19.000000000 -0500
+@@ -35,5 +35,7 @@
+ static sizet pdbl2str P((double f, char *a, sizet ch));
+ static sizet iflo2str P((SCM flt, char *str));
++#if defined(FLOATS) && defined(BIGDIG) && !defined(DBL_DIG)
+ static void safe_add_1 P((double f, double *fsum));
++#endif
+ static long scm_twos_power P((SCM n));
+ static double mantexp2dbl P((SCM manstr, int expo));
+@@ -42,35 +44,37 @@
+ static SCM ilog P((unsigned long m, SCM b, SCM k, unsigned long *n));
+
+-static char s_makrect[] = "make-rectangular", s_makpolar[] = "make-polar",
++static const char s_makrect[] = "make-rectangular", s_makpolar[] = "make-polar",
+ s_magnitude[] = "magnitude", s_angle[] = "angle",
+ s_real_part[] = "real-part", s_imag_part[] = "imag-part",
+ s_in2ex[] = "inexact->exact",s_ex2in[] = "exact->inexact";
+
+-static char s_expt[] = "real-expt", s_atan2[] = "$atan2";
++static const char s_expt[] = "real-expt", s_atan2[] = "$atan2";
+ #endif
+-static char s_memv[] = "memv", s_assv[] = "assv";
++static const char s_memv[] = "memv", s_assv[] = "assv";
+
+ SCM sys_protects[NUM_PROTECTS];
+ sizet num_protects = NUM_PROTECTS;
+
+-char s_inexactp[] = "inexact?";
+-static char s_zerop[] = "zero?", s_abs[] = "abs",
++const char s_inexactp[] = "inexact?";
++static const char s_zerop[] = "zero?", s_abs[] = "abs",
+ s_positivep[] = "positive?", s_negativep[] = "negative?";
+-static char s_lessp[] = "<", s_grp[] = ">";
+-static char s_leqp[] = "<=", s_greqp[] = ">=";
++static const char s_lessp[] = "<", s_grp[] = ">";
++static const char s_leqp[] = "<=", s_greqp[] = ">=";
+ #define s_eqp (&s_leqp[1])
+-static char s_max[] = "max", s_min[] = "min";
+-char s_sum[] = "+", s_difference[] = "-", s_product[] = "*",
++static const char s_max[] = "max", s_min[] = "min";
++const char s_sum[] = "+", s_difference[] = "-", s_product[] = "*",
+ s_divide[] = "/";
+-static char s_number2string[] = "number->string",
++static const char s_number2string[] = "number->string",
+ s_str2number[] = "string->number";
+
+-static char s_list_tail[] = "list-tail";
+-static char s_str2list[] = "string->list";
+-static char s_st_copy[] = "string-copy", s_st_fill[] = "string-fill!";
+-static char s_vect2list[] = "vector->list", s_ve_fill[] = "vector-fill!";
+-static char str_inf0[] = "inf.0", str_nan0[] = "nan.0", str_0[] = "0.0";
+-static char s_intexpt[] = "integer-expt", s_cintlog[] = "ceiling-integer-log";
+-static char s_dfloat_parts[] = "double-float-parts";
++static const char s_list_tail[] = "list-tail";
++static const char s_str2list[] = "string->list";
++static const char s_st_copy[] = "string-copy", s_st_fill[] = "string-fill!";
++static const char s_vect2list[] = "vector->list", s_ve_fill[] = "vector-fill!";
++#if defined(FLOATS) && defined(BIGDIG)
++static const char str_inf0[] = "inf.0", str_nan0[] = "nan.0", str_0[] = "0.0";
++static const char s_dfloat_parts[] = "double-float-parts";
++#endif
++static const char s_intexpt[] = "integer-expt", s_cintlog[] = "ceiling-integer-log";
+ #define s_intlog (&s_cintlog[8])
+
+@@ -81,5 +85,5 @@
+ are representable exactly as doubles. */
+
+-int inf2str(f, a)
++static int inf2str(f, a)
+ double f;
+ char *a;
+@@ -114,5 +118,5 @@
+
+ /* There are also temporary strings used in number->string conversion. */
+-void strrecy(str)
++static void strrecy(str)
+ SCM str;
+ {
+@@ -209,5 +213,7 @@
+ while ((dp+1 < ch) && (point+9999)%3) { a[dp] = a[dp+1]; a[++dp] = '.'; point--; }
+ # endif /* ENGNOT */
+- while ('0'==a[--ch]); ch++;
++ while ('0'==a[--ch])
++ ;
++ ch++;
+ if (point != 0) {
+ a[ch++] = 'e';
+@@ -521,5 +527,5 @@
+ #ifdef BIGDIG
+ SCM istr2int(str, len, radix)
+- char *str;
++ const char *str;
+ long len;
+ register int radix;
+@@ -579,5 +585,5 @@
+ #else
+ SCM istr2int(str, len, radix)
+- register char *str;
++ const char *str;
+ long len;
+ register int radix;
+@@ -743,7 +749,7 @@
+
+ SCM istr2flo(str, len, radix)
+- register char *str;
+- register long len;
+- register long radix;
++ const char *str;
++ long len;
++ long radix;
+ {
+ register int c, i = 0, j = 0;
+@@ -951,5 +957,5 @@
+
+ SCM istring2number(str, len, radix)
+- char *str;
++ const char *str;
+ long len;
+ long radix;
+@@ -1070,5 +1076,5 @@
+ return BOOL_F;
+ }
+-SCM assv(x, alist) /* m.borza 12.2.91 */
++static SCM assv(x, alist) /* m.borza 12.2.91 */
+ SCM x, alist;
+ {
+@@ -1088,5 +1094,5 @@
+ #endif
+
+-SCM list_tail(lst, k)
++static SCM list_tail(lst, k)
+ SCM lst, k;
+ {
+@@ -1118,5 +1124,5 @@
+ return makfromstr(CHARS(str), (sizet)LENGTH(str));
+ }
+-SCM string_fill(str, chr)
++static SCM string_fill(str, chr)
+ SCM str, chr;
+ {
+@@ -1141,5 +1147,5 @@
+ return res;
+ }
+-SCM vector_fill(v, fill)
++static SCM vector_fill(v, fill)
+ SCM v, fill;
+ {
+@@ -1228,5 +1234,5 @@
+ }
+ #ifdef FLOATS
+-SCM scm_complex_p(obj)
++static SCM scm_complex_p(obj)
+ SCM obj;
+ {
+@@ -1236,5 +1242,5 @@
+
+ # ifdef BIGDIG
+-static char twostab[] = {4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
++static const char twostab[] = {4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
+ static long scm_twos_power(n)
+ SCM n;
+@@ -1287,5 +1293,5 @@
+ }
+ # endif
+-SCM realp(x)
++static SCM realp(x)
+ SCM x;
+ {
+@@ -1298,5 +1304,5 @@
+ return BOOL_F;
+ }
+-SCM scm_rationalp(x)
++static SCM scm_rationalp(x)
+ SCM x;
+ {
+@@ -1313,5 +1319,5 @@
+ return BOOL_F;
+ }
+-SCM intp(x)
++static SCM intp(x)
+ SCM x;
+ {
+@@ -1331,5 +1337,5 @@
+ #endif /* FLOATS */
+
+-SCM inexactp(x)
++static SCM inexactp(x)
+ SCM x;
+ {
+@@ -1586,6 +1592,8 @@
+ }
+
+-static char s_exactprob[] = "not representable as inexact";
+-SCM scm_max(x, y)
++#if defined(BIGDIG) && defined(FLOATS)
++static const char s_exactprob[] = "not representable as inexact";
++#endif
++static SCM scm_max(x, y)
+ SCM x, y;
+ {
+@@ -1671,5 +1679,5 @@
+ }
+
+-SCM scm_min(x, y)
++static SCM scm_min(x, y)
+ SCM x, y;
+ {
+@@ -2361,5 +2369,5 @@
+ }
+
+-SCM ilog(m, b, k, n)
++static SCM ilog(m, b, k, n)
+ unsigned long m;
+ SCM b, k;
+@@ -2378,5 +2386,5 @@
+ }
+
+-SCM scm_intlog(base, k)
++static SCM scm_intlog(base, k)
+ SCM base, k;
+ {
+@@ -2393,12 +2401,6 @@
+ # define eqv eqp
+ #endif
+-SCM scm_cintlog(base, k)
+- SCM base, k;
+-{
+- SCM il = scm_intlog(base, k);
+- return (BOOL_T==eqv(k, scm_intexpt(base, il))) ? il : sum(MAKINUM(1L), il);
+-}
+
+-SCM scm_intexpt(z1, z2)
++static SCM scm_intexpt(z1, z2)
+ SCM z1, z2;
+ {
+@@ -2504,4 +2506,11 @@
+ }
+
++static SCM scm_cintlog(base, k)
++ SCM base, k;
++{
++ SCM il = scm_intlog(base, k);
++ return (BOOL_T==eqv(k, scm_intexpt(base, il))) ? il : sum(MAKINUM(1L), il);
++}
++
+ #ifdef FLOATS
+ # ifndef HAVE_ATANH
+@@ -2544,7 +2553,7 @@
+ struct dpair {double x, y;};
+
+-void two_doubles(z1, z2, sstring, xy)
++static void two_doubles(z1, z2, sstring, xy)
+ SCM z1, z2;
+- char *sstring;
++ const char *sstring;
+ struct dpair *xy;
+ {
+@@ -2585,5 +2594,5 @@
+ }
+
+-SCM expt(z1, z2)
++static SCM expt(z1, z2)
+ SCM z1, z2;
+ {
+@@ -2592,5 +2601,5 @@
+ return makdbl(pow(xy.x, xy.y), 0.0);
+ }
+-SCM latan2(z1, z2)
++static SCM latan2(z1, z2)
+ SCM z1, z2;
+ {
+@@ -2599,5 +2608,5 @@
+ return makdbl(atan2(xy.x, xy.y), 0.0);
+ }
+-SCM makrect(z1, z2)
++static SCM makrect(z1, z2)
+ SCM z1, z2;
+ {
+@@ -2606,5 +2615,5 @@
+ return makdbl(xy.x, xy.y);
+ }
+-SCM makpolar(z1, z2)
++static SCM makpolar(z1, z2)
+ SCM z1, z2;
+ {
+@@ -2614,5 +2623,5 @@
+ }
+
+-SCM real_part(z)
++static SCM real_part(z)
+ SCM z;
+ {
+@@ -2632,5 +2641,5 @@
+ return z;
+ }
+-SCM imag_part(z)
++static SCM imag_part(z)
+ SCM z;
+ {
+@@ -2663,5 +2672,5 @@
+ }
+
+-SCM scm_magnitude(z)
++static SCM scm_magnitude(z)
+ SCM z;
+ {
+@@ -2691,5 +2700,5 @@
+ }
+
+-SCM angle(z)
++static SCM angle(z)
+ SCM z;
+ {
+@@ -2713,5 +2722,5 @@
+
+
+-SCM ex2in(z)
++static SCM ex2in(z)
+ SCM z;
+ {
+@@ -2724,5 +2733,5 @@
+ badz: wta(z, (char *)ARG1, s_ex2in);
+ }
+-SCM in2ex(z)
++static SCM in2ex(z)
+ SCM z;
+ {
+@@ -2757,6 +2766,6 @@
+ }
+ #else /* ~FLOATS */
+-static char s_trunc[] = "truncate";
+-SCM numident(x)
++static const char s_trunc[] = "truncate";
++static SCM numident(x)
+ SCM x;
+ {
+@@ -2837,5 +2846,5 @@
+ sizet j = i - (dbl_mant_dig + BITSPERDIG - 1)/BITSPERDIG;
+ BIGDIG *digits = BDIGITS(quo);
+- if (j < 0) j = 0;
++ if (i <= dbl_mant_dig + BITSPERDIG) j = 0;
+ while (i-- > j) ans = digits[i] + ldexp(ans, BITSPERDIG);
+ bex += j * BITSPERDIG;
+@@ -2915,5 +2924,5 @@
+ }
+
+-SCM scm_dfloat_parts(f)
++static SCM scm_dfloat_parts(f)
+ SCM f;
+ {
+@@ -2928,6 +2937,6 @@
+ return scm_values(dbl2big(mant), MAKINUM(expt), EOL, s_dfloat_parts);
+ }
+-static char s_make_dfloat[] = "make-double-float";
+-SCM scm_make_dfloat(mant, expt)
++static const char s_make_dfloat[] = "make-double-float";
++static SCM scm_make_dfloat(mant, expt)
+ SCM mant, expt;
+ {
+@@ -3014,6 +3023,5 @@
+ }
+
+-static char s_hashv[] = "hashv", s_hashq[] = "hashq";
+-extern char s_obunhash[];
++static const char s_hashv[] = "hashv", s_hashq[] = "hashq";
+ #define s_hash (&s_obunhash[9])
+
+@@ -3164,5 +3172,5 @@
+ #endif
+
+-#ifdef FLOATS
++#if defined(FLOATS) && defined(BIGDIG) && !defined(DBL_DIG)
+ static void safe_add_1(f, fsum)
+ double f, *fsum;
+--- scm.c 2014-11-18 17:04:42.000000000 -0500
++++ scm.c 2015-01-23 18:55:19.000000000 -0500
+@@ -25,4 +25,5 @@
+ #endif
+ #include "scm.h"
++#include "continue.h"
+ #include "patchlvl.h"
+
+@@ -58,33 +59,5 @@
+ #endif
+
+-void init_sbrk P((void));
+-
+-void init_dynl P((void));
+-void init_edline P((void));
+-void init_eval P((void));
+-void init_features P((void));
+-void init_gsubr P((void));
+-void init_io P((void));
+-void init_ioext P((void));
+-void init_posix P((void));
+-void init_ramap P((void));
+-void init_record P((void));
+-void init_rgx P((void));
+-void init_rope P((void));
+-void init_repl P((int iverbose));
+-void init_sc2 P((void));
+-void init_scl P((void));
+-void init_signals P((void));
+-void init_socket P((void));
+-void init_subrs P((void));
+-void init_tables P((void));
+-void init_time P((void));
+-void init_types P((void));
+-void init_unif P((void));
+-void init_debug P((void));
+-void reset_time P((void));
+-void final_repl P((void));
+-
+-void init_banner()
++static void init_banner()
+ {
+ fputs("SCM version "SCMVERSION", Copyright (C) 1990-2006 \
+@@ -162,5 +135,6 @@
+ void process_signals()
+ {
+- int i, n;
++ intptr_t i;
++ int n;
+ unsigned long mask = 1L;
+ /* printf("process_signals; output_deferred=%d\n", output_deferred); fflush(stdout); */
+@@ -249,5 +223,5 @@
+
+
+-static char s_unksig[] = "unknown signal";
++static const char s_unksig[] = "unknown signal";
+ static SIGRETTYPE err_signal(sig)
+ int sig;
+@@ -264,5 +238,5 @@
+ {
+ int oerr = errno;
+- int i = NUM_SIGNALS;
++ intptr_t i = NUM_SIGNALS;
+ while (i--)
+ if (sig == sigdesc[i].signo) break;
+@@ -315,6 +289,6 @@
+ #endif
+ #ifdef SIGALRM
+-static char s_alarm[] = "alarm";
+-SCM lalarm(i)
++static const char s_alarm[] = "alarm";
++static SCM lalarm(i)
+ SCM i;
+ {
+@@ -326,9 +300,9 @@
+ # ifdef SIGPROF
+ # include <sys/time.h>
+-static char s_setitimer[] = "setitimer";
++static const char s_setitimer[] = "setitimer";
+ static struct {SCM sym; int which;} setitimer_tab[3] = {
+ {UNDEFINED, 0}, {UNDEFINED, 0}, {UNDEFINED, 0}};
+ /* VALUE and INTERVAL are milliseconds */
+-SCM scm_setitimer(which, value, interval)
++static SCM scm_setitimer(which, value, interval)
+ SCM which, value, interval;
+ {
+@@ -364,5 +338,5 @@
+ # endif
+ # ifndef AMIGA
+-SCM l_pause()
++static SCM l_pause(void)
+ {
+ pause();
+@@ -380,6 +354,6 @@
+ #ifndef AMIGA
+ # ifndef _Windows
+-static char s_sleep[] = "sleep";
+-SCM l_sleep(i)
++static const char s_sleep[] = "sleep";
++static SCM l_sleep(i)
+ SCM i;
+ {
+@@ -442,6 +416,6 @@
+ #endif
+ /* int raise P((int sig)); */
+-static char s_raise[] = "raise";
+-SCM l_raise(sig)
++static const char s_raise[] = "raise";
++static SCM l_raise(sig)
+ SCM sig;
+ {
+@@ -468,5 +442,5 @@
+ }
+ }
+-static char s_ticks[] = "ticks";
++static const char s_ticks[] = "ticks";
+ SCM lticks(i)
+ SCM i;
+@@ -485,12 +459,4 @@
+ int dumped = 0; /* Is this an invocation of unexec exe? */
+
+-#ifdef SHORT_ALIGN
+-typedef short STACKITEM;
+-#else
+-typedef long STACKITEM;
+-#endif
+-/* See scm.h for definition of P */
+-void init_storage P((STACKITEM *stack_start_ptr, long init_heap_size));
+-
+ void init_scm(iverbose, buf0stdin, init_heap_size)
+ int iverbose;
+@@ -666,5 +632,5 @@
+ int argc;
+ const char * const *argv;
+- char *script_arg;
++ const char *script_arg;
+ int iverbose;
+ int buf0stdin;
+@@ -780,5 +746,5 @@
+ const char dirsep[] = DIRSEP;
+
+-SCM softtype()
++static SCM softtype()
+ {
+ #ifdef nosve
+@@ -843,8 +809,8 @@
+ }
+
+-char *execpath = 0;
+-char s_no_execpath[] = "no execpath";
++char *execpath = NULL;
++const char s_no_execpath[] = "no execpath";
+ #define s_execpath (s_no_execpath+3)
+-SCM scm_execpath(newpath)
++static SCM scm_execpath(newpath)
+ SCM newpath;
+ {
+@@ -870,5 +836,5 @@
+ const char *script_arg;
+ {
+- char *exepath = 0;
++ char *exepath = NULL;
+ #ifndef macintosh
+ # ifdef HAVE_UNIX
+@@ -904,6 +870,6 @@
+
+ #ifndef _Windows
+-char s_system[] = "system";
+-SCM lsystem(cmd)
++const char s_system[] = "system";
++static SCM lsystem(cmd)
+ SCM cmd;
+ {
+@@ -922,7 +888,6 @@
+ extern char **environ; /* The Linux man page says this
+ declaration is necessary. */
+-char s_getenv[] = "getenv";
+-char *getenv();
+-SCM scm_getenv(nam)
++static const char s_getenv[] = "getenv";
++static SCM scm_getenv(nam)
+ SCM nam;
+ {
+@@ -949,6 +914,6 @@
+ # include <descrip.h>
+ # include <ssdef.h>
+-char s_ed[] = "ed";
+-SCM ed(fname)
++static const char s_ed[] = "ed";
++static SCM ed(fname)
+ SCM fname;
+ {
+@@ -1009,5 +974,5 @@
+ SCM *loc_features;
+ void add_feature(str)
+- char* str;
++ const char* str;
+ {
+ *loc_features = cons(CAR(sysintern(str, UNDEFINED)), *loc_features);
+--- scm.h 2014-11-22 21:34:19.000000000 -0500
++++ scm.h 2015-01-27 01:33:21.000000000 -0500
+@@ -95,5 +95,5 @@
+
+ typedef struct {
+- char *name;
++ const char *name;
+ SCM (*mark)P((SCM ptr));
+ int (*free)P((FILE *p));
+@@ -130,5 +130,5 @@
+
+ #ifdef FLOATS
+-typedef struct {char *string;double (*cproc)P((double));} dblproc;
++typedef struct {const char *string;double (*cproc)P((double));} dblproc;
+ # ifdef SINGLES
+ # ifdef CDR_DOUBLES
+@@ -176,5 +176,5 @@
+ #define MAKSPCSYM2(work, look) ((127L & (work)) | ((127L<<9) & (look)))
+
+-SCM_EXPORT char *isymnames[];
++SCM_EXPORT const char *isymnames[];
+ #define NUM_ISPCSYM 14
+ #define IM_AND MAKSPCSYM(0)
+@@ -321,5 +321,5 @@
+ #define SCM_ESTK_PARENT_WRITABLEP(v) (VELTS(v)[1])
+ #define SCM_ESTK_PARENT_INDEX(v) (VELTS(v)[2])
+-SCM_EXPORT long tc16_env, tc16_ident;
++SCM_EXPORT long tc16_env, tc16_ident, tc16_promise;
+ #define ENVP(x) (tc16_env==TYP16(x))
+ #define SCM_ENV_FORMALS CAR
+@@ -408,5 +408,5 @@
+ #define SETNUMDIGS(x, v, t) CAR(x) = MAKE_NUMDIGS(v, t)
+
+-#define SNAME(x) ((char *)(subrs[NUMDIGS(x)].name))
++#define SNAME(x) ((const char *)(subrs[NUMDIGS(x)].name))
+ #define SUBRF(x) (((subr *)(SCM2PTR(x)))->cproc)
+ #define DSUBRF(x) (((dsubr *)(SCM2PTR(x)))->dproc)
+@@ -597,5 +597,4 @@
+ #define tc16_sfport (tc7_port + 3*256L)
+ SCM_EXPORT long tc16_dir;
+-SCM_EXPORT long tc16_clport;
+
+ SCM_EXPORT SCM sys_protects[];
+@@ -649,5 +648,5 @@
+ SCM_EXPORT SCM *loc_errobj;
+ SCM_EXPORT SCM loadport;
+-SCM_EXPORT char *errjmp_bad;
++SCM_EXPORT const char *errjmp_bad;
+ SCM_EXPORT VOLATILE int ints_disabled;
+ SCM_EXPORT int output_deferred, gc_hook_pending, gc_hook_active;
+@@ -658,5 +657,5 @@
+ SCM_EXPORT int dumped;
+ SCM_EXPORT char *execpath;
+-SCM_EXPORT char s_no_execpath[];
++SCM_EXPORT const char s_no_execpath[];
+ SCM_EXPORT int scm_verbose;
+ #define verbose (scm_verbose+0)
+@@ -666,20 +665,19 @@
+ /* strings used in several source files */
+
+-SCM_EXPORT char s_write[], s_newline[], s_system[];
+-SCM_EXPORT char s_make_string[], s_make_vector[], s_list[], s_op_pipe[];
++SCM_EXPORT const char s_write[], s_newline[], s_system[];
++SCM_EXPORT const char s_make_string[], s_make_vector[], s_list[], s_op_pipe[];
++SCM_EXPORT const char s_inexactp[], s_redefining[], s_obunhash[];
+ #define s_string (s_make_string+5)
+ #define s_vector (s_make_vector+5)
+ #define s_pipe (s_op_pipe+5)
+-SCM_EXPORT char s_make_sh_array[];
+-SCM_EXPORT char s_array_fill[];
+-#define s_array (s_make_sh_array+12)
+-SCM_EXPORT char s_ccl[];
++SCM_EXPORT const char s_array_fill[];
++SCM_EXPORT const char s_ccl[];
+ #define s_limit (s_ccl+10)
+-SCM_EXPORT char s_close_port[];
++SCM_EXPORT const char s_close_port[];
+ #define s_port_type (s_close_port+6)
+-SCM_EXPORT char s_call_cc[];
++SCM_EXPORT const char s_call_cc[];
+ #define s_cont (s_call_cc+18)
+-SCM_EXPORT char s_try_create_file[];
+-SCM_EXPORT char s_badenv[];
++SCM_EXPORT const char s_try_create_file[];
++SCM_EXPORT const char s_badenv[];
+
+ SCM_EXPORT void (*init_user_scm) P((void));
+@@ -702,22 +700,21 @@
+ SCM_EXPORT SCM obhash P((SCM obj));
+ SCM_EXPORT SCM obunhash P((SCM obj));
+-SCM_EXPORT unsigned long strhash P((unsigned char *str, sizet len, unsigned long n));
++SCM_EXPORT unsigned long strhash P((const unsigned char *str, sizet len, unsigned long n));
+ SCM_EXPORT unsigned long hasher P((SCM obj, unsigned long n, sizet d));
+ SCM_EXPORT SCM lroom P((SCM args));
+ SCM_EXPORT void lfflush P((SCM port));
+-SCM_EXPORT SCM scm_force_output P((SCM port));
+ SCM_EXPORT void scm_init_gra P((scm_gra *gra, sizet eltsize, sizet len,
+ sizet maxlen, const char *what));
+-SCM_EXPORT int scm_grow_gra P((scm_gra *gra, char *elt));
++SCM_EXPORT int scm_grow_gra P((scm_gra *gra, const char *elt));
+ SCM_EXPORT void scm_trim_gra P((scm_gra *gra));
+ SCM_EXPORT void scm_free_gra P((scm_gra *gra));
+-SCM_EXPORT long newsmob P((smobfuns *smob));
+-SCM_EXPORT long newptob P((ptobfuns *ptob));
++SCM_EXPORT long newsmob P((const smobfuns *smob));
++SCM_EXPORT long newptob P((const ptobfuns *ptob));
+ SCM_EXPORT SCM scm_port_entry P((FILE *stream, long ptype, long flags));
+ SCM_EXPORT SCM scm_open_ports P((void));
+-SCM_EXPORT void prinport P((SCM exp, SCM port, char *type));
++SCM_EXPORT void prinport P((SCM exp, SCM port, const char *type));
+ SCM_EXPORT SCM repl P((void));
+ SCM_EXPORT void repl_report P((void));
+-SCM_EXPORT void growth_mon P((char *obj, long size, char *units, int grewp));
++SCM_EXPORT void growth_mon P((const char *obj, long size, const char *units, int grewp));
+ SCM_EXPORT void gc_start P((const char *what));
+ SCM_EXPORT void gc_end P((void));
+@@ -735,27 +732,19 @@
+ SCM_EXPORT SCM scm_stack_trace P((SCM contin));
+ SCM_EXPORT SCM scm_scope_trace P((SCM env));
+-SCM_EXPORT SCM scm_frame_trace P((SCM contin, SCM nf));
+-SCM_EXPORT SCM scm_frame2env P((SCM contin, SCM nf));
+-SCM_EXPORT SCM scm_frame_eval P((SCM contin, SCM nf, SCM expr));
+ SCM_EXPORT void scm_iprin1 P((SCM exp, SCM port, int writing));
+ SCM_EXPORT void scm_intprint P((long n, int radix, SCM port));
+-SCM_EXPORT void scm_iprlist P((char *hdr, SCM exp, int tlr, SCM port, int writing));
+ SCM_EXPORT SCM scm_env_lookup P((SCM var, SCM stenv));
+ SCM_EXPORT SCM scm_env_rlookup P((SCM addr, SCM stenv, const char *what));
+ SCM_EXPORT SCM scm_env_getprop P((SCM prop, SCM env));
+ SCM_EXPORT SCM scm_env_addprop P((SCM prop, SCM val, SCM env));
+-SCM_EXPORT long num_frames P((SCM estk, int i));
+-SCM_EXPORT SCM *estk_frame P((SCM estk, int i, int nf));
+-SCM_EXPORT SCM *cont_frame P((SCM contin, int nf));
+-SCM_EXPORT SCM stacktrace1 P((SCM estk, int i));
+ SCM_EXPORT void scm_princode P((SCM code, SCM env, SCM port, int writing));
+ SCM_EXPORT void scm_princlosure P((SCM proc, SCM port, int writing));
+ SCM_EXPORT void lputc P((int c, SCM port));
+ SCM_EXPORT void lputs P((const char *s, SCM port));
+-SCM_EXPORT sizet lfwrite P((char *ptr, sizet size, sizet nitems, SCM port));
++SCM_EXPORT sizet lfwrite P((const char *ptr, sizet size, sizet nitems, SCM port));
+ SCM_EXPORT int lgetc P((SCM port));
+ SCM_EXPORT void lungetc P((int c, SCM port));
+ SCM_EXPORT char *grow_tok_buf P((SCM tok_buf));
+-SCM_EXPORT long mode_bits P((char *modes, char *cmodes));
++SCM_EXPORT long mode_bits P((const char *modes, char *cmodes));
+ SCM_EXPORT long time_in_msec P((long x));
+ SCM_EXPORT SCM my_time P((void));
+@@ -764,10 +753,43 @@
+
+ SCM_EXPORT void final_scm P((int));
++
++SCM_EXPORT void init_byte P((void));
++SCM_EXPORT void init_bytenumb P((void));
++SCM_EXPORT void init_crs P((void));
++SCM_EXPORT void init_debug P((void));
++SCM_EXPORT void init_differ P((void));
++SCM_EXPORT void init_dynl P((void));
++SCM_EXPORT void init_edline P((void));
++SCM_EXPORT void init_eval P((void));
++SCM_EXPORT void init_features P((void));
++SCM_EXPORT void init_gsubr P((void));
++SCM_EXPORT void init_io P((void));
++SCM_EXPORT void init_ioext P((void));
++SCM_EXPORT void init_posix P((void));
++SCM_EXPORT void init_ramap P((void));
++SCM_EXPORT void init_record P((void));
++SCM_EXPORT void init_repl P((int iverbose));
++SCM_EXPORT void init_rgx P((void));
++SCM_EXPORT void init_rope P((void));
+ SCM_EXPORT void init_sbrk P((void));
++SCM_EXPORT void init_sc2 P((void));
++SCM_EXPORT void init_scl P((void));
++SCM_EXPORT void init_socket P((void));
++SCM_EXPORT void init_subrs P((void));
++SCM_EXPORT void init_tables P((void));
++SCM_EXPORT void init_time P((void));
++SCM_EXPORT void init_types P((void));
++SCM_EXPORT void init_unif P((void));
++SCM_EXPORT void init_unix P((void));
++
++SCM_EXPORT void reset_time P((void));
++SCM_EXPORT void final_repl P((void));
+ SCM_EXPORT int init_buf0 P((FILE *inport));
+-SCM_EXPORT void scm_init_from_argv P((int argc, const char * const *argv, char *script_arg,
++
++SCM_EXPORT void scm_init_from_argv P((int argc, const char * const *argv,
++ const char *script_arg,
+ int iverbose, int buf0stdin));
+ SCM_EXPORT void init_signals P((void));
+-SCM_EXPORT SCM scm_top_level P((char *initpath, SCM (*toplvl_fun)()));
++SCM_EXPORT SCM scm_top_level P((const char *initpath, SCM (*toplvl_fun)(void)));
+ SCM_EXPORT void restore_signals P((void));
+ SCM_EXPORT void free_storage P((void));
+@@ -780,5 +802,5 @@
+ SCM_EXPORT void unignore_signals P((void));
+
+-SCM_EXPORT void add_feature P((char *str));
++SCM_EXPORT void add_feature P((const char *str));
+ SCM_EXPORT int raprin1 P((SCM exp, SCM port, int writing));
+ SCM_EXPORT SCM markcdr P((SCM ptr));
+@@ -786,9 +808,10 @@
+ SCM_EXPORT SCM equal0 P((SCM ptr1, SCM ptr2));
+ SCM_EXPORT sizet free0 P((CELLPTR ptr));
+-SCM_EXPORT void scm_warn P((char *str1, char *str2, SCM obj));
+-SCM_EXPORT void everr P((SCM exp, SCM env, SCM arg, const char *pos, const char *s_subr, int codep));
+-SCM_EXPORT void wta P((SCM arg, const char *pos, const char *s_subr));
++SCM_EXPORT void scm_warn P((const char *str1, const char *str2, SCM obj));
++SCM_EXPORT void everr P((SCM exp, SCM env, SCM arg, const char *pos, const char *s_subr, int codep))
++__attribute__((noreturn));
++SCM_EXPORT void wta P((SCM arg, const char *pos, const char *s_subr)) __attribute__((noreturn));
+ SCM_EXPORT void scm_experr P((SCM arg, const char *pos, const char *s_subr));
+-SCM_EXPORT SCM intern P((char *name, sizet len));
++SCM_EXPORT SCM intern P((const char *name, sizet len));
+ SCM_EXPORT SCM sysintern P((const char *name, SCM val));
+ SCM_EXPORT SCM sym2vcell P((SCM sym));
+@@ -796,12 +819,8 @@
+ SCM_EXPORT SCM scm_maksubr P((const char *name, int type, SCM (*fcn)()));
+ SCM_EXPORT SCM make_subr P((const char *name, int type, SCM (*fcn)()));
+-SCM_EXPORT SCM make_synt P((const char *name, long flags, SCM (*fcn)()));
+-SCM_EXPORT SCM make_gsubr P((const char *name, int req, int opt, int rst,
+- SCM (*fcn)()));
+ SCM_EXPORT SCM closure P((SCM code, int nargs));
+ SCM_EXPORT SCM makprom P((SCM code));
+ SCM_EXPORT SCM force P((SCM x));
+ SCM_EXPORT SCM makarb P((SCM name));
+-SCM_EXPORT SCM tryarb P((SCM arb));
+ SCM_EXPORT SCM relarb P((SCM arb));
+ SCM_EXPORT SCM ceval P((SCM x, SCM static_env, SCM env));
+@@ -816,25 +835,15 @@
+ SCM_EXPORT SCM cons2 P((SCM w, SCM x, SCM y));
+ SCM_EXPORT SCM resizuve P((SCM vect, SCM len));
+-SCM_EXPORT SCM lnot P((SCM x));
+ SCM_EXPORT SCM booleanp P((SCM obj));
+ SCM_EXPORT SCM eq P((SCM x, SCM y));
+ SCM_EXPORT SCM equal P((SCM x, SCM y));
+-SCM_EXPORT SCM consp P((SCM x));
+ SCM_EXPORT SCM cons P((SCM x, SCM y));
+-SCM_EXPORT SCM nullp P((SCM x));
+-SCM_EXPORT SCM setcar P((SCM pair, SCM value));
+-SCM_EXPORT SCM setcdr P((SCM pair, SCM value));
+-SCM_EXPORT SCM listp P((SCM x));
+ SCM_EXPORT SCM list P((SCM objs));
+ SCM_EXPORT SCM length P((SCM x));
+ SCM_EXPORT SCM append P((SCM args));
+ SCM_EXPORT SCM reverse P((SCM lst));
+-SCM_EXPORT SCM list_ref P((SCM lst, SCM k));
+ SCM_EXPORT SCM memq P((SCM x, SCM lst));
+-SCM_EXPORT SCM member P((SCM x, SCM lst));
+ SCM_EXPORT SCM memv P((SCM x, SCM lst));
+ SCM_EXPORT SCM assq P((SCM x, SCM alist));
+-SCM_EXPORT SCM assoc P((SCM x, SCM alist));
+-SCM_EXPORT SCM symbolp P((SCM x));
+ SCM_EXPORT SCM symbol2string P((SCM s));
+ SCM_EXPORT SCM string2symbol P((SCM s));
+@@ -842,5 +851,4 @@
+ SCM_EXPORT SCM numberp P((SCM x));
+ SCM_EXPORT SCM exactp P((SCM x));
+-SCM_EXPORT SCM inexactp P((SCM x));
+ SCM_EXPORT SCM eqp P((SCM x, SCM y));
+ SCM_EXPORT SCM eqv P((SCM x, SCM y));
+@@ -854,6 +862,4 @@
+ SCM_EXPORT SCM oddp P((SCM n));
+ SCM_EXPORT SCM evenp P((SCM n));
+-SCM_EXPORT SCM scm_max P((SCM x, SCM y));
+-SCM_EXPORT SCM scm_min P((SCM x, SCM y));
+ SCM_EXPORT SCM sum P((SCM x, SCM y));
+ SCM_EXPORT SCM difference P((SCM x, SCM y));
+@@ -864,15 +870,12 @@
+ SCM_EXPORT SCM scm_iabs P((SCM x));
+ SCM_EXPORT SCM scm_abs P((SCM x));
+-SCM_EXPORT SCM lremainder P((SCM x, SCM y));
+ SCM_EXPORT SCM modulo P((SCM x, SCM y));
+-SCM_EXPORT SCM lgcd P((SCM x, SCM y));
+-SCM_EXPORT SCM llcm P((SCM n1, SCM n2));
+ SCM_EXPORT SCM number2string P((SCM x, SCM radix));
+-SCM_EXPORT SCM istring2number P((char *str, long len, long radix));
++SCM_EXPORT SCM istring2number P((const char *str, long len, long radix));
+ SCM_EXPORT SCM string2number P((SCM str, SCM radix));
+-SCM_EXPORT SCM istr2flo P((char *str, long len, long radix));
++SCM_EXPORT SCM istr2flo P((const char *str, long len, long radix));
+ SCM_EXPORT SCM mkbig P((sizet nlen, int sign));
+ SCM_EXPORT void bigrecy P((SCM bgnm));
+-SCM_EXPORT SCM mkstrport P((SCM pos, SCM str, long modes, char *caller));
++SCM_EXPORT SCM mkstrport P((SCM pos, SCM str, long modes, const char *caller));
+ SCM_EXPORT SCM mksafeport P((int maxlen, SCM port));
+ SCM_EXPORT int reset_safeport P((SCM sfp, int maxlen, SCM port));
+@@ -887,48 +890,23 @@
+ SCM_EXPORT SCM uve_write P((SCM v, SCM port));
+ SCM_EXPORT SCM raequal P((SCM ra0, SCM ra1));
+-SCM_EXPORT SCM array_equal P((SCM u, SCM v));
+ SCM_EXPORT SCM array_rank P((SCM ra));
++SCM_EXPORT SCM array_dims P((SCM ra));
++SCM_EXPORT SCM dims2ura P((SCM dims, SCM prot, SCM fill));
+ SCM_EXPORT int rafill P((SCM ra, SCM fill, SCM ignore));
+-SCM_EXPORT SCM uve_fill P((SCM uve, SCM fill));
+-SCM_EXPORT SCM array_fill P((SCM ra, SCM fill));
+ SCM_EXPORT SCM array_prot P((SCM ra));
+-SCM_EXPORT SCM array_rank P((SCM ra));
+ SCM_EXPORT SCM array_contents P((SCM ra, SCM strict));
+ SCM_EXPORT int bigprint P((SCM exp, SCM port, int writing));
+ SCM_EXPORT int floprint P((SCM sexp, SCM port, int writing));
+-SCM_EXPORT SCM istr2int P((char *str, long len, int radix));
+-SCM_EXPORT SCM istr2bve P((char *str, long len));
+-SCM_EXPORT void scm_ipruk P((char *hdr, SCM ptr, SCM port));
+-SCM_EXPORT SCM charp P((SCM x));
+-SCM_EXPORT SCM char_lessp P((SCM x, SCM y));
+-SCM_EXPORT SCM chci_eq P((SCM x, SCM y));
+-SCM_EXPORT SCM chci_lessp P((SCM x, SCM y));
+-SCM_EXPORT SCM char_alphap P((SCM chr));
+-SCM_EXPORT SCM char_nump P((SCM chr));
+-SCM_EXPORT SCM char_whitep P((SCM chr));
+-SCM_EXPORT SCM char_upperp P((SCM chr));
+-SCM_EXPORT SCM char_lowerp P((SCM chr));
+-SCM_EXPORT SCM char2int P((SCM chr));
+-SCM_EXPORT SCM int2char P((SCM n));
+-SCM_EXPORT SCM char_upcase P((SCM chr));
+-SCM_EXPORT SCM char_downcase P((SCM chr));
+-SCM_EXPORT SCM stringp P((SCM x));
++SCM_EXPORT SCM istr2int P((const char *str, long len, int radix));
++SCM_EXPORT SCM istr2bve P((const char *str, long len));
++SCM_EXPORT void scm_ipruk P((const char *hdr, SCM ptr, SCM port));
+ SCM_EXPORT SCM string P((SCM chrs));
+ SCM_EXPORT SCM make_string P((SCM k, SCM chr));
+ SCM_EXPORT SCM string2list P((SCM str));
+-SCM_EXPORT SCM st_length P((SCM str));
+-SCM_EXPORT SCM st_ref P((SCM str, SCM k));
+-SCM_EXPORT SCM st_set P((SCM str, SCM k, SCM chr));
+ SCM_EXPORT SCM st_equal P((SCM s1, SCM s2));
+-SCM_EXPORT SCM stci_equal P((SCM s1, SCM s2));
+-SCM_EXPORT SCM st_lessp P((SCM s1, SCM s2));
+-SCM_EXPORT SCM stci_lessp P((SCM s1, SCM s2));
+ SCM_EXPORT SCM substring P((SCM str, SCM start, SCM end));
+ SCM_EXPORT SCM st_append P((SCM args));
+-SCM_EXPORT SCM vectorp P((SCM x));
+ SCM_EXPORT SCM vector_length P((SCM v));
+ SCM_EXPORT SCM vector P((SCM l));
+-SCM_EXPORT SCM vector_ref P((SCM v, SCM k));
+-SCM_EXPORT SCM vector_set P((SCM v, SCM k, SCM obj));
+ SCM_EXPORT SCM make_vector P((SCM k, SCM fill));
+ SCM_EXPORT SCM vector2list P((SCM v));
+@@ -952,12 +930,6 @@
+ SCM_EXPORT SCM scm_check_linum P((SCM x, SCM *linum));
+ SCM_EXPORT SCM scm_add_linum P((SCM linum, SCM x));
+-SCM_EXPORT SCM input_portp P((SCM x));
+-SCM_EXPORT SCM output_portp P((SCM x));
+-SCM_EXPORT SCM cur_input_port P((void));
+-SCM_EXPORT SCM cur_output_port P((void));
+ SCM_EXPORT SCM i_setbuf0 P((SCM port));
+-SCM_EXPORT SCM try_open_file P((SCM filename, SCM modes));
+ SCM_EXPORT SCM open_file P((SCM filename, SCM modes));
+-SCM_EXPORT SCM open_pipe P((SCM pipestr, SCM modes));
+ SCM_EXPORT SCM close_port P((SCM port));
+ SCM_EXPORT SCM scm_file_position P((SCM port, SCM pos));
+@@ -969,5 +941,4 @@
+ SCM_EXPORT SCM eof_objectp P((SCM x));
+ SCM_EXPORT int scm_io_error P((SCM port, const char *what));
+-SCM_EXPORT SCM scm_write P((SCM obj, SCM port));
+ SCM_EXPORT SCM scm_display P((SCM obj, SCM port));
+ SCM_EXPORT SCM scm_newline P((SCM port));
+@@ -977,5 +948,4 @@
+ SCM_EXPORT void scm_line_msg P((SCM file, SCM linum, SCM port));
+ SCM_EXPORT void scm_err_line P((const char *what, SCM file, SCM linum, SCM port));
+-SCM_EXPORT SCM scm_getenv P((SCM nam));
+ SCM_EXPORT SCM prog_args P((void));
+ SCM_EXPORT SCM makacro P((SCM code));
+@@ -997,5 +967,5 @@
+ #ifdef CAREFUL_INTS
+ SCM_EXPORT void ints_viol P((ints_infot *info, int sense));
+-SCM_EXPORT void ints_warn P((char *s1, char* s2, char *fname, int linum));
++SCM_EXPORT void ints_warn P((const char *s1, const char* s2, const char *fname, int linum));
+ #endif
+ SCM_EXPORT void add_final P((void (*final)(void)));
+@@ -1007,18 +977,12 @@
+ SCM_EXPORT SCM scm_load_string P((SCM str));
+ SCM_EXPORT SCM scm_unexec P((const SCM pathname));
+-SCM_EXPORT SCM scm_logbitp P((SCM index, SCM j1));
+-SCM_EXPORT SCM scm_logtest P((SCM x, SCM y));
+-SCM_EXPORT SCM scm_logxor P((SCM x, SCM y));
+-SCM_EXPORT SCM scm_logand P((SCM x, SCM y));
+-SCM_EXPORT SCM scm_logior P((SCM x, SCM y));
+-SCM_EXPORT SCM scm_lognot P((SCM n));
+-SCM_EXPORT SCM scm_intexpt P((SCM z1, SCM z2));
+-SCM_EXPORT SCM scm_intlog P((SCM base, SCM k));
+-SCM_EXPORT SCM scm_cintlog P((SCM base, SCM k));
+-SCM_EXPORT SCM scm_ash P((SCM n, SCM cnt));
+-SCM_EXPORT SCM scm_bitfield P((SCM n, SCM start, SCM end));
+-SCM_EXPORT SCM scm_logcount P((SCM n));
+-SCM_EXPORT SCM scm_intlength P((SCM n));
+-SCM_EXPORT SCM scm_copybit P((SCM index, SCM j1, SCM bit));
++SCM_EXPORT SCM scm_logbitp P((SCM index, SCM j1));
++SCM_EXPORT SCM scm_logtest P((SCM x, SCM y));
++SCM_EXPORT SCM scm_logxor P((SCM x, SCM y));
++SCM_EXPORT SCM scm_logand P((SCM x, SCM y));
++SCM_EXPORT SCM scm_logior P((SCM x, SCM y));
++SCM_EXPORT SCM scm_lognot P((SCM n));
++SCM_EXPORT SCM scm_ash P((SCM n, SCM cnt));
++SCM_EXPORT SCM scm_intlength P((SCM n));
+ SCM_EXPORT SCM scm_bitif P((SCM mask, SCM n0, SCM n1));
+ SCM_EXPORT SCM scm_copybitfield P((SCM to, SCM start, SCM rest));
+@@ -1027,11 +991,11 @@
+ SCM_EXPORT SCM long2num P((long n));
+ SCM_EXPORT SCM ulong2num P((unsigned long n));
+-SCM_EXPORT unsigned char num2uchar P((SCM num, char *pos, char *s_caller));
+-SCM_EXPORT signed char num2char P((SCM num, char *pos, char *s_caller));
+-SCM_EXPORT unsigned short num2ushort P((SCM num, char *pos, char *s_caller));
+-SCM_EXPORT short num2short P((SCM num, char *pos, char *s_caller));
+-SCM_EXPORT unsigned long num2ulong P((SCM num, char *pos, char *s_caller));
+-SCM_EXPORT long num2long P((SCM num, char *pos, char *s_caller));
+-SCM_EXPORT double num2dbl P((SCM num, char *pos, char *s_caller));
++SCM_EXPORT unsigned char num2uchar P((SCM num, const char *pos, const char *s_caller));
++SCM_EXPORT signed char num2char P((SCM num, const char *pos, const char *s_caller));
++SCM_EXPORT unsigned short num2ushort P((SCM num, const char *pos, const char *s_caller));
++SCM_EXPORT short num2short P((SCM num, const char *pos, const char *s_caller));
++SCM_EXPORT unsigned long num2ulong P((SCM num, const char *pos, const char *s_caller));
++SCM_EXPORT long num2long P((SCM num, const char *pos, const char *s_caller));
++SCM_EXPORT double num2dbl P((SCM num, const char *pos, const char *s_caller));
+ SCM_EXPORT SCM makfromstr P((const char *src, sizet len));
+ SCM_EXPORT SCM makfromstrs P((int argc, const char * const *argv));
+@@ -1039,8 +1003,8 @@
+ SCM_EXPORT char **makargvfrmstrs P((SCM args, const char *s_v));
+ SCM_EXPORT void must_free_argv P((char **argv));
+-SCM_EXPORT SCM scm_evstr P((char *str));
+-SCM_EXPORT void scm_ldstr P((char *str));
+-SCM_EXPORT int scm_ldfile P((char *path));
+-SCM_EXPORT int scm_ldprog P((char *path));
++SCM_EXPORT SCM scm_evstr P((const char *str));
++SCM_EXPORT void scm_ldstr P((const char *str));
++SCM_EXPORT int scm_ldfile P((const char *path));
++SCM_EXPORT int scm_ldprog P((const char *path));
+ SCM_EXPORT void* scm_addr P((SCM args, const char *name));
+ SCM_EXPORT void* scm_base_addr P((SCM v, const char *name));
+@@ -1061,9 +1025,8 @@
+ SCM_EXPORT SCM normbig P((SCM b));
+ SCM_EXPORT SCM copybig P((SCM b, int sign));
+-SCM_EXPORT SCM addbig P((BIGDIG *x, sizet nx, int xsgn, SCM bigy, int sgny));
+-SCM_EXPORT SCM mulbig P((BIGDIG *x, sizet nx, BIGDIG *y, sizet ny, int sgn));
++SCM_EXPORT SCM addbig P((const BIGDIG *x, sizet nx, int xsgn, SCM bigy, int sgny));
++SCM_EXPORT SCM mulbig P((const BIGDIG *x, sizet nx, const BIGDIG *y, sizet ny, int sgn));
+ SCM_EXPORT UBIGLONG divbigdig P((BIGDIG *ds, sizet h, BIGDIG div));
+-SCM_EXPORT SCM divbigint P((SCM x, long z, int sgn, int mode));
+-SCM_EXPORT SCM divbigbig P((BIGDIG *x, sizet nx, BIGDIG *y, sizet ny, int sgn,
++SCM_EXPORT SCM divbigbig P((const BIGDIG *x, sizet nx, BIGDIG *y, sizet ny, int sgn,
+ int mode));
+ SCM_EXPORT long pseudolong P((long x));
+@@ -1077,6 +1040,6 @@
+ SCM_EXPORT char * scm_try_path P((char *path));
+ SCM_EXPORT char * script_find_executable P((const char *command));
+-SCM_EXPORT char ** script_process_argv P((int argc, const char **argv));
+-SCM_EXPORT int script_count_argv P((const char **argv));
++SCM_EXPORT const char * const * script_process_argv P((int argc, const char * const *argv));
++SCM_EXPORT int script_count_argv P((const char * const *argv));
+ SCM_EXPORT char * find_impl_file P((const char *exec_path, const char *generic_name,
+ const char *initname, const char *sep));
+@@ -1085,4 +1048,6 @@
+ SCM_EXPORT void scm_ecache_report P((void));
+ SCM_EXPORT void scm_estk_reset P((sizet size));
++SCM_EXPORT void scm_estk_grow P((void));
++SCM_EXPORT void scm_estk_shrink P((void));
+ SCM_EXPORT void scm_env_cons P((SCM x, SCM y));
+ SCM_EXPORT void scm_env_cons2 P((SCM w, SCM x, SCM y));
+@@ -1091,4 +1056,5 @@
+ SCM_EXPORT void scm_extend_env P((void));
+ SCM_EXPORT void scm_egc P((void));
++SCM_EXPORT void scm_dynthrow P((SCM cont, SCM arg1, SCM arg2, SCM rest));
+
+ /* Global state for environment cache */
+@@ -1109,8 +1075,15 @@
+ # define ASRTGO(_cond, _label) ;
+ #else
+-# define ASRTER(_cond, _arg, _pos, _subr) if (SCM_EXPECT_FALSE(!(_cond))) wta(_arg, (char *)(_pos), _subr);
++# define ASRTER(_cond, _arg, _pos, _subr) if (SCM_EXPECT_FALSE(!(_cond))) wta(_arg, (const char *)(_pos), _subr);
+ # define ASRTGO(_cond, _label) if (SCM_EXPECT_FALSE(!(_cond))) goto _label;
+ #endif
+
++SCM_EXPORT void igc P((const char *what, SCM basecont));
++SCM_EXPORT void unexec P((const char *new_name, const char *a_name, unsigned data_start,
++ unsigned bss_start, unsigned entry_address));
++SCM_EXPORT void scm_fill_freelist P((void));
++struct stat;
++SCM_EXPORT SCM stat2scm P((const struct stat *stat_temp));
++
+ #define ARGn 1L
+ #define ARG1 2L
+--- scmmain.c 2013-04-06 21:52:41.000000000 -0400
++++ scmmain.c 2015-01-23 18:55:19.000000000 -0500
+@@ -19,9 +19,4 @@
+ /* Author: Aubrey Jaffer */
+
+-/* added by Dai Inukai 2001-03-21*/
+-#ifdef __FreeBSD__
+-# include <floatingpoint.h>
+-#endif
+-
+ #ifdef _WIN32
+ # include <io.h>
+@@ -47,5 +42,5 @@
+ #endif
+
+-char *scm_find_implpath(execpath)
++static char *scm_find_implpath(execpath)
+ const char *execpath;
+ {
+@@ -84,14 +79,11 @@
+ int main(argc, argv)
+ int argc;
+- const char **argv;
++ const char * const *argv;
+ {
+- char *script_arg = 0; /* location of SCSH style script file or 0. */
+- char *implpath = 0, **nargv;
++ const char *script_arg = NULL; /* location of SCSH style script file or 0. */
++ char *implpath = NULL;
++ const char * const * nargv;
+ int nargc, iverbose = 0, buf0stdin;
+ SCM retval;
+-/* added by Dai Inukai 2001-03-21 */
+-#ifdef __FreeBSD__
+- fp_prec_t fpspec;
+-#endif
+
+ #ifdef WINSIGNALS
+@@ -111,9 +103,5 @@
+ init_sbrk(); /* Do this before malloc()s. */
+ #endif
+-/* added by Dai Inukai 2001-03-21 */
+-#ifdef __FreeBSD__
+- fpspec = fpsetprec(FP_PE); /* IEEE 64 bit FP mantissa*/
+-#endif
+- execpath = 0; /* even when dumped */
++ execpath = NULL; /* even when dumped */
+ if ((nargv = script_process_argv(argc, argv))) { /* SCSH style scripts */
+ script_arg = argv[2]; /* Save for scm_find_execpath() call */
+@@ -152,10 +140,4 @@
+ if (execpath) free(execpath);
+ execpath = 0;
+-/* added by Dai Inukai 2001-03-27 */
+-#ifdef __FreeBSD__
+- fpspec = fpsetprec(fpspec); /* Set back to FP_PD which is 53 bit FP. */
+- /* This may not be needed because the */
+- /* kernel is set to FP_PD by default. */
+-#endif
+ return (int)INUM(retval);
+ }
+--- script.c 2008-01-30 22:32:55.000000000 -0500
++++ script.c 2015-01-23 18:55:19.000000000 -0500
+@@ -54,10 +54,10 @@
+ {
+ long len = strlen(str1);
+- str1 = (char *)realloc(str1, (sizet)(len + n + 1));
++ str1 = realloc(str1, (sizet)(len + n + 1));
+ if (!str1) return 0L;
+ strncat(str1 + len, str2, n);
+ return str1;
+ }
+- str1 = (char *)malloc((sizet)(n + 1));
++ str1 = malloc((sizet)(n + 1));
+ if (!str1) return 0L;
+ str1[0] = 0;
+@@ -81,5 +81,5 @@
+ }
+
+-char *scm_sep_init_try(path, sep, initname)
++static char *scm_sep_init_try(path, sep, initname)
+ char *path;
+ const char *sep, *initname;
+@@ -147,6 +147,6 @@
+ {
+ char *sepptr = strrchr(exec_path, sep[0]);
+- char *extptr = exec_path + strlen(exec_path);
+- char *path = 0;
++ const char *extptr = exec_path + strlen(exec_path);
++ char *path = NULL;
+
+ #ifdef _WIN32
+@@ -189,5 +189,5 @@
+ if (!strcmp(sepptr, "exe") || !strcmp(sepptr, "bin") ||
+ !strcmp(sepptr, "EXE") || !strcmp(sepptr, "BIN")) {
+- char *peer;
++ const char *peer;
+
+ /* Look for initname in peer directory "lib". */
+@@ -279,10 +279,10 @@
+ }
+
+-char *script_read_arg(f)
++static const char *script_read_arg(f)
+ FILE *f;
+ {
+ sizet tlen = 1;
+ int tind = 0, qted = 0, chr;
+- char *tbuf = (char *)malloc((1 + tlen) * sizeof(char));
++ char *tbuf = malloc((1 + tlen) * sizeof(char));
+ if (!tbuf) return 0L;
+ while (1) switch (chr = getc(f)) {
+@@ -337,5 +337,5 @@
+ }
+
+-int script_meta_arg_P(arg)
++static int script_meta_arg_P(arg)
+ const char *arg;
+ {
+@@ -352,12 +352,12 @@
+ }
+
+-char **script_process_argv(argc, argv)
++const char * const *script_process_argv(argc, argv)
+ int argc;
+- const char **argv;
++ const char * const *argv;
+ {
+ int nargc = argc, argi = 1, nargi = 1;
+- char *narg, **nargv;
+- if (!(argc > 2 && script_meta_arg_P(argv[1]))) return 0L;
+- if (!(nargv = (char **)malloc((1 + nargc) * sizeof(char *)))) return 0L;
++ const char *narg, **nargv;
++ if (!(argc > 2 && script_meta_arg_P(argv[1]))) return NULL;
++ if (!(nargv = malloc((1 + nargc) * sizeof(char *)))) return NULL;
+ nargv[0] = argv[0];
+ while (((argi+1) < argc) && (script_meta_arg_P(argv[argi]))) {
+@@ -366,10 +366,10 @@
+ nargc--; /* to compensate for replacement of '\\' */
+ while (1) switch (getc(f)) {
+- case EOF: return 0L;
++ case EOF: return NULL;
+ default: continue;
+ case '\n': goto found_args;
+ }
+ found_args: while ((narg = script_read_arg(f)))
+- if (!(nargv = (char **)realloc(nargv, (1 + ++nargc) * sizeof(char *))))
++ if (!(nargv = realloc(nargv, (1 + ++nargc) * sizeof(char *))))
+ return 0L;
+ else nargv[nargi++] = narg;
+@@ -383,5 +383,5 @@
+
+ int script_count_argv(argv)
+- const char **argv;
++ const char * const *argv;
+ {
+ int argc = 0;
+--- socket.c 2008-01-30 22:32:57.000000000 -0500
++++ socket.c 2015-01-23 18:55:19.000000000 -0500
+@@ -54,6 +54,6 @@
+ #endif /* STDC_HEADERS */
+
+-static char s_inetaddr[] = "inet:string->address";
+-SCM l_inetaddr (host)
++static const char s_inetaddr[] = "inet:string->address";
++static SCM l_inetaddr (host)
+ SCM host;
+ {
+@@ -72,6 +72,6 @@
+ }
+
+-static char s_inetstr[] = "inet:address->string";
+-SCM l_inetstr (inetid)
++static const char s_inetstr[] = "inet:address->string";
++static SCM l_inetstr (inetid)
+ SCM inetid;
+ {
+@@ -83,6 +83,6 @@
+ }
+
+-static char s_network[] = "inet:network";
+-SCM l_network (host)
++static const char s_network[] = "inet:network";
++static SCM l_network (host)
+ SCM host;
+ {
+@@ -93,6 +93,6 @@
+
+ #ifndef __CYGWIN__
+-static char s_lna[] = "inet:local-network-address";
+-SCM l_lna (host)
++static const char s_lna[] = "inet:local-network-address";
++static SCM l_lna (host)
+ SCM host;
+ {
+@@ -103,6 +103,6 @@
+ #endif
+
+-static char s_makaddr[] = "inet:make-address";
+-SCM l_makaddr (net, lna)
++static const char s_makaddr[] = "inet:make-address";
++static SCM l_makaddr (net, lna)
+ SCM net, lna;
+ {
+@@ -115,6 +115,6 @@
+
+ #ifndef __CYGWIN__
+-static char s_hostinfo[] = "gethost";
+-SCM l_hostinfo(name)
++static const char s_hostinfo[] = "gethost";
++static SCM l_hostinfo(name)
+ SCM name;
+ {
+@@ -124,5 +124,5 @@
+ struct hostent *entry;
+ struct in_addr inad;
+- const char **argv;
++ const char * const *argv;
+ int i = 0;
+ # ifndef linux
+@@ -145,12 +145,13 @@
+ if (!entry) return BOOL_F;
+ ve[ 0] = makfrom0str(entry->h_name);
+- ve[ 1] = makfromstrs(-1, entry->h_aliases);
++ ve[ 1] = makfromstrs(-1, (const char * const *)entry->h_aliases);
+ ve[ 2] = MAKINUM(entry->h_addrtype + 0L);
+ ve[ 3] = MAKINUM(entry->h_length + 0L);
+ if (sizeof(struct in_addr) != entry->h_length)
+ {ve[ 4] = BOOL_F; return ans;}
+- for (argv = entry->h_addr_list; argv[i]; i++);
++ for (argv = (const char * const *)entry->h_addr_list; argv[i]; i++)
++ ;
+ while (i--) {
+- inad = *(struct in_addr *)argv[i];
++ inad = *(const struct in_addr *)argv[i];
+ lst = cons(ulong2num(ntohl(inad.s_addr)), lst);
+ }
+@@ -158,6 +159,6 @@
+ return ans;
+ }
+-static char s_netinfo[] = "getnet";
+-SCM l_netinfo(name)
++static const char s_netinfo[] = "getnet";
++static SCM l_netinfo(name)
+ SCM name;
+ {
+@@ -182,5 +183,5 @@
+ if (!entry) return BOOL_F;
+ ve[ 0] = makfrom0str(entry->n_name);
+- ve[ 1] = makfromstrs(-1, entry->n_aliases);
++ ve[ 1] = makfromstrs(-1, (const char * const *)entry->n_aliases);
+ ve[ 2] = MAKINUM(entry->n_addrtype + 0L);
+ ve[ 3] = ulong2num(entry->n_net + 0L);
+@@ -188,6 +189,6 @@
+ }
+ #endif
+-static char s_protoinfo[] = "getproto";
+-SCM l_protoinfo(name)
++static const char s_protoinfo[] = "getproto";
++static SCM l_protoinfo(name)
+ SCM name;
+ {
+@@ -212,10 +213,10 @@
+ if (!entry) return BOOL_F;
+ ve[ 0] = makfrom0str(entry->p_name);
+- ve[ 1] = makfromstrs(-1, entry->p_aliases);
++ ve[ 1] = makfromstrs(-1, (const char * const *)entry->p_aliases);
+ ve[ 2] = MAKINUM(entry->p_proto + 0L);
+ return ans;
+ }
+-static char s_servinfo[] = "getserv";
+-SCM l_servinfo(args)
++static const char s_servinfo[] = "getserv";
++static SCM l_servinfo(args)
+ SCM args;
+ {
+@@ -245,5 +246,5 @@
+ if (!entry) return BOOL_F;
+ ve[ 0] = makfrom0str(entry->s_name);
+- ve[ 1] = makfromstrs(-1, entry->s_aliases);
++ ve[ 1] = makfromstrs(-1, (const char * const *)entry->s_aliases);
+ ve[ 2] = MAKINUM(ntohs(entry->s_port) + 0L);
+ ve[ 3] = makfrom0str(entry->s_proto);
+@@ -251,5 +252,5 @@
+ }
+
+-SCM l_sethost(arg)
++static SCM l_sethost(arg)
+ SCM arg;
+ {
+@@ -259,5 +260,5 @@
+ }
+ #ifndef __CYGWIN__
+-SCM l_setnet(arg)
++static SCM l_setnet(arg)
+ SCM arg;
+ {
+@@ -267,5 +268,5 @@
+ }
+ #endif
+-SCM l_setproto(arg)
++static SCM l_setproto(arg)
+ SCM arg;
+ {
+@@ -274,5 +275,5 @@
+ return UNSPECIFIED;
+ }
+-SCM l_setserv(arg)
++static SCM l_setserv(arg)
+ SCM arg;
+ {
+@@ -282,6 +283,6 @@
+ }
+
+-static char s_socket[] = "make-stream-socket";
+-SCM l_socket(fam, proto)
++static const char s_socket[] = "make-stream-socket";
++static SCM l_socket(fam, proto)
+ SCM fam, proto;
+ {
+@@ -316,6 +317,6 @@
+ return port;
+ }
+-static char s_socketpair[] = "make-stream-socketpair";
+-SCM l_socketpair(fam, proto)
++static const char s_socketpair[] = "make-stream-socketpair";
++static SCM l_socketpair(fam, proto)
+ SCM fam, proto;
+ {
+@@ -349,6 +350,6 @@
+ }
+
+-static char s_shutdown[] = "socket:shutdown";
+-SCM l_shutdown(port, how)
++static const char s_shutdown[] = "socket:shutdown";
++static SCM l_shutdown(port, how)
+ SCM port, how;
+ {
+@@ -369,7 +370,7 @@
+ return port;
+ }
+-static char s_unkfam[] = "unknown-family";
+-static char s_connect[] = "socket:connect";
+-SCM l_connect (sockpt, address, arg)
++static const char s_unkfam[] = "unknown-family";
++static const char s_connect[] = "socket:connect";
++static SCM l_connect (sockpt, address, arg)
+ SCM sockpt, address, arg;
+ {
+@@ -414,6 +415,6 @@
+ }
+
+-static char s_bind[] = "socket:bind";
+-SCM l_bind(sockpt, address)
++static const char s_bind[] = "socket:bind";
++static SCM l_bind(sockpt, address)
+ SCM sockpt, address;
+ {
+@@ -450,6 +451,6 @@
+ }
+
+-static char s_listen[] = "socket:listen";
+-SCM l_listen(port, backlog)
++static const char s_listen[] = "socket:listen";
++static SCM l_listen(port, backlog)
+ SCM port, backlog;
+ {
+@@ -468,9 +469,10 @@
+ }
+
+-static char s_accept[] = "socket:accept";
+-SCM l_accept(sockpt)
++static const char s_accept[] = "socket:accept";
++static SCM l_accept(sockpt)
+ SCM sockpt;
+ {
+- int newsd, sadlen;
++ int newsd;
++ socklen_t sadlen;
+ struct sockaddr sad;
+ FILE *newfd;
+@@ -499,5 +501,5 @@
+ }
+
+-int sknm_print(exp, port, writing)
++static int sknm_print(exp, port, writing)
+ SCM exp; SCM port; int writing;
+ {
+@@ -521,5 +523,5 @@
+ return !0;
+ }
+-sizet sknm_free(p)
++static sizet sknm_free(p)
+ CELLPTR p;
+ {
+@@ -530,6 +532,6 @@
+ static smobfuns sknm_smob = {mark0, sknm_free, sknm_print, 0};
+
+-char s_sknm_family[] = "socket-name:family";
+-SCM l_sknm_family(snm)
++const char s_sknm_family[] = "socket-name:family";
++static SCM l_sknm_family(snm)
+ SCM snm;
+ {
+@@ -537,6 +539,6 @@
+ return MAKINUM(((struct sockaddr *)CDR(snm))->sa_family + 0L);
+ }
+-char s_sknm_port_num[] = "socket-name:port-number";
+-SCM l_sknm_port_num(snm)
++const char s_sknm_port_num[] = "socket-name:port-number";
++static SCM l_sknm_port_num(snm)
+ SCM snm;
+ {
+@@ -550,6 +552,6 @@
+ }
+ }
+-char s_sknm_addr[] = "socket-name:address";
+-SCM l_sknm_addr(snm)
++const char s_sknm_addr[] = "socket-name:address";
++static SCM l_sknm_addr(snm)
+ SCM snm;
+ {
+@@ -566,12 +568,12 @@
+ }
+
+-SCM maksknm(sad)
+- struct sockaddr *sad;
++static SCM maksknm(sad)
++ struct sockaddr_in *sad;
+ {
+ SCM sknm;
+- struct sockaddr *msknm;
++ struct sockaddr_in *msknm;
+ DEFER_INTS;
+ sknm = must_malloc_cell(0L+sizeof(struct sockaddr), (SCM)tc16_sknm, "sknm");
+- msknm = (struct sockaddr *)CDR(sknm);
++ msknm = (struct sockaddr_in *)CDR(sknm);
+ *msknm = *sad;
+ ALLOW_INTS;
+@@ -579,10 +581,11 @@
+ }
+
+-static char s_getpeername[] = "getpeername";
+-SCM l_getpeername(sockpt)
++static const char s_getpeername[] = "getpeername";
++static SCM l_getpeername(sockpt)
+ SCM sockpt;
+ {
+ struct sockaddr_in sad;
+- int sts, sadlen = sizeof(sad);
++ int sts;
++ socklen_t sadlen = sizeof(sad);
+ bzero((char *) &sad, sizeof(sad));
+ ASRTER(NIMP(sockpt) && OPFPORTP(sockpt), sockpt, ARG1, s_getpeername);
+@@ -593,11 +596,12 @@
+ return maksknm(&sad);
+ }
+-static char s_getsockname[] = "getsockname";
+-SCM l_getsockname(sockpt)
++static const char s_getsockname[] = "getsockname";
++static SCM l_getsockname(sockpt)
+ SCM sockpt;
+ {
+ struct sockaddr_in sad;
+- int sts, sadlen = sizeof(sad);
+- bzero((char *) &sad, sizeof(sad));
++ int sts;
++ socklen_t sadlen = sizeof(sad);
++ bzero(&sad, sizeof(sad));
+ ASRTER(NIMP(sockpt) && OPFPORTP(sockpt), sockpt, ARG1, s_getsockname);
+ SYSCALL(sts = getsockname(fileno(STREAM(sockpt)),
+--- subr.c 2014-05-02 20:06:08.000000000 -0400
++++ subr.c 2015-01-23 18:55:19.000000000 -0500
+@@ -25,14 +25,13 @@
+ #define s_append (s_st_append+7)
+
+-char s_make_string[] = "make-string";
+-char s_list[] = "list";
++const char s_make_string[] = "make-string";
++const char s_list[] = "list";
+
+-static char s_setcar[] = "set-car!", s_setcdr[] = "set-cdr!",
++static const char s_setcar[] = "set-car!", s_setcdr[] = "set-cdr!",
+ s_reverse[] = "reverse", s_list_ref[] = "list-ref";
+-static char s_memq[] = "memq", s_member[] = "member",
++static const char s_memq[] = "memq", s_member[] = "member",
+ s_assq[] = "assq", s_assoc[] = "assoc";
+-static char s_symbol2string[] = "symbol->string",
++static const char s_symbol2string[] = "symbol->string",
+ s_str2symbol[] = "string->symbol";
+-extern char s_inexactp[];
+ #define s_exactp (s_inexactp+2)
+ static char s_oddp[] = "odd?", s_evenp[] = "even?";
+@@ -64,5 +63,9 @@
+ s_ve_ref[] = "vector-ref", s_ve_set[] = "vector-set!";
+
+-SCM lnot(x)
++#ifdef BIGDIG
++static SCM divbigint(SCM x, long z, int sgn, int mode); /* Forward declaration */
++#endif
++
++static SCM lnot(x)
+ SCM x;
+ {
+@@ -83,5 +86,5 @@
+ }
+
+-SCM consp(x)
++static SCM consp(x)
+ SCM x;
+ {
+@@ -89,5 +92,5 @@
+ return CONSP(x) ? BOOL_T : BOOL_F;
+ }
+-SCM setcar(pair, value)
++static SCM setcar(pair, value)
+ SCM pair, value;
+ {
+@@ -96,5 +99,5 @@
+ return UNSPECIFIED;
+ }
+-SCM setcdr(pair, value)
++static SCM setcdr(pair, value)
+ SCM pair, value;
+ {
+@@ -103,5 +106,5 @@
+ return UNSPECIFIED;
+ }
+-SCM nullp(x)
++static SCM nullp(x)
+ SCM x;
+ {
+@@ -127,5 +130,5 @@
+ return -1;
+ }
+-SCM listp(x)
++static SCM listp(x)
+ SCM x;
+ {
+@@ -184,5 +187,5 @@
+ return res;
+ }
+-SCM list_ref(lst, k)
++static SCM list_ref(lst, k)
+ SCM lst, k;
+ {
+@@ -209,5 +212,5 @@
+ return BOOL_F;
+ }
+-SCM member(x, lst)
++static SCM member(x, lst)
+ SCM x, lst;
+ {
+@@ -232,5 +235,5 @@
+ return BOOL_F;
+ }
+-SCM assoc(x, alist)
++static SCM assoc(x, alist)
+ SCM x, alist;
+ {
+@@ -246,6 +249,5 @@
+ }
+
+-extern long tc16_promise;
+-SCM promisep(x)
++static SCM promisep(x)
+ SCM x;
+ {
+@@ -253,5 +255,5 @@
+ }
+
+-SCM symbolp(x)
++static SCM symbolp(x)
+ SCM x;
+ {
+@@ -475,5 +477,5 @@
+ return MAKINUM(z);
+ }
+-SCM lremainder(x, y)
++static SCM lremainder(x, y)
+ SCM x, y;
+ {
+@@ -553,5 +555,5 @@
+ }
+
+-SCM lgcd(x, y)
++static SCM lgcd(x, y)
+ SCM x, y;
+ {
+@@ -611,5 +613,5 @@
+ return MAKINUM(u);
+ }
+-SCM llcm(n1, n2)
++static SCM llcm(n1, n2)
+ SCM n1, n2;
+ {
+@@ -662,11 +664,11 @@
+ #ifdef BIGDIG
+
+-SCM scm_big_ior P((BIGDIG *x, sizet nx, int xsgn, SCM bigy));
+-SCM scm_big_and P((BIGDIG *x, sizet nx, int xsgn, SCM bigy, int zsgn));
+-SCM scm_big_xor P((BIGDIG *x, sizet nx, int xsgn, SCM bigy));
+-SCM scm_big_test P((BIGDIG *x, sizet nx, int xsgn, SCM bigy));
+-SCM scm_big_ash P((SCM x, int cnt));
++static SCM scm_big_ior P((const BIGDIG *x, sizet nx, int xsgn, SCM bigy));
++static SCM scm_big_and P((const BIGDIG *x, sizet nx, int xsgn, SCM bigy, int zsgn));
++static SCM scm_big_xor P((const BIGDIG *x, sizet nx, int xsgn, SCM bigy));
++static SCM scm_big_test P((const BIGDIG *x, sizet nx, int xsgn, SCM bigy));
++static SCM scm_big_ash P((SCM x, int cnt));
+
+-SCM scm_copy_big_dec(b, sign)
++static SCM scm_copy_big_dec(b, sign)
+ SCM b;
+ int sign;
+@@ -687,6 +689,6 @@
+ }
+
+-SCM scm_copy_smaller(x, nx, zsgn)
+- BIGDIG *x;
++static SCM scm_copy_smaller(x, nx, zsgn)
++ const BIGDIG *x;
+ sizet nx;
+ int zsgn;
+@@ -706,5 +708,5 @@
+
+ SCM scm_big_ior(x, nx, xsgn, bigy)
+- BIGDIG *x;
++ const BIGDIG *x;
+ SCM bigy;
+ sizet nx; /* Assumes nx <= NUMDIGS(bigy) */
+@@ -738,5 +740,5 @@
+
+ SCM scm_big_xor(x, nx, xsgn, bigy)
+- BIGDIG *x;
++ const BIGDIG *x;
+ SCM bigy;
+ sizet nx; /* Assumes nx <= NUMDIGS(bigy) */
+@@ -770,5 +772,5 @@
+
+ SCM scm_big_and(x, nx, xsgn, bigy, zsgn)
+- BIGDIG *x;
++ const BIGDIG *x;
+ SCM bigy;
+ sizet nx; /* Assumes nx <= NUMDIGS(bigy) */
+@@ -814,5 +816,5 @@
+
+ SCM scm_big_test(x, nx, xsgn, bigy)
+- BIGDIG *x;
++ const BIGDIG *x;
+ SCM bigy;
+ sizet nx; /* Assumes nx <= NUMDIGS(bigy) */
+@@ -1221,5 +1223,5 @@
+ }
+
+-SCM scm_copybit(index, j1, bit)
++static SCM scm_copybit(index, j1, bit)
+ SCM index, j1, bit;
+ {
+@@ -1296,8 +1298,10 @@
+ }
+
+-SCM scm_bitfield(n, start, end)
++static SCM scm_bitfield(n, start, end)
+ SCM n, start, end;
+ {
++#ifdef BIGDIG
+ int sign;
++#endif
+ int istart = INUM(start);
+ int iend = INUM(end);
+@@ -1388,6 +1392,6 @@
+ }
+
+-char logtab[] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
+-SCM scm_bitwise_bit_count(n)
++static const char logtab[] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
++static SCM scm_bitwise_bit_count(n)
+ SCM n;
+ {
+@@ -1421,5 +1425,5 @@
+ }
+
+-SCM scm_logcount(n)
++static SCM scm_logcount(n)
+ SCM n;
+ {
+@@ -1445,5 +1449,5 @@
+ }
+
+-char ilentab[] = {0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4};
++static const char ilentab[] = {0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4};
+ SCM scm_intlength(n)
+ SCM n;
+@@ -1475,10 +1479,10 @@
+ }
+
+-SCM charp(x)
++static SCM charp(x)
+ SCM x;
+ {
+ return ICHRP(x) ? BOOL_T : BOOL_F;
+ }
+-SCM char_lessp(x, y)
++static SCM char_lessp(x, y)
+ SCM x, y;
+ {
+@@ -1487,5 +1491,5 @@
+ return (ICHR(x) < ICHR(y)) ? BOOL_T : BOOL_F;
+ }
+-SCM char_leqp(x, y)
++static SCM char_leqp(x, y)
+ SCM x, y;
+ {
+@@ -1494,5 +1498,5 @@
+ return (ICHR(x) <= ICHR(y)) ? BOOL_T : BOOL_F;
+ }
+-SCM char_grp(x, y)
++static SCM char_grp(x, y)
+ SCM x, y;
+ {
+@@ -1501,5 +1505,5 @@
+ return (ICHR(x) > ICHR(y)) ? BOOL_T : BOOL_F;
+ }
+-SCM char_geqp(x, y)
++static SCM char_geqp(x, y)
+ SCM x, y;
+ {
+@@ -1508,5 +1512,5 @@
+ return (ICHR(x) >= ICHR(y)) ? BOOL_T : BOOL_F;
+ }
+-SCM chci_eq(x, y)
++static SCM chci_eq(x, y)
+ SCM x, y;
+ {
+@@ -1515,5 +1519,5 @@
+ return (upcase[ICHR(x)]==upcase[ICHR(y)]) ? BOOL_T : BOOL_F;
+ }
+-SCM chci_lessp(x, y)
++static SCM chci_lessp(x, y)
+ SCM x, y;
+ {
+@@ -1522,5 +1526,5 @@
+ return (upcase[ICHR(x)] < upcase[ICHR(y)]) ? BOOL_T : BOOL_F;
+ }
+-SCM chci_leqp(x, y)
++static SCM chci_leqp(x, y)
+ SCM x, y;
+ {
+@@ -1529,5 +1533,5 @@
+ return (upcase[ICHR(x)] <= upcase[ICHR(y)]) ? BOOL_T : BOOL_F;
+ }
+-SCM chci_grp(x, y)
++static SCM chci_grp(x, y)
+ SCM x, y;
+ {
+@@ -1536,5 +1540,5 @@
+ return (upcase[ICHR(x)] > upcase[ICHR(y)]) ? BOOL_T : BOOL_F;
+ }
+-SCM chci_geqp(x, y)
++static SCM chci_geqp(x, y)
+ SCM x, y;
+ {
+@@ -1543,5 +1547,5 @@
+ return (upcase[ICHR(x)] >= upcase[ICHR(y)]) ? BOOL_T : BOOL_F;
+ }
+-SCM char_alphap(chr)
++static SCM char_alphap(chr)
+ SCM chr;
+ {
+@@ -1549,5 +1553,5 @@
+ return (isascii(ICHR(chr)) && isalpha(ICHR(chr))) ? BOOL_T : BOOL_F;
+ }
+-SCM char_nump(chr)
++static SCM char_nump(chr)
+ SCM chr;
+ {
+@@ -1555,5 +1559,5 @@
+ return (isascii(ICHR(chr)) && isdigit(ICHR(chr))) ? BOOL_T : BOOL_F;
+ }
+-SCM char_whitep(chr)
++static SCM char_whitep(chr)
+ SCM chr;
+ {
+@@ -1561,5 +1565,5 @@
+ return (isascii(ICHR(chr)) && isspace(ICHR(chr))) ? BOOL_T : BOOL_F;
+ }
+-SCM char_upperp(chr)
++static SCM char_upperp(chr)
+ SCM chr;
+ {
+@@ -1567,5 +1571,5 @@
+ return (isascii(ICHR(chr)) && isupper(ICHR(chr))) ? BOOL_T : BOOL_F;
+ }
+-SCM char_lowerp(chr)
++static SCM char_lowerp(chr)
+ SCM chr;
+ {
+@@ -1573,5 +1577,5 @@
+ return (isascii(ICHR(chr)) && islower(ICHR(chr))) ? BOOL_T : BOOL_F;
+ }
+-SCM char2int(chr)
++static SCM char2int(chr)
+ SCM chr;
+ {
+@@ -1579,5 +1583,5 @@
+ return MAKINUM(ICHR(chr));
+ }
+-SCM int2char(n)
++static SCM int2char(n)
+ SCM n;
+ {
+@@ -1587,5 +1591,5 @@
+ return MAKICHR(INUM(n));
+ }
+-SCM char_upcase(chr)
++static SCM char_upcase(chr)
+ SCM chr;
+ {
+@@ -1593,5 +1597,5 @@
+ return MAKICHR(upcase[ICHR(chr)]);
+ }
+-SCM char_downcase(chr)
++static SCM char_downcase(chr)
+ SCM chr;
+ {
+@@ -1600,5 +1604,5 @@
+ }
+
+-SCM stringp(x)
++static SCM stringp(x)
+ SCM x;
+ {
+@@ -1637,5 +1641,5 @@
+ return res;
+ }
+-SCM st_length(str)
++static SCM st_length(str)
+ SCM str;
+ {
+@@ -1643,5 +1647,5 @@
+ return MAKINUM(LENGTH(str));
+ }
+-SCM st_ref(str, k)
++static SCM st_ref(str, k)
+ SCM str, k;
+ {
+@@ -1651,5 +1655,5 @@
+ return MAKICHR(UCHARS(str)[INUM(k)]);
+ }
+-SCM st_set(str, k, chr)
++static SCM st_set(str, k, chr)
+ SCM str, k, chr;
+ {
+@@ -1675,5 +1679,5 @@
+ return BOOL_T;
+ }
+-SCM stci_equal(s1, s2)
++static SCM stci_equal(s1, s2)
+ SCM s1, s2;
+ {
+@@ -1689,5 +1693,5 @@
+ return BOOL_T;
+ }
+-SCM st_lessp(s1, s2)
++static SCM st_lessp(s1, s2)
+ SCM s1, s2;
+ {
+@@ -1709,20 +1713,20 @@
+ return (LENGTH(s2) != len) ? BOOL_T : BOOL_F;
+ }
+-SCM st_leqp(s1, s2)
++static SCM st_leqp(s1, s2)
+ SCM s1, s2;
+ {
+ return BOOL_NOT(st_lessp(s2, s1));
+ }
+-SCM st_grp(s1, s2)
++static SCM st_grp(s1, s2)
+ SCM s1, s2;
+ {
+ return st_lessp(s2, s1);
+ }
+-SCM st_geqp(s1, s2)
++static SCM st_geqp(s1, s2)
+ SCM s1, s2;
+ {
+ return BOOL_NOT(st_lessp(s1, s2));
+ }
+-SCM stci_lessp(s1, s2)
++static SCM stci_lessp(s1, s2)
+ SCM s1, s2;
+ {
+@@ -1744,15 +1748,15 @@
+ return (LENGTH(s2) != len) ? BOOL_T : BOOL_F;
+ }
+-SCM stci_leqp(s1, s2)
++static SCM stci_leqp(s1, s2)
+ SCM s1, s2;
+ {
+ return BOOL_NOT(stci_lessp(s2, s1));
+ }
+-SCM stci_grp(s1, s2)
++static SCM stci_grp(s1, s2)
+ SCM s1, s2;
+ {
+ return stci_lessp(s2, s1);
+ }
+-SCM stci_geqp(s1, s2)
++static SCM stci_geqp(s1, s2)
+ SCM s1, s2;
+ {
+@@ -1796,5 +1800,5 @@
+ }
+
+-SCM vectorp(x)
++static SCM vectorp(x)
+ SCM x;
+ {
+@@ -1820,5 +1824,5 @@
+ return res;
+ }
+-SCM vector_ref(v, k)
++static SCM vector_ref(v, k)
+ SCM v, k;
+ {
+@@ -1828,5 +1832,5 @@
+ return VELTS(v)[((long) INUM(k))];
+ }
+-SCM vector_set(v, k, obj)
++static SCM vector_set(v, k, obj)
+ SCM v, k, obj;
+ {
+@@ -1837,5 +1841,5 @@
+ return UNSPECIFIED;
+ }
+-char s_make_vector[] = "make-vector";
++const char s_make_vector[] = "make-vector";
+ SCM make_vector(k, fill)
+ SCM k, fill;
+@@ -1860,6 +1864,6 @@
+ }
+ #ifdef BIGDIG
+-char s_big_OVFLOW[] = "numerical overflow; NUMDIGS_MAX <";
+-char s_bignum[] = "bignum";
++static const char s_big_OVFLOW[] = "numerical overflow; NUMDIGS_MAX <";
++static const char s_bignum[] = "bignum";
+ SCM mkbig(nlen, sign)
+ sizet nlen;
+@@ -1894,5 +1898,5 @@
+ return b;
+ }
+-char s_adjbig[] = "adjbig";
++static const char s_adjbig[] = "adjbig";
+ SCM adjbig(b, nlen)
+ SCM b;
+@@ -1918,5 +1922,7 @@
+ # endif
+ BIGDIG *zds = BDIGITS(b);
+- while (nlen-- && !zds[nlen]); nlen++;
++ while (nlen-- && !zds[nlen])
++ ;
++ nlen++;
+ if (nlen * BITSPERDIG/CHAR_BIT <= sizeof(SCM))
+ if (INUMP(b = big2inum(b, (sizet)nlen))) return b;
+@@ -2005,5 +2011,5 @@
+
+ SCM addbig(x, nx, xsgn, bigy, sgny)
+- BIGDIG *x;
++ const BIGDIG *x;
+ SCM bigy;
+ sizet nx; /* Assumes nx <= NUMDIGS(bigy) */
+@@ -2053,5 +2059,5 @@
+
+ SCM mulbig(x, nx, y, ny, sgn)
+- BIGDIG *x, *y;
++ const BIGDIG *x, *y;
+ sizet nx, ny;
+ int sgn;
+@@ -2075,4 +2081,5 @@
+ return normbig(z);
+ }
++
+ UBIGLONG divbigdig(ds, h, div)
+ BIGDIG *ds;
+@@ -2088,5 +2095,5 @@
+ return t2;
+ }
+-SCM divbigint(x, z, sgn, mode)
++static SCM divbigint(x, z, sgn, mode)
+ SCM x;
+ long z;
+@@ -2115,8 +2122,7 @@
+ }
+
+-static SCM scm_copy_big_ash1 P((BIGDIG *xds, sizet xlen, BIGDIG dscl));
+ /* Make a copy of 2*xds and divide by dscl if dscl > 0 */
+-SCM scm_copy_big_ash1 (xds, xlen, dscl)
+- BIGDIG *xds;
++static SCM scm_copy_big_ash1 (xds, xlen, dscl)
++ const BIGDIG *xds;
+ sizet xlen;
+ BIGDIG dscl;
+@@ -2140,5 +2146,6 @@
+
+ SCM divbigbig(x, xlen, y, ylen, sgn, mode)
+- BIGDIG *x, *y;
++ const BIGDIG *x;
++ BIGDIG *y;
+ sizet xlen, ylen;
+ int sgn, mode;
+--- sys.c 2014-04-24 23:01:53.000000000 -0400
++++ sys.c 2015-01-27 01:32:50.000000000 -0500
+@@ -26,7 +26,6 @@
+ #endif
+
+-void igc P((const char *what, SCM basecont));
+-SCM *loc_open_file; /* for open-file callback */
+-SCM *loc_try_create_file;
++static SCM *loc_open_file; /* for open-file callback */
++static SCM *loc_try_create_file;
+
+ /* ttyname() etc. should be defined in <unistd.h>. But unistd.h is
+@@ -64,15 +63,15 @@
+ static void gc_sweep P((int contin_bad));
+
+-char s_nogrow[] = "could not grow", s_heap[] = "heap",
++const char s_nogrow[] = "could not grow", s_heap[] = "heap",
+ s_hplims[] = "hplims", s_try_create_file[] = "try-create-file";
+
+-static char s_segs[] = "segments", s_numheaps[] = "number of heaps";
+-static char s_input_portp[] = "input-port?",
++static const char s_segs[] = "segments", s_numheaps[] = "number of heaps";
++static const char s_input_portp[] = "input-port?",
+ s_output_portp[] = "output-port?";
+ #define s_portp (&s_input_portp[6])
+-static char s_port_closedp[] = "port-closed?";
+-static char s_try_open_file[] = "try-open-file";
++static const char s_port_closedp[] = "port-closed?";
++static const char s_try_open_file[] = "try-open-file";
+ #define s_open_file (&s_try_open_file[4])
+-char s_close_port[] = "close-port";
++const char s_close_port[] = "close-port";
+
+ #ifdef __IBMC__
+@@ -127,5 +126,6 @@
+ which are allowed by ANSI C. */
+ long mode_bits(modes, cmodes)
+- char *modes, *cmodes;
++ const char *modes;
++ char *cmodes;
+ {
+ int iout = 0;
+@@ -150,8 +150,8 @@
+ }
+
+-SCM try_open_file(filename, modes)
++static SCM try_open_file(filename, modes)
+ SCM filename, modes;
+ {
+- register SCM port;
++ SCM port;
+ FILE *f;
+ char cmodes[4];
+@@ -187,5 +187,5 @@
+ }
+
+-long tc16_clport;
++static long tc16_clport;
+ SCM close_port(port)
+ SCM port;
+@@ -213,5 +213,5 @@
+ return ret;
+ }
+-SCM scm_portp(x)
++static SCM scm_portp(x)
+ SCM x;
+ {
+@@ -219,5 +219,5 @@
+ return PORTP(x) ? BOOL_T : BOOL_F;
+ }
+-SCM input_portp(x)
++static SCM input_portp(x)
+ SCM x;
+ {
+@@ -225,5 +225,5 @@
+ return INPORTP(x) ? BOOL_T : BOOL_F;
+ }
+-SCM output_portp(x)
++static SCM output_portp(x)
+ SCM x;
+ {
+@@ -231,5 +231,5 @@
+ return OUTPORTP(x) ? BOOL_T : BOOL_F;
+ }
+-SCM port_closedp(port)
++static SCM port_closedp(port)
+ SCM port;
+ {
+@@ -238,5 +238,5 @@
+ return BOOL_F;
+ }
+-SCM scm_port_type(port)
++static SCM scm_port_type(port)
+ SCM port;
+ {
+@@ -261,5 +261,5 @@
+
+ #ifdef L_tmpnam
+-SCM ltmpnam()
++static SCM ltmpnam()
+ {
+ char name[L_tmpnam];
+@@ -291,7 +291,7 @@
+ # endif /* AMIGA */
+
+-char template[] = TEMPTEMPLATE;
++static const char template[] = TEMPTEMPLATE;
+ # define TEMPLEN (sizeof template/sizeof(char) - 1)
+-SCM ltmpnam()
++static SCM ltmpnam()
+ {
+ SCM name;
+@@ -319,6 +319,6 @@
+ # define remove unlink
+ #endif
+-static char s_del_fil[] = "delete-file";
+-SCM del_fil(str)
++static const char s_del_fil[] = "delete-file";
++static SCM del_fil(str)
+ SCM str;
+ {
+@@ -334,5 +334,5 @@
+
+ void prinport(exp, port, type)
+- SCM exp; SCM port; char *type;
++ SCM exp; SCM port; const char *type;
+ {
+ int filn = fileno(STREAM(exp));
+@@ -391,7 +391,7 @@
+ return c;
+ }
+-sizet stwrite(str, siz, num, p)
++static sizet stwrite(str, siz, num, p)
+ sizet siz, num;
+- char *str; SCM p;
++ const char *str; SCM p;
+ {
+ sizet ind = INUM(CAR(p));
+@@ -406,5 +406,5 @@
+ }
+ static int stputs(s, p)
+- char *s; SCM p;
++ const char *s; SCM p;
+ {
+ stwrite(s, 1, strlen(s), p);
+@@ -437,5 +437,5 @@
+ return c;
+ }
+-int noop0(stream)
++static int noop0(stream)
+ FILE *stream;
+ {
+@@ -446,5 +446,5 @@
+ SCM str;
+ long modes;
+- char *caller;
++ const char *caller;
+ {
+ SCM z;
+@@ -460,7 +460,7 @@
+ return z;
+ }
+-static char s_cwos[] = "call-with-output-string";
+-static char s_cwis[] = "call-with-input-string";
+-SCM cwos(proc)
++static const char s_cwos[] = "call-with-output-string";
++static const char s_cwis[] = "call-with-input-string";
++static SCM cwos(proc)
+ SCM proc;
+ {
+@@ -471,5 +471,5 @@
+ return resizuve(CDR(CDR(p)), CAR(CDR(p)));
+ }
+-SCM cwis(str, proc)
++static SCM cwis(str, proc)
+ SCM str, proc;
+ {
+@@ -557,5 +557,5 @@
+ return c;
+ }
+-sizet sfwrite(str, siz, num, p)
++static sizet sfwrite(str, siz, num, p)
+ sizet siz, num;
+ const void *str; SCM p;
+@@ -573,5 +573,5 @@
+ return 0;
+ }
+-int sfflush(stream)
++static int sfflush(stream)
+ SCM stream;
+ {
+@@ -601,6 +601,6 @@
+ return BOOL_F==f ? EOF : 0;
+ }
+-static char s_mksfpt[] = "make-soft-port";
+-SCM mksfpt(pv, modes)
++static const char s_mksfpt[] = "make-soft-port";
++static SCM mksfpt(pv, modes)
+ SCM pv, modes;
+ {
+@@ -614,10 +614,10 @@
+ for (i = 0; i < 5; i++) {
+ ASRTGO(FALSEP(VELTS(pv)[i]) ||
+- scm_arity_check(VELTS(pv)[i], arities[i], (char *)0),
++ scm_arity_check(VELTS(pv)[i], arities[i], NULL),
+ badarg);
+ }
+ #endif
+ ASRTER(NIMP(modes) && (STRINGP(modes) || SYMBOLP(modes)), modes, ARG2, s_mksfpt);
+- flags = mode_bits(CHARS(modes), (char *)0);
++ flags = mode_bits(CHARS(modes), NULL);
+ ASRTER(flags, modes, ARG2, s_mksfpt);
+ DEFER_INTS;
+@@ -649,5 +649,5 @@
+ static sizet clwrite(str, siz, num, p)
+ sizet siz, num;
+- char *str; FILE *p;
++ const void *str; FILE *p;
+ {
+ return 0;
+@@ -689,5 +689,5 @@
+ static sizet syswrite(str, siz, num, p)
+ sizet siz, num;
+- char *str; FILE *p;
++ const char *str; FILE *p;
+ {
+ sizet src, dst = errbuf_end;
+@@ -757,5 +757,5 @@
+ A setjmp must be done before each use of the safeport. */
+
+-static char s_msp[] = "mksafeport";
++static const char s_msp[] = "mksafeport";
+ int tc16_safeport;
+ SCM mksafeport(maxlen, port)
+@@ -895,5 +895,5 @@
+
+ scm_gra finals_gra;
+-static char s_final[] = "final";
++static const char s_final[] = "final";
+
+ /* statically allocated ports for diagnostic messages */
+@@ -948,5 +948,5 @@
+
+ static SCM gc_finalizers = EOL, gc_finalizers_pending = EOL;
+-static char s_add_finalizer[] = "add-finalizer";
++static const char s_add_finalizer[] = "add-finalizer";
+ SCM scm_add_finalizer(value, finalizer)
+ SCM value, finalizer;
+@@ -965,5 +965,5 @@
+ }
+
+-static char s_estk[] = "environment stack";
++static const char s_estk[] = "environment stack";
+ static cell ecache_v[ECACHE_SIZE];
+ SCM scm_egc_roots[ECACHE_SIZE/20];
+@@ -1063,6 +1063,6 @@
+ SCM x, y;
+ {
+- register SCM z;
+- register int i;
++ SCM z;
++ int i;
+ DEFER_INTS_EGC;
+ i = scm_ecache_index;
+@@ -1082,5 +1082,5 @@
+ {
+ SCM z1, z2;
+- register int i;
++ int i;
+ DEFER_INTS_EGC;
+ i = scm_ecache_index;
+@@ -1103,5 +1103,5 @@
+ {
+ SCM z1, z2;
+- register int i;
++ int i;
+ DEFER_INTS_EGC;
+ i = scm_ecache_index;
+@@ -1128,5 +1128,5 @@
+ {
+ SCM z1, z2;
+- register int i;
++ int i;
+ DEFER_INTS_EGC;
+ i = scm_ecache_index;
+@@ -1150,5 +1150,5 @@
+ {
+ SCM z;
+- register int i;
++ int i;
+ DEFER_INTS_EGC;
+ i = scm_ecache_index;
+@@ -1163,9 +1163,11 @@
+ scm_ecache_index = i;
+ }
++
++#if 0
+ void old_scm_extend_env(names)
+ SCM names;
+ {
+ SCM z1, z2;
+- register int i;
++ int i;
+ DEFER_INTS_EGC;
+ i = scm_ecache_index;
+@@ -1183,6 +1185,8 @@
+ scm_ecache_index = i;
+ }
+-char s_obunhash[] = "object-unhash", s_cache_gc[] = "cache_gc";
+-char s_recursive[] = "recursive";
++#endif
++
++const char s_obunhash[] = "object-unhash";
++static const char s_recursive[] = "recursive", s_cache_gc[] = "cache_gc";
+ #define s_gc (s_cache_gc+6)
+ static iproc subr0s[] = {
+@@ -1212,5 +1216,5 @@
+ {0, 0}};
+
+-SCM dynwind P((SCM thunk1, SCM thunk2, SCM thunk3));
++static SCM dynwind P((SCM thunk1, SCM thunk2, SCM thunk3));
+ void init_io()
+ {
+@@ -1232,5 +1236,5 @@
+ }
+
+-void grew_lim(nm)
++static void grew_lim(nm)
+ long nm;
+ {
+@@ -1263,6 +1267,6 @@
+ else grew_lim(mtrigger + mtrigger/2);
+ }
+- if (where) SYSCALL(ptr = (char *)realloc(where, size););
+- else SYSCALL(ptr = (char *)malloc(size););
++ if (where) SYSCALL(ptr = realloc(where, size););
++ else SYSCALL(ptr = malloc(size););
+ ASRTER(ptr, MAKINUM(size), NALLOC, what);
+ if (nm > mltrigger) {
+@@ -1395,14 +1399,15 @@
+ }
+ wta(sym, "uninterned symbol? ", "");
++ return -1;
+ }
+ /* intern() and sysintern() return a pair;
+ CAR is the symbol, CDR is the value. */
+ SCM intern(name, len)
+- char *name;
++ const char *name;
+ sizet len;
+ {
+ SCM lsym, z;
+- register sizet i = len;
+- register unsigned char *tmp = (unsigned char *)name;
++ sizet i = len;
++ const unsigned char *tmp = (const unsigned char *)name;
+ sizet hash = strhash(tmp, i, (unsigned long)symhash_dim);
+ /* printf("intern %s len=%d\n",name,len); fflush(stdout); */
+@@ -1413,5 +1418,5 @@
+ tmp = UCHARS(z);
+ if (LENGTH(z) != len) goto trynext;
+- for (i = len;i--;) if (((unsigned char *)name)[i] != tmp[i]) goto trynext;
++ for (i = len;i--;) if (((const unsigned char *)name)[i] != tmp[i]) goto trynext;
+ ALLOW_INTS;
+ return CAR(lsym);
+@@ -1436,6 +1441,6 @@
+ SCM lsym, z;
+ sizet len = strlen(name);
+- register sizet i = len;
+- register unsigned char *tmp = (unsigned char *)name;
++ sizet i = len;
++ const unsigned char *tmp = (const unsigned char *)name;
+ sizet hash = strhash(tmp, i, (unsigned long)symhash_dim);
+ for (lsym = VELTS(symhash)[hash];NIMP(lsym);lsym = CDR(lsym)) {
+@@ -1444,5 +1449,5 @@
+ tmp = UCHARS(z);
+ if (LENGTH(z) != len) goto trynext;
+- for (i = len;i--;) if (((unsigned char *)name)[i] != tmp[i]) goto trynext;
++ for (i = len;i--;) if (((const unsigned char *)name)[i] != tmp[i]) goto trynext;
+ lsym = CAR(lsym);
+ if (!UNBNDP(val)) CDR(lsym) = val;
+@@ -1464,5 +1469,5 @@
+ SCM x, y;
+ {
+- register SCM z;
++ SCM z;
+ NEWCELL(z);
+ CAR(z) = x;
+@@ -1473,5 +1478,5 @@
+ SCM w, x, y;
+ {
+- register SCM z;
++ SCM z;
+ NEWCELL(z);
+ CAR(z) = x;
+@@ -1486,5 +1491,5 @@
+ SCM w, x, y;
+ {
+- register SCM z;
++ SCM z;
+ NEWCELL(z);
+ CAR(z) = w;
+@@ -1511,5 +1516,5 @@
+ }
+
+-char s_redefining[] = "redefining ";
++const char s_redefining[] = "redefining ";
+ scm_gra subrs_gra;
+ SCM scm_maksubr(name, type, fcn)
+@@ -1520,9 +1525,9 @@
+ subr_info info;
+ int isubr;
+- register SCM z;
++ SCM z;
+ info.name = name;
+ for (isubr = subrs_gra.len; 0 < isubr--;) {
+ if (0==strcmp(((char **)subrs_gra.elts)[isubr], name)) {
+- scm_warn(s_redefining, (char *)name, UNDEFINED);
++ scm_warn(s_redefining, name, UNDEFINED);
+ goto foundit;
+ }
+@@ -1536,5 +1541,5 @@
+ while (*++p != 'r')
+ switch (*p) {
+- default: wta(UNDEFINED, "bad cxr name", (char *)name);
++ default: wta(UNDEFINED, "bad cxr name", name);
+ case 'a': code = (code<<2) + 1; continue;
+ case 'd': code = (code<<2) + 2; continue;
+@@ -1555,5 +1560,5 @@
+
+ #ifdef CCLO
+-char s_comp_clo[] = "compiled-closure";
++static const char s_comp_clo[] = "compiled-closure";
+ SCM makcclo(proc, len)
+ SCM proc;
+@@ -1601,5 +1606,5 @@
+ }
+
+-SCM dynwind(thunk1, thunk2, thunk3)
++static SCM dynwind(thunk1, thunk2, thunk3)
+ SCM thunk1, thunk2, thunk3;
+ {
+@@ -1612,5 +1617,5 @@
+ return ans;
+ }
+-void downd(to, delta)
++static void downd(to, delta)
+ SCM to;
+ long delta;
+@@ -1640,11 +1645,12 @@
+ SCM scm_make_cont()
+ {
+- SCM cont, estk, *from;
++ SCM cont, estk;
+ CONTINUATION *ncont;
+- sizet n;
++#ifndef CHEAP_CONTINUATIONS
++ SCM *from = VELTS(scm_estk);
++ sizet n = scm_estk_ptr - from + SCM_ESTK_FRLEN;
++#endif
+ VERIFY_INTS("scm_make_cont", 0L);
+ NEWCELL(cont);
+- from = VELTS(scm_estk);
+- n = scm_estk_ptr - from + SCM_ESTK_FRLEN;
+ #ifdef CHEAP_CONTINUATIONS
+ estk = scm_estk;
+@@ -1678,5 +1684,5 @@
+ return cont;
+ }
+-static char s_sstale[] = "strangely stale";
++static const char s_sstale[] = "strangely stale";
+ void scm_dynthrow(tocont, arg1, arg2, rest)
+ SCM tocont;
+@@ -1758,6 +1764,6 @@
+ scm_cell_p() in "rope.c", which means that changes to these
+ routines must be coordinated. */
+- register CELLPTR ptr = (CELLPTR)SCM2PTR(obj);
+- register sizet i = 0, j = hplim_ind;
++ CELLPTR ptr = (CELLPTR)SCM2PTR(obj);
++ sizet i = 0, j = hplim_ind;
+ do {
+ if (PTR_GT(hplims[i++], ptr)) break;
+@@ -1774,5 +1780,5 @@
+
+ unsigned long strhash(str, len, n)
+- unsigned char *str;
++ const unsigned char *str;
+ sizet len;
+ unsigned long n;
+@@ -1794,5 +1800,5 @@
+
+ static void fixconfig(s1, s2, s)
+- char *s1, *s2;
++ const char *s1, *s2;
+ int s;
+ {
+@@ -1823,11 +1829,11 @@
+ }}
+ }
+-sizet init_heap_seg(seg_org, size)
++static sizet init_heap_seg(seg_org, size)
+ CELLPTR seg_org;
+ sizet size;
+ {
+- register CELLPTR ptr = seg_org;
++ CELLPTR ptr = seg_org;
+ #ifdef POINTERS_MUNGED
+- register SCM scmptr;
++ SCM scmptr;
+ #else
+ # define scmptr ptr
+@@ -1918,5 +1924,5 @@
+ int scm_grow_gra(gra, elt)
+ scm_gra *gra;
+- char *elt;
++ const char *elt;
+ {
+ int i;
+@@ -1964,6 +1970,6 @@
+ mallocated -= gra->maxlen*gra->eltsize;
+ }
+-void gra_report1(gra)
+- scm_gra *gra;
++static void gra_report1(gra)
++ const scm_gra *gra;
+ {
+ scm_intprint((long)gra->len, -10, cur_errp);
+@@ -1986,17 +1992,17 @@
+ scm_gra smobs_gra;
+ long newsmob(smob)
+- smobfuns *smob;
++ const smobfuns *smob;
+ {
+- return tc7_smob + 256*scm_grow_gra(&smobs_gra, (char *)smob);
++ return tc7_smob + 256*scm_grow_gra(&smobs_gra, (const char *)smob);
+ }
+ scm_gra ptobs_gra;
+ long newptob(ptob)
+- ptobfuns *ptob;
++ const ptobfuns *ptob;
+ {
+- return tc7_port + 256*scm_grow_gra(&ptobs_gra, (char *)ptob);
++ return tc7_port + 256*scm_grow_gra(&ptobs_gra, (const char *)ptob);
+ }
+-port_info *scm_port_table = 0;
++port_info *scm_port_table = NULL;
+ static sizet scm_port_table_len = 0;
+-static char s_port_table[] = "port table";
++static const char s_port_table[] = "port table";
+ SCM scm_port_entry(stream, ptype, flags)
+ FILE *stream;
+@@ -2073,5 +2079,5 @@
+ }
+
+-static char remsg[] = "remove\n#define ", addmsg[] = "add\n#define ",
++static const char remsg[] = "remove\n#define ", addmsg[] = "add\n#define ",
+ rdmsg[] = "reduce";
+ void init_storage(stack_start_ptr, init_heap_size)
+@@ -2249,5 +2255,5 @@
+ Cambridge, MA 02138
+ */
+-char s_cells[] = "cells";
++static const char s_cells[] = "cells";
+ SCM gc_for_newcell()
+ {
+@@ -2285,6 +2291,5 @@
+ }
+
+-static char s_bad_type[] = "unknown type in ";
+-void mark_locations P((STACKITEM x[], sizet n));
++static const char s_bad_type[] = "unknown type in ";
+ static void mark_syms P((SCM v));
+ static void mark_sym_values P((SCM v));
+@@ -2357,5 +2363,5 @@
+ int j = num_protects;
+ long oheap_cells = heap_cells;
+- STACKITEM * stackbase = IMP(basecont) ? 0 : CONT(basecont)->stkbse;
++ STACKITEM * stackbase = IMP(basecont) ? NULL : CONT(basecont)->stkbse;
+ #ifdef DEBUG_GMALLOC
+ int err = check_frag_blocks();
+@@ -2419,5 +2425,5 @@
+ egc_sweep();
+ estk_pool = EOL;
+- errjmp_bad = (char *)0;
++ errjmp_bad = NULL;
+ gc_end();
+ if (oheap_cells != heap_cells) {
+@@ -2430,5 +2436,5 @@
+ }
+
+-static char s_not_free[] = "not freed";
++static const char s_not_free[] = "not freed";
+ void free_storage()
+ {
+@@ -2488,10 +2494,10 @@
+ }
+
+-static char s_gc_sym[] = "mark_syms", s_wrong_length[] = "wrong length";
++static const char s_gc_sym[] = "mark_syms", s_wrong_length[] = "wrong length";
+ void gc_mark(p)
+ SCM p;
+ {
+- register long i;
+- register SCM ptr = p;
++ long i;
++ SCM ptr = p;
+ CHECK_STACK;
+ gc_mark_loop:
+@@ -2619,15 +2625,19 @@
+ code is duplicated by obunhash() in "sys.c" and scm_cell_p() in
+ "rope.c", which means that changes to these routines must be
+- coordinated. */
++ coordinated.
++ XXX Actually, the old code ran from x[-1:n-1] (down)... It now runs
++ XXX up from 0 to n-1, as seems to be correct. Is it?
++*/
+
+ void mark_locations(x, n)
+- STACKITEM x[];
++ const STACKITEM x[];
+ sizet n;
+ {
+- register long m = n;
+- register int i, j;
+- register CELLPTR ptr;
+- while(0 <= --m) if (CELLP(*(SCM **)&x[m])) {
+- ptr = (CELLPTR)SCM2PTR((SCM)(*(SCM **)&x[m]));
++ int i, j;
++ CELLPTR ptr;
++ for (; n; x++, n--) {
++ if (NCELLP(*x))
++ continue;
++ ptr = (CELLPTR)SCM2PTR((SCM)(*x));
+ i = 0;
+ j = hplim_ind;
+@@ -2638,5 +2648,5 @@
+ && PTR_LE(hplims[i++], ptr)
+ && PTR_GT(hplims[--j], ptr)) continue;
+- /* if (NFREEP(*(SCM **)&x[m])) */ gc_mark(*(SCM *)&x[m]);
++ gc_mark(*x);
+ break;
+ } while(i<j);
+@@ -2647,13 +2657,13 @@
+ int contin_bad;
+ {
+- register CELLPTR ptr;
++ CELLPTR ptr;
+ #ifdef POINTERS_MUNGED
+- register SCM scmptr;
++ SCM scmptr;
+ #else
+ # define scmptr (SCM)ptr
+ #endif
+- register SCM nfreelist = EOL;
+- register long n = 0;
+- register sizet j, minc;
++ SCM nfreelist = EOL;
++ long n = 0;
++ sizet j, minc;
+ long pre_m = mallocated;
+ sizet i = 0;
+@@ -3087,5 +3097,5 @@
+ }
+ }
+-extern long tc16_env, tc16_promise;
++
+ static void egc_copy_roots()
+ {
+@@ -3192,4 +3202,4 @@
+ scm_egc_end();
+ }
+- errjmp_bad = (char *)0;
++ errjmp_bad = NULL;
+ }
+--- time.c 2014-02-08 19:38:23.000000000 -0500
++++ time.c 2015-01-23 18:55:19.000000000 -0500
+@@ -94,5 +94,4 @@
+ # include <sys/types.h>
+ # include <sys/time.h>
+-# include <sys/timeb.h>
+ # define USE_GETTIMEOFDAY
+ #endif
+@@ -169,10 +168,6 @@
+ #endif
+
+-#ifndef LACK_FTIME
+-# ifdef HAVE_UNIX
+-# ifndef GO32
++#if !defined(LACK_FTIME) && defined(HAVE_UNIX) && !defined(GO32) && !defined(USE_GETTIMEOFDAY)
+ # include <sys/timeb.h>
+-# endif
+-# endif
+ #endif
+
+@@ -307,5 +302,5 @@
+ #else /* LACK_FTIME */
+ # ifdef USE_GETTIMEOFDAY
+-int scm_ftime(time_buffer)
++static int scm_ftime(time_buffer)
+ struct timeval *time_buffer;
+ {
+@@ -377,5 +372,5 @@
+ }
+
+-SCM curtime()
++static SCM curtime()
+ {
+ timet timv = time((timet*)0);
+--- unexec.c 2008-01-30 22:44:09.000000000 -0500
++++ unexec.c 2015-01-23 18:55:19.000000000 -0500
+@@ -371,5 +371,5 @@
+ */
+ unexec (new_name, a_name, data_start, bss_start, entry_address)
+- char *new_name, *a_name;
++ const char *new_name, *a_name;
+ unsigned data_start, bss_start, entry_address;
+ {
+@@ -417,6 +417,6 @@
+ int new, a_out;
+ unsigned data_start, bss_start, entry_address;
+- char *a_name;
+- char *new_name;
++ const char *a_name;
++ const char *new_name;
+ {
+ int tem;
+--- unexelf.c 2008-01-30 22:44:11.000000000 -0500
++++ unexelf.c 2015-01-23 18:55:19.000000000 -0500
+@@ -403,7 +403,10 @@
+ Instead we read the whole file, modify it, and write it out. */
+
++#include "scm.h"
++
+ #ifndef emacs
+-#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
++#define fatal(...) fprintf (stderr, __VA_ARGS__), exit (1)
+ #include <string.h>
++#include <stdlib.h> /* Where exit(3) is declared */
+ #else
+ #include <config.h>
+@@ -608,7 +611,7 @@
+ static int
+ find_section (name, section_names, file_name, old_file_h, old_section_h, noerror)
+- char *name;
+- char *section_names;
+- char *file_name;
++ const char *name;
++ const char *section_names;
++ const char *file_name;
+ ElfW(Ehdr) *old_file_h;
+ ElfW(Shdr) *old_section_h;
+@@ -649,5 +652,5 @@
+ void
+ unexec (new_name, old_name, data_start, bss_start, entry_address)
+- char *new_name, *old_name;
++ const char *new_name, *old_name;
+ unsigned data_start, bss_start, entry_address;
+ {
+@@ -680,5 +683,7 @@
+ int old_bss_index, old_sbss_index;
+ int old_data_index, new_data2_index;
++#if defined (__sony_news) && defined (_SYSTYPE_SYSV) || defined(__sgi)
+ int old_mdebug_index;
++#endif
+ struct stat stat_buf;
+ int old_file_size;
+@@ -709,8 +714,8 @@
+ MAP_ANON | MAP_PRIVATE, mmap_fd, 0);
+ if (old_base == MAP_FAILED)
+- fatal ("Can't allocate buffer for %s\n", old_name, 0);
++ fatal("Can't allocate buffer for %s\n", old_name);
+
+ if (read (old_file, old_base, stat_buf.st_size) != stat_buf.st_size)
+- fatal ("Didn't read all of %s: errno %d\n", old_name, errno);
++ fatal("Didn't read all of %s: errno %d\n", old_name, errno);
+
+ /* Get pointers to headers & section names */
+@@ -724,6 +729,8 @@
+ /* Find the mdebug section, if any. */
+
++#if defined (__sony_news) && defined (_SYSTYPE_SYSV) || defined(__sgi)
+ old_mdebug_index = find_section (".mdebug", old_section_names,
+ old_name, old_file_h, old_section_h, 1);
++#endif
+
+ /* Find the old .bss section. Figure out parameters of the new
+@@ -780,5 +787,5 @@
+
+ if ((unsigned) new_bss_addr < (unsigned) old_bss_addr + old_bss_size)
+- fatal (".bss shrank when undumping???\n", 0, 0);
++ fatal (".bss shrank when undumping???\n");
+
+ /* Set the output file to the right size. Allocate a buffer to hold
+@@ -798,5 +805,5 @@
+ MAP_ANON | MAP_PRIVATE, mmap_fd, 0);
+ if (new_base == MAP_FAILED)
+- fatal ("Can't allocate buffer for %s\n", old_name, 0);
++ fatal ("Can't allocate buffer for %s\n", old_name);
+
+ new_file_h = (ElfW(Ehdr) *) new_base;
+@@ -853,5 +860,5 @@
+ ? old_bss_addr
+ : round_up (old_bss_addr, alignment)))
+- fatal ("Program segment above .bss in %s\n", old_name, 0);
++ fatal ("Program segment above .bss in %s\n", old_name);
+
+ if (NEW_PROGRAM_H (n).p_type == PT_LOAD
+@@ -863,5 +870,5 @@
+ }
+ if (n < 0)
+- fatal ("Couldn't find segment next to .bss in %s\n", old_name, 0);
++ fatal ("Couldn't find segment next to .bss in %s\n", old_name);
+
+ /* Make sure that the size includes any padding before the old .bss
+@@ -893,5 +900,5 @@
+ break;
+ if (old_data_index == old_file_h->e_shnum)
+- fatal ("Can't find .data in %s.\n", old_name, 0);
++ fatal ("Can't find .data in %s.\n", old_name);
+
+ /* Walk through all section headers, insert the new data2 section right
+--- unif.c 2010-10-17 22:44:29.000000000 -0400
++++ unif.c 2015-01-27 00:55:00.000000000 -0500
+@@ -114,6 +114,5 @@
+ # ifdef FLOATS
+ # ifdef SINGLES
+-SCM makflo (x)
+- float x;
++SCM makflo (float x)
+ {
+ SCM z;
+@@ -254,5 +253,5 @@
+ }
+ }
+-static char s_array_dims[] = "array-dimensions";
++static const char s_array_dims[] = "array-dimensions";
+ SCM array_dims(ra)
+ SCM ra;
+@@ -278,5 +277,5 @@
+ }
+ }
+-static char s_bad_ind[] = "Bad array index";
++static const char s_bad_ind[] = "Bad array index";
+ long aind(ra, args, what)
+ SCM ra, args;
+@@ -323,7 +322,7 @@
+ }
+
+-static char s_bad_spec[] = "Bad array dimension";
++static const char s_bad_spec[] = "Bad array dimension";
+ /* Increments will still need to be set. */
+-SCM shap2ra(args, what)
++static SCM shap2ra(args, what)
+ SCM args;
+ const char *what;
+@@ -358,5 +357,5 @@
+ }
+
+-char s_array_fill[] = "array-fill!";
++const char s_array_fill[] = "array-fill!";
+ int rafill(ra, fill, ignore)
+ SCM ra, fill, ignore;
+@@ -487,5 +486,5 @@
+ }
+
+-static char s_dims2ura[] = "dimensions->uniform-array";
++static const char s_dims2ura[] = "dimensions->uniform-array";
+ SCM dims2ura(dims, prot, fill)
+ SCM dims, prot, fill;
+@@ -545,5 +544,5 @@
+ }
+
+-void ra_set_contp(ra)
++static void ra_set_contp(ra)
+ SCM ra;
+ {
+@@ -560,6 +559,7 @@
+ CAR(ra) |= ARRAY_CONTIGUOUS;
+ }
+-char s_make_sh_array[] = "make-shared-array";
+-SCM make_sh_array(oldra, mapfunc, dims)
++static const char s_make_sh_array[] = "make-shared-array";
++#define s_array (s_make_sh_array+12)
++static SCM make_sh_array(oldra, mapfunc, dims)
+ SCM oldra;
+ SCM mapfunc;
+@@ -660,6 +660,6 @@
+
+ /* args are RA . DIMS */
+-static char s_trans_array[] = "transpose-array";
+-SCM trans_array(args)
++static const char s_trans_array[] = "transpose-array";
++static SCM trans_array(args)
+ SCM args;
+ {
+@@ -723,6 +723,6 @@
+
+ /* args are RA . AXES */
+-static char s_encl_array[] = "enclose-array";
+-SCM encl_array(axes)
++static const char s_encl_array[] = "enclose-array";
++static SCM encl_array(axes)
+ SCM axes;
+ {
+@@ -781,6 +781,6 @@
+ }
+
+-static char s_array_inbp[] = "array-in-bounds?";
+-SCM array_inbp(args)
++static const char s_array_inbp[] = "array-in-bounds?";
++static SCM array_inbp(args)
+ SCM args;
+ {
+@@ -823,5 +823,5 @@
+ }
+ }
+-static char s_aref[] = "array-ref";
++static const char s_aref[] = "array-ref";
+ SCM aref(v, args)
+ SCM v, args;
+@@ -1026,5 +1026,5 @@
+ }
+
+-static char s_aset[] = "array-set!";
++static const char s_aset[] = "array-set!";
+ SCM aset(v, obj, args)
+ SCM v, obj, args;
+@@ -1115,5 +1115,5 @@
+ }
+
+-static char s_array_contents[] = "array-contents";
++static const char s_array_contents[] = "array-contents";
+ SCM array_contents(ra, strict)
+ SCM ra, strict;
+@@ -1152,5 +1152,5 @@
+ }
+
+-static char s_uve_rd[] = "uniform-vector-read!";
++static const char s_uve_rd[] = "uniform-vector-read!";
+ SCM uve_read(v, port)
+ SCM v, port;
+@@ -1225,5 +1225,5 @@
+ }
+
+-static char s_uve_wr[] = "uniform-vector-write";
++static const char s_uve_wr[] = "uniform-vector-write";
+ SCM uve_write(v, port)
+ SCM v, port;
+@@ -1288,7 +1288,7 @@
+ }
+
+-static char cnt_tab[16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
+-static char s_count[] = "bit-count";
+-SCM lcount(item, seq)
++static const char cnt_tab[16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
++static const char s_count[] = "bit-count";
++static SCM lcount(item, seq)
+ SCM item, seq;
+ {
+@@ -1349,6 +1349,6 @@
+ }
+ }
+-static char s_uve_pos[] = "bit-position";
+-SCM bit_position(item, v, k)
++static const char s_uve_pos[] = "bit-position";
++static SCM bit_position(item, v, k)
+ SCM item, v, k;
+ {
+@@ -1418,6 +1418,6 @@
+ }
+
+-static char s_bit_set[] = "bit-set*!";
+-SCM bit_set(v, kv, obj)
++static const char s_bit_set[] = "bit-set*!";
++static SCM bit_set(v, kv, obj)
+ SCM v, kv, obj;
+ {
+@@ -1460,6 +1460,6 @@
+ }
+
+-static char s_bit_count[] = "bit-count*";
+-SCM bit_count(v, kv, obj)
++static const char s_bit_count[] = "bit-count*";
++static SCM bit_count(v, kv, obj)
+ SCM v, kv, obj;
+ {
+@@ -1506,6 +1506,6 @@
+ }
+
+-static char s_bit_inv[] = "bit-invert!";
+-SCM bit_inv(v)
++static const char s_bit_inv[] = "bit-invert!";
++static SCM bit_inv(v)
+ SCM v;
+ {
+@@ -1523,6 +1523,6 @@
+ }
+
+-static char s_strup[] = "string-upcase!";
+-SCM strup(v)
++static const char s_strup[] = "string-upcase!";
++static SCM strup(v)
+ SCM v;
+ {
+@@ -1541,6 +1541,6 @@
+ }
+
+-static char s_strdown[] = "string-downcase!";
+-SCM strdown(v)
++static const char s_strdown[] = "string-downcase!";
++static SCM strdown(v)
+ SCM v;
+ {
+@@ -1560,6 +1560,6 @@
+
+ # include <ctype.h>
+-static char s_strcap[] = "string-capitalize!";
+-SCM strcap(v)
++static const char s_strcap[] = "string-capitalize!";
++static SCM strcap(v)
+ SCM v;
+ {
+@@ -1588,5 +1588,5 @@
+
+ SCM istr2bve(str, len)
+- char *str;
++ const char *str;
+ long len;
+ {
+@@ -1634,6 +1634,6 @@
+ }
+
+-static char s_array2list[] = "array->list";
+-SCM array2list(v)
++static const char s_array2list[] = "array->list";
++static SCM array2list(v)
+ SCM v;
+ {
+@@ -1716,6 +1716,6 @@
+
+ static int l2ra P((SCM lst, SCM ra, sizet base, sizet k));
+-static char s_bad_ralst[] = "Bad array contents list";
+-static char s_list2ura[] = "list->uniform-array";
++static const char s_bad_ralst[] = "Bad array contents list";
++static const char s_list2ura[] = "list->uniform-array";
+ SCM list2ura(ndim, prot, lst)
+ SCM ndim;
+@@ -1729,8 +1729,10 @@
+ int k = INUM(ndim);
+ ASRTER(INUMP(ndim) && k >= 0, ndim, ARG1, s_list2ura);
+- for (; --k >= 0 ; (NIMP(row) && (row = CAR(row)))) {
++ while (--k >= 0) {
+ n = ilength(row);
+ ASRTER(n>=0, lst, ARG3, s_list2ura);
+ shp = cons(MAKINUM(n), shp);
++ if (NIMP(row))
++ row = CAR(row);
+ }
+ ra = dims2ura(reverse(shp), prot, EOL);
+@@ -1978,5 +1980,5 @@
+ }
+
+-static char s_array_prot[] = "array-prototype";
++static const char s_array_prot[] = "array-prototype";
+ SCM array_prot(ra)
+ SCM ra;
+@@ -2015,6 +2017,6 @@
+ position in an integer element.
+ */
+-static char s_logaref[] = "logaref";
+-SCM scm_logaref(args)
++static const char s_logaref[] = "logaref";
++static SCM scm_logaref(args)
+ SCM args;
+ {
+@@ -2051,6 +2053,6 @@
+ }
+
+-static char s_logaset[] = "logaset!";
+-SCM scm_logaset(ra, obj, args)
++static const char s_logaset[] = "logaset!";
++static SCM scm_logaset(ra, obj, args)
+ SCM ra, obj, args;
+ {
+@@ -2175,5 +2177,5 @@
+
+ SCM istr2bve(str, len)
+- char *str;
++ const char *str;
+ long len;
+ {
+@@ -2181,10 +2183,4 @@
+ }
+
+-SCM array_equal(ra0, ra1)
+- SCM ra0, ra1;
+-{
+- return BOOL_F;
+-}
+-
+ void init_unif()
+ {
+--- unix.c 2008-01-30 22:33:13.000000000 -0500
++++ unix.c 2015-01-23 18:55:19.000000000 -0500
+@@ -26,13 +26,11 @@
+ #include <sys/stat.h>
+
+-extern SCM stat2scm P((struct stat *stat_temp));
+-
+-SCM scm_mknod P((SCM path, SCM mode, SCM dev));
+-SCM scm_acct P((SCM path));
+-SCM scm_nice P((SCM incr));
+-SCM scm_sync P((void));
+-SCM scm_symlink P((SCM oldpath, SCM newpath));
+-SCM scm_readlink P((SCM path));
+-SCM scm_lstat P((SCM str));
++static SCM scm_mknod P((SCM path, SCM mode, SCM dev));
++static SCM scm_acct P((SCM path));
++static SCM scm_nice P((SCM incr));
++static SCM scm_sync P((void));
++static SCM scm_symlink P((SCM oldpath, SCM newpath));
++static SCM scm_readlink P((SCM path));
++static SCM scm_lstat P((SCM str));
+
+ #ifndef STDC_HEADERS
+--- x.c 2013-03-12 23:30:26.000000000 -0400
++++ x.c 2015-01-23 18:55:19.000000000 -0500
+@@ -335,5 +335,5 @@
+ xcm->dpy = DISPLAY(xcm->display)->dpy;
+ xcm->cm = cmp;
+- XSaveContext(XDISPLAY(sdpy), (XID)cmp, xtc_cmp, z);
++ XSaveContext(XDISPLAY(sdpy), (XID)cmp, xtc_cmp, (char *)(intptr_t)z);
+ ALLOW_INTS;
+ return z;
+@@ -583,5 +583,5 @@
+ CAR(s_ccc) = tc16_xccc;
+ SETCDR(s_ccc, ccc);
+- XSaveContext(ccc->dpy, (XID)ccc, xtc_ccc, s_ccc);
++ XSaveContext(ccc->dpy, (XID)ccc, xtc_ccc, (char *)(intptr_t)s_ccc);
+ ALLOW_INTS;
+ }
+@@ -630,5 +630,5 @@
+ SCM dat;
+ XPoint *ipr;
+- char *pos, *s_caller;
++ const char *pos, *s_caller;
+ {
+ SCM x, y;
+@@ -710,5 +710,5 @@
+ int scm2xpointslen(sara, s_caller)
+ SCM sara;
+- char *s_caller;
++ const char *s_caller;
+ {
+ array_dim *adm;
+@@ -728,5 +728,5 @@
+ SCM optidx;
+ struct display_screen *dspscn;
+- char *s_caller;
++ const char *s_caller;
+ {
+ ASRTGO(NIMP(dat), badarg);
+@@ -762,5 +762,5 @@
+ Pixmap thepxmap(obj, s_caller)
+ SCM obj;
+- char *s_caller;
++ const char *s_caller;
+ {
+ if (FALSEP(obj) || (INUM0==obj)) return 0L;
+@@ -771,5 +771,5 @@
+ Font thefont(obj, s_caller)
+ SCM obj;
+- char *s_caller;
++ const char *s_caller;
+ {
+ ASRTER(NIMP(obj) && FONTP(obj), obj, ARGn, s_caller);
+@@ -778,5 +778,5 @@
+ Colormap thecmap(obj, s_caller)
+ SCM obj;
+- char *s_caller;
++ const char *s_caller;
+ {
+ if (FALSEP(obj) || (INUM0==obj)) return 0L;
+@@ -786,5 +786,5 @@
+ Cursor thecsr(obj, s_caller)
+ SCM obj;
+- char *s_caller;
++ const char *s_caller;
+ {
+ if (FALSEP(obj) || (INUM0==obj)) return 0L;
+@@ -794,5 +794,5 @@
+ Bool thebool(obj, s_caller)
+ SCM obj;
+- char *s_caller;
++ const char *s_caller;
+ {
+ SCM val = thevalue(obj);
+@@ -802,5 +802,5 @@
+ int theint(obj, s_caller)
+ SCM obj;
+- char *s_caller;
++ const char *s_caller;
+ {
+ SCM val = thevalue(obj);
+@@ -810,5 +810,5 @@
+ int theuint(obj, s_caller)
+ SCM obj;
+- char *s_caller;
++ const char *s_caller;
+ {
+ SCM val = thevalue(obj);
+@@ -819,5 +819,5 @@
+ static int args2valmask(oargs, s_caller)
+ SCM oargs;
+- char *s_caller;
++ const char *s_caller;
+ {
+ SCM args = oargs;
+@@ -840,5 +840,5 @@
+ SCM sval, args = oargs;
+ int attr, len, attr_mask = 0;
+-/* (void)memset((char *)vlu, 0, sizeof(XGCValues)); */
++/* (void)memset(vlu, 0, sizeof(XGCValues)); */
+ if (!(len = ilength(args))) return 0;
+ ASRTER(len > 0 && (! (len & 1)), oargs, WNA, s_gc);
+@@ -984,8 +984,9 @@
+ return (display ? make_xdisplay(display) : BOOL_F);
+ }
++
++static int (*previous_after_function)(); /* Might be useful under debugger? */
+ SCM x_display_debug(sd, si)
+ SCM sd, si;
+ {
+- int (*previous_after_function)();
+ struct display_screen dspscn;
+ scm2display_screen(sd, UNDEFINED, &dspscn, s_x_display_debug);
+@@ -1289,5 +1290,5 @@
+ if (NNULLP(sargs)) contig = thebool(CAR(sargs), s_x_alloc_color_cells);
+ sts = XAllocColorPlanes(xcm->dpy, xcm->cm, contig,
+- VELTS(pxra), npixels,
++ (unsigned long *)VELTS(pxra), npixels,
+ xclr.red, xclr.green, xclr.blue,
+ &rmask_return, &gmask_return, &bmask_return);
+@@ -1302,5 +1303,6 @@
+ plra = make_uve(nplanes, MAKINUM(32L)); /* Uniform vector of long */
+ sts = XAllocColorCells(xcm->dpy, xcm->cm, contig,
+- VELTS(plra), nplanes, VELTS(pxra), npixels);
++ (unsigned long *)VELTS(plra), nplanes,
++ (unsigned long *)VELTS(pxra), npixels);
+ if (!sts) return BOOL_F;
+ return cons2(pxra, plra, EOL);
+@@ -1321,5 +1323,5 @@
+ planes = theuint(CAR(sargs), s_x_free_color_cells);
+ case 3:
+- XFreeColors(xcm->dpy, xcm->cm, VELTS(spxls), INUM(spxls), planes);
++ XFreeColors(xcm->dpy, xcm->cm, (unsigned long *)VELTS(spxls), INUM(spxls), planes);
+ return UNSPECIFIED;
+ }
+@@ -1907,5 +1909,5 @@
+ int format;
+ unsigned long nitems;
+- unsigned char* data;
++ const void* data;
+ {
+ SCM datum = EOL;
+@@ -1918,19 +1920,19 @@
+ case XA_CARDINAL:
+ switch (format) {
+- case 8: datum = MAKINUM(((unsigned char *)data)[cnt]); break;
+- case 16: datum = MAKINUM(((unsigned short *)data)[cnt]); break;
+- case 32: datum = ulong2num(((unsigned long *)data)[cnt]); break;
++ case 8: datum = MAKINUM(((const unsigned char *)data)[cnt]); break;
++ case 16: datum = MAKINUM(((const unsigned short *)data)[cnt]); break;
++ case 32: datum = ulong2num(((const unsigned long *)data)[cnt]); break;
+ default: return MAKINUM(format);
+ } break;
+ case XA_INTEGER:
+ switch (format) {
+- case 8: datum = MAKINUM(((char *)data)[cnt]); break;
+- case 16: datum = MAKINUM(((short *)data)[cnt]); break;
+- case 32: datum = long2num(((long *)data)[cnt]); break;
++ case 8: datum = MAKINUM(((const char *)data)[cnt]); break;
++ case 16: datum = MAKINUM(((const short *)data)[cnt]); break;
++ case 32: datum = long2num(((const long *)data)[cnt]); break;
+ default: return MAKINUM(format);
+ } break;
+ case XA_STRING:
+ switch (format) {
+- case 8: return makfrom0str(data);
++ case 8: return makfrom0str((const char *)data);
+ default: return MAKINUM(format);
+ } break;
+@@ -2052,5 +2054,5 @@
+ SCM sdbl, sgc, sargs;
+ int (*proc)();
+- char *s_caller;
++ const char *s_caller;
+ {
+ XPoint position;
+@@ -2113,5 +2115,5 @@
+ SCM sdbl, sgc, sargs;
+ int funcod;
+- char *s_caller;
++ const char *s_caller;
+ {
+ XPoint pos[2];
+@@ -2228,5 +2230,5 @@
+ static struct {
+ int type;
+- char *name;
++ const char *name;
+ } event_names[] = {
+ #undef SCM_EVENT_FIELDS
+@@ -2234,5 +2236,5 @@
+ };
+
+-static char *x__event_name(type)
++static const char *x__event_name(type)
+ int type;
+ {
+@@ -2340,5 +2342,5 @@
+ }
+
+-char *xvisualclass2name(class)
++const char *xvisualclass2name(class)
+ int class;
+ {
+--- x.h 2002-01-28 22:31:55.000000000 -0500
++++ x.h 2015-01-23 18:55:19.000000000 -0500
+@@ -11,16 +11,16 @@
+ SCM make_xevent(XEvent *e);
+ size_t x_free_xevent(CELLPTR ptr);
+-void scm2XPoint(int signp, SCM dat, XPoint *ipr, char *pos, char *s_caller);
++void scm2XPoint(int signp, SCM dat, XPoint *ipr, const char *pos, const char *s_caller);
+ int scm2XColor(SCM s_dat, XColor *xclr);
+-int scm2xpointslen(SCM sara, char *s_caller);
+-void scm2display_screen(SCM dat, SCM optidx, struct display_screen *dspscn, char *s_caller);
++int scm2xpointslen(SCM sara, const char *s_caller);
++void scm2display_screen(SCM dat, SCM optidx, struct display_screen *dspscn, const char *s_caller);
+ SCM thevalue(SCM obj);
+-Pixmap thepxmap(SCM obj, char *s_caller);
+-Font thefont(SCM obj, char *s_caller);
+-Colormap thecmap(SCM obj, char *s_caller);
+-Cursor thecsr(SCM obj, char *s_caller);
+-int thebool(SCM obj, char *s_caller);
+-int theint(SCM obj, char *s_caller);
+-int theuint(SCM obj, char *s_caller);
++Pixmap thepxmap(SCM obj, const char *s_caller);
++Font thefont(SCM obj, const char *s_caller);
++Colormap thecmap(SCM obj, const char *s_caller);
++Cursor thecsr(SCM obj, const char *s_caller);
++int thebool(SCM obj, const char *s_caller);
++int theint(SCM obj, const char *s_caller);
++int theuint(SCM obj, const char *s_caller);
+ SCM x_open_display(SCM dpy_name);
+ SCM x_display_debug(SCM sd, SCM si);
+@@ -78,14 +78,14 @@
+ SCM x_default_visual(SCM sdpy, SCM sscr);
+ SCM x_default_ccc(SCM sdpy, SCM sscr);
+-SCM x_propdata2scm(Atom type, int format, unsigned long nitems, unsigned char *data);
++SCM x_propdata2scm(Atom type, int format, unsigned long nitems, const void *data);
+ SCM x_get_window_property(SCM swin, SCM sprop, SCM sargs);
+ SCM x_list_properties(SCM swin);
+ SCM x_clear_area(SCM swin, SCM spos, SCM sargs);
+ SCM x_fill_rectangle(SCM swin, SCM sgc, SCM sargs);
+-void xldraw_string(SCM sdbl, SCM sgc, SCM sargs, int (*proc)(void), char *s_caller);
++void xldraw_string(SCM sdbl, SCM sgc, SCM sargs, int (*proc)(), const char *s_caller);
+ SCM x_draw_string(SCM sdbl, SCM sgc, SCM sargs);
+ SCM x_image_string(SCM sdbl, SCM sgc, SCM sargs);
+ SCM x_draw_points(SCM sdbl, SCM sgc, SCM sargs);
+-SCM xldraw_lines(SCM sdbl, SCM sgc, SCM sargs, int funcod, char *s_caller);
++SCM xldraw_lines(SCM sdbl, SCM sgc, SCM sargs, int funcod, const char *s_caller);
+ SCM x_draw_segments(SCM sdbl, SCM sgc, SCM sargs);
+ SCM x_draw_lines(SCM sdbl, SCM sgc, SCM sargs);
+@@ -95,5 +95,5 @@
+ SCM x_event_ref(SCM sevent, SCM sfield);
+ SCM x_event_keysym(SCM sevent);
+-char *xvisualclass2name(int class);
++const char *xvisualclass2name(int class);
+ void x_scm_final(void);
+ void init_x(void);