6.0.25
'find', 'replace' and 'search' now have an option for case insensitive
search, updated source and manual

6.0.26 - 6.0.27 - 11:34 AM 4/4/99
'trace' got stuck in executeCommandline() in traceExit() because an empty
 fgets() in LINUX still has a '\n'

6.0.27 - 6.0.28 - 6:30 PM 4/6/99
'import' now returns primitve address
'define' now also works like (define x y) ; as in SCHEME
'char' now defaults to 0 on offset and returns unsigned int
new 'mod' floating point modular function
new 'abs' floating point absolute value function
new 'trim' trims spaces or characters both sides

6.0.28 - 6.0.29
'filter' new primitive

6.0.29 - 6.0.30
'dump' now displays address of cell
'make-dir' mode parameter now optional defaults to 493 = drwxr-xr-x

6.0.30 - 6.0.31
fixed trim, which had all kinds of problems
new 'difference' returns set difference of two lists
new 'intersect' resturns set intersection of two lists
new 'unique' returns unique set from list (duplicates removed)
when comparing lambda expressions, now state lists also get compared

6.0.31 - 6.0.33
'match' now also works on list expressions, wildcard symbols 
can occur on different nesting levels. 
 
6.0.33 - 6.0.34 Released on www.newlisp.org
in 'substring' the length parameter is now optional 
math exception showed wrong error message 
tty setup now only when tty detected else supress buffering 
for usage with 'socker'

6.0.33 - 6.0.35 4/20/2000
inlined cleanupResults() in evaluateExpression() ca. 4% speedup !
took out all #pragma statements
took out termio stuff, works better without
new functions read-file, write-file
new functions read-process, write-process
new function error-text

6.035 - 6.0.36 4/21/2000
'char' now also can take a number as an argument converting it to a 
string of one character: 
(char 65) => "A"
(char "A") => 65
'integer' and 'float' now return 'nil' if the string passed does
not start with a number digit or +/-
strings can now encode characters in the form \nnn where nnn
is a 3 digit decimal (leading 0' if less 100) e.g.:
"\065\066\067" => "ABC"

6.036 - 6.039 4/28/2000
added 'chop', 'explode', 'get-float', 'starts-with', 'ends-with'
added 'random' 'normal'
renamed 'get-number' to 'get-integer'
added script for httpd webserver demon

6.039 - 6.043
'symbol' now takes optional context argument
'symbols' now gives error message if symbol args is not context
eliminated 'sourcePtr' which wasn't used anyway, introduced
'sourceLine' for keeping track of line-numbers in error messages
added 'encrypt' for one-time-pad encryption/decryption

6.043 - 6.044
speedup in deleteList() and copyList()

6.044 - 6.045
took out 'sourceLine', too much confusing situtations which are
unresolvable. 'eval-string' now does multiple expressions

6.045 - 6.048
put back pushResultFlag, 'eval' needed it. 
fixed bug in 'substring' for trailing 0's, changed tokeString to 
resemble split() and taking separators > 1 char.
This also changes pack/unpack in parsePackFormat() to take care of
more than one space between formats. 
After reset and execution of 'error-event' errorReg now set to 0.

6.048 - 6.049
took out executeSymbolParams modifying executeParams for optional arg
'reset' now throws 'user reset - no error' - error, so it can be handled as
a non-error in user defined error handlers, also takes now optional
symbol for 'resetEvent to be exuted after errorEvent.

6.049 - 6.051
'reset' now takes optional third parameter for stacksize. So the
syntax for reset is nor (reset [resetEventSymbol] [stacksize])

6.051 - 6.052
no length limitiation anymore for printing strings to the console
'replace-nth' new primitive

6.052 - 6.054 5/19/2000
'let' new primitive like in other Lisp but dynamically scoped
'seed' new primitive seeds random generator for rand, random, normal
now feature complete for 6.1 release

6.054 - 6.055 5/20/2000
fixed memory leek in varPrintf()
'integer' and 'float' now take optional thirsd parameter for default
return value if string cannot be parsed.

6.055 - 6.056
fixed bug in 'symbol' which would not overwrite symbols in MAIN for
symbols in other contexts so (symbol "set" 'MyContext) now works
creating a symbol 'set in MyContext.

6.056 - 6.059 5/29/2000
improved pretty printing for 'let', which takes now the same flag
as 'cond'. Improved httpd script, now sends http header for each
file.

6.059 - 6.060 5/29/2000
httpd did fail on POST on some browsers now 'upper-case' when matching
'content-length'. Alos fixed in manuual

6.060 - 6.0.61
changed 'parse' so it parses a max token length of 2048 (256 previous)
this was already changed erarlier on the Win32 versions.
The read-line limit of 16384 should be changed at some point to infinite
similar to the print buffer. At the moment cgi vi std/IO is limited by
read-line to forms no bigger than 16384.

6.0.61 - 6.0.62
varPrintf was still limited. MAX_PRINT_LEN changed to size.

6.0.62 - 6.0.63
'integer' now parses also hex strings eg: (integer "0xFF") => 255
'write-line' now retuenw nil on file errors

6.0.63 - 6.0.64
5% speedup introducing cell type masks

6.0.64 - 6.0.65
1% speedup taking out symbol in evaluateExpression

6.0.65 - 6.0.67
new 'count' counts elements of one list in another list

6.0.67 - 6.0.68
fixed error in 'reverse'

6.0.68 - 6.0.69
'parse' now without size limitations in tokens when using breakstr argument.

6.0.69 - 6.0.70
'string' now without size limitations of printing in string

6.0.69 - 6.0/71
'read-line' now without size limitations

6.0.71 - 6.0.72
'for' fixed bug when from and to where equal would run forever

6.0.72 - 6.0.73
'putenv' didn't work, fixed

6.0.73 - 6.0.75
problem with ebaluateLambda when passing (set 'p ...) to (foo p) as an argument 
for parameter p.

6.0.75 - 6.0.76
additional functions: prob-z prob-chi2 and crit-chi2. (for ...) no works with
floating point numbers. Additional module xml.lsp

6.0.76 - 6.0.77
additional function: join. Additional module mail.lsp
additional function: sequence

6.0.77 - 6.0.79
additional functions: xml-parse, xml-error
fixed buffer overflow bug in varPrintf to string device (function 'string)

6.0.79 -> 6.1.0
new function println
6.1.14 documentation

6.1.0 -> 6.1.1
new function fft and ifft
6.1.15 documentation

6.1.1 -> 6.1.2
the length parameter in 'sublist' is now optional (assumes all)

6.1.2 -> 6.1.3
fixed default for 'true' in 'case'

6.1.3 -> 6.1.4
new function 'swap' for swapping elements in a list

6.1.4 -> 6.1.5
new function 'read-url' for reading pages/files via http
revision of httpd script more RFC compliant

6.1.5 -> 6.1.6
'read-url' nl-web.c now handles proxy's if HTTP_PROXY is set to proxy URL
new functions 'collect'and 'select' for selecting multiple elements from a
list

6.1.6 -> 6.1.7 Release
'rand' now takes an optional second parameter to return a list of random
numbers (similar to 'random' and 'normal')
many formatting changes in manual.

================================================================================
6.1.7exp -> experimental '-p port' mode

6.1.7 -> 6.1.8
fixed bug in error event handling when error==0

6.1.8 -> 6.1.9
trace now is a source level debugger, similar in funcitonality to the Win32
version, but for a character console.
linking now encrypted, new functions 'betai' and 'gammaln'

6.1.9 -> 6.1.10 
fixed bug which could affect parsing \xxx in getToken() where isdigit(x)
'prob-chi2' now more precise using gammap(),
new functions 'crit-z', 'beta' and 'gammai'

6.1.10 -> 6.1.11
new 'debug-highlight' for setting pre and post string in debugger
highlighting. Eliminated example httpget because 'read-url' does
the same. 

6.1.12 -> 6.1.12
'swap' now treats negative values as the last element, consistent
with other functions, 'read-url' fix in error message text
init.lsp, mysql.lsp etc have moved to /usr/local/newlisp

6.1.12 -> 6.1.15
'read-url' now handles also redirects

6.1.15 -> 6.1.16
fixed bug in trace mode, trace stopped at all args evals in function
calls. Still stops and shows result for each 'map', which is ok, but
must be documented. Improved subroutines for handling POP3 and SMTP mail.

6.1.16 -> 6.1.17
new matrix functions 'invert', 'multiply', 'transpose'

6.1.17 -> 6.1.18
fixed dimension problem in transpose

6.1.18 - > 6.1.19
fixed missing error text for 'singular matrix' in invert

6.1.19 -> 6.1.20
ifft didn't normalize right when N not a power of 2
evaluateLambda() rewritten to store statics in a way that
anonymous lambda expressions with static data can be stored
this also gave a general speed up of about 5%.

6.1.20p2
(nth -1 lst) now returns the last element instead of nil. This
is consisten with other functions

6.1.20p4
eliminated optional parameters in reset, because never worked right.
instead the error-event can be used for code after reset and the stack
size can now be specified on the command line.

6.1.20p5
eliminated get-state and set-state as primitves, they are now written
in newLISP and part of the initialization file /usr/local/newlisp/init.lsp

6.1.20p6
new function 'regex for POSIX 1003.2 regular expressions (GNU library)
ifdef'ed readline, only works in CYGWIN, cannot figure unresolved 'tputs()' etc in
libreadline.so in LINUX, seems not to see libcurses?

6.1.20p7
cleanup makefile for different features NANOSLEEP, READLINE, REGEX
cleanup fft
took out replace-match, new function index

6.1.20p8
cleanup regex, additions changes in manual

6.1.20 -> 6.3.pre1
READLINE finally working on Mandrake missing link to 'libtermcap.so'
lots of manual changes
 
6.3.pre2
preparing to replace simple binary tree for symbols woth RB balanced tree

6.3.pre4
running RB balanced tree code

6.3.pre5
fixed bug in 'symbols for context and 'delete for context

6.3.pre6
changed httpd CHANGES
===============================================================================
6.3 Release
time-of-day new function

6.3.01
a fix for 'regex' in the CYGWIN version sent in by Steve Adams

6.3.02
additional optional parameter in 'eval-string'
streamlining code in nl-web.c, reformatting manual so it is easier converted
to PDF

6.3.04
new -p commandline parameter for TCP/IP port mode of newLISP.
Fixed format for default data type (will treat as string),
also format will permit now unlimeted size of the formatted 
output (was 2047 bytes).

6.3.05
cleanup -p with trace for rt/lf translation

===============================================================================
6.3.06 Release  July 8th, 2001
optional parameter 'nil in 'eval for silent evaluation evaulates without return
value and prompt on the console, needed for Tcl/Tk integration

6.3.07 Release
a new function 'debug (shortcut fr using trace) and various bugfixes in the
trace/debug functions. '{' and '}' characters are allowed as string delimiters
but only on the outer level, they get replaced by the parser. This allows
writing 'nicer' source for HTML and TK stuff.

6.3.08
regex now also returns sub expressions. further changes in debugger to accomodate
remote TclTk controlled debugging: (q)uit now quits execution, (c)ontinue stops
debugging but continues execution.

===============================================================================
6.3.09 Release July 16th, 2001
string now can take more than one parameters, like concat but works on different
data types

6.3.10
added symbol count to 'sys-info'
added ERR: string in error message when in trace for TclTk frontend

6.3.11
new function 'dotree' to iterate thrugh symbol trees, usefull for simulating
arrays and hashes

===============================================================================
6.3.12 Release July 30th, 2001
new function 'catch' for catching errors when evaluating expressions
fixed bug in net-connect when trying to connect to dead port

===============================================================================
6.3.14 Release August 2nd, 2001
changes in newlisp_manual.html and newlisp-tk.html
cleanup and improvment of qa file
fixed crash-bug in markReferences and saveSymbol when copying contexts
function 'args' now works also for lambda, no symbol param necessary anymore
===============================================================================
6.3.15 Release September 3rd, 2001
xml-parse now accepts empty atribute value strings e.g.: <ATAG ATT=""></ATAG>
net-lookup now works in both directions: ip->name and name->ip
===============================================================================
6.3.16 Release September 6th, 2001
float division by 0.0 now yields 'Inf', as specified by IEE 754. Before 6.3.16
it would couse a Math exception. Now all compare operations with NaN return 'nil'.
new functions 'floor' and 'ceil' and 'NaN?'.
 
Ctrl-D will now longer crash but exit newLISP

More LSB compliance in install directories used: now /usr/share/newlisp
instead of old /usr/local/newlisp

===============================================================================
6.3.17 Release September 9th, 2001
fixed a memory leak in 'regex'. The leak could not be fixed in the CYGWIN
version which uses regexp !


6.3.18
fixed rounding problem in 'sequence', Ctrl-D will not exit but only do newline
if at beginning of line, else it will behave as expected under readline, to exit
newLISP with one keystoke use Ctrl-C instead.
output cleanup in error-text and error-event
better standard behaviour of 'cond' when action clause is missing
new function 'series' for generating geometric sequences.
new function 'rotate' for rotating lists

6.3.20 Release October 22nd, 2001
bug fix in xml-parse when parsing closing tags without opening tags
bug fix memory leak in catch and eval-string uder error conditions
about 30% speedup removing copyCell/pushResult in: inc set define
manual changes and additions.
tookout net-cleanup in  network examples

6.3.21p1
bug fix in 'char' when using with floats
'integer' now also takes floats converting them into integer
also now translates "055" to 45 taking it as an octal number,
which is consistend now with the parser.
'float' now also takes integeres converting into floats

6.3.21p2
eliminated symbol->type in SYMBOL typdef, which reduces symbol memory by from 36 to 32 byte
fixed a bug where sometimes newlisp wouldn't exit after tk-frontend exited

===============================================================================
6.3.21 Release November 13th, 2001
MAX_ERROR_NUMBER was to high, parenthesis count wasn't reset when evalCatchFlag

6.3.22
fixed potential bug in join with memory intialization
fixed problem parsing URL when redirection in 'read-url'
'get-url/read-url' now also handles 205 and 307 return codes
'get-url/read-url' now always only returns header portion if "header" option is specified
new -d demon mode, like -p but newLISP stays in memory to accept a new connection
new function 'put-url' for HTTP PUT method
new function 'post-url' for HTTP POST method

===============================================================================
6.3.23 Release January 6th, 2002
new function 'binomial'

6.3.24
'exit' now closes net work connection when running in '-d' demon mode.
new function 'now' returns detailed date/time info: (y m d h m s us dy dw)
new function 'date-value' converts date/time into seconds since 1970-1-1
new financial functions 'pmt', 'nper', 'pv', 'fv', 'npv'
bug fix in 'map' which would crash when last arg was not a list (as it should be)
replaced 'MySQL:close' with 'MySQL:close-db' to avoid overwriting of close in MAIN in mysql.lsp

===============================================================================
6.4.00 Release March 20th, 2002
inclusion of BWidget set in the Win32 tk v 0.80 distibution, many manual changes

6.4.1
main-args now returns path of program as first list member
get-url "debug" option now can be specified together with "header" option
post-url content-type now is optional and defaults to "application/x-www-form-urlencoded"
added closing channel in get-url
fixed bug in 'join', which could crash on an empty list
httpd, finger and gettime changes for new 'main-args'
balloon help in newlisp-tk v. 081
new '(tk-args)' when running Tcl/Tk frontend returns newlisp-tk commandline args
several changes in stat.lsp/plot directing temporal files to /tmp
fixed potential crash bug in 'dotree'
Win32 installer now puts desktop icon

===============================================================================
6.4.2 Release April 22nd, 2002
'format' now for multiple args

6.4.3 development release
'parse' now correctly does handles trailing separator by returning an empty token ""

6.4.4
buffer limit in vsnprintf() was not handled correctly, putting a space limitation
on 'string' (16k), 'format' (2k) and 'C' functions depending on varPrintf(),
fixed potential buffer overflow in writeStreamStr().
'tranpose' did not check for matrix type.
experimental function 'throw'

6.4.5 Development release
starts-with, ends-with 
now are working type polymorph on strings and lists
rotate now takes negative numbers for left rotation
rearranged lambda evaluation (eval args before saving environment),
which causes 6% speed improvements
'args' only available in define-macro (again as before 6.3.14)
changed 'if', 'unless', 'while', 'until' for less CPU stack requirements

6.4.6
'nth', 'first', 'last', 'rest'
now are working type polymorph on strings and lists
'cons' works now correctly on 1 arg  (who cares? -> consistency proof)
potenial cell-memory leak on error in 'apply'

6.4.7 Development release
improved syntax for statics environment list as assoc list:
(define  (foo a b c ((x 1) (y 2) (z 3))) ....)
to retrieve statics environment just do:
(last (first foo) => ((x 1) (y 2) (z 3))
also improves speed of ststic processing by about 10%

===============================================================================
6.4.8 Release May 16, 2002
empty? now works on strings
fix for 'cons' when lambda expr is second argument
fix for (rest "") which now returns ""
fix for (first "") now returns nil
purelisp.lsp for prooving consistency
fix for link.lsp on CYGWIN

6.4.9 Development release May 21st, 2002
'nil' as a symbol was not always treated as nil value constant
(push exp lst) now works even if lst does not contain a list
in that case old contents of lst gets deleted and initialized
with () before pushing exp, this makes initialization of lists
to '() before pushing on it unnecessary.
'time' now works as a timer returning mseconds needed to evaluate
this is also mor compatible how other Lisp's define 'time'
an expression, for old funcitonality of 'time' use (apply date-value (now))
'sort' now takes an optional parameter '< or '> for ascending/descending
also about 30% speedup, like in: (sort myList '>)

6.4.10 Development release May 21st, 2002
correct treatment of symbol 'nil in 'and' and 'or'
eliminated orSymbol reference in soirce code
speedup parsing source
dump with parameter now returns list (cellAdress, cellType, cellNext, cellAux, cellContents)
stepsize in 'for' 'sequence' always forced to positive

6.4.11
'push' in its new form did not respect 'nil and 'true
new error message when trying to set/define/push on 'nil, 'true or context
speedup in multiple compares in nl-math.c 
speedup in upper-case, lower-case
speedup in get-char, get-string, get-integer and get-float


6.4.12
boolean types and symbols are equal
another speed improvement in lambad and expression evaluation
over all speed improvement over 6.4.8 now about 5-10% depending
on expression mix.
local iterator symbols are now handled on environment stack for
better error recovery.
new chapter "Data structure objects in lists" in docs and
many little doc changes.

===============================================================================
6.5.0 Release May 28th, 2002
no changes related to newlisp itself except for versioning
changes in httpd (see httpd file)
changes in newlisp-IDE for changes in httpd and changes for date display

6.5.1
compiles with -Wall -pedantic -Wno-uninitialized -O2 
-Wall -pedantic for better portability
-Wno-uninitialized to suppress 'fork' 'longjmp' warning in -O2
-O2 does ~25% speed and size improvement!
'let' did not handle empty parameter lists and now double fast

6.5.2 development release June 3rd
'concat' is deprecated 'append' doubles functionality of 'concat'
new individual makefiles for making newLISP on different platforms without
the need to tweak makefiles.

6.5.4
'find', 'replace' and file 'search' now can do Regular Expressions.
Regular Expressions are not dependend any more on the C-library
on the OS platform used, instead PCRE (Perl Compatible Regular Expressions)
is used on all platforms and the source is contained in the distribution.
Additions to INSTALL file about PCRE and localization of newLISP.

6.5.5
fix for 'replace' in regex mode

6.5.5 -> 6.5.7
changes in win32.lsp and makefile_win32
eliminated file: nl-importDM.c was already merged
new chapter 'Lambda expressions in newLISP' in newlisp_manual.html

===============================================================================
6.5.8 Released version (functionally equal to 6.5.7) June 13th 2002
#ifdef NOIMPORT instead of MAC_OSC in evaluateExpression()
spelling stuff in newlisp_manual.html

6.5.10
- incorporated nl-web.c into native win32 version to make work get-url, post-url
and put-url. Server modes -p and -d now are working too in native win32 version.

- newlisp-tk.tcl changed to work with win32 because read-line/write-line don't 
work on sockets in win32. 

- writeStramChar() now works also on binary streams

- newlisp-tk.tcl changed to work on remote connection over the internet.
Shows acceptable speed on dial-up (old newlisp-tk.conf should be deleted)

- 'reload last' button in newlisp-tk GUI

- dependency fix in makefile_win32


6.5.11
- moved to Borlanc C++ v5.5 compiler, gives faster and smaller executable than 
 Digital Mars compiler previously used. Now all functions of the Linux version
 also work in the Win32 version.

6.5.12
- changes in newlisp-tk.tcl for faster performance on remote and working
  reliable with win32 version. Old newlisp-tk.conf should be deleted.
  Win-tk version can now be distributed without CYGWIN DLLs using the
  Borland 'C' Win32 compile.

6.5.13
- fixed problem in 'net-receive', which was introduced in 6.5.10
  httpd now works fine with win32 compile (with change in line 147 of httpd)

- send() in net-send and win32_fprintf() now performs check and resend

6.5.14
- reintroduced writeStreamChar in 'net-receive', writeStreamChar did not zero buffer
- debug was broken with TK because of missing redefine of fgets() in nl-debug.c

6.5.15
- net-close wasn't working in win32 version, which gave problems in cgi in httpd
- new newlisp-IDE-1.3.tgz with fixes for LF -> RET/LF translation which was happening
  in win32 pipes

6.5.16
- doc changes
- took out again size-check and resend in netSend() and win32_fprintf() as it is
  not relevant in blocking sockets
- mail.lsp was broken because of change how optional parameter in 'find' works
- 'read-process' and 'write-process' collapsed to 'exec'
- match for lists now behaves like match for string returning a list of matches
  ie. (match '(I * you) '(I love you)) => (I (love) you)
  this allows easier substituting of star/* patterns in pattern matches in chat
  robots

6.5.17
- new option# parameter in 'xml-parse' 
    (a) option# 1 to surpress white-space TEXT fields (for data XMLs)
    (b) option# 2 to surpress empty attribute tags (for tags which never have attributes)
    (c) option# 4 to surpress comments
    (d) option# 8 to tanslate tag names into symbols

- new 'xml-type-tags' for definig alternative tags for "ELEMENT", "CDATA", "COMMENT"
  and "ELEMENT". Instead symbol can be defined or nil can be specified to surpress
  the type tag completely.

- the newlisp-tk_win32 version now comes with the win32 native compile

- fixed bug in 'string', which was not reentrant

===============================================================================
6.5.18 Release August 3, 2002
- fixed stream problem in 'eval-string' in Win32
- fixed openStrStream, didn't initialize stream->handle to 0

6.5.19
- doc changes, renamed mail.lsp to pop3.lsp, sendmail.lsp to smtp.lsp
- memory initialization in p_format()

6.5.20
- fixed p_format again, vsnprintf() doesn't include null-char in return count
  as advertised in GNU docs
- doc changes

6.5.21
- 'explode' now also works on binary contents
- 'file-info' modification and creation time where added
- can now specify \000 in string constants
- in imported function now up to 10 parameters (previous 8)
- odbc.lsp module for ODBC communications

6.5.22
- comparing symbols now includes the context name in their comparison
- 'name' new function to extract the name of a symbol as astring without the context
- milli second resolution in 'time-of-day', 'now' and 'time' in Win32
- newlisp_manual.book for conversion html->pdf with HTMLDOC http://www.easysw.com
  this makes a printable manual. Print double sided then cut 8.0 x 9 inch, which is
  2 from the bottom and 0.5 from the right side when printed on 8.5 x 11 inch paper;
  then spiral bind (thin round spirals, not the flat once).
- post-url was never working on win32 becuase of missing win32_fwrite


===============================================================================
6.5.23 ----------- released September 17, 2002
- httpd fix for empty query string 
- newlisp-IDE-1.6.tgz now saves files up to 10k, changed POST encoding to multi part

6.5.24
- quote wil not evaluate it's argument anymore, but work like Scheme or Common Lisp
- in newlisp-tk the lisp file estension can now be configured in newlisp-tk.config
- in Win32 now line termination gets written as RT-LF, 
  change also in newlisp-tk.tcl when filling editbox
- net-read-line now protected from deletion in newlisp-tk browser
- prettyPrint will never put newline after quote
- fixed prettyPrint bug when printing empty prettyPrint constructs (while, dotimes etc)

6.5.25
- quote fixed again (quoted twice)

6.5.26
- doc fixes
- date crashed on values resulting in dates before 1970-Jan-1 00:00:00
  in the Win32 version. In Win32 now minimum value for date is 86400,
  which is safely on or after 1970-Jan-1 00:00:00 for all time zones
- NaN can now be put into a variable for comparison
- division by zero now causes a math exception also in floats (previously
  inf was returned in cygwin/Unix version and Win32 crashed)
- in mixed arithmetik using integer operators NaN is taken as 0

6.5.27
- new function 'constant' to protect symbol contents from changing
- fixed bug in newlisp-tk.tcl which was introduced after 6.5.23
  which caused problems in Mouse.lsp (_result -> result in 'tk')
- 'div' with NaN value raised exception/crashed in Win32, now
   returns NaN
- DOMAIN error messages in the Win32 versions are now silenced

6.5.28
- doc changes
- new function 'setq', both 'set' and 'setq' and now can take multiple args
  note that old init.lsp should be updated because of macro for 'setq'
- new option number 16 in xml-parse for generating SXML output

- 7.0.0 pre release
- bug fix for 'string', suppresses all pretty-print formatting
- better error reporting on pop3.lsp and smtp.lsp with debug-flag true
===============================================================================
- 7.0.1 release October 24, 2002
  merged caveGuy's pop3.lsp mail-id improvements

- 7.0.2
- readLineStream was not initizlized during program startup and caused
  'current-line' to crash if not used after a 'read-line'
- direct execution mode with new command line option -e
- in SXML parsing attribute tags where left strings instead of symbols
- 'find' now also does regex when looking up a string in list of strings

- 7.0.3
- example in newLISP for put.cgi in newlisp_manual.html
- include cgi.lsp in distribution
- the header in the SMTP interface smtp.lsp was not finished with empty line
- 'save now can save multiple contexts and/or symbols at once
- 'open now has a "append" or "a" option

===============================================================================
- 7.0.4 release February 2, 2003
  replace now gives error instead of returning 'nil when second arg not
  list or string
  new primitive 'lookup' works like assoc with extracting parameter
  fixed bug in pop3.lsp
  moved to version 5.4 of Freewrap for making the newlisp-tk.exe, which
  is now doubled in size because 5.4 doesn't compress anymore (see Freewrap
  docs).

- 7.0.5
  Manual improvements in for correct conversion with HTML2DOC
  additional hour offset parameter in 'now' and 'date'
  fixed bug in dotree which caused crashes on Windows
  'context', 'dotree' and 'symbols' now accept unquoted
  symbol if the symbols is a context.
  contexts can be deleted again when empty
  The newlisp-tk Windows version is now wrapped with freewrap v.5.5
  and based on Tcl/Tk version 8.4.1 and BWidget v.1.6
  newlisp-tk.tcl has been changed for better usage of 'context'

- 7.1.0-rc1
  PCRE Perl Compatible Regular Expression support updated to version 4.3
  in 'replace' now replacement pattern with back references and as 
  lisp expression. Sub expressions are stored in variable $1, $2 ... etc.
  $0 contains the whole pattern found. These variables are also filled
  in 'regex' 'find' (all functions doing regular expressions).
  The new implementation of 'replace' is also faster (about 15%).
  example: 
  (replace "%([0-9A-F][0-9A-F])" str (char (integer(append "0x" $1))) 1)
  This will do URL translation i.e.: "xxx%41xxx%42" -> "xxxAxxxB".

- 7.1.0-rc2
  'parse' can take regular expressions in sepearator when additional
  options parameter is defined (as in find, replace)  

===============================================================================
- 7.1.0 Release August 28, 2003
  'search' like 'find' and 'replace' also accepts regular expression
  when extra options parameter is given.
  [text] and [/text] can be used as string limiters for large text regions
  i.e. for HTML in cgi pages written with newLISP. Text limited this way
  stays completely unprocessed and contain any characters.
  The function 'symbol' accepts unquoted symbol for context parameter
  (like 'dotree', 'context', 'symbols')
  PCRE Perl Compatible Regular Expression support updated to version 4.4
  extensive manual changes formatting and PDF release  

- 7.1.1
  surpression of some compiler warnings in Mac OSX compile
  makefile for linux has strip turned on and readline support
  was not the default

- 7.1.2
  third parameter in 'symbol' for supression of symbol creation, if
  not found; return 'nil instead.
  HTML manual had formatting error, which caused all after 'regex'
  to be in curier.

===============================================================================
- 7.1.3 release September 3, 2003
  [text]...[/text] caused problems in TCP/IP communications
 
===============================================================================
- 7.1.4 release September 6, 2003
  uninitialized memory in writeStreamStr() caused problems when
  running newlisp-tk and transferring bigger string buffers.
  win32_fprintf() did not work right for buffers > 2048, which
  caused problems in browsing bigger buffers in newLISP-tk.

- 7.1.6
  new function 'process' for launching independent child processes
  (will not block), new function 'pipe' for use with child processes.

  'if' now accepts multiple condition-exp pairs and then works like a
  cond without parenthesis around condition-value. 'if' with
  condition-exp-exp or condition-exp still works like before.

  new 'net-send-udp' and 'net-receive-udp' for UDP communications
  without need of net-listen,net-accept and net-connect. 

  On Mac OSX 'import' is now enabled using to addtional files
  osx-dlfcn.n/h for compiling. This import is for '.dylib'
  libaries.
  'append' now also can append binary strings (i.e. containing 0's)
  'joint' now also can joint binary strings (including the joint string)

  if the length of a sublist in slice is 0 then sice returns the empty
  list '(), previously returned nil. This is more consistent with the
  behavior of slice on strings and at the end of lists.

  'write-buffer' now acepts both: a symbol or a string

  'send' now accepts both: a symbol or a string
  
  'symbol' pretended to create a symbol although context would not exist

  error messages now include the offending expression/parameter which
  caused the error.


- 7.1.7
  speedup in UDP communications (no session registration)
  memory leak fixed in 'net-receive-udp'

  'first' of an empty string now returns an empty string, previously nil

  improved cgi.lsp

  'reverse' now works on strings

- 7.1.8
  'throw' now is documented (actually happened in 7.1.7)

  'collect' and 'select' now also work on strings
  i.e: (collect "2001-09-20" 5 6 8 9 0 1 2 3) => "09202001"

  'slice' couldn't slice lambda's

  memory leak in searchBufferRegex() affecting 'find' and 'replace' was fixed

- 7.1.9  
  'set' with multiple args had a cell memory leak

  'transpose' had a memory leak

- 7.1.10
  logfile support for remote mode -p and -d with '-l logfilename'

  fixed bug in pretty print on command line

  fixed bug in 'save', which went into a loop when saving symbols containing
  contexts

- 7.1.12 
  logfile with string -L options also logs remote command line input
 
  'fft' and 'ifft' now can take plain numbers instead of complex numbers
  or a mixture of both

  regular expression speedup 5 to 50% by chaching the search pattern
  and avoiding recompile, speedup greatly depends on complexity of
  pattern relatively to the length of the search string

  rearranged functions in source files to make newlisp.c more manageable

  eliminated various unecessary typedefs

  Sun SOLARIS is now supported (not much tested though)

  operating system number in last position of 'sys-info'
  linux 1, bsd 2, osx 3, solaris 4, cygwin 5, win32 6

  strings containig zeros are now displayed correctly i.e. 
  (pack "c c c" 0 1 2 3) => "\000\001\002\003"

- 7.1.14
  redundancy in printString() eliminated

  memory leak in 'parse' with regex fixed

  the userdefined function for an error is now reported

  overall speedup since 7104 of about 5%

  commented out undocumented function 'symbol-dump'

===============================================================================
- 7.2.0 is 7.1.14 released October 2nd, 2003


- 7.2.1
  moved check for symbol type of lambdaFunc to errorProc for efficiency

  cleanup of unecessary defines in newlisp.h

  defined 'vasprintf()' to take advantage of vasprintf() where available

  'format' now checks for correct number of arguments and well formed
  format string, it should not crash anymore on mismatch of number
  and type of parameters

  newLISP-tk is now version 1.0 with changes for multiline 'tk' statements
  (stements containing line-breaks), this allows sending bigger Tcl/Tk
  code portions in one 'tk' statement

- 7.2.2
  force creation of $0, $1 ... in MAIN even when used in different context
  for the first time

  supress $0, $1 ... in newlisp-tk frontend in variable listbox
  (the $ would confuse tk)

- 7.2.3
  replace-assoc now also uses the system variable $0 for the old
  list, which can be reused in the replacement expression, i.e:

  (set 'lst '((a 1)(b 2)(c 3))) 
  (replace-assoc 'b lst (list 'b (+ 1 (last $0))))
  lst => ((a 1)(b 3)(c 3))

  replace-nth now also uses the system variable $0 for the old element, i.e:

  (set 'lst '(1 2 3 4))
  (replace-nth 1 lst (+ $0 1))
  lst => '(1 3 3 4)

  added new module 'ftp.lsp' for get/put ftp transfers

  updated module smtp.lsp and program spam-filter

  symbols set with 'constant' now also gets saved with 'constant'

  introduced getContext() for code savings

  added error message in 'import' for win32
  
  eliminated win32.cmd

  many documentation changes/fixes, rewritten introduction
  added chapter about deprecated functions

  changes in set/define functions for better protection and
  error messages of protected symbols

  full stack trace on error messages

- 7.2.4
  replace-assoc now returns the changed list instead of the old
  association found (which is now in $0)
  
  replace-nth now return the changed list instead of the old
  expression found (which is now in $0)
  now checks also for missing last argument

  replace now returns changed list or string
  for changed list count of replacements in $0
  count for string replacements is not available any more
  (could be handled in replacement expression)
  now checks also for missing last argument

  remove now returns the changed list
  and the number of removed elements in $0

- 7.2.5
  chop now also works on lists

  coding improvements in slice/sublist() and substring()

  newlisp-tk 1.02 now on Linux tmp directory is in the home
  directory of the user running newlisp-tk

  replace with expression in replacement would overflow CPU stack
  after 2048 replacements, now no limit

  cgi.lsp v.1.2 now lives in a context CGI for better isolation

  httpd v.3.0 with bugfixes for big POST buffers

  new module infix.lsp for parsing infix expressions

  in newlisp-tk changed /tmp to tmp for Linux/UNIX

- 7.2.6
  (new CTX 'CTX2) copies context CTX to CTX2, helps using
  contexts a objects, which can be instantiated from a template
  context

  'define' 'constant' used in contexts will always force creation
  of the symbol in that context, never overwrite definitions in
  MAIN. This is changed behaviour also be reflected in the documentation.
  The old way was leading to unexpected definitions in MAIN of symbols
  although loaded from a context. 'set' still will first look for a
  global in MAIN.

  fixed false error messaging on certain parenthesis errors

  fixed wrong error message when trying to define protected
  symbol

  error message 'parameter out of range when calling 'gammai',
 'beta' or 'gammaln' with first parameter 0.

- 7.2.7
  contexts now can be assigned to variables and referenced
  during runtime, i.e. 'contextVar:varName' with late binding
  of contextVar.  New possibilities of OO programming and lexically
  scoped programming, see new chapter in the users manual
  about 'Programming with context objects'.

  stronger separation of contexts from context MAIN, only
  primitive symbols, context symbols, true and nil are
  inherited

  'new' now returns the new context, formerly 'true'

  'set', 'setq', 'set!', 'constant' now return the value of
  the symbol set when the rvalue is missing i.e:
  (constant 'foo) will make foo a constant and return it's
  curent value

  protected all symbols in MAIN in newlisp-tk.tcl v 1.03
  against accidental overwrite

  cleaned up toal mess of tem pdir detection in unix mode

  cleaned up init.lsp

  'nth' now can take multiple indices, i.e.:
  (nth 1 2 0 '(1 (a b (c d)))) => c
  good for working with matrices or sparse matrices
  out of bounds indices return the last in dimension

  'set-nth' like former 'replace-nth' but multidimensional
  like 'nth'
  (set-nth 1 2 0 '(1 (a b (c d))) 'x) =>  (1 (a b (x d)))

- 7.2.8
  eliminated statics in lambda expression, not necessary
  anymore as we have dynamic contexts, which also
  create a lexically closure around vars

  fix in dolist, how cleanup is done

===============================================================================
- 7.3.0 Released version 2003/11/03
  (cpymen fromAddress toAdress nBytes), address may be integer
  or string, only for internal use, not documented. Could be
  used with 'dump' to hack lisp-cells and symbols-cells.
  i.e. to unprotect a symbol :
  (cpymem (pack "c c" 0 32) (last (dump 'sym)) 2)

  fixed error message reporting in 'set-nth'

- 7.3.1 released Nov 11 2003
  'import' was broken in Win32 native version when working
  inside contexts (odbc.lsp and mysql.lsp)

  (pretty-print line-length indent-string)
  experimental not documented yet, to change pretty printing
  behaviour, without args returns current status => (64 " ")
  64 length 1 space for indenting

- 7.3.2
  'char', 'collect', 'lookup', 'nth', 'pop', 'push', 'select', 'set-nth'
  and 'slice' now all accept negative offset which will count from the 
  end of a list i.e. (slice "newLISP" -4 2) => "LI"

  'push' and 'pop' now can take multidimensional offsets like
  'nth' and 'set-nth'

  'collect'/'select' now return the last element for offsets to big
  (formerly nil)

  'pretty-print' now tested and documented

  1.e-1 or 123. , a decimal point without following digits is
  no an accepted number format

  in newlisp-tk the windows position gets now saved when saving
  Options/Settings

  fixed bug in 'let' when returning a local var

- 7.3.3
  new 'push' changed 'nilCell'

- 7.3.4
  newlisp_manual.html with Kazemori edits
  
  'list' now accepts unlimited number of arguments

- 7.3.5
  'push' could not append to an empty list

  handling big buffers in newlisp-tk in evaluation

  common floating point exception handling on all
  platforms (BorlandC and GCC)

  block mode for remote connection starting with [cmd]
  on a line by itself and finishing with [/cmd] on
  a line by itself
 
  sets locale environment on non-US versions of an OS
  platform, this enables automatically correct character
  handling (i.e. upper-case) on non-engish character sets
 
- 7.3.7
  newlisp-tk.tcl now takes advantage of new block mode (multiple
  lines in interactive mode). This ways one of the ports in
  communication with newlisp could be eliminated and browser-editor
  buffers of unlimited length can be evaluated, preferrably in
  evaluation without printing (left of the two buttons)

  doc changes for 'silent'

- 7.3.8
  'let' now accepts also alternative syntax without the parenthesis
  around var - exp pairs: (let (var1 exp1 var2 exp2 ...) body )

  doc changes for 'let' and chapter 'Lambda expression'
  doc change new function 'set-locale'
  doc change new sub chapter 'Switching the locale' in chapter
  'Localization and customization'
  doc change new file LOCALIZATION

  'fn' may be used instaed of 'lambda' (save typing)
 
  'set-locale' changes usage: (set-locale) => return current
  setting, (set-locale "") => switches to local locale with
  all option turned on. (set-locale str int) switches to locale
  in str with category option int as speicied in "locale.h" of
  platform/OS, look for defs of LC_ALL, LC_NUNMERIC etc..
  on  startup newLISP tries to swithc to ISO "C" locale.

- 7.3.9
  'push' and 'pop' now can take the int-offsets in a list to
   work together with new 'ref' which reports the position of an
   expression in a nested list

   doc changes (sometimes only small changes)
        'push', 'pop', 'symbol?' new function 'ref'
	'save', 'set', 'Arrays and Hash Tables ...', 'close',
	'cons', 'context', 'delete', 'explode', 'fft', 'find',
	'format', 'intersect', 'lambda?', 'length', 'let'
	'make-dir', 'match', 'net-receive', 'net-select',
	'net-send', 'new'

   changed options flag will trigger recompile when caching regular
   expression patterns

   'select' evaluated args in offset list

   'join' evaluated args in string list

   'append'' evaluated the first string arg double

   all type predicates now given an error message if the
   argument is missing, previously 'nil' ('true' on atom?)

   getting an int from a 'inf' floating point crashed on  Borland Win32
   now returns 0 like on other platforms

- 7.3.10
  'remove' didn't check for list type in second arg and bombed

- 7.3.11
  new compile for Win32 DLL with makefile_win32dll
  see file win32dll.readme for unsolved issues

- 7.3.12
  (replace expr aList) now works like 'remove', but for removing
  strings the empty string "" must still be specified:
  (replace str aString "")
  'remove' is deprecated and will not be available anymore in 8.0

  new 'flat' to flatten lists complements multidimensional set
  of list functions, example:
  (set 'lst '(a (b (c d))))
  (map (fn (x) (ref x lst)) (flat lst)) => ((0) (1 0) (1 1 0) (1 1 1))

  newlisp.dll now runs qa suite

- 7.3.14
  DLL now suppresses pop up on FP domain error (thanks Steve)
  DLL now also can use print statment, output will be in return
  value.

  'replace' did not work correctly when removing multiple expressions
  at the beginning of a list

  doc changes 'replace', 'flat', chapter 'Deprecated functions'
               chapter 'DLL module ...'

  error message for "string too long" now reports shorter string

- 7.3.15
  better error reporting on some string getting functions when arg
  is missing

  doc changes license change for documentation, misc. links

  replace could not handle empty search string

  Win32 DLL no contained in Win32 distribution

  fixed error in httpd

- 7.3.16
  error messages in newlisp.dll where broken becuase of wrong makefile_win32dll

  newlisp-tk.html now reformatted to manual HTML for better maintenance/conversion

  slight optimixation in 'nth' and 'set-nth'

  fix for 'nth' on empty string

  better error messages on missing args in various functions

  link.lsp now also works on win32 DLLs but is not supported anymore
  for CYGWIN, use a win32 compiled newlisp.exe and newlisp.dll instead,
  both work fine under CYGWIN

  doc change for chapter 'Win32 DLL  ...'
 
  fixed 'silent' mode for DLL

  'float' conversion noe accepts leading . without zero like the
  internal parser

- 7.3.17
  doc changes as of Sam Cox's and Nigel's postings on 
  http://www.alh.net/newlisp/phpbb/ on 2003-12-07

  new functions 'atan2' and 'irr' and documentation

  eliminated compiler warnings for Linux GCC 3.3.1

- 7.4.0rc1
  'irr' now strips of digits less than precision 1e-5

  'set-nth' alsow works on strings (singular index)

  'swap' now works on strings, also return value changed
  from swapped pair to changes list/string

  'pretty-print' had a cell leak

  in the installation for LINUX/BSD etc. the doc directory has been
  moved from /usr/doc/newlisp to /usr/share/doc/newlisp
  newlisp-tk.tcl 1.07 changed accordingly

  upgrade to PCRE 4.5 files

  'integer' didn't truncate to -MAX_LONG

  'integer' did not truncate to MAX_LONG when feeding big
  floating point numbers, but crashed on Win32

  on Win32 float functions on NaN crashed

  doc changes: integer, NaN?, error-event, error-text, atan2

- 7.4.0rc2
  enabled error events in Win32 DLL module

  update finger example file and example in doc
  doc change 'net-connect'

- 7.4.0rc3
  floats now work in imported fuctions (tested on x86 platforms)
  and up to 14 parameters (previously 10) are accepted, floats
  count as two

  nth-set like set-nth but different return value, was in rc2
  but now documented

  doc changes: chapter 'Functions in groups', 'import', 'inc', 'dec'
              arithmetik operators +,-,*,/, 'set-nth', 'nth-set'
              'sort', '%', 'mod', '<,>,=,<=,>='

  doc new file: hacking_newlisp.html with describes previously
  undocumented features

  'for', 'dotimes', 'seqence', 'series' now return a 'invalid parameter: NAN'
  error when NaN parameters are passed

===============================================================================
- 7.4.0 release 2003/12/20
- 7.4.1
  commandline switch '-m N' where N is the max number of megabyte newLISP
  is allowed to allocate for LISP cells

  setq,set!, define (as set) did not work right with dynamic context vars

- 7.4.2
  %s format now recognizes precision i.e: (format "%5.2" "hello") => "   he"

  various doc changes

  pop3.lsp now handles pop3 servers w/o LAST command, but only on the
  functions: get-all-mail and delete-all-mail

  char did not convert the  0 correctly, now: (char 0) => "\000"

- 7.4.3
  fixed printing context name when in a context other than MAIN
  this affected the newlisp-tk frontend since v. 7.2.7

  many doc corrections, now rev 5

- 7.4.4
  (now ... ) returns an additional number 'minutes west of GMT' 
  for the timezone offset 

  the optional time ofset parameter in 'date' and 'now' must now
  be given in minutes west of GMT, was previously in hours, 
  standard when using time zone offsets

  max cell count as specified in command line swith -m now second
  number in 'sys-info' if not specified defaults to 0x10000000

  doc addition of -m commandline switch and change in 'sys-info'

- 7.4.5
  format now can take unlimited number of parameters, before 2048

  changes in stat.lsp, smtp.lsp and httpd for new 'sys-info'

- 7.4.6
  fixed problem in float -> integer conversion of big numbers

  attempt to fix for last parameter of 'now' for solaris (not tested)

- 7.4.7
  updated to BWidget-1.7 in newlisp-tk (since 7.4.6)

  timezone offset in return value for 'now' set to 0 on SOLARIS

  plotting with stat.lsp and gnuplot was messed up on Win32, now
  can also do multiple plot one after another using 'process' instead
  of exec

  eliminated 'gettime' example, as that service doesn't run on most
  computers these days

  'import' on Win32 now can use cdecl calling conventions with
  additional parameter string "cdecl" when importing functions. 
  This allows calling many third party DLLs without special wrapper DLLs
  On LINUX etc. the extra parameter is ignored.
  
  mysql.lsp version 2.0, several functions changed and offsets defined
  for MySQL v.4.0, previous versions will not work

- 7.4.8
  improved error message for missing par

  sqlite.lsp - module for SQLite datavase from http://www.sqlite.org
  
  mysql.lsp small fixes and revised test routine, tested on MySQL v. 4.0

  'transpose' now transposes any kind of matrix (previously only matrices
  containing numbers; it also rectangualarizes matrices; speed improved
  3 fold.
 
  in 'if' and 'cond': if the last condition given is the empty listy ()
  which evaluates to nil in a boolean context, and if no then/else actions
  or now cond action is given, then the empty list () is returned (previusly nil) .

  fix for 'date' which crashed at values overflowing int32 (2038 1 19 3:14:07)

  logging has been changed to a fixed filename 'newlisp-log.txt

  new command line switch -h

  better pretty printing of symbols which are constant and global

===============================================================================
- 7.5.0 RELEASE 2004-01-21
  cgi.lsp, form.html, form.cgi where missing from FILES inventory

  new 'sqlite.cgi' web script for administering SQLite database in newLISP

  eliminated various unused vars with -w8004

  fixded bug in 'global' printing
 
  changed directory structure, new dirs: doc, examples, modules 
 
- 7.5.1
  (rotate '()) crashed because of list length zero

  fixed nested catch/throw

  fixed lambda stack oberflow after 3000 catch
 
  eliminated array.lsp instead shorter hash.lsp for hash functions

  changed sqlite.lsp to version 1.6, name change for future 
  reserved word 'array' 

  dynamic context var refs now work inside contexts, this makes
  it possible to call constructors from inside the class context

  improvement of floating point speed 60% in simple arithmetik
  and 25% in most floating point functions

  (format "%d" 1.23) => "1" before this was not permitted
  (format "%5.2f" 10) => "10.00" also allowed now

- 7.5.2
  (array i j k aList), returns a 1 to 8 dimensional array and
  initializes optionally from flat list in aList 

  (array-list myArray) returns a list conversion of myArray

  (aray? expr) tests if expression is a list

  all array acces modification via nth, set-nth and nth-set

  also released benchmarks  comparing with Perl, Python and Guile,
  see at: http://newlisp.org/benchmarks


- 7.5.3
  (seek 0) now returns numbers of characters printed to stdout,
  works on BSD but on LINUX and Win32 will always return -1

  'integer' now takes additional base parameter after the
  default parameter, i.e:  (integer "1111" 0 2) => 15
  note, that hex numbers still need to be prefixed with 0x
  even when specifying base 16

  added txt2pdf.lsp as a new module in the module directory

  comprehensive manual edit by Brian Clausing (thanks!)

  new chapter about linking LISP source and executable

  all deprecated functions thrown out:
  concat, remove, replace-nth, sublist, substring, read-process
  read-url, write-process. All have replacements, see manual.

  changed cgi.lsp, stat.lsp, spam-filter for deprecated functions

  1% overall speed improvement 0.5% size reduction

  nth didn't work on lambda in 7502

  'format' increasing of ars beyond 2048 has been rolled back
  because of problems when evaluation of args is deeply nested

- 7.5.3a
  changes in newlisp-tk.tcl for deprecated 'remove'
  changes in qa for deprecated functions

 
- 7.5.4
  15% speedup in 'format'

  writeStreamStr() and readStreamText() did not handle zeros

  'source' like save on strings eliminates tmp directory in
  new newlisp-tk v.1.09

  1000+ times speedup in XML parsing of bigger files 
  changing a strncpy() to a memcpy()

- 7.5.6
  newlisp-tk 1.10 now shows message box when trying to open
  debugger with browsers at the same time

  updated FILES inventory

  logging did not work as described (was always on with -p -d)

  net-listen and net-receive-udp take as an additional optional
  parameter the address the listening socket should bind for
  computers with multiple network adapters

  optional last parameter in net-send-udp for specifying 
  broadcast mode with 'true' (or anything not evaluating to nil), 
  not necessary on wome Win OS where '255' on last address byte 
  is enough to turn on broadcast mode

  Ctrl-C handler simple on Win32 and with continue, exit, reset
  menu on LINUX/BSD (somewhat unreliable?)

  Broken Pipe on net-send now handled correctly on Linux/BSD
  is handled by socket stack on Win32

  (slice str 1 -1) does not crash anymore (length arg should
  never be negative)

- 7.5.7
  signal handlers now initialized before loading commandline
  scripts

- 7.5.8
  shorter code for swap
  
  defunct zombie child processes now cleaned up by 'process'
  on UNIXs

  fixed potential bug in regex replace when replacement expression
  evaluates to no-string

- 7.5.9
  all functions changing the contents of a symbol (destructive
  functions) will now cause an error when used on symbols protected
  with 'constant', previously it worked only with set, set!, setq
  and define, define-macro; loop variables in dotimes, for, dolist
  and dotree are protected against change by user with an error 
  message during looping and may not be constant before the looping
  starts using them
  
  new manual chapter about 'Variable names and numbers syntax"
  
  bug fixes/additions in httpd, now version 3.3
  
  fixed potential memory overwrites in nl-web.c

  error message length limited to 1024 characters

- 7.5.10
  rolled back symbol protection for dotree and dolist, which
  is not necessary

- 7.5.11
  new mode for 'open' "pipe' or "p" opens a named pipe non-blocking
  for reading

- 7.5.12
  rolled back protection for dotimes, for loop variable solving
  crash problem in different way

- 7.5.14
  documentation fixes and compiler warnings fixes

  two additional file for viewing manual in frames with index

  the Win32 installer puts entries in startmenu including an uninstall

  The WIn32 installer puts a newLISP icon in desktop and startmenu links

  protect built-in functions from overwriting with import but the 
  function can still be imported in a context different from MAIN

  eliminated "pipe" or "p" mode in 'open' instead "non-block" or "n"
  as additional option after "read" or "write" option

  net-lookup, net-select, net-send-udp, net-peek did not clear net-error

  net-select now can accept a list of sockets instead of one socket
  net-select now has a third mode "exception" or "e" to test error
  conditions on socket

  apply works reducing a list when additional reduce count is given

  load takes multiple filenames

- 7.5.15
  integer and float now return nil or the default value when type
  other than string or number is specified, previously this
  caused an error message

  expanded chapter on Tcl/Tk Variables in:
  "Writing applications with newLISP and Tcl/Tk"

- 8.0.0rc1  
  added more examples to newlisp-tk.html

  allow [cmd] tag in -d mode

  reopen mode in [cmd] section for potential memory leak after
  error conditions or on reconnect

  allow contexts to be overcopied (broke benchmarks)
 
- 8.0.0rc3
  re-fixes the memory leak for [cmd] tags

- 8.0.0rc4
  doc changes manpage

  take abs() value in -m commandline option 

  reorder help menu for logical sequence of options

  newlisp-tk 1.12 now tolerant for not finding "Fixedsys",
  "Lucida Console" or "fixed" fnt. Will take first font found
  
  newlisp-tk 1.12 now save newlisp-tk.con correctly in home directory
  of UNIX (startup dir in Win32)
  
  man page for LINUX et al, thankyou Nigel Brown 

- 8.0 released April 7 2004 ============================================
  version nunbers changed from 8.0.0 to 8.0 to distinguish
  rc versions from final version

  sys-info now returns 7 as OS number of win32dll

  corrections in MemoryManagement.html and newlisp_manual.html

- 8.0.1
  changed package version number to dotted form for compatibility with
  RPM packaging

  changed Makefile install option for RPM compatibility and added
  'make rpm' for makeing rpm package

  man page for newlisp-tk 

  array was not serialized correctly in 'source' and 'save'

  negative indices in arrays, which are too big now give out-of-bounds 
  error (previously took first element as for lists)

  now up to 16 indices can be specified, previously 8

  changes in docs for array chapter and functions

  in newLISP-tk under Linux/Unix file open dialog now starts
  with /usr/share/newlisp/newlisp-tk


- 8.0.2 Released 2004-05-02 ============================================

  httpd version 3.5
  
  doc changes

- 8.0.3
  constant did not allow multiple args

  parse now recognizes zero length token and stops parsing
  instaed of going into a loop

  fix for contextvars in tcl/tlk IDE v1.15 and p_context()

  bug fixes in cgi.lsp now v.1.5

  documentation corrections

  a bug fix in the reset routine

- 8.0.4
  fixed the fix in reset
 
  cell leaks in error messages in catch/throw situations are now avoided

- 8.0.5
  filter now filters nil symbols like nil values (like if, while, not etc)
  this effects the function index in the same way

  access system variables $0, $1 ... etc. with an index ($ 0), ($ 1) .. ($ i)
  where i is an integer

  bug fix for catch when result variable has same contents as return from
  catch statement

- 8.0.6 Released 2004-06-06 ============================================
  new env replaces deprecated environ, getenv, putenv (still available but
  to be eliminated in 8.1)

  additional paragraph about ovewriting global symbols in the chapter
  'Contexts' 

- 8.0.7
  net-receive-udp can take an additional timeout parameter 

  doc changes for net-receive-udp

  new example whitelist-filter for email filtering

- 8.0.8
  trim now can take optional second trim-character parameter:
  (trim "---HELLO===" "-" "=") => "HELLO"
  (trim "0001234" "0" "") => "1234"
  allows trimming of only one side (empty string) or different
  trimming left and right

  new functions 'utf8' and 'unicode' to convert between utf8
  and UCS-4 encoded Unicode

  UTF-8 versions of: char, upper-case, lower-case, first, rest,
                    chop, explode, last, trim, collect select,
		    nth, set-nth, nth-set

  any positions/indices in the UTF-8 versions  of char, nth
  set-nth and nth-set refer to (multibyte)character positions
  rather than byte positions

  find and regex return byte positions, slice takes byte positions
  reverse always works on byte level, to reverse utf8 strings use:
  (join (reverse (explode str)))

  changed parsing of octal numbers 090 now "0" "90"

- 8.0.9
  'source' now also working on context symbols
  fix for 'trim' in utf8 version
  fix for 'set-nth' and 'nth-set' in utf8 version
  version 3.7 httpd fixing problems with post on IE

- 8.0.10
  'net-sessions' now registers connecting peer in -p -d modes
  makefiles for MinGW compiler for newlisp.exe and newlisp.dll
  MinGW will eventually replace Borland BCC 5.5 as the default
  compiler for the Win32 binary distribution
 
- 8.0.11
  a fix for server crash in -d mode when reconnecting on Linux

- 8.0.12
  now will reset when client exits in -d demon mode (still does
  not maintain demon mode on slackware 2.4 but Debian 2.6
  Linux Mandrakae 9.2/2.4.22 and FreeBSD  4.7 are OK)

  new function (dup expr n) repeats expression n times in
  list or string
  function 'pipe' works on MinGW compiled version

- 8.0.13-14
  fix of 'test-pipe' in fle qa
  new option in Makefile: make uninstall
  /usr/share/newlisp/init.lsp now tries to load $HOME/.init.lsp
  as a user specific .init.lsp after the system wide init.lsp
  $HOME gets defined as (env "HOME") or (env "USERPROFILE") 
  or (env "DOCUMENT_ROOT")  
  whatever is available in that sequence
  fixes restart problem in demon mode

- 8.0.15
  makefiles for newlisp as a shared library on Linux and BSD:
  newlisp.so, the function to import is: newlispEvalStr

  'print' and 'println' in newlisp.dll now  are always
   returned correctly in the return value of 'dllEvaStr'
   was not working correctly before in many cirumstances

  'newlispEvalStr' will replace 'dllEvalStr' in future
   version in newlisp.dll, at the moment both work
   this change was made for consistency over platforms

   new chapter "Shared library newlisp.so on Linux/BSD" in users manual

- 8.0.16
   doc changes for 'net-receive-udp'
   'net-receive-udp' can now receive on a specific IP address, this
   was documented already but not working

   'net-connect' and 'net-listen' ca use a "udp" option to do
   nonblocking UDP data exchange with net-send and net-receive and
   without immediate closing of socket as happening using
   net-receive-udp and net-send-udp. See documenataion for
   net-listen and net-connect in the manual

   improved error message for missing parenthesis 

   newlisp.vim VIM syntax file now included in source distribution
   thanks to David from http://www.geocities.com/excaliborus/ for
   this contribution
  
   updated the CREDITS file

   all predicates, which ended in p when using HTML (i.e. listp for list?)
   have been renamed to using the '?' instead of 'p' in HTML to make
   utilities, which position in the newlisp_manual.html work

- 8.1.0rc1
   fixed memory leak in 'irr'
  
   new 'net-receive-from' and 'net-send-to' for non-blocking UDP
   communications over open connections

- 8.1.0rc2 
   an almost double speed and smaller parser for pack/unpack format strings,
   which does not need spaces in between the format specifiers

   a fix in net-send-udp not closing the socket after the new changes in rc1

   doc changes

- 8.1.0 Released version on 2004-08-10 ========================================
  two new example programs: udp-server.lsp and udp-client.lsp to demo
  non-blockig UDP communications

  merged bugfixes from dlcompat as of cvs 2004-07-12  Peter O'Gorman
  this affects only Mac OSX

  added -c option for suppressing the prompt

  added node.lsp in modules directory for building newLISP clusters.

  new versions of several modules and example files to account for
  new version numbering

- 8.1.1
  sleep now rounds to the nearest full second on systems where nanosleep()
  is not available.

  timeout option in net-receive-udp works again

- 8.1.2
  'make install_home' and 'make uninstall_home' of installations on Linux/UNIX
  in the home directory of the user in $HOME/bin and $HOME/share/

  'search' crashed on invalid filehandles

  new 'expand' for expanding variable bindings in lists

- 8.1.3
  a fix for 'get-url' on some Solaris installations

- 8.1.4 released August 21st, 2004 ==========================================
  doc changes ansd new option 'make version' for changing version numbers
  in all affected files

- 8.1.5
  nl-sock.c missed a change for Win CE, PocketPC

  qa - testfile now complete with all functions, use: ./newlisp qa to test
  without process and test functions using process, or use: ./newlisp qa ext
  to test for all function (only Win32 and Linux)

  a fix for timeout values > 1000000 usec on BSD and Solaris in net-select
  and net-receive-udp

  in net-listen and net-connect specify "multi" or "m" instead of "udp"
  for UDP Multicast mode

- 8.1.6
  'collect' and 'select' are collapsed into 'select' which is now also
  type polymorph on the second parameter.

  new makefile_solaris_utf8

  new 'fork' function for lauching a newLISP child process thread
  on Linux/UNIX only and CYGWIN on Win32.

- 8.1.7
  fixed rounding error in 'sleep' when compiled with NANOSLEEP

  improved qa routines using 'fork' on Linux/UNIX for some tests

- 8.1.8
  new 'wait-pid'for watching the status of child threads created with 'fork'
  and proccesses created with 'process'

  upgraded to PCRE v. 5.0

  more tweaks in qa file

  fixed potential memory leak in 'new'

- 8.2.0 Release September 21st, 2004 ======================================

- 8.2.1
  write-buffer can now take string instead of file handle to write
  to a string in a string growing (concatenating) fashion, this is
  much faster then doing (set 'str (append str content)) now:
  (write-buffer str content)

  'symbol' now can overwrite global symbols from MAIN (i.e. built-ins)
  i.e. (symbol "print" 'MyContext)

  'process' now ca take to addtioal pipe handle parameters, which
  get mapped to stdin and stdout for the new process:
  (map '(myin bcout) (pipe))
  (map '(bcin myout) (pipe))
  (process "bc" bcin bcout)
  (write-buffer myout "3 + 4\n")
  (read-line myin) => "7"

  'semaphore' lets you create wait and signal semaphores
  (set 'sid (semaphore)) ; aquire
  (semaphore sid -1)     ; wait
  (semaphore sid 1)      ; signal
  (semaphore sid) => 1   ; status
  (semaphore sid 0)      ; release/delete

  'share' to create shared memrory regions
  (share) => address off mmap share
  (share addr exp) => sets addr to exp for integers, floats and strings
  (share addr) => returns integer, float or string exp

  added newLISP-Excel-Import.xls example to examples/ directory
  added prodcons.lsp - demo for fork, wait-pid, semaphore and share

- 8.2.2
  'write-line' with string device like 'write-buffer', in both
  symbol is now protected if protected with constant

  share was broken for strings

- 8.2.3

  pipe is now also available on CGWIN and Borland compiled versions
  on all Win32 versions pipe can now remap std I/O like on Linux/UNIX:

  (map '(myin bcout) (pipe))
  (map '(bcin myout) (pipe))
  (process "bc" bcin bcout)
  (write-buffer myout "3 + 4\n")
  (read-line myin) => "7"

  process on Win32 can hide or minimize window:
  (process application 0 0 0) => hide app
  (process application 0 0 1) => show app
  (process application 0 0 2) => minimize app

  'share' and 'semaphore' are now also available on Win32

  improvements in qa file, now tests all functions by default w/o ext option
  better syncronization on some tests with semaphores

  'match' in list mode now only returns matched expressions

  (map set '(x y) (match '(a (? c) d *) '(a (b c) d e f)))
  x => b
  y => (e f)

  when using match with an optional third parameter 'true', it works
  in the old fashion:  (map pattern aList true) => works like before

  The context default function is a userdefined function with the same name
  as the context it resides in, i.e: (define (ctx:ctx a b) (+ a b)) and can
  be called just with the context name (ctx 3 4) => 7. 
  Default functions should only be called rom MAIN, or have already been 
  loaded or their context created before referred to in another context or
  default function.  Not yet 'official' see doc/default_functions.html

  fixed cell leak in 'match' on backtracking

  bug fix in let which did not honor protected symbols

- 8.2.4
  deprecated collect, getenv, putenv and environ completely eliminated from
  newlisp and examples, modules: httpd, cgi.lsp, sqlite.lsp

  '+' new wildcard operator 'match': take one or more

  net-error now returns error number and text separate in a list

  net-connect failure did not set net-error

  'now' has now the daylight-savings-flag 0 or 1 as last parameter

  new 'sys-error' for reporting C-library errno values

  'newlisp -e' without a command string crashed

  'push' now optimized when pushing as last element with -1

  (new ...) now will not overwrite existing symbols, to allow true
  mixins of other contexts. To overwrite symbols as before version
  8.2.4 use the true as a third parameter i.e. (new A 'B true).

- 8.2.5
  'symbol?' can now be used on dymamic context vars, i.e
  (set 'ctx MyCTX) ; MyCTX is existing context
  (symbol? 'ctx:x) ; true if MyCTX:x exists, nil if not  
  This checks the xistence without inadvertantly creating it.
  previously (symbol "x" ctx nil) had to be used.

  'replace' can now take an additional option bit 0x8000 for replacing
   only once in a string: (replace "a" "aaa" "A" 0x8000) => "Aaa"


  'define-new' copies individual funtions from
  other contexts with or without renaming them to a new function:.
  (define-new 'foo:func 'bar:func) copy to different context
  (define-new 'foo:func 'foofa) copy to current and rename

  forward referece to a symbol in symbol did not work in mixin mode
  of 'new'

  the space between optioncharacter (-s,-m,-p,-d,-e) and optionvalue
  can now be omitted, i.e. -s 10000 and -s10000, both work.

  'date' without an argument returns the character string for the current
  local time, this avoids the construct (date (apply date-value (now)))

  'date-value' without and argument returns the time of seconds
  since 1970-1-1 0:00 equivalent to (apply date-value (now))

8.2.6
  'delete' now can delete an entire context without removing conatined 
   symbols first

  serialization of contexts to a file using 'save' now is done correctly 
  when the context context contains overwrites of global symbols.

  a more flexible and faster 'symbol' function, which can take any character
  sequence and numbers, and can be used this way for hash-like associative 
  memory access. New module hash.lsp to show usage.

  'define-new' renamed to 'def-new', for shorter typing and for not 
   associating it to 'define' but rather to 'new' (was introduced in 8.2.5)

  'letn' works similar to 'let' but incrementally uses the local variable 
   bindings like multiple nested let when evaluating the initializer expressionsi
   for locals.

8.2.7
  'address' (previously only documented  in 'hacking_newlisp.html') now also 
  returns addresses to integer and double float data type, useful when passing
  int * or double * to imported functions, now documented in main manual

  'sym' is an abbreviated form of 'symbol', since 'symbol' starting in 8.2.6
  can take any sequence of characters, including strings which are illegal
  symbols in newLISP syntax, and is used for hash/dictionat like lookups, it
  is used more often, therefore this shorter form 'sym' is introduced

  added configuration variable in newlisp-tk.config to specify a newLISP
  application. See newlisp-tk.html "Delievering Applications" for details

  'apply' and 'map' now can be used on macros

  'pack' and 'unpack' have new format specifier 'b' for unsigned 8bit numbers

  'encrypt' crashed on empty strins in key

8.2.8
  'encrypt' crashed on empty key-string, now gives error message

  'int' as shorter writing of 'integer'

  'pack' now converts all types as needed, i.e. (unpack "b" (pack "b" -1.0)) => 255
  from-to integer-floats, did it before only for "f" and "lf"

  'flt' converts a number to a 32bit float repesented by an integer for usage
  in calling imported library routines, which take floats.

  'array' skipped wrong index types instead of giving error message

8.3.0 Released Nov 21st, 2004

8.3.1 Released Nov 23rd, 2004 ============================================
  'nth-set' gave error on protected symbol in index

  'apply' 'map' on macro was returned to 8.2.0 behaviour

8.3.2
   more cleanup in qa file

   cleaned up makefiles -D definitions eliminating redundant -DOPSYS

   eliminated 'break', which did not do anything after introduction
   of 'debug' in version 6.3.07

   overall speedup of about 5% by predefining system symbols
   $0 -> $15, speedup of 80% to 100% in functions using system
   symbols like set-nth, nth-set, find, parse, regex, replace

   new 'do-while' and 'do-until' check condition _after_ evaluating
   the body expressions

   new 'read-key' reads nonblocking keyboard character code
   not working on Mac OSX but all other flavors

   superflous args in user defined function call caused cell leak
   never happened, i.e.: (define (foo x) ..) and (foo a b c)

   'get-url' now handles "Transfer-Encoding: chunked" correctly

   'amb' picks an argument at random and evaluates it

   -x command line switch for server mode with handler function 
   'x-event' i.e: newlisp my-httpd -x 8080 
   my-httpd is a lisp file containing the user defined handler 
   function i.e: (define (x-event request) .....)
   this way servers for different protocols / requests can be simply
   programmed using 'print','read-line', etc., for IO to the specified
   port, the connection stays up until closed by the client.
   See chapter 'Command line options ...' in the manual

   fixed a bug in 'new' and 'def-new' when the source was MAIN 
   this fix was necessary to write a function (def-static ....)
   for writing statically scoped functions (see int the manual
   chapter 'Lexical, static scoping in newLISP', subchapter
   of 'Programming with context objects'.

8.3.3
   'debug' did not handle default functions written without colon

   'save' 'source' did not space symbols under sum circumstances

   'dolist' now double as fast and safe to break out with 'throw'

   'catch' now has an additional syntax with just one argument to write
   easier returns from functions, loops or blocks, ie:
   (catch (dotimes (x 1000) (if (x 500) (throw "fin"))) => "fin"
   returns the result  or throw argument

8.3.4
  'save' 'source' spacing-fix was incomplete

8.3.5
  If the a '!' is entered as the first character on the command line immediately 
  followed y a shell command, that command will be executed, i.e. !lsi in Unix 
  or !dir in Win32 would show a directory listing. There should be no space 
  between '!' and the shell command.

  URL length in get-url and post-url is now unlimited

8.3.6
  manual corrections, additions and new sub-chapter about XML-RPC

  BASE64 encoding and decoding with 'base64-enc' and 'base64-dec'.

  new sign-on message, and different for remote modes

  added 'xmlrpc-server' to examples directory
  added 'xmlrpc-client.lsp' to modules directory

  fix for 'Transfer-encoding: chunked' if 'Content-length:'
  is given too (which should not happen but is found occasionally)

8.4.0 Released 2005-01-18 ============================================
  added xmlrpc.cgi for handling XML-RPC requests as CGI

  fixed a file descriptor leak in -d -x modes

  after the 'debug' fix in 8.3.3 debug did not recurse into funcs

  'args' can take an index argment i.e. (args 0) (args 1) etc.

8.4.1
  fixed signon message missing 'n'ewLISP

  added UTF-8 to signon message

  added f-prob to stat.lsp (probability of F ratio for df1/def2)

  (throw-error expr) throws an error with message printed in expr
  error thrown this way can be handled like any other newLISP error
  using (catch foo 'result) or with (error-event ...)

  changed/added docs for catch, throw, throw-error and chapter:
  Integer abnd Floating point ...

  newlisp-tk.exe now wrapped with freewrap v.6.0 and Tcl/Tk 8.4.8
  suppresses occasional display of tcwish console

  added updated newlisp.jsf syntax file for JOE editor to distribution

8.4.2
  [cmd] tags did not work when compiled with READLINE option

  (args) which previously worked only in macros now too works in
  functions. The behaviour of (args) has changed: only unbound arguments
  for which there is now local variable in the macro (or function) are 
  returned in the list. This makes changes in existing macros necessary, 
  which specify both, local variables and they use args. Most changes
  lead to simpler macros or function, because (args) already contains
  only the unassigned args.

  changed macro definition of 'tk' in newlisp-tk.tcl to function

  changed plot 'macro' in stat.lsp and 'defun' in init.lsp

8.4.3 Release 2005-02-12  =================================================
  cleanup from (args) changes, protect $args from deletion

8.4.4
  misplaced paren in conditional def of defun in init.lsp

  OS number in sys-info was incrementing on every call when DLL or UTF-8

  decimal point setting from locale is now used correctly when parsing source
  i.e. after performing (set-locale "German_Germany.1252") in Germany
  1,23 will be recognized corectly as a decimal number with comma as the 
  decimal separator.

  qa_comma QA test file for German or other locales using ',' comma as
  decimal separator, qa renamed to qa_dot for decimal-dot locales.
  In comma locales both, qa_dot and qa_comma should work, in decimal
  dot countries onlz qa_dot will work.

  daylights savings field in 'now' function now shows a flag 1/0 if time
  zone may have DST at certain time of the year on Linux/UNIX. On Win32
  it shows a 'daylight minutes bias' for timezones which may have DST.
  Note that flag/bias is set through all the year even if DST is not
  in effect at a given moment. May not work on all platforms.
  
  additional format parameter in (date num offset fmt), see GNU gcc
  strftime() function for details

  Win32 installation now to $PROGRAMFILES/newlisp, which is 
  c:\Program Files\newlisp on English Windows. This defines a
  fixed location for $PROGRAMFILES/newlisp/newlisp.dll for applications
  loading newlisp.dll. 'PROGRAMFILES' is an environment variable available
  on all MS Windows installations.

  newLISP is now correctly registered in the
  'control panel/add or remove programs' applet

8.4.5
  newlisp.exe compiled on MinGW or Borland now will look for init.lsp
  in the same directory where newlisp.exe resides

  installer now sets path on Win32, this allows to import the DLL without 
  specifying the full path and allows to start newlisp or newlisp-tk from
  anywhere on Win32

  installer now allows installing without newlisp-tk

  'nth' upgraded to 16 indices (like set-nth and nth-set)

  'sort' now allows any binary operator user defined function as
  compare funtion in third parameter

  'implicit indexing' on lists, arrays and strings i.e.:
  (lst 1 3) equivalent to (nth 1 3 lst)
  (ary 0 -1) equivalent to (nth 0 -1 ary)
  ("newLISP" 3) equivalent to (nth 3 "newLISP")
  unlimited number of indices and faster than explicit form

  'pack' and 'unpack' now allow switching between little and big endian
  byte order using new format characters '<' and '>'


8.4.6
  'new' and 'def-new' did not replicate arrays, could cause crash

8.4.7
  added 'upload.htm', 'uplload.cgi' to examples directory
  minor fix in xmlrpc.cgi xmlrpc-server

  better handling of bad server responses in get/post/put-url avoiding
  an ifinite loop on some types of bad server responses

  fix for endian switch in 'unpack' which changed the original buffer

  re-arranged arrays, hashes and indexing chapters in the manual and
  enhanced hashing chapter, added Win32 trailing slash warning to
  manual entries of 'directory' and 'directory?'

  experimental implicit indexing with nrest: 
  (1 '(a b c)) => (b c)
  (1 "abc") => "bc"

8.4.8
  implicit indexing with slice:
  (3 2 '(a b c d e f g)) => (d e)
  (-4 2 "abcdefg") => "de"

  updated infix.lsp to version 1.4/5 was broken after newLISP 8.2.0
  because of change in 'symbol' functioanality

  possibility to check legality of a string as a newLISP source symbol
  with (symbol? string), i.e: (symbol? "a b") => nil

  illegal symbols are now serialized correctly in 'save' using a
  set expression with (sym str context)

  the Win32 installer now will correctly change settings in
  newlisp-tk.config when chaning the install path during installation
  will only work Windows 2000 and later

8.4.9
  did not evaluate length in implicit slice-length

8.4.10
  separated legal symbol? functionality into 'legal?' function. 'symbol?'
  back to pre 8.4.8 functionality

8.5.0 Released April 8, 2005
  '=' fixed problem when comparing strings and binary buffers

  'args' with negative index did hang

  'main-args' nor can be indexed like args, both accept negative indices

8.5.1
  newlisp-tk tripped over file spec "", changed to "." in lastLoadedFile
  on MacOSX. Changed Demo.lsp to work with TLCKAqua on MacOSX.

  new function 'factor' for factoring numbers up to 15 digits 
  (must give floats for numbers bigger max int)

  in newlisp.so and newlisp.dll main-args was initilized to nil instead of
  the empty list ()

  list in 'dolist' now safe to modify (back to 8.3.2 behaviour), but can
  leave with 'throw' without leaking cells

  signalling SIGUSR1 will perform a 'reset' but not kill newLISP

  'timer' start a one shot timer event and registers a user defined
  event handler, i.e: (define (ticker) (println (date)) (timer 'ticker 1))
  defines a self starting and retriggering ticker.

8.5.2
  added debug option to SIGINT handler, eliminated SIGUSR1 handler, because
  is redundant

8.5.3
  added 'signal' for userdefined signal handlers: (signal sig-no symbol)

  args was not reset to '() when left unused in recursion levels
 
8.5.4
  signal handler can pass the signal number as an argument (see manual)

  new makefiles for OSX/Darwin UTF-8: make 'osx_utf8' and make 'darwin_osx_utf8'
  (Darwin means: OSX + readline support)

  when compiled with readline support newLISP will now exit pressing Ctrl-D
  (Linux/UNIX)

  'net-select' crashed on an empty list

8.5.5
  fixed UTF-8 problems in file names in newlisp-tk.tcl (thanks Norman)

  UTF-8 symbols where not treated as legal symbols in 'save' , 'legal?'
  This prevented UTF-8 symbols to show up in the editor/browser listbox.
  This is now fine on all UTF-8 and non-UTF-8 version.

  UTF-8 now handled correctly in hostnames in net-xxx routines

  UTF-8 now handled correctly in 'float' and 'integer', took some
  UTF-8 characters for numbers.

  'net-connect' and 'net-select' did not accept/convert floats for 
  portnumbers/sockets

  sqlite3.lsp v.1.3 now handles FLOAT and BLOB datatypes and finds the correct
  library/location depending on the OS platform

  newlisp-tk did not save pathnames correctly in newlisp-tk.conf. New

  version newLISP-tk 1.26 now works correctly when installing on MacOSX
  use 'sudo make install' after build with 'make darwin' or 'make osx'
  needs TclTk Aqua installed with darwin port tools

8.5.6
  fixed potential problem in 'net-connect' with multicast option on
  big-endian CPUs (MacOSX)

  added broadcast option to 'net-connect' as udp mode plus broadcast specified
  with "b" or "broadcast" instead od "udp". Broadcast mode was already possible
  in 'net-send-udp'. Now broadcast can be set up in non-blocking mode on the 
  receiver side.


8.5.7
  big speedup of 'replace' with strings on a file of 100k about 30x on
  500k about 500x times speedup.

  added example/tcltk.lsp for showing how to make GUIs without newlisp-tk
  controlled from a newlisp script


8.5.8 
  added true/nil as allowed data in memory shares

  added new make flavor osx_lib for shared library newlisp.so

  MacOSX binary are smaller now because since 10.3 osx-dlfcn.o
  is not required anymore, but extra makefile_osx_10.2 for older
  Mac's

  flushing stdio after output if not in terminal mode lets newLISP
  now serve as a UNIX inetd handler 

8.5.9
  'timer' now can take fractions of a second, i.e. (timer 'alarm 0.1)
  for 100 millisec

  'read-buffer' now can take an optional wait string as 4th parameter
  similar to 'net-receive' with wait string

  added Mac OSX package preperation to Makefile

  dropped cygwin support. MinGW and Borland remain as Win32 options
  #ifdef's for cygwin are still there but have not been tested for
  several versions

8.5.10
  fixed a crash when hitting cursor-up inbetween [cmd]...[/cmd] tags

  'timer' now avalailable on Win32

  fixed a regex error, when expression found is of length 0
  only one replacement was made

  implicit indexing did not accept indices after a var-index, if
  var-index was the first.

8.6.0 released June 10 2005
 a bug fix for unpack when passing a number as an address on
 OpenBSD where virtual memory pointers may be > 0x7fffffff

 new function crc32, version: http://www.w3.org

 share on Win32 leaked memory

8.6.1
 'sql3:open' now returns nil and sets error the message when trying
 to sql3:open twice.

 'timer' now returns the elapsed time when calling just with the
  event symbol, useful for checking timer progress or programming
  timelines/schedules.

  'source' now works like 'save' and can take multiple symbols;
  context symbols are serialized including all of the contained
  symbols.

  Files are now created without execution permission with rw-rw-rw
  which results in rw-r--r-- on UNIX systems assuming a user mask
  of 0022.

  'peek' similar to 'net-peek' but for any file descriptor, returns
  number of bytes ready to read works also on std I/O 0/1. Only UNIX.

  Added gmp.lsp for GNU Multi Precision library, contains
  integer functions for arithmetik, see header of file gmp.lsp
  for details.

  optional parameter 'true' in 'difference' and 'intersect' puts
  these functions in list-mode (versus normally set-mode).

  new function 'title-case' upper-cases first character and
  optionally lowercases the rest characters

8.6.2
  changed  makefile_darwin_utf8 to work on standard 10.4 installation

  a parameter in utf8 version of upper/lower was evaluated twice 
  caused by new title-case code in 8.6.1

  fixed append mode in file 'open' which created file with ------ 
  permissions when file did not exists
 
  optional 'true' flag in net-lookup to force hostbyname() lookup
  for strings like "216.16.84.66.sbl-xbl.spamhaus.org"

  huge speedup for 'difference' and 'intersect'. On a 10000 elment
  list about 100 times speedup, both functions now scale linearly
  with n+m instead of n*m, when n an m are the lenghts of the two
  lists

  speedup of 'count' for big item lists now scales m+n instead m*n
  when m is the list of items to count in list with length n

8.6.3
  'difference' did sometimes not unique, 'nil' treated incorrectly

8.6.4
  fixed problems in  'count' and 'sort' caused by changes in 'sort'
  necessary in new version of 'count', 'difference', 'intersect' and
  'unique'

8.6.5
  'catch' did not respect protection of symbols in the catch symbol
   
   make version with sed finally working on UNIX previously only
   cygwin
 
   new function 'randomize' shuffles the elements of a list

   new function 'net-eval' evaluates a batch of functions remotely
   on newlisp servers, manages Tcp/Ip communications and data collection
   with multiple servers started with: newlisp -c -d <portno>
   timeout and optional callback/idle function

   'array' with 0 length dimension crashed, now ignores 0-length

   -d mode would exit when loss of communication in multiline [cmd] mode
   now just cycles to restart

   'error-event' only worked in programs loaded interactively, now works
    also defined in scripts started on the command line

   -l and -L now usable for logging in normal console mode, -l logs only
   user input -L logs both user input and newLISP output (without prompt)
   new chapter for logging in users manual

   when evaluating multiple expressions on the command line or a batch
   of expressions enclosed in [cmd],[/cmd] tags multiple results are now 
   separated by one space.

8.6.5-7
   'ramdomize' looped on listlen 1

   'load' now throws an eror when the file cannot be found or returns
   the value of the last expression in the file evaluated. Before 'load'
   returned 'nil' when file was not found and else 'true'. Note that this
   required a change in init.lsp to catch error when trying to load
   $HOME/.init.lsp

   eliminated all sprintf() to avoid security warnings on openBSD compiles

   'erf' and 'sgn' new functions

   took out txt2pdf which is broken, will come back when fixed

   fixed leak in evluateStream introduced with 'net-eval'

8.7.0-rc1 released October 10th 2005
   'get-url' now acccepts https:// pages in main url or moved location

   'sgn' extended with optional triconditional functionality

   fixed result stack leak in 'net-eval'

   'get-url', 'post-url' and 'put-url' now can take a timeout parameter

   'read-buffer' with wait string now will put bytes read in buffer
    including when the wait string was not found. When no bytes are
    read buffer is nil.

   'date-value' returned negative numbers on dates earlier 1970, now returns
    0 on dates previous to 1970
 
    'net-eval' would loop on connection errors, more detailed error messages

8.7.0 released October 15th
    'append-file' like 'write-file' but appends

    'select' on lists with an empty selection list now returns the empty list
    previously nil.

8.7.1 RELEASE Nov 7th, 2005
    fixed bug for push -1 optimization and various doc corrections

    replaced 'integer' with 'int', 'get-integer' with 'get-int' and 'symbol'
    with 'sym' in several examples/ and modules/ files

    (nth <list> <list>) now throws error (list index only allowed in
    push/pop and implicit indexing)

8.7.2 development Release November 20th
    new (net-ping host wait-time) returns ip-no or multiple ip-no for multiple
    addresses in batch-mode or broadcast. Must have root privileges to use, or 
    set the newlisp executable set-user-ID with: chmod u+s /usr/bin/newlisp or: 
    chmod 4755 /usr/bin/newlisp; only on UNIX

    'time' now safe for midnight wrap

    'dup' with optional 'true' flag now can force list return  when a string argument
    is given; by default 'dup' concatenates the string

    sys-error now reset after readline(), which caused it set to 22

    'transpose' on empty lists segfaulted when on zero length dimension in the
    first row, now an error message will be issued if the first row is empty

    imnplicit rest failed strings when n was >= length of string

    'count', 'difference' and 'intersect' crashed when handling  identical lists

8.7.3 development release November 27th
   added "list" flag to 'get-url', which permits capturing header and page in a list.

   added custom header option to get-url, post-url and put-url

   string display translation for char > 126 to \nnn format

8.7.4 development release December 5th, 2005
   expanded functionality for 'context': (context 'CTX "symstr" value)
   adds symbol to context CTX, (context 'CTX "symstr") returns value
   this is a short form for: (set (sym "symstr" 'CTX) 123)

   expanded form of 'context?' for checking existence of a symbol

   'time' takes an additional parameter for the number of times the
   expression should be evaluated for timing

   cleanup format, file and directory routines (less code)

   the terminating character from an expression returned in the console has been
   changed from a space to a line feed

8.7.5 Development release December 23rd
   added util/newlisp.plist syntax file for OSX BBEdit or TextWrangler editors

   raw mode in 'net-eval' now documented

   recognize simple path-href in 'location:' header spec in get/post/put -url

   in 'process' on UNIX an optional pipe handle for standard error can be specified
   if not present standard error gets redirected to stdout

   allow default functions to be defined as primitives

   shortened symbol param loop in evaluateLambda and evlaluateMacro

   getContext() now safe for debug mode

   'replace-assoc' gets additional (long overdue) syntax to remove associations 

   help-option in context console menu on newlisp-tk (not working on OS X)

8.7.6 
   Help buttons now work on MacOS X in newlisp-tk

   fixed and issue with 'case' when a 'true' clause was assembled from an
   evaluated 'true

   handle some cases of self reference in set-nth/nth-set, i.e: the replacement sub
   expression itlself changes the place its supposed to be assigned:
   (set-nth i L (set-nth i L 99)) ) 
 
   : (colon) now will be returned as token even if attached to other following chars

   'parse' without regex parameter couild overrun string when it ended in \

8.7.7
   regular expression support in 'directory'

   new 'number?' works like (or (float? x) (integer? x))

   in newlisp-tk help on hightlighted reserved word now works on MacOS X bringing
   up browser with manual on right spot.   (Ctrl-Left-Button for context menu)

   new (bayes-train list-A list-B [list-C ...] context-symbol) lists contain
   string tokens; and  (bayes-query list-query context), not documented yet, 
   still testing and modifying

   memory error fix in 'get-url' for chunked pages

8.7.8 development release January 16th 2006
   'apply' now works on lists with unlimited length, no stack limit

    both Bayesan modes: Chain Bayesian and R.A. Fisher CHi2, are now supported with 
    new 'bayes-train' and 'bayes-query', working and tested, see manual for
    details

    moved 'prob-chi2' and 'pob-z' in manual to "Simulation and modelling" group
    together with 'bayes-train' and 'bayes-query'

    ATTENTION:

    calling into a context now changes the current run-time context:

    (context 'FOO)
    (define (foo) (context))
    (context MAIN)

    (FOO:foo) => MAIN ; old behaviour

    (FOO:foo) => FOO  ; new behaviour

    The new behaviour is more intuitive and is what most programmers would expect.
    Only applications using 'eval-string' or 'sym' (w/o specifying a context) are 
    effected. From all apps published by newlisp.org (blog, wiki, ide) only the file
    cgi.lsp packaged with these applications is affected and should be changed to
    the new cgi.lsp v.1.9 packaged with 8.7.8.

    Users should check all applications using 'eval-string' and 'sym' (or the
    deprecated 'symbol'). Pre 8.7.8 'eval-string' and 'sym' work with the runtime-
    context beeing MAIN, the context where the program was started. Now both functions
    work with the context they are part of:
    
    (context 'FOO)
    (set 'x 999)
    (define (foo s) (eval-string s))
    (define (bar s) (eval (sym s)))
    (context MAIN)
    (set 'x 123)

    (FOO:foo "x") => 123    ; old behaviour
    (FOO:bar "x") => 123    ; old behaviour

    (FOO:foo "x") => 999    ; new behaviour
    (FOO:bar "x") => 999    ; new behaviour 

    Changes to old code:

    (1) Replace all cgi.lsp in newlisp-ide, newlisp-blog and newlisp-wiki apps.
    the replacement will also work with newLISP versions previous to 8.7.8.

    (2) Change old apps by preceding the 'eval-string' statement with (context MAIN)
    or other required context change. Most of the time it's MAIN, the context where
    th whole program was started.

    (3) Change old apps adding explicitly the desired context in 'sym' as a
    second parameter, i.e. (sym s 'MAIN) or (sym s ctx) where 'ctx' is a context
    variable.

    The new behaviour is more intuitive and will make OO based programming based
    on contexts easier, it also increases isoloation of contexts because the current
    run-time context is not dependend from where the program was started originally,
    but only on the situation internal to that context.
    
8.7.9
    added a configure script for compatibility with the popular autoconf/configure
    system. An installation of autoconf is not required but the same sequence
    of commands as on autoconf systems will work to make newLISP. newLISP's old
    ways of making newLISP will also still work:

    ./configure will just try to discover the platform and give a message
    make will try to discover the platform and make it

    if make cannot discover the platform it will give a message

    the module/context is now reported in error messages

    'load' will never cause the runtime context changed, but the same run-time
     context that was valid before the call to 'load' will be valid when 'load'
     returns

    'eval-string' now can specify the context under which it's string argument
    should be parsed and evaluated.

    'log' can be specify an additional parameter for a different base than the
    default natural log

    fixed a problem with reading very long UTF-8 source string constants

    big speedup of parse with regular expression, now scaling linear
    this enables tokenizing big documents in one piece

    args in functions should be evaluated in callers context
    (for: sym, context, eval-string)

8.7.10
    raw string ouput (upper ascii in \nnn codes) in the newLISP commandline shell
    return value only when locale is the default "C" locale.

    'trim' was changing the original string in UTF-8 mode

    'find', 'replace' and 'search' now do binary in both regex and non-regex modes
     searched buffer, key/patterns string and replacement string can all contain 
     binary 0s

8.7.11
    'string' now optimized double fast on string arguments

    getCreateContext() checking symbol protection

     'load' switches to context MAIN when loading file except if different
     context is specified in file, on return 'load' switches back to callers
     context (8.7.9)

     'reset' adds an additional parameter for restarting newLISP with same
     command line parameters with fresh memory in a new process space.

     many security improvements for OpenBSD compiles

     'reset' with optional 'true' (or non 'nil') parameter will restart
     newLISP with the same commandline parameters, reloading files etc.
     Not available on Win32 (execv() leave the system unstable when compiling
     with MinGW.

8.8.0-p1 pre-release 1
     'reset' was always exiting on UNIX after the change in 8.7.11

     text buffers returned in 'net-eval' > 2048 characters and containing zero
     characters where throwing  a 'string too long error' 

8.8.0-p2 pre-rlease 2
     Many doc corrections

	 system symbols in set-nth was broken in 8.7.6

     self refs in set-nth now safe

     added  and changed some cases to qa_dot and qa_comma, now safe again
	 for memory leak tests.

8.8.0 released February 20th, 2006
     large file system support for files > 2 GB can now be turned on in newlisp.h 
     specifying #define LFS. File positions > 2^31 must then be specified as
     floats up to 999999999999999.0 for 999 terabyte (TB). 'seek' will always 
     return a float, file positions should be handled as floats using
     add, sub, mul, div instead +,-,*,/

	 Documentation corrections (thanks Ryon, Nigel et al.)

     moved sql.c and types.c into the util directory

     updated newlisp.vim (v1.27) and newlisp.jsf (v.1.9)

     bug fix in cgi.lsp for '=' in key value strings

8.8.1
     realloc compiler warning fix in nl-filesys.c/readBuffer()

     error-event, net-eval (edited 4/13/20060), signal and timer can now take 
     a function or lambda expression, previously only  a symbol holding a lambda: 
     (signal 2 exit) 
     (timer (fn () (println "hello")) 5)
	 The old syntax still works too.

     Could not compile to a library (also fixed in re-release of 8.8.0)

     code cleanup for allocMemory() + memset() => callocMemory()

	 now memory cleanup after exception in functor passed by:
     'filter', 'index', 'net-eval' and 'replace'. 

     implicit n-rest and slice on default lists and strings:
     (set 'foo:foo '(a s d f g h j))
     (2 foo) => (d f g h j)
     (-3 2 foo) => (g h)

     'save' and 'source' will always serialize from context MAIN perspective 
     (like 'load') (source reverted back in 8.8.2)

	 fixed odd/even problem for 'rand' on FreeBSD, NetBSD, OpenBSD

8.8.2
     'source' reverted back to 8.8.0 behaviour: serialize to current context

8.8.3
     'signal' fixed format of internal symbol when passing functions

     suppress saving/sourcing system symbols starting with '$' unless specified
     specifically

     new built-in function 'real-path' translates a relative path into an
     absolute path. (read-path) same as (real-path ".") returns the current
     working directory

8.8.4
    'real-path' now also in Win32

    handle self reference of result of while expression in condition

    allow (sys-info 3) or (sys-info -1) as with 'args' and 'main-args'

    'dup' will assume 0 for negative values

    when entering multiline expressions/definitions bracketed by [cmd] ... [/cmd]
    tags (each on a separate line] and hitting <enter><up-arrow> after the closing 
    [/cmd], newLISP compiled with lib readline support segfaulted, this long standing
    bug as finallly been fixed

    in 'xml-parse' when a closing CDATA tag was preceded by a forward slash, then
    an extra text element containing part of the closing tag was emmitted, 
    this is fixed

    support for MySQL v. 5.0 was added with mysql5.lsp

8.8.5
    'read-key' now also works on MacOS X

    a bug in the second syntax of 'context' has been fixed now can do:
    (push i (context 'CTX "foo")) which now works if CTX:foo is a list

    'load' now can take http:// (and file://) URL prefixes in filnames to retrieve/load 
    files via HTTP from remote servers

    'xml-parse' now can take a context to place symbols/tags from SXML conversion

    zlib.lsp: new module for in memory and .gz compatible file compression 

    'net-eval' idle loop did not pass parameter (broken in 8.8.1)

    fixed a cell leak caused by 'while' self ref handling in 8.8.4

8.8.6
 
    fix for error reporting of strings, which are too long

    an optional break condition in all looping constructs allows early return:
        (for (i from to step condition) ...)
        (dotimes (i N condition) ...)
        (dolist (i lst conditon) ...)
    When condition returns non-nil the loop returns with the value of the condition.
    When loop comes to end end the result of the last body expression gets returned.

    describing the effects of non-rectangular matrices in the "Data types" chapter
    and for the functions 'multiply', 'invert' and 'transpose'.

    sqlite.lsp vor SQLite v.2.x has been discontinued, use sqlite3.lsp and SQLite3

    error message was printed for each catch level where error was not caught,
    should only be printed on top level if uncatched

    new 'letex': let expression with expansion of let vars into body expressions
    before evaluation

    file open for append now atomic

8.8.7
    new 'clean':
    (clean predicate? aList) works like:
    (filter (fn (x) (not (predicate? x))) aList)

    "Transfer-Encoding: chunked" did not trigger chunked decoding
    when more than one space after the ':' before 'chunked'

    $0 counter did not count first element when in remove mode of 
    'replace'

    'unify' does Prolog like unification with occur-check
    (unify '(f (g A) A) '(f B xyz)) => ((B (g xyz)) (A xyz))

    'unify' can take additional assoc params list:
	(unify '(A (B) X) '(A (A) Z) '((A 1) (Z 4)))
    => ((A 1) (Z 4) (B 1) (X 4))
	this is useful when chanining/nesting 'unify' to pass on
    a newly bound environment

    new mode in 'expand' with parameter assoc list:
    (expand '(a (B (c) (d a B))) '((a 1) (B 2) (c 3) (d 4))) =>
	(1 (2 (3) (4 1 2))) 
    
    new mode in 'expand' without symbol or assoc list:
	(set 'X 2)
	(expand '(a ((X)) b)) => (a ((2)) b))
	expands only uppercase variables for use with the new Prolog like
    'unify' function

    added file syntax.cgi for syntax highlighting in HTML of newLISP source
    to examples directory

8.8.8
	eliminates several cell leaks in unify

	'pop' can be used on strings (pop str [pos] [len]) pos can be negative
    'push' can be used on strings (push str [pos]) pos can be negative
    'push' now will only do list mode when lst is list  or nil:
    (push new lst) lst has to be list  or nil, previous to string mode of push
    any existing datatype non-list was initializeed to () now only nil is allowed

    system var $idx contains the offset in dolist:
		 (dolist (e '(a b c d e)) (println $idx "->" e))
	0->a
	1->b etc.

    indexing mode of 'args' now works with multiple indices, i.e (args 3 -1)
    and is much faster

	implicit indexing syntax now allowed in 'nth-set' and 'set-nth':
	(set 'd '(a b c d e f g))
    (nth-set (d 3) 99) => d
    d => (a b c 99 e f g)
    or with default functor:
    (set 'db:db '(a b c d e f g))
    (nth-set (db -1) 99) => g
    db:db => (a b c d e f 99)
    This also works for strings and arrays
    
    many fixes/changes/additions in the manual and reference

8.8.9
    'net-ping' didn't work on localhost

    'nth-set/nth-set' bugfix for new feature breaking old

     complete manual pass of the first 3 chapters by Michael - thanks

8.8.10
    rotate works also on strings

    (cons item lst -1) for consing at the end of the list (undocumented)

    allow 0 length in chunked pages happening on put-url

    give error message for unterminated [text] in interactive console

8.9.0 Release June 25th
    complete pass through Users Manual by Michael Michaels

    example programs in Appendix are now syntax highlighted

    dolist $idx safe for nested loops

    member works for strings

    (starts-with s k true) should behave like the default (starts-with s k)
    same with ends-with. This bug never surfaced because nobody specified
    anything for the default of case sensitivity

8.9.1
    (rand x n) returned n+1 after fix in 8.9.0, also looped on n=-1

    new 'zero?' was broken for floats with fractional parts

    newlisp -c -d <portno> and newlisp -c controlled by inetd now understand 
    simple HTTP GET requests. This feature is mainly intended for use with
    (get-url "http://...) and (load "http://...) for retrieving or loading
    files from remote newlisp/inetd worker nodes in a distributed computing
    environment. 

    manual reviewed/edited up to and including the letter C

8.9.2

    new (find-all pattern string [func [options]]) finds all regex-patterns in a 
    string and returns a list of matching strings:
    (find-all {\d+} "asdf2kjh44hgfhgf890") 
    => ("2" "44" "890")
    (find-all {(new)(lisp)} "newLISPisNEWLISP" (append $2 $1) 1) 
    => ("LISPnew" "LISPNEW")

    the parameters in 'format' after the format string can now also be
    given in a list: (format "%d %s" '(123 "hello"))

    'read-key' did not work on SUSE Linux

8.9.3
     default values in function and macro parameters: (define (foo (a 1) (b 2)) (list a b))
    (foo) => (1 2)
    (foo 3) => (3 2)
    (foo 3 4) => (3 4)
    no performance loss for normal syntax without defaults

    format partly rewritten for better portability, 
    no tru64.c or ffi required after removing TRU64 for p_format in nl-string.c

8.9.4
    removed tru64.c and changed makefile_true64

    starts-with and ends-with can do reguluar expressions and take a regex option number, 
    the old nil-option for case insensitivity still works and is translated to regex 
    option = 1, but is deprecated and will be eliminated in the future

    member for strings can take regular expressions, the old case insensitivity option
    will not work (member for strings was introduced only recently

    'symbol' the old writing for 'sym' has been eliminated

    fixed create context bug in newlisp-tk.tcl

    (<< num) works like (<< num 1), (>> num) like (>> num 1), (div num) like (div 1.0 num)

    function 'uuid' for creating Universal Unique IDs type 1 and 4 (RFC 4122)

    -C command option for Emacs forces prompt even if in pipe mode

    manual edits up to letter J, thanks Michael

8.9.5
    type 4 UUID now closer to RFC 4122 specification

    trying to use set-nth or nth-set on an empty list corrupted the list

8.9.6
    UUID type 1 got timestamp wrong, UUID 4 always started the same sequence


-------------------------- 64 Bit Integers  ------------------------------------


8.9.7
    all integer arithmetik 64 bit

    'factor' now takes integers with  max 64 bits and is 4x faster than previously

    'import', 'pack', still take ints as 32bit, taking the least significant 32 bits
	to pack 64bits do: (pack "ldld" int64 (>> int64 32)) for little endian
	for big endian do: (pack "ldls" (>> int64 32) int64)
    
    'format' has new 64 bit formats "%lld", "%llu" "%llx" for 64bit decimals and
    hex numbers on UNIX on Win32 use "%I64d", "%I64u", "%I64x"

    'format' now also recognises 'e' and 'E' scientific folating point formatting

    32 bit format strings "%d" "%u" "%x" will truncate on int64 numbers

    in float->int conversions floats out of range are converted to min/max 64 bit int
    -9223372036854775808, 9223372036854775807 and 18446744073709551615 for unsigned

	if an int32/uint32 is required by a function int64 values overflow to 
    min/max 32 bit int -2147483648/2147483647 and 4294967295 for unsignde int

    LFS (large file support) in file operations for files opened with 'open'
    now full 64 Bits (before 40 Bits)

    (for (i from to step)...) has float in i, only when optional step value is specified 
    (sequence from to step) produces float only when optional step value is specified 
    (dotimes (i N)...) always has integer in i
    this is consistend with 'inc' and 'dec'

    net-select now can go to 68 :) years waiting time specifying 64bit  higher timeout
    values and a timeout of -1 waits forever

	'net-close' with optional parameter: (net-close sock true) will suppress shutdown()
    before closing the socket. In this case net-close will wait for undergoing traffic
    to finish

    new function (gcd x y ...) for greatest common deviser of n arguments

    (pow x) defaults to (pow x 2)

    wrong format could segfault (this bug was introduced in 8.9.3)

    when replacing the first element in an association list with 'replace-assoc' and 
    an error occured when evaluating the replacement expression a segfault occured
    (thanks to Ingo for catching this)

    Note that bits shifts <<,>> now work on 64-bit integers too (added 2006-09-12)

8.9.8
    'net-eval' now evaluates node parameters, before constants where required
    (set 'host "localhost" 'port 4711 'cmd "(+ 3 4)")
    (net-eval '((host port cmd)) 1000) = (7)

    'net-eval' if no timeout specified waits forever

    'net-eval' short form for one node: (net-eval host port cmd [timeout idle-loop])
    timeout an idle loop are optional: (net-eval host port cmd)

    Similar as for (load "http:// ...) and (get-url "http//..) in 8.9.1;
    server mode: newlisp -c with -p or -d, now understands HTTP PUT requests
    for saving/writing text files to a newLISP server node on UNIX using:
    (save "http://..." ...) and (put-url "http://...") ...)
    The server mode together with the beefed up 'net-eval', 'load', 'save'
    'get-url' and 'put-url' assemble a nice toolset for distributed applications
    with newLISP. The server node can also be started by inetd or xinetd. 
    (See manual). Must give full path-file-name in URLs i.e:
    (put-url "http://localhost:50001//Myfiles/afile.txt" (read-file "somefile"))

    newLISP server mode with HTTP capabilities in not yet available on Win32.

    target context MAIN is now disabled in 'def-new' and 'new' because it would
    cause ambigous situations when copying context vars after fixing a related
    bug: def-new and new on context-vars

    on UNIX a shared memory address obtained with 'share' can be unmapped using
    (share nil <address>)

	'put-url' with "Pragma: append\r\n" in header option appends when talking
    to newLISP server

    'read-file', 'write-file' and 'append-file' accept "http:// ..." and
    for HTTP mode and "file://..." for normal file mode.
    in HTTP mode they work exactly like 'get-url', 'put-url' and 'put-url'
    with "Pragma: append" in the header option.
 
    new QA file qa-net for testing newLISP server modes with:
    net-eval, load, save, read-file, write-file, append-file

    new QA file qa-utf8 to display UTF8 characters, this is not a test for 
    newLISP but rather the UTF8 display capabilities of the platform running on 

8.9.9
    matrix operations now can be performed on arrays (previously only lists)
    matrix operations will return the type (list or arrray) which was given
    as input. In case of mixed input (i.e. in multiply), array type is
    returned.

    new function 'det' returns the determinant of a square matrix expressed
    as a list or array.

    fixed cell leak in define-macro when exercising default values

    64-bit integers where not displayed correctly in Win32 MinGW

8.9.10
    'append', 'first', 'last', 'rest', 'slice' (and implicit slicing) now also
     available for arrays 

    (timer 'event 0) did not stop on Win32

    a fix in Curl_base64_decode() for bad base64 strings

    20% speed up for append on strings and join

8.9.11
    'append' did not append correctly to lambda lists, which lost lambda attribute

    'qa-net' fixed (this file only tests on UNIX)

8.9.12
    'int' did a signed instead of unsigned conversion

     'save' did not save global protected symbols in a way they
     could be reloaded

8.9.13
     'local' like 'let' but no initialization of locals (all nil): 
     (local (x b x) body)

     'swap' has a third syntax pattern to swap the contents of symbols: (swap x y)

8.9.14
     speedup and memory savings on 'apply'

     fixed INT64->string conversion in sym for True64/WINCC
 
     error checking on all reallocs()

     changed to realloc() in writeStream() routines

8.9.15
	(join '(1 2 3)) was hanging, instead of wrong datatype error message
	
	support "\x41\x42\xff" in string hex format equivalent to "\065\066\255"

	new 'ref-all' returns a list of index vectors for all ref's of an expression
	(ref-all 'a '(a b c (d a f (a h a)) (k a (m n a) (x))))
	=> ((0) (3 1) (3 3 0) (3 3 2) (4 1) (4 2 2))

9.0.0 Release October 15th, 2006

9.0.1
    'read-file' did not read extended http:// mode parameters correctly

    new 'doargs' works like 'dolist' iterates through (args)
	(define (foo) (doargs (i) (println i)))
    (foo 1 2 3) => prints 1 2 3
    implemented on top of 'dolist' also does $idx and break-expressions	

    'explode' takes extra parameter for # of characters (works on UTF-8 too):
    (explode "newlisp" 2) => ("ne" "wl" "is" "p")

    new 'utf8len' length of a string in UTF-8 characters

    new scalar matrix operations (matrix is a 2 dimensional list or array): 
    (set 'A '((1 2 3) (4 5 6))
    (set 'B A)
    (mat + A B) => ((2 4 6) (8 10 12))
    (mat - A B) => ((0 0 0) (0 0 0))
    (mat * A B) => ((1 4 9) (16 25 36))
    (mat / A B) => ((1 1 1) (1 1 1))
    Note that all matrix operations are in floating point

9.0.2
    explode works on lists: 
    (explode '(a b c d e)) => '((a) (b) (c) (d) (e))
    (explode '(a b c d e) 2) => '((a b) (c d) (e))
    many structural transformations can be done combining 'explode' and 'transpose'

    fixed cell-leak in 'ref-all'

    in (mat <op> A B) B can be a single number: 
    (mat + '((1 2 3) (4 5 6)) 2) => ((3 4 5) (6 7 8))

    some fixes for HTTP mode on UNIX

    HTTP mode now working on Win32 but with some timing issues,
    see header of file qa-net for details

9.0.3
    $idx was broken after 9.0 starting with 1 instead of 0

9.0.4
    fixed midnight rollover in 'timer' on Win32

    new (round <number> <precision>) rounds a number to precision digits
    left (positive) or rigt (negative) of the decimal point

    new hyperbolic functions sinh cosh tanh

    fixed push -1 optimization when popping only remaining element in list

    new 'ostype' symbol holds os type string

    new 'delete-url', needs to be enabled on target www server (most aren't)
    else => "ERR: server code 405: HTTP/1.1 405 Method Not Allowed\r\n"
    and must have file permissions set accordingly on target file;
    additional parameters like timeout and custom headers are available
    exactly as in 'get-url', the feature is also available in:
    (delete-file "http://......"), similar to HTTP mode in 'read-file', 
    'write-file' and 'append-file' and is also implemented in newlisp
    server mode (not working on Win32 newlisp server mode)

    GET queries are now supported in newlisp server mode (not yet Win32)

9.0.5
    'and' and 'or' now () when failing and last evaluation was ()

     GET and POST cgi now working on UNIX and Win32 (9.0.6)

     new -w <working-directory> commandline switch 
     useful for changing working directory after newlisp startup:
         newlisp -c -d 8080 -w /Users/lutz/ide
     this is the same as going into the directory and starting newlisp
         newlisp -c -d 8080

     newlisp can now run as a webserver doing newlisp based CGI. It runs both
     newlisp-ide-x.x.tgz and newlisp-wiki-x.x.tgz, to run the ide on the local
     machine:
         newlisp -c -d 8080 -w /usr/home/www/ide
     then in a webbrowser enter the URL http://localhost:8080/
     index.cgi and index.html are looked for by default if no filename is
     specified in URL

     httpd example programm has been eliminated, because httpd mode now built-in
     into newLISP

     'file-info' now correctly reports filesizes > 2G (2147483647) bytes
     now also can index: (file-info <path-name> 0) => filesize

     the -x commandlne switch has been disabled, use newlisp server modes instead

     fixed problems with break-condition in dolist/doargs introduced in 9.0.1
     fixed problem when break-condition is the loop symbol itself 

9.0.6
     'nth' now with similar syntax options as 'net-set/set-nth'
     new in 'nth':
        (nth (L <idx1> <idx2> ...))
        (nth (L <aref>)) ; where <aref> is a list of indices
     new in 'set=nth', 'nth-set'
        (set-nth (L <aref>) <newval>)
        (nth-set (L <aref>) <newval>)

     'file-info' now distinguishes in the mode field (12th bit) between links 
     and normal files: 
        (define (link? fname) (= 0x2000 (& (file-info fname 1) 0x2000)))
     not on Win32, who knows the correct Win32 function for lstat() on MinGW gcc?A

9.0.7
     HTTP server mode looks for procedure httpd-conf for processing/transforming
     the path-file-name of the request. This way security checks, remappings etc
     can be performed. In this case a file httpd.conf containing the definition
     of httpd-conf can be loaded when starting the server:
        newlisp httpd.conf -c -d 8080 -w www/httpddocs
     if the file httpd.conf contains:
        (define (httpd-conf request) 
            (if (ends-with request ".exe") "errorpage.html" request))
     now any request for a file which finishes in .exe will be transformed into a
     request for errorpage.html containing an error message for the client.

     fixed HTTP server mode crash on LINUX

     fixed 'nth' which failed on old mode when indices where expressions

9.0.8
    new syntax of 'nth' should work on protected symbols

    new syntax of 'set-nth/nth-set' did not check for index maximum of 16

    make httpd-conf safe for non-string returns

    server mode now correctly remaps directory paths when performing CGI
    in directories not web root, i.e. http://ahost.com:/ide/ will work with CGI,
    note that directories need to end with "/" to make the resolve to index.html
    or iondex.cgi work correctly
    
    new -http flag like -c (suppressing prompts) but only allow HTTP commands
    no newLISP statements (-c allows both), this is a 'safe' HTTP mode not
    allowing 'net-eva' or other commandline protocols.
    The following configurations can be used:
	
    (1) serve HTTP requests only
        newlisp -http -d <portno> -w <www-root>
        newlisp -http -w <www-root> # started vi INIX inetd or xinetd

    (2) serve 'net-eval', HTTP and command line without prompt
        newlisp -c -d <portno> -w <www-root>
        newlisp -c -w <www-root> # started via UNIX inetd or xinetd
    this mode is useful when running newLISP server in a controlled environment
    behind a secured firewall in a distributed computing environment where 
    newLISP server must answer to both: net-eval and HTTP requests.

    Note that on Win32 a \tmp directory must be created on the same drive
    which is current for CGI processes for newLISP HTTP mode to work correctly
    for CGI processing. On UNIX /tmp is standard.

    fixed 'invert' crash (since v.9.0.2) on not-invertible matrices

    upgraded to better random number generation in 'rand' and 'random'
	(not available on Win32)

    fixed (rotate '(1) -1)

9.0.9
    another fix for 'nth' and protected symbols
	
    if 'httpd-conf' returns 'nil' nothing will be processed, this can be
    used to completely hand off CGI request processing to httpd-conf

9.0.10
    moved env variable creation of DOCOUMENT_ROOT earlier, so it is available
    in httpd-conf.lsp

    added httpd-conf.lspi to the examples directory in the source distribution,
    now filters csertain file extensions and does not allow access to files 
    outside the web directory tree specified with the -w option:
        newlisp httpd-conf.lsp -http -d 8080 -w /wwwdocs
    or outside the startup directory if no -w is given, also takes care
    of request for directories when no trailing '/' is present

    cleaned up nthArray  and implicitIndexList/array code

    trying to 'set-nth' and empty list should return the empty list not nil

    more tests in qa-dot and qa-comma for symbol protection and 'nth'

9.0.11
    rework of whole indexing area, now correctly honors symbol protection in
    all modes if symbol is nested inside an expression. The old flat mode: 
      (nth i j alist)
    is much slower, instead use one of the following modes:
      (nth (alist i j)) or (alist i j) or (nth (alist aref)) or (alist aref)
	ehere aref is a list of nymbers, i.e.: (1 2), same modes in set-nth,nth-set

    reworked nil and empty list detection throughout all files. 'nil' and the
    empty list '() are logic false, things work like this:
        (map true? '(nil () 0 "")) => (nil nil true true)
        (map nil? '(nil () 0 "")) => (true nil nil nil)
        (map not '(nil () 0 "")) => (true true nil nil)
        (map null? '(nil () 0 "")) => (true true true true)
    in v9.0.0:
        (true? '()) => true, which was wrong because also 
        (true? (not '()) => true, which is correct
    this affects filter and index usage with true? as predicate, but does not
    affect: if, unless, while, until, do-while, do-until, which always worked
    correctly assuming '() as logical false

    'name' also can take contexts i.e.: 
        (set 'L:L '(a b cd)) (set 'x L) (name x) => "L"

    now when evaluating a context by itself it returns the default symbol
    if the default symbol does not exists it gets created:
          (set 'foo:foo '(a b c d e f g))
          (foo) => foo:foo
          (eval (foo)) => '(a b c d e f g)
    this can be used for reference passing:
          (define (mysort ctx func) 
              (sort (eval (ctx)) func))
          (mysort foo >) => (g f e d c b a)
          foo:foo => (g f e d c b a)
    previously a passed context could only be used for functions using
    index lists and implicit indexing as in (nth-set (ctx idx) value) etc.
    now functions working on the entire list can be used with reference passed
    data. THIS FUNCTIONALITY HAS BEEN DISABLED IN 9.0.14, as a workaround
    use (sym (name ctx) ctx) to retrieve the functor

9.0.12
    the newLISP-tk installer now contains a file md5-checksums.txt with
    checksums for newlisp-tk.exe, newlisp.exe and newlisp.dll
    
    bit not ~ was still on 32 bits now 64 like all integer arithmetik since 9.0
    
    all buffer variables moved to size_t and ssize_t type in preparation for
    64-bit model LP64 compile for 64-bit memory addressing.
    
    get-char, get-int, get-float and get-string failed when using on 64-bit
    addresses, which where not truncated correctly on little-endian CPUs.
    This affected the mysql.lsp and mysql5.lsp modules when using with newLISP
    versions 8.9.7 and later and on Intel CPUs. On Mac PPC and other big-endian
    architectures this problem did not occur. All other modules where not affected
    on any architecture.
    
    <,>,<=,>=,= when given only one argument compare agains 0, "" or (),
    all other data types return true as before
       (< 1) =>nil, (= 0) =>true, (> "abc") => true, (= "") =>true etc.

    64-bit file poisitioning fixed under Win32 (now runs qa-lfs)

9.0.13
    fixed problems in the new <,>,<=,>=,= single argument feature
 
9.0.14
    further fix in 64-bit ~ function

    a context feature intoduced in 9.0.11 to extract the default functor from an 
    unknown context has been disabled, instead use the workaround:
        (set 'foo:foo '(a b c d e f g))
        (set 'ctx foo)
        (sym (name ctx) ctx) => foo:foo
        (sort (eval (sym (name ctx) ctx)) >) => (g f e d c b a)
        foo:foo => (g f e d c b a)
    a more elegant way will be supplied in the future

    both string and list versions of 'explode' now return an empty list if optional
    length <= 0

    'nt-set/set-nth' did not honor constant protection of default functors

	now compiles for LP64 64-bit memory model on 64-bit LINUX using the makefile:
       make -f makefile_linux64LP64
    or simply:
       make linux64LP64

    the old makefile for making a ILP32 32-bit newlisp on 64-bit LINUX has been
    renamed:
       make -f makefile_linux64ILP32
    or simply:
       make linux64ILP32

    tested on a AMD64 CPU with LINUX 2.6 64-bit Fedora 3

    enjoy up to 17,179,869,184 gigabytes or 16 exabytes of RAM, on AMD64
    the LP64 compiled version is 12 to 25% faster than the ILP32 version

    avoid sign extension when unpacking signed 32bit into unsigned 32bit displayed
    in 64-bit: (unpack "lu" (pack "ld" -1)) => (4294967295) ; not (-1)

    added 'get-long' and "Ld", "Lu" 64-bit packing formats 

    new 'parse-date' for parsing date strings (not yet working for Win32)

9.0.15
    more manual additions and changes, moved all predicates into own group

    fixed dynamic symbols compare

    fixed warnings fo missing -Wno-strict-alasing GCC message on older Solaris
    and BSD GCC versions

    fixed parsing of [text] tag on 64-bit compiles

    fixed 'flt' for TRU64 compile

    tried Linux debian package, Ok on Ubuntu, will be included from now on
    in newlisp.org releases, but appreciate help in getting it into Ubunto
    and Debian for inclusion into their lists

    The Tru64UNIX compile using makefile_tru64 is now a large pointer model LP64
    compile, thanks to Peter for porting and testing on an Alpha CPU

    added makefile_darwin_LP64 for 64-bit compile/link, but cannot test it
    on my  PPC-G4 (I believe I need a G5 for this)

    fixed 'char' on UTF-8, bug due to 64-bit changes

    LP64 mode for Solaris workng, use makefile_solarisLP64

    new 'make test' to run qa-dot, qa-net, qa-xml

9.0.16
    OS/2 compile flavor now part of distribution

    fix for Solaris in some networking routines broken in 9.0.2 !

    fixed: (dup x -1), which was broken since 9.0.14

    'make test' now does qa-dot, qa-xml, qa-setsig, qa-net all one after
     another. The qa-setsig script will drop out on Win32 with a message.

     A small change in the 'test-process' routine in the qa-dot script will 
     cause less failure message for 'process' on slow computers.

     qa-dot now will set to locale "en_US' when testing an UTF-8 version,
     this has been done to suppress failure messages for UTF-8 'upper-case'
     and 'lower-case' which do not work in the default 'C' locale in
     UTF-8 mode on some platforms.
     qa-comma always sets to "de_DE"

     'asinh', 'acosh', 'atanh' complete the triginometric functions

     up to 8 'callback' routines cain be defined to be called by an imported
     library, example for Glut lib:
        (glutDisplayFunc (callback 0 'draw))
        (glutKeyboardFunc (callback 1 'keyboard))
        (glutMouseFunc (callback 2 'mouse))
     up to four parameters (32-bit ints) are received by the user-defined
     callback handlers. See the file newlisp-9.0.16/examples/opengl-demo.lsp
     for details. Note that OpenGL passes floating point data, which are only
     handled correctly on x86 based platforms. On the Mac PPC this file will
     not work (although the callback interface itself does work, but no
     drawing will be visible).

9.0.17
     fixed 'non-blocking' bug for write on Linux, thanks Peter!

     number of maximum cells was not reported correctly in 64-bit newLISP

     'ref' and 'ref-all' now can take a comparison functor (like 'sort') for
     comparison: (ref-all key List func), if no func is specified
     assumes = (equal), ref-all now much faster on big lists with  many finds.

     'find' and 'replace' (both in their list forms) can take a comparison
     functor like 'sort', 'ref', 'ref-all'.
     'replace' for lists now also processes $0 (old entry) in replacement 
     expression. 

     using replace for lists with 'match' or 'unify' as comparison functor 
     makes 'replace' as powerful as 'replace for strings with regular expressions.
     This is an important new feature with many applications.  It also gives
     the much overlooked 'match' and 'unify' the more frequent usage they deserve.

     new logic functions 'exists' and 'for-all' apply a condition to each
     element in a list and return the result.

     match now will accept atoms in the entry expressions to make it usable 
     for 'ref' and 'ref-all'

9.0.18
     fixed a bug in (pop <string> <idx>)

9.0.19
     (find <str> <str> [<option>]) will do both: regex if option is a number
     (as before) and function comparison if option is a funtor or user-defined
     function.

     fixed 'pop' on an empty string

     fixed newlisp -h where new options didm't show

     'file-info' was hanging on name pipes now shows 0 for file size

     trying to start server mode with no or zero port will fail

     'array' will give error message on negative parameters, before
     they where simply skippped

     Ctrl-C signal handler crashed on Linux when in -d mode

     'explode' will take optionl 'true' to omit chunksize too short when
      chunk size is given (strings and lists)
      (explode "newlisp" 3) => ("new" "lis" "p")
      (explode "newlisp" 3 true) => ("new" "lis")

9.0.20
     -l and -L mode now always must specify a path-name for the
     log file (either attached or detached):
         newlisp -l /usr/home/www/logfile.txt
     logging is allowed in all modes. -l will only log network connections
     or commandline or net-eval requests input. -L will log also HTTP requests 
     and newLISP output from commandline and net-eval

     doc installation directory changes from /usr/share/newlisp/doc to
     /usr/share/doc/newlisp

     CodePatterns.html ammended with chapter for HTTP only server mode
     MemoryManagement.html ammended with implementation chapter

     newLISPdoc.html and inewLISP-X.x-Release.html added to install 
     in /usr/share/doc/newlisp, this file will only change on mayor
     releases

    
9.0.21
     a crash bug in 'match' introduced in 9.0.17 was fixed

     new 'curry' (curry f x) => (lambda (y) (f x y)), makes a unary opearator
     out of a binary operator, useful when using 'match' 'unify' and other 
     binary ops in: 'filter', 'clean', 'index' etc., i.e:
     (filter (curry match '(a *)) '((a 10) (b 5) (a 3) (c 8) (a 9)))
     => ((a 10) (a 3) (a 9))

9.0.22
     integrated syntax highlighting into newlispdoc, which now is part of
     installation in /usr/bin/ and with man page in /usr/share/man/man1 

     added media types for .pdf .mov. .mpg  and .mp3 in HTTP request handling
     additionally to .jpg .png .gif

     protect stack from overflow when loading huge contexts in sysEvalString()


9.1.0 Release February 15th, 2007

9.1.1 Release March 15t, 2007
     safer memory allocation for net-ping when using wildcard *

     new module crypto.lsp with md5 and sha1 hash functions

     fixed bug in Win32 version when stdout of more than 2048 chars
     in shell window

9.1.2
    net-peer, net-local and net-receive-from where dropping the third digit of the
    least siginificant IP group in the IP-string return value on 12 digit IP numbers

9.1.3
    makefile_osxLP64 produces a 64-Bit version on intel core 2 duo which passes
    'make test'. Use: make osxLP64 or: make -f makefile_osxLP64

    some cleanup in nl-sock.c

    newlisp-tk.tcl now detects default browser in Debian LINUX

9.1.4
    passed all rand() to newer, better random() in nl-math.c

    local domain UNIX sockets using: (NOTE THAT SYNTAX CHANGES IN 9.1.5)
		 (net-listen <str-path> "local") and (net-connect <str-path> "local")
    then use 'net-accept', 'net-select, 'net-send' and 'net-receive' as usual
    see also file qa-local-domain

    fixed many problems with 'net-ping' which did not work correctly on
    machines rejecting out of sequence errors in ICMP packets. Now will handle
    EHOSTDOWN and EHOSTUNREACH errors correctly

    'net-ping' now also can accept ranges, e.g: (net-ping 192.168.1.120-150) 
    additionally to the '*' star, i.e: (net-ping 102.168.1.*)
    superuser permission are required for net-ping

    added MySQL:escape to mysql.lsp (v.4) and mysql5.lsp, thanks to Jeff
    for submitting this addition

    added HTTP_COOKIE to environemnt variables set by newLISP HTTP server
    mode

    leading and trailing white space now gets removed from environment variables
    set by newLISP server mode, specifically in HTTP_HOST, HTTP_USER_AGENT and 
    HTTP_COOKIE

9.1.5
	changed the way of specifying local-domain UNIX sockets in net-connect and net-listen:
    (net-connect <local-socket-path>) ; don't specify a port
    (net-listen <local-socket-path>) ; specify socket-name instead of port)

	local domain UNIX socket support in newlisp -d server mode and net-eval:
    server mode: newlisp -d /tmp/mysocket
	client: (net-eval "/tmp/mysocket"  0 "(+ 3 4)") => 7

    speedup utf8_wlen()

    load and save do not use lisp source anymore but call getPutPostDeleteUrl() directly
    this increases speed and leaves get-url/put-url to be renamed if required

    guard against partial send()'s in net-eval and HTTP mode on Win32

    'net-eval', 'net-ping', 'net-receive-from' and 'net-receive-udp' now set
    timeout error for retrieval with 'net-error'

    'net-ping' will stop waiting for response when the number of responses
    reaches the number of pings even if no max count was not specified.

    a fix for local-domain UNIX sockets on OS/2

    reorderd "3. Functions in groups" subchapters adding group "Pattern recognition"

    now any keystroke/mouse-button will close the about windows in newLISP-tk.
    Before only <esc> worked

9.1.6
    newlisp-x.x.x/util/nclocal.c utility program similar to nc/netcat but for
    local domain UNIX sockets. 

    When deleting contexts the context symbol now will stay and not be deleted 
    but demoted to a normal unprotected symbol.

    It is now possible to create contexts on local variables in 'define', 
    'lambda' or 'local' expressions without error messages on usage of these 
    symbols/variables subsequently. After leaving the 'define', 'lambda' or 
    'local' the variable symbols will be returned to their previous status in 
    the upper scope. Before this version they staid protected. 
    Note: For efficiency reasons this coding practice is not recommended but 
    will not cause an error anymore.

	use strncmp() instead of strcmp() in netReieive() to avoid buffer overflows

    read empty [text][/text] tagged text correctly

    newlisp doc v.1.1 fixes formatting of the syntax line when parenthesized 
    expressions are part of the syntax line.

9.1.7
    a fix for ends-with when using with regular expression option (did not anchor
    correctly to the end)

    net-listen didn't evaluate the port parameter since 9.1.4 when local domain 
    sockets where introduced

9.1.8
    fixed a crash bug on Win32 when using a permission mask in make-dir

	'%%' as a last spec in format was not translated correctly

9.1.9
    when a system wide error handler defined with error-event contained 'nil
    newLISP would go into a loop caused by an error invoked by the error handler
    now an error-event defined with a symbol containing nil will simply to
    nothing.

    xml-parse now can take an optional callback functor (see manual for detail)

    on the Win32 UTF-8 versions UTF-16 file-path names now are processed
    correctly, thanks to Michael Sabin for contributing the file win32-path.c

    this is the first release containing the source of Java based GUI-server 
	in the guiserver subdirectory of the distribution. guiserver.jar is
    already prebuilt contained in the source distributin and installed
    drng the normal newlisp install. It also can be installed individually
    descending into newlisp-x.x.x/guiserver (read README.txt found there)

    new global? property function checks if a symbol is global
    new protected? property function checks if a symbol s protected

    a bug in push on strings when the index was > the length of the string
    and a fix for utf8

9.1.10
    this development release was made for additions in newLISP-GS

9.1.11
    fixed a bug in explode when specifying N > length of string

    negative second length in slicing now interpreted as offset
    from the right: (2 3 "abcdefg") => "cde", (2 -3 "abcdefg") => "cd"
    before negative length would be interpreted as going to the end

    implicit n-resting on strings was UTF-8 sensitive which it should
    not be, all implicit indexing and slice on strings is on byte borders,
    only first,last,rest are UTF-8 sensitive.

    fixed crash when net-select was interrrupted by timer, traceExit()
    was not protected from entry when signal handlers where defined

9.1.12
    newlisp invoked on the command line can take URLs for filespecs to execute
    remote programs: newlisp http://newlisp.org/example.lsp

    join now can take an extra flag to force a joint string after the last element:
    (join '("A" "B" "C") "-" true) => "A-B-C-"

9.2.0 Release August 15th, 2007

9.2.1
    rewritten 'count is about 3-4 times faster than before when counting 100 
    in 1,000,000 elements. Only on Mac OS X and other UNIX. On the older
    MinGW GCC C library the required functions tsearch() and tfind() are not
    available.
    
    fix for special characters in cookies cookies in cgi.lsp

    'pack' now can take lists for data:
    (set 'lst '("A" "B" "C"))
    (set 'adr (pack "lululu" lst))
    (map get-string (unpack "lululu" adr)) => ("A" "B" "C")
    This was imnplemented in response to a request for a (address <list-of-strings>).
    Note that the lst should not be changed and be referenced directly in 'pack'
    so the pointers passed by 'adr' are valid. 'adr' would be a 'char * adr[]' in the 
    C-programming language

    fixed cell leak in indexed sys-info and indexed file-info

    new 'dostring' iterates over a string with character values in loop variable. 
    On UTF-8 compiled newLISP UTF8 character values are returned by the loop variable

    documented 'bind' : 
    (bind '((a 1) (b 2) (c 3))) same as  (map set '(a b c) '(1 2 3))
    This function was already in earlier versions, but not documented.

    on startup NEWLISPDIR will be registered as either: /usr/share/newlisp
    on Mac OS X / UNIX as: PROGRAMFILES/newlisp on Win32, where ROGRAMFILES
    is an exisiting Windows environmnt variable. (env "NEWLISPDIR") =>

    additions in guisserver.lsp and newlisp-edit.lsp, see guiserver/CHANGES

9.2.2
    iterators segfaulted when evaluating the iterator variable was the last
    statement in the iterator body: dostring, dolist, dotree. 
    Added test-cases for this situation.

    (main-args) could be pop'ed which was due to an implementaion error, main-args
    cannot be popped any more, if necessary, assign to another variable first:
    (set 'margs (main-args)), (pop margs) etc.

    additions in guisserver.lsp and newlisp-edit.lsp, see guiserver/CHANGES

9.2.3
    addtions, changes in guiserver.lsp and newlisp-edit.lsp, see guiserver/CHANGES
    for details

    misc. code cleanups in core

9.2.4
    in 'set-nth/nth-set' when no replacement arg is given, the old value should
    be returned only as in 'set'. Was replacing with nil.

    fixed a cell-leak in 'set' when using mutliple arg pairs.

    allow symbols for the name in (context <ctx> <name> [<value>]), previously
    only strings where allowed.

    speedup in symbol deletion

    in (signal <sig-no> <handler | flag> the nil flag now specifies SIG_IGN
    and the true flag SIG_DFL. Before 9.2.4 nil would specifiy an empty newLISP
    handler and the true flag was not available.
 
    reworked 'process' now creates the new process without the previous
    time and memory overhaead (on UNIX) of an extra newlisp fork which stayed
    in memory until the newly created process had finished.
    In most cases the full path must be given for the command in 'process'.

    new 'destroy' to destroy  processes created with 'process' or 'fork'	
    see reworked docmentation for 'fork' and 'process'

    fixed a bug when sorting (ordered compare) mixed  boolean values/symbols

9.2.5
    'dup' without the repetition number parameter will assume 2, i.e:
     (dup 'x) == (dup 'x 2) => (x x) ;  Thanks to Lance Bradley for this idea.

    'find-all' will return an empty list '() when nothing is found, previously
    nil was returned.
    
	':' now also works like a function and can be attached to symbol following
    it. The colon operator forms a context symbol from the symbol following it
    and the context symbol found as the first element of the list contained
    in the next argument.

    (define (rectangle:area p)
	    (mul (p 3) (p 4)))

    (define (circle:area c)
	    (mul (pow (c 3) 2) (acos 0) 2))

    (set 'myrect '(rectangle 5 5 10 20)) ; x y width height
    (set 'mycircle '(circle 1 2 10)) ; x y radius

    (:area myrect) => 200 ; same as (rectangle:area myrect)
    (:area mycircle) => 314.1592654 ; same as (circle:area mycircle)

    This can be used for simple OO programming where objects are represented 
    as lists and methods are packaged contexts / namespaces serving as object
    classes. The colon ':' operator implements polymorphism by looking up
    the class / context of the object as the first symbol in the object list.

    'integer' the long writing of 'int' will be eliminated in the next
     development version!!!
     new versions newlisp-ide-4.1.tgz and newisp-wiki-4.2.tgz have changed
    'integer' to 'int'

    better platform independent library detection routines in modules:
    crypto.lsp, gmp.lsp, sqlite3.lsp and zlib.lsp

    crypto.lsp has new 'crypto:hmac' as of RFC 2104 used for Amazon REST API

    new util/newlisp.vim, for matching .vimrc see http://newlisp.org/code/vimrc.txt

9.2.6
    Moved to MinGW 5.1.3 with gcc v.3.4.5 and eliminated declarations for
    struct timezone and gettimeofday(). Changed sleep() to Sleep().
    -> grep 3\.4\.5 *.c <- shows all changes 

    Improved random number generation with 'rand' now gives better integer quality
    random numbers on Win32, which only does 16 bits in 'C' random(), even for
    ranges close to or > 16bit.

    newLISP GS 1.07 now automatically restarts monitor shell, if required by run-command.

    newLISP GS 1.07 now loads, saves and displays UTF-8 correctly in editor and 
    interactive monitor area

    new manual chapter: "Object Oriented Programming in newLISP" explaining
    newLISP object format and how to use the new : (colon) operator.

9.2.7
    changes in newLISP-GS to automatically detect and switch to UTF-8 mode, depending
    on the newLISP executable. Edited chapter "17. Object-Oriented Programming in newLISP"
    (thanks Michael Michaels)

	In Guiserver 1.08:
    new gs:window-moved and gs:window-resized. See new demo file move-resize-demo.lsp

9.2.8
	get-url, post-url, put-url and delete-url have been extended and reworked:

    - now return extended error information if supplied by the server, before only 
    the error cocd was reported.

    - now can take a trailing "debug" in the option string, i.e."list debug" or 
    "header debug" or simply "debug" when neither "list" or "header" applies. The 
    debug option will print all outgoing info onto the console screen.

    in some situations an empty document returned was reported as "ERR: empty document"
    when ist was not an error but intended by the server.

    in some situations customheaders were only taken when the option string was
    present too. The manual showed the option-string optional, which it is.

    the server response code 204 is now handled correctly
   
    when using a custom header "Content-type:" must be defined for put-url, before
    "Content-type: text/html\r\n" was assumed. 

9.2.9
    last element speed optimization for 'last', 'nth', 'nth-set', 'set-nth' and
    implicit indexing with index -1. 

    'sort' can now be used on arrays too

    changes in newLISP-GS for editor keyboard short cuts and list-boxes, see
    guiserver/CHANGES file

    the newlispdoc utility has improved pager headers and a feature to point to
    other module collections from the index page.

9.2.10
    new functions to modify nested lists by reference via a key:

    (set-ref (L key) value)
    (ref-set (L key) value)
    (set-ref-all (L key) value)

    basically 'set-ref' and 'ref-aset' are shortcuts for doing a ref and
    using set-nth/nth-set on the result:

    (set-ref (L key) value)) equivalent to (set-nth (L (ref key L)) value)
    (ref-set (L key) value)) equivalent to (nth-set (L (ref key L)) value)

    all ref functions support either:
           (<func> (L key) [...]) or (<func> key L [...]) 
    syntax similar to nth functions working with indices instead of keys

	like with 'set-nth' and 'nth-set' L can be the context of the default
    functor L:L containing the list for passing lists by reference

    all 8 'nth' and 'ref' functions together now constitute a complete set of
    functions for indexing, referencing, accessing, modifying and search and
    replace on nested lists. All 8 functions are also capable of receiving
    lists passed by reference via context default functors, passed only by
    their context name. All functions now offer the same two syntax patterns
    with either one index and the key followed by the list:
        (<function> <idx>|<key> <list> ...)
    or the parethesized formi, which also can take contexts as default functors:
        (<function> (<list> <idx>|<key>) ...)

    on Win32 function 'directory?' now will accept training slahes '\' or '/'
    before it would always fails on trailing slashes

9.2.11
   'ends-with' with regex options failed when alternative pattersn where used
    and the succeeding pattern was last

    fixed directory? for drives on Win32

    define MY_RAND_MAX as 0x7FFFFFFF for TRU64 flavor

    added mysql51.lsp module for MySQL v.5.1

9.2.12
    indices overshooting the list at the end (too big positive index) and
    indices overshooting the list at the beginning (too big negative index)
    now cause a "list index out of bounds" error. Before the last or
    first element of a list was returned instead.

    This affects the functions: nth, set-nth, nth-set, push and pop

    If more indices are present than nesting levels, these are discarded as before.
    Popping an empty list will return nil.

    Fixed a stack overflow in the new 'set-ref-all'

    Changes in the newlisp-edit.lsp GS editor, see guiserver/CHANGES

    The environment variable NEWLISPDIR will only be created and set if it does
    not exist. An exisiting definition of NEWLISPDIR will not be overwritten.

9.2.13
    a bug fix in set-nth, nth-set, ser-ref, ref-set (in getList() ) when first 
    element in an implicit index parameter list evaluates to a context

9.2.15
    assoc, set-assoc (old replace-assoc) and new assoc-set all take mutiple keys
    for multilevel association lists

    fixed stack overflow in ref, set-ref, ref-set

9.2.16
    set-assoc and assoc-set redone, fixes for set-ref, ref-set, set-ref-all
	newlisop_manual.html updates

9.2.17
    Fixes for 'set-assoc' and 'set-ref' when using the wrong syntax

    new 'pop-assoc' for removing associations

    'find' and 'ref' put their last found expression into $0 when used with a
    cpmparison functor as parameter 

    'find-all' has two additional syntax patterns

    'process' now parses commands and args delimited by single or double quotes.
    This is necessary when using file name or argumemnts containing spaces.
    On Win32 do: (process {newlisp '"test prog.lsp"'}) 
    On Unix do: (process {newlisp 'test prog.lsp'}) ; single or double quotes work

    The octal format spcecifier (format "%o" 8) => "10" will work on many
    platforms compilers. This is now documented and useful when inspecting
    the mode number from the 'file-info' function.

9.3.0 prerelease January 28th, 2008
    fix in 'sys-info' for some 64-bit compilations, and other int -> size_t

    reset -w base directory after http requests, this is important in -c mode
    when both, http and net-eval requests may come in, so that http requests
    cannot change the current directory of the server for net-eval requests

9.3.0 final release February 1st, 2008
    a fix for newlisp server mode when using IE explorer on Win32

    documentation changes

9.3.1
    doc changes

    fixes for guiserver v.115 (see guiserver/CHANGES)

    fixed error message for unclosed curl brace

	'pop-assoc' should not set $0 as do 'set-assoc', 'assoc-set' 

	: colon operator should not evaluate args after the object

	new 'read' exposes the internal source code reader. 'read' can be used to 
	write preprocessor for newLISP source or specialized newLISP editors and 
	evaluators. When using 'read' in string mode, comments are preserved.

	'read' takes as argument a source string, a callback function and an optional 
	context.  The callback function is called with each expression as either a string 
	including comments or an expression if the context argument is present. 
	When a context argument is present the source gets compiled in the namespace
	specified by the context, except when overwritten by context statements in
	the source. The string mode (no context is specified) still will check
	the source if it is well formed, with balanced parenthesis and quotes and
	interrupt processing with an error messages, if finding mal-formed s-expressions.

	'read' returns the last return value of the callback function.

	syntax: (read <str-source> <functor-callback> [<context>])

	example:
		(define (crunch sx) (println "=>" sx))

		(set 'code "; a statement\n(+ 3 4)\n(define (double x) (+ x x))")

		> (read code crunch)
		=>; a statement
		(+ 3 4)
		=>
		(define (double x) (+ x x))
		"\n(define (double x) (+ x x))"
		> 

	Note, that string mode conserves orignal formatting in the expression and 
	leading comments returned. 
 
	Following a context is specified forcing 'read' to return compiled expressions:

		> (read code crunch MAIN)
		=>(+ 3 4)
		=>(define (double x) 
 		(+ x x))
		(define (double x) 
 		(+ x x))
		> 
	
	'read' is renamed to 'read-expr' in 9.3.4

9.3.2
    new compile flavor for IPv6 with the following makefiles:
      makefile_darwin_utf8_IPv6
      makefile_linux_IPv6
      makefile_bsd_IPv6

    elimnate quirky symbol syntax in 'net-send'

    functions called by dynamic symbols now switch to the dynamic
    context:
        (define (foo:foo) (context))
        (set 'ctx foo)
        (ctx) => foo
        (ctx:foo) => foo ; previously MAIN

    changed report format in 'net-ping' now includes roundtrip time in 
    micro-seconds

9.3.3
    fixed display of signon banner, which made newlisp-tk.tcl not work. Also, in order
    to make newlisp-tk.tcl work on 9.3.0 and after, the line in newlisp-tk.tcl:
		(net-send SYS:tk-sock 'result)
	should be changed
		(net-send SYS:tk-sock result)	

    in the runtk.lsp utility (see http://www.newlisp.org/index.cgi?page=Tk_and_newLISP)
    the line: 
		(process "wish" tcin tcout)
	changed to:
		(process "/usr/bin/wish" tcin tcout)
	to make it work on v9.3.0 and after

    'search' has a new flag parameter to put the filepointer after the search to either
     the beginnig (nil) or the end (true) of the searched string.

    added <hr> as a legal tag in v.1.5 newlispdoc formatted documentation 

    'xml-parse' crashed when not passing a valid symbol or context

    extra boolean flag in 'bind' forces evaluation of bound parameters:

    (bind assocList true) same as: (apply set (flat assocList))
    this enables an efficient way to define functions with names parameters:

        (define-macro (foo)
	      (local (len width height)
		  (bind (args) true)
		  (println "len: " len " width:" width " height:" height)
	    ))

        (foo (width 20) (height (+ 5 25)) (len 10))

      outputs -> len: 10 width:20 height:30

    a fix for 'expand' when expanding upper-case characters, now limited to 65->90
    to prevent expansion of symbols starting with special characters

    took out the 'read' from 9.3.1. Just couldn't see the benefit of it. Everything
    which can be done with it can be done by redefining 'define', or create other
    special def- functions which transform top-level expressions.

    'env' now removes an enviroment variable when setting it to an empty string
    except when on Solaris, where it stays as an empty string.
    (env "VAR" "value") (env "VAR") => "value" (env "VAR" "") (env "VAR") => nil
    On Solaris (env "VAR") = "". 
    For a platform independent check use (null? (env "VAR"))

    fixed a memory leak on Win32 and Solaris when repeatedly setting the same 
    environment variable

    9.3.2 did not compile on Solaris, 9.3.3 now does

9.3.4
   creating dictionaries (hashes in other languages) got faster and shorter:
   the default symbol if it contains nil works like a hash function creating
   and setting the symbol made from the string following it:

      (define Foo:Foo) ; create namespace and default functor

      (Foo "bar" 123)
      (Foo "bar") => 123 

   'read' which was introduced in 9.3.1 but taken out in 9.3.3, has been put
   back as 'read-expr' and documented. The critical advantage over using
   eval-string on quoted strings is, theat read-epr is reading only one expr
   at a time and its ability to return comments when returning strings

   a fix when serializing illegal symbols with (save (sym <str> <context>) ...) 
   forcing the <context> to be written with MAIN prefix, also: overwrites of 
   'set' and 'sym' will not be saved, as they make it impossible to load 
   serialized contexts.

   newlispddoc now does create HTML files without CSS style definitions but HTML
   files try to to read newlispdoc.css from the same directory and load it, if
   they find one.  A sample newlispdoc.css with the usual style definitions can 
   be found in newlisp-9.3.4/util/newlispdoc.css

   (sys-info -3) is now the current process id (pid). This pid can be usedd to
   'destroy' (kill) the process on MAc OS X and other UNIX. On Windows the pid
   returned seems to have a different meaning and does not respond to destroy.
   The Win32 SDK function GetCurrentProcessId() is used by newLISP internally to 
   get the pid.

9.3.5
   Internally when using contexts as hashes, now an unserscore "_" is
   automaically prepended. This eliminates the danger of overwriting
   the default symbol or overwwriting 'set' or 'sym' in the namespace.
   This way hash namespaces can be saves and loaded without taking precautions.

   This is transparent to the user and the inetface has not changed:

      (define Foo:Foo) ; create namespace and default functor
      (Foo "bar" 123)
      (Foo "bar") => 123 

   an association list can be passed to create a series of association hashes:

      (Foo '(("var" 123) ("bar" 456) ("baz" 789))) ; create hashes from a batch

      (Foo "var") => 123 ; (foo "bar") => 456 ; (foo "baz") => 789

   without any parameter the context is converted to an association list

      (Foo) => (("bar" 456) ("baz" 789) ("var" 123))

   internally symbols are created with a prepended underscore

      (symbols Foo)
      (Foo:Foo Foo:_bar Foo:_baz Foo:_var)

   'start-with', 'ends-with'  and 'sym' now accept a quoted 'nil like other functions
   taking flags

   New 'regex-comp' allows to precompile patterns for all functions which take
   regular expression patterns. newLISP already caches the last compiled pattern,
   but 'regex-comp' is useful in case where repeated patterns alternate and the
   single cache never gets reused.

     (regex-comp <str-pattern> [<int-options>]) => compiled pattern

   When using a regular expression function the compiled pattern gets passed
   with the special option 0x10000, all other options are already contained in
   the compiled pattern.

     (set 'cp (regex-comp pattern))
     (replace cp thetext replacement 0x10000)

   Note that the option 0x8000 for replace once, cannot be compiled into the
   pattern, but can be given together with 0x10000 as: 0x18000
  
   fixed a bug for invalid (<list> <key>) syntax

9.3.6
   smtp.lsp now can take user-name and password parameters for authorization

   The behavior of 'wait-pid' has changed for finer control of child processes:

   If nil is specified instead of the options number in 'wait-pid' then 'wait-pid'
   will not block (WNOHANG option) and return 0 in the pid field of the return list,
   if no childs exited, or -1 if no child processes are present, else the pid
   ands status value of the signalling child are returned in a list. Previous
   versions returned only the status value;

   Using 'wait-pid' now causes the the SIGCHLD handler be set to the
   default signal handler (SIG_DFL) of the OS as if (signal 20 true) has been
   executed. This way 'wait-pid' can return pid values when handling child signals
   On startup of newLISP the SIGCHLD handler is set to waitpipd(-1, 0, WNOHANG) 
   to avoid zombie processes when 'wait-pid' is not used for processes created
   with fork or process.

   added error message to 'error-event', 'signal' and 'timer' when handler parameter
   supplied is not a symbol, lambda function or primitive

   fixed an error in new namespace hash functionality when evaulating the value
   expression

   'lookup' can take an optional default expression, which is returned when the
   association is not found: (looup <key> <assoc-list> [<index>] [<default>])

   Various smaller speed ond code size optimizations introducing makeCell() helper
   function and inlining getCell() into various functions

9.3.7
   Cilk interface: 'spawn', 'sync' and 'abort'. See qa-cilk for workings.
   Only available on Mac OS X and other UNIX like operating systems.
   This API makes it easy to spawn child processes and collect results. 
   The API can be used recursively and automizes housekeeping and zombie
   collection of finished processes.

   'spawn' forks a process and  passes a symbol for the result. 
   A 'sync' function waits for a max timeout on all processes and assigns the 
   results to the symbols spawned by 'spawn'. 'abort' can abort a specific or
   processes. 'spawn' can be used recursively, so spawned child processes can
   in turn spawn other children. newLISP uses shared memory to pass data up
   to 4096 bytes or whatever the pageszie on the platform running. For data sizes
   bigger than the pagesize newLISP automatically switches to a file based
   data transfer using temporary files in /tmp/, where newLISP needs full
   permissions to create, read, write and delete files.

   SYNTAX:

   (spawn <quoted-symbol> <function>) ; spawns the child process
   returns the pid of the forked process

   (sync <int-timeout>) ; waits for result up to milliseconds specified
   returns 'nil' on timeout, or 'true' if all childs have finished. If
   there are still pending childs 'sync' with a timeout parameter can
   be called again.

   (sync) ; only returns a list of pending child processes or an empty
   list if nothing is pending. Does not do any other child processing.

   (abort <int-pid>) ; aborts a specific child process and returns 'true'
   (abort) ; aborts all child processes and returns 'true'

   EXAMPLE:

       (spawn 'x (foo-x a b c)) ; start first child
       (spawn 'y (foo-y d e f)) ; start second child
       (sync 10000) ; wait a maximum of 10 seconds and collect results
       (println "x=" x " y=" y) ; print results

   for more examples and a recursive application woth fibonacci see the
   file newlisp-9.3.7/qa-cilk

   For the original Cilk project (C-library API) see here:
   http://supertech.csail.mit.edu/cilk/

9.3.8
	Cilk API in WIN32 now simulates behaviour in UNIX. 'spawn' works
    like 'set', 'sync' always returns an empty list and 'abort' always
    returns 'true'. This way Cilk API code written for UNIX will also 
    run in WIN32, albeit slower.
    
    bugfixes and improvments in Guiserver for newlis-edit.lsp, see changes 
    file for newLISP-GS.

    added implicit indexing specific error messages.

    'file-info' can be indexed (was not in docs)

    second syntax in 'destroy' lets send any signal to UNIX process
    (was not in docs)

9.3.9
    'spawn' allowed usage of protected symbols

    errors in child processes launched by 'spawn' are now automatically
    catched and returned as a result string, before control was lost
    and child processes could not be 'sync'ed

    some refactoring/streamlining in error handling code

9.3.10
	now the default functor as a container for lists or strings can be
    used for any built-in function asking for a string or list. Until
    now only functons of the special form (... (L idx) ...) could use:
        (nth-set (L idx) value) when L:L => '(a b c d)
    now any function can take lists or strings packaged this way:
        (pop L) => a
    or with strings:
        (set 'S:S "abcdefg") (upper-case S) => "ABCDEFG"
    This means that any user defined function when given a list or string
    packed with a default functor will pass this list or string by reference
    to any built-in function.

    (char "") will return nil, caused out of range error message before,
    'nil' more practical because one can switch on it: (if (char str) ...)

    char, get-char, get-int, get-float, get-string now give an error for
    missing parameter

    server mode with -c or -http now disables commandline shell feature
    with ! at the beginning of the commandline

9.3.11
    (last S), (first S) and (rest S) did not work  when S is a default 
	functor S:S with a list or string.
	
    Fixed push when pushing at -1 on a sublist with one element

	Fixed error messages text in list indexing area

    Added out of bound error messages for 'swap'

    Sortorder in manual should be as in (symbols) except for number ops.
    Fixed many small HTML formatting inconsistencies in the manual. This
    facilitates parseing out syntax lines for autimatic help functions.

    'net-eval' now returns the error string if the remote server task ended
    with error. Before the server would first time out then return 'nil'.
    The new behaviour gives the choice of handling errors on the client
    side and wihtout ewaiting for timeout.

    New 'prompt-event' can redefine the interactive prompt with a newLISP
    routine, e.g: 

        (prompt-event (fn () (append (real-path) "$ ")))

    changes the prompt to a UNIX shell-like prompt. See manual for more
    details.

    New 'command-event' can specify a function written in newLISP to pre-process
    the newLISP command line and newLISP server mode requests before they are
    evaluated. This can be used to write customized newLISP shells, and to
    filter or trasform HTTP requests when running in server mode. 

        (command-event 
            (fn (s) (if (starts-with s "[a-zA-Z]" 0) (append "!" s) s)))

	UNIX commands are passed to the shell via the ! operator. Lines starting
    with a parenthesis or space are passed to the newLISP interpretor.
    See the manual reference for 'command-event' with more examples and
    how to write a preprocessor for HTTP requests. This new function obsolotes
    the old 'command-line' and old way of writing 'httpd-conf.lsp' files.

9.3.12
    'series' can take lambda expression instead of number factor:
		(series p (fn (x) (div 1 (add 1 x))) 20) => converges to Phi for any p != 0

    synchronization in the Cilk multiprocessing interface can now be event driven
    by defining a function instead of a timeout in 'sync'

    Bugfixes in newlisp-edit.lsp for newLISP-GS

    cleanup in nl-debug.c

    restore SIGCHLD behavior after Cilk to newLISP startup conditions

    using 'constant' or creating contexts on local symbols is not permitted
    and causes an error message in: lambda, lambda-macro, ley, letn, letex, local

    fixed a memory leak in net-receive-udp

9.3.13
    Better distribution with new Knuth algorithm for 'randomize'.

    Several bug-fixes in newlisp-edit.lsp for newLISP-GS and new functions.

9.3.14
	New functions for MIDI sequencing several tracks/channels in parallel. 
    See the new demo files midi-demo.lsp and  midi2-demo.lsp.

9.3.15
  Non-default directory install on Win32 now works. Windows must be rebooted
  when not accepting the default directory, so the different path set in
  the environment variable NEWLISPDIR can come into effect.

  In newLISP-GS loading of external soundbanks and saving of sequences to
  MIDI files and channel pitch bending. See newLISP-GS changes notes for details.

  Added reference passing to some missing functions.

  Cilk API for 'sync' changed handling the inlet function as an optional second
  parameter.

9.3.16
  bug fixes in p_randomize and p_rand

9.3.17
  big speedup when deleting the entire contents of a namespace at once using
  (delete <context-symbol>)

9.4.0 release July 1st, 2008
  eliminate mysql.lsp v.4.0 from the distribution

  fixed an error in MySQL:escape in mysql5.lsp, mysql51.lsp (thanks Tim Johnson)

  added newlisp.jsf (syntax highlighting for joe editor) and nanorc (syntax high-
  lighting for the GNU nano editor) to the util directory

  in module cgi.lsp CGI:url-translate did not translate correctly when taking a 
  url-encoded UTF-8 strings as input and running UTF-8 enabled newLISP. The new 
  version 2.3 does the translation correctly on  UTF-8 and non-UTF-8 url-encoded 
  strings and on both versions of newLISP.

9.4.1 release July 6th, 2008
  Filled some gaps in namespace reference passing and fixed memory leaks in the
  matrix API and 'count' function (on Unix). Passes the Valgrind memory check with 
  0 bytes lost memory! 
  
  In parse-date the default day offset has been changed to more sensible 1 (was 0).
  
9.4.2
  fixed a bug in the hash functionality when doing self-referential expressions:
  (define foo:foo) (foo "x" 0) (foo "x" (+ 1 (foo "x"))) ; now works

  don't allow 3rd semicolon in newlispdoc documentation line (for Emacs)
  
  fixes in guiserver
  
9.4.3 July 13 2008
  cleanup -h help message
  
9.4.4
  fixed reentrance bug in format
 
  fixed compilation as Unix library

  fixed $args losing protection under error conditions

  updated gmp.lsp module documentation and library load locations
  
  new 'if-not' works like current 'unless' which will loose the else-clause
  in a future version to work like a (when (not ... ) ..)
  
  'inc' and 'dec' on a variable containing 'nil' assumes 0 contents, this
  makes initialization of variables used in 'inc' and 'dec' un-necessary,
  but is also compatible with existing code

  additionally to doargs, dolist, dostring, dotree now all other non-counting
  iterators: map, while, until, do-while, do-until upate the internal $idx symbol, 
  e.g: (map (fn (x) (list $idx x)) '(a b c)) => ((0 a) (1 b) (2 c))
    
  eliminated deprecated (in 9.3) replace-assoc, use set-assoc and pop-assoc 
  instead
  
9.4.5 release August 5th, 2008
  cleanup in define constant, define, set, setq  assignment group of functions, 
  'constant' should not return a reference as the others in the group.

9.4.6
  a fix for 'xml-type-tags' parameter passing
    
  desktop shortcut in Windows install no optional 

  fixed copy-paste bug in monitor area in newLISP-GS
  
9.4.7
  Eliminated dependence on stack-size in 'find-all' when using the functor
  parameter. Gathering large lists with 'find-all' will not affect the stack.
  
  unify took some special, non-alpha characters as variables
  
9.4.8 development release Sept 1st, 2008
  Small speedup in environment, result and lambda stack management and symbol 
  access
  
  tags in 'xml-type-tags' are now reset to the default on un-caught error 
  conditions which cause a reset.
  
  code cleanup in share
  
  key-handling improvements in the monitor-shell area in newLISP-GS
  
  
;;;;;;;;;;;;;;;;

9.9.1 and 9.9.2 towards newLISP v10.0

 - Reference returns
 - Other changes
 - Short conversion guide

  Reference returns
  =================

  Any built-in function returning a list or an array or a listelelent or array
  element, will return a reference and not a copy if the list or array is bound
  to a symbol. This make it possible to work on with destructive function on
  on the return value of other function modifying the original list or array:
    
      (set 'lst '(a b c))
      (setf (first lst) 99)
      lst => (99 b c)
  
      (setf (lst -1) 'C)
      lst => (99 b C)
  
      (set 'A '((a 1) (b 2) (c 3)))
      (push 'z (assoc 'c A))
      A => ((a 1) (b 2) (z c 3))
      
      (set 'L '(a b (c d e f g)))
      (= (replace 'f (nth (+ 1 1) L) 'z) '(c d e z g))
      (= L '(a b (c d e z g)))
                                
  		... and similar with many other functions ...
  
  The following functions now return a reference to the list, array or string
  or element of a list or array, which can be modified by other functions. 
  Previously a copy was returned:
  
      'assoc'
      'first'
      'last'
      'lookup'
      'ntn'
      'replace'
      'reverse'
      'rotate'
      'set'  (returned reference already)
      'setf' (new function)
      'setq' (old function now working like setf)
      'set-ref'
      'set-ref-all'
      'sort'
      'swap'


  'setf' is a new introduced function working not only on symbol references like 'setq'
   but also on any other reference returned from an expression. 'setq' now works like
  'setf' and both point to the same internal code and are interchangeable. It is 
  recommended to use 'setq' for setting symbol variables and use 'setf' whenever a sublist 
  or subarray is referenced, this follows usage in other LISPs:

      (setq l '(a b c d e f))
      (setf (first l) 99)
      (setf (last l) 9900)
      (setf (nth 3 l) 'Z)
      (setf (l 3) 'z)
      l => (99 b c z e 9900)
      
      (setq l '((a 1) (b 2) (c 3)))
      (setf (assoc 'b l) '(b 20))
      l => ((a 1) (b 20) (c 3))
  
  The changes make many of the involved functions faster. It also obsoletes the functions 
  'set-assoc', 'assoc-set', 'set-nth 'nth-set', 'ref-set'. As these function don't occur 
  much in average newLISP, source changes necessary in existing code are minimal.

  In 55 lisp source files shipped with newLISP only 3 files needed minor changes:

      modules/stat.lsp /modules/xmlrpc-client.lsp guiserver/newlisp-edit.lsp
  
  the parenthesized syntax for assoc, nth, ref, set-ref and set-ref-all
  has been eliminated. Only the traditional flat syntax is allowed. When multiple 
  indices or keys are used a list is specified instead of a single index or key:
  
      (nth i myList)
      (nth idxList myList)
      (assoc key aList)
      (assoc list-of-keys aList)
      ....
  
  Index list vectors are the same as returned by 'ref' and 'ref-all'. Index vectors 
  have been supported with 'pop' and 'push' for several years. as befor index vectors 
  tie together 'nth', 'ref', 'ref-all', 'push' and 'pop' Using index vectors in the
  (only) flat syntax of 'nth', give 'nth' a uniform arity regardless of the number
  of indices involved.
  
  In the 9.x.x series of newLISP support of the parenthesized syntax was inconsistent 
  and lead to ambiguities when using expression for the key in the 'ref' family of 
  functons. Parentheses in this syntax where similar to to parentheses in looping forms
  like (dotimes (x N) ..) etc.. Because they where part of the syntax and not part
  of the normal s-expression these forms where not suitable for 'apply', 'curry' and 'map'.
  In the functions 'ref' and 'ref-all' they createted ambiguities when reading sourc
  about what syntax was used the flat or the parenthesised form.
  
  Now the flat syntax is consistenly the only syntax supported. Multiple indices are 
  espressed as lists (index vetors).

  No changes to implicit indexing, which is conveniently used now when using setf:
  
      (set 'l '(a b c d e f))
      (setf (nth 3 l) 'Z) ; explicit
      (setf (l 3) 'z) ; implicit and fastest

  Other changes
  =============

  'unless' is reintroduced working like (when (not ...) ...) with no else clause

  'lookup' now can take multiple keys like to 'assoc'
  
  All control structures without local variables maintain reference for last return
  value if that value is tied directly or indirectly to a symbol:
  'begin' 'if', 'if-not', 'when', 'unless', 'while', 'until', 'do-while', 'do-until', 
  'cond' and 'case'. 'begin' cannot be used anymore to make a copy of an expression,
  use a lambda function instead: (define (copy x) x)
      
  the initialization file in either $HOME/.init.lsp or $USERPROFILE/.init.lsp or 
  $DOCUMENT_ROOT/.init is loaded if it exists, else if $NEWLISPDIR/init.lsp exists,
  it is loaded
    
  'set' and 'setq' will not allow a missing value argument as was possible before
    
  ("" 0) and ("" -1) will return "". Before ("" 1) also returned "", now will give 
  out-of-bounds error

  added "text/css" and "application/javascript" media types for -http mode

  'eval-string' has dropped the optional error-handler parameter, use 'catch' instead
  (reintroduced in 9.9.4)

  'read-expr' redone, simplified, more useful:
        (read-expr <str-expr> [<context>]) => expr
  basically works like 'eval-string' but doesn't evaluate the expression it compiles
  length of string parsed is in $0
    
  'net-eval' internal cleanup, now uses sysEvalString() like 'spawn'

   Short conversion guide
   ======================
   
   This is a summary of changes necessary to pre 9.9.2 lisp source code to make it 
   run under 9.9.2 and versions after:
   
   - 'unless' - the new version of this function does not have an else-clause but 
   works like: (when (not ...) ...). If old code contains 'unless' with else-clause,
   rename it to 'if-not'
   
   - 'set-nth', 'nth-set', 'set-assoc', 'assoc-set' all have to be relaced by a 
   combination of the new 'setf' and 'nth' or 'assoc, e.g:
   
       (nth-set (lst idx) value)  => change to => (setf (lst idx) value)
       (set-assoc (aList key) value) => change to => (setf (assoc key aList) value
   
   - Multitple indices in 'nth' have to be put in a list and in flat syntax:
   
       (nth i j k aList) => change to => (nth (list i j k) aList)
      
   - 'eval-string' and 'read-expr' lost the error handler parameter, use 'catch' instead to 
   capture and handle errors.
     
   - Nested expressions of built-in destructive functions must not rely on functions
   returning a copy. E.g. in previous versions (pop (sort myList)), myList was sorted
   but the 'pop' of the first element happened on a copy:
       (set 'myList '(b d c a))
       
       ; in 9.4.5
       (pop (sort myList))
       myList => (a b c d) 
   
       ; in 9.9.2 and later
       (pop (sort myList))
       myList => (b c d)
       
    The new behavior leads to faster and more efficiently coded programs. It is also, 
    what many newcomers to newLISP coming from other programming languages would 
    expect intuitively.

    - a 'set-nth' or 'nth-set' used on strings must be replaced with either a 
    combination of 'push' and 'pop' when working on utf-8 or ascii content or 
    combination of 'append' 'slice' when working on ascii or binary content. 
    Note that 'push' and 'pop' both can handle more than one character at once.
    
9.9.3 and 9.9.4
    Some default functor handling was broken, giving errorneous protection messages
    and bad results on contexts in 'setf'
    
    'apply' now honors ref-returns: 
        (push 99 (apply set '(var ())))
        var => (99)
        
    Fixed context-symbol <-> context comparison to make assoc in FOOP more 
    flexible (may be quoted or unquoted in FOOP)
    
    Fixed a stack overflow in eval-string (bug introduced in 9.4.8)
    
    Anaphoric $it in all functions, which can do self referential expression evaluation
    like: 'setf', hashes, 'replace', 'set-ref', 'set-ref-all', 'find-all'
    
       (setf (l idx) (+ $it 1)) ; increments value
       (setf (str idx) (upper-case $it)) ; upper-cases a letter in a string
       (MyHash "var" (upper-case $it)) ; uppercases string in hash value
       
    Note that the anaphoric $it is not reentrant (neither are $0 - $15) and
    will forget its value after exiting the expression (unlike $0 - $15).
    The functions 'replace', 'set-ref', 'set-ref-all' and 'find-all' use both $0 
    and $it for the same value. 'setf' and hashes use only $it.  
        
    Error procedure in 'eval-string' and 'read-expr' returned as last parameter.
    Context and error procedure parameter are swapped compared to 9.4.x series
    this way the error procedure doesn't need to be specified when using context
    spec. Before a nil had to begiven to suppress error-handler.
    
    A few more MIME media types have been added: css, js, avi, wav, zip. 
    See Users Manual.

    'env' without any parameters now returns an association list, not a list of
    flat strings as before:
        (env) => ( ("TERM" "xterm-color") ... ("SHLVL" "1") ...) 
    This way 'env' simulates hash syntax in all aspects. To generate the old-type
    environmnt list use (exec "env") which returns a list of environment strings
    of the form "key=value".
          
    'setf' working on indexed string references:
    
    	(setf (nth idx str) newStr) 
    	(setf (str idx) newStr) ; faster
    	(setf (last str) newStr)
    	(setf (first str) newStr)
        (setf (last s) (dup $it))
    	
     All will change the original string in s and return newStr. All can also work on
     string returns of other built-in functions, i.e:
     
        (set 's "a-b-c-d-e-f-g")
        (setf (first (replace "-" s "")) (upper-case $it))
        s => "Abcdefg"  
      
     translate old: (set-nth (s idx) value)  ; same for nth-set
     into: (setf (s idx) value)

9.9.5
    'push' now returns a reference to the changed list instead of the pushed element.
    Now both combinations: (push (pop ...) ...) and now: (pop (push ..) ...)
    are possible. Previously this was avoided, to avoid copying the list, which now 
    is returned by reference, without the need to copy it. In the following  exampple 
    a (pop (push ...)...) combination is used to model a left-moving queue in one 
    statement:

       (set 'L '(a b c d e))
       (pop (push 'f L -1)) => a
       L => '(b c d e f)
       (pop (push 'g L -1)) => b
       L => '(c d e f g)
       
    No code has changed in any of the modules or applications shipped with
    newLISP but in many places the code could be written shorter and faster
    executing as a consequence of this change.
    
    System variables $0 - $15, $args, $idx, $it and $main-args are now documented
    in the appendix for the "Users Manual and Reference".
    
    Corrected sort-order in the reference section of the manual.
    
    Changed enhnaced 10.0 release notes
    
    'copy' makes a destructive function non-destructive: 
        (replace x (copy theList) y) ; leaves theList untouched
        
    newLISP-GS editor fixes

9.9.6
    'amb' now has reference return too

	Fixes in 'env' and NEWLISPDIR detection for SOLARIS OS

    Doc changes

    New 'net-interface' allows selecting a default network interface card on
    multihoned network nodes. In previous versions only net-listen could
    specify a specific interface IP address, now a different interface card can also
    be selected for outgoing communications by changing the default IP-address.
    
    
9.9.7
    protection error was not traceable in 'swap' symbols
    
    a fix for 'local' when using setf/setq on uninitialized symbols

    replaced all evalChekSymbol with getDefaultOrEval
    
    doc changes
       
9.9.8
    fixed the reduce parameter in 'apply'
   
9.9.9
    swapped parameters in 'write-line' syntax with device parameter coming first
    as in 'write-buffer', 'write-char', etc. The return value is now the number 
    of characters written as in 'write-buffer'. This made changes necessary in 
    the following files:
	   examples/sqlite.cgi
       examples/tcltk.lsp
       examples/upload.cgi
       modules/postsrcipt.lsp
       modules/stat.lsp
       util/newlispdoc
       util/syntax.lsp

    (first '()) and (last '()) now throw error as in Scheme. Before 'nil' was
    returned as in other LISPs. The change makes more sense in the new v.10.0 
    of newLISP, where 'first' and 'last' can return a place changed by 'setf':
       (set 'l '(a b c)) 
       (setf (first l) 9) 
       (setf (last l) 99)
       l => (9 b 99)
    Leaving the old behavior would ill-define 'setf', because their would be
    no place to change. The change also avoids the ambiguity of (first '(nil))
    Thanks to the community for comments on this topic!

	'set-locale' now returns the locale name and the decimal point character in
    a list. Previously only the locale string was returned. This makes it easier
    to write locale independent code containing decimal number constants.

    'file-info' now can take an extra flag to report on the original instead
    of the link, when the node is a link.

	'integer' (removed from docs a long time ago) now eliminated. Use 'int'.

    Eliminated odd symbol syntax in write-buffer, no changes where necessary
    in shipped files, as the symbols was never quoted.

    Code Patterns and Users Manual Reference changes.

9.9.91
    The system variable $status-header can be set to a different string.  Currently 
    "HTTP/1.0 200 OK\r\n" is the fixed response. As an example for a no response 
    header you would specify:
        (set '$status-header "HTTP/1.0 204 No Response\r\n")
    and then exit the cgi program without outputting any content.

    'read-buffer' and 'net-receive' both loose the quote before the buffer
    symbol. Now a context symbol for a default functor can be passed when writing 
    user-defined fuctions where the the buffer can be passed in/out by reference. 
    The change in 'read-buffer' and 'net-receive' requires taking away the quote
    from the buffer symbol in the following files:
        modules/ftp.lsp
        examples/client
        examples/finger
        examples/server
        examples/udp-client.lsp
        examples/udp-server.lsp
        examples/upload.cgi

    set and inc/dec are now the only built-in functions where a quote is required before 
    a symbol. Correct quoting is one of the difficulties new-comers to Lisp have.

    In the Reference Manual all destructive functions are marked with an excla-
    mation mark "!" which links to the relevant Users Manual chapter.
    All functions with special behavior on UTF-8 strings are marked as "utf8" 
    and linked to the relevant Users Manual section.

9.9.92
    'inc' and 'dec' now don't quote the symbol and also can increment or decrement
    a place in a list structure or an unreferenced (unlike setf) number:

     (inc x) => 1   ; if x is nil initially 0 is assumed (as before)
     (inc x) => 2
     (set 'l '(1 2 3 4))
     (inc (l 1)) => 3
	 (dec (nth 0 l) 2) => -1
     (dec (last l) 0.1) = 3.9
     (inc (+ 3 4)) => 8
     l => (-1 3 3 3.9)

    as before nil is taken as 0 before inc/dec and floats are returned whenever
    the amount is specified else assumes 1 for amount and returns integers

    The status header feature introduced in 9.9.91 has been reworked and is
    simpler to use now. Whenever the first line output by an CGI program starts
    with "HTTP/", newLISP server mode will suppress putting out the standard
    status "HTTP/1.0 200 Ok" line and "Server: newLISP ..." line. Instead
    *all* header information must be supplied by the CGI program. The following
    example would redirect a request to a different URL:

        #!/usr/bin/newlisp
	    (print "HTTP/1.0 301 Moved Permanently\r\n")
        (print "Location: http://www.newlisp.org/index.cgi\r\n\r\n")
	    (exit)

    works on OSX 10.5 and Safari browser

9.9.93
    When answering HTTP requests, newLISP server mode sets the environment
    variable SERVER_SOFTWARE to "newLISP/n.n.n" where n.n.n is the version 
    number. This is used to write server independent CGI programs. The same
    environment variable is also written by the Apache and Microsoft-IIS web 
    servers.

    Updated versions newlisp-ide-4.2.tgz and newlisp-wiki-4.3.tgz for 10.0.

    The library newlisp.dll or newlisp.so will look for the environment variable 
    NEWLISPLIB_INIT and load the file specified there instead of looking for 
    HOME/.init.lsp or NEWLISPDIR/init.lsp. NEWLISPLIB_INIT must contain the full 
    path/file-name of the file to be loaded.

	'write-line' with just one argument will still take that argument as a 
    either a file or string device to write too and write the string found
    in 'current-line'. The previous (9.4.5) behaviour of writing that string to
    the console is a historic relic when there was no 'println'. So the first
    argument is always the device to write too.

    Fixed error behavior for 'inc', 'dec'. 

    Many manual corrections

9.9.94
    suppress loading of any init.lsp or .init.lsp using -n as the first 
    command line option, i.e.: newlisp -n

    fixed a bug in replace when key cell is self referential

    corrections in accompanying files

    Users Manual corrections

    CodePatterns.html corrections, separate chapter about HTTP mode.

    Experimental 'estack' with variable environment history.

9.9.95
    No NEWLISPDIR/init.lsp or HOME/.init.lsp will be loaded by a newlisp.dll
    or newlisp.so shared library module. Only if NEWLISPLIB_INIT is defined
    the full path-name contained in it is loaded, else nothing is loaded.

    file:// urls now allowed on 'get-url', 'put-url' and 'delete-url'. Was documented
    already for 'get-url' but never implemented. 

    file:// url was missing for 'delete-file'.

    'save' now throws error when using http:// url just like w/o url mode. Before
    the HTTP error message was returned. This allows writing error
    handlers working equally on all modes specifying the file-path in 'save'
    and 'load'.

	fixed a crash bug when deleting a symbols containing the context of the symbol
    to be deleted.  Strickter syntax now for 'delete', when deleting contexts, the
    symbol of the context must be given, not the evaluated context:
        (delete Ctx) => must now be =>  (delete 'Ctx)

    in newLISP console now keyword completion when hitting TAB once/twice for newLISP
    built-in primitives (Mac OS X, Linux and other UNIX only).

    On Linux and other UNIX .inputrc with the keyword "newlisp" will also be
    recognized.

    fixed indx/dec for integers when compiling for 64bit CPUs

    Manual corrections

9.9.96
    'write-buffer' reported a wrong parameter on error

    'prompt-event' now receives the current context as a parameter

    'curry' now almost 50% faster and hygienic

    'integer' which has been deprecated and not documented for some time
    is now eliminated, use 'int'

    'default' documented again

    a bug fix in infix.lsp for trailing lower priority ops

    'set-ref-all' now will not overflow the stack on large lists

    'bits' function for binary conversion now documented
        (bits 1234) => "10011010010"
        (bits 1234 true) => (nil true nil nil true nil true true nil nil true)
        ((bits 1234 true) 0) => nil

    'inc' will throw error on missing argument 

9.9.97
    misc. cleanup in net-receive and net-select
    updated syntax.cgi and newlispdoc to handle <? ...> XML tags

    $idx gets also updated in the second syntax of the series function.

    all HTML files delivered with distribution pass: tidy -utf8 

    HTML generated with newlispdoc and syntax.cgi passes: tidy -utf8 
    except when generating for gmp.lsp (special characters +,-,*,/,=,<,> in function names)
    (see http://tidy.sourceforge.net)

    updated newlispdoc v2.1, syntax.cgi v2.5


10.0 Release December 8th, 2008

10.0.1 Release January 8th, 2009
     Eliminated warning messages for new gcc version 4.3.2 compile.

     Fixed stat:plot and stat:plotXY routines in stat.lsp for gnupot. Tested 
     on Gnuplot version 4.2.4 on Mac OS X and Win32. The routines broke in 9.3 
     when process required the full pathnam for the process launched.

     Documentation for syntax pattern for stat:plot was wrong. The stat.lsp
     module now looks for the gnuplot executable and gives a message if gnuplot
     cannot be found. The module also looks for $HOME/tmp or c:/temp on Windows.

     Additional offset parameter in 'read-expr' and 'eval-string'

     Allow default functors to contain FOOP objects. This allows writing destructive 
     FOOP procedures, e.g.: 
        (new Class 'Foo)
        (define (Foo:modify obj val) (setf (obj 1) val))
        (define (Foo:show obj) (default obj))
        (set 'MyFoo:MyFoo (Foo 123)) =>  (Foo 123)
        (:modify MyFoo 999) => 999
        (:show MyFoo) => (Foo 999)

     All looping functions with locals variables: for, dotimes, dolist, doargs
     and dotree now can return references too. Now all built-in functions
     except: let, letn, letx and local return references when possible. 

     Fixed potential memory leaks in the Win32 utf16 functions.

     'bayes-query' produced wrong results for non-existing tokens when using 
     Fisher's Chi2 method 

     'last' on strings as reference in non-UTF8 versions always referenced first.

     The link.lsp feature was broken in 9.9.95

     'callback' expanded to 8 parameters and 16 callbacks

     changes in examples/upload.cgi demo

     redone documentation and examples for UDP communications in Code Patterns
     and reference documentation

10.0.2 Release March 9th, 2009
    Addition of READ_ME-OS2 in doc directory and of readline mode in makefile_os2

    Treatment of trailing slashes in file-names for the 'file?' function is
    now consistent with Mac OS X and other UNIX. (file? <directory-name>)
    should always return true, regardless of trailing slash

    'sys-error' now returns last OS errno and text in a list similar to net-error
    (sys-error 0) resets (as before), any other number reports the error text

    overhaul of makefiles for linux/debian and naming of some osx makefiles
        make linux
    or
        make debian
    will allways compile a 32-bit newLISP even when on 64-bit Linux. This is the
    preferred mode to compile for linux, as most libraries and other apps run
    an 32-bit API even if the OS is 64-bit. Same is true for OS X. This gives
    newLISP 4G of workspace, with integer operations and file positioning 64-bit.
    Only if newLISP has access to more than 4G of memory it makes sense to compile
    fully 64-bit using one of the makefiles with '64' in the name.

    added two amalgamation makefiles in the util directory for Darwin and Linux,
    no advantage over normal compile, but perhaps different results on other
    platforms,

    new 'read-utf8' like 'read-char' but reads multibyte utf8 chars

    'eval' did only pass symbol references, now also references from indexed
    expressions:
        (define-macro (foo) (list (args 0) 0)) 

        (setf bar '(1 2 3)) 
        (foo bar) => (bar 0) 
        (setf (eval (foo bar)) 3) => 3 ; was not possible before
        bar => (3 2 3) 

    The "Status:" response line for CGI processing has been redone. When newLISP
    server mode sees CGI output starting with Status: it will compose the HTTP 
    status header with the rest of the line appearing after "Status:" in the line. 
    See the Code Patterns document for an example.

    Eliminated all references to opsys (OS number from sys-info) in favor of 
    Labels "Linux", "Win32" etc. in qa-xxxx files and added "AIX" for future 
    makefile_aix and makefile_aix_utf8 .

10.0.3
    Expanded 3rd syntax in 'swap' (swap <place-1> <place-2>) The first two old
    call patterns are deprecated and will be removed in a future version.

    Eliminated a stacksize dependence when using 'find' with 'match'
	
    IBM AIX for PPC has been added as a platform and using the IBM xlc_r or gcc
    compiler. Some issues with newLISP server mode are not resolved yet.

    Fixed a memory mapping problem surfacing on IBM AIX 32-bit compiles

    Better handling of status in HTTP headers sent back from server

    'nil' and 'true' confused 'sort' and 'unique', fixed.

10.0.4
    Improved precision and shorter source for 'prob-z' function

	'expand' and 'letex' now also expand a top-level symbol not in expr list or 
    quoted:
        (set 'x 123 'y 456)
        (expand 'x 'x) => 123 ; threw error before
        (letex (x 'y) x) => 456 ; returned y before
		(letex (x '(+ 3 4)) x) => 7 ; returned (+ 3 4) before
    previously some of these caused an error in 'expand' and did no expansion
    in 'letex'

    Definition of 'legal?' for symbols was to strict 
   
10.0.5
    makefiles for 64Bit Linux missed the NEWLISP64 flag since 10.0.2
    added makefiles for BSD LP64 mode

    code cleanup for OpenBSD warnings
 
    new 'xfer-event' can monitor byte-transfer in get-url, post-url
    and put-url and all file operations which take URLs.
        (xfer-event (fn (n) (println "->" n)))
		(length (get-url "http://newlisp.org"))
         ->10240
         ->11221
         11221

    'write-buffer' now behaves like 'write-line' when supressing second or
    first parameter

    new 'last-error' replaces 'error-number' and 'error-text' and returns
    number and text in a list consistent with the behavior of 'net-error' and
    'sys-error'. All three now behave the same way and can enumerate all
    errors when given the error number as parameter.

    'bind' did not allow recursive definitions

10.0.6
    some HTTP net errors where not registered with 'net-error'

    readline tab expanson formatting was broken in 10.0.5

    fixed a bug in 'replace' remove mode when all list members are nil

    lambda functions (not lambda-macro) now allow for large or infinite
    running bodies without stack impact

10.0.7
    'net-lookup' now sets 'net-error' when lookup fails

    Miscellanous cleanup in nl-sock.c

    Two NaNs should compare nil, division by zero will throw a div-zero-error
    now only in integer division (/) with floats (div) it will return inf(inity).

    New 'inf?' tests for inifinity: (inf? (div 1 0)) => true
    now (NaN? (div 0 0)) => true

    Thanks to Nelson H.F.Beebe from math.utah.edu to point out the correct IEE-754
    behavior for division by 0.0, and NaN? and inf? tests.

    The build process now also accepts  'make check' additionally to 'make test'
    for GNU compatibility: 'make all check' and then 'sudo make install' makes
    tests and installs.

    When installing using 'make install' or when installing from the UBUNTU Linux
    binary installer a newlisp-x.x.x (where x.x.x is the version number) and a i
    symbolic link is created for newlisp -> newlisp.x.x.x. This way older versions 
    stay and are still accessible. The binary installers for Win32 and Mac OS X 
    have not changed.

    The newlispdoc utility now accepts custom tags, which can be made up by just 
    prepending the custom name with a: @.  The text after the custom tag will be 
    translated as usual, e.g. it may contain @link tag etc.. Like in most other 
    tags, text is limited to the same line.

10.0.8
    'pack' now converts floats to integer when the format is integer but the
    argument is a floating point (double). It already converted integers to float
    when the format was float, but didn't handle the other direction.

    (int "ff" 0 16), (int "+ff" 0 16) and (int "-ff" 0 16) now all work. In former
    versions a leading 0 or 0x was required.

    An optional boolean flag in 'dotree' allows filtering hash symbols or symbols
    from 'bayes-train' starting with an underscore character in their name.

    Small fixes for syntax highlighting in newlisp-edit.lsp.

    newlisp-edit.lsp now can change fonts in both, the editor and monitor areas,
    depending on cursor position.

    The syntax highlighter in syntax.cgi and newlispdoc now colors newLISPdoc 
    tags too.

10.1.0 - release June 22nd, 2009
    fixed a memory leak in 'sync' when transferring data bigger memory page-size

    (add) and (+) now return 0 and (mul) and (*) return 1. Before a missing
    parameter error occured.

    (and) now returns true. Before it returned nil. (or) still returns (nil).

    new 'send' and 'receive' message functions for communications between 
    parent and 'spawn'ed child processes. Transfers any expression any size.

    new 'qa-message' file for testing new 'send/receive' message functionality

    Makefiles with 'solaris' have been renamed to 'sunos'  and the built-in
    variable 'ostype' now reports "SunOS" for Sparc SunOS and "Solaris" only for
    OpenSolaris. Before "Solaris" was reported for all.

    All UNIX except AIX and TRU64 are now compiled for readline and UTF-8 support
    by default: make. Do make -f makefile_xxx. to choose a different configuration.

    The util/ directory contains an alternate configure script called configure-alt
    this can be copied up to the main distribution directory as an alternate
    comnfigure utility. See util/configure.txt for more info on this.

    if an 'until' or 'do-until' body is empty the last condition evaluation
    should be returned

10.1.1 - release update July 21st 2009
    'string' function now 25% faster on expressions

    It is not necessary anymore to give the program expression in 'net-eval' as a
    string, if not given as string net-eval will convert automatically:
        (net-eval "remote.com" 12345 "(+ 3 4)") => 7
        ; same as
        (net-eval "remote.com" 12345 '(+ 3 4)) => 7
    Same works for the nested syntax with map of sites and expressions.

    Added optional offset parameter in 'regex' and 'find' (in string syntax)
        (regex <pattern> <string> [option [offset]])

    'series' with the function argument now can make series of any data type

    'swap' was not throwing error when second parameter was missing

    Fixed a bug in 'eval-string' when the error procedure was specified.

    In newLISP-GS gs:color-tag was documented but not implemented in Java

    In newlisp-edit.lsp (newLISP-GS IDE) Ctrl-x/v/z/Z and Cmd-x/v/z/Z did not
    set the buffer-dirty red light

    New 'configure' makes old 'build' script obsolete.  After extracting the source 
    distribution, simply 'make' will look for a 'makefile_configure' and generate
    it calling 'configure' if it doesn't exist, then it builds the newlisp excutable
    using 'makefile_configure'. An alternative: configure-alt can be found in the 
    main distribution directory. See doc/INSTALL for more details.

    SunOS makefiles now have support for readline by default

    makefile_linuxLP64_urf8 had nl-utf8.o missing in OBJS
	
    makefile for ARM CPU on Nokia N810 tablet. To make for ARM:
        make -f makefile_linux_maemo_armel

    New module smtpx.lsp like smtp.lsp but allows attachments

10.1.2 Windows only release update , August 3rd, 2009
    to correct printing to stdout problem

10.1.3 development release Aug. 9th, 2009
	'inf?' and 'NaN?' where not working correctly on Win32, a new qa-float
    can be used to check several aspects of IEE 754 Floating point compliance
    regarding inifinitive and NaN (not a number) floating point values.

    In 'now' the last 2 fields "minutes west of UCT" and "daylight savings" 
    are now working correctly on Linux, Mac OS X, SunOS, BSDs and Win32.
    Daylight savings on Win32 as minutes on all others as 0 to 6 flag depending
    on geographical area. On AIX, OS2 and TRU64 0 is returned for both fields. 

    The 'time' function now returns float milliseconds with fractional part
    instead integer milliseconds.

    The return string size from 'command-event' is now unlimited, before
    254 length was maximum.

    New -t <connection-timeout> commandline option, specifies timeout in
    micorsoseconds after connection when in demon mode. This avoids an un-
    responsive server when a client connects, but doesn't do anything else.

    New makefile_darwin_utf8_llvm on OSX for building newLISP using the LLVM
    compiler. Improves performance by about 10%, needs developer tools installed.

    New versions of syntax.cgi and newlispdoc correct highlighting for & and ^.

    New version of nls (combined newLISP and BASH shell) adapts the help function
    to the manual formatting introduced in 10.1.1.

    Long overdue removal of internal cell mark/sweep routines. 

    Net sessions list now avoids socket doubles in server mode.

10.1.4
    'now' offset parameter crashed broken in 10.1.3, working again

10.1.5 Maintenance Release September 15th, 2009

    Fix for OS2 compile in nl-filesys.c

    Fixed stray i in fetch-all in mysql.lsp,

    Return milliSec float with decimals for 'time-of-day'; on modern systems
    this enables microsecond resolution.

    On Mac OSX 10.6 Snow Leopard, the make/configure script will make a 32-bit
    newLISP although 64-bit is detected as the default. To make 64-bit newLISP
    use one of the supplied makefiles explicitly as in earlier Mac OSX versions.

    Copying a zero-length file will not throw an error anymore.

10.1.6 Maintenance Release October 20th, 2009
    Fixes for 'net-error' and 'sys-error' when supplying out-of range numbers
    o 0s. 

    Documentation fixes in the 'Users Manual and Reference'.

    'inf' is now signed in floating point opertions: (div -1 0) => -inf
	'mod' will return NaN for a 0 divisor, % will still throw an exception
    when divisor is 0.

    Fixed a memory bug in 'starts-/ends-with' when using regular expressions.

    'nil' and 'true' symbols where not always taken as boolean value which
    affected 'sort' and 'difference'.

    New 'reader-event' triggers when an expression was read. The function
    specified in 'reader-event' can translate the expression before
    evaluation returning a modified version of the input. This can be used
    to create a reader macro facility.

    New module file macro.lsp implements reader/rewrite macros by means
    of the new 'reader-event' function.  

    Change in sqlite3.lsp in bind-parameter, how text and blobs are retrieved.

    deprecate usage of $0 in set-ref and set-ref-all .

	throw error when trying to do a replace on a system symbol

    some cleanup of itSymbol

10.1.7 maintenance release November 24th, 2009

    URLs now decoded correctly when compiled in IPv6 mode.
	IPv6 compiled version now runs qa-net.

    'net-ping' does not require root/superuser privileges anymore when on Mac OS X.

    Small speed improvement in map and fixing treatment of missing arguments:
    (map list '(a b) (A)) => ((a A) b) ; not ((a A (b nil))
	(map string '(a b) '(1)) => ("a1" "b") ; not ("a1" "bnil")

    'swap' can work in-place like: inc, dec, pop, push, replace, rotate, sort,
    write-buffer and write-line always could.

    Optional true-flag parameter in ref/ref-all returns item(s) found instead of 
    index vectors when a compare function is specified. Instead of:
        (map mylist (ref-all pattern mylist match)
    do:
        (ref-all pattern mylist match true)

    Bad application of errorProcExt2() in netReceive() could crash on error.

    Protect local symbols in caller hierarchy from 'constant' and 'context'.

    All event fuctions now can take either nil or 'nil (quoted) to disable an
    event handler, before only quoted 'nil was working, unquoted nil could crash.

    Removed experimental 'estack' from code and newlisp.vim (introduced in v9.9.94)

    Throw reference error in 'setf' on string when base ptr is not from sub-expression 
    string. Wouldn't do anything before.

    Accept chars > 127 in HTTP headers received from remote servers in web functions.

    Do URL translation of path-file names in HTTPD server mode.

    A 'sql3:colnames' function has been added to the sqlite3.lsp module.


Dec 6, 2009
10.1.8 This development version starts the v.10.2 generation of newLISP 

    Fixed a bug when replicating primitives with 'new'.

    FOOP objects are now mutable, anonymous or not. The old obj parameter has been
    dropped from FOOP methods. Instead a new function 'self' is used to access and
    index the target object:

       (new Class 'Circle)

	   (define (Circle:move dx dy) 
           (inc (self 1) dx) 
           (inc (self 2) dy))
       
       (set 'aCircle (Circle 1 2 3))

       (:move aCircle 10 20)

       aCircle => (Circle 11 22 3)

    Old FOOP methods have to be rewritten to drop the obj parameter:

    old : (define (Foo:method obj p1 p2) ...)
    new : (define (Foo:method p1 p2) ...)

    This has also reduced the overhead required in FOOP methods. Allthough this
    change creates an incompatibility with older FOOP code, the advantage
    of having mutable objects compensates for that incompatibility. Destructive
    methods was the FOOP feature most asked for ind newLISP.

10.1.9 Jan 12, 2010
    Fixed executeCommandLine() for 64-bit UBUNTU, which could cause writeStreamStr()
    related functions to crash.

    (delete <sym> nil) will delete symbols without checking any references. The 
    symbol can be a context symbol. Note that this mode of 'delete' can crash 
    the system if if symbols are referenced from anywhere else. 
 
    Fixed double evaluation in nil? predicate

    Fixed a bug in 'legal?'.

    Better error reporting for url based file operations.

    A sign-extension fix for 'get-int' under 64-bit

    Fix in gmp.lsp for 64-bit >,<,>=,<= but still problems with 'factor'

    Fix for push on fresh symbols. Did return the element pushed not the list.

    Fix for push -1 optimization when copying contexts with 'new' 

    Fix for a memory leak in certain applications of 'new' 

    Fix for 'self' in nested FOOP functions, also eliminated FOOP stack

    New smtpx.lsp module for (multiple) attachements and UTF-8 safe encoding


10.1.10 Jan 26, 2010
    New 'extend' works like 'append' but modifies first list or string
    parameter.

    New ++ and -- increment/decrement in integer mode.

    Functions 'inc/dec' now always work in floating point mode.

    In 'find' the regex option can be specified as nil when offset is present,
    this way 'find' with offset does not have to be a regex search.

    In 'starts-with/ends-with' nil is not allowed as a parameter for
    case insensitivity anymore use the regex option 1 instead (nil always
    did regex anyway).

    Changed configure-alt now allows defintion of different install and
    exe prefixes. For questions and support for configure-alt, please
    contact Ted Walther: ted@reactor-core.org.

    Makefile has been simplified and the install part extracted as:
    makefile_original_install, (used by configure).

10.1.11
   Various documentation fixes and changes.

   Additional, optional list-index parameter in 'now' makes it return a list 
   member instead of the whole list:
      (now 0 0) => 2010 ; year
      (now 0 -2) => 300 ; offset west of GMT (in EST)

   A string slice offset out of bounds now throws error as in lists.

   'pretty-print' can addtionally define the default print format for
   floating point numbers.

   New 'prefix' returns the context of a symbol.

   New 'term' replaces deprecated 'name'.

   New 'caller' returns the symbol of the caller function.

   'read' and 'write' may be used as shorter writings of the elementary 
   'read-buffer' and 'write-buffer' I/O functions.

   Addtional chapter in doc/INSTALL for package creators and installation
   customization.

   Updated syntax highlighing for nano, joe, and vim editors.

   Added back cleaning into 'make dist'.

   Re-added Cygwin flavor with 'make -f makefile_cygwin'. The make file gets
   also chosen by 'configure' and makes a newlisp.exe, but has to be installed
   manually together with cygwin1.dll in %NEWLISPDIR%; on Win32 normally
   defined as C:\Program Files\newlisp. 
   Many thanks to Niek from http://daansystems.com for helping with this.

10.1.12
   Symbol protection for containers of mutable FOOP objects

   Functions 'crit-chi2' and 'prob-chi2' produced value too low on odd degrees 
   of freedom. 'bayes-query' in Chi2 mode was not affected.

   moved most qa-xxx files into qa-specific, only qa-do and qa-comma stay in
   main source directory. The commands 'make test' alias 'make test' work like
   before, but now taking qa-xxx files from qa-specific. A new 'make testall'
   can be used to test with allmost all qa-xxx files. 
   To reduce output do: make test | grep '>>>>>'

   Rework of setf for in-place changes.

   'caller' introduced in previous development version 10.1.11 has been
   eliminated.

   'define-macro's (fexpr's) are now included in error reporting:
      define (foo) (bar))
      (define-macro (bar) (+ a s f))
      (foo) =>
      
      ; in older verssion 'bar' doesn't show
      ERR: value expected in function + : a
      called from user defined function foo

      ; now 'bar' is reported
      ERR: value expected in function + : a
      called from user defined function bar
      called from user defined function foo

    In newLISP-GS on Win32 a messagebox pops up if a connection cannot be
    established between the newLISP process ad Java GUI server.

10.2.0 stable release March 16th, 2010
    new 'configure-alt' fixes a problem for debian package making.

    The enviroment variable REQUEST_METHOD is now set by newLISP server mode
    to one of the strings GET, HEAD, PUT, POST, DELETE.

    'det' and 'inv' now return 'nil' on singular matrices, but fall back
    to the old behaviour when specifying a new optional 'true' flag. With
    the flag pivot elements of 0 will assume a very small value as in
    older versions of newLISP.

    'xml-parse' did ot parse UTF-8 chracters correctly.

    'make test' and 'make testall' now by default do the short display
    with only the end result. 'make check' and 'make checkall' produce
    the long output.

    Fixed wrong error message in context creation.

    The int-type field in all financial functions is optional.

10.2.1 stable release March 17th, 2010
    'setf' and 'swap' could change the values of 'true' and 'nil'.

10.2.2
    'time' did overflow after 35 minutes now can count to about 68 years.

    Speed up of Hash deletion with: (<tree> <token> nil). No reference
    checks are made. This means that tree hashes should only be used as
    such and symbols not be referenced directly with the prepended 
    underscore, as is usual practice already, or be deleted explicitely 
    using 'delete'.

    'xml-parse' with context option did not convert names of built-in
    primitives.

    New second syntax pattern for 'net-service':
       (net-service <port> <protocol>) => service-name
       (net-service 22 "tcp") => "ssh"

10.2.3
    The 'net-connection' functons now can take a timeout ms parameter:
       (net-connnect <str-host> <int-port> <int-milli-sec>)
    on UNIX the function will fail returning 'nil' before the timeout
    expires. On Win32 the 'net-connect' will not fail until the timout 
    is run out. This makes the function return 'nil' on closed ports
    much faster on UNIX.

    New documentation for 'net-service' and 'net-connect'

10.2.4
    'find-all' will not exit anymore on loop conditions but retry
    incrementing the the search offset by 1. 

    'load' in HTTP mode did not return to previous context, but always
    went into MAIN.

    "file://C:/example.txt" and "file:///C:/example.txt" both forms are
    now valid on Win32.

    On Win32 negative Inf lost the sign when converting to maxint

    Shorten p_setLocale() code. 

    A fix for ref-passing out of loop primitives.

10.2.5
    Additions, modifications to qa-xxx files

    The 'true' flag in 'delete' was not handled correctly since 10.2.0

    10 times speedup of 'save'

    new 'net-packet' function, UNIX only tested on Mac OSX 10.4 PPC G4,
    Mac OSX 10.6 Intel, Linux UBUNTU 9.10  (root privileges required).
    See newlisp-10.2.5/qa-specific-tests/qa-packet for working TCP examples.
    Change target IP numbers in packet examples in qa-packet to working ones.
    Protocols TCP, UDP and ICMP have all been tested on OSX X PPC, OSX Intel
    and Linux UBUNTU 9.10 communicating with raw packets between Big-Endian
    and Little-Endian CPUs, sending a raw-packet and receiving a correct
    response packet.

    handling on short lists when mapping strings now consistent: 
    'map' stops collecting as soon as one argument list is short. This
    ensures that elements in the nth row appear always in the nth column
    after the transposition caused by 'map'. This was working on lists
    but did not work accordingly on strings.

10.2.6
    In 'get-url' the "list" option in combination with the "debug" options
    did return a string instead of a list.

    'net-packet' now also works with OpenBSD addtonally to: Mac OS X on 
    PPC and Intel and Linux on Intel CPUs. 

    The timeout parameter in 'get-url', 'post-url' and 'put-url' did not 
    work correctly since 10.2.3 after introducing the 'net-connect' timeout
    parameter.
 
    OpenBSD 4.6 now added as a regular test environment additionally
    to Mac OSX, FreeBSD, UBUNTU Linux, SunOs Sparc and Windows XP/7.

10.2.7
    In  'pmt', 'ipv', 'nper' int -> long for Linux 64-bit

    Cell leak in 'find-all' when new handling of looping condition (v.10.2.4)

    Fixes in qa-net for IPv6

	Note, that net-packet is currently coded only for IPV4

    Fixed a bug in URL parsing for IPv6

    'find' did not evaluate regex option parameter since 10.1.10

10.2.8 stable maintenance release May 20th 2010
    Backed out some IPv4/6 changes in 10.2.7 reverting to 10.2.6 plus some
    IPv6 fixes. Next development version will split up nl-sock.c into UNIX 
    and Windows versions; recoding the UNIX version using getaddrinfo() and 
	getnameinfo() for dynamic IPv4 and IPv6 support in the same version.

10.2.9 development release May 27th, source only
    Large portions of nl-sock.c have now been re-written to switch between 
    IPv4 and IPv6 during runtime using the new 'net-ipv' function:
        (net-ipv) ; show current protocol as 4 and 6
        (net-ipv 4) ; switch to IPv4
        (net-ipv 6) ; switch to IPv6

    By default newLISP starts in IPv4 mode, to start up in IPv6 mode:
        newlisp -6
    When the IPv4 to IPv6 transition is completed in a few years, the
    default will be changed to IPv6 and a 'newlisp -4' startup option
    will be introduced. The current -6 option is only necessary when starting 
    newLISP in server mode. In normal mode a (net-ipv ...) code switch can be used.

    The nl-sock.c  uses the newer POSIX 'C' getaddrinfo() and getnameinfo() 
    functions. Wondows 95 is not supported anymore. The minimum MS Windows version 
    for newLISP is now Windows NT 5.01. This allowed mostly similar code
    on Windows and UNIX and made a split into platform dependent files unnecessary.


    New 'qa-specific-tests/qa-net6' for IPv6 testing included in:
        make testall
    UNIX like OSs test fine on IPv4 and IPv6. Currently I have no IPv6
    capable MS Windows, FreeBSD and SunOS installations for testing.
    But on all platforms this version compiles and links well.

    Following systems test fine:
        Mac OS X 10.6, IPv4 and 6, 32 and 64-bit
        Windows XP SP2, IPv4 only, 32-bit
        Linux UBUNTU 10.4, IPv4 and 6, 32-bit
        OpenBSD 4.6, IPv4 and 6, 32 and 64-bit
        FreeBSD 7.2, IPv4 only, 32-bit
        SunOS 5.8 on Sparc Ultra-2, IPv4 only, 32-bit 

10.2.10
    Allow binary zeros in 'exec' piped-in data

    Cleanup for sendHTTPpage()

    Fixed a bug in 'copy', which passed on a wrong protection status, when
    copying protected variables since 10.1.12

    IPv6 not currently working on the Win32 MinGW compiled version

    Changed winsock initialization to v.2.2

10.2.11
    Windows versions now compiled using wspiapi.h in nl-sock.c. This guarantees
    working of freeaddrinfo(), needed for IPv6, on some older Win 2000 systems.

    New multiline mode on the commandline, without using [cmd], [/cmd] tags:
    just hitting [enter] on an empty line gets into and out of multiline mode. 
    The [cmd], [/cmd] still work too and are needed internally when newLISP is 
    working in server mode, for some IDEs and when pasting source containing
    empty lines into the terminal. Tab-expansion (on Unix only) for built-in 
    function names also works in multiline mode.

    Minor changes in version 1.37 of the Java based Guiserver.

    In 'net-ping' specify optional third parameter to get an error string instead
    of response time, if the host did not respond. This behavior was present in
    previous versions, but was not documented.

10.2.12
	Fixes and additions for newLISP-GS guiserver.jar. See guiserver/CHANGES

10.2.13
    More fixes in guiserver see guiserver/CHANGES
    no changes in newlisp interpreter

    New 'date-list' returns list of year, month, day, hours, minutes, seconds from
    time value in seconds since January 1st, 1900 (reverse of 'date-value')

    'date-parse' is new name of old 'parse-date'

    The week-day value in 'now' and the new 'date-list' has been changed to
    conform to the ISO-8601 standard (international standrad for time and date
    related data). Now 1-7 for Monday thru Sunday.

    Font size in syntax.cgi now bigger on iOS devices iPad and iPhone

    newlisp_manual.html, CodePatterns.html, ExpressionEvaluation.html and 
    MemoryManagement.html are now XHTML 1.0 Transitional compliant.

    New users manual chapter "3. Interactive Lisp mode" explains all the
    features of the read-eval-print-loop (REPL) in newLISP.

    Guisererver: Fix in TextShape.java to fox crashes when painting canvas.

10.2.14 Development Release Sept 2nd, 2010

10.2.15
    Increased maximum length of command-line to 511. This affects the interactive
    command line and line length in HTTP request headers. 

    Default connection timeout set to 10 secs, up from 3 secs. Always can be
    overwritten by timeout parameters in net-connect and get,post,put and
    delete -url functions.

    The boolean flag in 'title_case' in non-UTF8 versions was not calculated
    correctly.

    All HTML files in the doc directory are UTF8 and XHTML 1.0 Trans. compliant.

    Additional parameter in '!' on MS Windows can be used to enter process creation
    flags, e.g. for suppressing creation of a command window. Not using the parameter
    assumes the old '!' method. When the parameter is present (can be 0) an alter
    native method of process creation is used without dependence on a command shell
    window. On Unix this parameter is ignored.

    Fixed a bug in symbol compare routines when comparing dynamic symbols.

    Result of 'map' should always be unprotected.

    More adjustments in switchable IPv4/6 mode. 

    Last sys-info field should change 7th bit (512) with 'net-ipv'

    A change in guiserver.lsp to fix instabilities when gs:check-event was called
    from gs:listen invoked event handler functions.

10.2.16
    New table widget and supporting functions in Guiserver.

10.2.17
    Fixes in error handlers of xmlrpc-client.lsp and xmlrpc.cgi

    Fixes in guiserver.jar in Table UI

    The sniff and scan utilities are added to newlisp-x.x.x/examples 
    directory in the source distribution.

    On 64-bit versions 'date' and 'date-value' will work for dates year 2038 
    and up to January 2100.

    The 'mod' function assumes the second parameter to be 1 if missing, thus
    returning the fractional part of a number.

    Updates to configure-alt for Windows 7.

    POST with multipart/form-data content-type now works with newLISP HTTPD
    and CONTENT_TYPE is added to the environment by newLISP server.
    now added.

10.2.18
    'extend' will take an un-initialized variable and create a list or string
    depending on the second argument (similar to 'push'). Before a variable
    in the first argument had to be initialized to a string or list.

    Added path for Fedora Linux in mysql.lsp

    PCRE was not configured correctly for utf8 when using configure-alt.
    pcre-config.h now includes config.h when using configure-alt to build.
    Builds with the standrad configure where never affected. 
    versions.

    Added a "divert" option to 'net-listen'. In this case a IPPROTO_DIVERT 
    option is added to a raw socket. 'net-receive-from' and 'net-send-to' 
    are used to serve the divert-socket returned by 'net-listen'. The 
    interface address is given as an empty string for INADDR_ANY. 
    BSD 'ipfw' or Linux 'ipchains' rules must be defined in the configuration 
    of the FreeBSD, OpenBSD or Linux platform for the divert-port and the 
    ports to be diverted. 'net-receive-from' will contain the local interface 
    address for incoming packets and will contain 0.0.0.0 for outgoing packets. 
    See the man page for divert. The same address received by 'net-receive-from' 
    is used in the 'net-send-to' call when re-injecting the packet:

        (set 'divertSocket (net-listen divertPort "" "divert"))

        (until (net-error)
            (set 'rlist (net-receive-from divertSocket maxBytes))
            (set 'buffer (rlist 1))
            ; buffer can be processed here before reinjecting
            (net-send-to (rlist 0) divertPort buffer divertSocket)
        )

     newLISP must be run in superuser mode to be able to create divertSocket.

     Some internal cleanup for p_first(), p_last()

     Bug fixes for modules/json.lsp

     Fixed cell leaks when 'ref', 'ref-all' failed with error in
     compareFunc()

     The return value for 'ref' has changed from () to nil, when not
     finding anything.

     Fixed cell leak when 'setf/q' failed with protection error

     symbolCheck cleanup in 'assoc', 'lookup', 'ref', 'set-ref' and all
     flow constructs results in some speedup for these functions.

10.3.0 Stable Release, February 2nd, 2011
     newLISP HTTP server now also sets  CONTENT_LENGTH environment 
     variable when present in incoming client header.

     In cgi.lsp added (outcommented) alternative method for reading 
     POST data. This relies on CONTENT_LENGTH set in the environment.

     Fixed a problem in assoc, lookup and pop-assochen nil is passed
     as key.

     cgi.lsp now uses CONTENT_LENGTH if present to receive POST data

     Fisher Chi-2 derived probabilities in bayes-query are not normalized
     any  more.

10.3.1  development release May 17th, 2011
     Documentation changes

     When a list reference changes while being indexed an error is thrown.
     Code written this way will normally not make sense, but now fails
     more gracefully.

     (set 'lst '(1 2 3 4 5))
     (lst (set 'lst '(1 2 3)))
     ---> ERR: list reference changed

     MBCS coded characters in pathnames in the Windows UTF-8 version.

     Better worded error message when wrong parameter type in implicit
     indexing of strings and lists.

     Fixed a buffer overflow for interactive multiline mode for long
     input lines.

     Fix for 'filter', 'index', 'clean', 'exist' and 'for-all' when
     handling empty list elements (). Also, these functions are now
     several times faster.

     Check for missing parameter in inc, dec, ++, --. Using these
     without any parameter messed up the value of 'nil'.

     Fixed crash bug with boolean 'true' parameter in 'dotree'

     Minimum SDK changed to 10.5 Leopard for makefiles:
       makefile_darwin_utf8_leopardPPC
       makefile_darwin_utf8_leopardIntel
     to make a universal Tiger 10.4 based version the file:
       makefile_darwin_universal_utf8_compat
     still exists (for questions about this -> Greg Slepak).

     bug fix for 'timer' when using recursively and not using symbols
     but lambda expressions, e.g.: (timer foo 1) instead of (timer 'foo 1)
     when the (timer ...) statement is part of foo.

     New version 0.3 of json.lsp module now processes backslashed characters
     as of JSON spec (thanks Ted Walther).

     Speedup and memory lossless error recovery in 'map'.

     Better memory management in error recovery of evaluateStream()
     and sysEvalString()

     Did not clear EOF error in 'read-line'.

10.3.2 stable maintenance release July 20th, 2011
     New 'debugConsole' in newlisp.dll can be imported and called for
     re-opening std I/O to CONOUT$ and CONIN$.

     Fixed memory leak in library mode.

     Doc changes and additions.

     makefile_darwin_utf8_lib for newlisp.dylib

     Fix for "debug" option in 'get-url' when passing url-encoded
     strings (thanks to Kosh for catching and fixing this)

     The newlisp.1 man page showed an old invalid method to define
     redirections in http-conf.lsp.

     Significant speedup of 'series' with function in second argument.

     Speedup of 'find-all' (for lists and strings) when function is used
     as third argument.

     Quoted strings now can contain unicode characters encoded using
     \u.... , where .... are four hex digits e.g. "\u03b1\u03b2\u3b3"
     for the Greek letters "αβγ" (alpha, beta, gamma). When reading 
     the string, newLISP will translate it to UTF8 encoded characters
     on UTF8 enabled versions of newLISP.

     More work on 'map': speedup now also on smaller lists.

     Avoid redundant cellCopy() when cell already on result stack
     (needed change in array initialization).

     Fixed and error message in gs:save-sequence

10.3.3 stable maintenance release September 20th, 2011
     Manual updates.

     On MS Windows newlisp.dll now lives in windows/system32 or whatever
     the main 32bit DLL directory is on the specific Windows platform,
     chosen by the $SYSDIR variable in the NSIS installer.

     Fixed broken memory sharing for date sizes > 4084 bytes.
     This affected 'spawn' and 'share' for memory transfers > 4084 bytes.
     Also inlined stream writing for this fucntion again for better 
     memory cleanup.

     Share file in tmp is now deleted when unmapping under UNIX. Unmapping is
     not available in Windows but in all OS a (share mymem nil) will
     always delete any existing tmp file for this share.

     When in trace/debug mode and an error occurs in a function call
     inside a 'catch' statement, an error message will now be printed,
     Processing will continue as before with the offending function
     returning either 0 or nil depending on the nature of the function.
     This allows to inspect the current state of the program.

     2 new example programs in newlisp-10.3.3/examples/ :
     Script 'async' show how to do asynchronous web page retrieval.
     Script 'query' shows how to retrieve 20 pages in parallel spawned
     child processes. 

     Fixed return value from callback funtions when 64-bit integers
     are returned.

     From newLISP library a new function "newlispCallback" can be imported
     to register callback functions (see manual for details)

     -l -L now always create a logfile if it doesn't exist. Evaluation
     results prepended with "-> ". [cmd],[/cmd] are not logged

     Save memory in 'string' and 'format'. 

10.3.4
     Reworked 'send'/'receive' message API is multiple times faster and has
     more consistent performance on different platforms. Better on BSDs
     than on Linux. The channel for each child is now a dual read/write
     message queue. In previous version only one message could be written
     to the queue with send, now mutiple message can be send on the same
     channel and retrieved on the receiving side with multiple 'receive'
     until returning 'nil'.

     In the new syntax of 'receive' the <message> parameter is optional:

        (receive <pid>) ; returns the message or nil
        (receive <pid> <message>) ; returns true or nil

     Both 'send' and 'receive' now have syntax to return a list of all
     ready child channels using either (send) to get a list of child
     pid's ready to receive data or (receive) to get a list od child
     pid's ready to be read. This greatly speeds up asyncrounous
     messaging, where multiple child processes, but not all, have sent 
     messages. Previously:

        (dolist (p (sync)) (until (receive p msg))) ; (sync) -> child pids

     Now using only a ready subset, 'receive' can be used non-blocking
     and only a subset of all child pids is iterated through:

        (dolist (p (receive)) (receive p msg))

     Now, when a 'spawn'ed child process ends abormally the variable in the
     spawn command will contain an error message and a result number,
     e.g. '9' from a kill signal sent by an external process.

     Fixed longstanding bug for list-mode 'net-select'. Now returns
     socket numbers in the ready list not 0's.

     Documention for the messaging API has been updated in the reference
     manual and code patterns documents.

10.3.5
     'invert' over-allocated memory

     Fixed a crash bug in purgeSpawnList()
   
     icmp6.h include for cygwin in nl-sock.c (thanks KOSH)

     The creation of a communications channel between and parent process
     and 'spawn'ed child processes for usage with the message API  of 
     'send' and 'receive', is now optional:

         (spawn <sym-variable> <child-process> [true])

     If the'send' or 'receive' is used on the child process spawned, the
     optional flag must be set to 'true'.

     The fakes versions on 'spawn', 'sync' and 'abort' in Win32 have been
     taken out.

     The newLISP shell "newlisp-x.x.x/util/nls" now works on MS Windows too.

     The link feature using util/link.lsp did no works with 64-bit versions
     of newLISP.

     In the MinGW compile of nl-sock.c the include file wspapi.h has been
     replaced with ws2spi.h. This file is part of the normal MinGW install.

     newlisp.dll now lives in NEWLISPDIR again as it did before 10.3.3

10.3.6 development release November 18th, 2011

     Speedup of string stream conversion for 'format', 'string'.

     A bug fix in 'spawn' when aborting child processes

     Preparations for expanded FFI (grep for FFI in all files)

10.3.7 development release
     
     Fix in printing FFI primitives (FFI is disabled by default)

     Updated newlispdoc now all tags (including custom) are title-case'ed

     Simple libffi calls working on Mac OSX, UBUNTU Linux (Intel) and Win32
     three (and more) new ffi makfiles:
        makefile_darwin_utf8_ffi  # std OSX install has libs and headers
        makefile_linux_utf8_ffi   # must install package libffi-dev
        makefile_mingw_ffi        # must install libffi.a library for build

     New qa-specific-tests/qa-ffi for ffi API testing

     The new ffi extension work with the existing 'import' functon:
        (import "libc.dylib" "atof" "double" "char*") 
        (atof "123.456") => 123.456

     No "cdecl" or "stdcall" mustbe specified. The parameter after
     the function name is the return type. The remaining parameters
     are the function arguments.

     As before, the imported function can be renamed:

        (set 'strtof (import "libc.dylib" "atof" "double" "char*"))
        (strtof "123.456") => 123.456

     The following types are implemented for LP64, LLP64 and ILP32

         "byte"
         "char"
         "short int"
         "unsigned short int"
         "unsigned int"
         "int"
         "long long"
         "float"
         "double"
         "char*"
         "void*"

      For pointer return values "char*" and "void*", the address
      is returned as a number. Use 'get-string' or 'unpack' to retrieve 
      contents. This method allows returning binary info. THIS IS CHANGED 
      IN 10.3.9 where "char*" returns a string directly and "void*" a number.

10.3.8
      Make sure FFIMPORT struct memory gets freed when doing multiple
      'import' of the same function or deleting the func symbol.

      When using 'configure' and 'make' FFI will be chosen by
      default on Mac OSX, Linux and Windows (MinGW)

      Both "char*" and "void*" accept either a  newLISP string buffer or an 
      address number as input. On return "char*" will return a newLISP
      string buffer and "void*" will return an address number.

      Comprehensive qa-specific-tests/qa-ffitest compiles util/ffitest.c
      on the current platform then tests all data types.

      Now ffi checks for nummber of arguments matching call pattern.

      The opengl-demo-ffi.lsp now runs on both 32-bit and 64-bit newLISP
      and libraries. On Windows glut32.dll is required. On Mac OSX everything 
      is installed by default.

      ffi callback (ffi closure) working now on Mac OS X, Win32 and UBUNTU Linux
      with standard installed libraries. Only for compiling/linking
      libfffi-dev is necessary on UBUNTU linux. 

      The extended 'callback' API will not work on 64-bit Mac OSX newLISP, 
      but there is no problem to mix extended 'import' and simple 'callback' API
      (see examples/opengl-demo.lsp)

      Bit 11 for 0x400 in the last field of 'sys-info' is set for extended ffi 
      enabled versions requiring ffilib.
            (not (zero? (& 0x400 (sys-info -1)))) => true for FFI support

      Avoid passing on list or string references in primitives taking strings
      or lists but creating new objects.  This caused an error when doing 
      (inc (char str)) when str is protected. symbolCheck = NULL only neccessary
      if not set to NULL by previous evaluateExprtession() to non-string/list.
      Fixed on selected primitives.

      qa-ffi and qa-libffi are now part of 'make testall'. They will not be
      executed on versions not compiled for libffi based FFI.

10.3.9 development release December 21st 2011
     'struct' function for extended FFI usage now working for 32 and 64 bit
        (struct 'foo "char" "int" "short int")
     Foo can now be used as a data type in the extended FFI API:
        (import "thelib" "afunc" "foo" "foo") ; takes ans returns a struct foo
     (unpack foo (afunc (pack foo 1 2 3))) => returns a list with 3 numbers
     The additional syntax forms of 'pack' and 'unpack' take care for packing
     and unpacking wirth the correct number of pad bytes to make align
     structures on different Architectures.
 
     See qa-special-tests/qa-libffi for an example.

     Accept data lists in struct packing just like in traditional 'pack':
        (struct 'pair "int" "int") => pair
        (pack pair 1 2)    => "\001\000\000\000\002\000\000\000"
        (pack pair '(1 2)) => "\001\000\000\000\002\000\000\000"

     Nested structure now can be packed:
        (struct 'pair "char" "char") => pair
        (struct 'comp "pair" "short int") => comp
        (pack comp (pack pair 1 2) 3) => "\001\002\003\000"

     Sub-structures are unpacked manually (may be changed):
        (unpack comp (pack comp (pack pair 1 2) 3)) => ("\001\002" 3)
        (set 'p (first (unpack comp (pack comp (pack pair 1 2) 3))))
        (unpack pair p) => (1 2)

     Because of memory management issues with cells in FFI symbols
     extended ffi functions, structs and callbacks can only be defined
     once. Subsequent definitions return nil and the existing definition
     stays untouched.

     Miscellanous fixes for 64-bit newLISP and ffilib usage.

     Added custom ffi_type ffi_type_charpointer for displayable strings
     now 'unpack' unpacks strings for "char*", not address numbers.

     On Mac OSX 64-bits extended callback (ffi closure) does now work.

     SHA256 crypto algorithm has been added to the module crypto.lsp.
     Thanks to Marc Hildman for this contribution. 

10.3.10 Development release Janaury 10th, 2012
     Repeating ffi 'callback' with the same symbol will just return the old
     address but not redefine the callback or return nil (as in 10.3.9).

     examples/opengl-demo-ffi.lsp now also working with extended callback API 
     on 32-bit and 64-bit.

     Huge speed improvement in 'read-line' with file handle parameter,
     now as fast as STDIN. For file and pipe operations.

     'struct's returned by the extended FFI will now be unpacked automatically.
     Nested structures will be unpacked recursively too:

         (struct 'pair "char" "char") -> pair
         (struct 'comp "pair" "int") => comp
         (pack comp (pack pair 1 2) 3) => "\001\002\000\000\003\000\000\000"
         (unpack comp "\001\002\000\000\003\000\000\000") => ((1 2) 3)

     Imported functions can now be default functors:
        (define myprintf:myprintf (import "libc.dylib" "printf"))
        (myprintf "%s %d" "hello world" 123)

     All makefile_mingwdll* tweaked for MinGW gcc 4.6.2. But binaries are still
     delivered compiled on gcc 4.4.0 and made on Windows XP SP2, run fine on
     Windows 7. 10.3.6 to 10.3.9 had newlisp.dll compiled for cdecl now in
     10.3.10 newlisp.dll calling conventations are back to stdcall.

10.4.0 stable release February 14th, 2012
     UCT offset minutes as reported by the 'now' function now have reversed the
     sign conform to ISO 8601. Positive for locations east of UCT and negative
     for locations west of the UCT meridian (formerly GMT). Days of the year are
     now reported from 1 - 365 (366 in leap years) instead of starting with
     offset 0. 

     'read-char' w/o file handle reads from the current I/O device.

     New version Guiserver 1.45 avoids error loops when midi system is unavailable.

     In 'unify' the underscore symbol '_' matches any atom or list or variable.

     Two new make files for the Raspberry PI development VM from:
         http://russelldavis.org/2012/01/20/new-raspberry-pi-development-vm-v0-2/
     These makefikes don't need the readline library, although it could be installed
     as shown here:
         http://russelldavis.org/2012/01/23/building-newlisp-for-the-raspberry-pi-using-the-development-vm/

     newlisp.dll now also on Winsock version 2.2 (like the main executable since 10.2.10)

10.4.1 Development release April 3rd, 2012
     The day-of-year value in 'date-list' now also starts with 1, like in 'now'.

     Added CELL_IMPORT_FFI to various output functions (source, save etc.).

     Added UTF-8 meta tag to newlispdoc HTML output.

     Protect internally variable $x used in 'curry' and predefined 'module'.

     When extended 'import' FFI is compiled, show 'libffi' in banner. 

     Added new function 'union' (composed of (unique (append ...))).

     New functions 'odd?' and 'even?'

     Fixed unix.lsp for new overwrite protection of imported symbols in ffilib version

     An additional 'true' flag in (char str idx true) returns the byte value instead
     of the UTF-8 character value at index idx in the string.

     Handle probablilities less 0.5 in crit-z.

     New 'prob-t', 'crit-t', 'prob-f', 'crit-f' for Student's t and F statistic.
     'crit-chi2' redone for extreme values. All report small, significant
     one-tailed probabilities for higher values of t, or F.

     Adjustments in 'normal' for better fit.

     Optional 'true' flag in 'file?' lets it return filename string.

     Windows version should cut off trailing CR-LFs in string passed to 'command-event'.

10.4.2 stable  maintenance release May 2nd, 2012
     In extended ffi "char*" will now only accept strings not integer addresses to
     string buffers. For passing integer addresses use "void*" - internally libffi
     treats them as the same, but the new approach gives automatic type-checking
     at the newLISP level without causing a segfault. Already for return values
     "char*" always returns a newLISP string and "void*" an integer address.

     A fix for 'pack' when packing structures made with 'struct' in 64-bit newLISP.

     In 'import' for OSX/Linux/Unix allow libraries to be opened without importing
     functions. This is necessary if an imported library refers to another one, e.g.:
        (import "libgslcblas.dylib")
    
     New module gsl.lsp with SVD, QR and Cholesky decompositions.
 
     Added  'corr', 't-test' and 'stats' statistical functions.

     New standard module gsl.lsp for SDV, QR and Cholesky decomp. and solver routines.

     Updated plot.lsp with line and XY plot now a standard module.

10.4.3 stable maintenance release May 7th, 2012
     (seek <file-handle>) after (read-line <file-handle>) was broken in 10.4.0 when
     introducing faster file stream reading on 'read-line' and file closing could
     leak memory.

10.4.4 Stable Maintenance Release September 15th, 2012
     Eliminated getFloatFromCell() and replaced by getDirectFloat() in nl-math.c

     Fixed error message for missing [/text] -tag when loading source from file.

     read-file, write-file, append-file, delete-file when used with http:// URLs will 
     now return nil under error conditions instead of throwing an error. This is
     consistent with error behavior on local files.  When nil is returned, net-error 
     gives more error information. For remote server-side errors on URLs the server 
     HTTP error page is returned.

     Check for UTF8 string validity in functions which are UTF8 sensitive. 
     An error message "invalid UTF8 string" is issued for invalid UTF8 strings.

     Several - and continuing - manual updates, most of them also going into current
     online version of manual.

     guiserver.jar 1.47 fixes getting text from an empty gs:text-field.

     Binary number format can be used with either 0b or 0B as prefix to up to 64
     1's and 0's, e.g. 0b101010 for the  number 42.

     A 'true' flag as optional parameter in base64-enc will force the empty string
     to be translated as "" instead of "====". Both cases translate correctly to
     the empty string when fed into base64-dec.

     Fixed a result stack overflow problem on callback's.

     On OSX Mountain Lion 10.8.0 compiles also using clang instead of gcc.


10.4.5 Maintenance Release, November 21st, 2012
     Doc changes.

     Avoid overrun of invalid utf8 strings in utf8_wlen() in nl-utf8.c and
     new error message "invalid UTF8 string". Used by several string functions
     and indexing.

     'process' on Windows now returns a real pid (process id) as on UNIX. Before
     a Windows specific process handle was returned - thanks Johu -

     Fix for loading .init.lsp on OpenBSD.

     cgi.lsp now can handle mutipart form data in POST requests - thanks Unya -

     Additions to postgres.lsp - thanks Unya -

     Fixed a bug in 'ref' when multiple nested matching expressions.

     Fixed a bug when using 'float' on list members (took the next element as
     conversion default).

     Added comments in newlisp.h and makefile_linuxLP64_utf8_ffi for CentOS 6.

     Added makefile_linuxLP64_redhat_utf8_ffi and makefile_linux_redhat_utf8_ffi.
     Work Centos and Fedora. Use ./configure to configure these makefiles for correct
     libffi version. Thanks to Ivan Ribeiro for this contribution. 

10.4.6  development version released on 2013-02-05
     When using option 8 in xml-parse (translation of XML tags into newLISP symbols),
     then the colon : in XML tags with namespace part, will be translated into a dot.

     macro.lsp now works when defining default functors as macros.

     A fix in cgi.lsp for receiving large POST data.

     Fix for newlisp-edit.lsp for usage in OSX homebrew distribution.

     In 'file?' the 'true' flag not only causes the filename to be returned but now
     also implies that the filename is not a directory, else 'nil' is returned.

     Crtl-D in Unix now will emit a line feed before exiting.

     Added 'make android_dist' and 'make android_dist_utf8' for making 
     newlisp-ndk-x.x.x.tgz and newlisp-ndk-utf8-x.x.x.tgz package.

     A fix in sort when the sorting function is generated at run-time.

     On LINUX and BSD when compiled with GNU libreadline support a matching paren will 
     blink on the simple or multiple newLISP command line. For this the following line:
         set blink-matching-paren on
     should be put into Bash .inputrc

     When making for Linux Android, 'share' and 'spawn' now work for data > 4072 bytes,
     when a /data/tmp directory is created on the Android device. 
     
     This /data/tmp directory must also be present for CGI when running newLISP HTTP
     server on Android. 

     Lower 4 bits of (sys-info -1) on Android is 11 but 'ostype' is "Linux".

     JSON parser function (json-parse <string>) translates a JSON formatted string
     into a S-expression. (json-error) returns error information of the form:
     (<text str> <int-position>) when (json-parse <string>) returned 'nil'. 
     ECMA-262 compliant as defined at  http://json.org 

     big/small -endian initilaization wasn't happening in LIBRARY compile flavor, 
     always assumed big-endian.

     The module files: cgi.lsp, macro.lsp, plot.lsp and sqlite3.lsp have been updated.

     Added error checking on net-select mode parameter.

     Server mode now sets the REMOTE_ADDR environment variable to the IP-string of 
     the connecting client.

     Last cell speed optimization for lists made with 'append', 'sequence', series
     and 'rotate'.

10.4.7
     Eliminate unused JSON error message.

     Elminated usage of $0 in replace on lists (no regular expressions). The count
     of replacements now is contained in the new $count system var, not $0. The usage
     of $0 - $15 now is strictly for regular expressions. This also speeds up replace.

     read-expr now uses $count instead of $0 for the number of characters processed.

     Eliminated undocumented usage of $0 for found elements in find-all on lists.
     Only $it is used. $0 only on find-all on strings with regular expressions.
     The system variable $count is updated for all forms of find-all, ref-all and
     set-ref-all.

     Link feature now built in with comandline flag -x for all OS flavors:
        newlisp -x <source-file> <executable-file>
     The file util/link.lsp is not required anymore but has been included and 
     adapted to changes for the -x linkage. The file illustrates the internals
     of the linkage process when using the -x option.

     An additional true flag in the real-path function allows finding the executable
     path of executables - similar to the "which" utility on UNIX. This is a by-
     product of fixing the link.lsp feature for UNIX. The additional flag works
     on all platforms. 'real-path' on Windows and BSD now also veryfies that path 
     and file are valid, as it already did on non-BSD Unix (OSX, Linux).

     Enforce MAX_SYMBOL for tags in xml-parse and symbol creation using sym.

     Security fixes for strncpy and strncat.

     Windows CGI server mode was broken in development version 10.4.6 (isDir()).

     Preparation for 64-bit Windows (in early summer).

10.4.8
    Cleanup of the factor function.

    Like date-parse, date-value will produce negative values for dates before 1970-1-1
    til 1901-12-14.

    The function 'flat' now can take an optioal depth parameter to limit flattening
    a list up to certain level: (flat <list> [<level>])

        (flat '(1 2 (3 4 (5 6)) (7 8 (9 10)))  ) => (1 2 3 4 5 6 7 8 9 10)
        (flat '(1 2 (3 4 (5 6)) (7 8 (9 10))) 1) => (1 2 3 4 (5 6) 7 8 (9 10))
        (flat '(1 2 (3 4 (5 6)) (7 8 (9 10))) 2) => (1 2 3 4 5 6 7 8 9 10)

    A fix for 'extend' when passing wrong type to unitialized symbol.

    A fix in the parser to accept -.9 as -0.9 or +.9 as +0.9

    =, +, -, *, /, %, ++, --, >, <, <=, >=, !=  operators and the functions 'abs', 
    'even?', 'odd?', 'length', 'number?' and 'zero?' are all working on big-integers 
    of unlimited size. 'float' and 'int' convert bigints into double floats and 
    64-bit integers and the function 'bigint' converts integers and floats to big 
    integers. See the section "Big integer, unlimited precision arithmetik" in 
    chapter 8. of the Users Manual for more information.

    Extended commandline buffer to 1024 bytes.

    The "debug" option in: (get-url "http://newlisp.org" "header debug") will now also 
    output the status header line of the server response in the console.

10.5.0 Stable Release May 21st, 2013
    Further speed improvements on big integer multiplication and division/modulus.

    Check for division by zero in big integer division/modulus.

    Memory fix for ++, -- on big integers.

    The OSX Intel version is now 64-bit by default.

10.5.1 development release Jun 4th, 2013
    bigint will take mal-formed integers:
       (bigint "hello") -> nil 
       (bigint "123hello") -> 123L
       (bigint "+123hello") -> 123L
       (bigint "-123hello") -> -123L
       (bigint "123.456") -> 123L
    but should not be used on string of scientific notation, it only converts the mantissa
       (bigint "123.456e10" -> 123L

    Fixed division when aligned or not aligned embedded bigint 0s (9 zeros).

    Fixed more big integer division problems and added more tests to qa-bigint.

    Compiler optimizations are now supressed in part of the big integer 
    division code to make it work on Linux. Does not affect performance.

10.5.2 development release June 26th, 2013
   Fix for Java 7u21 in guisserver.jar, guiserver.lsp and newlisp-edit.
   function gs:run-shell now takes separate command and args parameters.

   New functions 'kmeans-train' and 'kmeans-query' for cluster analysis. The
   Function 'kmeans-train' allows starting centroids to be either generated
   randomly or be passed as an extra parameter. This allows clustering like
   in Kmeans++ or other advanced schemes of pre-calculated start centroids.
   When pre-calculated centroids are given, they are allowed to have less 
   columns, thus forcing kmeans clustering with less columns. This allows
   to pre- or post-label the data set by including cluster-membership labels
   in the last column. 

        (kmeans-train matrix-data int-k context [matrix-centroids]) 
            return => list of inner SSQs for all iterations

        matrix-data -> n rows by m columns (list or array)
        int-k       -> number of desired clusters
        context     -> new or existing context for results
        matrix-centroids -> optional k * m starting centroids (list or array)

        ctx:centroids -> k * m matrix of k centroids
        ctx:deviations -> list of average intra cluster deviations = sqrt(ssq-cluster/n-cluster)
        ctx:clusters  -> list with k sublists each containing indices into data
        ctx:labels    -> list of n cluster labels, one for each data record

        (kmeans-query list-data centroids)
            return => list of k Eucledian distances from the k centroids

        list-data -> data record to be classified
        centroids -> result in namespace from previous kmeans-train or any other
                     list of data records to calculate Eucledian distances
    
 
        'kmeans-query' can also be used for KNN (K Nearest Neighbour) analysis,
        as it calculates the Eucledean distances for any matrix given in
        the second argument, not only centroids, but e.g. the original
        dataset. If the data-set is pre-labeled, then list-data has less
        columns forcing to not include the label in analysis.
 
   Fixed handling escaped " (quote) in JSON strings.


10.5.3 stable release July 10th, 2013

   fixed escaping of back slashes in json-parse

   file nl-xml.c renamed to nl-xml-json.c and makefiles changed accordingly

   refactored  nl-matrix.c/multiply() to avoid memory leak on wrong parameters


10.5.4 stable release October 1st, 2013

   3.7 newlispdoc cleanup ";; *" regex

   New FFI ffi.h include directory in makefile_linux* when installing libffi 

   Fix for last list element optimization in push, pop and pop-assoc when 
   popping and inserting last element

   Accessing a deleted context will never hang but give an error message

   Some changes in nl-filesys.c for AIX and new makefile for AIX ILP32

   On Windows: a fix for correctly closing logfiles initiated by newlisp -l or 
   newlisp -L and for closing files created by the HTTP PUT operation.

   Two sample 't-test' when variances are different (independent samples) with
   new syntax:
        (t-test <list-vector-A> <list-vector-B> <float-probabilty>)
   When <float-probabilty> is specified, an internal F-test for variance
   equality in data A and B is performed. If the probablity of F is
   smaller than <float-probabilty>, then Welch's variant of the t-test for
   independent samples is performed. Using 1.0 <float-probabilty>, Welch
   can be forced even when variances are not significantly different.

   One sample 't-test' using new syntax pattern: 
        (t-test <list-vector-data> <float-value>)
   Gives the two-tailed probability that observed mean is differs from <float-value> 
   Instead of sdev for second list-vector the standard error for the observed mean
   is reported.

   Some cleanup and changes in scripts (makefiles) for binary installers


10.5.5 2013 November 20th, development release
   Allow trailing , (comma) in JSON arrays. The new JSON ECMA-404 seems not 
   to allow it but the JavaScript standard ECMA-262 and many browsers do.

   Added makefile_linux_openwrt for for TP-link TL-WR703N travel router
   contributed by Dexter.

   In arithmetik big integer operations + - * / % more than two operands
   are allowed as in normal precision integer operations.

   On Windows support UNIX conventions for formatting 64-bit integers.
   I.e.: %lld %llu %llx %llX additionally to %I64d %I64u %I64x %I64X

   Added ++, -- to qa-bigint. Fixed sign change on second operand of
   bigint -- when second operand was negative.

   Some cleanup in Cilk API when releasing resources.

   The 'gcd' function now also works on big integers and > 2 operands. 

   On UBUNTU Linux decimal numbers can be formatted using a GNU extension
   in libc, e.g: (format "%'d" 12345) => 12,345 
   The optional ' (single quote) after the % character causes thousands
   to be separated with the appropiate character for the current locale. 

   Fixed a cell leak introduced in 10.5.5 when deleting contexts.

   The default pretty-print float setting has been changed to "%1.15g".

   'reset' now also cancels command line parameter processing.
 
   A fix in 'round' when number is exacty 0.5.

   'map', 'apply', 'stats', 'corr', 't-test' now also can take arrays

   'bayes-query' with Fisher's Chi2 method calculated wrong probabilities
   when training in more than two categories. When training in two
   categories the result probabilities were swapped - reporting the
   probability for the second category first. 'bayes-query' calculating
   probabilities with the Chain Bayesian method - using the true flag - 
   was not affected.

   Many documentation changes and corrections.

10.5.6 December 10th, 2013, development release
   Since OSX 10.9 Maverick (format "%'d" 12345) => 12,345 will work too.
   Will not work on any locale but works on en_US.UTF-8.

   Fixed 'apply' for arrays introduced in 10.5.5 for a cell/memory leak.

   When making hash trees using the predefined context 'Tree', 
   the default symbol in the new context is protected as is 'Tree:Tree'.
   Default symbols in hash trees must be 'nil' in order for the hash 
   statement syntax for namespaces to work.  

   When copying symbols from a source context to a target contest using 'new'
   or 'def-new', the 'protected?' property is copied too.

   An empty list as index vector for a list or array yields the original
   list or array as return value: 
       (set 'L '(1 2 (3 4)))
       (L '())    => (1 2 (3 4))
       (nth '() L) => (1 2 (3 4))

   Many document changes, additions and corrections.

   'int' can convert binarys numbers like (int "0b11111") => 31
   This format is recognized by the code reader/loader since v.10.4.4.

   Integers are accepted as hash keys. This allows creating sparse vectors: 
       (new Tree 'V) 
       (V 123 "hello") 
       (V 123) => "hello"

   'reverse' can be used on arrays.
  
   Anaphoric system variable $it is now set to the value of the conditional 
   expression in 'if'.

   Speed improvements in evaluateExpression().  For this The -pendatic option 
   has been turned off in Linux to avoid ISO C90 mixed declaration warnings.

   'length' on integers will return the number of digits, just like it already
   does on bigint numbers, on floats returns the number of decimal digits before
   the decimal separator.


10.5.7
   Fixes for deprecated CYGWIN compile. See also makefile_cygwin for more info.

   Clear potential error condition when doing 'import'.

   In guiserver.jar: When adding columns with empty string headers, this will not 
   any more put the column number as header. This allows to add columns to 
   headerless tables, as possible when supplying empty string headers in the 
   initial gs:table statement.

   Debugger will now always highlight the correct expression, not highlight
   the first one if multiple instances exist.

   Eliminated strncat() for BSD and better speed with memcpy() in most places.

   Delay signal-behavior change in spawn after getting parameters. Makes better
   error recovery.

   In guiserver.jar: New table functions. Thanks to Ferry de Bruin.
     gs:table-remove-row, gs:table-set-column-name and gs:table-set-row-count. 
   To avoid API naming confusions, the naming of old gs:table-set-row-number 
   is deprecated and should be called as gs:table-show-row-number. 
   The old naming will continue to work. Three new optional parameters for 
   'gs:scroll-pane' can specify colun header, row headers and a widget
   for the top left corner of a table used in the scroll pane.

   'find-all' should return an empty list as documented when nothing is found
   on strings too.

   Some renaming of functions and constants for better code readability and
   some small refactoring in several files.
 
   qa-bench has been redone with changes for Emscripten compiled newLISP.
   Now calibrates for comparison with Mac OSX 9.1 on 2.3GHz Intel Core i5.

   Fixed a crash bug when colon operator has missing or wrong-type args
   on 64-bit compiles.

   newLISP compiled to JavaSript with Emscripten
   ---------------------------------------------
   Added makefile_emscripten_lib_utf8. For this
   Must download and install the Emscripten-SDK from here: 
       https://github.com/kripken/emscripten/wiki/Emscripten-SDK
   Tested on OSX 10.9 installing emsdk-portable.tar.gz v.1.7.8

   The newlisp-js-lib.js is made using makefile_emscripten_lib_utf8.

   The new function 'eval-string-js' takes a JavaSript string.
   New 'display-html' can either replace the current page or display 
   a page in a new tab of the host browser. 'display-html' must be
   defined in Emscripten appplication .html

   Some functions (filter, index, clean, exists, forl-all) will not show
   error messages under certain circumstanmces in the monitor, although
   newLISP behaves correctly throwing the exception (setjmp/longjmp), they 
   just don't reach the Emscripten console (log). In this case, if the error 
   is not 'catch'ed newLISP exits without advising why. This problem goes away
   when compiling with Emscriptem without any optimizations, but slows
   everything down by a factor of 40 to 50. Normal performance is around
   1.5 of native on Mac OSX when excluding all time/date related functions 
   and a few other outliers. Including outliers about 2.65.
   See also here: https://github.com/kripken/emscripten/issues/810
   (volatile declaration did not help)

   All file and directory functions work (almost all did all the time),
   but changes are lost after leaving the page or reloading the page.
   Storage is 'session storage' only. No URLs are in allowed in file
   functions as is on native compiled newLISP.

   As editor, CodeMirror from codemirror.net is used and mode/newlisp.js
   was created for syntax high-lighting.

10.5.8
   'macro' is now a built-in primitive function working exactly as described
   in the macro.lsp module, which is now obsolete. Macros cannot be redefined
   using 'macro'. Macros can be nested. A symbol used as a macro can only be
   used as a macro, even if changing the definition of it.

   Another speed improvement for 'read-line' on file handles (the first speed
   improvement happend in 10.3.10).

10.6.0
   Eliminated emscripten-lib.c, gets handled by unix-lib.c.

   A fix for 'file?' and 'directory?' predicates when applied to root 
   directories on Windows.

   Updated examples/udp-server.lsp to nmake it work on Windows.

10.6.1 Development release September 16th, 2014
   Added typedefs for CPPFunction and CPFuncition to compile on UBUNTU 14.04
   with libreadline v.6.1.

   Make qa-bigint and qa-bench work for UTF8 versions on all platform locales 
   by forcing the "C" "." locale  at the beginning.

   Report the result of the 'flt' function on all platforms as an unsigned
   integer. Previously on 32bit newLISP versions a signed integer was
   reported and an unsigned integer on 64bit versions.

   'rotate' on (copy str) corrupted memory when using optimized copyCell().

   Delay cell deletion for indexed strings if not referenced by a symbol; 
   already happens for lists.

   In 'regex' in utf8 versions and when specifying the PCRE_UTF8 parameter
   - 2048 or "u" - give offset and length in number utf8 characters:
        (regex "Ω" "ΨΩ") => ("Ω" 2 2)
        (regex "Ω" "ΨΩ" "u") => ("Ω" 1 1)
        (regex "Ω" "ΨΩ" 2048) => ("Ω" 1 1)

   A second call pattern for 'copy'
        (copy <s-expr>)        ; <- original syntax
        (copy <int-addr> true) ; <- new syntax
   The new syntax marked by the true 'flag' takes a memory address of a cell 
   and copies it. The following expressions are equivalent:
        (copy cell) <=> (copy (first (dump cell)) true)


   'get-string' now can take one or two additional optional parameters:
        (get-string <address>) ; gets an zero terminated ASCII or UTF-8 string
        (get-string <address> <bytes>) ; gets a buffer of <bytes> of binary data
        (get-string <address> <max-bytes> <str-limit) ; reads to <str-limit> or max

        The second pattern would work for UTF-32/UCS-4 this way:

        (get-string <address> <max-bytes> "\000\000\000\000")

        Any other string in <str-limit> can be specified to stop reading

        If comparing with \000\000 or \000\000\000\000 comparison is aligned
        to 2 or 4 byte boundary for specifying UCS-2 or UCS-4 string limits.

    Highest bit of crc32 does should not get sign extended in 32-bit newLISP.

    New function (collect <exp>) collects in a list while <exp> evaluates to
    not nil:
        (let (x 0) (collect (if (<= (inc x) 5) x))) => (1 2 3 4 5)

    the int-option parameter in functions using regular expressiona can now be
    a string for PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_EXTENDED
    PCRE_UTF8, PRECOMPILED using the letters i,m,s,x,u,p.
    example:    (find "x.z" "abcX\nZ" "is") => 3
    in functions: directory, ends-with, find, find-all, parse, regex, regex-comp,
    replace, search and starts-with 

    The protected? function did not recognize macro symbols as protected.

    Cleanup for 64-bit time_t on 32-bit Windows. Thanks Kosh!

    The 'macro?' function also works on 'macro' symbols.

    A wrong UDP option in net-connect and net-listen now throws an error.

    Distribution packages for Linux are now with a newLISP executable compiled
    for 64-bit.

    In Emscripten v.1.22.0 compiled newLISP exception handling now works.

10.6.2 January 20, 2015
    When parsing binary, hex, decimal, float and integer numbers, now up to
    1000 digits are parsed when present. The rest will be read as new token(s).
    Note that IEEE 754 64-bit doubles distinguish only up to 16 significant 
    digits. For big integers the 1000 limitation exists only when parseing 
    source. There is no limit when a result of big integers math exceeds 1000 
    digits.
 
    Added makefile_bsdLP64_utf8_ffi

    varPrintf() now always avoids printing format strings without args.

    Improve libffi detection with newlisp-x.x.x/configure on RedHat Linux.

    On BSDs if /usr/local/include/ffi.h is present the libffi versions gets
    compiled when using: ./configure, which is used by default when just
    issuing: make

    Fixed multi-line shell mode on Windows when comments are present.

    New definition of stuffFloat() to avoid compiler error in p_getFloat()
    which needed inlining old stuffFloat(). Test using:
        (get-float (address (get-long (address 17.4)))) => 17.4

    Optional int-max-count parameter for the 'collect' primitive.

    Cacheing crc-table in crc32 function for speedup in repeated use.

    The default print floating point format changed from "%1.15g" to "%1.16g".
    (can always be user changed using pretty-print function)
 
    A third syntax of 'reset' allows resetting the maximum cell count without
    restarting the system. The minimum is 4095. Trying to allocate more cells
    than the minimum allocated makes the program exit.

    When using 'json-parse', null now gets translated to a symbol 'null' in 
    newLISP not 'nil' as before. So all three JSON values true, false and null 
    keep their appearance in newLISP symbolic expressions.

    Many small additions and changes to newlisp_manual.html.

10.6.3 July 8th, 2015 Development release
    Starting with this version only use the TDM-GCC-64 toolchain, it
    uses mingw32 and can compile for both, 32-bit and 64-bit.

    On some Windows versions negative time value in 'date-list' for dates
    before 1970-1-1 are not handled by gmtime() and could crash newLISP.
    Now an error 44 is thrown when gmtime() cannot handle negative values.

    Fixed 'det' and 'mat' for Ubuntu Linux when using wrong dimensions. 
    Tested on OSX, OpenBSD, FreeBSD Ubuntu Linux, Windows.

    Changes in several files for compiling a 64-bit version for Windows
    using mingw64. Thanks to Shigeru Kobayashi for doing this work.

    Filenames win32xxx.c change to win-xxx.c.

    The 'dolist' function now also works on arrays. 

    The 'net-eval' functions now return the result of the last expression 
    in the string argument, not the first.
        (net-eval host port "(+ 3 4) (* 3 4)" => 12 ; previously 7
    In previous versions, although all expressions in 'net-eval' would be
    evaluated, the result of the first was returned. The possibility
    of multiple expressions in a string was not documented. The new
    behaviour is more in line with the behaviour of 'eval-string' and
    'load'.

    Fixed a bug on Windows when APACHE was starting newlisp and no 
    NEWLISPDIR wnd PROGRAMFILES environment variables were defined.

    New makefiles for Windows: 
	makefile_mingw64 makefile_mingw64_ffi 
	makefile_mingw64_utf8 makefile_mingw64_utf8_ffi
	makefile_mingw64dll makefile_mingw64dll_ffi 
	makefile_mingw64dll_utf8 makefile_mingw64dll_utf8_ffi
    are working. Tested using tdm gcc 64 (MinGW based).

    The configure utility now uses the mingw64 makefiles if LLP64 is present.
    The configure-alt utility still only compiles for 32-bit. 

    Both, 32-bit and 64-bit newLISP on Windows, now have ostype "Windows".
    In modules canvas.lsp and gsl.lsp ostype has been changed to "Windows"
    from "Win32". Same change in many qa-* files and web applications.

    C type cleanup for string size_t length in some C-functions.

    Server mode -http did not reject net-eval requests.

    'net-eval' connection timeout changed to 15 secs from 60 secs.
    Processing timeout still set by user in 'net-eval' parameter.

    Added HTTP_AUTHORIZATION to environment variables in HTTP server.
   
    Additional syntax for 'date-value' -> (date-value list-date-time).
    Additional syntax (date-list) now same as (date-list (date-value)).

    The 'trim' function without trim-char parameters will trim all
    white-space characters, not only spaces.

    Fixed 'expand' bug when evaluating binding lists.

    'dump' now returns the number of cells dumped not 'true'

    New 'trace' syntax: (trace device-no) prints an evaluation trace to
    device-no. Example:
        (trace (open "trace.txt" "w")) ; open trace file (or "a")
        ... ; one or more expressions to evaluate
        (trace nil) ; close trace file

    Stack trace in error message changed from function name to full
    expression.

    tmp directory is now defined on newLISP startup. For UNIX it is /tmp
    for Windows it is taken from TMP environment variable or assumed /tmp. 
    This directory is used by the 'share' functions and the built-in http 
    server.

    When char* in libffi returns 0 (NULL) then an error message will be
    thrown: "cannot convert NULL to string".

    A new newLISP library call (newlispLibConsole 1) forces console output
    for stdout instead of writing it to the return string of newlispEvalStr.
    The same also enables console input on stdin.

    The 'json-parse' function now handles 64-bit number also in 32-bit versions
    of newLISP.

    Fixed shape sign error in canvas.lsp for bezier curves in shapes.

10.6.4 September 24th, 2015 Development Release
    Now can retrieve 0-length document with 'get-url'.

    A fix for 'share' on Linux (bug introduced in development v.10.6.3)

    In 'get/put/post-url' the new string option "raw" inhibits 'Location'
    redirection. "raw" can also be combined with the "list" and "debug" options.
    When in "list" mode now the server status code is added as a third list
    member.
 
    Fixed a error date-value introduced in 10.6.3.

    Fixed potential error in my_vasprintf() only used on Windows, OS2, TRU64,
    Solaris and AIX.

    Avoid calling varargs function sendf() with empty argptr nl-web.c.

    Avoid allocating too much stack space in getPutPostDeleteUrl().

    Response string from 'get/put/post-url' was not zero-terminated for
    HTTP error returns.

    When a HTTP server returns an error code and also returns content, 
    the string "ERR: " with the HTTP server response line gets prepended when 
    not in list mode. This is necessary for compatibility with previous
    versions, as delete/get/put/post -url always return a string and errors
    are marked by a beginning "ERR: " of the string. 
    In list mode the second string in the list contains only the returned content.
    The third list member is the server HTTP response line. The fourth list
    member contains the status-code, which is 0 for an invalid HTTP response.

    date-value did not evaluate month, day parameters.

    Last element list optimization now always retained when using pop on the list.

    PCRE options PCRE_NOTBOL, PCRE_NOTEOL and PCRE_NOTEMPTY did not work.

    Expansion 'macro' definitions can be redefined with 'contanst' not 'define'
    as described in the manual.

    Installation prefix changed from /usr to /usr/local for OSX and other Unix.

    The 'save' function now saves symbols with strings longer 2047 chars 
    appending multiple partial lines of "," delimited strings of up to 72
    characters. This allows to \ escape non-displayable  characters, which
    [text],[/text] delimited text not allows.

    New version 1.7 canvas.lsp fixes ellipse, petal, pie, polygon, shape: 
    now first fill() then stroke() as in postscript.lsp.

    Loading an empty file should return nil.

    On Mac OS X guiserver expects newlisp in /usr/local/bin/newlisp on all other
    OS it is only is expected in the executable path, as in previous versions.

10.6.5
    In the crypto.lsp module "cdecl" must be used when importing on Windows.
    (since v.10.6.3 a new compiler setup is used)

    A second PRNG with variable initial N for seed initialization
    via (seed S true N) and inquiry of current seed state via (seed).
    This PRNG is built-in with same results across all platforms and
    compilers. The current PRNG will stay as it offers a bigger set of
    random numbers on Unix platforms. This new PRNG is necessary for doing
    computer simulations and AI art, which is reproducable across
    platforms and where random number sequences can be broken up in 
    repeatable layers using the (seed) instruction to save state. 
    When using the default libc based PRNG (seed) now returns the last
    seed set by the programmer. On the new PRNG (seed) returns the last 
    seed state. - Not yet documented, may replace old PRNG in the future.

    A (ssq vector) sum of squares function has been added. The vector can
    be either a list or array vector.

    guiserver.jar version 1.65 now correctly forces updates of a gs:canvas
    in a gs:scroll-pane.

    When a deleted symbol was prefix in a dynamic symbol, memory got corrupted.
    The dynamic symbol reference is now replaced with nil like other symbol
    references.
 
    A illegal symbol when trying to create a context could crash the system,
    when referenced again after the error message.

10.7.0 verson 10.6.5 released as stable release January 2016.


10.7.1 stable release Jan 21st 2017
    GMT - offset now includes a potential daylight savings bias, when
    daylight savings time is active on Windows and Unix-like OSs.

    Like on UNIX the last field in the 'now' function shows similar to UNIX 
    more info about usage of daylight savings time. In older Windows versions 
    the daylight savings bias was shown all year.

    'set' with multiple args leaked memory under certain conditions.

    New not yet documented (history) returnst list of call history

    Thanks to Sergio Durigan Junior for contributing changes and makefiles
    for kFreeBSD. Debian GNU/kFreeBSD is a general purpose operating system, 
    an official Debian GNU distribution using the kernel of FreeBSD instead 
    of the Linux kernel. 

    Fixed bug in 'search' and 'seek' with 'read-line' on some platforms.
    Stream and raw handle file position went out of sink. 

    'mat' with a scalar second argument was broken on 64-bit when scalar
    was not a float.

    fixed a problem in -- ++ when passing a 'nil' not contents of a 
    symbol

    symbol length extended from 255 to 1023 characters 
    (1022 when using the hash function). Creating symbols
    using a hash functor will now throw an error message
    when the symbol is too long. The 'contect' and 'sys'
    functions already threw an error message.

10.7.2
   Fixing out-of-sink of file positions when mixing 'search' and 'seek' 
   with 'read-line' on IO-streams introduced a new errror making
   the newlisp-10.x.x/examples/upload.cgi script fail.

10.7.3
   Supress loading of startup init.lsp when -h option is present. Before
   only the -n and -x options supressed init.lsp.

   Change in modules/gsl.lsp to make it work on locales using comma separator.

   Ability to use 'open', 'rename-file', 'delete-file', 'make-dir' and 
   'remove-dir' with UTF16 filenames in UTF8 versions on Windows when
   using the UTF8 version of newLISP. The functions 'file-info', 'file?', 
   'change-dir' and 'dir? already worked on UTF16 filenames when using the UTF8 
   version of newLISP on Windows.

   Thanks to Michael Sabin who started the work a few years back writing the 
   win-path.c file with functions translating between UTF8 and UTF16. 

   When using the UTF8 version of newLISP on Windows in a command shell, that
   command shell program also should be able to handle/display UTF8 (not UTF16).
   On Windows and Linux the Java based frontend newLISP-GS handles UTF8.
   On Mac OS the terminal program handles UTF8.

   Fixed a wrong 'symbol protected message' when a protected symbol is 
   part of a nested espression, but not a symbol with its content to be 
   modified.

   New modules/postscript.lsp changes description of ps:drawto.

   Fixed flushing problem on 'print' to stdout on Mac OS and other BSDs.

   '(read-key true)' with the 'true' parameter is now non-blocking.

   (trim str) on some strings containing 0's would overrun memory and 0's
   where not trimmed from the left. All character <= 32 (space) should
   be trimmed from the left and right ends of the string buffer. When the 
   entire string is valid ASCII or UTF-8 with no 0s, ‘trim’ behaves 
   like in older versions.

10.7.4
   When starting newlisp in -http-safe server mode HTTP_PUT and HTTP_DELETE 
   requests will not be served. This will cause 'write-file' and 'delete-file'
   in url syntax, 'put-url' and 'delete-url' functions issued from a newLISP 
   client to return the text message "Server in safe mode".

   New file qa-specific-tests/qa-share.lsp .

   New guiserver.jar v 1.67 compiled with java 1.6
   Still problems on macOS, some unrelated to change to image/icon load change

   Added REQUEST_URI to environment variables in webserver mode.

   Removed code introduced in 10.7.2 to syncronize file poisitons of C FILE stream 
   and raw file handle operations. Syncronization still seem s to work on cases
   tested, but may not work in all cases mixing 'read-line' and 'seek'.

   Changes for separately packaged Java Guiserver and elimination of installers.

   (rotate theList -offsetOfRotation) was buggy

10.7.5
   In getPutPostDeleteUrl(....) sock wasn't closed when returning with webError(..)

   compareLists() in nl-math.c did not take list lengths into account. Also update
   of qa-dot for relevant cases.
