diff options
Diffstat (limited to 'libslang/changes.txt')
-rw-r--r-- | libslang/changes.txt | 1505 |
1 files changed, 1505 insertions, 0 deletions
diff --git a/libslang/changes.txt b/libslang/changes.txt new file mode 100644 index 0000000..574356a --- /dev/null +++ b/libslang/changes.txt @@ -0,0 +1,1505 @@ +Changes since 1.4.8 +1. src/slarray.c: superfluous call to SLclass_add_math_op removed + (Michael Noble <mnoble at space.mit.edu>) +2. src/slang.c: foreach (NULL) using("next"){} foo (); caused _NARGS=1 + in foo. +3. src/slarrfunc.c: Fix to prevent sum(NULL) from causing a core-dump. +4. src/slimport.c: import (module, "") made equivalent to + import(module,"Global"); This way, import(module, current_namespace()) + will work when the current namespace is anonymous. +5. src/slospath.c: Several users have requested that I add the ability + to define a load path and use that path when loading interpreter + files. To this end, several new functions were added to the API: + + char *SLpath_get_load_path (void); + int SLpath_set_load_path (char *path); + /* Get and Set the path to be searched for files */ + int SLpath_get_path_delimiter (void); + SLpath_set_path_delimiter (int delimiter); + /* Get and set the character delimiter for search paths */ + int SLang_load_file_verbose (int verbose); + /* if non-zero, display file loading messages */ + + New intrinsics include: + + set_slang_load_path + get_slang_load_path + path_get_delimiter + + These functions, nor the intrinsics have an effect on applications + that use SLang_load_file_hook or SLns_load_file_hook for loading + files. The change should be transparant to applications that use + the stock load file mechanism. The main difference is that if one + attempts to load a file with no extension, e.g., "foo", but the + file does not exist, then the interpreter will try to load the more + recent of "foo.sl" and "foo.slc". + + See src/slsh.c for how the functions may be used. + +6. slsh/slsh.c: Updated to use the new search path code outlined + above. Also, slsh is distributed with a collection of general + purpose slang functions, including jed's provide/require functions. + See slsh/README for more information. +7. doc/tm/cslang.tm: Modified the section describing the implemetation + of intrinsic functions in an effort to clarify the discussion. +8. src/slang.c: tiny memory leak resulting from peephole optimzations + added earlier found and fixed. +9. src/slarrmisc.c: new intrinsic: cumsum computes the cumulative sum + of an array via the new SLarray_map_array function. + +Changes since 1.4.7 +1. src/sldisply.c: make sure SLtt_erase_line leaves the cursor at the + beginning of a line in all cases. Previously, this happened only + for terminals able to delete to the end of line _and_, when + writing to the last line, the ability to insert a character. +2. doc/tm/cslang.tm: In the discussion of the MAKE_CSTRUCT_FIELD + macro, SLANG_STRING_TYPE was used instead of SLANG_INT_TYPE + (mnoble@space.mit.edu). Similarly, in the discussion of intrinsic + structures, My_Window was used instead of My_Win + dburke@head-cfa.cfa.harvard.edu. +3. src/slang.c: peephole optimizations of 1.4.7 were conflicting with __tmp + optimizations. This was causing something as simple as + + define f() + { + variable a = [1.0:10.0:1]; + variable b = a * 0.0; + return a; + } + + to fail. +4. src/slarray.c Allow ranges to index higher dimensional array. +5. slsh/slsh.c: Updated to allow a user specified search path. See + slsh/README for more info. + +Changes since 1.4.6 +1. src/slclass.c: Change "-??-" to "- ?? -" to avoid its + interpretation as a trigraph. Miquel Garriga <miquel at icmab.es> +2. src/mkfiles/makefile.all: If compiling with mingw32, use "cp" + instead of "copy". Miquel Garriga <miquel at icmab.es> +3. src/sllimits.h: Increased the size of the local variable and + recursion stacks on 32 bit systems. +4. src/slarrfun.c: "sum", "min", and "max" intrinsic functions added. + Since these may conflict with application defined function, they + have been placed in their own module. To get them, use + SLang_init_array_extra --- SLang_init_all will not pick up this + module. Version 2 of the library will add these functions to the + main array function module. +5. src/sltermin.c: Work around a bug in the solaris 7+8 tset program + which improperly sets the TERMCAP environment variable + (Paananen Mikko <mikkopa@cs.tut.fi>). +6. src/slprep.c: Added support for "#stop" and a few other useful + or convenient features. See comments at the top of slprep.c for + more details. (Mark Olesen <molesen@zeunastaerker.de>). +7. src/<misc>.c: "const" qualifier added to several places to put + constant variables in rdata/text segment to be shared between + other processes. ("Andrew V. Samoilov" <samoilov@usb.zp.ua>) +8. src/sldisply.c: If colors were defined using the "Sf" capability + instead of the "AF" capability, then assume those are specified in + BGR format instead of RGB. (Pavel Roskin <proski@gnu.org>) +9. slsh/slsh.c: "status" was not declared if compiled with + SLSH_LIB_DIR defined. (mnoble@space.mit.edu) +10. slsh/Makefile.g32: new file to allow slsh to be compiled with + mingw32. +11. src/sldisply.c,sltermin.c: if running as setuid/setgid, then limit + access to the environment for such a process. <solar@openwall.com>. +12. src/slstd.c: New intrinsic function _get_namespaces may be used to + get a list of currently defined namespaces. +13. src/slstruct.c: better support for pushing and popping structures + from C via the SLang_push/pop_cstruct. See doc/text/cslang.txt + for details. +14. slsh/Makefile.in: install target added +15. src/slang.c: additional peep-hole optimizations added +16. src/*.c: fixes it enable the library to be compiled without floating + support support. + +Changes since 1.4.5 +1. doc/tm/rtl/struct.tm: Typos in documentation for set_struct_fields + corrected by Douglas Burke <dburke@head-cfa.harvard.edu>. +2. src/sldisply.c: VMS specific problem: SLang_TT_Write_FD was not + getting initialized (Hartmut Becker <Hartmut.Becker@compaq.com>). +3. src/slarith.c: On a 64 bit system, it was possible that Int_Type + objects were not getting properly converted to Double_Type. +4. src/sltoken.c: A unitialized memory reference fixed in the + error handling of an empty character declaration (''). +5. src/slstd.c: call to _SLinit_slcomplex moved to slmath.c. This + means that one does not get complex number support unless math + support is also enabled. (suggested by Michael Noble + <mnoble@head-cfa.harvard.edu>) +6. src/slclass.c: Make sure that when registering a class using + SLANG_VOID_TYPE, the reserved class ids are not used. +7. src/slmisc.c, src/sltoken.c: moved SLatoi and friends from sltoken + to slmisc.c. This avoids linking in the interpreter when it is not + needed. +8. doc/tm/rtl/array.tm: Documentation for the "where" function + corrected by <G.Milde@physik.tu-dresden.de>. +9. src/slkeypad.c: support added for F11 and F12 keys +10. src/slimport.c: Better handling of dlopen errors as suggested by + Michael Noble <mnoble@head-cfa.harvard.edu. +11. src/slstruct.c: make sure field names have legal names. +12. src/slistruct.c: SLns_add_istruct_table added. +13. src/sltoken.c: New name-space specific functions added: + SLns_load_file, SLns_load_string + These may be used to load a file or a string into a specified + namespace. Simarily, the "eval" and "evalfile" functions may now + be given a second argument to specify a namespace. +14. src/slstd.c: __eqs function added to test for "sameness" of + its arguments, __class_type returns information about how an + object is classified, __class_id to return its class id. See + examples/saveobj.sl for an example of the use of these functions. +15. src/slarray.c: a 2-d array can nolonger be specified in-line as, + e.g., [[1,2],[3,4]]. This now produces a 1-d array: [1,2,3,4]. +16. src/slregexp.c: fix for case-insentive matches involving e.g., + a\{1,3\} type regexps (Thomas Schultz <tststs@gmx.de>) +17. src/slarray.c: Allow setting elements of pointer type arrays to + NULL, e.g., a[10] = NULL. +18. src/slsignal.c: If CYGWIN, then assume posix signal handling works. +19. src/slang.c: Do not allow an intrinsic function, variable, etc + table to be added twice. +20. src/slarray.c: Added _isnull intrinsic for checking for NULL values of + array elements. This is useful since something like + "where(a==NULL)" does not check the individual elements, whereas + "where(_isnull(a))" does. +21. src/sldisply.c: typo involving the initialization of Del_Eol_Str + for terminals that do not have such capability. + (Pavel Roskin <proski@gnu.org>) + +Changes since 1.4.4 +1. Added QNX specific patches and fixed some typos that prevented it + from compiling when _SLANG_OPTIMIZE_FOR_SPEED is 0. (Tijs Michels + <tijs@vimec.nl>). +2. Make sure '#ifeval expr' evaluates up to the end of a line and no + further. +3. src/sldisply.c: Do not look for pad info in the graphic charset + pairs string. Also, when comparing space characters, be sure to + take into account ACS. (Marek Paliwoda <paliwoda@inetia.pl>) +4. Trivial code cleanups to avoid BCC 5.x warnings. +5. src/mkfiles/makefile.all: BCC-specific tweaks (John Skilleter + <John.Skilleter@pace.co.uk>) +6. SLang_push/pop_datatype made public +7. src/slutty.c: if tty is not initialized and an attempt is made to + read from the tty, set errno to EBADF. +8. src/slkeypad.c: New function SLkp_set_getkey_function. This may be + used to specify a different function to read keys. +9. src/slcurses.c: If an invalid keysequence is entered, simply return the + characters of the sequence on successive getkey calls. +10. src/slarray.c: Inline arrays of the form [1f, 0] were not working. +11. src/sldisply.c: Make sure SLtt_get_screen size gets called by + SLtt_initialize. +12. doc/tm/rtl/struct.tm: typeof in example for get_struct_field_names + corrected by Chris Baluta. +13. modules/varray.c: example showing how a memory mapped array may be + created. It also illustrates the free_fun callback for arrays. +14. examples/life.sl: a S-Lang implementation of Conway's life. +15. src/slclass.c: SLclass_dup_object function added. Although + push/pop can be used to achieve a duplicated object, this function + makes it a little easier. +16. src/slang.h: Prototyes involving "unsigned char" to represent data + types have been modified to use SLtype, which is typedefed to be + an unsigned char. V2 will use a different size for data types. +17. Misc tweaks to aclocal.m4, src/Makefile.in, etc to support MacOSX. + I have not tested it on that system. +18. The library may now be compiled under CYGWIN using the same + procedure as under Unix. +19. src/slkeypad.c: Some xterm-specific escape sequences added by + Denis Zaitsev <zzz@cd-club.ru>. + +Changes since 1.4.3 +1. Fixed a bug that shows up on 64 bit BigEndian machines--- it + affected no others. +2. Fixed potential problem in pre-parsing binary strings. +3. Bug a fixed affecting only pure termcap-based systems. It has + been around a while, I am surprised that it took so long to be + discovered. + +Changes since 1.4.2 +1. If init_NAME_module_ns does not exist in a module, then try to + load init_NAME_module as long as the module is to be imported into + the Global namespace. +2. src/sldisply.c: allow more than 200 rows and 250 columns. Who + uses such windows? +3. Allow Void_Type to be specified for the data-type in array_map if the + function returns nothing. +4. src/slarray.c: A statement such as [1:-1][[1:-1]] = [1:-1]; was + causing a core dump. +5. src/sldisply.c: (Unix/VMS) SLsmg/SLtt routines will write using the file + descriptor SLang_TT_Write_FD, which, by default, is initialized to + fileno(stdout). +6. src/slposio.c: New C API functions: + SLfile_get_fd returns the file descriptor associated with the + SLFile object. + SLfile_dup_fd: duplicate an SLFile object +7. src/slposio.c: New intrinsics: dup_fd (dup a file descriptor) +8. SLerrno.c: C API Function: SLerrno_set_errno. +9. SLerrno.c: More errno values added. +10. Raising complex types to powers supported. +11. slang.c: current_namespace was returning "global" instead of + "Global" for the global namespace. +12. slang.c: `use_namespace("X");define f();' was not placing `f' into + `X'. +13. path_is_absolute fixed to return integer +14. src/slarray.c: generate an error when an empty array is passed to + array_map. +15. src/slarray.c: a=3; a[*] should return an array. +16. Make sure setlocale(LC_NUMERIC,"C") gets called. +17. slvideo.c: SLtt_set_cursor_visibility implemented for win32. +18. slvideo.c: SLtt_get_screen_size corrected for win32 by Zusha P. +19. configure: modified to not automatically assume that -ldl is + required for dlopen. In addition, molesen@zeunastaerker.de sent + patches for building dynamically linked library under irix. +20. slsh/Makefile: generated by configure. +21. modules/Makefile: generated by configure +22. src/slimport.c: If no module path has been set, fall back on + $(prefix)/lib/slang/modules +23. src/Makefile.in: DESTDIR support added by Brad <brad@comstyle.com>. +24. src/Makefile.in: documentation is installed in $(prefix)/doc/slang + and no longer in $(prefix)/doc/slang/$(slang_version) +25. sleep intrinsic can take a floating point number to sleep + fractional seconds. +26. src/slang.c: fix SLang_run_hooks to accept a namespace qualifier. +27. New modules added to the module directory: fcntl, select, termios. + +Changes since 1.4.1 +1. slang.c: Under certain conditions, the continue statement was not + properly handled in do..while statements. src/test/loops.sl added + for testing. +2. slparse.c: avoid potential (rare?) infinite loop when slang error occurs + (Stanis³a Bartkowski <sb@protest.com.pl>). +3. slsmg.c: When SLsmg_init_smg is called, mark the display as trashed. +4. It is now possible to add intrinsics to their own namespace via + new SLns_add* functions. Moreover, the import function now takes + an optional additional argument that specifies a namespace. +5. New namespace intrinsics: use_namespace, current_namespace +6. Changed inner-product algorithm to minimize the number of cache + misses. +7. sldisply.c: Kanji specific patch from Jim Chen + <jimc@ns.turbolinux.com.cn>. +8. sldisply.c: Assume that Eterm and rxvt are xterm-like (Michael + Jennings <mej@valinux.com>). +9. sldostty.c: mouse support added by Gisle Vanem <giva@bgnett.no>. +10. slsearch.c: avoid infinite loop if search string has no length. +11. SCO elf support added by Mike Hopkirk <hops@sco.com>. +12. slregexp.c: regexp \d+ was not working properly +13. keyhash.c: typos involving USER_BLOCK keywords corrected. + (the use of USER_BLOCKs is discouraged). +14. New intrinsic variable: _slang_doc_dir. This specifies the + installation location of the doc files. +15. Make sure it can compile with SLTT_HAS_NON_BCE_SUPPORT set to 0. + +Changes since 1.4.0 +1. slw32tty.c: `v' key was not being handled on win32 systems. Also, + Shift-TAB will now generate ^@-TAB. +2. New intrinsic function: strreplace. This is more flexible than + str_replace. +3. VMSMAKE.COM: slstring added to list of files to get compiled. +4. slsh/Makefile, modules/Makefile: added patch from Jim Knoble + <jmknoble@pobox.com> to create elf versions (make ELF=elf). +5. AIX IBMC patches from Andy Igoshin <ai@vsu.ru>. +6. autoconf/config.sub: tweaked to properly handle recent alpha + systems. +7. If compiling on an alpha, add -mieee compiler flags. +8. SLang_roll_stack and SLang_reverse_stack functions made public. +9. SLang_free_function added. If you call SLang_pop_function, then when + finished, call SLang_free_function. This does nothing in 1.X but + may do something in 2.x. +10. src/slrline.c: Keybindings for ESC O A, etc added. +11. src/slsmg.c: SLsmg_write_nstring: avoid many loops if an extremely + large value is passed (> 0x7FFFFFFF). +12. src/slregexp.c made thread safe +13. src/slsmg.c: Cursor was not always properly positioned when + after SLsmg_touch_lines called. +14. If terminal does not have erase to eol capability, then use spaces. +15. doc/tm/strops.sl: doc for strcat updated to reflect its ability to + concatenate N strings. +16. Documentation updated to indicate that floating point range arrays + are open intervals such that [a:b] does not include b. slarray.c + was modified to enforce this specification. Previously, whether + or not b was included in the interval was indeterminate. +17. src/slsmg.c: bug involving SLsmg_set_screen_start fixed. +18. src/slparse.c: parser was failing to catch misplaced `}'. + +Changes since 1.3.10 +1. If a floating point exception occurs and the OS allows the library + to handle it without forcing a longjmp, then SL_FLOATING_EXCEPTION + will get generated instead of SL_INTRINSIC_ERROR. Note: Linux + provides no way to handle floating point exceptions without + forcing a longjmp. In my opinion, this is a flaw. +2. SLang_pop_double was returning the wrong value for short and + character types. +3. New intrinsic: is_struct_type(X) ==> non-zero is X is a struct. +4. typecast operation from user defined type to Struct_Type added. +5. slkeypad.c: DOS/Windows DELETE_KEY definition added (Doug Kaufman + <dkaufman@rahul.net>) +6. slposdir.c: Do not depend upon the existence of rmdir on VMS + systems. +7. slang.c: abs, sign, mul2, chs, sqr were not being treated as + function calls. +8. sldisply.c:SLtt_cls: If the terminal is a color terminal but + being used as a black and white terminal, then reset colors before + clearing. +9. path_sans_extname intrinsic added. +10. slimport.c: If module defines deinit_NAME, will be be called prior + to unloading the module. (Ulrich Dessauer <des@gmx.de>) + +Changes since 1.3.9 +0. typedef unsigned short SLsmg_Char_Type added to slang.h. + Applications that access SLsmg functions read/write_raw and + SLsmg_char_at should use SLsmg_Char_Type unstead of unsigned short + because this will be changed to unsigned long in version 2.0. + +1. Documentation patches from Vlad Harchev <hvv@hippo.ru> added. +2. slstring.c: offsetof(SLstring,bytes) --> + offsetof(SLstring,bytes[0]) to avoid compiler warning on some + systems. +3. slcmplex.c: an int was used where a double should have beed used. +4. egcs g++ was optimizing slang.c:SLclass_push_ptr_obj away because + it was declared as inline. In my opinion, this is another g++ bug. +5. sscanf intrinsic added. See docs. +6. SLmake_lut rewritten to correct incorrect handling of ranges with a + hyphen at the end. +7. Small bug involving non-BCE terminals in SLsmg_set_color_in_region + fixed. +8. Functions SLcomplex_asinh/acosh/atanh implemented. +9. install-elf will nolonger install .h files twice. +10. @Struct_Type may be used to create a struct. +12. X[i]++, X[i]-=Y, etc implemented. +13. Much of slw32tty.c rewritten to fix several bugs in the win32 tty + support. In addition, if SLgetkey_map_to_ansi(1) has been called, + then function and arrow keys will produce escape sequences that + allow one to distinguish alt, ctrl, and shift function keys. +14. OS/2 specific typo in slposdir.c corrected (Eddie Penninkhof + <wizball@xs4all.nl>). +15. slang.c:add_slang_function: On the very rare occasion that this + function failed, memory would get freed twice. + +Changes since 1.3.8 +1. Color was not enabled on VMS. +2. If MAKE_INTRINSIC was used to declare a function which takes + arguments, then a typecast error would result when the function was + called. New programs should not use MAKE_INTRINSIC since it + bypasses argument type-checking. +3. src/sl-feat.h: SLTT_XTERM_ALWAYS_BCE variable added to force the + assumption of the bce (background-color-erase) capability of xterm. + The default is 0, which means to accept the terminfo setting. + To force it to 1 during run-time, set the COLORTERM_BCE environment + variable. This is useful when using, e.g., rxvt to login to a + solaris system where the terminfo file will probably not indicate + bce. +4. SLw32tty.c:SLang_init_tty: Open CONIN$ instead of using + GetStdHandle. This is necessary if stdin has been redirected. +5. SLposdir.c: Stat structure contains new field `st_opt_attrs' that + may be used to contain system specific information that `struct + stat' does not provide. In particular, under win32, this field + contains the file attributes, e.g., whether or not a file is + hidden. +6. Appropriate typecasts added to avoid warnings on systems that do not + support `void *'. +7. Characters in the range 128-255 are allowed in identifiers. +8. Correction to the documentation for SLang_init_tty (Ricard Sierra + <irebulle@nexo.es>). +9. SLANG_END_*_TABLE macros added to quiet silly egcs compiler warnings. +10. typo in sltime.c caused it not to compile under Ultrix. +11. Speed improvement of binary operations involving arrays, + particularly when used in conjunction with the __tmp function. +12. traceback messages include the filename containing the function +13. File local intrinsic variable `_auto_declare' added. If non-zero, + any undefined global variable will be given static scope. +14. __uninitialize intrinsic function added. +15. listdir was returning NULL on empty directories. It has been + changed to return String_Type[0]. It will return NULL upon error. +16. slang.h: if __unix is defined, then also define __unix__ (Albert + Chin-A-Young <china@thewrittenword.com>). +17. foreach using extended to File_Type objects. See documentation. +18. Tweak to the inner-product operator such that if A is a vector, + and B is a 2-d matrix, then A will be regarded as a 2-d matrix + with 1 column. + +Changes since 1.3.7 +0. configure script updated to autoconf 2.13. If /usr/include/slang.h + exists, then the default prefix will be set to /usr. +1. Compile error fixed if _SLANG_HAS_DEBUG_CODE is 0. +2. Bug fix involving typecast(Array_Type, Any_Type). +3. __IBMC__ patches from Eddie Penninkhof <wizball@xs4all.nl>. +4. If A = Assoc_Type[] (Any_Type array), then A[x] automatically + dereferences the Any_Type object. +5. Bug fixed involving Assoc_Type optimization cache. +6. Tweaks to SLtt_smart_puts for improved performace. +7. array_map modifed such that the first array in its argument list + controls the number of elements in the output array. This is a + backward compatible change and makes the function more flexible. +8. Additional tweaks to speedup array inary functions if + _SLANG_OPTIMIZE_FOR_SPEED > 1. +9. Patch from Thomas Henlich <henlich@mmers1.mw.tu-dresden.de> fixing + a problem with the `SLang_define_case' function, which allows + customization of the upper/lower case tables. +10. strtrans and str_delete_chars intrinsic functions added. +11. tweaks to interpreter for some additional speed. + +Changes since 1.3.6 +1. Added a modified version of a patch from Martynas Kunigelis + <martynas@diskena.dammit.lt> to allow writes to the lower left + corner. +2. SIZEOF_LONG changed to 4 for VMS alpha systems (Jouk Jansen + <joukj@hrem.stm.tudelft.nl>). +3. MSC patches from gustav@morpheus.demon.co.uk (Paul Moore). He also + contributed code for listdir with MSC. +4. SLsmg.c: Background color erase tweaks for terminals that lack this + capability. +5. Fixed a NULL pointer dereference when doing Struct_Type[2][0]. +6. Added slsh/scripts/ls and slsh/scripts/badlinks. `ls' is designed + for non-Unix systems and `badlinks' finds all symbolic links in + specified directories that point to non-existent files. +7. SLang_Version_String and intrinsic variable _slang_version_string + added. +8. stat_file modified under win32 such that a trailing `\' is stripped + if present. +9. stat_is intrinsic modified to return a character instead of an + integer. +10. The matrix-multiplication operator `#' now performs inner-products + on arrays, e.g., if A and B arrays: + A = A_i..jk + B = B_kl..m + Then, (A#B)_i..jl..m = A_i..jk B_kl..m where k is summed over. + This means that `#' is a matrix multiplication operator for 2-d + arrays, and acts as a dot-product operator for 1-d arrays. + In the process, it has been extended to complex numbers. + +11. _reshape intrinsic function added. Unlike `reshape', this + function creates a new array and returns it. +12. Array indexing via characters works again, e.g., A['a']. + +Changes since 1.2.2 +0. New assignment operators: *= /= &= |= + The addition of these operators meant that some of the internal + byte-codes had to be modified. This change should only cause + problems with byte-compiled or preprocessed .sl files. As far as I + know, only the JED editors uses this feature. So, after upgrading + the library, and before running JED, do the equivalent of + + rm $JED_ROOT/lib/*.slc + + That is, delete the byte-compiled .slc files. + +1. Now the language supports `!if ... else' statements. +2. New intrinsics: + + __is_initialized: This may be used to see whether or + not a variable is initialized, e.g, __is_initialized (&variable); + __get_reference: Returns a reference to an object with a + specified name. + rmdir, rename, remove (slfile.c): these return 0 upon success, -1 upon + failure and set errno + getpid, getgid, getppid (slunix.c) + _typeof: This is similar to `typeof' except in the case of + arrays where it returns the data type of the array + __pop_args, __push_args: see documentation + fseek, ftell, and symbolic constants SEEK_END, SEEK_CUR, SEEK_SET + sleep + usage + +3. `Conj' function added to get the complex conjugate +4. New array module that implementes additional array functions, e.g., + transpose, matrix multiplication, etc... Use `SLang_init_array' to + initialize. +5. An array such as [[1,2,3],[4,5,6]] is interpreted as a 2-row + 3-column array. +6. Amiga patches from Jörg Strohmayer <j_s@gmx.de>. +7. New table types: + + SLang_IConstant_Type + SLang_DConstant_Type + + These are useful for defining symbolic constants. See slmath.c and + slfile.c for examples of their use. + +8. A new pseudo-function: __tmp + This `function' takes a single argument, a variable, and returns + the value of the variable, and then undefines the variable. For + example, + + variable x = 3; + variable y; + y = __tmp(x); + + will result in `y' having a value of `3' and `x' will be undefined. + The purpose of this pseudo-function is to free any memory + associated with a variable if that variable is going to be + re-assigned. For example, consider: + + variable x = [1:10:0.1]; + x = 3*x^2 + 2; + + At the time of the re-assignment of `x' in the last statement, two + arrays will exist. However, + + x = 3*__tmp(x)^2 + 2; + + results in only one array at the time of the assignment, because + the original array associated with `x' will have been deleted. This + function is a pseudo-function because a syntax error results if + used like + + __tmp (sin(x)); + +9. New low-level push/pop functions that are designed specifically + for use in constructing the push/pop methods of application + defined data types. These functions have names of the form: + + SLclass_push_*_obj + SLclass_pop_*_obj + + where * represents int, long, char, short, ptr, double, float. + See sltypes.c to see how they are used by, e.g., SLANG_INT_TYPE. + +10. New module import facility. See modules subdirectory for + examples. To enable this, use + + SLang_init_module + + in you application. Modules will be searched in the following order + + 1. Along the path specified by the `set_import_module_path' + function, or by the C functiion SLang_set_module_load_path. + 2. Along the path given by the SLANG_MODULE_PATH environment + variable. + 3. Along a system dependent path, e.g., LD_LIBRARY_PATH + 4. In the current directory. + + New interpreter intrinsics include: + + import (String_Type MODULE_NAME); + set_import_module_path (String_Type PATH); + String_Type get_import_module_path (); + +11. New integer and floating point types added to the language. Now + all basic C signed and unsigned integer types are supported: + + C bindings S-Lang bindings + --------------------------------------- + SLANG_CHAR_TYPE Char_Type + SLANG_UCHAR_TYPE UChar_Type + SLANG_SHORT_TYPE Short_Type + SLANG_USHORT_TYPE UShort_Type + SLANG_INT_TYPE Int_Type + SLANG_UINT_TYPE UInt_Type + SLANG_LONG_TYPE Long_Type + SLANG_ULONG_TYPE ULong_Type + SLANG_FLOAT_TYPE Float_Type + SLANG_DOUBLE_TYPE Double_Type + + For example, `Long_Type[10]' creates an array of 10 longs. + +12. New intrinsic: set_struct_field. See function reference for more + info. + +----- snapshot slang1.3_981030 made available ----- + +13. Type synonyms added: + + Int16_Type, UInt16_Type (16 bit (un)signed integer) + Int32_Type, UInt32_Type (32 bit (un)signed integer) + Int64_Type, UInt64_Type (64 bit (un)signed integer) + Float32_Type (32 bit float) + Float64_Type (64 bit float) + + Not all systems support 64 bit integers. These synonyms are + useful when one needs integers and floats of a definite size. + +14. array_sort changed to use qsort. The main reason for this is that + the previous sorting method was derived from a numerical recipes + merge sort. + +15. New namespace manipulation functions available. When a function + or variable is declared as `static', it is placed in the private + namespace associated with the object being parsed (a file). By + default, there is no way of getting at that function or variable + from outside the the file. However, the private namespace may be + given a name via the `implements' function: + + implements ("A"); + + Then the private variables and functions of the namespace A may be + accessed via A->variable_name or A->function_name. The default + global namespace is called `Global'. For example, the intrinsic + function `message' is defined in the global namespace. One may + use either of the following forms to access it: + + message ("hello"); + Global->message ("hello"); + +----- snapshot slang1.3_981104 made available ----- + +16. New intrinsics: + + strtok (See documentation) + length (Get the length of an object) + +17. New data type added: Any_Type. An array of such a type is capable + of holding any object, e.g., + + a = Any_Type [3]; + a[0] = 1; a[1] = "string"; a[2] = (1 + 2i); + + Dereferencing an Any_Type object returns the actual object. That + is, @a[1] produces "string". + +18. Associative arrays added. See documentation. +19. New `foreach' statement. See the section on `foreach' in + doc/text/slang.txt as well as the examples in examples/assoc.sl + and src/calc.sl. +20. Oops. sign function was broken. +21. array_sort modified to also accept &function_name. + +----- snapshot slang1.3_981116 made available (1.3.4) ----- + +22. Before, it was necessary for the aplication to to call + SLang_init_slassoc to enable associative array support. This is + nolonger necessary if associative array support is enabled in + sl-feat.h. + +23. Examples in the documentation modified to use foreach whenever a + simplification occurred. + +24. Max screen size for 32 bit systems inclreased to 256 rows. + +25. `private' keyword added to prevent access to an object via the + namespace. This works exactly like `static' except that `static' + objects may be accessed via the namespace. + +26. structure access methods now available for application defined + types (cl_sput, cl_sget). Also, note that array access methods + are also available. See slassoc.c for examples. + +27. If x is a string, then x[[a:b]] produces a string composed of the + characters x[a], ... x[b]. + +29. New intrinsics: + + listdir: This returns the filenames in a specified + directory as an array of strings. + +30. Source code for intrinsic functions reorganized in a more coherent + fashion. In particular, SLang_init_slfile and SLang_init_slunix + are obsolete (though still available) and applications should call + a combination of the new functions: + + SLang_init_stdio() /* fgets, fopen, ... */ + SLang_init_posix_process () /* getpid, kill, ... */ + SLang_init_posix_dir () /* mkdir, stat, ... */ + + Note that `unix_kill' has been replaced by `kill'. So, if you use + unix_kill in your application, change it to `kill'. + +31. It is now safe to redefine an object while executing the object, + e.g., this is now ok: + + define f(x) { eval ("define f(x) { return x; }"); } + +32. Binary strings added. This means that it is now possible to use + strings with embedded null characters. Too fully exploit this new + feature, `fread' and `fwrite' functions were added to the stdio + module. In addition `pack', `unpack', `sizeof_pack', + `pad_pack_format' were added for converting between binary strings + and other data types. See Stdio chapter of the documentation for + more information. + +33. New structure intrinsic: set_struct_fields. This is useful for + setting the fields of a structure without doing each one + individually. + +34. Interpreter now understands __FILE__ and __LINE__ as referring to + the file name and line number of the object being parsed. + +35. New intrinsic: array_map. This applies a function to each element + of an array and returns the result as an array. + +36. The documentation for the intrinsic functions has been updated and + organized into a more coherent form. + +37. New interface to C structures. See the documentation. + +38. Modifications to the interpreter integer types so that short and + int are equivalent whenever sizeof(short)==sizeof(int). Ditto for + int and long. This reduces the code size. + +39. NULL is equivalent to 0 in while and if statements, e.g., + + x = NULL; + if (x) { never_executed (); } + while (x) { never_executed (); } + +40. `public' made a keyword to for symmetry with `private' and + `static', e.g., + + public define a_public_function (); + public variable a_public_variable; + +41. semantics of `implements' modified such that the default variable + and function declarations are `static', i.e., + + define xxx (); % ==> public function + implements ("foo"); + define yyy (); % ==> static function + +42. Patch from Martynas Kunigelis <kunimart@pit.ktu.lt> adding more + line and symbol drawing characters. Also a patch from + k-yosino@inatori.netsweb.ne.jp forcing a flush when disabling + use of the terminal's status line. + +--- Version 1.3.5 released --- + +43. Corrected the name of SLang_(sg)et_array_element to be consistent + with the documentation. + +44. Fixed a bug involving orelse and andelse statements when + _debug_info is non-zero. + +45. The _apropos intrinsic modified to work with namespaces. In fact, + it now returns an array of matches, or if called with out a + namespace argument, it returns values to the stack for backward + compatibility. + +46. strchop and strchopr functions modified to return arrays. (this + changes was actually made in 1.3.5). + +47. Semantics of strcompress modified to be more useful. The new + semantics are probably more natural and should pose no + compatibility problems. + +48. The `*' operator may be used in array index expressions and is + equivalent to `[:]', e.g., a[*,1] means all elements in column 1 + of the 2d array. + +49. New intrinsics to convert bstrings <--> arrays: + + bstring_to_array + array_to_bstring + +50. New timing intrinsics: tic(); toc(); times (); Also, unix_ctime + renamed to ctime (This change occurred in 1.3.5). + +51. strcat modified to accept more than 2 arguments: + + strcat ("a", "b", ..., "c") ==> "ab...c"; + +52. %S in format specifiers will convert the object to its string + representation and use it as %s. + +53. strtok defaults to using " \t\r\n\f" if called with one argument. + +54. fgetslines takes optional second argument that specifies the + number of lines to read. + +55. If typeof(A) is IStruct_Type, and the corresponding C pointer is + NULL, then pushing A will result in pushing NULL. This allows A + to be compared to NULL. + +56. More optimization of arithmetic operations to improve speed. My + tests indicate that the resulting code involving arithmetic + operations are about twice as fast as python (1.5) and about 20% + faster than perl 5. + +57. Patches from Andreas Kraft <kraft@fokus.gmd.de> disabling the + listdir intrinsic function if compiled with MSC. Apparantly, the + MSC compiler does not support posix functions such as opendir + (although other vendors, e.g, Borland, have no problem with this). + +58. `array_sort' intrinsic may be used without a comparison function. + See docs. + +59. Spelling errors in slang.tm corrected by Uichi Katsuta + <katsuta@cced.mt.nec.co.jp> (Thanks!). + +60. Default install prefix changed from /usr to /usr/local + +61. Changes made to SLtt/SLsmg code so that when a color definition is + made via, e.g., SLtt_set_color, then the SLsmg interface will be + get automatcally notified so that the next SLsmg_refresh will + produce the correct colors. In addition, SLsmg_touch_screen added. + +62. It is now possible to evaluate S-Lang expressions with the + S-Lang preprocessor e.g., + + #ifeval (_slang_version > 9900) || (x == 1) + +63. sl-feat.h: Patch from Jörg Strohmayer <j_s@gmx.de> to define + _SLANG_MAP_VTXX_8BIT=1 for AMIGA. + +64. New intrinsics: + strjoin. This joins elements of a string array. + localtime, gmtime + +65. New SLsmg function: SLsmg_reinit_smg. Instead of calling + SLsmg_reset_smg followed immediately by SLsmg_init_smg when + processing SIGWINCH signals, call SLsmg_init_smg instead. This + will allow SLsmg based code to properly redraw themselves when + running in a SunOS cmdtool window by working around a bug in + cmdtool. + +=========================================================================== + +Changes since 1.2.1 + 1. slcmd.c was not parsing characters in single quotes correctly, + e.g., 'a'. + +Changes since 1.2.0 + 1. Oops. A NULL pointer could be referenced in slcmd.c. + +Changes since 1.0.3 beta + +-1. The SLKeyMap_List_Type structure has been modified to allow the + name of the keymap be be an arbitrary length. Unfortunately, this + change breaks backward compatibility. So, if you have programs + ^^^^^^^^^^^^^^^^^^^^ + that are dynamically linked to previous BETA versions of 1.0, you + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + will have to recompile those applications!!! + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +0. The variable SLsmg_Newline_Moves has been renamed to + SLsmg_Newline_Behavior with the following interpretation: +#define SLSMG_NEWLINE_IGNORED 0 /* default */ +#define SLSMG_NEWLINE_MOVES 1 /* moves to next line, column 0 */ +#define SLSMG_NEWLINE_SCROLLS 2 /* moves but scrolls at bottom of screen */ +#define SLSMG_NEWLINE_PRINTABLE 3 /* prints as ^J */ + +1. Added patches from Joao Luis Fonseca <joaolf@centroin.com.br> + to src/mkfiles/makefile.all and a necessary OS/2 specific + declaration to slvideo.c. I also added the Watcom patches from + Bill McCarthy <WJMc@pobox.com> to makefile.all. +2. The terminfo code is now aware of the complete set of terminfo + definitions. However, the screen management routines support a + small subset. (Eric W. Biederman <ebiederm+eric@npwt.net>). +3. Improvements to the SLsmg scrolling alogorithm. +4. SLang_process_keystring and SLang_make_keystring now return NULL upon + failure. +5. SLcomplex_sqrt branch cut modifed to be consistent with FORTRAN. +6. If the system supports vsnprintf and snprintf, they are used. The + assumption is that they return EOF upon failure. My linux man page + for these functions have conflicting statements regarding this. + +7. Simplified handling of memory managed types. Now it is possible to + pass the managed object directly to the intrinsic function. See + slfile.c for an explicit example of this technique. Similarly, + references may also be passed and the function SLang_assign_to_ref + may be used to assign values to the referenced object. This is + also illustrated in slfile.c. + +8. QNX specific tweak to slfile.c from Pavanas Abludo Incusus + <pavanas@ccia.com>. + +9. Fixed a problem where, e.g., + + x = Double_Type [7,8,9]; + y = x[0,[:],[:]]; + + returned y = Double_Type[8*9] instead of the more intuitive result + Double_Type[8,9]; + +10. SLcmd_Cmd_Table_Type structure changed to permit an unlimited + number of arguments. The changed should be backward compatible + except that a recompilation of the application will be necessary. +11. New SLsmg function: SLsmg_set_color_in_region may be used to set + the color of a specified region. See demo/smgtest.c for an + example of how this is used. Another use would be to draw shadows + around a box. +12. OS2 ICC patches from Eddie Penninkhof <eddie.penninkhof@tip.nl>. +13. Grammar tweaked to make the pow (^) operator postfix-unary. This + makes more sense mathematically so that: + + a^b^c ==> a^(b^c); + -(a)^b ==> -(a^b); + +14. New struct specific intrinsics: + + get_struct_field_names + get_struct_field_value + _push_struct_field_values + + See function reference for more information on these. + +Changes since 1.0.2 beta +0. SLtt_init_video, SLtt_reset_video, SLsmg_resume_smg, + SLsmg_suspend_smg have been modifed to return 0 upon success, or -1 + upon error. +1. Configure script modified to report slang version as 1.0.x instead + of 1.0.0x. +2. Bug fix involving automatic detection of color (Unix) +3. slvideo.c bug fixed (WIN32, Thanks Chin Huang <cthuang@vex.net>) +4. Slsignal modified so that fork is not used for CYGWIN32, suggested + by vischne@ibm.net. +5. Solaris ELF patches integrated into configure.in. Now ELF support + is available for Linux and Solaris. Thanks Jan Hlavacek + <lahvak@math.ohio-state.edu>. +6. The library now works with MING32 and should work with CYGWIN as + well. See INSTALL.pc and src/mkfiles/README for more information. + Do NOT use the configure script under these environments. +7. A new IBMPC_SYSTEM function added that affects WIN32, MSDOS, and + OS/2 systems: + + SLang_getkey_map_to_ansi (int enable); + + If `enable' is non-zero, arrow and function keys will be mapped to + the ansi equivalents. +8. The WIN32 terminal support has been modified to be more consistent with + the other platforms. In particular, mouse button press reporting + has been added (SLtt_set_mouse_mode), and bright color support + appears to have been fixed. Note: For MINGW32 and CYGWIN32, use + src/mkfiles/makefile.all. Do not use the Unix configure script + because WIN32 is NOT Unix. +9. Several changes to slvideo.c that deals with the proper use of the + scroll region for DOS/Windows type systems. +10. demo/smgtest.c has been enhanced. +11. Some cleanup performed to src/slprepr.c +12. WIN32 and WIN16 preprocessing symbols are defined when appropriate. + + +Changes since 1.0.1 beta +1. More VMS patches. Thanks Andy. + +Changes since 1.0.0 beta +1. Fixed a bug in the automatic detection of color terminal +2. Patches to get it to compile on OS2 and VMS +3. Replaced \r\n in slarray.c with \n + +Changes since 0.99-38 +0. Many, many changes to the interpreter. See documentation. + +1. SLang_free_intrinsic_user_object shortened via define on VMS. +2. Make sure slang.h does not defined REAL_UNIX_SYSTEM on OS/2. +3. New search paths for termin directories include $HOME/.terminfo and + /usr/share/terminfo. +4. SLsystem function added. This is a replacement for `system'. It + implements POSIX semantics for POSIX systems. Although Linux + claims to be a POSIX system, it's `system' routine is broken. +5. color names color0 ... color7, brightcolor0, ... brightcolor7 + added for Unix and VMS systems. + +Changes since 0.99-37 +1. SLang_input_pending returns -1 if Ctrl-Break pressed (DOS specific). +2. SLtty_VMS_Ctrl_Y_Hook added for Ctrl-Y trapping. Keep in mind that + this is called from an AST. +3. Documentation updates +4. Fixed bug dealing with keymaps with escape sequences involving + characters with the high bit set. +5. slkeypad code ported to DOS +6. SLsmg_write_raw and SLsmg_read_raw functions added. +7. Compilation error under QNX fixed. +9. Small change involving SLang_flush_input. + + +Changes since 0.99-36 +1. Oops fixed a bug in alternate character set handling when + SLtt_Use_Blink_For_ACS is set. This bug only affected DOSEMU. +2. slvideo.c modification that affects DJGPP version of library. Now + the screen is saved and restored. +3. Updates to slcurses.c by Michael Elkins. +4. If a color called `default' is specified, the escape sequence to + set the default color will be sent. Be careful, not all terminals + support this feature. If your terminal supports it, e.g., rxvt, + then using + + setenv COLORFGBG default + + is a good choice. + +Changes since 0.99-35 +1. Fixed alt char set bug introduced in 0.99-35. +2. New intrinsic: _stk_reverse +3. New demos: keypad, smgtest, pager +4. The environment variable COLORFGBG may be used to specify default + foreground background colors, e.g., in csh use: + + setenv COLORFGBG "white;black" + + to specify white on black as the default colors. This also means + that a color name of NULL or the empty string "" will get mapped to + the default color. +5. Improved curses emulation provided by Michael Elkins + (me@muddcs.cs.hmc.edu). +6. Small bug fix to SLang_flush_output provided by Balakrishnan k + <MDSAAA27@giasmd01.vsnl.net.in>. +7. Updated some documentation in doc/cslang.tex (Gasp). +8. Update vmsmake.com file provided by Martin P.J. Zinser + (m.zinser@gsi.de). + +Changes since 0.99-34 +0. OS/2 video problem solved by Rob Biggar (rb14@cornell.edu). + +1. The way the interpreter internally handles strings has changed. + This should not affect programs which utilize the library. Now all + strings returned by the function SLang_pop_string should be freed + after use. The SLang_pop_string function will always set the value + of the second parameter passed to it to a non-zero value. For this + reason, programs should use the new function SLpop_string and + always free the string returned by it after use. + +2. If SL_RLINE_NO_ECHO bit is set in the readline structure, the + user response will not be echoed. + +3. If terminal is xterm, the TERMCAP environment variable will be + ignored. This change was necessary because of the braindead + TERMCAP setting created by the latest version xterm. + +4. Some of the keymap routines were re-coded. Now it is possible to + have lowercase characters as part of the prefix character sequence. + +5. New modules. See demo/pager.c for information. See also the slrn + source code for a more sophisticated use. + + SLscroll: may be useful for routines that deal with displaying + linked lists of lines. + SLsignal: POSIX signal interface for programs that use SLsmg and + SLtt modules. doc/signal.txt may also prove useful. + SLkeypad: Simplified interface to SLang keymaps. + SLerrno: System independ errno routines + +Changes since 0.99-33 +1. A couple of interpreter bug fixes. + +2. Some macros, e.g., MEMSET, removed from slang.h. I do not feel + that they belong there and it is unlikely that they are used by + others. I made them avalable in the file src/jdmacros.h for anyone + whose code depends on them. + +3. The functions jed_mem??? have been renamed to SLmem???. + +4. New intrinsic: _obj_type returns type information about object on top + of stack. + +Changes since 0.99-32 +1. appropriate header files added for VMS +2. Oops. 0.99-32 introduced a bug positioning cursor. :( + +Changes since 0.99-31 +1. Simple minded curses emulation added. This should help those migrating + from curses. See slang/src/curses/*.c for sample curses demo programs + that the SLsmg routines can handle. See also slang/src/slcurses.c for + some wrapper functions. +2. Changed <config.h> to "config.h" in all source files. +3. If system lacks terminfo directories, it is compiled with termcap + support. This generalizes and replaces the test for NeXT. +4. New functions for slang/src/sldisply.c: + + void SLtt_get_screen_size (void); + SLtt_Char_Type SLtt_get_color_object (int); + void SLtt_set_color_fgbg (int, SLtt_Char_Type, SLtt_Char_Type); + + The first function attempts to deduce the correct values of + SLtt_Screen_Rows and SLtt_Screen_Cols. This function is called by + sltt_get_terminfo. + + New constants such as SLSMG_COLOR_BLACK, SLSMG_COLOR_RED, ... have been + added to slang.h to facilitate the use of SLtt_set_color_fgbg. + +5. Improved error messages +6. ELF support. Do: make elf; make install-elf + +Changes since 0.99.30 + +1. Small bug fixed that affects 64 bit machines with a certain byte + ordering. +2. slutty.c: _POSIX_VDISABLE is used if defined. + +Changes since 0.99.29 + +0. BIG change in handling keymaps. Specifically, this change effects the + change of the `f' field of the SLang_Key_Type structure. Before, this + was VOID_STAR, now it is a union. The new change is much more portable. + In addition, the function `SLang_define_key1' has been removed and + replaced by `SLkm_define_key'. See src/slrline.c for the use of this new + interface. For a short time, the old interface will be available if the + preprocessor symbol `SLKEYMAP_OBSOLETE' is defined when slang is compiled. + See jed and slrn source for more examples. + +1. SLang_getkey now reads from /dev/tty (unix). +2. If the first argument to SLang_init_tty is -1, the current value of the + interrupt character will not be changed (unix). +3. New intrinsic: time +Changes since 0.99.28 +1. Oops! Horrible bug in src/slmemcmp fixed. +2. slvideo: init_video modified to be more consistent with VMS/Unix routine. + +Changes since 0.99.27 +1. More changes to the configure script +2. It looks like hpterm support is in place. This terminal has a glitch + that prevents efficient screen updating. +3. New SLsmg function: + + void SLsmg_write_color_chars (unsigned short *s, unsigned int len) + + This function may be used to write a string of characters with + attributes. + +Changes since 0.99.26 +1. Slang now uses a configure script under Unix to configure itself. +2. New intrinsic functions include _stk_roll, strchop, strchopr. +3. Terminals which require an escape sequence to make their arrow keys work + are now sent the escape sequence. + +Changes since 0.99.25 +1. New SLsmg variables: + SLsmg_Newline_Moves + SLsmg_Backspace_Moves + These variables control the interpretation of newline and backspace + characters in smg. + +Changes since 0.99.24 +1. SLSMG_RTEE_CHAR, etc... added to OS/2 part of slang.h +2. Small fix for aix-term + +Changes since 0.99.23 +0. The makefile for unix has been completely re-written. +1. Some problems dealing with certain color terminals have been resolved. +2. `g' generic type added to SLcmd. + +Changes since 0.99.22 +0. The Macro `VOID' has been removed. The whole point of this macro was to + mimick `void *' declarations for compilers that did not support such a + construct. Instead of `VOID *', slang.h now defines `VOID_STAR' and all + `VOID *' declarations have been renamed to `VOID_STAR'. + + If you use the VOID macro in your application, you have two choices: + + 1. Rename all occurances of VOID * to VOID_STAR + 2. Add: #define VOID void somewhere appropriate. + +1. \< and \> regular expressions added. + +Changes since 0.99.21 +1. Oops. I added too much linux stuff (see 3 below). Some of it backed + out to Linux only. + +Changes since 0.99.20 +1. Problem on some VMS systems which lack prototype for atof fixed. +2. New function: SLtt_set_mouse_mode. This is used to turn on/off mouse + reporting on Unix and VMS systems. +3. The terminal type `linux' is now recognized by the SLtt interface--- + even if there is no termcap/terminfo entry for it. + +Changes since 0.99.19 +1. User definable types must now have object identification numbers larger + than 127. The lower limit used to be 100 but this comflicts with many + applications (as well as slang itself) using lower case letters as the + object number, e.g., create_array ('s', 10, 1); which creates an array + of 10 strings (object number 's' = 115). + +2. New intrinsic: array_info available. +3. regular expression matching bug involving \{m,n\} expressions fixed. +4. New module: slprepr.c. This gives programs the ability to use the slang + preprocessor. +5. News slsmg functions: SLsmg_suspend_smg () and SLsmg_resume_smg (). + These are designed to be used before and after suspension. The SLsmg + state is remembered and a redraw is performed by the resume_smg function. +6. The function `sltty_set_suspend_state' is now available for Unix + systems. It may be used to turn on/off processing of the suspend + character by the terminal driver. +7. If SLtt_Try_Termcap is 0, the TERMCAP variable will not be parsed. +8. SLang_TT_Read_FD variable is now available for unix. This is the file + descriptor used by SLang_getkey. +9. New preprocessor symbols available: + SLMATH : If math functions are available + SLUNIX : If unix system calls are available + SLFILES : Stdio functions available + FLOAT_TYPE : Floating point version + +Changes since 0.99.18 +1. New intrinsic function: strcompress. This collapses a string by removing + repeated characters. For example, + + define collapse (f) + { + while (str_replace (f, " ", ",")) f = (); + return strcompress (f, ","); + } + + collapse (", ,a b c ,,,d e,f "); + + returns: "a,b,c,d,e,f" + +2. QNX support added. +3. New Functions (unix only): SLtt_tgetstr, SLtt_tgetnum, SLtt_tgetflag. +4. Fixed parsing of Octal and Hex numbers so that incorrect values are + flagged as errors. Also, both lower and uppercase values may be used in + HEX numbers, e.g., 0xa == 0XA == 0Xa == 0xA. +5. MS-Windows support added. Compile using makefile.msw. This creates + `wslang.lib'. +6. New SLsmg functions: SLsmg_get_row, SLsmg_get_column. These return the + current position. + +Changes since 0.99.17 +1. I have added limited termcap support although slang is still a terminfo + based system. The support is provided via the TERMCAP environment + variable. If this variable exists and contains a termcap entry for which + there is no reference to another entry (via tc field), it will be used + to setup the terminal. If the TERMCAP variable does not exist, or it + refers to a file, terminfo is used instead. This is not really a + limitation since one can set this variable in a way that slang likes by + using `tset -s'. + + The motivation for this support is two-fold: + a. Slang programs can now run inside the screen program which sets + the TERMCAP variable appropriately. + b. A user can now correct defective termcap entries (e.g., for Linux), + and have those corrections made available to slang via the `tset' + command, e.g., by putting something analogous to: + + setenv TERMCAP /corrected/termcap/file/absolute/path/name + eval `tset -s terminal-name` + + in the .login file. + c. This also means that I can distribute corrected termcap entries for + common terminals. + +Changes since 0.99.16 +1. Inadequate terminfo entries for `linux' terminal are compensated for. +2. Terminals with the ``Magic cookie glitch'' are flagged as having an + unusable highlighting mode. + +changes since 0.99.15 +1. Better checking of parameters passed to search routines. +2. Problem with line drawing characters fixed. + +changes since 0.99.14 +1. Ran code through purify. Fixed one problem reported in slkeymap.c +2. Fixed a bug in sldisply.c regarding mono-attributes. +3. Code ready for ELF +changes since 0.99.13 +1. SLtt_Has_Alt_Charset variable added to xterm.c. This is motivated by the + sad, pathetic fact that although some termcap/terminfo databases suggest + that the terminal can do line drawing characters, the terminal cannot. +2. SLsmg_write_nstring function added. This function may be used to write + only n characters of a string padding wit hblanks if necessary. +3. If the environment variable COLORTERM exist, SLtt_get_terminfo will set + SLtt_Use_Ansi_Colors to 1. +4. Sltt_set_cursor_visibility function added. If passed a zero integer value, + the cursor is hidden; otherwise, it is made visible. + +changes since 0.99.12 +1. SLsmg now uses the `te' and `ti' termcap entries if present. Apparantly + some terminals need to be put in cursor addressing mode. This also has + the effect of restoring the screen of the xterm to what it was before + the program was executed. +2. For some types of code, slang is 20% faster! This is especially + noticeable for branching constructs inside tight loops or recursive + functions. + +changes since 0.99.10 +1. New version control added: + + A new preprocessor symbol was added: SLANG_VERSION + This is a 6 digit integer of the form: abcdef + This corresponds to version number ab.cd.ef. So for version 0.99.11: + #define SLANG_VERSION 9911 + + In addition, the intrinsic variable `SLang_Version' was changed from a + string to an integer that has the value SLANG_VERSION. This also implies + that the interpreter variable _slang_version is now an integer. + +changes since 0.99.9 +1. The terminfo code failed to recognize the automatic margin flag. This + has been corrected. In addition, the display code nolonger resets the + character set upon initialization. This is considered to be a good thing. + +2. There is a new program in slang/doc called `texconv' that will produce a + nicely formatted ascii document from the tex formatted ones. In + addition, new documentation has been added: slang.tex which describes the + syntax of the slang programming language and cslang.tex which describes + the C interface to the library. The latter document is far from complete + but it is a start. + +3. A new variable declaration keyword has beed added: global_variable + This keyword is useful for declaring global variables from within + functions. Such a feature simplifies some scripts. + +4. The SLsmg line drawing functions are now in place. + +changes since 0.99.8 +1. \d may now be used in regular expressions to specify a digit. In addition, + \e specifies an escape character. So for example, `\e\[\d;\dH' matches + an ANSI cursor position escape sequence. +2. Small bug in dealing with terminals that have automatic margins has been + fixed. +3. When compiled with -DSLANG_TERMINFO will use terminfo. This means that + there is no need to link to termcap. + +changes since 0.99.7 +1. New function added to the readline package: + int SLang_rline_insert (char *s); + this may be used to stuff strings into the rline buffer. SLSC exploits + this feature. + +changes since 0.99.6 + +1. ALL macros beginning with LANG have been changed to use SLANG as the + prefix. For example, the macro LANG_IVARIABLE has been renamed to + SLANG_IVARIABLE. If you have used one of these macros, please make the + change. + +2. Application defined types. See demo/complex.c for an example that + defines complex numbers and overloads the binary and unary operators to + work with them. + +changes since 0.99.5 + + +1. New interface for application defined objects. Functions include: + + extern SLuser_Object_Type *SLang_pop_user_object (unsigned char); + extern void SLang_free_user_object (SLuser_Object_Type *); + extern void SLang_push_user_object (SLuser_Object_Type *); + extern SLuser_Object_Type *SLang_create_user_object (unsigned char type); + + + This means that S-Lang scripts do not have to worry about freeing + structures, arrays, etc... A consequence of this fact is that the + intrinsic function `free_array' has been removed. See examples of this + exciting new feature in slang/demo. + +2. Better documentation and examples. See slang/doc/*.* as well as examples + in slang/demo. + +3. Memory allocation macros have changed from MALLOC to SLMALLOC, etc... + Applications are encouraged to use these rather than `malloc' because by + compiling your application AND the slang library with the -DMALLOC_DEBUG + will link in code that checks if you have corrupted memory, freed + something twice, etc... Use the function `SLmalloc_dump_statistics' for + a report of memory consumption by your program. + +changes since 0.99.4 +1. cleaned up the source some and I changed the names of the hooks + user_whatever to `SLang_User_Whatever'. This makes them more consistent + with other external functions and variables and helps avoid name space + pollution. +changes since 0.99.3 +* added screen management stuff +* added a new help file reader (see help directory) +* DOUBLE precision is now the default. I think that this makes more sense + for an interpreted langauge. +* searching routines added. +changes since 0.99.2 +* added low level tty support for VMS, DOS, and Unix +* slang readline added +* keymap support +* files restructured so that programs can link, say, the readline library + and not get the whole interpreter linked in. + +changes since 0.99.1 +* obscure bug in regular expression fixed +* optimizing performed for 10% speed increase in speed for some language + constructs + +changes since 0.99.0 +* semantics of the `switch' statement changed to be more C-like with the + addition of the `case' keyword. For example, one can write: + + switch (ch) + { case 'A': + something (); + } + { + case 'B': + something_else (); + } + { case 3.14: + print ("Almost PI"); + } + { case "hello": + print ("hi"); + } + + Note that one may mix data types without the possibility of a type + mismatch error. + +changes since 0.98: +* matrix package added. Currently only matrix multiplication and addition + is supported. More functions will be added (determinants, inverse, etc..) + This support is provided by the `init_SLmatrix ()' call. This support + provides the following S-Lang intrinsics: + + matrix_multiply, matrix_add + + +* New S-Lang core intrinsic: + + copy_array : copys the contents of one array to another + +changes since 0.97: + +* Double precision floating point supported. + Use the -DFLOAT_TYPE -DUSE_DOUBLE compiler flags to enable this. + Note that S-Lang does not support single precision and double precision + floating point number SIMULTANEOUSLY. You must choose one or the other + and stick with it! + +* Byte compiling is now more than simple preprocessing. This results in + about a 20% decrease in loading time. This also means that if you + rebuild your application, you MUST re-bytecompile. + +* New syntax added: Consider a function f that returns multiple values. + Then to assign these values to, say var_1, and var_2, simply write: + + (var_1, var_2) = f (); + + This is an alternative to: + + f (); =var_2; =var_1; + +Changes since 0.96: + + It is now possible to use short circuit boolean evaluation of logical + expressions is the `orelse' and `andelse' constructs. Previously, these + constructs were only available at the infix level. The new syntax looks + like (example taken from JED's rmail.sl): + + if (orelse + {re_bsearch("^\\CFrom:.*<\\(.+\\)>");} + {re_bsearch("^\\CReply-To: *\\([^ ]+\\) *");} + {re_bsearch("^\\CFrom:.*<\\(.+\\)>");} + {re_bsearch("^\\CFrom: *\\([^ ]+\\) *");} + {re_bsearch("^\\cFrom +\\([^ ]+\\) *");} + ) + { + from = rmail_complex_get_from(from); + } + + + Modified some of the array code to use handles to arrays instead of actual + arrays. This adds alot more protection for the use of arrays. The + downside is that there is a limit on the number of active arrays. This + limit has been set to a default value ot 256. An ``active'' array is an + array that has been created but not freed. + + Fixed a parse error that occurred when an `if' statement imediately follow + the `:' in a switch statement. + + putenv intrinsic added. + + EXIT_BLOCK: if an exit block is declared, it is called just before the + function returns to its caller. + +It is now possible to perform assignments in variable declaration +statements, e.g., + +variable i = 0, imax = 10, n = strlen (name); + +Condition compilation of S-Lang source possible. See .sl files in the jed +distribution. + +A bug which prevent assignment to a global C floating point variable was +fixed. + +Changes to `calc': + + `apropos' function added to calc.sl. For example, `apropos("str")' + creates a list of all intrinsic functions that contain the substring + "str" (strcmp, strcat, etc...) + + Command line arguments are now loaded as S-Lang source files. This makes + it possible to create a Unix executable such as: + + #! /usr/local/bin/calc + + define hello_world () { print ("hello world"); } + loop (10) hello_world (); + quit (); |