This message announces the availability of Scheme release scm5c3. New in scm5c3: * patchlvl.h (SCMVERSION): Bumped from 5c2 to 5c3. * gmalloc.c: Imported gmalloc.c from emacs 20.2.1. (check_block): (check_frag_blocks): Debugging functions added. * sys.c (scm_protect_temp): Added, is currently, and probably will remain, a noop to force allocation of a SCM temporary on the stack. * scl.c (big2str): Added call to scm_protect_temp. * eval.c (map): (for_each): Added calls to scm_protect_temp. * rgx.c (lregcomp): Added call to scm_protect_temp. * scl.c (big2str): Take address of SCM temporary as gc protection. * dynl.c (l_dyn_link): conditionalized message on verbose. Cleaned up message. * Link.scm (link:link): prepend ./ to non-absolute sun-dl library paths. * scm.texi, scm.doc, scm.1, r4rstest.scm, README, Init5c2.scm, ANNOUNCE: ...-swiss => swissnet * scm.h (verbose): read only macro for scm_verbose. * repl.c (scm_verbose): renamed from verbose. * scmfig.h (VERIFY_INTS): Added macro to print warnings if interrupts are improperly allowed and CAREFUL_INTS is #defined. (VOLATILE): Expands to `volatile' keyword if __STDC__ is #defined. * sys.c (sys_errp): Interrupt safe system output port added. (scm_estk_reset): (must_malloc): (must_realloc): (scm_make_cont): Now should be run with ints deferred, no longer ever allow ints. scm-estk_reset builds a new stack if scm_estk is BOOL_F. * scm.c (process_signals): Modified to print deferred output to sys_errp. * eval.c (SCM_ENV_SAVE): (SCM_ENV_RESTORE): now ENV_SAVE, ENV_RESTORE, local to eval.c (apply): (ceval_1): Ints deferred before call to scm_make_cont, which no longer allows ints. (closure): Now takes the number of required closure arguments as a second argument. (m_lambda): Computes and memoizes the number of required arguments. * repl.c (iprlist): Uses GCCDR so that fatal error messages during gc may print better. (handle_it): Call to scm_egc made conditional on NO_ENV_CACHE. (growth_mon): (gc_start): (gc_end): (heap_report): Now use sys_errp. (ints_warn): Added for interrupt warnings using VERIFY_INTS. (scm_stack_trace): Now completely prints stacks up to 20 deep, rather than 10. (def_err_response): Prints errobj if error is fatal. (lroom): Made subr_1o for easier calling from C. * Init5c2.scm (array-shape): No longer signals an error when passed a non-array -- now returns whatever ARRAY-DIMENSIONS returned (currently #f). * scm.c (scm_proftimer): Also conditional on SIGALRM. * sys.c (init_storage): Fixed initialization of tmp_errp so that it is always correctly aligned. * scm.c (process_signals): Fixed braino in code to search for deferred signals. (scmable_signal): Added POSIX signal unblocking call, conditional on SIG_UNBLOCK, so Scheme signal handlers may be interrupted before they exit. * scm.c (scmable_signal): (err_signal): (init_signals): (ignore_signals): (unignore_signals): (restore_signals): Abstracted signal handling. (fpe_signal): (bus_signal): (segv_signal): (alrm_signal): (prof_signal): Removed. * repl.c (process_signals): Moved to scm.c * sys.c (must_realloc_cell): Now returns void. * scm.c (prof_signal): (scm_proftimer): (ignore_signals): (unignore_signals): Added handler for SIGPROF, raised via call to setitimer (Scheme function PROFILE-TIMER). * repl.c (handle_it): No longer saves scm_env, scm_env_tmp to estk, they are protected by doing ecache gc. (process_signals): Handles SIGPROF. * sys.c (scm_fill_freelist): No longer always does gc. (gc_mark): No longer bashes cdr of `free' cells, handle_it now bashes more selectively. (scm_egc): DEFER/ALLOW_INTS moved to minimize debugging ints_viol messages -- some will still occur. (scm_egc): No longer saves scm_env and scm_env_ptr to estk, they are protected separately. To improve interrupt safety. * unif.c (resizuve): eliminated unused variable `ptr'. * sys.c (freeprint): Now prints cdr of new cell. * repl.c (input_waiting): Now checks return value of select and restarts if interrupted. This was causing CHAR-READY? to return #T when no input was actually readable. * sys.c (scm_egc): (scm_egc_copy_roots): Eliminated extra root argument, made safe because EGC_ROOT is always called with ints deferred. (gc_mark): Check for ecache broken heart during mark -- fatal error. (gc_sweep): Now uses HUGE_LENGTH instead of LENGTH for string termination check. (must_malloc_cell): (must_realloc_cell): Added. (gc_for_alloc): Static function abstracts gc calls for malloc/realloc. * unif.c (make_uve): Removed call to makestr in order to support huge strings. (resizuve): Now uses must_realloc_cell. * subr.c (make_vector): (mkbig): (adjbig): Now use must_malloc_cell, must_realloc_cell. * socket.c (maksknm): Now uses must_malloc_cell. * scm.h (ISYMNUM): Use only 8 bits for number, freeing some bits for other uses. * scl.c (makdbl): Now uses must_malloc_cell. * rgx.c (lrgecomp): Now uses must_malloc_cell. * repl.c (handle_it): Keep pointers to discarded new cells. * record.c (rec_constr1): (init_record): Now use must_malloc_cell. * posix.c (scm_getgroups): Now uses must_malloc_cell. * dynl.c (l_dyn_link): (l_dyn_call): Moved NEWCELL out of deferred ints sections. For dlopen versions, print more error messages. * eval.c (macroexp1): now prints name of unbound variable. (s_unbnd s_wtap): abstracted error message strings. * eval.c (ceval_1): No longer make extra environment frame for LETREC, since internal DEFINE is now rewritten. * sys.c (scm_fill_freelist): added. Assures that at least MIN_GC_YIELD cells are in freelis. This is used before returning from interrupts. * repl.c (handle_it): Discard 2 cells (because of CDR in NEWCELL). Call scm_fill_freelist(); * Init5c2.scm: removed DEFINED? conditionals for old SCMs. * sys.c (scm_estk_grow): Now pushes estk ptr, with ints deferred. * eval.c (ENV_PUSH): (ENV_POP): Now done with DEFER_INTS_EGC to prevent problems with interrupt handlers that run Scheme code. * sys.c (scm_estk_grow): Protected critical section with DEFER/ALLOW_INTS (must_malloc): (must_realloc): Protected igc call with DEFER/ALLOW_INTS. (scm_egc): Added DEFER/ALLOW_INTS around call to igc -- prevents interrupts violation message in debug mode. (igc): Now SCM_ENV_SAVE before any gc marking to fix gc bug tickled by running Scheme code from interrupts. (scm_egc): (scm_egc_copy_roots): Now take a single argument, a gc root. Simplifies handling of the case where scm_egc calls igc, and possibly itself. * repl.c (growth_mon): Now prints "shrank" instead of "grew" if the relevant limit decreased. (handle_it): Do env cache gc before applying interrupt handler, to protect data on the estk, which might move. -=-=- Scm conforms to Revised^5 Report on the Algorithmic Language Scheme and the IEEE P1178 specification. Scm is written in C and runs under Amiga, Atari-ST, MacOS, MS-DOS, OS/2, NOS/VE, Unicos, VMS, Unix and similar systems. ASCII and EBCDIC are supported. Documentation is included explaining the many Scheme Language extensions in scm, the internal representations, and how to extend or include SCM in other programs. Documentation is online at: http://swissnet.ai.mit.edu/~jaffer/SCM.html SCM can be obtained via FTP (detailed instructions follow) from: swissnet.ai.mit.edu:pub/scm/scm5c3.tar.gz prep.ai.mit.edu:pub/gnu/jacal/scm5c3.tar.gz SLIB is a portable Scheme library which SCM uses: swissnet.ai.mit.edu:pub/scm/slib2c3.tar.gz prep.ai.mit.edu:pub/gnu/jacal/slib2c3.tar.gz JACAL is a symbolic math system written in Scheme: swissnet.ai.mit.edu:pub/scm/jacal1a7.tar.gz prep.ai.mit.edu:pub/gnu/jacal/jacal1a7.tar.gz HOBBIT is a compiler for SCM code: swissnet.ai.mit.edu:pub/scm/hobbit4d.tar.gz SLIB-PSD is a portable debugger for Scheme (requires emacs editor): swissnet.ai.mit.edu:pub/scm/slib-psd1-3.tar.gz prep.ai.mit.edu:pub/gnu/jacal/slib-psd1-3.tar.gz SMG-SCM is an SMG interface package which works with SCM on VMS. swissnet.ai.mit.edu:pub/scm/smg-scm2a1.zip prep.ai.mit.edu:pub/gnu/jacal/smg-scm2a1.zip A VMS version of Unzip is available by anonymous FTP from ftp.spc.edu:[ANONYMOUS.MACRO32]UNZIP.EXE. TURTLSCM is a turtle graphics package which works with SCM on MS-DOS or X11 machines: swissnet.ai.mit.edu:pub/scm/turtlegr.tar.gz prep.ai.mit.edu:pub/gnu/jacal/turtlegr.tar.gz XSCM is a X windows interface package which works with SCM: swissnet.ai.mit.edu:pub/scm/xscm-2.01.tar.gz prep.ai.mit.edu:pub/gnu/jacal/xscm-2.01.tar.gz MacSCM is a Macintosh applications building package which works with SCM (similar to XSCM). swissnet.ai.mit.edu:pub/scm/macscm.tar.Z WB is a disk based, sorted associative array (B-tree) library for SCM. Using WB, large databases can be created and managed from SCM. swissnet.ai.mit.edu:pub/scm/wb1a2.tar.gz SIMSYNCH is a digital logic simulation system written in SCM. swissnet.ai.mit.edu:pub/scm/synch1a2.tar.gz prep.ai.mit.edu:pub/gnu/jacal/synch1a3.tar.gz DLD is a C library package allowing SCM to dynamically load object files on VAX (Ultrix), Sun 3 (SunOS 3.4 and 4.0), SPARCstation (SunOS 4.0), Sequent Symmetry (Dynix), Atari ST, and a.out Linux systems. prep.ai.mit.edu:pub/gnu/dld-3.3.tar.gz #! implements "#!" (POSIX) shell-scripts for MS-DOS batch files. swissnet.ai.mit.edu:pub/scm/#!.zip -=-=- ftp swissnet.ai.mit.edu (anonymous) bin cd pub/scm get scm5c3.tar.gz get slib2c3.tar.gz or ftp prep.ai.mit.edu (anonymous) bin cd pub/gnu/jacal get scm5c3.tar.gz get slib2c3.tar.gz `scm5c3.tar.gz' is a gzipped tar file of the C code distribution. `slib2c3.tar.gz' is a gzipped tar file of a Scheme Library. Files in these directories with the ".gz" suffix are compressed with patent-free gzip (no relation to zip). The program to uncompress them is available from prep.ai.mit.edu:pub/gnu/gzip-1.2.4.tar prep.ai.mit.edu:pub/gnu/gzip-1.2.4.shar prep.ai.mit.edu:pub/gnu/gzip-1.2.4.msdos.exe Remember to use binary mode when transferring the files. Be sure to get and read the GNU General Public License (COPYING). It is included in scm5c3.tar.gz. I sell IBM PC floppy disk sets with the source files, documentation, and MS-DOS and i386 MS-DOS executables for $99.00. To order, send e-mail to jaffer @ rice-chex.ai.mit.edu.