diff options
Diffstat (limited to 'scmfig.h')
-rw-r--r-- | scmfig.h | 105 |
1 files changed, 75 insertions, 30 deletions
@@ -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; |