$Id: CHANGES,v 1.28 2005/12/05 22:35:31 phil Exp $ For detailed revision history see History file Changes since 1.0 release; ========================= Added new (experimental) builtin function groups: "DBM" -- "ndbm" keyed database access "COM" -- COM/OLE Automation on Win32 "STCL" -- SNOBOL/Tcl interface (optional) New library "dynamic.sno" to help compile/link dynamicly loadable extensions. Added HTTP.POST function to http.sno Handle environments where pointers can have high order bit set Linux 2.6 kernels in Fedora Core, SuSE 10 distributions Avoid broken "install" utilities autoconf compatibility: Honor CC, CFLAGS, CPPFLAGS, LDFLAGS, DESTDIR environment variables. Fix compilation on pre-panther OSX Fix second argument to DEFINE(): was not case folded! Fix backtracking over unevaluated expressions Source &FILE and &LINE shown in TRACE output Experimental: GC stats & tracing (-g on command line, >RACE keyword) Completed support for "memory I/O" when CSNOBOL4 used as a library! Added "PREDICATE" and "SYSPRED" return types in wrapper.sno Changes since 0.99.44 release; ============================= Added snolib(3) man page for SNOBOL4 library routines Treat all bytes with 8th bit set as ALPHA on ASCII systems allows UTF-8 encoded characters, and national character sets to used in labels and identifiers! command line: -S option to enlarge interpreter stack configure: added --mandir & --bindir IPv6 Support (both client and server) bi-directional "pipe" I/O on systems with sockets "privileged" port binding for UDP Lots of cleanup! DJGPP (DOS gcc) fixes default to -O3 with gcc add C prototypes for all functions (function declarations still "K&R" style) MINGW (Win32 gcc) fixes Fix LOAD() on Darwin (MacOS X) Fix timing script on Debian Ported to HP-UX/IA64 VMS: LOAD() support (not tested) Compilation on VMS7.3 support magic pathnames "/dev/null" and "/dev/tty" Win32: native (low overhead) support for character console I/O support magic pathnames "/dev/null" and "/dev/tty" fixed UDP I/O Fix for parallel make (GNU make, BSD make) Compilation under MS Visual Studio .NET 2003 Make struct descr packable (BITFIELDS_SAME_TYPE) Check for oversize integer constants (ERANGE from strtol()) Changes since 0.99.4 release; ============================ Command line: -d (dynamic region size) and -M (pattern match stack size) now take values in descriptors -v shows CSNOBOL4 version Increased default dynamic space to 64K descriptors Fix faulty lexical comparison function optimzations for null string Performance improvments; New string hash function (reduced both compilation and run time of genc.sno by 5%) Optimized most common case (CONTIN actions) in "stream" operation used for lexical analysis. (reduced compilation time of genc.sno by 8%) Merged all scanner (pattern matching) functions into single C function (eliminates mutual recursion, stack overflows) genc runtime reduced 15% atn.sno runtime reduced by 63%!! (2.7x faster) worst case (4096 char string) reduced 69% (4.8x faster) snocone self-compile runtime reduced 5% Made pattern building functions (lib/pat.c) inlinable (8% reduction in genc.sno compile time) Eliminate space padding on lines read by compiler (reduced genc.sno compile time by 65%) Raised default C compiler optimization levels Default &MAXLNGTH to largest possible string Documentation: README file describes available includes Include PDF of manual page Implement fatal "Output error" for output, ENDFILE() errors Configuration script re-write; Eliminate static config files & autoconf script configure generates config.m4 and config.h (with all defines) for use by loadable functions New configuration options; **** see "INSTALL" file for more information **** --add-define= Add a #define to config.h (visible to external functions) --double EXPERIMENTAL option to use C "double" for SNOBOL4 REAL data type --fast Architecture specific optimizations on native compilers --longlong EXPERIMENTAL!! try to use C "long long" (64-bit integer) for INTEGER datatype when longs/pointers are only 32-bits (ILP32 data model). --lp64 Request use of 64-bit long/pointer data model if available on this architecture, and not the default. --no-opt Compile without optimization New SNOBOL library files (see README); compatibility libraries: fence.sno, logic.sno, not.sno spitbol.sno, snobol4+.sno HOST() function codes: host.sno URL (http:, ftp:, file:) access functions Use large files (64-bit offsets) where available. Allows access and creation of files larger than 2GB New functions; FUNCTION() -- predicate to test if a function is defined ** EXPERIMENTAL ** LABEL() -- predicate to test if a label is defined idea from Steve Duff's version of Macro SPITBOL ORD() -- inverse of CHAR() SERV_LISTEN() -- act as TCP server SSET() -- scaled SET() allow large files when INTEGER is 32bits VDIFFER() -- returns first arg if two arguments DIFFER() idea from Steve Duff's version of Macro SPITBOL Extended HOST() functions (see host.sno) for system diagnosis HOST() function will accept REAL or integer encoded STRING args TIME() function now returns REAL datatype allows both better resolution (for small values) and larger range. Using 32-bit floats, runtimes larger than four and a half hours will lose resolution. Statistics reports compiler and execution times as REAL numbers Average statement runtime reported in microseconds (us). Allow a REAL any place an INTEGER is required (from SNOBOL4+) Contexts include TABLE(), ITEM(), array indices, INPUT(), OUTPUT(), SET(), keyword values, CHAR(), RPAD(), LPAD(), FIELD(), COLLECT(), DUMP(), DUPL(), OPSYN(), and SUBSTR() load.h updates; all RETxxx macros safe in any context RETSTR() takes single argument, allows NULL pointer RETSTR2() has old RETSTR() functionality RETINT() and RETREAL() always set return data type. All include files needed to build loadable functions installed in SNOLIB directory Include BSD tsort program; allow builds from scratch on platforms with GNU tsort (Linux, Cygwin) New ports; Ported to Darwin (MacOS X) Ported to Cygwin (http://cygwin.com), a free Unix emulation environment for Windows. Attempt at native Win32 port Updated Borland C port Updated VMS port; pipe open support, attempt at tty support Changes since 0.99.3 release; ============================ DATE() function takes an argument (per Catspaw SPITBOL) autoconf script takes --add-{cppflags,ldflags,objs,opt,srcs} options Support for LOAD() using dynamic libraries (works on SunOS4, SunOS5, IRIX, Digital Unix, Linux, NetBSD) Tentative support for HP-UX Speedups for BREAK(), BREAKX(), SPAN(), ANY(), and NOTANY() Cleaned up generated C code for function calls Trim tabs as well as spaces (&TRIM and TRIM()) timing script reports hardware info on BSD, HP, Linux systems Floating point I/O; exponents allowed without decimals (ie; 1e10) 'd' exponents removed; did not work will now output exponents Fixed getstring() with null string I/O changes; 'T' mode implies unbuffered output for terminal prompts new magic path /dev/fd/N characters in excess of record length discarded on read New IO_FINDUNIT() function Unit numbers up to 256 now allowed Compiler line length uppped from 132 to 1024 Allow long command lines to be passed via HOST(0) and &PARM Allow long strings returned from LOAD()'ed functions Changes since 0.99.2 release; ============================ Added OpenBSD to "autoconf" Ported back to HP-UX 7, DOS/Borland Fixed bug with EVAL() of long strings Fixed autoconf to handle bad strings.h (Solaris 2.4) Changes since 0.99.1 release; ============================ Portability/autoconfig improvements Added magic "/udp" pathname for UDP data Debugged "update" I/O Added functions to allow writing I/O subroutines to be added via "Poor Man's Load" (PML) Changes since 0.99 release; ========================== Added I/O options (binary, noecho, etc) Added config file for 64-bit IRIX (64-bit integers, double-precision reals) Added magic "/tcp" pathname for opening TCP connections Fixed bugs with syntax errors detected by CODE() or EVAL() Syntax errors in CODE() or EVAL() set &ERRTEXT Fixed bugs with REWIND() Changes since 0.91.2 release; ============================ Command line additions; command line arguments available to user (via HOST(2,n) and &PARM) -h gives help/usage -n toggles EXECUTE/NOEXECUTE setting -p toggles SPITBOL operators (enabled by default) -u passes argument string (for HOST(0)) -P controls size of pattern match stack -M option required to compile multiple source files Bugs fixed; lexical comparison of a string with a shorter prefix ANY() NOTANY() BREAK() SPAN() with 8-bit data removed trailing spaces in listings case folding handled properly in all contexts requiting NAMEs tabs handled properly in error messages Other Changes; case folding always enabled in control card processing source file and line included in error messages new error messages for bad -INCLUDE lines PUNCH I/O variable removed SPITBOL compatible features added; &ERRTEXT system variable &LINE, &FILE, &LASTLINE and &LASTFILE system variables &STLIMIT defaults to -1 (no limit) -EXECUTE/-NOEXECUTE control cards -LINE control card , alternation construct; (exp1, exp2, ....) = (assignment) operator ? (scan) operator BREAKX() function CHAR() function EXIT() function (partial support) HOST() function LEQ(), LNE(), LLT(), LLE() and LGE() functions LPAD() and RPAD() functions NUMERIC type in CONVERT() REVERSE() function SORT() and RSORT() functions SQRT() function SUBSTR() function TERMINAL I/O variable leading spaces ignored when CONVERT()'ing to REAL and INTEGER SNOBOL4+ compatible features added; &PARM system variable -PLUSOPS control card CHOP() function EXP() and LOG() functions FREEZE() and THAW() functions SITBOL compatible features added; FILE() DELETE() and RENAME() functions Other features added; Automatic LOAD()'ing of linked-in external C functions available REALs are double precision on Alpha under Digital Unix IMPORTANT for users of versions prior to 0.99; ============================================= Configuration is now automatic. DO NOT create config.m4 by hand! some systems no longer have system specific config files. SPITBOL operators are enabled by default, this causes problems for the (very) rare program that OPSYN's the "?" binary operator! The PUNCH variable is no longer available; use TERMINAL. -d option takes size in bytes, not descriptors.