This message announces the availability of Scheme release scm5d2. New in scm5d2: * Makefile (install): Make sure $(libscmdir)require.scm exists. (libscmdir): Use instead of IMPLPATH. * repl.c (scm_top_level): Corrected error test on exit in case 0 is not success. (repl): Return MAKINUM(EXIT_SUCCESS) when exiting an interactive session on EOF, this should not be an error. * build.scm (define-compile-commands): Added. (defcommand): Added. (platform): formatted; simplified names. * Makefile (features.txi): Added. * scm.texi (Build Options): take feature documentation from "features.txi". * build (make-features-txi): Creates documentation of build features from 'features table. * build.scm (build:define-feature): Added. Feature definitions moved to top level. * Init5d1.scm (comment): Added. (read:sharp): Added `#;' comment syntax, *feature* SHARP:SEMI. * sys.c (scm_env_v2lst): Made tolerant to argc of zero, since ecache_evalx may call it thus for DO loops binding no values. * eval.c (debug_env_save): Function for use in ENV_SAVE when the CAREFUL_INTS paranoid debugging flag is #defined. (ecache_eval_args): Now calls ecache_evalx(), which evaluates a list of expressions and returns a list allocated on the ecache in scm_env_tmp. (m_do): (m_letrec1): (ceval_1): LET, LETREC, and DO now call ecache_evalx instead of using inline loops, this seems to improve speed by 5% - 10% for jacal and for simsynch simulation. C stack usage will increase somewhat for large env frames. (lookupcar): Added support for constant bindings, to be created by LET, LETREC, LET*. * scl.c (dbl_prec): Use dbl_mant_dig in preference of potentially undefined DBL_MANT_DIG. * gmalloc.c: include "getpagesize.h" conditionalized on __svr4__. * build.scm (batch:chop-to-fit-system): Removed. Use new batch:try-chopped-command instead. (mysql): Added to features. (build:build): Added comments describing stages and errors. * Makefile: Added platform.txi dependency where dependent on scm.texi. * Makefile (scm.info require.scm): "cp -p" more portable than "cp -a"? * sys.c (mode_bits): Fix for null output string case. * unif.c (make_sh_array): Reduced consing by using scm_cvapply instead of apply. *sys.c (mode_bits): Now takes an optional buffer which, on exit, will hold a mode string suitable to pass to fopen(), without any SCM extension characters. * r4rstest.scm (float-print-test): stop after first error. * sys.c (try_open_file): Insure that only 'r', 'w', 'b', or '+' may be included in mode strings passed to fopen. * repl.c (scm_freshline): Added FRESHLINE. * sys.c (init_storage): Make def_outp tracked, so freshline will work with it. * ramap.c (cind): Now takes C vector of indices, which may be allocated on the C stack, rather than a uve. (ramapc): (ramap): (ramap_cxr): (array_imap): (array_for_each): (rafe): Use scm_cvapply instead of apply, allocate index and argument vectors on the C stack for array ranks < 5. * record.c (makrectyp): (recprin1): Use scm_cvapply instead of apply. (rec_prinset): Checks arity of argument procedure. * sys.c (sfputc): (sfwrite): (sfgetc): Use scm_cvapply instead of apply. (mksfpt): Checks arities of soft port procedures when the port is made. * eval.c (scm_cvapply): (scm_arity_check): Exported. (makacro): (makmacro): (makmmacro): Call scm_cvapply rather than consing up argument lists. Check arity of macro transformers once, when syntax is defined. * subr.c (make_vector): Fixed broken length argument test. * sys.c (scm_env_v2lst): Now takes list tail in scm_env_tmp, so tail can be allocated on ecache. * repl.c (scm_top_level): Print out supplied program arguments for failure exits to simplify debugging scripts. * eval.c (varcheck): Fixed for RECKLESS case. * eval.c (scm_arity_check): (macroexp1): Argument number checking in macroexp1 abstracted as scm_arity_check, for use in map, for-each ... (scm_cvapply): Apply a function to a C vector of arguments, used by map and for-each. (scm_v2lst): Added for use in scm_cvapply. (map): (for_each): Speed considerably improved: No longer allocate Scheme vector temporaries for up to 5 list arguments. No longer allocate unnecessary argument lists, allocate on ecache if possible. * repl.c (iprin1): Print out first elt of cclo environment -- makes record procedures more identifiable. * sys.c (scm_env_v2lst): Now takes last cdr of list as argument. * sys.c (scm_port_entry): Make 16-bit safe. * Tscript.scm: File added to implement transcript-on, transcript-off without burdening normal i/o. * Init5d1.scm (transcript-on): (transcript-off): Now autoloads from SCM/Tscript.scm (_TRACKED): Added. * socket.c (l_socket): (l_connect): (l_listen): Modified to use port table. (l_shutdown): (l_getpeername): (l_getsockname): Test for OPFPORTP, not just OPPORTP. * posix.c (l_pipe): Modified to use port table. (prinpipe): Removed. * ioext.c (reopen_file): (l_dup): (l_dup2): Modified to use port table. * crs.c (prinwindow): Removed. (mkwindow): Uses scm_port_entry. * repl.c (iprin1): Uses "name" field for printing ports. (input_waiting): (wait_for_input): (trans_on): (trans_off): Removed in favor of soft-port implementation. (lputc): (lgetc): (lputs): (lfwrite): (lungetc): Removed check for transcript, added line and column number support. Unread char now kept in port table rather than CAR. (lreadpr): (line_num): Removed line counting for load port, now done using general line and column counting. (scm_port_line): (scm_port_column): (scm_port_filename): Added. (err_head): Now prints out multiple filenames for nested loads. Tries to recover from recursive errors if current-error-port is a soft-port. * unif.c (uve_read): Removed ungetc call, if there is an unread character, just call lgetc repeatedly for the first elt. * sys.c (must_malloc): (must_realloc): Now check whether the heap is initialized or not, so may be called earlier. (scm_init_gra): (scm_grow_gra): Use above feature. (scm_port_entry): Added, allocates entry in a port table used to store unread characters, file names, line & column numbers, &c. (mark_port_table): (sweep_port_table): Gc support for port table. ptobfuns now has a "name" element, used for printing. (prinfport): (prinstpt): (prinsfpt): Removed. From David Yeh: * scl.c (makdbl): Mods to compile using MSVC. * scmfig.h: Don't #define SINGLES for MSC. -=-=- 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, Windows, 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 source is available from: http://swissnet.ai.mit.edu/ftpdir/scm/scm5d2.zip ftp.gnu.org:pub/gnu/jacal/scm5d2.zip (FTP instructions follow) SLIB is a portable Scheme library which SCM uses: http://swissnet.ai.mit.edu/ftpdir/scm/slib2c7.zip ftp.gnu.org:pub/gnu/jacal/slib2c7.zip JACAL is a symbolic math system written in Scheme: http://swissnet.ai.mit.edu/ftpdir/scm/jacal1b0.zip ftp.gnu.org:pub/gnu/jacal/jacal1b0.zip HOBBIT is a compiler for SCM code: http://swissnet.ai.mit.edu/ftpdir/scm/hobbit5x.tar.gz ftp.gnu.org:pub/gnu/jacal/hobbit5x.tar.gz SLIB-PSD is a portable debugger for Scheme (requires emacs editor): http://swissnet.ai.mit.edu/ftpdir/scm/slib-psd1-3.tar.gz ftp.gnu.org:pub/gnu/jacal/slib-psd1-3.tar.gz SMG-SCM is an SMG interface package which works with SCM on VMS. http://swissnet.ai.mit.edu/ftpdir/scm/smg-scm2a1.zip ftp.gnu.org: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: http://swissnet.ai.mit.edu/ftpdir/scm/turtlegr.tar.gz ftp.gnu.org:pub/gnu/jacal/turtlegr.tar.gz XSCM is a X windows interface package which works with SCM: http://swissnet.ai.mit.edu/ftpdir/scm/xscm-2.01.tar.gz ftp.gnu.org:pub/gnu/jacal/xscm-2.01.tar.gz MacSCM is a Macintosh applications building package which works with SCM (similar to XSCM). http://swissnet.ai.mit.edu/ftpdir/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. http://swissnet.ai.mit.edu/ftpdir/scm/wb1a2.tar.gz SIMSYNCH is a digital logic simulation system written in SCM. http://swissnet.ai.mit.edu/ftpdir/scm/synch1b0.zip ftp.gnu.org:pub/gnu/jacal/synch1b0.zip 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. ftp.gnu.org:pub/gnu/dld/dld-3.3.tar.gz SCM.EXE (265k) is a SCM executable for DOS and MS-Windows. Note: SCM.EXE still requires slib2c7 and scm5d2 above. http://swissnet.ai.mit.edu/ftpdir/scm/scm.exe #! implements "#!" (POSIX) shell-scripts for MS-DOS batch files. http://swissnet.ai.mit.edu/ftpdir/scm/sharpbang.zip http://swissnet.ai.mit.edu/ftpdir/scm/#!.zip Programs for printing and viewing TexInfo documentation (which SCM has) come with GNU Emacs or can be obtained via ftp from: ftp.gnu.org:pub/gnu/texinfo/texinfo-4.0.tar.gz -=-=- ftp ftp.gnu.org (anonymous) bin cd pub/gnu/jacal get slib2c7.zip get scm5d2.zip