summaryrefslogtreecommitdiffstats
path: root/scmfig.h
diff options
context:
space:
mode:
Diffstat (limited to 'scmfig.h')
-rw-r--r--scmfig.h105
1 files changed, 75 insertions, 30 deletions
diff --git a/scmfig.h b/scmfig.h
index 0e5bf35..99d4f21 100644
--- a/scmfig.h
+++ b/scmfig.h
@@ -1,18 +1,18 @@
-/* Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
- *
+/* Copyright (C) 1990-1999 Free Software Foundation, Inc.
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * the Free Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111, USA.
*
* As a special exception, the Free Software Foundation gives permission
* for additional uses of the text contained in its release of GUILE.
@@ -36,7 +36,7 @@
*
* If you write modifications of your own for GUILE, it is your choice
* whether to permit this exception to apply to your modifications.
- * If you do not wish that, delete this exception notice.
+ * If you do not wish that, delete this exception notice.
*/
/* "scmfig.h" system-dependent configuration.
@@ -54,7 +54,7 @@
/* IMPLINIT is the full pathname (surrounded by double quotes) of
Init.scm, the Scheme initialization code. This is best defined in
- the makefile. If available, scm uses the value of environment
+ the makefile. If available, SCM uses the value of environment
variable SCM_INIT_PATH instead of IMPLINIT. */
/* #define IMPLINIT "/usr/jaffer/scm/Init.scm" */
@@ -92,7 +92,9 @@ rgx.c init_rgx(); regcomp and regexec. */
(sizeof(float)==sizeof(long)) */
#ifdef FLOATS
-# define SINGLES
+# ifndef _MSC_VER
+# define SINGLES
+# endif
#endif
/* #define SINGLESONLY */
@@ -153,6 +155,12 @@ rgx.c init_rgx(); regcomp and regexec. */
# define GC_FREE_SEGMENTS
#endif
+/* MEMOIZE_LOCALS means to convert references to local variables to ILOCs,
+ (relative lexical addresses into the environment). This memoization
+ makes evaluated Scheme code harder to read, so you may want to undefine
+ this flag for debugging -- but SCM will run 3 to 5 times slower */
+#define MEMOIZE_LOCALS
+
/* #define CHEAP_CONTINUATIONS */
/* #define TICKS */
@@ -165,11 +173,11 @@ rgx.c init_rgx(); regcomp and regexec. */
/* #define PROT386 */
-/* #define NON_PREEMPTIVE and RTL if you are using an non-preemptive
- operating system in which periodic polling for interrupts is
- necessary. Provide your own main procedure (e.g., WinMain, in
- Windows). Define and initialize unsigned int poll_count, and
- provide a procedure named poll_routine(), which POLL calls each
+/* #define NON_PREEMPTIVE if you are using an non-preemptive operating
+ system in which periodic polling for interrupts is necessary.
+ Provide your own main procedure (e.g., WinMain, in Windows) or
+ modify "scmmain.c". Define and initialize unsigned int poll_count,
+ and provide a procedure named poll_routine(), which POLL calls each
time poll_count reaches zero. poll_routine() must reinitialize
poll_count. It may also check for external actions, such as
Windows messages. The value assigned to poll_count can be quite
@@ -228,16 +236,22 @@ rgx.c init_rgx(); regcomp and regexec. */
# endif
# endif
#endif
+#ifdef __alpha
+# define SHORT_INT
+#endif
#ifdef MSDOS /* Microsoft C 5.10 and 6.00A */
# ifndef GO32
# define SHORT_INT
+# define SHORT_SIZET
# endif
#endif
#ifdef _QC
# define SHORT_INT
+# define SHORT_SIZET
#endif
#ifdef __TURBOC__
# define SHORT_INT
+# define SHORT_SIZET
# define LACK_SBRK
# ifndef __TOS__
# define MSDOS
@@ -266,7 +280,7 @@ rgx.c init_rgx(); regcomp and regexec. */
#ifdef linux
# define HAVE_SELECT
# define HAVE_SYS_TIME_H
-# define STDC_HEADERS
+# define STDC_HEADERS
#endif
#ifdef _UNICOS
@@ -282,11 +296,14 @@ rgx.c init_rgx(); regcomp and regexec. */
# define LACK_FTIME
# define STDC_HEADERS
# define USE_ANSI_PROTOTYPES
-# define HAVE_SELECT
# define HAVE_SYS_TIME_H
# define __svr4__
#endif
+#ifdef __svr4__
+# define HAVE_SELECT
+#endif
+
#ifdef hpux
# define LACK_E_IDs
#endif
@@ -299,9 +316,17 @@ rgx.c init_rgx(); regcomp and regexec. */
#ifdef __CYGWIN32__
# define LACK_FTIME
+# define HAVE_SELECT
+# define HAVE_SYS_TIME_H
# undef MSDOS
#endif
+#ifdef __amigados__
+# define HAVE_SELECT
+# define HAVE_SYS_TIME_H
+# define LACK_SBRK
+#endif
+
/* PROMPT is the prompt string printed at top level */
#ifndef PROMPT
@@ -351,6 +376,10 @@ rgx.c init_rgx(); regcomp and regexec. */
# define BIGUP(x) ((unsigned long)(x) << BITSPERDIG)
# define BIGDN(x) ((x) >> BITSPERDIG)
# define BIGLO(x) ((x) & (BIGRAD-1))
+/* NUMDIGS_MAX is the maximum number of digits for BIGNUMS */
+# ifndef NUMDIGS_MAX
+# define NUMDIGS_MAX 1000
+# endif
#endif
#ifndef BIGDIG
@@ -541,15 +570,13 @@ extern ints_infot *ints_info;
# define FLOBUFLEN (10+2*(sizeof(double)/sizeof(char)*CHAR_BIT*3+9)/10)
#endif /* FLOATS */
-/* MAXEXP is the maximum double precision expontent */
+/* MAXEXP is the maximum double precision exponent */
/* FLTMAX is less than or equal the largest single precision float */
#ifdef FLOATS
# ifdef STDC_HEADERS
-# ifndef GO32
-# ifndef macintosh
-# include <float.h>
-# endif
+# ifndef macintosh
+# include <float.h>
# endif
# endif
# ifdef DBL_MAX_10_EXP
@@ -557,6 +584,12 @@ extern ints_infot *ints_info;
# else
# define MAXEXP 308 /* IEEE doubles */
# endif
+# ifndef DBL_DIG
+# define DBL_DIG 15
+# endif
+# ifndef DBL_MAX_EXP
+# define DBL_MAX_EXP 1024
+# endif
# ifdef FLT_MAX
# define FLTMAX FLT_MAX
# else
@@ -571,9 +604,7 @@ extern ints_infot *ints_info;
#endif
#ifdef unix
/* DJGPP (gcc for i386) defines unix! */
-# ifndef GO32
-# define HAVE_PIPE
-# endif
+# define HAVE_PIPE
#endif
/* IS_INF tests its floating point number for infiniteness */
@@ -632,7 +663,7 @@ typedef SCM *SCMPTR;
#endif
/* On VMS, GNU C's errno.h contains a special hack to get link attributes
- for errno correct for linking to the C RTL. */
+ for errno correct for linking with libc. */
#include <errno.h>
@@ -640,23 +671,37 @@ typedef SCM *SCMPTR;
#ifdef vms
# ifndef __GNUC__
# include <ssdef.h>
-# define SYSCALL(line) do{errno = 0;line} \
- while(EVMSERR==errno && (vaxc$errno>>3)==(SS$_CONTROLC>>3))
+# define SCM_INTERRUPTED(errno) (EVMSERR==errno && \
+ (vaxc$errno>>3)==(SS$_CONTROLC>>3))
# endif
#endif
-#ifndef SYSCALL
+#ifndef SCM_INTERRUPTED
# ifdef EINTR
# if (EINTR > 0)
-# define SYSCALL(line) do{errno = 0;line}while(EINTR==errno)
+# define SCM_INTERRUPTED(errno) (EINTR==errno)
# endif
# endif
#endif
-#ifndef SYSCALL
-# define SYSCALL(line) {line}
+#ifndef SCM_INTERRUPTED
+# define SCM_INTERRUPTED(errno) (0)
#endif
+#define SYSCALL(line) do{errno = 0;line}while(SCM_INTERRUPTED(errno))
+
+#ifdef EMFILE
+# define SCM_NEED_FDS(errno) (EMFILE==errno || ENFILE==errno)
+#else
+# define SCM_NEED_FDS(errno) (0)
+#endif
+
+#define SCM_OPENCALL(line) {int gcs = 0;\
+ while (!0) {errno = 0; if (line) break;\
+ if (0==gcs++ && SCM_NEED_FDS(errno)) \
+ gc_for_open_files();\
+ else if (!SCM_INTERRUPTED(errno)) break;}}
+
#ifndef MSDOS
# ifdef ARM_ULIB
extern volatile int errno;