Fork 0

4071 lines
194 KiB

-*- mode: text; mode: fold -*-
Changes since 2.3.1a
1. modules/stats_kendall.c: Updated to use Knight's O(NlogN)
algorithm. This update was facilitating by separating out some
integer typedefs from _slang.h and placing them in _slint.h. The
closely relation mann_kendall function was also added to the stats
2. modules/stats_kendall.c: In the prtaus function, the loops were
reorganized loops to eliminate embedded if-tests, and the code that
deals with arrays were made for "C-like".
3. Merged Manfred Hanke's CSV module documentation updates.
4. slsh/lib/cmdopt.sl: The form -fVAL was not working as described for
short-options whose value (VAL) is optional.
5. src/sl*.h: Updated Unicode tables from version 5 to 9
6. src/slischar.h: Previously, if a lower(upper) case character did
not have a mapping to an upper(lower) case character, it was take
to not have a case. This restriction has been dropped. In other
words, it is nolonger necessary for an upper(lower) case character
to have a lower(upper) case equivalent.
7. src/slpack.c: Added an intrinsic function (_array_byteswap) that
may be used to convert the values of an array from one endianness
to another.
8. src/slparse.c: It is now possible to use reserved words as struct
field names without quoting them. For example, it is now possible
to write
s = struct { public = value };
Previously, this required the field name to be quoted:
s = struct { "public" = value };
9. modules/json-module.c: Malformed UTF-8 was not being properly
handled by the json-encoder.
10. modules/csv-module.c: The decode_csv_row function was ignoring the
delimiter setting after a quoted string.
11. src/slparse.c: A for statement lacking a conditional expression
was not being properly handled (noticed by rocket penguin).
12. src/struct.c: Rewrote the __add_binary function, which was not
properly handling multiple data types.
13. changes.txt: Converted to UTF-8 (Miroslav Lichvar)
14. src/slscanf.c: The sscanf function was not parsing ".0" as a
floating poing number (zero).
15. The library was failing to compile when __tmp operator
optimizations were turned off. The default is to permit such
optimizations since they can lead to faster running code and less
memory usage. Bug reported by Henry.
16. src/slsh.c: Updated copyright year.
17. INSTALL.unx: Corrected the URL for the ONIGURUMA regexp library; added
a small note that PCRE2 is not supported (Henry Nelson).
18. modules/csv-module.c: If the delimiter or quote character is
specified to be 0, then use the defaults (, and ").
19. src/sltermin.c: Added support for the new ncurses 32-bit terminfo
database entries.
20. autoconf/aclocal.m4,src/Makefile.in: Install shared objects
(modules and library) with executable permissions.
21. src/sl*.h: Updated Unicode tables from version 9 to 10
22. src/sltermin.c: Corrected a few typos in the comments (Manfred
23. Updated Copyright year to 2018
24. doc updates
25. src/sltermin.c: removed unnecessary "extern" function attribute.
26. src/test/syntax.sl: The version number test required the use of
isalpha and not isascii.
{{{ Previous Versions
Changes since 2.3.1
a. Some tests were failing when compiled with a compiler that defaults
to using `unsigned char'. In the few places where a `signed char'
was assumed, `char' was changed to `signed char'. Also, a
copy-paste error was corrected in the src/test/sltest.c that caused
the test program to fail on big-endian 64 bit systems.
Changes since 2.3.0
1. modules/json-module.c: Fix a possible uninitialized variable error.
2. Define _BSD_SOURCE the few places necessary to get prototypes for
strtoll and BSD specific network struct fields.
3. src/slstd.c: define _SVID_SOURCE to get prototype for putenv
4. modules/Makefile.in: On cygwin, the libraries must be placed last
for module compilation (Marco Atzeri).
5. src/slstrops.c: The return value from pop_lut was not being
checked leading to a segv upon faiure (reported by Morten Bo
6. slsh/lib/slshrl.sl: Floating point literals with a leading '.' were
not being properly handled by slsh_interactive_massage_hook
(Manfred Hanke).
7. src/slarrfun.c: Added wherefirst/last_eq/ne/gt/lt/ge/le functions,
which are much faster than using just wherefirst or wherefast with
the implied binary comparison. For example:
slsh> .load rand
slsh> x = rand_uniform (100000);
slsh> tic; loop (1000) i=wherefirst(x>=0.999); toc; i;
slsh> tic; loop (1000) i=wherefirst_ge(x,0.999); toc; i;
For this case, the speedup about 0.60/0.0024 = 250.
8. Rebuilt text documentation for change #7.
9. Documentation updates (Manfred Hanke).
10. src/slarrfun.inc: use a macro for the common case statements of
the wherefirst_op and wherelast_op code. (Manfred Hanke)
11. modules/stats.sl: Added Anderson-Darling tests:
ad_test: test for normality
ad_ktest: k-sample test
I also broke out some of the statistical tests into separate files.
12. Tweaked the makefiles to create a statically-linked version of
slsh when `make static` and `make install-static` are run.
13. For the static slsh build, disable dynamic linking.
14. src/slstdio.c:fread_bytes: A size_t vs unsigned int issue was
causing SLmalloc to be called with an incorrect size in some cases.
15. src/slbstr.c: Made the size of the printable representation of
binary strings customizable via get/set_printable_bstring_size
16. slsh/slsh.c: A missing continue statement was causing slsh to stop
parsing command line options after the first occurrence of -D.
17. src/slang.h: Remove duplicate prototype for
SLrline_get_update_client_data. (Valdis Kletnieks)
18. src/slposdir.c: Add statvfs intrinsic that wraps corresponding
POSIX function.
19. modules/Makefile.in, png-module.c: Cygwin tweaks
(Marco Atzeri).
20. */*.c: Added explicit (unsigned char) typecast to isspace/isdigit
21. */*.c: reduced the scope of some variables; removed duplicate ||
expression from slarray.c (David Binderman)
22. src/slarray.c: The Kahan error corrections were not be added back
when summing complex arrays.
23. slsh/lib/listfuns.sl: Corrected the usage method for heap_new().
24. Found and corrected a few memory leaks that occur after a malloc
failure; added some more unit tests
25. Added more regression tests and bug fixes:
slscanf.c: %i was failing for Octal and Hex forms
slbstr.c: <, and > operators were swapped for binary strings
histogram-module.c: A missing 'break' statement was causing hist2d
to fail when binning 8 bit integers.
26. src/slposdir.c: If an fdopen'd FILE* object was closed, then do
not close the underlying fd descriptor; added more regression/unit
27. modules/test/test_stats.sl: Do not use 64 bit ints when testing
the mean and stddev functions on 32 bit systems since these
integers are not supported by the functions.
28. modules/stats-module.inc: Some arrays were causing median_nc to
not converge.
29. src/slscanf.c: Allow whitespace in the format to match 0
whitespace characters in the input string.
30. src/slproc.c: define _XOPEN_SOURCE to be 500
31. src/slproc.c: #30 caused a compilation error on macos since it
caused certain rusage fields to not be exposed. Define
_BSD_SOURCE to expose them.
32. src/slerr.c: Add a windows error handler so that windows will
return an error code instead of aborting when passed a bad file
descriptor, etc.
33. src/slproc.c: Use _XOPEN_SOURCE=1 instead of 500. This setting
works for both OSX and Windows. (See #30,31)
34. src/slcurses.h: SLtt_Char_Type and SLcurses_Char_Type were being
used interchangably.
35. src/sldisply.c: Added support for 24 bit color terminals based
upon a patch from Egmont Koblinger forwarded to me by Anton Kochkov.
See NEWS for usage. (for 64 bit systems)
36. src/slposio.c: Rename the posix_close function to avoid conflict
with an upcoming POSIX standard. (patch provided by Thomas
37. slposio.c,slstdio.c,slposdir.c: Do not include <sys/fcntl.h> if
<fcntl.h> was included. (variation on a patch provided by Thomas
38. slsh/: Move processing of the SLSH_PATH environment variable to
slsh.rc. Also, guess the slsh lib path based upon the location of
the executable.
39. modules/onig-module.c: Only allow certain flags for onig_search.
Others cause onig_search to reinterpret the meaning of the region
40. slsh/etc/slsh.rc: Add support for multiple paths to the
*_to_slang_load_path functions.
41. src/slscanf.c: The formats %x and %o were producing a signed values instead
of an unsigned ones.
42. src/slconfig.h,...: Added longlong functions to win32, use
"%I64d/u" format when printing long long on win32.
43. src/slcurses.c: Changed the data type of SLcurses_Char_Type back
to long[128] (change #34 broke backward compatibility)
44. src/slstruct.c: Optional argument to _push_struct_field_values may
be used to specify the fields to be pushed.
45. src/sllimits.h: Bumped up the size of the slsring table. A future
version will dynamically resize the table.
46. src/slstd.c,slstrops.c: Improve the speed of sprintf by reducing
the number of reallocs and special casing strings in the
_pSLstring_intrinsic function.
47. modules/cvs.sl: Reading a CSV file from an open file descriptor
(e.g., stdin) was failing. The updated regression test also
exposed a side effect of change #38: the uninstalled version of
slsh.rc lacks processing of SLSH_PATH. Processing of SLSH_PATH
was added to the test.sl include file.
48. src/slregexp.c: The RE \d? was not handled properly.
49. src/slmisc.c: Catch empty hex \x and decimal \d escape sequences.
50. autoconf/Makefile.in: Add install-pkgconfig to the install-static
target. (Max Filippov).
51. src/test/signal.sl: Skip the sigsuspend test when running from
make. The test involves the user pressing ^C, which kills the
make process. This test should be run outside of make.
52. src/slmisc.c: Corrected a typo in the error message introduced in
change #49 (Manfred Hanke).
53. src/sltime.c: Added _ftime, which returns the number of
(wallclock) seconds since an epoch.
54. Changes the array allocation routines to use a signed integer
(SLindex_Type) vs an unsigned one (SLuindex_Type). The reason for
this is that all slang arrays may be indexed from the end using a
negative index, and multidemsional arrays must allow indexing
using a single signed index, e.g.,
a = Int_Type[10,20]; ...; a[where(a<0)] = 0;
55. src/sltime.c: Fixed a windows compile error involving _ftime
(see change #53).
56. src/slnspace.c,...: Check for malformed namepace names.
57. doc/tm/: Documentation updates (Agathoklis D. Chatzimanikas)
58. slsh/slsh.c: Added __slsh_startup_hook function that slsh will
call after loading slsh.rc.
59. modules/: Updated the png and pcre modules, and added new test
scripts. Added support for setting the compression value to the
png module, and added additional symbolic constants to the pcre
60. slsh/lib/test/: Have `make check` run the test scripts in this
61. modules/csv-module.c: Added line number information to error
62. src/test/: Updated some tests
63. src/sltoken.c: bug fix affecting reading byte-compiled files: Use
SLatoul for unsigned longs instead of atol; remove alignment test
from pack.sl until a new test can be devised.
64. Added support for compiling against slsyswrap testing library.
It is disabled for production code.
65. Bug fixes:
src/slarrfun.c: SLang_duplicate_array return value not checked;
src/slstdio.c: SLfree was used in an error handler instead of
src/slposio.c: If EINTR happens in the close function, do not
restart it. See <http://lwn.net/Articles/576478/>.
src/sltoken.c: Use unsigned char * cast for SLatol functions.
66. src/slmisc.c: \uABCD supported in string literals. Previously,
braces were required (\u{ABCD}).
67. Updated many of the unit tests/regression scripts.
68. Updated more tests. Made use of the _slang.h LONG_IS_INT macro to
eliminate some unused functions on systems where
69. modules/slsmg-module.c: was not compiling on windows; fixed a
malformed comment in src/test/sltest.c.
70. Added "#define _DEFAULT_SOURCE" to a few places to quiet gcc;
Added slsyswrap support to src/slposdir.c,slposio.c,slcommon.c
71. src/slexcept.c: The deprecated _clear_error function using in
ERROR_BLOCKs was not completely removing queued error messages.
Note: ERROR_BLOCKs will be removed in version 3.
72. src/slregexp.c: Added "\{m,n\}" support to '\1'-'\9', '.', and
'\d' REs. '$' changed to match only at the end of a string, or
just before a \n at the end of the string. Updated regexp.sl test.
73. src/slang.c: The delete_interpreter function (called upon program
exit) was not freeing local variables on the function call stack. This
showed up as a memory leak when a function called "exit", which
would not allow the function stack to unroll and trigger the
74. src/*.c: Added a few gcc #pragmas to turn off warnings about
non-string literals as printf-style formats.
75. src/*.c, modules/*.c: If close fails with errno=EINTR, do not restart
it. Doing so invokes undefined behavior.
76. src/slerr.c: Add _pSLerr_deinit to the exit hook.
77. src/slarray.c,src/slclass.c,src/slstruct.c: Use the SLclass_set*
functions to set SLang_Class_Type fields instead of directly
accessing them.
78. Added additional unit/regresssion tests.
79. Makefiles: Add a time-stamp dependency to directory targets to
avoid race conditions when running parallel make (Based upon a
patch from Kylie McClain).
80. src/Makefile.in: Updated the libslang.a dependency to account for
change #79.
81. tweaked a few files (modules/png-module.c,src/slarith.inc,src/slimport.c)
to reduce gcc warnings.
82. modules/test/test_slsmg.sl: Test skipped if the terminal type is
83. Updated copyright years; some doc updates
84. src/sldisply.c: make JMAX_COLORS consistent with SLTT_MAX_COLORS.
85. src/slstrops.c: Added string_to_wchars and wchars_to_string
intrinsic functions.
86. Moved gcc diagnosic pragmas outside function bodies for
compatibility with old versions of gcc.
87. src/slwclut.c: Unclosed ranges (hyphen at the end of a character
set specification string) were not being handled properly: the
character befor the hyphen was being dropped, e.g.,
strcompress ("foo-(bar)", "_()-");
was producing "foo_bar)" instead of "foo_bar".
88. src/sllimits.h: Reduce SLANG_MAX_RECURSIVE_DEPTH to 500 on
CYGWIN/WIN32 to avoid hitting the default runtime stacklimit.
89. Updates to the mingw32/64 build system.
90. src/sltermin.c: Avoid invalid free when TERMCAP is used. See
91. Some documentation typos corrected (Agathoklis D. Hatzimanikas;
debian patches)
92. src/_slang.h: On at least one platform, clang defines GNUC but
does not implement GNU C inline semantics. Disble inline support
for clang if GNUC defined.
93. src/sllimits.h: SLANG_MAX_RECURSIVE_DEPTH set to 1500 to decrease
the probability of running into the C runtime stacksize limit.
94. src/test/sltest.c: A missing preprocessor #else block in change
#78 was causing UTF-8 tests to fail in a non-UTF8 environment.
95. MacOSX changes: fix environ intrinsic, export DYLD_LIBRARY env
variable in test scripts.
96. slsh/lib/process.sl: If execvp fails, include the name of the executable
in the error message.
97. autoconf/config.*: Updated scripts
98. .../runtests.sh: Added LD_LIBRARY_PATH to test scripts (removed in
99. mkfiles/makefile.m32: Use mkfiles\runslsh.bat instead of
mkfiles/runslsh.bat (Windows only).
100. documentation updates
Changes since 2.2.4
1. src/slarray.c: Try to find a suitable multiplier for range arrays
to avoid roundoff errors. Using the multiplier avoids the
[1:10:0.001] from having the element 1.1260000000000001.
2. doc/tm/rtl/strops.tm: Correct typos in string_match documentation
(Manfred Hanke).
3. modules/base64-module.c: Added a base64 encoder module.
4. modules/chksum-module.c: A module to compute md5, sha1, etc
5. Removed a few unused variables from the code.
6. Documentation updates and corrections by Agathoklis D. Hatzimanikas.
7. src/slarray.c: array_map enhanced to handle functions that return
multiple values (based upon a patch from Manfred Hanke).
8. Documentation tweaks (Manfred Hanke).
9. src/slmath.c: Added sincos intrinsic (Manfred Hanke)
10. doc/tm/rtl/array.tm: Changed an example used in the array_map
11. More documentation updates/corrections (Agathoklis D. Hatzimanikas).
12. src/slarray.c: Tweaked the code that computes the
array-range-multiplier to avoid agressive optimization by the
13. modules/rand.sl: The rand_int function was not working correctly
(Thomas Dauser).
14. modules/test/test_rand.sl: Added a simple statistical test for
rand_int (based upon an idea by Thomas Dauser).
15. modules/test/test_rand.sl: Corrected a typo introduced by #14.
16. src/slarray.c: #12 introduced a truncation error for some
values involving the range multiplier.
17. autoconf/aclocal.m4: Change ncurses5w-config to ncursesw5-config
(Gilles Espinasse).
18. modules/base64-module.c: Added decoder.
19. slsh/lib/sldbcore.sl: Only run the debugger from the pid that
started it. This avoids problems debugging scripts that call fork.
20. src/slrline.c: SLrline_read_line will return NULL if getkey
21. doc/tm/rtl/*.tm: A few typos corrected (Manfred Hanke).
22. slsh/lib/print.sl; print binary strings differently from regular
ones (Manfred Hanke).
23. slsh/lib/print.sl: I introduced a typo in #21 (Pablo Cassatella).
24. src/slutty.c: if the flow control parameter to the SLang_init_tty
argument is negative, the terminal's flow control handling will
not be changed.
25. src/slrline.c: Ammend #20 to return NULL if errno != EINTR.
26. src/sldisply.c: Changed Termcap_Initalized -> Termcap_Initialized
27. src/slarray.c: avoid an expensive memcpy when doing
an aget via an index array on a (b)string. (Paul Boekholt).
28. slsh/scripts/badlinks: Updated to use array_map and cmdopt
(Agathoklis D. Hatzimanikas).
29. Some minor documentation tweaks (Agathoklis D. Hatzimanikas)
30. More doc tweaks (Agathoklis D. Hatzimanikas)
31. src/slposio.c: lseek was not working properly.
32. slsh/scripts/badlinks: Changed from GPLv3 to GPLv2 with permission
from Agathoklis Hatzimanikas.
33. src/slscanf.c: Call strtod in a locale where the decimal point is
".". This works around problems associated with modules that
change the locale.
34. src/slscanf.c: include <xlocale.h> if available.
35. src/slscanf.c: Avoid the use of setlocale and simply copy the
locale's decimal point before calling strtod (Paul Boekholt).
36. modules/socket-module.c: NULL was being returned when accept was
called with a single argument (Fixes bug reported by Arik
37. src/slwclut.c: A logic error was causing strtrans to function
improperly for some UTF-8 encoded strings.
38. src/fork-module.c: If WCONTINUED is not defined, define it to be 0
(from debian patch).
39. src/slbstr.c: Added support for an optional offset parameter to
40. modules/csv.sl: Allow the "names" qualifier to be a list in
addition to an array.
41. *.c/*.h: provide a path for a future change in the
return value of the malloc/free functions. Now they process char*
pointers but this will be changed to void* in the future.
42. modules/: Merged stats and histogram modules into the distribution.
43. modules/stats-module.c: removed a couple of unused variables.
Also modules/test/test_*.sl updated to use modules in the $(ARCH)objs
44. src/slang.c: Local_Variable_Stack is now dynamically allocated,
and the value of SLANG_MAX_LOCAL_STACK made to scale with
45. modules/cmaps/: Added 3 perceptually balanced color maps derived
from matlab code by Matteo Niccoli under the BSD license.
46. src/slmath.c: Use _pSLang_peek_at_stack2 instead of the combination
SLang_peek_at_stack and SLang_peek_at_stack1. This change
provides a bit more performnce.
47. slsh/lib/fswalk.sl: Functions here facilitate walking the
48. Some doc updates.
49. slsh/: Using help at the prompt will invoke the pager if the
number of lines is longer than the screen size. This required add
an slsh-specific intrinsic that returns the number of rows.
50. modules/stats.sl: Avoid integer overflow when computing Spearman's
rank correlation (Victoria Grinberg).
51. modules/csv.sl; Added support for RDB tab-delimited files via the
";rdb" qualifier.
52. modules/stats-module.c: The stddev function was computing an
incorrectly normalized value when passed the optional dims argument.
53. src/slang.h: The following qualifier functions were added to the
public API:
These functions may be used to create intrinsic functions that use
54. The previous change necessitated a minor change in the qualifier
semantics such that qualifiers that are created with no value
assigned are implicitly given a value of 1. That is, foo(arg;q)
and foo(arg;q=1) are now equivalent forms. Previously, foo(arg;q)
and foo(and;q=NULL) were equivalent. Experience has shown that
the new semantics result in simpler code. This change should not
break any existing interpreter scripts.
55. Backed out change #54 because it did break some scripts.
56. src/util/mkslarith2.sl: Used "signed char" instead of "char" to
avoid problems with systems that assume unsigned characters.
(RongQing Li).
57. modules/socket-module.c: Added support for socket credentials
(Arik Mitschang).
58. src/signal.c: Added support for interval timers via the
get/setitimer functions.
59. src/test/signal.sl: Missing #endif (Paul Boekholt)
60. autoconf/slang.pc: Allow prefix and exec_prefix to be different
(Diab Jerius).
61. src/sltoken.c: Use an unsigned cast when calling putc to
work-around what looks like a VMS C library bug bug.
62. src/slarrfun.c: Added wherefirstmin/max and wherelastmin/max
63. src/slarrfun.inc: Removed an unused variable from the
wherefirst/last/min/max functions.
64. src/slcommon.c: find_interrupt_hook was not setting the prevp
variable causing some hooks to become lost during calls to
65. src/slrline.c,slsh/readline.c: Added support for SLrline
callbacks. See the slsh docs for details.
66. src/slarray.c: Added wherediff intrinsic. This returns an array
of indices where adjacent elements of an array differ.
67. modules/stats-module.c: Rewrote the log_gamma_star function to
avoid double precision overflows when computing the poisson_cdf
function for large values. Also, the poisson_cdf function now
uses the Wilson and Hilferty normal approximation for values of
lambda greater than 1000.
68. src/slrline.c: Use the SLang_set_error function instead of
manipulating the _pSLang_Error variable. Also, changed the readline
"kbd_quit" function to throw a UserBreakError.
69. src/mkfiles/mkmake.exe: Compiled as a win32 executable. The old
16bit DOS version was renamed to mkmake16.exe.
70. slsh/readline.c: Change #65 broke the slsh --no-readline option.
71. mkfiles/: Added the /y option to the DOS copy command to avoid
being prompted to overwriting files when installing on a windows
72. win32-specific changes: Additional makefile tweaks. Also, permit
"./foo" to represent a "relatively-absolute" filename on
73. modules/stats.sl: Added the correlation function.
74. src/slarray.c: _isnull was not handling Null_Type arrays.
75. src/slparse.c: If the _for statement contains two control
variables instead of 3, assume the third is 1.
76. modules/fork-module.c: The execve_intrin was not functioning
properly (Agathoklis D. Hatzimanikas).
77. slsh/readline.c: Check to see if an update_hook has been set
before adding callbacks to it.
78. modules/csv.sl: Add support for empty field names.
79. slsh/lib/slshrl.sl: Added "who" interactive command that shows the
names and values of all variables/functions defined at the prompt:
slsh> x = 1; y = "foo";
slsh> who;
Integer_Type x=1
String_Type y="foo"
80. slsh/lib/print.sl: If the string form of the object ends in a
newline, do not write another.
81. modules/stats.sl: The usage message for Welch's t-test referred to
Student's form.
82. slsh/lib/sldbcore.sl: When entering the debugger_input_loop,
initialize the SIGINT handler.
83. slsh/lib/arrayfuns.sl: New function: rearrange, which may be used
to perform an in-place rearrangement of an array or list.
84. slsh/lib/listfuns.sl: New file that includes various functions
dealing with lists and list-based data structures. Currently this
includes list_sort and a heap object.
85. slsh/lib/listfuns.sl: heap_peek was improperly declared.
86. Numerous changes from int -> SLindex_Type. Note that SLindex_Type
is currently typedefed to be an int. For version 3, SLindex_Type
will become a long. This change lays some of that groundwork.
Similarly, I added SLFUTURE_CONST here and there. Neither of
these changes break binary compatibility nor affect the API.
87. src/slarrfun.c: The prod function for complex numbers had a sign
88. modules/csv.sl: Modify fixup_header_names to work with scalars.
89. modules/json-module.c: New module provided by Manfred Hanke. To
support this module several other changes were made including some
additions to the API.
90. Initial support for 64-bit windows: Use ptrdiff_t instead of long
when subtracting pointers. Also json-module added to windows
91. modules/rand.sl: rand_int was not properly handing intervals
larger than INT_MAX.
92. src/slbstr.c: Added bstrjoin and bstrcat intrinsics.
93. modules/json-module: Modified to use bstrcat. The
json_generate/json_parse functions were renamed to
94. configure: added support for parsing /etc/ld.so.conf
95. modules/json.sl: Use bstrcat throughout json_encode; additional
renames: generate->encode, parse->decode. (Manfred Hanke).
96. src/sllist.c: To decrease memory usages by lists, a size hint may
be specified upon list creation.
97. Allow struct field names to be an arbitrary string. When
referencing such a field, quotes must be used:
X = struct {"some-field", some_other_field };
X.some_other_field = 3;
X."some-field" = 4;
New struct-related functions were added to the C API:
98. Changed the json module to use structs instead of associative
arrays. (Paul Boekholt).
99. src/slassoc.c: Add C API SLang_assoc_key_exists (Paul Boekholt).
100. src/slang.c: Add SLstack_exch and tweak the json module to use it.
101. src/slang.h: Made the SLcompute_string_hash function public and
rewrote the hash table function in the json module to use it.
102. json-module: Doc updates, use compact encoding by default
(Manfred Hanke).
103. src/slstd.c: Added get_environ intrinsic, which returns an array of
the currently defined environment variables.
104. src/slang.c: Fixed a small memory leak introduced by the byte-code
optimizer when dealing with floating point literals.
105. src/slang.c: The changes added in #104 were a bit too aggressive.
I added code so that only literals get freed.
106. src/slstd.c: OSX has no proper environ, need to use a function
call. (Dima Pasechnik).
107. src/sldisply.c: Added support for an italic attribute if the
terminal supports it. This can be enabled using a color name
with a qualifier, e.g.,
SLtt_set_color ("menu", "white;italics", "blue");
This mechanism has also been extended to other attributes:
SLtt_set_color ("comment", "black;underline;italics", "cyan");
(Based upon a patch provided by Egmont Koblinger).
108. *.tm: Documentation updates and corrections. (Agathoklis D.
109. modules/csv-module.c: The store_value function was not updating
the num_allocated variable when resizing the value array. This
caused it to fail when reading a CSV table with more than 256
data columns.
110. modules/csv.sl: Since S-Lang structure field names may be
arbitrary strings, there is no need to massage the csv column
names. (See change 97).
111. modules/iconv-module.c: If the iconv descriptor has been closed,
then do not close it again in the iconv object destructor
112. src/slproc.c: Added getrusage function to get process resource
113. modules/png-module.c: Only the first 1/4 pixels of an RGB+alpha
image were getting byte-swapped. (RGB images were ok).
114. configure,*/Makefile.in: rearranged the compiler command so that
include flags occur before CFLAGS. This is a protective measure
designed to avoid issues when the CFLAGS variable also contains an
include path.
115. slsh/lib/process.sl: Added support to the pre_exec_hook callback
function for an optional argument.
116. Change 107 introduced a cut/paste error that prevented the
background color on Windows systems from being properly parsed.
(Reported by Frank and Manfred from jed-users).
117. src/sldisply.c: SLSMG_COLOR_BRIGHT_MAGENTA and
SLSMG_COLOR_BRIGHT_CYAN were swapped (patch provided by Thorben
from slang-users list).
118. Updated copyright year for upcoming release.
119. src/slposdir.c: Added lchown intrinsic.
120. src/slang.h, src/slpath.c: Added API function SLpath_getcwd
121. src/slsh.c: Use SLpath_getcwd instead of "." for CWD.
122. src/slpath.c: Added support for \\netdrive\paths for Windows, and
modified SLpath_dirname (path_dirname intrinsic) to perform some
expansion of .. and . in path names (e.g.,
path_dirname("/foo/../bar") will produce "/" instead of
The old bahavior was consident with that of the Unix
dirname command:
$ dirname `dirname /usr/bin/./slsh`
The new behavior produces an arguably more accurate result:
slsh> path_dirname(path_dirname("/usr/bin/./slsh"));
123. slsh/scripts/badlinks updated to use the fswalk functions
(Agathoklis D. Hatzimanikas).
124. Various documentation updates/corrections (Agathoklis D.
125. slsh/slsh.c: bumped copyright year.
126. src/slconfig.h: For non-Unix, HAVE_LSTAT and HAVE_LCHOWN were
defined to be 0 instead of undef'd. Also, removed an unused
function from slposdir.c and a shadowed variable from slpath.c
127. documentation updates (Manfred Hanke)
128. modules/test/: Additional json-modules tests (Manfred Hanke)
129. src/slarray.c: Allow functions called by array_map to return
NULL. (Manfred Hanke)
130. src/slang.c: Fixed a bug in the short-circuiting of non-boolean
131. Updated the NEWS file for release.
132. documentation updates
133. autoconf/: Updated configure scripts
134. src/mkfiles/mkmake.c: Add definitions for SLmalloc/free so that
mkmake can be built without the full slang library.
Changes since 2.2.3
1. src/slpack.c: Typo affecting 64 bit integers ('q' & 'Q') (Paul
2. src/Makefile.in: Make libslang.so a symlink to libslang.so.2
instead of libslang.so.2.2.4 (Miroslav Lichvar)
3. modules/Makefile.in: Cygwin needs ELFDIR defined (Marco Atzeri).
4. src/slutty.c: Added additional baud rate values (Sergey Vlasov)
5. autoconf/configure.ac: Check for socket and socketpair in -lsocket
if it is not in libc.
6. *.tm, src/slstrops.c, src/slbstr.c: Changed occurances to
occurrences (Marcel Telka).
7. src/slparse.c: Increment the _boseos_info value for qualifier
8. src/sltoken.c,slparse.c: The semantics of the _boseos_info variable
changed such that bos/eos callbacks are not generated for
preprocessor #ifeval statements unless bit 0x100 is set.
9. slsh/scripts/slstkchk: a new script used for running the
stack-check debugger.
10. documentation updates/tweaks (Manfred Hanke).
11. slsh/lib/rline/histsrch.sl: When building history search
completions, use most recent history first.
12. src/slarray.c: Detect integer overflows for multi-dimensional
13. Updated year from 2010 to 2011
14. src/slcommon.c: Added _slcalloc, _slrecalloc memory allocation
functions that check for unsigned integer wrapping. A number of
vulnerable calls to SLmalloc were modified to use these functions.
(Fixes an issue reported by Pablo Cassatella).
15. src/slarray.c: Detect attempts to create a 0 dimensional array.
16. modules/csv.sl: Float and double NaNs were reversed. When
normalizing columns names, _ characters were not being properly
17. doc/tm/rtl/time.tm: Added documentation for timegm (Manfred Hanke).
18. doc/tm/crtl/slsmg.tm: Corrected prototype for SLsmg_read_raw (Manfred Hanke).
19. Tweaked doc macros and rebuilt docs.
20. src/slarray.c: Added a check for too small of a range array
Changes since 2.2.2
1. src/sltermin.c: Added support for native terminfo binary layouts.
Some systems have binary terminfo files that are incompatible with
the standard ncurses layout. Use the --terminfo=layout configure
option to specify a non-standard layout (hpux11, osf1r5, uwin,
aix4, default). This incompatibity was pointed out by River Tarnell.
2. src/slparse.c: complicated lvalue expressions were not being properly
3. src/slstrops.c: Added strskipbytes function.
4. doc/tm/rtl/*.tm: A number of typos were corrected. (Agathoklis D.
5. src/slang.c,slparse.c: Qualifiers were not being passed to functions called
via derefencing an array of function references, e.g.,
6. src/slparse.c: Flag attempts to call literals as functions.
7. slsh/lib/process.sl: Added a "dir" qualifier to the new_process
function. This allows the subprocess to be started in a specified
8. src/slrline.c: Added rline_get_last_key_function, which returns the
last slang readline key function.
9. */Makefile.in: Commmened out "DESTDIR=" lines (Marcel Telka).
10. slsh/lib/rline.sl: Added rline_edit_history (allows the history to
be edited in an external editor) and rline_up/down_hist functions.
11. src/slparse.c: An incorrect check (< instead of <=) was causing -0
to generate an error.
12. .../tm/*: Corrected some documentation typos and spelling errors
(Agathoklis D. Hatzimanikas).
13. doc/tm/rtl/misc.tm: Documented the __tmp function and corrected a
few more documentation typos (Agathoklis D. Hatzimanikas).
14. src/slerrno.c: ELOOP was defined twice (Agathoklis D. Hatzimanikas).
15. doc/tm/slang.tm: Fixed a few doc errors noticed by Manfred Hanke.
16. src/slsh/scripts/mv: removed redundant call to rename, and added
force, noclobber, and verbose options (Agathoklis D. Hatzimanikas).
17. src/slsh/scripts/*: changed "static" to "private".
18. src/sldisply.c: Underlined space characters were not appearing
with the underline.
19. src/sldisply.c: Do not rely upon terminals that can
background-color-erase (BCE) to erase using the monochrome attributes (e.g.,
20. src/slarith.c: Tweaked the %S format to better round decimals with
repeated 9s or 0s.
21. autoconf/mkinsdir.sh: Updated to a newer version of
22. src/slagetput.c: Change 2.2.2-10 fixed a problem with aget. The
same change needed to be made to aput to avoid an access violation.
23. modules/pcre-module.c: Added support for binary strings (Paul
24. src/slposdir.c: Added utime function.
25. slsh/scripts/mv: Added a missing call to stat_file (Agathoklis
26. src/sldisply.c: Moved the keypad init/deinit code to separate
functions for more fine-grained control.
27. slsh/rline/editor.sl: Added rline_call_editor and rline_edit_line functions
28. src/slbstr.c: Added is_substrbytes function.
29. doc/tm/rtl/strops.tm: The strncmp example used strcmp function
(Brian Murray).
30. src/sltermin.c: Changed the search order for terminfo files to:
$TERMINFO, $HOME/.terminfo, /usr/local/{etc,share,lib}/terminfo,
/etc/terminfo, ...
31. src/slparse.c: Change #6 triggered an invalid parse error for
statements involving foreach-using such as:
foreach x (y) using ("bar") (@foo)();
32. src/slstrops.c: Added an alternative interface to strreplace that
facilitates the most common case where one wants to replace all
substrings. The function now supports
new = strreplace (a, b, c);
in addition to the older usage:
(new,m) = strreplace (a, b, c, n);
33. src/sltoken.c,...: Added support for binary integer literals of
the form 0b010101. Integers may be formatted as unsigned binary using the
%B format specifier, e.g.,
sprintf ("%B", 5) ==> "101"
sprintf ("%#B", 5) ==> "0b101"
sprintf ("%#8B", 5) ==> " 0b101"
sprintf ("%#.8B", 5) ==> "0b00000101"
sprintf ("%#12.8B", 5) ==> " 0b00000101"
34. src/slarith.c: ullong_to_binary was not getting defined on systems
where sizeof(long)==sizeof(long long). (Mark Olesen).
35. src/slsh.c: The stat_mode_to_string function was using 'f' unstead
of 'p' for FIFOs. (Agathoklis Hatzimanikas).
36. src/slarray.c: Switched to using mergesort instead of qsort and
added support for sorting non-array types. For details, see the
updated documentation for array_sort.
37. src/slarray.c: Reduced the memory requirments for the mergesort
function, which produced a 5% speed improvement.
38. src/slarray.c: Added support for qsort to array_sort. See the
updated documentation for details.
39. src/slparse.c: Added a syntax enhancement to structs and
qualifiers to allow the fields of structure-valued expressions to
be used to define the structure. For example:
space = struct {x, y, z};
spacetime = struct {@space, t};
Here spacetime is a structure containing 4 fields: (x,y,z,t). In
this context, @ is not a dereference operator. Rather it is used
to tell the parser that the following expression is a structure
40. src/slcommon.c: SLmalloc inherited malloc's undefined behavior
when 0 bytes were requested. The change will cause SLmalloc to
allocate at least 1 byte if the OS version of malloc returns NULL
for 0 byte sizes.
41. src/slclass.c: The default dereference method for all scalar and
vector classes was changed from undefined to duplicate. That is,
@7 will produce 7 instead of triggering a method-undefined
42. src/slwclut.c: Added \x\c\p\,\g character classes to strtrans (See
strtrans doc).
43. src/*.c: Made numerous int->SLindex changes to match function
prototypes. Note that SLindex_Type is currently typedef'd to be
an int, but if that ever changes, these changes will be necessary.
I also added SLang_push_array_index to the public API. Also
updated copyright year since a number of files changed.
44. src/slarrfun.c: change 43 would not compile on 64 bit systems.
45. src/slnspace.c: the apropos function was not returning float,
short, long, and long long constants.
46. src/slarith.c: If LLONG_MAX is not defined, and sizeof(long long)
is 64 bits, then use the standard value.
47. src/slang.c: long long constants were not working.
48. slsh/lib/process.sl: modes[i] was being set after i was bumped.
This caused modes[0] to be NULL.
49. slsh/lib/slshrl.sl: If the first word is callable, and is followed
by a ',', then add parenthesis, i.e., "print,7" ==> "print(7);".
Note: this is a commandline convenience feature and has nothing to
do with the slang syntax.
50. slsh/lib/rline/complete.sl: Attempt to complete structure field
51. src/slrline.c,slsmg.c,sldisply.c: Added support for multiline
52. configure,src/*.hin: Added autoconf support for size_t.
53. src/slang.h,...: Added 'typedef unsigned in SLstrlen_Type' to
create migration path for size_t in place of unsigned int.
54. src/slstrops.c: New intrinsics:
islower, isupper, isxdigit, isalnum, isalpha, iscntrl, isprint,
isgraph, ispunct, isblank, isspace, strskipchar, strbskipchar
The latter two functions play a role in the context of the
variable length UTF-8 encoding
encoding analogous to that of ch=*s++ and ch=*s-- in a fixed
55. slsh/lib/rline/editfuns.sl: Used functios in change #54 to implement
bskip_word and skip_word readline functions.
56. src/slstrops.c: Added isascii, and updated docs.
57. src/sldisply.c: _pSLtt_cmdline_mode_reset will also clear to the
end of the screen.
58. mingw32 compilation problems: typo in src/slconfig.h;
src/slarrfun.c: missing '#ifdef HAVE_LONG_LONG'.
59. src/slsmg.c: Change #51 introduced a bug that manifests itself
when expanding a tab at the right edge of the display.
60. src/slarrfunc.c: If contracting an empty array over all dimensions
to produce a scalar, clear the transfer buffer.
61. src/slarrfun.c: If a scalar is passed to array_reverse, then do
62. src/slarith.c: LONG_MIN/MAX values were placed in an integer
contant table instead of a long integer table.
SLadd_lconstant_table added to the interface.
63. src/slsmg.c: Change 51 introduced a bug in SLsmg_write_chars when
SLsmg_Newline_Behavior != SLSMG_NEWLINE_IGNORED.
64. autoconf/config.sub+config.guess updated.
65. src/slstrops.c: If a delimiter is not passed to strjoin, assume
the empty string.
66. modules/test/test_rand.sl: Some integer constants changed to
unsigned values.
67. src/slstruct.c: tweak code to remove a false uninitialized
variable warning.
68. src/slarray.c: fix NULL pointer deref from invalid binary
operation Array_Type[N]+[1:N].
69. src/slang.c: '>' instead of '<' should have been used in in the
try/catch code when decrementing the frame pointer.
70. src/slparse.c: Method qualifiers were getting lost when called
from the constructor, e.g., new_object(arg1;qual1).method(arg;qual2)
71. src/sltoken.c: preprocessor statements #if, #ifeval, and #ifexists
will use the (non-anonymous) namespace of the file containing the
72. src/slang.c: _pSLlocate_name return NULL instead of an exception
if the name contains a non-existent namespace.
73. Removed excess whitespace from all files (*.c, *.h, *.tm, *.sl, ...).
74. src/slang.c: define MAX_USER_BLOCKS to be 5, and use it instead of `5'.
75. src/slsignal.c: Use (char*)NULL instead of NULL in call to execl
to avoid a compiler warning on OpenBSD.
76. src/slproc.c: define _XOPEN_SOURCE_EXTENDED to be 1 instead of
just defining it. This pulls in some prototypes on OpenBSD.
77. src/slmath.c: The hypot intrinsic was modified to work with N
arrays instead of just 2. (Manfred Hanke)
78. src/slarith.inc: Use doubles for intermediate calculations when
double is the expected result. This avoids some integer overflows
(Matthias Kühnel, Michael Wille, Manfred Hanke).
79. src/slparse.c,slang.c: Added FOREACH_EARGS byte-code that will
implicitly call the __eargs function. This avoids a problem with
the standard FOREACH bytecode if a hook gets called after __eargs
but before the FOREACH byte-code executes.
80. src/slstrops.c: The pos argument to the string_match and
string_matches function was made optional (defaults to 1).
81. src/slstring.c: Use _pSLuint32_Type instead of unsigned long for
hashes since the hash algorithm was designed for 32 bits.
82. src/slstd.c: Save the pointer passed to putenv to a global array
so that leak checkers can find it. The reason for this is that
some libc implementations copy the pointer but others do not.
83. src/slang.c: An off-by-one error was causing a stackunderflow
error when handling a exception list in a try-catch statement.
84. slsh/lib/arrayfuns.sl: Add support for empty arrays to the shift
function (Manfred Hanke).
85. */examples/*.sl: Various updates and corrections (Manfred Hanke).
86. src/sllist.c: A extra call to SLang_free_mmt was causing a list to
be freed when set via an index array.
87. src/slstrops.c: Vectorized strlow/strup intrinsics.
88. src/slmath.c: Add support for more than 2 arguments to the
_min/_max functions (Manfred Hanke).
89. src/sllist.c: Added list_join, list_concat intrinsics (Mike Noble).
90. slsh/lib/setfuns.sl: adds unique, intersection, complement, union
91. modules/csv.sl: Added a module to support the reading and writing
of comma separated values (csv) formatted files.
92. Some documentation corrections (Manfred Hanke).
93. src/slmath.c: In the hypot function, use the convenience function
do_binary_function_on_nargs instead of an explicit loop. (Manfred
94. modules/tm/slsmg.tm: Manfred Hanke has started documenting the
slsmg module. He also provided a new example (slsmgex2.sl).
95. src/slnspace.c,slang.c: Free up some memory associated with
namespaces upon exit.
96. src/slposio.c: added ttyname intrinsic
97. autoconf/slang.pc: Use @libdir@ instead of assuming $prefix/lib.
98. modules/csv.sl: The read_cols method allows the type qualifier to
be a string of type specifiers, e.g., types="liff". This is
equivalent to types=['l', 'i', 'f', 'f'].
99. src/sltime.c: Added timegm, which is the inverse of gmtime. I
also made changes to the time functions so that time_t is not
assumed to be a long. This means that _time may produce a
longlong integer on some platforms.
100. modules/cmaps/coolwarm.map: A color map by Kenneth Moreland.
101. modules/png-module.c: Use png_set_expand_gray_1_2_4_to_8 instead
of png_set_gray_1_2_4_to_8 if available (patch forwarded from Marco
102. src/slcommon.c: Code using __libc_enable_secure was removed
(patch forwarded from Marco Atzeri)
103. src/sldisply.c: Added some termcap compatibility functions that
were ifdefed out in v2.2.2 but were made available by some linux
distributions for code to use: SLtt_tgetent, SLtt_tgoto,
SLtt_tputs (patch forwarded by Marco Atzeri).
104. autoconf/aclocal.m4,configure.ac: Various updates by Marco Atzeri
including a cygwin specific change.
105. autoconf/aclocal.m4: Missing hyphen for ELFLIB_MAJOR on cygin
(Marco Atzeri).
106. slsh/lib/doc/tm/setfuns.tm: Add newlines to the note1 macro
(Manfred Hanke).
107. src/slang.c: change #5 caused a problem evaluating the bytecode
produced by preparsed files (.slc) produced by slang v2.2.2.
108. modules/tm/csvfuns.tm: Documentation updates
109. src/sldisply.c: slsh would exit if the underlying terminal was
unknown because _pSLtt_init_cmdline_mode was returning a fatal
110. configure, *Makefile.in,etc: Made changes so that ARCH
environment variable influences where the .o files are placed.
The INSTALL.unx file documented this feature but the slsh and
modules Makefiles did not implement this.
111. */mkfiles/makefile.all: Added WFLAGS to mingw sections to allow
the warning flags to be specified independently of the CFLAGS.
112. src/slang.c,_slang.h: Changed `#if HAVE_LONG_LONG' to `#ifdef
HAVE_LONG_LONG' in a few places.
113. src/slstrops.c: A number of string functions have been vectorized
to work on arrays of strings. These include:
is_substr str_delete_chars strbytelen strcharlen strcmp
strcompress strlen strlow strnbytecmp strncharcmp strncmp
strtrans strtrim strtrim_beg strtrim_end strup
114. modules/Makefile.in: Change #110 introduced a bug
that caused the modules to always be need rebuilding.
115. src/sltoken.c: Change #if HAVE_LONG_LONG to #ifdef HAVE_LONG_LONG.
116. src/slmath.c: Tweaked the Kahan sum for the hypot function.
117. slsh/readline.c: Added __rline_init/reset_tty functions and used
them in the rline editor routines to reset the terminal before
calling an external editor. This avoids problems when the editor
is subsequently suspended.
118. modules/csv.sl: Typo causing a bug involving the mapping of string valued
column-specifiers to column numbers by csv.readcol. (Paul Boekholt)
119. doc/tm/rtl/strops.tm: Typo in sprintf documentation (Andreas
120. src/sltime.c,slposio.c: Avoid certain posix *_r functions if
_POSIX_C_SOURCE is too old.
Changes since 2.2.1
1. src/slsmg.c: Call SLutf8_enable if UTF8 mode has not been setup.
2. src/slutty.c: Allow the hook that gets called when the read
function gets interrupted to change the read file descriptor.
Before, if this happened, the SLang_getkey function would return
3. lib/slsh/print.sl: Turn off buffering of the pager pipe.
4. modules/tm/*.tm: A couple of typos corrected (John Houck)
5. src/slmath.c: The round function was not correctly rounding values
between 0.5 and 1.0.
6. src/slstdio.c,slclass.c: If a call to fwrite produces errno=EPIPE,
then do not bother trying the write again.
7. modules/fork-module.c: Use WIFCONTINUED only if it is defined.
8. slsh/Makefile.in: Change the order of the libraries such that the
newly built ones will be found first. (Markus Hennecke)
9. src/slagetput.inc: Avoid possible access violation when using a
range array as an index.
10. doc/tm/rtl/lists.tm: Documented the optional argument to the
list_to_array function (Manfred Hanke).
Changes since 2.2.0
1. modules/socket-module.c: glibc-2.8 removed the h_addr macro.
2. src/slclass.c: Call clearerr before performing the
stdio_fread/fwrite functions.
3. src/slstdio.c: typeof in the fputs intrinsic fixed (n instead of dn
was compared to 0).
4. src/slscanf.c: sscanf will treat NaN and Inf in a case-insensitive
manner. Also, the NaN([a-zA-Z0-9]*) form is also supported.
5. src/slang.h: SLclass_set_aelem_init_function was missing from the
6. src/slmath.c: The expm1 and log1p functions were returning NaN when
given Inf arguments.
7. src/slmath,c: log1p(-1) produced nan instead of -inf.
8. configure: Added pkg-config support (based upon a debian patch sent
to me by Luca Bigliardi).
9. doc/tm/rtl/math.tm: Updated the help for set_float_format and added
documentation for the get_float_format function.
10. autoconf/slangpc.in: Added URL and Libs.private entries to the
slang.pc pkg-config file.
11. src/slang.h: prototype for SLang_create_array1 missing from slang.h.
12. src/slcurses.c: Added debian patch that adds support for
additional graphics characters (DIAMOND, DEGREE, etc...).
13. doc/tm/slang.tm: Added a small section about arrays of arrays.
14. src/slang.c: __builtin_expect is used for the stack functions if
compiled with gcc.
15. src/*.c: A few public variables were not explicitly initialized
to 0. Apparantly not doing so causes them not be be exported from
the windows DLL.
Changes since 2.1.4
1. modules/termios-module.c: Added the VMIN constant (Laurent Perez).
2. src/slbstr.c: Added foreach method to BString_Type objects.
3. module/zlib-module.c: New module that wraps libz
(compression/decompression library).
4. doc/tm/rtl/: Some documentation updates
5. configure: Added messages about what extra modules will and will
not be built.
6. modules/mkfiles/makefile.all: Added zlib module to the makefile.
7. autoconf/configure.ac: Fixed the spelling oniguruma (Peter J. Ross)
8. src/slang.c,slparse.c,sltoken.c: Added 'break n' and 'continue n'
9. src/slang.c: break-n and continue-n were not being properly handled
when used outside a function.
10. src/slparse.c, sltoken.c: Added the C-like ternary-expression
"condition ? foo : bar".
11. src/sltoken.c: Added support for mult-line strings:
"This is a \
multiline \
`This is another
Note that the backquoted does not require a backslash at the end
of lines.
12. src/sltoken.c: When reading subsequent lines of a multiline
string, increment the readline parse_level.
13. src/sltoken.c: When performing backslash expansion, if a solitary
backslash occurs at the end of a line, or is preceeded by a
newline at the end of a line, then ignore it.
14. src/slexcept.c: The use of an ERROR_BLOCK was causing the pointer
holding the name of the function with the error to be freed twice.
15. slsh/lib/rline/*keys.sl: Bind "\n" to the readline "enter" function.
16. src/sltoken.c: Improved and simplified the way operators are
mapped to tokens.
17. slsh/lib/sldbcore.sl: sldb was printing all the elements of a
container object when using the "p" command.
18. src/slarrfun.c: Added a "sumsq" function, which sums over the
squares of the elements of an array.
19. src/slsignal.c: Added SLsystem_intr, which unlike SLsystem does
not ignore SIGINT by the calling process. This function is
available to the interpreter via system_intr.
20. doc/tm/rtl/debug.tm: Documentation for the call stack frames added
(Jörg Sommer).
21. src/slarrfun.c: array_reverse was producing an index-error when
passed an empty array.
22. src/slcurses.c: SLcurses_initscr calls SLutf8_enable (Michal
23. src/slang.c, slparse.c: "then" clauses were not being executed for
top-level looping statements (statements occuring outside function
24. src/slang.c: Change #23 was causing byte-compiled (.slc) files
from previous versions of jed to be misinterpreted.
25. modules/zlib-module.c: The error message associated with
ZLIB_DATA_ERROR was incorrect (Paul Boekholt).
26. src/slarray.c: Fixed a bug involving due to an overzealous __tmp
optimization involving binary operations between arrays of arrays.
Fortunately the bug manifests itself in a useless context.
27. src/slstring.c: Improved performance of SLang_concat_slstrings
function. (Paul Boekholt)
29. src/slang.c: When adding two strings together, make a direct call
to SLang_concat_slstrings avoiding some function call overhead.
30. src/slmath.c: Added expm1 and log1p functions.
31. src/slmath.c: If hypot is passed a single array X, then it will
compute sqrt(sumsq(X)), which is useful for computing the norm of
a vector represented by X.
32. src/slarith.c: Changed the default floating point format to %S,
which means that the floating point number will be formatted in a
slang specific way to preserve the precision of the number such
that x == atof (string(x)).
33. src/slarray.c: Passing an object to size_t to SLmalloc was
resulting in a SEGV on 64 bit systems.
34. src/slbstring.c,slang.c: Small modifications to generalize the __tmp
optimization to binary-strings.
35. src/slstrops.c: Changed strcpy to memcpy where permissible (Paul
36. src/slarray.c: __tmp optimization of binary optimization was not
obeying the READONLY flag.
37. src/slang.c: __tmp optimization for struct.field OP= value.
38. src/slarith.c: For floating point types, the %S format specified
will always print the decimal point or exponent.
39. src/slmisc.c, sltoken.c: Added parser checks for overflows of
literal integer constants.
40. src/slarith.c: Change #38 resulted in decimal points in inf and nan.
41. src/slarithlc: By default, a floating point number x, where
|x|>=1e6 is printed in exponential form.
42. src/slparse.c: Added looping context checks for break and continue
43. src/slang.c: Small tweak to inner_interp to improve
branch-prediction (Paul Boekholt)
44. src/slang.c: Optimized additional byte-code combinations.
45. src/sldisply.c: On TERMCAP based systems, the "ac" capability was
being returned as the address of a local variable (Szalai Andras).
46. src/slrline.c: The SLrline_redraw function was not properly
setting the last_nonblank_column variable.
47. src/slstd.c: SLang_Doc_Dir was implicitly defined to be an int
when SLANG_DOC_DIR is defined. (Jon Parise)
48. src/mkfiles/makefile.all, src/slconfig.h: Visual Studio tweaks
(Jon Parise).
49. modules/module.c: Added sockerpair to the module.
50. src/slang.c: The string representation of a Ref_Type will show the
namespace prefix, e.g, "&ns->foo". Also the __get_reference
function was modified to ignore a leading '&'.
51. src/slposio.c: Added dup2_fd intrinsic (a wrapper around dup2).
52. modules/fork-module.c: New module (fork, waitpid, exec*, ...)
53. src/slagetput.inc: a[i]=b was sometimes resulting in a buffer
overflow when i had elements outside the range of a.
54. modules/select-module.c: A small memory leak was corrected.
55. doc/*.tm: Some documentation updates.
56. src/slposio.c: Allow a file descriptor to be fdopen'd multiple times.
57. src/slstdio.c, src/slclass.c: Restart the fread/fwrite calls
calls when interrupted by a signal.
58. src/slcommon.c: SLang_handle_interrupt will preserve errno.
59. src/mkfiles/makefile.all: Updated for newer versions of Visual C
(Jon Parise).
60. src/slang.c: set_array_lvalue was not preserving
61. src/slang.c,sig.c: Continual bombarding the interpreter with
signals revealed a subtle race condition in the interpreter's
implementation of signals.
62. src/sllist.c: Added list_to_array intrinsic function:
array = list_to_array (list [,type])
63. .../makefile.all,slsh/slsh.c: Additional Visual C updates. Also, io.h is
needed to compile slsh Visual C. (Jon Parise)
64. src/slproc.c: added killpg intrinsic
65. modules/sysconf.c: Wrappers around the sysconf, pathconf, and
confstr posix function.s
66. modules/fork-module.c: Added the pipe intrinsic.
67. src/slexcept.c: Added traceback info to the exception object.
68. src/slposio.c: Added a _close intrinsic, which takes an integer
file descriptor instead of the corresponding slang object. A
_fileno intrinsic was also added that returns the integer
descriptor. A bug in the dup2 intrinsic added in change 51 was
69. src/slstruct.c: Added aget/aput methods for user-defined types.
70. src/slang.c: handle_signals was made reentrant.
71. modules/fcntl-module.c: Accept an int as a file descriptor.
72. src/slposio.c: @FD_Type(int) may be used to convert an int into
the corresponding FD_Type object.
73. modules/sysconf-module.c: Added #ifdefs for HAVE_SYSCONF, etc.
74. modules/zlib-module.c: Added #ifdefs for the ZLIB constants
75. src/slstdio.c: Rewrote fputs intrinsic in terms of fwrite to
better deal with EINTR. Also, fopen, fclose and fflush are
restarted upon EINTR.
76. src/slstring.c: Avoid a problem where the first n bytes of a
string hashes to the same location as the full string.
77. src/slparse.c: Reworked the integer-overflow code.
78. src/*.h: Updated Unicode tables to v5.1.
79. src/slwclut.c: Added \7 to indicate a 7 bit character class.
80. slsh/lib/readascii.sl: The readascii function defaults to using
double precision instead of single.
81. src/sllist.c: Change the chunk size and how it is allocated to be
more cache friendly.
82. src/slstrops.c: Added string_matches, which combines the
operations of string_match and string_match_nth.
83. modules/fork-module.c: Restart waitpid if EINTR received.
84. slsh/lib/process.sl: A new process module for creation of child
processes, pipelines, etc.
85. slsh/lib/process.sl: If no qualifiers were passed, list_to_array
was failing on an empty list.
86. src/sllist.c: improved indexing performance.
87. src/slproc.c: Added getsid
88. modules/onig-module.c: Added BString_Type support to onig_search
(Paul Boekholt).
89. src/slmath.c: The calling syntax of the polynom function was
simplified and extended to support arrays. As such, this function
is not backwards compatible.
90. src/slang.c: Added optimizations for the power operation a^b.
91. src/slstruct.c; Added an struct-specific acopy function instead of
using the default.
92. src/slarray.c: streamlined the case of getting a single array
element of non-scalar types.
93. src/slang.c: Additional optimizations involving binary expressions.
94. src/slparse.c: Avoid an explicit chs bytecode for negative
floating point literals.
95. src/slang.c: optimization tweak for expressions involving
scalar assignments to an array element.
96. src/slang.c: change #93 introduced a small leak.
97. src/slang.c: optimization tweak involving pushing the value of a
structure field.
98. src/slstdio.c: If fread/fwrite returns a short, non-zero item count,
clear the error and try again.
99. src/slstdio.c: If fflush appears to succeed, check ferror and if
errno==EINTR, try it again.
100. src/slproc.c: Added get/setpriority functions.
101. src/slstdio.c: Added setvbuf
102. src/slproc.c: Added the "static" to the get/setpriority wrappers.
103. doc/tm/: Updated docs and reprocessed with an upgraded version of
linuxdoc. Unfortunately, a table of contents for the text files
is nolonger generated by linuxdoc.
104. src/slang.c: Added inline support for the bit-wise binary
105. src/slang.c: Optimized pushing arbitrary single 1d array elements.
106. src/slang.c: Optimization tweak for assigmnents to structure
107. src/slang.c: Reordered some of the code in the inner_interp
switch statement and optimized some of the code that deals with
assignments to global variables. The latter change improves the
performance of the profiler a bit.
108. src/slang.c: If an intrinsic takes no arguments and returns
nothing, then call it directly from inner_interp.
109. src/sltype.c: Added __datatype intrinsic, which is the opposite
of the __class_id function.
110. src/slang.c: set_struct_obj_lvalue was not always incrementing a
reference count on non-struct objects with struct semantics.
111. src/slarith.c: On a system where sizeof(long)==sizeof(long long),
omit the long-long specific functions.
112. modules/pcre.sl: Added pcre_matches function that combines the
other pcre functions into a simple to use form.
113. src/sltoken.c,slparse.c: Overflow check was failing on 64 bit
114. src/sltoken.c: If the default read method encounters a too long line,
then issue an error instead of passing it back up for the parser
to handle.
115. src/sltoken.c: preparsed files were being mishandled by #114.
116. src/sllist.c: Added array indexing support to list objects.
117. src/slarrfun.inc: Tweaked the implmentation of Kahan sums.
118. src/slmath.c: An optional argument may be provided to the polynom
function to indicate that the kth term should be divided by k!.
119. src/slmath.c: Added frexp and ldexp intrinsic functions.
120. src/slmath.c: #119 introduced a typo that was preventing
compilation on systems that lack frexpf.
121. src/slarray.c: When indexing a scalar as an array, allow the use
of multiple indices, e.g., x=2; y=x[0]; z=x[0,0]; w=x[0,0,0];
122. slsh/lib/readascii.sl: When reading the first column as a string, comments
were not getting ignored.
123. slsh/lib/rline/emacskeys.sl: The IBMPC_SYSTEM preprocessor macro
was used but not defined causing readline to fail on windows.
124. Updated copyrights on files for upcoming release.
125. doc/tm/slang.tm: Add documentation for the looping-then clause,
and various other documentation tweaks.
126. src/slconfig.h: non-Unix systems: Remove defines for mode_t etc.
Define HAVE_POPEN for MINGW32.
127. slsh/lib/print.sl: Do not attempt to call popen unless it
actually exists.
Changes since 2.1.3
1. src/slang.c: The identifier syntax was not being checked for
symbols added to the global namespace.
2. slsh/slsh.c: If ENV_SLSH_PATH is undefined, set it to SLSH_PATH
3. */mkfiles/*: Modified the various makefile.all files to facilitate
mingw32 builds. Read INSTALL.pc for quick-start.
4. mkfiles/install.sl: Added a function to install the slang docs
5. src/slvideo.c: #define UNICODE so that wide-character functions are
used instead of byte functions. Also codepage set to 65001 in
unicode mode.
6. src/slvideo.c: Added SLtt_is_utf8_mode.
7. src/sltermin.c: Added support for new ncurses hex-encoded terminfo
8. slsh/lib/tm/cmdopt.tm: Missing commas in the documentation for
cmdopt_add. (Doug Burke).
9. src/slarrmisc.inc: Changed inner-product code to use block arrays
to be more cache friendly. Since the block size is cpu-dependent,
__get/set_innerprod_block_size functions have been added. The
default value is controlled by a variable in src/sllimits.h.
10. modules/termios-module.c: Added additional termios constants
(Laurent Perez).
11. src/slarray.c: Better optimization when indexing arrays with
12. src/slsignal.c: If SLsystem fails, set the interpreter's errno
value accordingly.
13. modules/rand-module.c: A uniform random number generator module,
which also provides generators for some well-known distributions.
14. src/*.c: Changed field name for SLang_Object_Type.data_type to
15. src/slang.c: Optimization tweaks to improved performance for small
arrays and indexing via scalar indices.
16. doc/tm/rtl/stack.tm: Typos in the example for __pop_list corrected
(Doug Burke).
17. src/slang.c: Improved optimizations for scalar arithmetic
18. src/slarray.c: slices such as A[*,[0:-1],*] of multi-dimensional
arrays were producing single dimension ones.
19. src/sltoken.c: Changed the semantics of the
SLang_set_verbose_loading function. Previously this function
accepted a zero or non-zero value to disable or enable loading
messages for .sl files. Now this integer value is a bitmapped
one: If bit 0 is set, loading messages will be generated for .sl
files. If bit 1 is set, messages will be generated for
dynamically loaded modules.
20. slsh/slsh.c: Calling slsh with -v will generate loading messages
for both modules and slang files. I also created a new
slsh-specific intrinsic called set_verbose_loading and bumped the
slsh version number.
21. modules/cmaps: Added "ds9b" and "ds9sls" colormaps --- these correspond
to analogous colormaps in saotng ds9.
22. utf8/tools/mktables: Characters with general category "Mc" or in
the bi-directional category are nolonger flagged as combining characters.
23. utf8/tools/: Updated unicode database from 3.2 to 5.0 and
recreated the internal character set tables.
24. src/slsmg.c: If an ambiguous-width unicode line drawing character
is double width, then use a single-width alternative (Sugiyama).
25. src/slsignal.c: Call SLang_handle_interrupt when system calls are
26. src/slarray.c: Speed improvements when transferring elements from
one array to another via range indices, e.g., a = b[[1:9]];
27. src/slarrfun.c: transpose of multi-dim non-scalar arrays was using
unitialized memory.
28. src/slarray.c: Improved speed of binary arithmetic of range arrays.
29. src/slstd.c: atoi, atof, atol, atoll, and integer now accept an array
30. demo/pager.c: args swapped in call to memset (Dave Jones
davej at redhat)
31. src/slstring.c: Move last used string in the hash table to the top
if it is more than a few deep.
32. slsh/doc/tm/slsh.1: Added a small section to the slsh man page
about customizing the readline environment.
33. slsh/etc/slsh.rc: changed dir_exists from static to private
34. src/slposio.c: The low level read/write functions should not be
restarted when errno is EAGAIN.
35. src/sltoken.c: When run in verbose mode, SLns_load_file will
display the name of the namespace the file is being loaded into when
the namespace is not the Global one.
36. slsh/lib/require.sl: If the "feature" is a filename, then
automatically "provide" that feature.
37. slsh/lib/tm/require.tm: Fixed the typos for the require function.
38. src/slstrops.c: Until `|' is supported in REs, glob_to_regexp
cannot be made to produce a single RE that does not match leading
dots. Hence, the glob expression "*X" will match ".X".
39. slsh/lib/glob.sl: Changed to compensate for modification to
glob_to_regexp. That is, glob("*X") will not match the file ".X",
which preserves the bahavior of the glob function.
40. src/slcommon.c: On win32 systems, if the codepage is 65001, then
use UTF-8 mode (Thomas Wiegner).
41. src/slarray.c: Trivial change to avoid a warning in gcc
about the possible use of an uninitialized variable.
42. slsh/slsh.c: Added -q, --quiet command line option to inhibit the
printing of the startup messages.
43. slsh/lib/print.sl: Added pager[=val] and nopager qualifiers to the
print function. Also if printing a single structure, each field
will appear on a separate line.
44. src/slstrops.c, src/slbstr.c: Added count_char/byte_occurances
function to count the number of occurances of a specific character
or byte in a string.
45. src/slparse.c: &if was causing a SEGV.
46. src/slstd.c: Added get_float_format intrinsic.
47. doc/tm/Makefile: Added rules to make cref.pdf
48. slsh/lib/print.sl: Updated the usage message for the print function.
49. src/slang.h: Added __attribute_(format(printf)) to SLsnprintf
50. src/*.c: Function prototypes were changed from, e.g.,
char *SLang_create_slstring (char *);
char *SLang_create_slstring (SLFUTURE_CONST char *);
where SLFUTURE_CONST is defined to have no value. As a result,
these changes has no effect at present but will in a future
version (slang-3) where SLFUTURE_CONST will be defined to be
`const'. The use of `const' now would constitute a major API change,
which is not permitted until a new major version is released.
51. src/slmisc.c: SLFUTURE_CONST added to SLextract_list_element
52. src/slang.h: Added SLFUTURE_CONST to arg_type field of
SLcmd_Cmd_Type object.
53. src/slarith.c: The return value of fmod was being truncated to
single precision.
54. doc/tm/cslang.tm: COLORTERM was used instead of COLORFGBG (Nathan
Stratton Treadway).
55. configure,*/Makefile.in: Haiku systems do not require -lm. -lm
was replaced */Makefile.in by @M_LIB@ which is not set from the
configure script. (Scott McCreary)
56. src/slutty.c,src/slidsply.c: More Haiku-specific patches from
Scott McCreary.
57. mkfiles/makefile.m32: Made changes to work with recent versions of
mingw32 and added a silly hack to work-around CMD.EXE
interpretation of '=' as whitespace on the command line.
58. doc/tm/rtl/rline.tm: New file containing documentation for
intrinsic functions dealing with the slang readline interface.
59. slsh/lib/print.sl: If a string is passed as a file descriptor to
the print function, then regard the string as a filename.
60. src/Makefile.in: Added _slang.h and sllimits.h as a global
61. slsh/lib/tm/print.tm: Documented the slsh print function.
62. slsh/lib/print.sl: Rewrote and simplified the code that prints to
the various output "devices" by using a device-object.
63. autoconf/Makefile.in: Added src/Makefile.in as a dependency.
Changes since 2.1.2
1. autoconf/Makefile.in: If any */Makefile.in is more recent than the
corresponding Makefile, request that the configure script be rerun.
2. src/slcmplex.c: If the complex number z is 0, then return 1 for z^0.
3. src/slerr.c: SLang_set_error: If the error code is
SL_UserBreak_Error, then do not add a string representation to the
queue in case this function was called from a signal handler. This
avoids a call to malloc, which is generally a bad idea on systems
where malloc is not reentrant.
4. slsh/lib/sldbcore.sl: The "c" alias was not working. (John Houck)
5. src/slsmg.c: Avoid a possible segv if SLsmg_Scroll_Hash_Border is
greater than the display size. (Miroslav Lichvar).
6. src/slang.c: Line number information was not always getting
propagated in slang code involving function dereferences, e.g.,
(@funcptr)(args). The bug-fix checks to see that funcptr is
7. src/slparse.c: Generate bos/eos byte-code for empty code blocks,
e.g., while (1){}.
8. lib/sldbcore.sl: When exiting the debugger via the "exit" command,
the old SIGINT handler was not getting installed.
9. src/slang.c: Make sure check_signals gets called when returning
from inner_interp.
10. src/slsig.c: If a slang script establishes a signal handler for
SIGINT, then set SLKeyBoard_Quit to 1 if SIGINT is received.
11. src/slstruct.c: New intrinsic:__add_typecast. This may be used to
define a typecast function for a user-defined type.
12. autoconf/aclocal.m4: Added support for ncurses5-config to query
the terminfo path (Wenchieh Yen).
13. src/slang.h: If __APPLE__ is defined, then also define __unix__.
14. src/slmath.c: Avoid a NULL pointer dereference when feqs(a,b) is
called with mixed scalar and array arguments.
15. src/slsmg,c: Avoid writing a double-wide character to the last
column of the display.
16. src/sltermin.c: Search the autoconf-derived terminfo dirs before
the hard-coded paths (Wenchieh Yen).
17. doc/tm/rtl/math.tm: feqs documentation updated to reflect a
default relative difference of 0.01.
18. doc/tm/rtl/eval.tm: In one example, get_path_delimiter is
incorrectly used (Frank Primini).
19. src/slstrops.c: Memory corruption was occuring when using a number
greater than 10^256 in a "%f" format statement.
20. src/slstrops.c: Small tweak in the way #19 was implemented.
21. modules/socket-module.c: If INADDR_NONE is defined, use it to test
the return value of inet_addr.
22. src/slang.c: SLang_start_arg_list made a wrapper around
Changes since 2.1.1
1. slsh/lib/readascii.sl: Typo in the usage message corrected.
2. autoconf/aclocal.m4: Fixed elf link problem on freebsd (Renato
3. doc/tm/slang.tm: Some documentation updates
4. slsh/lib/cmdopt.sl: The value passed to a callback function was not
be converted to the specified type, e.g., for
cmdopt_add (opt, "foo", &callback; type="int");
callback was not being passed an integer.
5. src/slang.c,slassoc.c: Optimization tweaks for inc/decrementing
associative arrays (e.g., foo["bar"]++).
6. src/slerr.c: When SLang_set_error is called, then add the string
representation of the error message to the message queue.
7. doc/tm/strops.tm: Corrected the documentation for the string_match
function. (Guenter Milde)
8. src/sllimits.h: Increased the size of the hash table that stores
SLstrings for better efficiency.
9. src/slstrops.c:_pSLang_push_nstring: Inlined the call to
10. slsh/lib/structfuns.sl: Ignore any NULL arguments.
11. slsh/src/readline.c: Turned on output processing in the call to
12. src/slang.h: Several functions were marked as "extern" and not as
SL_EXTERN. This makes a difference for CYGWIN and WIN32.
13. src/Makefile.in, autoconf/*: Better support for the creation of
cygwin DLLs.
14. src/slang.h: Under windows+cygwin, if SLANG_DLL is not defined,
the it will get defined as 1. This means that by default, the
application will get compiled against the slang DLL. To build
against a static version of the library. compile your code using
15. Backed out the previous change (#14) to avoid breaking third-party
code that compiles against the library.
16. Makefile: `make` will only build the shared version of the
library. Use `make static` to create the static version.
17. src/slcmplex.c; Division by zero errors are no longer trapped.
This has been the default behavior for reals; this change
applies to complex numbers.
18. */*/*.tm: Documentation updates
19. src/slrline.c: When completing a quoted string, the final quote
character will automatically get added (instead of a space as
20. src/slrline.c: SLang_peek_at_stack+SLang_pop_int recoded as
wrappers around inlined versions.
21. src/Makefile.in: Avoid creating a symlink if the target is the
same as the link (affects cygwin).
22. src/slsh.c: If exit is called without arguments, interpret that as
23. src/slsh.c: Prior to entering interactive mode, turn tracebacks
24. src/Makfile.in: LDFLAGS was not getting used.
25. doc/tm/: Some typos corrected (Jörg Sommer)
26. slsh/Makefile.in: slsh/doc/html/*.html gets installed in
Changes since 2.1.0
1. slsh/lib/print.sl: Only the first element of arrays such as
Float_Type[1,1,1,10] were getting printed.
2. src/slscanf.c: strings containing only whitespace were not parsed
properly by _pSLang_sscanf when %s was used in the format.
3. slsh/lib/readascii.sl: A flexible ascii data file reader.
4. src/slang.ver: Updated the linker version script
(mlichvar at redhat, com).
5. src/slang.ver: The wildcard for the SLANG2 symbols was picking up
the SLANG2.1.0 symbols. (mlichvar at redhat, com).
6. slsh/lib/readascii.sl: Added type and cols qualifiers. Updated docs.
7. src/slang.c: If auto_declare is non-zero, and a reference to an
undefined variable is made, that variable will be automatically
created and given static scope.
8. slsh/lib/autoload.sl: readascii added.
9. src/slrline.c: The redraw function was ignoring the application
installed update hook, disrupting the display when a redraw was
10. autoconf/configure.ac: -liconv was not getting added when creating
the iconv module on systems with a standalone iconv library.
11. slsh/lib/readascii.sl: Added "as_list" qualifier to return values in
lists rather than arrays.
12. src/slscanf.c: Added inf/nan support to sscanf.
13. src/slboseos.c: Before calling the hooks, push the error context
so that they will work in the presence of errors.
14. lib/slsh/tm/profile.tm: Documented the profile_* functions.
15. doc/tm/slang.tm: Added documentation about qualifiers.
16. src/slarray.c,modules/*.c: Use SLindex_Type instead of int for
indexing arrays. Currently SLindex_Type is typedefd as an int.
17. src/slang.c: Added SLang_pop_array_index to the API. Applications
should use this function instead of SLang_pop_int for getting
array indices. This new symbol is versioned at 2.1.1.
18. src/slstruct.c: SLang_pop_cstruct will now force SLang_Array_Type
objects to linear ones.
19. ./NEWS: Updated
20. slsh/lib/test_readascii.sl: Changed the "list" qualifier to
Changes since 2.0.7
1. src/slrline.c: SLrline_bol/eol functions were missing from the
2. src/slarray.c: An optional reference argument may be passed to the
where function to get the complement indices. That is:
i = where (foo, &j);
is equivalent to
i = where (foo);
j = where (not foo);
3. src/slexcept.c: SLerr_throw added to allow applications to mimic
the semantics of "throw".
4. src/slparse.c,slang.c: New short-circuit operators || and &&. Use
of the "orelse" and "andelse" constructs has been deprecated.
5. src/slsmg.c: SLsmg_write_wrapped_string and SLsmg_write_nstring
were broken for double-width characters. Updated demo/smgtest.c to
test these functions in the presence of such characters.
6. demo/smgtest.sl: Embedded some control characters in the
double-wide character string for testing the handling of them.
7. doc/tm/cslang.tm: Updated some of the documentation for the SLsmg
8. src/slstd.c,slang.c: Added new function intrinisc called "_$" that
expands embedded "dollar-escaped" variables.
9. src/sllist.c: Added __push_list/__pop_list functions that push list
elements to the stack or create a list from objects on the stack.
These functions may also be used as an alternative to
10. slsh/lib/structfuns.sl: Modified struct_combine to use __pop_list
instead of __push_list.
11. src/test/scircuit.sl used for regression testing of the
short-circuit operators was missing.
12. src/slang.c: Small memory leak involving method calls plugged.
13. src/slparse.c,slang.c,slstruct.c: Added support for embedded
assignments in structure definitions, e.g.,
X = struct { a = 4, b = 3, c = sin(PI/4)};
14. src/slang.c,slparse.c,slstruct.c: Added support for
"function-qualifiers", e.g,.
define plot_point (x, y)
set_color (qualifier ("color", "black"));
plot_point (2, 1; color="red");
See docs for more info.
15. modules/png.sl: Added gmin and gmax qualifiers to the
png_gray_to_rgb function.
16. src/kwhash.c: New keywords: "ifnot" and "then". The "ifnot"
keyword plays the same role as "!if", except the use of "!if" is
deprecated. Then "then" keyword is used in looping constructs as
described in #17.
17. src/slparse.c,src/slang.c: All looping constructs may be followed
either an "else" block, or a "then" block, or a combination of
loop (N)
if (foo)
break; % execute the else block if present
% This block executes if the loop ran to completion
% This block executes if the loop was broken prematurely
*** NOTE: This change broke backward-compatibility. For this
reason, support for the else clause was dropped". See #48 below.
18. slsh/scripts/slprof: Rewrote much of this script to make it more
friendly and useful.
19. src/sldisply.c: When checking for the equality of space
characters, it is only necessary to see see if their background
colors are equal -- the foreground color does not matter.
Miroslav Lichvar mlichvar at redhat, com.
20. modules/png.sl: A variable (bad_level) was undefined.
21. src/slparse.c: The meaning of constructs such as (a<b<c) has been
changed to have its mathematical meaning, namely ((a<b)and(b<c)).
Before, (a<b<c) was interpreted as (a<b)<c. Also, == and != now
have the same precedence level as <,<=,>,>= to permit, e.g.,
(a==b<c). Note that (a<b<....<c<d) is also defined as
22. src/slarray.c: New intrinsic: wherenot(x), which means where(not x).
23. src/slarray.c,slparse.c: [a:b:#n] may be used to specify a
floating point array with n elements running from a to b, inclusive.
24. src/slparse,slang.c: Fixed the bug where _NARGS was incorrectly
set in functions called via expressions such as (@A[i])(x).
25. src/slang.c,slarray.c,slparse.c,slstruct.c: References to
structure fields and array elements are now supported, e.g.,
&s.foo and &A[20].
26. slsh/slsh.c: Added '-e string' command-line option.
27. slsh/lib/profile.sl: Rewrote much of it to support both profiling
individual lines and functions.
28. slsh/scripts/slprof: Added 'calibrate' and 'lines' command-line
29. src/slang.c: Unsigned ints were sometimes pushed as signed ints.
30. src/slrline.c: Added a new public function called SLrline_move
that moves the cursor a specified number of columns.
31. slsh/lib/glob.sl: If a glob pattern does not include a path, the
returned list of files will nolonger be prefixed with "./", i.e.,
glob("foo") returns "foo" and not "./foo".
32. slsh/readline.c: If slsh_interactive_hook exists, it will be
called prior to going into interactive mode.
33. src/slrline.c: A completion mechanism was added. This works by
making a callback to a user or application provied hook that
returns a list of possible completions. This functionality is
available if SLrline_init has be called to add readline-specific
intrinsics to the interpreter. The slang code implementing the
completion hook is in slsh/lib/complete.sl.
34. modules/png.sl: Load the colormaps into the same namespace that
was used by png.sl (Mike Noble).
35. slsh/slsh.c: readline intrinsics were not getting initialized.
36. slsh/lib/rline/completion.sl: Avoid adding NULL to the completion
list when no completions are in the global or current namespace.
37. src/slerr.c: Added SLang_verror_va function. It is like
SLang_verror, except it takes a va_list argument instead of a
variable argument list.
38. slsh/scripts/slprof: If atexit exists, use it.
39. src/slwclut.c: Typo in is_posix_charclass (> instead of >=) was
causing the long form of posix character class names not to be
properly recognized.
40. src/slrline.c: SLrline_init was using SLfree instead of
SLang_free_slstring, causing a core-dump.
41. slsh/lib/slshrl.sl: Use slsh_get_doc_string defined in slshhelp.sl.
42. autoconf/aclocal.m4: Add support for rpath on OpenBSD.
43. src/slarray.c: Single element arrays specified via, e.g., [a:b:#1]
produced the array [b] instead of the "more" correct answer [a].
44. src/slexcept.c: __get_exception_info will NULL if no exception is
active. Previously it reported an unknown exception.
45. src/slang.c: If a finally-block threw an exception and then caught
it, the outer exception was getting lost.
46. slsh/lib/glob.sl: glob("*") nolonger matches files that begin with
".". A leading dot in a filename must be matched explicitely. A
similar change was made to glob_to_regexp.
47. src/slang.c,src/slexcept.c: An exception may be rethrown by using
"throw" without any arguments. This required support for multiple
48. src/slparse.c: The "loop-else" feature added in change #17 was
dropped because the change was not backwards compatible, changing
the meaning of connstructs such as
if (some_condition)
loop (N) {...}
"loop-then" is still supported. (Thanks go to Paul Boekholt for
picking up on this).
49. src/sldisply.c: If the terminal supports BCE, then ignore the
background color of space characters that occur as trailing
whitespace (Miroslav Lichvar).
50. src/slrline.c: Added additional rline intrinsic functions:
51. src/slrline.c: SLrline_init was using SLang_free_slstring
instead of SLfree. Also SLrline_set_point was using < instead of
> when comparing point to len.
52. src/slrline.c: Added rline_getkey and rline_input_pending
intrinsic functions.
53. src/slstd.c: If the "char" function is passed a negative integer,
byte-semantics will be used.
54. src/slrline.c: When browsing previous history items, the item that
is currently being edited will not be lost.
55. src/slrline.c: A new function called SLrline_open2 was added to
the API. It is like SLrline_open except that it associates a name
with the underlying SLrline_Type object and calls an interpreter
hook (rline_open_hook) with that name. This mechanism permits
the readline history to be saved to a file and then later retrieved.
56. slsh/lib/rline/*.sl: A few .sl files were added:
vikeys.sl: A simple vi-like emulation
emacs.sl: A emacs-like emulation
editfuns.sl: Some utility editing functions
history.sl: Functions to save/restore history
57. slsh/scripts/sldb: If the file was specified using a relative
path, prefix its name with the cwd to ensure that it loads.
58. src/slmath.c: Add "fuzzy" floating point comparison functions
feqs, fneqs, flteqs, fgteqs, which compare numbers using a
specified relative and absolute error.
59. slsh/readline.c: Readline objects were made available to the
60. slsh/scripts/svnsh, slsh/lib/sldb.sl: Added readline-specific
calls to enable the saving/loading of history.
61. src/slrline.c: Added rline_get_edit_width intrinsic.
62. src/slarrfuns.c: prod function added (Mike Noble).
63. src/slstrops.c: %b may be used in sprintf to specify a byte
conversion. This is equivalent to %c when UTF-8 mode is not in
64. src/slarrfuns.c: PROD_RESULT_TYPE was not getting defined on 64
bit systems (Brian McQueen)
65. src/Makefile.in,autoconf/Makefile.in: Now `make install` installs
the shared library but not the static one. Use `make
install-static` to install the static one.
66. autoconf/aclocal.m4: rpath support for netbsd
67. slsh/slsh.c: A preprocessor symbol may be added using -Dname
command-line option.
68. src/slstd.c: changed __is_numeric to return 1 if an integer, 2 if
a floating point, and 3 if complex.
69. src/slang.c: missing break statement in the handling of the
qualifier token. This bug manifested itself only when running
with slprof or sldb.
70. slsh/lib/cmdopt.sl: Functions to facilitate the processing of
command line options.
71. slsh/scripts/slprof: modified slprof to use the cmdopt interface.
72. slsh/lib/structfuns.sl: Enhanced the struct_filter function to
filter on specific array dimensions and to return a new structure
when given the "copy" qualifier.
73. src/slimport.c: Allow pathname in an import statement, e.g.,
74. src/slarrfun.c: Added minabs/maxabs functions.
75. lib/cmdopt.sl: Added support for type="str" qualifier. Also,
cmdopt documentation corrected.
76. src/slassoc.c: When resizing an associative array that had
elements deleted, the num_occupied field was not being properly
updated. This was causing the length of the array to be
incorrectly computed.
77. src/slproc.c: Added getpgrp,setpgrp,getgid functions.
78. src/slutty.c: In the getkey function, if a SIGINT caused
SLKeyBoard_Quit to be a non-zero value, the interrupt_hook was not
getting executed.
79. autoconf/Makefile.in: Tell the user to re-run the configure script
if it is more recent than the Makefile.
80. src/slstd.c: __is_numeric was not returning 3 for Complex_Type.
81. src/slexcept.c: Do not log traeback messages unless _traceback is
82. src/slclass.c: Added SLclass_patch_intrin_fun_table to the library
and modified the code in modules/ to make use of this function.
83. src/slang.c: SLang_Traceback is now a bitmapped variable, but
defined in a backward compatible manner. See slang.h and the
documentation for the _traceback variable for more information.
84. src/slang.c,slexcept.c: Change 83 required a small tweak to the testing of
traceback variable.
85. src/slparse.c: MAX_TOKEN_LISTS increased to 256.
86. src/slparse.c: Added a couple of #if..#endif constructs to avoid
compiling bos/eos hooks when the debug feature has been disabled.
(Tijs Michels tijs, michels at t-online, de)
87. src/slproc.c: The setpgrp function that was added in change #77
has been removed because on some systems it takes arguments, and
on others it takes none. It is also equivalent to setpgid(0,0),
so there is no net loss.
88. src/slutty.c: Set the FD_CLOEXEC flag on the /dev/tty file
89. src/doc/tm/cslang.tm: Changed the array examples to use
`SLindex_Type' instead of `int'. I also added a note about this
to the NEWS file.
90. modules/iconv-module.c: a new module (Dino Sangoid).
91. src/slsig.c: SLsignal was used instead of SLsignal_intr. The
difference is that SLsignal_intr interrupts system calls, which is
a better choice for the interpreter.
92. src/slproc.c: added setsid intrinsic
93. src/slarray.c: [a:b:#1] was producing [NaN] instead of [a].
94. src/sldbcore.c: The debugger was not stopping upon SIGINT.
95. src/sltermin.c: Added _pSLtt_tifreeent to free the SLterminfo_Type
object and avoid a memory leak (Miroslav Lichvar
mlichvar at redhat, com)
96. slsh/lib/cmdopt.sl: Add bor=FLAG and band=MASK qualifiers to support
bitmapped options.
97. modules/onig-module.c: New module that wraps the oniguruma regular
expression library.
98. src/slang.c: If a file defining a namespace was loaded, a
duplicate namespace error was getting generated when also loading
a byte-compiled version of the same file.
99. src/slclass.c: In _pSLclass_copy_class, a possible NULL return
value by alloc_class_slot was not being handled.
Changes since 2.0.6
1. src/slmath.c: if a double precision array was passed to nint, it
was treated as a single precision one leading to a core dump.
2. src/sldisply.c: The Is_Fg_BGR variable was re-introduced and a typo
affecting it was corrected.
3. src/slinclud.h: Do not include malloc.h on FreeBSD (Renato Botelho
garga at freebsd, org).
4. doc/tm/cslang.tm: Changed a couple of occurances of "unsigned char"
to "SLtype". (Doug Burke dburke at head, cfa, harvard, edu)
5. doc/tm/rtl/list.tm: Documentation changed to indicate that the
third parameters to list_append/insert are optional. (Doug Burke).
6. src/slwcwidth.c: Added a new function to the API called
SLwchar_set_wcwidth_flags. This may be used to force
SLwchar_wcwidth to 1 for double width characters. Such a feature
is sometimes needed for fixed fonts that treat single and double
width characters the same.
7. slsh/lib/slshrl.sl: The readline-massage hook was interpreting
lines beginning with a '.' as RPN.
8. slsh/lib/sldb*.sl: The debugger was not stopping upon errors
generated by the deprecated function verror.
9. src/slparse.c: "++()" was flagged by the parser as an error, but no
error message for it was being generated.
10. src/slang.h: #if HAVE_LONG_LONG changed to #ifdef HAVE_LONG_LONG
11. src/slsmg.c: Return right away if SLsmg_write_chars is told to
write 0 characters. Also a bug fixed in the logic of this routine
involving the test for overwriting the second half of a double
width character.
12. src/slrline.c: Finished the UTF-8 support by the readline functions.
13. slsh/*.c: Added slsh_get/set_prompt_hook functions for setting of
the slsh command-line prompt. (Douglas Burke)
14. src/sltoken.c: Added additional string representations for tokens
so that some error messages will not appear to be so cryptic.
15. src/sltoken.c: _pSLparse_error: Use the line number of the input
stream if the linenumber associated with a token is unknown.
16. src/slparse.c: Inline arrays and lists are allowed to have a
trailing comma, e.g., [1,2,] is the same as [1,2].
17. doc/tm/rtl/type.tm: typo in example for atof corrected (Doug
18. Improvements for building on DOS/Windows (Mike Noble):
* The various mkfiles/makefile.all now include a clean: target
* The top-level mkfiles directory now includes 3 new files:
A build.sh script, which auto-generates the Makefiles
(using mkmake) and commences a build, similar to the
build.bat script which was already there (and which I
tweaked slightly).
Seed makefile.dos and makefile.sh scripts, which get copied
to the root of the S-Lang distro when either build.sh or
build.bat are run. This makes it easier to build
everything at once, or clean, etc, from the top of the
* A few new paragraphs in INSTALL.pc
* In the various mkfiles/makefile.all, "CFLAGS +=" changed to
"CFLAGS =" to avoid nmake 1.5 problems.
* Simplified the module build targets in modules/makefile.all,
and made it much easier to add new modules in the future.
19. Added module support for cygwin. This involved a few minor
changes to the Makefiles and aclocal.m4 (Mike Noble)
20. slsh/slsh.c: Brief copyright message displayed when started up in
interactive mode.
21. src/slarray.c: Improved support for mixed-type inline arrays:
NULLs supported (["foo", NULL]) where it makes sense, and
type-promotion rules are used to determine the resulting type when
concatenating mix-type arrays (["foo"], NULL, ["bar\0"]);
22. src/slrline.c: SLrline_close was not freeing the history creating
a memory leak.
23. src/keywhash.c: Removed obsolete and unused "do_while" keyword,
and regenerated keywhash.c
24. doc/tm/slang.tm: List of keywords updated to reflect the actual
keywords used.
25. modules/mkfiles/makefile.all: Updated VC-specific LINK_CMD macro
to support the changes outlines in 18 above (Dino Sangoid).
26. src/slang.c,src/slboseos.c: Added hooks for entering and leaving a
function. The beginning-of-statement and end-of-statement hooks
were found insufficient to support a debugger support. See the
documentation for _bofeof_info for more information.
27. slsh/lib/sldbcore.sl: Modified to use the bof/eof hooks introduced
in #26.
28. Various documentation tweaks.
29. src/slboseos.c: Changed the beginning-of-function handler to
include the filename.
30. src/slsh/lib/require.sl: Removed the "feature not provided" message.
31. src/slrline.c: Tabs were not being expanded properly when the
window was horizontally scrolled. Also, the last column of the
display is not used in case the terminal has automatic margins.
32. lib/sldbcore.sl: The debugger's "finish" command was not quite
working as it should have.
33. lib/sldbcore.sl: Added an sldb_initialize function that can be
overridden by the debugger.
34. src/slposio.c: Made changes to allow arbitrary objects to be
attached to file descriptors.
35. src/sl*tty.c: Set SLKeyBoard_Quit to 0 in the init_tty routines.
36. modules/socket-module.c: A new module that defines various socket
functions. This required additions to the configure script and
related files.
37. src/slstrops.c, slsh/readline.c: Removed statements that were never
38. src/sltypes.c: foreach(X) where X is String_Type produces a
sequence of UChar_Type objects. This is consistent with
typeof(X[i]). Also added "using" forms to specify char or
byte-semantics: foreach (X) using ("bytes"|"chars"). The default
is byte semantics. Updated the corresponding docs.
39. src/slang.h: Added SLang_push/pop_wchar macros.
40. src/sldisply.c: This file was failing to compile with Kanji
support enabled. Kanji is unsupported in slang-2.
41. src/slcurses.*: Alt-character set handling was not working. Once
again, I strongly encourage you to modify your programs to use the
native SLsmg routines instead of the partial curses emulation hacks.
42. slsh/lib/sldbsock.sl: New file to implement socket-based debugger.
43. slsh/scripts/sldb: Added --pid <pid> option for debugging a
separate process via the socket-based debugger interface.
44. src/slang.c: If a try-finally block contained a return statement,
the function would sometimes continue after the finally block.
45. modules/termios-module.c: Added tcget/seti/ospeed functions for
setting baudrates of termios structures. Also added CRTSCTS
constant to the module.
46. src/slclass.c: If an application calls SLang_pop_mmt with a
non-MMT type specified, a SL_Application_Error exception will be
47. src/slang.c: A misplaced return statement was introduced by #44
48. src/slparse.c: Allow the "finally" keyword to be followed by a
colon, e.g., try foo; finally: bar;
49. src/sltoken.c,slang,c: "Dollar" and long-longs were not being properly
handled in byte-compiled files.
50. src/test/Makefile: Changes were made to test byte-compiled
versions of the test scripts.
51. modules/socket-module.c: added #include <time.h> to get it to
compile on mac osx.
52. src/slmath.c: The data field was not properly used by the nint function.
53. modules/select-module.c: Call SLang_handle_interrupt when the
select system calls gets interrupted.
54. src/slposio.c: Add == and != operators to FD_Type objects so that
fileno(stdin)==fileno(stdin) works as expected.
55. src/slarray.c: wherefirst and wherelast were not working with
empty arrays.
56. src/slmisc.c: SLang_guess_type was failing on numbers containing a
leading '+' sign.
57. src/slimport.c: The name of the SLANG_MODULE_PATH environment
variable may be changed in src/Makefile.
58. src/slrline.c: Added a delete-to-beginning-of-line (delbol)
function and bound it to ^U.
59. slsh/Makefile.in: $(CFLAGS) added to the final link line. (Nelson
H. F. Beebe)
60. src/slmath.c: Avoid the use of function pointers to standard math
functions to support a wider range of compilers.
61. autoconf/aclocal.m4: IRIX compilers do not require "-K pic"
62. autoconf/configure.ac: Probe for socklen_t.
63. */Makefile.in: Added support for the $LIBS env variable
64. src/slerr.c: Added fflush(stdout) to SLang_vmessage.
65. slsh/lib/sldbcore.sl: The eof hook was improperly handling the
debugger step.
66. src/slarray.c: Optimization added for index-array operations on
double, float, and int arrays.
67. src/slarith.c: Optimization added for boolean operations between
68. lib/structfuns.sl: Typo in the documentation corrected (Doug Burke)
69. lib/*.sl, lib/tm/*.tm, lib/help/*.hlp: Documentation for the
functions in *.sl has been moved to *.tm and integrated into the
help system.
70. src/slwclut.c: a missing "default" label in a switch statement was
causing invalid character class specifiers to pass.
71. src/slang.c: Optimization added for struct method calls. In
addition, linenumber information was propagated for such function
calls to permit better interaction with the debugger.
72. slsh/lib/profile.sl: profile_on was not being called with an
Changes since 2.0.5
1. src/slmath.c: nint was returning the wrong value for numbers 0.5<=x<1.
2. src/slarrfuns.c: sum(Double_Type[0,0],1) was generating an access
3. src/*.c: Removed some unused variables.
4. src/slcommon.c: '=' instead of '==' was being used in the
utf8_enable function.
5. doc/tm/*.tm: corrected some documentation typos (Nelson Beebe,
beebe at math, utah, edu).
7. src/sltime.c: times function was returning a structure containing
incorrect values (cstawarz at head, cfa, harvard, edu).
8. src/sldisply.c: Writing a multi-byte character to the lower-right corner
of terminals with automatic margins was not working (Vladimir
Nadvornik nadvornik at suse, cz).
9. src/slwclut.c: Allow \\^ in character set specifications to
represent a literal '^'. See the documentation for strtrans for
more information.
10. src/slcommon.c: Some systems that have nl_langinfo do not have
CODESET. The configure script now checks for both.
11. autoconf/Makefile.in: Added ".PHONY" and "check" targets.
12. src/slstrops.c: "%c" in an sprintf style format descriptor made to
work with wide-character arguments. It is nolonger necessary to
use "%lc".
13. src/slmisc.c: Semantics of "\x{...}" changed to be more useful
when the interpreter is running in non-UTF8 mode. Previously,
"\x{...}" always expanded to a UTF-8 encoded string, regardless of
the UTF-8 mode. Now, in non-UTF8 mode, \x{...} will expand to a
UTF-8 encoded string when "..." consists of 3 or more characters,
and for less than 2 characters, it specifies a byte. The behavior
in UTF-8 mode has not changed: \x{...} always returns a UTF-8
encoded string. The upshot is that "\x{FF}" will produce the byte
0xFF when not in UTF-8 mode, and the 2 byte UTF-8 encoding when
run in UTF-8 mode. "\x{FFF}" will expand to the apropriate UTF-8
encoding regardless of the mode. Note that the behavior of the
non-brace form such as \xAB has not changed--- the result is still
a single byte 0xAB.
14. src/slmisc.c: \u{...} may be used in string literals to specify a
unicode character, regardless of the UTF-8 mode (on or off).
Previously, \x{...} had this behavior. (See #13).
15. src/test: Tests are run in both UTF-8 and non-UTF-8 modes.
16. src/slvideo.c: djgpp version of write_attributes was broken (Gisle
Vanem giva at bgnett, no)
17. slsh/readline.c: Call SLang_handle_interrupt if a read was
interrupted by a signal. This will ensure that signal handlers
will execute at the prompt.
18. src/sldisply.c: Added a check for buffer-overflow by tgetstr on TERMCAP
based systems.
19. autoconf/: Updated config.sub and config.guess
20. slsh/readline.c: Added slsh_readline_noecho function. Also, strip
trailing newline from string returned by slsh_readline* when in
--no-readline mode.
Changes since 2.0.4
1. slsh/slsh.c: Error messages were not being printed if an error
occured during an atexit hook.
2. src/slstrops.c: Use _pSLstring_bytelen instead of strlen to get the
number of bytes.
3. src/slstring.c: Several tweaks were made for faster string handling.
4. src/slparse.c: A negative integer literal raised to a power was not
being properly parsed.
5. doc/tm/cslang.tm: Documentation updated to reflect the changed
SLang_pop_double API, as well as other C API documentation
tweaks (Doug Burke).
6. doc/tm/rtl/type.tm: Documentation for "integer" changed to indicate
that integer throws a SyntaxError exception if the string does not
have a valid syntax. (Joshua Kempner jkempner at bowdoin, edu)
7. src/slmath.c: Added nint (round to the nearest integer) intrinsic.
8. src/slarray.c: NULL arguments to array_map were not getting
converted to arrays of NULL.
9. src/slang.h: Added SLclass_set_length_function for setting the
length method of application-defined classes.
10. src/slang.ver: A versioning script is used to restrict the
visibility of the _pSL* symbols. (Alastair McKinstry
mckinstry at computer, org)
11. slsh/slsh.c: Ignore SIGPIPE.
12. src/slutf8.c: If SLutf8_decode is passed an inproperly encoded
UTF-8 sequence, then set the target of the SLwchar_Type pointer to
the ascii value of the byte, in addition to returning NULL.
13. src/slposdir.c: Added "access" intrinsic.
14. src/slsmg.c: Fixed a buffer-overflow in the SLsmg_write_chars
15. src/slsig.c: A missing return statement was causing sigsuspend to
fail when called with 0 arguments.
16. src/slarray.c: Added wherefirst and wherelast intrinsics.
17. src/slang.c: Inline attribute removed from some functions that
were failing to be inlined by the compiler.
19. src/slstdio.c: SLang_get_fileptr added to permit an application to
get the FILE* object associated with a SLANG_FILE_PTR_TYPE.
20. src/slang.c: It was failing to compile when
21. src/sltime.c: strftime intrinsic added.
Changes since 2.0.3
1. slsh/scripts/svnsh: Empty lines were not being handled.
2. src/slutf.c: Incorrect bracketing in the IS_ILLEGAL_UNICODE macro.
(johannes figgen at flextronicssoftware, com)
3. src/sllist.c: A prev link was not always getting set by the list_insert
4. doc/tm/rtl/eval.tm: Tweaked the documentation for the eval function
(Mike Noble mnoble at space, mit, edu)
5. modules/png.sl: Make sure the scale factor is a float and not an int.
6. src/sltime.c: The tic/toc functions were changed to use
gettimeofday or its equivalent. This change results in greater resolution
for these interval timers, but not necessarily greater accuracy.
Also, previously the tic/toc functions measured the time used by
the current process but now they measure elapsed time. The old
behavior is still available via _tic/_toc.
7. slsh/lib/profile.sl: The above change made it possible to create a
more accurate profiling tool. The functions in this file are used
by the slsh/scripts/slprof profiling tool.
8. src/slarith.c: Missing break statement caused signed long long
values to be printed as unsigned long longs.
9. tm/doc/cslang.tm: Two small typos corrected (Alastair McKinstry
mckinstry at computer, org)
10. autoconf/aclocal.m4: Support for GNU Hurd and GNU KFreeBSD /
KNetBSD systems (Alastair McKinstry)
11. src/slstrops.sl: Added support for long long to the sprintf
intrinsic function (e.g., sprintf ("%lld", 1234LL))
12. modules/png-module.c: 8 bit gray scale images were being written
out as 8 bit images with an alpha channel. Bug fixed and version
bumped to 0.1.1.
Changes since 2.0.2
1. src/slang.c: Optimization of multiple assignment statements involving
binary operators was generating bad byte-code causing a run-time
error. In order to see this effect, code such as
w = 3*t+s;
x = 2*z+1;
y = z*z;
would have to be written as a as multiple assignment statement:
(w,x,y) = (3*t+s, 2*z+1, z*z);
2. src/sltypes.c: Added SLang_push_function to complement
3. src/slkeymap.c: SLkm_define_slkey implemented. It was already
declared in slang.h but never implemented until now.
Changes since 2.0.1
1. src/slang.h: Forgot to bump SLANG_VERSION to 20001.
Changes since 2.0.0
1. modules/png.sl: png_gray_to_rgb was missing an assignment after
2. slsh/lib/print.sl: Ignore SIGPIPE while in the pager.
3. src/slang.c: SLang_peek_at_stack1_n was broken.
4. src/slsmg.c: If the cursor is left outside the visible display area
during SLsmg_refresh, then "clip" its position to the visible area.
5. src/slarray.c: Typo (= vs ==) was corrected in the array_eqs_method
function. (Dino Sangoid)
6. src/slmath.c: Use IS_NAN macro instead of isnan (Dino Sangoid)
7. src/mkfiles/makefile.all: Added dll support for the mingw32 build
(Marko Mahnic; marko mahnic at email, si)
8. src/slang.c: Removed a while loop that did nothing. (Dino Sangoid)
9. src/mkfiles/makefile.all, src/slconfig.h, src/slposdir.c: Support
added for 16 bit systems using watcom C (Dino Sangoid)
10.doc/tm/*.tm: Some spelling errors corrected (Mike Noble)
11. src/slang.c, src/slnspace.c: There was a conflict between private
and static namespaces that arose when _implicitly_ loading a file
into a specified namespace. Resolving this issue involved the
complete separation of the private and static namespaces.
12. The _get_frame_info function now provides the name of the active
13. src/sldisply.c: Line drawing characters were not activated when
xterm was started in locale mode. Escape sequences were tweaked.
(Alexander E. Patrakov, patrakov at ums, usu, ru)
14. slsh/lib/print.sl: If an element of an array of structs is NULL
then print the element as NULL.
15. modules/varray.c: typo was preventing mmapping of a file from
working properly.
16. slsh/lib/*.sl: changed "static" to "private" to protect the
functions when loaded into a namespace.
17. autoconf/configure.ac: Add tests for atoll and strtoll. Some
versions of MacOS X do not have atoll.
18. modules/png.sl: Added png_get_colormap_names and changed
examples/colormap.sl to use it.
19. src/slarrfun.c: Ignore _NaNs in min/max functions.
20. slsh/lib/sldbcore.sl: Added several aliases to the debugger:
b(reak), c(ont), d(elete), h(elp), l(ist), n(ext), p(rint),
pp(rint), q(uit), s(tep)
Changes since 2.0.0 pre-release 8
1. src/slang.c: Under some conditions, no line number information was
being reported for stack underflow errors.
2. lib/sldbcore.sl: Missing return value was causing a stack-underflow
error. (Paul Boekholt)
3. src/slmisc.c,src/sltoken.c: In UTF-8 mode, an escaped sequence of
the form "\xAB" is interpreted as a byte. Previously, it was
interpreted as a wide character. To encode a wide character using
an escape sequence, use braces ("\x{AB}").
4. src/slstd.c: The putenv function now throws an OSError exception
upon failure. Previously it threw a RunTimeError.
5. src/slerr.c: Added NamespaceError exception and changed some of the
namespace specific function to throw this exception instead of a
RunTimeError exception.
6. src/slang.h: SL_Domain_Error was missing from the file.
7. src/slerrno.c: If errno_string is called without an errno argument, the
current value of _pSLerrno_errno will be used.
9. src/sltime.c: The "time" functions were changed from using an
unsigned long to a long to match time_t.
10.src/slvideo.c: Corrected a typo in the non-Unix/non-VMS specific
SLtt_utf8_enable function.
Changes since 2.0.0 pre-release 7
1. slsh/lib/structfuns.sl was missing from the distribution.
2. src/sldisply.c: SLtt_Blink_Mode set to have a default of 0 instead
of 1.
3. slsh/slsh.c: Add -t option, which causes slsh_main (if defined) to
not be executed.
4. src/sltoken.c:SLang_load_object: Do not reset the line_num field.
This gives the line numbers in slsh interactive mode some meaning.
5. src/slsh/lib/slshrl.sl: Usage message for "exit"
6. src/slvideo.c: SLtt_utf8_enable function added
7. src/slexcept.c: If tracebacks are turned off, make sure that the
line number field in exception objects is meaningful.
8. src/slang.c: SLang_peek_at_stack1_n was not working. (Mike Noble
mnoble at space, mit, edu).
9. src/slang.c: Small optimization tweak when dealing with a single
array index.
10. src/slposio.c: Jorge Gonzalez, jgonzalez at atsautomation, com
found and fixed a leak in the "read" function.
11. modules/png-module.c: New module to read/write png files. It
includes about 20 colormaps. See examples/colormap.sl.
12. src/slclass.c: SLang_get_int_type returns the SLtype for the
integer with the specified number of bits.
13. src/slarray.c: array_shape intrinsic function added as an
alternative to array_info for getting the dimensionality of an
14. src/slospath.c: new intrinsic: path_basename_sans_extname
15. src/, slsh/: A number of win32 tweaks to support dynamic linking under
windows. (Dino Sangoid; sangoid at lloydadriatico, it).
16. src/slstruct.c: Check for duplicate fields in a struct. (Doug
Burke; burke at cfa, harvard, edu).
17. src/slarrfun.c: New matlab-like functions "any" and "all". (Doug
Burke; burke at cfa, harvard, edu).
18. src/slang.c: Calling SLang_restart will also clear the slang error
state. There is no need to call SLang_set_error(0) after calling
19. src/sltoken.c: Allow the evaluation of '#if (expr)' when created a
pre-parsed file (.slc).
20. src/slang.c: If a function defined in the currently loading
file is to also be autoloaded into another namespace, and that
namespace is not current one, then make sure an anonymous
namespace is being used.
21. src/slang.c, slboseos.c: Experimental support for a debugger. New
22. slsh/lib/sdb*.sl: An experimental source code debugger based upon
a Dino Sangoid's jed debugger.
23. src/slang.c: The "_pSL" prefix was dropped from a few file-local
variables. Also calls to _pSLclass_push_* were changed to calls to
file-local specific versions of the functions.
24. src/slsh/mkfiles/: A couple of win32 icons for slsh were provided
by Marko Mahnic (marko. mahnic at email, si)
25. src/slarray.c: If typeof(t)==DataType_Type, then put back the old
behavior of array creation via t[N].
26. doc/tm/slang.tm: The slang manual has been updated for version 2,
with numerous typos corrected.
27. slsh/scripts/sldb: New script that invokes the debugger.
28. src/slstruct.c: Added _is_struct_type. This works like
is_struct_type excepted if the object is an array, it returns
information about the array elements.
29. slsh/lib/print.sl: The "print" defined by this file may be used to
print arrays, structures, lists, etc. It is also used by sldb's
pprint command.
Changes since 2.0.0 pre-release 6
1. The _traceback variable was being ignored. As a result, error
messages were more verbose than requested.
2. I fixed the negative indexing issues and made such indexing much
more consistent. Before it was possible to index the first through
last elements of an array using the index [0:-1]. However, there
were too many inconsistencies associated with this feature.
Negative indices are still supported but in a much more consistent
fashion. See UPGRADE.txt for more details.
Changes since 2.0.0 pre-release 5
0. src/slang.h+others: I created a new typedef in slang.h representing
array indices (SLindex_Type). This is used in the SLang_Array_Type
structure. Previously the affected fields were ints. For backward
compatibility, SLindex_Type is defined as an int. This change was
made with an eye to the future when 64 bit platforms become more
common with physical memory such that one wants to index arrays
with more than MAX_INT elements per dimensions (the current
1. src/slarith.c: missing comma in a code block specific to 64 bit systems
prevented compilation.
2. src/: OS/2 specific patches.
3. src/mkfiles/makefile.all: Added some ranlib commands for the mingw32,
cygwin, and EMX compilers.
4. */mkfiles/makefile.all: Add TOOL_PREFIX variable to support
5. slsh/slsh.c: win32 specific changes to get path to slsh.rc via
the GetModuleFileName function (DINO SANGOI (SANGOID at lloydadriatico, it)).
6. slsh/mkfiles/makefile.all: Corrected the values of the SLANGINC and
SLANGLIB variables.
7. src/slstd.c: atoll intrinsic was not getting defined. (Doug Burke
(dburke at head-cfa, cfa, harvard, edu)).
8. src/test/longlong.sl: Add test for atoll (Doug Burke)
9. src/slerr.c: SLang_set_error: Allow an error to be cleared but not
changed to another value in the presence of an error.
10. src/slarray.c: Allow a 1-d integer array to always address a
multidimensional array. Not just "sometimes".
11. slsh/lib/arrayfuns.sl: local variable a was multiply defined in
reverse function.
12. src/slpack.c: Add support for long long and 64 bit types. Also
'z' specifier added as an alternative to 's'.
13. src/slstdio.c: Previously, fread(&v,Char_Type,n,fp) would
assign a BString_Type object to v if n>1 or Char_Type if n==1.
Now, for consistency it returns Char_Type[n] for n > 1. To get
the value as a binary string, use fread_bytes. This change is not
backwards compatible and may break code that relies upon the old
behavior. See UPGRADE.txt for additional information.
14. src/slrline.c: A silly typo prevented multiple instances of
readline objects.
15. slsh/: New intrinsic: slsh_readline. This allows a script to get
input from the user using the readline interface.
16. slsh/scripts/svnsh: A simple shell for interacting with an SVN
17. src/slang.h: The SLANG_MODULE macro was incorrectly defined when
compiled with C++.
18. src/slkeymap.c: A small memory leak was found by Gilles Mazoyer
pgid at free, fr.
19. src/slarith.c,...: Some problems were found on 64bit big-endian
machines. Correcting this involved adding new functions to the
interface long and short intrinsic constants.
20. src/slang.c: Inside a finally block, loops were not working if the
exception handler issued a break or return statement.
21. src/slrline.c: On a 64bit big-endian system a SEGV would result
when inserting text.
22. configure: CFLAGS added to the ELF_CFLAGS variable. LDFLAGS added
to the ELF_LINK variable.
23. src/slposdir.c: hardlink intrinsic added.
24. src/slexcept.c: "function" field added to the exception object.
25. src/slang.c: The way line number information is stored has been
changed. Now it is nolonger necessary to get line number
information by setting the _debug_info variable. In the process I
tried to make the error messages somewhat more useful.
26. src/slang.h: SLvsnprintf and SLsnprintf functions made public
Previously these were _pSLvsnprinf and _pSLsnprintf. (Dino Sangoid).
27. src/slang.c, _slang.h: Bytecodes were made enums instead of
preprocessor symbols.
28. src/slang.h: External symbols have been prefixed with SL_EXTERN to
facilitate the construction of a slang DLL on windows. When
compiling against the slang DLL, be sure to define SLANG_DLL.
(Dino Sangoid).
29. src/sllist.c: Added foreach method to lists.
30. src/slsmg.c: Experimental feature: If rendering a character string
that contains an character sequence of the form 'ESC [ x m', or
'ESC [ x ]', where x represents a decimal integer, then the
current color will be switched to the value of x. If x is omitted
(ESC[m) then the color will be set to the color active at the time
of the function call.
SLsmg_set_color (1);
SLsmg_write_string ("This is a \033[123mnew\033[m feature");
is equivalent to:
SLsmg_set_color (1);
SLsmg_write_string ("This is a ");
SLsmg_set_color (123);
SLsmg_write_string ("new");
SLsmg_set_color (1);
SLsmg_write_string (" feature");
By default, this feature is turned off but may be turned on via
SLsmg_embedded_escape_mode (1);
Although this special color-changing-byte-sequence looks like an
ANSI escape sequence, the semantics are very different.
31. doc/tm/rtl/type.tm: The "string" function was documented as
returning an integer. (Doug Burke)
Changes since 2.0.0 pre-release 4
0. src/*: For POSIX compliance, all _SL* symbols were changed to
_pSL*. Change suggested by Alastair McKinstry. If you experience
a linker error such as "undefined symbol: _SLChg_UCase_Lut" after
upgrading, then you will have to recompile your application.
1. src/slstring.c: Bug fix. For some strings, a substring would
produce the same hash as the full string. As a result, the
substring was not being properly generated.
2. src/slerr.c: For applications not using the interpreter,
_pSLerr_init was not getting called. As a result, the error-codes
were not getting initialized.
3. src/slsmg.c: Bug fix affecting SLsmg_Newline_Behavior (Thomas
4. src/doc/tm/rtl/strops.tm: typo caught by Doug Burke.
5. src/slstd.c: added atoi, atol, atoll as simple wrappers around
corrsponding standard library functions--- same caveats apply.
6. src/slstd.c: New intrinsics: add_doc_file, get_doc_files,
set_doc_files. These functions facilitate the addition of
documentation via a standard mechanism across all apps using the
7. slsh: Interactive support with readline-editing added to slsh. By
default, the slang library readline functions are used. If you
want GNU readline, then run configure with the appropriate option.
(This feature is due to Mike Noble, mnoble at space, mit, edu).
8. slsh: A man page for slsh (Rafael Laboissiere, rafael at debian, org).
9. src/slwclut.c: No provision was allowed for backslashes in ranges
that also permitted character classes.
10. slsh/mkfiles/makefile.all: New file for non-unix systems.
(DINO SANGOI (SANGOID at lloydadriatico, it)).
Changes since 2.0.0 pre-release 3
1. New intrinsics: array_swap, array_reverse
2. src/slrline.c:SLrline_open: If the display width argument is 0, set
it to 80.
3. sldisply.c: Initialize SLtt_Screen_Cols/Rows to (80,24) instead of
4. src/slparse.c: Expressions such as &s.foo and &s[0] are flagged as
unsupported at parse time.
5. src/slimport.c: A module may now be imported into more than one
namespace. See modules/README if you are a module writer.
6. slsh/Makefile.in, modules/Makefile.in: Made changes so that
nothing gets compiled during the install step.
7. src/slimport.c: If "import" is called without a namespace argument,
the current namespace will be used. If the current namespace is
anonymous, the global namespace will be used.
8. slsh/lib/require.sl: The provide/require functions have been
changed to take a namespace argument.
9. doc/tm/slang.tm: Added section on operator overloading for
user-defined types.
10. doc/tm/tools/fixtxt: a jed-script to repair the text files
generated by the linuxdoc sgml2txt program.
11. doc/tm/slang.tm: Corrected some typos spotted by Doug Burke.
12. src/mkfiles/makefile.all: DOS/Windows: The response file was not
being properly generated (SANGOI DINO (SANGOID at lloydadriatico, it)
13. src/slang.c: The autoload function may be used to load a file into
a namespace. (Based upon an idea from Jörg Sommer (joerg at alea,
gnuu, de)
14. src/slstring.c: New hash function (from Bob Jenkins-- see
See http://burtleburtle.net/bob/hash/evahash.html)
15. src/slassoc.c: rewritten to use double hashing.
Changes since 2.0.0 pre-release 2
1. autoconf/aclocal.m4: "if [...]" replaced by "if test ..." (Lloyd
2. src/slsearch.c: BM searches for a string with the same length as
the string to be searched was failing.
3. slsh/scripts/jpegsize: New demo script that finds the dimensions of
jpeg-encoded images.
4. src/slstd.c: Added _slang_install_prefix intrinsic variable.
5. src/slboseos.c: New file. This file allows to define callback
functions that will be called at the beginning (BOS) and end (EOS) of
every statement executed by the interpreter.
6. slsh/lib/stkcheck,sl: The code in this file makes use of the new
BOS/EOS hooks to display lines in a source file that leave
something on the slang stack.
7. examples/profile.sl: This file defines a few functions that take
advantage of the BOS/EOS hooks to profile slang code.
8. src/slarrfun.inc: sum and cumsum tweaked to use a "compensated
summation" technique to reduce the effect of roundoff and
truncation errors.
9. src/slmisc.c: SLatoi("h") was producing 0, and not an exception.
10. src/slmath.c: On VMS, slang is compiled with IEEE support (Jouk
11. src/slassoc.c: Rewrote the implementation to use a double hashing
Changes since 2.0.0 pre-release 1
1. slsh/lib/require.sl: Protect the Features variable against multiple
2. src/*.c: VMS-specific patches from Jacob (=Jouk) Jansen.
3. src/slsearch.c: non-UTF-8 case-insensitive searches were not working.
4. src/SLwchar*.c: SLwchar_xxxx functions will use the current locale
if UTF-8 has not been enabled for the interpreter.
5. src/sldisply.c: The display of double-wide unicode
characters was not working properly under some conditions.
6. src/slsmg.c: If a double wide character is being displayed, then if
a character is written to either of the cells occupied by the
double wide character, then the opposing cell will be overwritten
with a space.
7. src/sltoken.c: Characters specified as 'x' where 0 !=(x&0x80) were
not being properly parsed.
8. src/aclocal.m4: --without-foo was not working.
9. src/slstrops.sl: Fixed an access error in the "string_match"
Changes since 2.0.0 pre-release 0
1. src/slpath.c: slpath_dirname on VMS was failing to include the
closing "]" in its return value.
2. src/slprep.c: A comment in a slang "#ifdef" directive would cause
an infinite loop.
3. src/slarray.c: An integer array such as [a:b:c] where a>b and c>b was being
improperly computed.
4. src/slparse.c: Function calls with missing arguments was not being
properly handled, e.g., func(,);
5. src/slang.h, src/slclass.h: SLclass_set_foreach_functions added.
6. src/slcurses.[ch]: changes added to support UTF-8 (Adrian Colley)
7. src/Makefile.in: $(prefix)/doc changed to $(prefix)/share/doc
(Adrian Colley)
8. src/sldisply.c: Missing "break" added to tt_sprintf (Andrew V.
9. src/slang.c: SLang_peek_at_stack_n and SLang_peek_at_stack1_n
functions added to peek deeper into the stack (Mike Noble)
10. src/slang.c: The actual name of the local variable is used in the
traceback messages.
11. src/slsig.c: Support for the signals added to the
interpreter. The new intrinsics include: signal, sigsuspend,
sigprocmask, alarm.
12. src/slcommon.c, slang.h: When system calls are interrupted, a set
of "interrupt" hooks may be called. The return values of the
hooks determine whether or not the system call is restarted.
13. src/slang.c: If a string has a $ suffix, then
variable name expansion will take place on the string, e.g., "$CC"$.
14. src/sldisply.c: misc patches (optimization and buffer
overflow) (Andrew V. Samoilov)
15. src/slprep.c: #<whatever> was not working (Paul Boekholt).
16. src/sldisply.c: Applied a patch from Andriy I Pylypenko dealing
with tgetstr on termcap-based systems.
17. src/slcurses.c: combining character support added to curses
emulation (Adrian Colley)
18. src/slsmg.c: New function SLsmg_strwidth returns the displayable
width of a character string assuming it will be displayed at the
current position.
19. src/slstrops.c: string_match and string_match_nth work in terms of
byte-offsets, not character offsets. New intrinsics: strbytesub
and substrbytes that substitute a byte and return a byte sequence,
20. src/slarray.c: If A is a string, the A[n] returns a UChar_Type.
Indexing a string using array notation uses byte-semantics.
21. src/slang.h: Tracing messages were being queued instead of
processed right away.
22. src/slcommon.c: SLutf8_enable will use nl_langinfo if available.
23. src/slstdio.c: new intrinsic: fputslines
24. src/slerr.c: Explicit CRs (\r) removed from error and message
handling routines.
25. modules/: smg-module.c renamed to slsmg-module.c, with similar
name changes to the module symbols. Also, for each xxx-module.c, a
new xxx.sl was added to be installed in the slsh install-dir so
that slsh's "require" will pick up the specified module.
Changes since 1.4.9
0. There have been many changes for the version 2 release. See NEWS
and UPGRADE.txt for some of the changes. The ones listed here were
to appear in 1.4.10, if released. Version 2 contains these changes
and many more.
1. src/slang.c: Test for local variable stack overflow was using >
instead of >=.
2. src/slarray.c: Fixed a bug that prevented 7 dim arrays from being
indexed. Similar problem to #1 above: > vs >=.
3. src/slassoc.c: The following caused a segv:
X = Assoc_Type[Int_Type]; X["foo"] = [1:10];
Now a type-mismatch error will get generated.
4. src/slerr.c,sltermin.c: Off by 1 calculations of buffer-sizes fixed
by Andrew V. Samoilov (andrew at email, zp, ua).
5. src/slkeypad.c: More escape sequences courtesy of Denis Zaitsev
(zzz at cd-club.ru)
6. src/slerr.c: SLang_get/set_error functions have been added to the
API to get and set the value of SLang_Error, resp. The variable
SLang_Error will be removed from slang 2. Applications should
start using these functions to ease migration to the next version.
7. src/slstruct.c: Added SLang_push/pop/free_struct functions to
public API. The objects themselves are still opaque.
8. src/slparse.c: allow the semi-colon to be used as a field separator
in a structure declaration.
9. src/slpath.c: path_sans_extname was failing when a dot was in a
directory part of the name.
10. slsh/slsh.c: The names of environment variables defining the location of
the global slsh.rc and the slsh library files may be specified in
11. src/sltoken.c: Local buffer overflow when the size of an
identifier exceeds 256 characters was found and corrected.
12. src/slarray.c: Leak fixed: Under some circumstances, a memory leak was
generated when using user-defined "typedefd" objects in an array,
typedef struct {a} Foo_Type;
13. src/slarray.c: Indexing a multi-dimensional array using a
mult-dimensional array was broken. Now A[I] returns an array with
the same dimensionality as I, regardless of the dimensionality of A.
14. New intrinsics:
__is_callable (Mike Noble mnoble at space, mit, edu)
__is_numeric (Mike Noble mnoble at space, mit, edu)
__datatype (John Houck houck at space, mit, edu)
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:
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.
10. src/modules: perl compatible regular expression (pcre) module added.
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 at space.mit.edu). Similarly, in the discussion of intrinsic
structures, My_Window was used instead of My_Win
dburke at 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 at 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 at 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 at 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 at gnu.org>)
9. slsh/slsh.c: "status" was not declared if compiled with
SLSH_LIB_DIR defined. (mnoble at space.mit.edu)
10. slsh/Makefile.g32: new file to allow slsh to be compiled with
11. src/sldisply.c,sltermin.c: if running as setuid/setgid, then limit
access to the environment for such a process. <solar at 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 at head-cfa.harvard.edu>.
2. src/sldisply.c: VMS specific problem: SLang_TT_Write_FD was not
getting initialized (Hartmut Becker <Hartmut.Becker at 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 at 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
8. doc/tm/rtl/array.tm: Documentation for the "where" function
corrected by <G.Milde at 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 at 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 at 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 at 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 at vimec.nl>).
2. Make sure '#ifeval expr' evaluates up to the end of a line and no
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 at inetia.pl>)
4. Trivial code cleanups to avoid BCC 5.x warnings.
5. src/mkfiles/makefile.all: BCC-specific tweaks (John Skilleter
<John.Skilleter at 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
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 at 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
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
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
13. path_is_absolute fixed to return integer
14. src/slarray.c: generate an error when an empty array is passed to
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 at 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
23. src/Makefile.in: DESTDIR support added by Brad <brad at 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 at 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
7. sldisply.c: Kanji specific patch from Jim Chen
<jimc at ns.turbolinux.com.cn>.
8. sldisply.c: Assume that Eterm and rxvt are xterm-like (Michael
Jennings <mej at valinux.com>).
9. sldostty.c: mouse support added by Gisle Vanem <giva at bgnett.no>.
10. slsearch.c: avoid infinite loop if search string has no length.
11. SCO elf support added by Mike Hopkirk <hops at 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
3. VMSMAKE.COM: slstring added to list of files to get compiled.
4. slsh/Makefile, modules/Makefile: added patch from Jim Knoble
<jmknoble at pobox.com> to create elf versions (make ELF=elf).
5. AIX IBMC patches from Andy Igoshin <ai at vsu.ru>.
6. autoconf/config.sub: tweaked to properly handle recent alpha
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 at rahul.net>)
6. slposdir.c: Do not depend upon the existence of rmdir on VMS
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
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 at 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 at hippo.ru> added.
2. slstring.c: offsetof(SLstring,bytes) -->
offsetof(SLstring,bytes[0]) to avoid compiler warning on some
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
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 at 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
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
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 at 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 at 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 at 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
9. Patch from Thomas Henlich <henlich at 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 at diskena.dammit.lt> to allow writes to the lower left
2. SIZEOF_LONG changed to 4 for VMS alpha systems (Jouk Jansen
<joukj at hrem.stm.tudelft.nl>).
3. MSC patches from gustav at 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
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
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
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
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
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 at gmx.de>.
7. New table types:
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
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:
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
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
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
For example, `Long_Type[10]' creates an array of 10 longs.
12. New intrinsic: set_struct_field. See function reference for more
----- 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
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
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 at pit.ktu.lt> adding more
line and symbol drawing characters. Also a patch from
k-yosino at 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
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:
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 at 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 at 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 at gmx.de> to define
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
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 at 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 at 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 at npwt.net>).
3. Improvements to the SLsmg scrolling alogorithm.
4. SLang_process_keystring and SLang_make_keystring now return NULL upon
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 at 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
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 at 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:
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 at vex.net>)
4. Slsignal modified so that fork is not used for CYGWIN32, suggested
by vischne at ibm.net.
5. Solaris ELF patches integrated into configure.in. Now ELF support
is available for Linux and Solaris. Thanks Jan Hlavacek
<lahvak at 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
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 at muddcs.cs.hmc.edu).
6. Small bug fix to SLang_flush_output provided by Balakrishnan k
<MDSAAA27 at 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 at gsi.de).
Changes since 0.99-34
0. OS/2 video problem solved by Rob Biggar (rb14 at 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
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
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
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:
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.