Initial commit of newLISP.
[newlisp.git] / doc / CHANGES
blobeb9ee9750df992d76dbea5f89a6c1758053ff3d1
1 6.0.25
2 'find', 'replace' and 'search' now have an option for case insensitive
3 search, updated source and manual
5 6.0.26 - 6.0.27 - 11:34 AM 4/4/99
6 'trace' got stuck in executeCommandline() in traceExit() because an empty
7  fgets() in LINUX still has a '\n'
9 6.0.27 - 6.0.28 - 6:30 PM 4/6/99
10 'import' now returns primitve address
11 'define' now also works like (define x y) ; as in SCHEME
12 'char' now defaults to 0 on offset and returns unsigned int
13 new 'mod' floating point modular function
14 new 'abs' floating point absolute value function
15 new 'trim' trims spaces or characters both sides
17 6.0.28 - 6.0.29
18 'filter' new primitive
20 6.0.29 - 6.0.30
21 'dump' now displays address of cell
22 'make-dir' mode parameter now optional defaults to 493 = drwxr-xr-x
24 6.0.30 - 6.0.31
25 fixed trim, which had all kinds of problems
26 new 'difference' returns set difference of two lists
27 new 'intersect' resturns set intersection of two lists
28 new 'unique' returns unique set from list (duplicates removed)
29 when comparing lambda expressions, now state lists also get compared
31 6.0.31 - 6.0.33
32 'match' now also works on list expressions, wildcard symbols 
33 can occur on different nesting levels. 
35 6.0.33 - 6.0.34 Released on www.newlisp.org
36 in 'substring' the length parameter is now optional 
37 math exception showed wrong error message 
38 tty setup now only when tty detected else supress buffering 
39 for usage with 'socker'
41 6.0.33 - 6.0.35 4/20/2000
42 inlined cleanupResults() in evaluateExpression() ca. 4% speedup !
43 took out all #pragma statements
44 took out termio stuff, works better without
45 new functions read-file, write-file
46 new functions read-process, write-process
47 new function error-text
49 6.035 - 6.0.36 4/21/2000
50 'char' now also can take a number as an argument converting it to a 
51 string of one character: 
52 (char 65) => "A"
53 (char "A") => 65
54 'integer' and 'float' now return 'nil' if the string passed does
55 not start with a number digit or +/-
56 strings can now encode characters in the form \nnn where nnn
57 is a 3 digit decimal (leading 0' if less 100) e.g.:
58 "\065\066\067" => "ABC"
60 6.036 - 6.039 4/28/2000
61 added 'chop', 'explode', 'get-float', 'starts-with', 'ends-with'
62 added 'random' 'normal'
63 renamed 'get-number' to 'get-integer'
64 added script for httpd webserver demon
66 6.039 - 6.043
67 'symbol' now takes optional context argument
68 'symbols' now gives error message if symbol args is not context
69 eliminated 'sourcePtr' which wasn't used anyway, introduced
70 'sourceLine' for keeping track of line-numbers in error messages
71 added 'encrypt' for one-time-pad encryption/decryption
73 6.043 - 6.044
74 speedup in deleteList() and copyList()
76 6.044 - 6.045
77 took out 'sourceLine', too much confusing situtations which are
78 unresolvable. 'eval-string' now does multiple expressions
80 6.045 - 6.048
81 put back pushResultFlag, 'eval' needed it. 
82 fixed bug in 'substring' for trailing 0's, changed tokeString to 
83 resemble split() and taking separators > 1 char.
84 This also changes pack/unpack in parsePackFormat() to take care of
85 more than one space between formats. 
86 After reset and execution of 'error-event' errorReg now set to 0.
88 6.048 - 6.049
89 took out executeSymbolParams modifying executeParams for optional arg
90 'reset' now throws 'user reset - no error' - error, so it can be handled as
91 a non-error in user defined error handlers, also takes now optional
92 symbol for 'resetEvent to be exuted after errorEvent.
94 6.049 - 6.051
95 'reset' now takes optional third parameter for stacksize. So the
96 syntax for reset is nor (reset [resetEventSymbol] [stacksize])
98 6.051 - 6.052
99 no length limitiation anymore for printing strings to the console
100 'replace-nth' new primitive
102 6.052 - 6.054 5/19/2000
103 'let' new primitive like in other Lisp but dynamically scoped
104 'seed' new primitive seeds random generator for rand, random, normal
105 now feature complete for 6.1 release
107 6.054 - 6.055 5/20/2000
108 fixed memory leek in varPrintf()
109 'integer' and 'float' now take optional thirsd parameter for default
110 return value if string cannot be parsed.
112 6.055 - 6.056
113 fixed bug in 'symbol' which would not overwrite symbols in MAIN for
114 symbols in other contexts so (symbol "set" 'MyContext) now works
115 creating a symbol 'set in MyContext.
117 6.056 - 6.059 5/29/2000
118 improved pretty printing for 'let', which takes now the same flag
119 as 'cond'. Improved httpd script, now sends http header for each
120 file.
122 6.059 - 6.060 5/29/2000
123 httpd did fail on POST on some browsers now 'upper-case' when matching
124 'content-length'. Alos fixed in manuual
126 6.060 - 6.0.61
127 changed 'parse' so it parses a max token length of 2048 (256 previous)
128 this was already changed erarlier on the Win32 versions.
129 The read-line limit of 16384 should be changed at some point to infinite
130 similar to the print buffer. At the moment cgi vi std/IO is limited by
131 read-line to forms no bigger than 16384.
133 6.0.61 - 6.0.62
134 varPrintf was still limited. MAX_PRINT_LEN changed to size.
136 6.0.62 - 6.0.63
137 'integer' now parses also hex strings eg: (integer "0xFF") => 255
138 'write-line' now retuenw nil on file errors
140 6.0.63 - 6.0.64
141 5% speedup introducing cell type masks
143 6.0.64 - 6.0.65
144 1% speedup taking out symbol in evaluateExpression
146 6.0.65 - 6.0.67
147 new 'count' counts elements of one list in another list
149 6.0.67 - 6.0.68
150 fixed error in 'reverse'
152 6.0.68 - 6.0.69
153 'parse' now without size limitations in tokens when using breakstr argument.
155 6.0.69 - 6.0.70
156 'string' now without size limitations of printing in string
158 6.0.69 - 6.0/71
159 'read-line' now without size limitations
161 6.0.71 - 6.0.72
162 'for' fixed bug when from and to where equal would run forever
164 6.0.72 - 6.0.73
165 'putenv' didn't work, fixed
167 6.0.73 - 6.0.75
168 problem with ebaluateLambda when passing (set 'p ...) to (foo p) as an argument 
169 for parameter p.
171 6.0.75 - 6.0.76
172 additional functions: prob-z prob-chi2 and crit-chi2. (for ...) no works with
173 floating point numbers. Additional module xml.lsp
175 6.0.76 - 6.0.77
176 additional function: join. Additional module mail.lsp
177 additional function: sequence
179 6.0.77 - 6.0.79
180 additional functions: xml-parse, xml-error
181 fixed buffer overflow bug in varPrintf to string device (function 'string)
183 6.0.79 -> 6.1.0
184 new function println
185 6.1.14 documentation
187 6.1.0 -> 6.1.1
188 new function fft and ifft
189 6.1.15 documentation
191 6.1.1 -> 6.1.2
192 the length parameter in 'sublist' is now optional (assumes all)
194 6.1.2 -> 6.1.3
195 fixed default for 'true' in 'case'
197 6.1.3 -> 6.1.4
198 new function 'swap' for swapping elements in a list
200 6.1.4 -> 6.1.5
201 new function 'read-url' for reading pages/files via http
202 revision of httpd script more RFC compliant
204 6.1.5 -> 6.1.6
205 'read-url' nl-web.c now handles proxy's if HTTP_PROXY is set to proxy URL
206 new functions 'collect'and 'select' for selecting multiple elements from a
207 list
209 6.1.6 -> 6.1.7 Release
210 'rand' now takes an optional second parameter to return a list of random
211 numbers (similar to 'random' and 'normal')
212 many formatting changes in manual.
214 ================================================================================
215 6.1.7exp -> experimental '-p port' mode
217 6.1.7 -> 6.1.8
218 fixed bug in error event handling when error==0
220 6.1.8 -> 6.1.9
221 trace now is a source level debugger, similar in funcitonality to the Win32
222 version, but for a character console.
223 linking now encrypted, new functions 'betai' and 'gammaln'
225 6.1.9 -> 6.1.10 
226 fixed bug which could affect parsing \xxx in getToken() where isdigit(x)
227 'prob-chi2' now more precise using gammap(),
228 new functions 'crit-z', 'beta' and 'gammai'
230 6.1.10 -> 6.1.11
231 new 'debug-highlight' for setting pre and post string in debugger
232 highlighting. Eliminated example httpget because 'read-url' does
233 the same. 
235 6.1.12 -> 6.1.12
236 'swap' now treats negative values as the last element, consistent
237 with other functions, 'read-url' fix in error message text
238 init.lsp, mysql.lsp etc have moved to /usr/local/newlisp
240 6.1.12 -> 6.1.15
241 'read-url' now handles also redirects
243 6.1.15 -> 6.1.16
244 fixed bug in trace mode, trace stopped at all args evals in function
245 calls. Still stops and shows result for each 'map', which is ok, but
246 must be documented. Improved subroutines for handling POP3 and SMTP mail.
248 6.1.16 -> 6.1.17
249 new matrix functions 'invert', 'multiply', 'transpose'
251 6.1.17 -> 6.1.18
252 fixed dimension problem in transpose
254 6.1.18 - > 6.1.19
255 fixed missing error text for 'singular matrix' in invert
257 6.1.19 -> 6.1.20
258 ifft didn't normalize right when N not a power of 2
259 evaluateLambda() rewritten to store statics in a way that
260 anonymous lambda expressions with static data can be stored
261 this also gave a general speed up of about 5%.
263 6.1.20p2
264 (nth -1 lst) now returns the last element instead of nil. This
265 is consisten with other functions
267 6.1.20p4
268 eliminated optional parameters in reset, because never worked right.
269 instead the error-event can be used for code after reset and the stack
270 size can now be specified on the command line.
272 6.1.20p5
273 eliminated get-state and set-state as primitves, they are now written
274 in newLISP and part of the initialization file /usr/local/newlisp/init.lsp
276 6.1.20p6
277 new function 'regex for POSIX 1003.2 regular expressions (GNU library)
278 ifdef'ed readline, only works in CYGWIN, cannot figure unresolved 'tputs()' etc in
279 libreadline.so in LINUX, seems not to see libcurses?
281 6.1.20p7
282 cleanup makefile for different features NANOSLEEP, READLINE, REGEX
283 cleanup fft
284 took out replace-match, new function index
286 6.1.20p8
287 cleanup regex, additions changes in manual
289 6.1.20 -> 6.3.pre1
290 READLINE finally working on Mandrake missing link to 'libtermcap.so'
291 lots of manual changes
293 6.3.pre2
294 preparing to replace simple binary tree for symbols woth RB balanced tree
296 6.3.pre4
297 running RB balanced tree code
299 6.3.pre5
300 fixed bug in 'symbols for context and 'delete for context
302 6.3.pre6
303 changed httpd CHANGES
304 ===============================================================================
305 6.3 Release
306 time-of-day new function
308 6.3.01
309 a fix for 'regex' in the CYGWIN version sent in by Steve Adams
311 6.3.02
312 additional optional parameter in 'eval-string'
313 streamlining code in nl-web.c, reformatting manual so it is easier converted
314 to PDF
316 6.3.04
317 new -p commandline parameter for TCP/IP port mode of newLISP.
318 Fixed format for default data type (will treat as string),
319 also format will permit now unlimeted size of the formatted 
320 output (was 2047 bytes).
322 6.3.05
323 cleanup -p with trace for rt/lf translation
325 ===============================================================================
326 6.3.06 Release  July 8th, 2001
327 optional parameter 'nil in 'eval for silent evaluation evaulates without return
328 value and prompt on the console, needed for Tcl/Tk integration
330 6.3.07 Release
331 a new function 'debug (shortcut fr using trace) and various bugfixes in the
332 trace/debug functions. '{' and '}' characters are allowed as string delimiters
333 but only on the outer level, they get replaced by the parser. This allows
334 writing 'nicer' source for HTML and TK stuff.
336 6.3.08
337 regex now also returns sub expressions. further changes in debugger to accomodate
338 remote TclTk controlled debugging: (q)uit now quits execution, (c)ontinue stops
339 debugging but continues execution.
341 ===============================================================================
342 6.3.09 Release July 16th, 2001
343 string now can take more than one parameters, like concat but works on different
344 data types
346 6.3.10
347 added symbol count to 'sys-info'
348 added ERR: string in error message when in trace for TclTk frontend
350 6.3.11
351 new function 'dotree' to iterate thrugh symbol trees, usefull for simulating
352 arrays and hashes
354 ===============================================================================
355 6.3.12 Release July 30th, 2001
356 new function 'catch' for catching errors when evaluating expressions
357 fixed bug in net-connect when trying to connect to dead port
359 ===============================================================================
360 6.3.14 Release August 2nd, 2001
361 changes in newlisp_manual.html and newlisp-tk.html
362 cleanup and improvment of qa file
363 fixed crash-bug in markReferences and saveSymbol when copying contexts
364 function 'args' now works also for lambda, no symbol param necessary anymore
365 ===============================================================================
366 6.3.15 Release September 3rd, 2001
367 xml-parse now accepts empty atribute value strings e.g.: <ATAG ATT=""></ATAG>
368 net-lookup now works in both directions: ip->name and name->ip
369 ===============================================================================
370 6.3.16 Release September 6th, 2001
371 float division by 0.0 now yields 'Inf', as specified by IEE 754. Before 6.3.16
372 it would couse a Math exception. Now all compare operations with NaN return 'nil'.
373 new functions 'floor' and 'ceil' and 'NaN?'.
375 Ctrl-D will now longer crash but exit newLISP
377 More LSB compliance in install directories used: now /usr/share/newlisp
378 instead of old /usr/local/newlisp
380 ===============================================================================
381 6.3.17 Release September 9th, 2001
382 fixed a memory leak in 'regex'. The leak could not be fixed in the CYGWIN
383 version which uses regexp !
386 6.3.18
387 fixed rounding problem in 'sequence', Ctrl-D will not exit but only do newline
388 if at beginning of line, else it will behave as expected under readline, to exit
389 newLISP with one keystoke use Ctrl-C instead.
390 output cleanup in error-text and error-event
391 better standard behaviour of 'cond' when action clause is missing
392 new function 'series' for generating geometric sequences.
393 new function 'rotate' for rotating lists
395 6.3.20 Release October 22nd, 2001
396 bug fix in xml-parse when parsing closing tags without opening tags
397 bug fix memory leak in catch and eval-string uder error conditions
398 about 30% speedup removing copyCell/pushResult in: inc set define
399 manual changes and additions.
400 tookout net-cleanup in  network examples
402 6.3.21p1
403 bug fix in 'char' when using with floats
404 'integer' now also takes floats converting them into integer
405 also now translates "055" to 45 taking it as an octal number,
406 which is consistend now with the parser.
407 'float' now also takes integeres converting into floats
409 6.3.21p2
410 eliminated symbol->type in SYMBOL typdef, which reduces symbol memory by from 36 to 32 byte
411 fixed a bug where sometimes newlisp wouldn't exit after tk-frontend exited
413 ===============================================================================
414 6.3.21 Release November 13th, 2001
415 MAX_ERROR_NUMBER was to high, parenthesis count wasn't reset when evalCatchFlag
417 6.3.22
418 fixed potential bug in join with memory intialization
419 fixed problem parsing URL when redirection in 'read-url'
420 'get-url/read-url' now also handles 205 and 307 return codes
421 'get-url/read-url' now always only returns header portion if "header" option is specified
422 new -d demon mode, like -p but newLISP stays in memory to accept a new connection
423 new function 'put-url' for HTTP PUT method
424 new function 'post-url' for HTTP POST method
426 ===============================================================================
427 6.3.23 Release January 6th, 2002
428 new function 'binomial'
430 6.3.24
431 'exit' now closes net work connection when running in '-d' demon mode.
432 new function 'now' returns detailed date/time info: (y m d h m s us dy dw)
433 new function 'date-value' converts date/time into seconds since 1970-1-1
434 new financial functions 'pmt', 'nper', 'pv', 'fv', 'npv'
435 bug fix in 'map' which would crash when last arg was not a list (as it should be)
436 replaced 'MySQL:close' with 'MySQL:close-db' to avoid overwriting of close in MAIN in mysql.lsp
438 ===============================================================================
439 6.4.00 Release March 20th, 2002
440 inclusion of BWidget set in the Win32 tk v 0.80 distibution, many manual changes
442 6.4.1
443 main-args now returns path of program as first list member
444 get-url "debug" option now can be specified together with "header" option
445 post-url content-type now is optional and defaults to "application/x-www-form-urlencoded"
446 added closing channel in get-url
447 fixed bug in 'join', which could crash on an empty list
448 httpd, finger and gettime changes for new 'main-args'
449 balloon help in newlisp-tk v. 081
450 new '(tk-args)' when running Tcl/Tk frontend returns newlisp-tk commandline args
451 several changes in stat.lsp/plot directing temporal files to /tmp
452 fixed potential crash bug in 'dotree'
453 Win32 installer now puts desktop icon
455 ===============================================================================
456 6.4.2 Release April 22nd, 2002
457 'format' now for multiple args
459 6.4.3 development release
460 'parse' now correctly does handles trailing separator by returning an empty token ""
462 6.4.4
463 buffer limit in vsnprintf() was not handled correctly, putting a space limitation
464 on 'string' (16k), 'format' (2k) and 'C' functions depending on varPrintf(),
465 fixed potential buffer overflow in writeStreamStr().
466 'tranpose' did not check for matrix type.
467 experimental function 'throw'
469 6.4.5 Development release
470 starts-with, ends-with 
471 now are working type polymorph on strings and lists
472 rotate now takes negative numbers for left rotation
473 rearranged lambda evaluation (eval args before saving environment),
474 which causes 6% speed improvements
475 'args' only available in define-macro (again as before 6.3.14)
476 changed 'if', 'unless', 'while', 'until' for less CPU stack requirements
478 6.4.6
479 'nth', 'first', 'last', 'rest'
480 now are working type polymorph on strings and lists
481 'cons' works now correctly on 1 arg  (who cares? -> consistency proof)
482 potenial cell-memory leak on error in 'apply'
484 6.4.7 Development release
485 improved syntax for statics environment list as assoc list:
486 (define  (foo a b c ((x 1) (y 2) (z 3))) ....)
487 to retrieve statics environment just do:
488 (last (first foo) => ((x 1) (y 2) (z 3))
489 also improves speed of ststic processing by about 10%
491 ===============================================================================
492 6.4.8 Release May 16, 2002
493 empty? now works on strings
494 fix for 'cons' when lambda expr is second argument
495 fix for (rest "") which now returns ""
496 fix for (first "") now returns nil
497 purelisp.lsp for prooving consistency
498 fix for link.lsp on CYGWIN
500 6.4.9 Development release May 21st, 2002
501 'nil' as a symbol was not always treated as nil value constant
502 (push exp lst) now works even if lst does not contain a list
503 in that case old contents of lst gets deleted and initialized
504 with () before pushing exp, this makes initialization of lists
505 to '() before pushing on it unnecessary.
506 'time' now works as a timer returning mseconds needed to evaluate
507 this is also mor compatible how other Lisp's define 'time'
508 an expression, for old funcitonality of 'time' use (apply date-value (now))
509 'sort' now takes an optional parameter '< or '> for ascending/descending
510 also about 30% speedup, like in: (sort myList '>)
512 6.4.10 Development release May 21st, 2002
513 correct treatment of symbol 'nil in 'and' and 'or'
514 eliminated orSymbol reference in soirce code
515 speedup parsing source
516 dump with parameter now returns list (cellAdress, cellType, cellNext, cellAux, cellContents)
517 stepsize in 'for' 'sequence' always forced to positive
519 6.4.11
520 'push' in its new form did not respect 'nil and 'true
521 new error message when trying to set/define/push on 'nil, 'true or context
522 speedup in multiple compares in nl-math.c 
523 speedup in upper-case, lower-case
524 speedup in get-char, get-string, get-integer and get-float
527 6.4.12
528 boolean types and symbols are equal
529 another speed improvement in lambad and expression evaluation
530 over all speed improvement over 6.4.8 now about 5-10% depending
531 on expression mix.
532 local iterator symbols are now handled on environment stack for
533 better error recovery.
534 new chapter "Data structure objects in lists" in docs and
535 many little doc changes.
537 ===============================================================================
538 6.5.0 Release May 28th, 2002
539 no changes related to newlisp itself except for versioning
540 changes in httpd (see httpd file)
541 changes in newlisp-IDE for changes in httpd and changes for date display
543 6.5.1
544 compiles with -Wall -pedantic -Wno-uninitialized -O2 
545 -Wall -pedantic for better portability
546 -Wno-uninitialized to suppress 'fork' 'longjmp' warning in -O2
547 -O2 does ~25% speed and size improvement!
548 'let' did not handle empty parameter lists and now double fast
550 6.5.2 development release June 3rd
551 'concat' is deprecated 'append' doubles functionality of 'concat'
552 new individual makefiles for making newLISP on different platforms without
553 the need to tweak makefiles.
555 6.5.4
556 'find', 'replace' and file 'search' now can do Regular Expressions.
557 Regular Expressions are not dependend any more on the C-library
558 on the OS platform used, instead PCRE (Perl Compatible Regular Expressions)
559 is used on all platforms and the source is contained in the distribution.
560 Additions to INSTALL file about PCRE and localization of newLISP.
562 6.5.5
563 fix for 'replace' in regex mode
565 6.5.5 -> 6.5.7
566 changes in win32.lsp and makefile_win32
567 eliminated file: nl-importDM.c was already merged
568 new chapter 'Lambda expressions in newLISP' in newlisp_manual.html
570 ===============================================================================
571 6.5.8 Released version (functionally equal to 6.5.7) June 13th 2002
572 #ifdef NOIMPORT instead of MAC_OSC in evaluateExpression()
573 spelling stuff in newlisp_manual.html
575 6.5.10
576 - incorporated nl-web.c into native win32 version to make work get-url, post-url
577 and put-url. Server modes -p and -d now are working too in native win32 version.
579 - newlisp-tk.tcl changed to work with win32 because read-line/write-line don't 
580 work on sockets in win32. 
582 - writeStramChar() now works also on binary streams
584 - newlisp-tk.tcl changed to work on remote connection over the internet.
585 Shows acceptable speed on dial-up (old newlisp-tk.conf should be deleted)
587 - 'reload last' button in newlisp-tk GUI
589 - dependency fix in makefile_win32
592 6.5.11
593 - moved to Borlanc C++ v5.5 compiler, gives faster and smaller executable than 
594  Digital Mars compiler previously used. Now all functions of the Linux version
595  also work in the Win32 version.
597 6.5.12
598 - changes in newlisp-tk.tcl for faster performance on remote and working
599   reliable with win32 version. Old newlisp-tk.conf should be deleted.
600   Win-tk version can now be distributed without CYGWIN DLLs using the
601   Borland 'C' Win32 compile.
603 6.5.13
604 - fixed problem in 'net-receive', which was introduced in 6.5.10
605   httpd now works fine with win32 compile (with change in line 147 of httpd)
607 - send() in net-send and win32_fprintf() now performs check and resend
609 6.5.14
610 - reintroduced writeStreamChar in 'net-receive', writeStreamChar did not zero buffer
611 - debug was broken with TK because of missing redefine of fgets() in nl-debug.c
613 6.5.15
614 - net-close wasn't working in win32 version, which gave problems in cgi in httpd
615 - new newlisp-IDE-1.3.tgz with fixes for LF -> RET/LF translation which was happening
616   in win32 pipes
618 6.5.16
619 - doc changes
620 - took out again size-check and resend in netSend() and win32_fprintf() as it is
621   not relevant in blocking sockets
622 - mail.lsp was broken because of change how optional parameter in 'find' works
623 - 'read-process' and 'write-process' collapsed to 'exec'
624 - match for lists now behaves like match for string returning a list of matches
625   ie. (match '(I * you) '(I love you)) => (I (love) you)
626   this allows easier substituting of star/* patterns in pattern matches in chat
627   robots
629 6.5.17
630 - new option# parameter in 'xml-parse' 
631     (a) option# 1 to surpress white-space TEXT fields (for data XMLs)
632     (b) option# 2 to surpress empty attribute tags (for tags which never have attributes)
633     (c) option# 4 to surpress comments
634     (d) option# 8 to tanslate tag names into symbols
636 - new 'xml-type-tags' for definig alternative tags for "ELEMENT", "CDATA", "COMMENT"
637   and "ELEMENT". Instead symbol can be defined or nil can be specified to surpress
638   the type tag completely.
640 - the newlisp-tk_win32 version now comes with the win32 native compile
642 - fixed bug in 'string', which was not reentrant
644 ===============================================================================
645 6.5.18 Release August 3, 2002
646 - fixed stream problem in 'eval-string' in Win32
647 - fixed openStrStream, didn't initialize stream->handle to 0
649 6.5.19
650 - doc changes, renamed mail.lsp to pop3.lsp, sendmail.lsp to smtp.lsp
651 - memory initialization in p_format()
653 6.5.20
654 - fixed p_format again, vsnprintf() doesn't include null-char in return count
655   as advertised in GNU docs
656 - doc changes
658 6.5.21
659 - 'explode' now also works on binary contents
660 - 'file-info' modification and creation time where added
661 - can now specify \000 in string constants
662 - in imported function now up to 10 parameters (previous 8)
663 - odbc.lsp module for ODBC communications
665 6.5.22
666 - comparing symbols now includes the context name in their comparison
667 - 'name' new function to extract the name of a symbol as astring without the context
668 - milli second resolution in 'time-of-day', 'now' and 'time' in Win32
669 - newlisp_manual.book for conversion html->pdf with HTMLDOC http://www.easysw.com
670   this makes a printable manual. Print double sided then cut 8.0 x 9 inch, which is
671   2 from the bottom and 0.5 from the right side when printed on 8.5 x 11 inch paper;
672   then spiral bind (thin round spirals, not the flat once).
673 - post-url was never working on win32 becuase of missing win32_fwrite
676 ===============================================================================
677 6.5.23 ----------- released September 17, 2002
678 - httpd fix for empty query string 
679 - newlisp-IDE-1.6.tgz now saves files up to 10k, changed POST encoding to multi part
681 6.5.24
682 - quote wil not evaluate it's argument anymore, but work like Scheme or Common Lisp
683 - in newlisp-tk the lisp file estension can now be configured in newlisp-tk.config
684 - in Win32 now line termination gets written as RT-LF, 
685   change also in newlisp-tk.tcl when filling editbox
686 - net-read-line now protected from deletion in newlisp-tk browser
687 - prettyPrint will never put newline after quote
688 - fixed prettyPrint bug when printing empty prettyPrint constructs (while, dotimes etc)
690 6.5.25
691 - quote fixed again (quoted twice)
693 6.5.26
694 - doc fixes
695 - date crashed on values resulting in dates before 1970-Jan-1 00:00:00
696   in the Win32 version. In Win32 now minimum value for date is 86400,
697   which is safely on or after 1970-Jan-1 00:00:00 for all time zones
698 - NaN can now be put into a variable for comparison
699 - division by zero now causes a math exception also in floats (previously
700   inf was returned in cygwin/Unix version and Win32 crashed)
701 - in mixed arithmetik using integer operators NaN is taken as 0
703 6.5.27
704 - new function 'constant' to protect symbol contents from changing
705 - fixed bug in newlisp-tk.tcl which was introduced after 6.5.23
706   which caused problems in Mouse.lsp (_result -> result in 'tk')
707 - 'div' with NaN value raised exception/crashed in Win32, now
708    returns NaN
709 - DOMAIN error messages in the Win32 versions are now silenced
711 6.5.28
712 - doc changes
713 - new function 'setq', both 'set' and 'setq' and now can take multiple args
714   note that old init.lsp should be updated because of macro for 'setq'
715 - new option number 16 in xml-parse for generating SXML output
717 - 7.0.0 pre release
718 - bug fix for 'string', suppresses all pretty-print formatting
719 - better error reporting on pop3.lsp and smtp.lsp with debug-flag true
720 ===============================================================================
721 - 7.0.1 release October 24, 2002
722   merged caveGuy's pop3.lsp mail-id improvements
724 - 7.0.2
725 - readLineStream was not initizlized during program startup and caused
726   'current-line' to crash if not used after a 'read-line'
727 - direct execution mode with new command line option -e
728 - in SXML parsing attribute tags where left strings instead of symbols
729 - 'find' now also does regex when looking up a string in list of strings
731 - 7.0.3
732 - example in newLISP for put.cgi in newlisp_manual.html
733 - include cgi.lsp in distribution
734 - the header in the SMTP interface smtp.lsp was not finished with empty line
735 - 'save now can save multiple contexts and/or symbols at once
736 - 'open now has a "append" or "a" option
738 ===============================================================================
739 - 7.0.4 release February 2, 2003
740   replace now gives error instead of returning 'nil when second arg not
741   list or string
742   new primitive 'lookup' works like assoc with extracting parameter
743   fixed bug in pop3.lsp
744   moved to version 5.4 of Freewrap for making the newlisp-tk.exe, which
745   is now doubled in size because 5.4 doesn't compress anymore (see Freewrap
746   docs).
748 - 7.0.5
749   Manual improvements in for correct conversion with HTML2DOC
750   additional hour offset parameter in 'now' and 'date'
751   fixed bug in dotree which caused crashes on Windows
752   'context', 'dotree' and 'symbols' now accept unquoted
753   symbol if the symbols is a context.
754   contexts can be deleted again when empty
755   The newlisp-tk Windows version is now wrapped with freewrap v.5.5
756   and based on Tcl/Tk version 8.4.1 and BWidget v.1.6
757   newlisp-tk.tcl has been changed for better usage of 'context'
759 - 7.1.0-rc1
760   PCRE Perl Compatible Regular Expression support updated to version 4.3
761   in 'replace' now replacement pattern with back references and as 
762   lisp expression. Sub expressions are stored in variable $1, $2 ... etc.
763   $0 contains the whole pattern found. These variables are also filled
764   in 'regex' 'find' (all functions doing regular expressions).
765   The new implementation of 'replace' is also faster (about 15%).
766   example: 
767   (replace "%([0-9A-F][0-9A-F])" str (char (integer(append "0x" $1))) 1)
768   This will do URL translation i.e.: "xxx%41xxx%42" -> "xxxAxxxB".
770 - 7.1.0-rc2
771   'parse' can take regular expressions in sepearator when additional
772   options parameter is defined (as in find, replace)  
774 ===============================================================================
775 - 7.1.0 Release August 28, 2003
776   'search' like 'find' and 'replace' also accepts regular expression
777   when extra options parameter is given.
778   [text] and [/text] can be used as string limiters for large text regions
779   i.e. for HTML in cgi pages written with newLISP. Text limited this way
780   stays completely unprocessed and contain any characters.
781   The function 'symbol' accepts unquoted symbol for context parameter
782   (like 'dotree', 'context', 'symbols')
783   PCRE Perl Compatible Regular Expression support updated to version 4.4
784   extensive manual changes formatting and PDF release  
786 - 7.1.1
787   surpression of some compiler warnings in Mac OSX compile
788   makefile for linux has strip turned on and readline support
789   was not the default
791 - 7.1.2
792   third parameter in 'symbol' for supression of symbol creation, if
793   not found; return 'nil instead.
794   HTML manual had formatting error, which caused all after 'regex'
795   to be in curier.
797 ===============================================================================
798 - 7.1.3 release September 3, 2003
799   [text]...[/text] caused problems in TCP/IP communications
801 ===============================================================================
802 - 7.1.4 release September 6, 2003
803   uninitialized memory in writeStreamStr() caused problems when
804   running newlisp-tk and transferring bigger string buffers.
805   win32_fprintf() did not work right for buffers > 2048, which
806   caused problems in browsing bigger buffers in newLISP-tk.
808 - 7.1.6
809   new function 'process' for launching independent child processes
810   (will not block), new function 'pipe' for use with child processes.
812   'if' now accepts multiple condition-exp pairs and then works like a
813   cond without parenthesis around condition-value. 'if' with
814   condition-exp-exp or condition-exp still works like before.
816   new 'net-send-udp' and 'net-receive-udp' for UDP communications
817   without need of net-listen,net-accept and net-connect. 
819   On Mac OSX 'import' is now enabled using to addtional files
820   osx-dlfcn.n/h for compiling. This import is for '.dylib'
821   libaries.
822   'append' now also can append binary strings (i.e. containing 0's)
823   'joint' now also can joint binary strings (including the joint string)
825   if the length of a sublist in slice is 0 then sice returns the empty
826   list '(), previously returned nil. This is more consistent with the
827   behavior of slice on strings and at the end of lists.
829   'write-buffer' now acepts both: a symbol or a string
831   'send' now accepts both: a symbol or a string
832   
833   'symbol' pretended to create a symbol although context would not exist
835   error messages now include the offending expression/parameter which
836   caused the error.
839 - 7.1.7
840   speedup in UDP communications (no session registration)
841   memory leak fixed in 'net-receive-udp'
843   'first' of an empty string now returns an empty string, previously nil
845   improved cgi.lsp
847   'reverse' now works on strings
849 - 7.1.8
850   'throw' now is documented (actually happened in 7.1.7)
852   'collect' and 'select' now also work on strings
853   i.e: (collect "2001-09-20" 5 6 8 9 0 1 2 3) => "09202001"
855   'slice' couldn't slice lambda's
857   memory leak in searchBufferRegex() affecting 'find' and 'replace' was fixed
859 - 7.1.9  
860   'set' with multiple args had a cell memory leak
862   'transpose' had a memory leak
864 - 7.1.10
865   logfile support for remote mode -p and -d with '-l logfilename'
867   fixed bug in pretty print on command line
869   fixed bug in 'save', which went into a loop when saving symbols containing
870   contexts
872 - 7.1.12 
873   logfile with string -L options also logs remote command line input
875   'fft' and 'ifft' now can take plain numbers instead of complex numbers
876   or a mixture of both
878   regular expression speedup 5 to 50% by chaching the search pattern
879   and avoiding recompile, speedup greatly depends on complexity of
880   pattern relatively to the length of the search string
882   rearranged functions in source files to make newlisp.c more manageable
884   eliminated various unecessary typedefs
886   Sun SOLARIS is now supported (not much tested though)
888   operating system number in last position of 'sys-info'
889   linux 1, bsd 2, osx 3, solaris 4, cygwin 5, win32 6
891   strings containig zeros are now displayed correctly i.e. 
892   (pack "c c c" 0 1 2 3) => "\000\001\002\003"
894 - 7.1.14
895   redundancy in printString() eliminated
897   memory leak in 'parse' with regex fixed
899   the userdefined function for an error is now reported
901   overall speedup since 7104 of about 5%
903   commented out undocumented function 'symbol-dump'
905 ===============================================================================
906 - 7.2.0 is 7.1.14 released October 2nd, 2003
909 - 7.2.1
910   moved check for symbol type of lambdaFunc to errorProc for efficiency
912   cleanup of unecessary defines in newlisp.h
914   defined 'vasprintf()' to take advantage of vasprintf() where available
916   'format' now checks for correct number of arguments and well formed
917   format string, it should not crash anymore on mismatch of number
918   and type of parameters
920   newLISP-tk is now version 1.0 with changes for multiline 'tk' statements
921   (stements containing line-breaks), this allows sending bigger Tcl/Tk
922   code portions in one 'tk' statement
924 - 7.2.2
925   force creation of $0, $1 ... in MAIN even when used in different context
926   for the first time
928   supress $0, $1 ... in newlisp-tk frontend in variable listbox
929   (the $ would confuse tk)
931 - 7.2.3
932   replace-assoc now also uses the system variable $0 for the old
933   list, which can be reused in the replacement expression, i.e:
935   (set 'lst '((a 1)(b 2)(c 3))) 
936   (replace-assoc 'b lst (list 'b (+ 1 (last $0))))
937   lst => ((a 1)(b 3)(c 3))
939   replace-nth now also uses the system variable $0 for the old element, i.e:
941   (set 'lst '(1 2 3 4))
942   (replace-nth 1 lst (+ $0 1))
943   lst => '(1 3 3 4)
945   added new module 'ftp.lsp' for get/put ftp transfers
947   updated module smtp.lsp and program spam-filter
949   symbols set with 'constant' now also gets saved with 'constant'
951   introduced getContext() for code savings
953   added error message in 'import' for win32
954   
955   eliminated win32.cmd
957   many documentation changes/fixes, rewritten introduction
958   added chapter about deprecated functions
960   changes in set/define functions for better protection and
961   error messages of protected symbols
963   full stack trace on error messages
965 - 7.2.4
966   replace-assoc now returns the changed list instead of the old
967   association found (which is now in $0)
968   
969   replace-nth now return the changed list instead of the old
970   expression found (which is now in $0)
971   now checks also for missing last argument
973   replace now returns changed list or string
974   for changed list count of replacements in $0
975   count for string replacements is not available any more
976   (could be handled in replacement expression)
977   now checks also for missing last argument
979   remove now returns the changed list
980   and the number of removed elements in $0
982 - 7.2.5
983   chop now also works on lists
985   coding improvements in slice/sublist() and substring()
987   newlisp-tk 1.02 now on Linux tmp directory is in the home
988   directory of the user running newlisp-tk
990   replace with expression in replacement would overflow CPU stack
991   after 2048 replacements, now no limit
993   cgi.lsp v.1.2 now lives in a context CGI for better isolation
995   httpd v.3.0 with bugfixes for big POST buffers
997   new module infix.lsp for parsing infix expressions
999   in newlisp-tk changed /tmp to tmp for Linux/UNIX
1001 - 7.2.6
1002   (new CTX 'CTX2) copies context CTX to CTX2, helps using
1003   contexts a objects, which can be instantiated from a template
1004   context
1006   'define' 'constant' used in contexts will always force creation
1007   of the symbol in that context, never overwrite definitions in
1008   MAIN. This is changed behaviour also be reflected in the documentation.
1009   The old way was leading to unexpected definitions in MAIN of symbols
1010   although loaded from a context. 'set' still will first look for a
1011   global in MAIN.
1013   fixed false error messaging on certain parenthesis errors
1015   fixed wrong error message when trying to define protected
1016   symbol
1018   error message 'parameter out of range when calling 'gammai',
1019  'beta' or 'gammaln' with first parameter 0.
1021 - 7.2.7
1022   contexts now can be assigned to variables and referenced
1023   during runtime, i.e. 'contextVar:varName' with late binding
1024   of contextVar.  New possibilities of OO programming and lexically
1025   scoped programming, see new chapter in the users manual
1026   about 'Programming with context objects'.
1028   stronger separation of contexts from context MAIN, only
1029   primitive symbols, context symbols, true and nil are
1030   inherited
1032   'new' now returns the new context, formerly 'true'
1034   'set', 'setq', 'set!', 'constant' now return the value of
1035   the symbol set when the rvalue is missing i.e:
1036   (constant 'foo) will make foo a constant and return it's
1037   curent value
1039   protected all symbols in MAIN in newlisp-tk.tcl v 1.03
1040   against accidental overwrite
1042   cleaned up toal mess of tem pdir detection in unix mode
1044   cleaned up init.lsp
1046   'nth' now can take multiple indices, i.e.:
1047   (nth 1 2 0 '(1 (a b (c d)))) => c
1048   good for working with matrices or sparse matrices
1049   out of bounds indices return the last in dimension
1051   'set-nth' like former 'replace-nth' but multidimensional
1052   like 'nth'
1053   (set-nth 1 2 0 '(1 (a b (c d))) 'x) =>  (1 (a b (x d)))
1055 - 7.2.8
1056   eliminated statics in lambda expression, not necessary
1057   anymore as we have dynamic contexts, which also
1058   create a lexically closure around vars
1060   fix in dolist, how cleanup is done
1062 ===============================================================================
1063 - 7.3.0 Released version 2003/11/03
1064   (cpymen fromAddress toAdress nBytes), address may be integer
1065   or string, only for internal use, not documented. Could be
1066   used with 'dump' to hack lisp-cells and symbols-cells.
1067   i.e. to unprotect a symbol :
1068   (cpymem (pack "c c" 0 32) (last (dump 'sym)) 2)
1070   fixed error message reporting in 'set-nth'
1072 - 7.3.1
1073   'import' was broken in Win32 native version when working
1074   inside contexts (odbc.lsp and mysql.lsp)
1076   (pretty-print line-length indent-string)
1077   experimental not documented yet, to change pretty printing
1078   behaviour, without args returns current status => (64 " ")
1079   64 length 1 space for indenting
1081 - 7.3.2
1082   'char', 'collect', 'lookup', 'nth', 'pop', 'push', 'select', 'set-nth'
1083   and 'slice' now all accept negative offset which will count from the 
1084   end of a list i.e. (slice "newLISP" -4 2) => "LI"
1086   'push' and 'pop' now can take multidimensional offsets like
1087   'nth' and 'set-nth'
1089   'collect'/'select' now return the last element for offsets to big
1090   (formerly nil)
1092   'pretty-print' now tested and documented
1094   1.e-1 or 123. , a decimal point without following digits is
1095   no an accepted number format
1097   in newlisp-tk the windows position gets now saved when saving
1098   Options/Settings
1100   fixed bug in 'let' when returning a local var
1102 - 7.3.3
1103   new 'push' changed 'nilCell'
1105 - 7.3.4
1106   newlisp_manual.html with Kazemori edits
1107   
1108   'list' now accepts unlimited number of arguments
1110 - 7.3.5
1111   'push' could not append to an empty list
1113   handling big buffers in newlisp-tk in evaluation
1115   common floating point exception handling on all
1116   platforms (BorlandC and GCC)
1118   block mode for remote connection starting with [cmd]
1119   on a line by itself and finishing with [/cmd] on
1120   a line by itself
1122   sets locale environment on non-US versions of an OS
1123   platform, this enables automatically correct character
1124   handling (i.e. upper-case) on non-engish character sets
1126 - 7.3.7
1127   newlisp-tk.tcl now takes advantage of new block mode (multiple
1128   lines in interactive mode). This ways one of the ports in
1129   communication with newlisp could be eliminated and browser-editor
1130   buffers of unlimited length can be evaluated, preferrably in
1131   evaluation without printing (left of the two buttons)
1133   doc changes for 'silent'
1135 - 7.3.8
1136   'let' now accepts also alternative syntax without the parenthesis
1137   around var - exp pairs: (let (var1 exp1 var2 exp2 ...) body )
1139   doc changes for 'let' and chapter 'Lambda expression'
1140   doc change new function 'set-locale'
1141   doc change new sub chapter 'Switching the locale' in chapter
1142   'Localization and customization'
1143   doc change new file LOCALIZATION
1145   'fn' may be used instaed of 'lambda' (save typing)
1147   'set-locale' changes usage: (set-locale) => return current
1148   setting, (set-locale "") => switches to local locale with
1149   all option turned on. (set-locale str int) switches to locale
1150   in str with category option int as speicied in "locale.h" of
1151   platform/OS, look for defs of LC_ALL, LC_NUNMERIC etc..
1152   on  startup newLISP tries to swithc to ISO "C" locale.
1154 - 7.3.9
1155   'push' and 'pop' now can take the int-offsets in a list to
1156    work together with new 'ref' which reports the position of an
1157    expression in a nested list
1159    doc changes (sometimes only small changes)
1160         'push', 'pop', 'symbol?' new function 'ref'
1161         'save', 'set', 'Arrays and Hash Tables ...', 'close',
1162         'cons', 'context', 'delete', 'explode', 'fft', 'find',
1163         'format', 'intersect', 'lambda?', 'length', 'let'
1164         'make-dir', 'match', 'net-receive', 'net-select',
1165         'net-send', 'new'
1167    changed options flag will trigger recompile when caching regular
1168    expression patterns
1170    'select' evaluated args in offset list
1172    'join' evaluated args in string list
1174    'append'' evaluated the first string arg double
1176    all type predicates now given an error message if the
1177    argument is missing, previously 'nil' ('true' on atom?)
1179    getting an int from a 'inf' floating point crashed on  Borland Win32
1180    now returns 0 like on other platforms
1182 - 7.3.10
1183   'remove' didn't check for list type in second arg and bombed
1185 - 7.3.11
1186   new compile for Win32 DLL with makefile_win32dll
1187   see file win32dll.readme for unsolved issues
1189 - 7.3.12
1190   (replace expr aList) now works like 'remove', but for removing
1191   strings the empty string "" must still be specified:
1192   (replace str aString "")
1193   'remove' is deprecated and will not be available anymore in 8.0
1195   new 'flat' to flatten lists complements multidimensional set
1196   of list functions, example:
1197   (set 'lst '(a (b (c d))))
1198   (map (fn (x) (ref x lst)) (flat lst)) => ((0) (1 0) (1 1 0) (1 1 1))
1200   newlisp.dll now runs qa suite
1202 - 7.3.14
1203   DLL now suppresses pop up on FP domain error (thanks Steve)
1204   DLL now also can use print statment, output will be in return
1205   value.
1207   'replace' did not work correctly when removing multiple expressions
1208   at the beginning of a list
1210   doc changes 'replace', 'flat', chapter 'Deprecated functions'
1211                chapter 'DLL module ...'
1213   error message for "string too long" now reports shorter string
1215 - 7.3.15
1216   better error reporting on some string getting functions when arg
1217   is missing
1219   doc changes license change for documentation, misc. links
1221   replace could not handle empty search string
1223   Win32 DLL no contained in Win32 distribution
1225   fixed error in httpd
1227 - 7.3.16
1228   error messages in newlisp.dll where broken becuase of wrong makefile_win32dll
1230   newlisp-tk.html now reformatted to manual HTML for better maintenance/conversion
1232   slight optimixation in 'nth' and 'set-nth'
1234   fix for 'nth' on empty string
1236   better error messages on missing args in various functions
1238   link.lsp now also works on win32 DLLs but is not supported anymore
1239   for CYGWIN, use a win32 compiled newlisp.exe and newlisp.dll instead,
1240   both work fine under CYGWIN
1242   doc change for chapter 'Win32 DLL  ...'
1244   fixed 'silent' mode for DLL
1246   'float' conversion noe accepts leading . without zero like the
1247   internal parser
1249 - 7.3.17
1250   doc changes as of Sam Cox's and Nigel's postings on 
1251   http://www.alh.net/newlisp/phpbb/ on 2003-12-07
1253   new functions 'atan2' and 'irr' and documentation
1255   eliminated compiler warnings for Linux GCC 3.3.1
1257 - 7.4.0rc1
1258   'irr' now strips of digits less than precision 1e-5
1260   'set-nth' alsow works on strings (singular index)
1262   'swap' now works on strings, also return value changed
1263   from swapped pair to changes list/string
1265   'pretty-print' had a cell leak
1267   in the installation for LINUX/BSD etc. the doc directory has been
1268   moved from /usr/doc/newlisp to /usr/share/doc/newlisp
1269   newlisp-tk.tcl 1.07 changed accordingly
1271   upgrade to PCRE 4.5 files
1273   'integer' didn't truncate to -MAX_LONG
1275   'integer' did not truncate to MAX_LONG when feeding big
1276   floating point numbers, but crashed on Win32
1278   on Win32 float functions on NaN crashed
1280   doc changes: integer, NaN?, error-event, error-text, atan2
1282 - 7.4.0rc2
1283   enabled error events in Win32 DLL module
1285   update finger example file and example in doc
1286   doc change 'net-connect'
1288 - 7.4.0rc3
1289   floats now work in imported fuctions (tested on x86 platforms)
1290   and up to 14 parameters (previously 10) are accepted, floats
1291   count as two
1293   nth-set like set-nth but different return value, was in rc2
1294   but now documented
1296   doc changes: chapter 'Functions in groups', 'import', 'inc', 'dec'
1297               arithmetik operators +,-,*,/, 'set-nth', 'nth-set'
1298               'sort', '%', 'mod', '<,>,=,<=,>='
1300   doc new file: hacking_newlisp.html with describes previously
1301   undocumented features
1303   'for', 'dotimes', 'seqence', 'series' now return a 'invalid parameter: NAN'
1304   error when NaN parameters are passed
1306 ===============================================================================
1307 - 7.4.0 release 2003/12/20
1308 - 7.4.1
1309   commandline switch '-m N' where N is the max number of megabyte newLISP
1310   is allowed to allocate for LISP cells
1312   setq,set!, define (as set) did not work right with dynamic context vars
1314 - 7.4.2
1315   %s format now recognizes precision i.e: (format "%5.2" "hello") => "   he"
1317   various doc changes
1319   pop3.lsp now handles pop3 servers w/o LAST command, but only on the
1320   functions: get-all-mail and delete-all-mail
1322   char did not convert the  0 correctly, now: (char 0) => "\000"
1324 - 7.4.3
1325   fixed printing context name when in a context other than MAIN
1326   this affected the newlisp-tk frontend since v. 7.2.7
1328   many doc corrections, now rev 5
1330 - 7.4.4
1331   (now ... ) returns an additional number 'minutes west of GMT' 
1332   for the timezone offset 
1334   the optional time ofset parameter in 'date' and 'now' must now
1335   be given in minutes west of GMT, was previously in hours, 
1336   standard when using time zone offsets
1338   max cell count as specified in command line swith -m now second
1339   number in 'sys-info' if not specified defaults to 0x10000000
1341   doc addition of -m commandline switch and change in 'sys-info'
1343 - 7.4.5
1344   format now can take unlimited number of parameters, before 2048
1346   changes in stat.lsp, smtp.lsp and httpd for new 'sys-info'
1348 - 7.4.6
1349   fixed problem in float -> integer conversion of big numbers
1351   attempt to fix for last parameter of 'now' for solaris (not tested)
1353 - 7.4.7
1354   updated to BWidget-1.7 in newlisp-tk (since 7.4.6)
1356   timezone offset in return value for 'now' set to 0 on SOLARIS
1358   plotting with stat.lsp and gnuplot was messed up on Win32, now
1359   can also do multiple plot one after another using 'process' instead
1360   of exec
1362   eliminated 'gettime' example, as that service doesn't run on most
1363   computers these days
1365   'import' on Win32 now can use cdecl calling conventions with
1366   additional parameter string "cdecl" when importing functions. 
1367   This allows calling many third party DLLs without special wrapper DLLs
1368   On LINUX etc. the extra parameter is ignored.
1369   
1370   mysql.lsp version 2.0, several functions changed and offsets defined
1371   for MySQL v.4.0, previous versions will not work
1373 - 7.4.8
1374   improved error message for missing par
1376   sqlite.lsp - module for SQLite datavase from http://www.sqlite.org
1377   
1378   mysql.lsp small fixes and revised test routine, tested on MySQL v. 4.0
1380   'transpose' now transposes any kind of matrix (previously only matrices
1381   containing numbers; it also rectangualarizes matrices; speed improved
1382   3 fold.
1384   in 'if' and 'cond': if the last condition given is the empty listy ()
1385   which evaluates to nil in a boolean context, and if no then/else actions
1386   or now cond action is given, then the empty list () is returned (previusly nil) .
1388   fix for 'date' which crashed at values overflowing int32 (2038 1 19 3:14:07)
1390   logging has been changed to a fixed filename 'newlisp-log.txt
1392   new command line switch -h
1394   better pretty printing of symbols which are constant and global
1396 ===============================================================================
1397 - 7.5.0 RELEASE 2004-01-21
1398   cgi.lsp, form.html, form.cgi where missing from FILES inventory
1400   new 'sqlite.cgi' web script for administering SQLite database in newLISP
1402   eliminated various unused vars with -w8004
1404   fixded bug in 'global' printing
1406   changed directory structure, new dirs: doc, examples, modules 
1408 - 7.5.1
1409   (rotate '()) crashed because of list length zero
1411   fixed nested catch/throw
1413   fixed lambda stack oberflow after 3000 catch
1415   eliminated array.lsp instead shorter hash.lsp for hash functions
1417   changed sqlite.lsp to version 1.6, name change for future 
1418   reserved word 'array' 
1420   dynamic context var refs now work inside contexts, this makes
1421   it possible to call constructors from inside the class context
1423   improvement of floating point speed 60% in simple arithmetik
1424   and 25% in most floating point functions
1426   (format "%d" 1.23) => "1" before this was not permitted
1427   (format "%5.2f" 10) => "10.00" also allowed now
1429 - 7.5.2
1430   (array i j k aList), returns a 1 to 8 dimensional array and
1431   initializes optionally from flat list in aList 
1433   (array-list myArray) returns a list conversion of myArray
1435   (aray? expr) tests if expression is a list
1437   all array acces modification via nth, set-nth and nth-set
1439   also released benchmarks  comparing with Perl, Python and Guile,
1440   see at: http://newlisp.org/benchmarks
1443 - 7.5.3
1444   (seek 0) now returns numbers of characters printed to stdout,
1445   works on BSD but on LINUX and Win32 will always return -1
1447   'integer' now takes additional base parameter after the
1448   default parameter, i.e:  (integer "1111" 0 2) => 15
1449   note, that hex numbers still need to be prefixed with 0x
1450   even when specifying base 16
1452   added txt2pdf.lsp as a new module in the module directory
1454   comprehensive manual edit by Brian Clausing (thanks!)
1456   new chapter about linking LISP source and executable
1458   all deprecated functions thrown out:
1459   concat, remove, replace-nth, sublist, substring, read-process
1460   read-url, write-process. All have replacements, see manual.
1462   changed cgi.lsp, stat.lsp, spam-filter for deprecated functions
1464   1% overall speed improvement 0.5% size reduction
1466   nth didn't work on lambda in 7502
1468   'format' increasing of ars beyond 2048 has been rolled back
1469   because of problems when evaluation of args is deeply nested
1471 - 7.5.3a
1472   changes in newlisp-tk.tcl for deprecated 'remove'
1473   changes in qa for deprecated functions
1476 - 7.5.4
1477   15% speedup in 'format'
1479   writeStreamStr() and readStreamText() did not handle zeros
1481   'source' like save on strings eliminates tmp directory in
1482   new newlisp-tk v.1.09
1484   1000+ times speedup in XML parsing of bigger files 
1485   changing a strncpy() to a memcpy()
1487 - 7.5.6
1488   newlisp-tk 1.10 now shows message box when trying to open
1489   debugger with browsers at the same time
1491   updated FILES inventory
1493   logging did not work as described (was always on with -p -d)
1495   net-listen and net-receive-udp take as an additional optional
1496   parameter the address the listening socket should bind for
1497   computers with multiple network adapters
1499   optional last parameter in net-send-udp for specifying 
1500   broadcast mode with 'true' (or anything not evaluating to nil), 
1501   not necessary on wome Win OS where '255' on last address byte 
1502   is enough to turn on broadcast mode
1504   Ctrl-C handler simple on Win32 and with continue, exit, reset
1505   menu on LINUX/BSD (somewhat unreliable?)
1507   Broken Pipe on net-send now handled correctly on Linux/BSD
1508   is handled by socket stack on Win32
1510   (slice str 1 -1) does not crash anymore (length arg should
1511   never be negative)
1513 - 7.5.7
1514   signal handlers now initialized before loading commandline
1515   scripts
1517 - 7.5.8
1518   shorter code for swap
1519   
1520   defunct zombie child processes now cleaned up by 'process'
1521   on UNIXs
1523   fixed potential bug in regex replace when replacement expression
1524   evaluates to no-string
1526 - 7.5.9
1527   all functions changing the contents of a symbol (destructive
1528   functions) will now cause an error when used on symbols protected
1529   with 'constant', previously it worked only with set, set!, setq
1530   and define, define-macro; loop variables in dotimes, for, dolist
1531   and dotree are protected against change by user with an error 
1532   message during looping and may not be constant before the looping
1533   starts using them
1534   
1535   new manual chapter about 'Variable names and numbers syntax"
1536   
1537   bug fixes/additions in httpd, now version 3.3
1538   
1539   fixed potential memory overwrites in nl-web.c
1541   error message length limited to 1024 characters
1543 - 7.5.10
1544   rolled back symbol protection for dotree and dolist, which
1545   is not necessary
1547 - 7.5.11
1548   new mode for 'open' "pipe' or "p" opens a named pipe non-blocking
1549   for reading
1551 - 7.5.12
1552   rolled back protection for dotimes, for loop variable solving
1553   crash problem in different way
1555 - 7.5.14
1556   documentation fixes and compiler warnings fixes
1558   two additional file for viewing manual in frames with index
1560   the Win32 installer puts entries in startmenu including an uninstall
1562   The WIn32 installer puts a newLISP icon in desktop and startmenu links
1564   protect built-in functions from overwriting with import but the 
1565   function can still be imported in a context different from MAIN
1567   eliminated "pipe" or "p" mode in 'open' instead "non-block" or "n"
1568   as additional option after "read" or "write" option
1570   net-lookup, net-select, net-send-udp, net-peek did not clear net-error
1572   net-select now can accept a list of sockets instead of one socket
1573   net-select now has a third mode "exception" or "e" to test error
1574   conditions on socket
1576   apply works reducing a list when additional reduce count is given
1578   load takes multiple filenames
1580 - 7.5.15
1581   integer and float now return nil or the default value when type
1582   other than string or number is specified, previously this
1583   caused an error message
1585   expanded chapter on Tcl/Tk Variables in:
1586   "Writing applications with newLISP and Tcl/Tk"
1588 - 8.0.0rc1  
1589   added more examples to newlisp-tk.html
1591   allow [cmd] tag in -d mode
1593   reopen mode in [cmd] section for potential memory leak after
1594   error conditions or on reconnect
1596   allow contexts to be overcopied (broke benchmarks)
1598 - 8.0.0rc3
1599   re-fixes the memory leak for [cmd] tags
1601 - 8.0.0rc4
1602   doc changes manpage
1604   take abs() value in -m commandline option 
1606   reorder help menu for logical sequence of options
1608   newlisp-tk 1.12 now tolerant for not finding "Fixedsys",
1609   "Lucida Console" or "fixed" fnt. Will take first font found
1610   
1611   newlisp-tk 1.12 now save newlisp-tk.con correctly in home directory
1612   of UNIX (startup dir in Win32)
1613   
1614   man page for LINUX et al, thankyou Nigel Brown 
1616 - 8.0 released April 7 2004 ============================================
1617   version nunbers changed from 8.0.0 to 8.0 to distinguish
1618   rc versions from final version
1620   sys-info now returns 7 as OS number of win32dll
1622   corrections in MemoryManagement.html and newlisp_manual.html
1624 - 8.0.1
1625   changed package version number to dotted form for compatibility with
1626   RPM packaging
1628   changed Makefile install option for RPM compatibility and added
1629   'make rpm' for makeing rpm package
1631   man page for newlisp-tk 
1633   array was not serialized correctly in 'source' and 'save'
1635   negative indices in arrays, which are too big now give out-of-bounds 
1636   error (previously took first element as for lists)
1638   now up to 16 indices can be specified, previously 8
1640   changes in docs for array chapter and functions
1642   in newLISP-tk under Linux/Unix file open dialog now starts
1643   with /usr/share/newlisp/newlisp-tk
1646 - 8.0.2 Released 2004-05-02 ============================================
1648   httpd version 3.5
1649   
1650   doc changes
1652 - 8.0.3
1653   constant did not allow multiple args
1655   parse now recognizes zero length token and stops parsing
1656   instaed of going into a loop
1658   fix for contextvars in tcl/tlk IDE v1.15 and p_context()
1660   bug fixes in cgi.lsp now v.1.5
1662   documentation corrections
1664   a bug fix in the reset routine
1666 - 8.0.4
1667   fixed the fix in reset
1669   cell leaks in error messages in catch/throw situations are now avoided
1671 - 8.0.5
1672   filter now filters nil symbols like nil values (like if, while, not etc)
1673   this effects the function index in the same way
1675   access system variables $0, $1 ... etc. with an index ($ 0), ($ 1) .. ($ i)
1676   where i is an integer
1678   bug fix for catch when result variable has same contents as return from
1679   catch statement
1681 - 8.0.6 Released 2004-06-06 ============================================
1682   new env replaces deprecated environ, getenv, putenv (still available but
1683   to be eliminated in 8.1)
1685   additional paragraph about ovewriting global symbols in the chapter
1686   'Contexts' 
1688 - 8.0.7
1689   net-receive-udp can take an additional timeout parameter 
1691   doc changes for net-receive-udp
1693   new example whitelist-filter for email filtering
1695 - 8.0.8
1696   trim now can take optional second trim-character parameter:
1697   (trim "---HELLO===" "-" "=") => "HELLO"
1698   (trim "0001234" "0" "") => "1234"
1699   allows trimming of only one side (empty string) or different
1700   trimming left and right
1702   new functions 'utf8' and 'unicode' to convert between utf8
1703   and UCS-4 encoded Unicode
1705   UTF-8 versions of: char, upper-case, lower-case, first, rest,
1706                     chop, explode, last, trim, collect select,
1707                     nth, set-nth, nth-set
1709   any positions/indices in the UTF-8 versions  of char, nth
1710   set-nth and nth-set refer to (multibyte)character positions
1711   rather than byte positions
1713   find and regex return byte positions, slice takes byte positions
1714   reverse always works on byte level, to reverse utf8 strings use:
1715   (join (reverse (explode str)))
1717   changed parsing of octal numbers 090 now "0" "90"
1719 - 8.0.9
1720   'source' now also working on context symbols
1721   fix for 'trim' in utf8 version
1722   fix for 'set-nth' and 'nth-set' in utf8 version
1723   version 3.7 httpd fixing problems with post on IE
1725 - 8.0.10
1726   'net-sessions' now registers connecting peer in -p -d modes
1727   makefiles for MinGW compiler for newlisp.exe and newlisp.dll
1728   MinGW will eventually replace Borland BCC 5.5 as the default
1729   compiler for the Win32 binary distribution
1731 - 8.0.11
1732   a fix for server crash in -d mode when reconnecting on Linux
1734 - 8.0.12
1735   now will reset when client exits in -d demon mode (still does
1736   not maintain demon mode on slackware 2.4 but Debian 2.6
1737   Linux Mandrakae 9.2/2.4.22 and FreeBSD  4.7 are OK)
1739   new function (dup expr n) repeats expression n times in
1740   list or string
1741   function 'pipe' works on MinGW compiled version
1743 - 8.0.13-14
1744   fix of 'test-pipe' in fle qa
1745   new option in Makefile: make uninstall
1746   /usr/share/newlisp/init.lsp now tries to load $HOME/.init.lsp
1747   as a user specific .init.lsp after the system wide init.lsp
1748   $HOME gets defined as (env "HOME") or (env "USERPROFILE") 
1749   or (env "DOCUMENT_ROOT")  
1750   whatever is available in that sequence
1751   fixes restart problem in demon mode
1753 - 8.0.15
1754   makefiles for newlisp as a shared library on Linux and BSD:
1755   newlisp.so, the function to import is: newlispEvalStr
1757   'print' and 'println' in newlisp.dll now  are always
1758    returned correctly in the return value of 'dllEvaStr'
1759    was not working correctly before in many cirumstances
1761   'newlispEvalStr' will replace 'dllEvalStr' in future
1762    version in newlisp.dll, at the moment both work
1763    this change was made for consistency over platforms
1765    new chapter "Shared library newlisp.so on Linux/BSD" in users manual
1767 - 8.0.16
1768    doc changes for 'net-receive-udp'
1769    'net-receive-udp' can now receive on a specific IP address, this
1770    was documented already but not working
1772    'net-connect' and 'net-listen' ca use a "udp" option to do
1773    nonblocking UDP data exchange with net-send and net-receive and
1774    without immediate closing of socket as happening using
1775    net-receive-udp and net-send-udp. See documenataion for
1776    net-listen and net-connect in the manual
1778    improved error message for missing parenthesis 
1780    newlisp.vim VIM syntax file now included in source distribution
1781    thanks to David from http://www.geocities.com/excaliborus/ for
1782    this contribution
1783   
1784    updated the CREDITS file
1786    all predicates, which ended in p when using HTML (i.e. listp for list?)
1787    have been renamed to using the '?' instead of 'p' in HTML to make
1788    utilities, which position in the newlisp_manual.html work
1790 - 8.1.0rc1
1791    fixed memory leak in 'irr'
1792   
1793    new 'net-receive-from' and 'net-send-to' for non-blocking UDP
1794    communications over open connections
1796 - 8.1.0rc2 
1797    an almost double speed and smaller parser for pack/unpack format strings,
1798    which does not need spaces in between the format specifiers
1800    a fix in net-send-udp not closing the socket after the new changes in rc1
1802    doc changes
1804 - 8.1.0 Released version on 2004-08-10 ========================================
1805   two new example programs: udp-server.lsp and udp-client.lsp to demo
1806   non-blockig UDP communications
1808   merged bugfixes from dlcompat as of cvs 2004-07-12  Peter O'Gorman
1809   this affects only Mac OSX
1811   added -c option for suppressing the prompt
1813   added node.lsp in modules directory for building newLISP clusters.
1815   new versions of several modules and example files to account for
1816   new version numbering
1818 - 8.1.1
1819   sleep now rounds to the nearest full second on systems where nanosleep()
1820   is not available.
1822   timeout option in net-receive-udp works again
1824 - 8.1.2
1825   'make install_home' and 'make uninstall_home' of installations on Linux/UNIX
1826   in the home directory of the user in $HOME/bin and $HOME/share/
1828   'search' crashed on invalid filehandles
1830   new 'expand' for expanding variable bindings in lists
1832 - 8.1.3
1833   a fix for 'get-url' on some Solaris installations
1835 - 8.1.4 released August 21st, 2004 ==========================================
1836   doc changes ansd new option 'make version' for changing version numbers
1837   in all affected files
1839 - 8.1.5
1840   nl-sock.c missed a change for Win CE, PocketPC
1842   qa - testfile now complete with all functions, use: ./newlisp qa to test
1843   without process and test functions using process, or use: ./newlisp qa ext
1844   to test for all function (only Win32 and Linux)
1846   a fix for timeout values > 1000000 usec on BSD and Solaris in net-select
1847   and net-receive-udp
1849   in net-listen and net-connect specify "multi" or "m" instead of "udp"
1850   for UDP Multicast mode
1852 - 8.1.6
1853   'collect' and 'select' are collapsed into 'select' which is now also
1854   type polymorph on the second parameter.
1856   new makefile_solaris_utf8
1858   new 'fork' function for lauching a newLISP child process thread
1859   on Linux/UNIX only and CYGWIN on Win32.
1861 - 8.1.7
1862   fixed rounding error in 'sleep' when compiled with NANOSLEEP
1864   improved qa routines using 'fork' on Linux/UNIX for some tests
1866 - 8.1.8
1867   new 'wait-pid'for watching the status of child threads created with 'fork'
1868   and proccesses created with 'process'
1870   upgraded to PCRE v. 5.0
1872   more tweaks in qa file
1874   fixed potential memory leak in 'new'
1876 - 8.2.0 Release September 21st, 2004 ======================================
1878 - 8.2.1
1879   write-buffer can now take string instead of file handle to write
1880   to a string in a string growing (concatenating) fashion, this is
1881   much faster then doing (set 'str (append str content)) now:
1882   (write-buffer str content)
1884   'symbol' now can overwrite global symbols from MAIN (i.e. built-ins)
1885   i.e. (symbol "print" 'MyContext)
1887   'process' now ca take to addtioal pipe handle parameters, which
1888   get mapped to stdin and stdout for the new process:
1889   (map '(myin bcout) (pipe))
1890   (map '(bcin myout) (pipe))
1891   (process "bc" bcin bcout)
1892   (write-buffer myout "3 + 4\n")
1893   (read-line myin) => "7"
1895   'semaphore' lets you create wait and signal semaphores
1896   (set 'sid (semaphore)) ; aquire
1897   (semaphore sid -1)     ; wait
1898   (semaphore sid 1)      ; signal
1899   (semaphore sid) => 1   ; status
1900   (semaphore sid 0)      ; release/delete
1902   'share' to create shared memrory regions
1903   (share) => address off mmap share
1904   (share addr exp) => sets addr to exp for integers, floats and strings
1905   (share addr) => returns integer, float or string exp
1907   added newLISP-Excel-Import.xls example to examples/ directory
1908   added prodcons.lsp - demo for fork, wait-pid, semaphore and share
1910 - 8.2.2
1911   'write-line' with string device like 'write-buffer', in both
1912   symbol is now protected if protected with constant
1914   share was broken for strings
1916 - 8.2.3
1918   pipe is now also available on CGWIN and Borland compiled versions
1919   on all Win32 versions pipe can now remap std I/O like on Linux/UNIX:
1921   (map '(myin bcout) (pipe))
1922   (map '(bcin myout) (pipe))
1923   (process "bc" bcin bcout)
1924   (write-buffer myout "3 + 4\n")
1925   (read-line myin) => "7"
1927   process on Win32 can hide or minimize window:
1928   (process application 0 0 0) => hide app
1929   (process application 0 0 1) => show app
1930   (process application 0 0 2) => minimize app
1932   'share' and 'semaphore' are now also available on Win32
1934   improvements in qa file, now tests all functions by default w/o ext option
1935   better syncronization on some tests with semaphores
1937   'match' in list mode now only returns matched expressions
1939   (map set '(x y) (match '(a (? c) d *) '(a (b c) d e f)))
1940   x => b
1941   y => (e f)
1943   when using match with an optional third parameter 'true', it works
1944   in the old fashion:  (map pattern aList true) => works like before
1946   The context default function is a userdefined function with the same name
1947   as the context it resides in, i.e: (define (ctx:ctx a b) (+ a b)) and can
1948   be called just with the context name (ctx 3 4) => 7. 
1949   Default functions should only be called rom MAIN, or have already been 
1950   loaded or their context created before referred to in another context or
1951   default function.  Not yet 'official' see doc/default_functions.html
1953   fixed cell leak in 'match' on backtracking
1955   bug fix in let which did not honor protected symbols
1957 - 8.2.4
1958   deprecated collect, getenv, putenv and environ completely eliminated from
1959   newlisp and examples, modules: httpd, cgi.lsp, sqlite.lsp
1961   '+' new wildcard operator 'match': take one or more
1963   net-error now returns error number and text separate in a list
1965   net-connect failure did not set net-error
1967   'now' has now the daylight-savings-flag 0 or 1 as last parameter
1969   new 'sys-error' for reporting C-library errno values
1971   'newlisp -e' without a command string crashed
1973   'push' now optimized when pushing as last element with -1
1975   (new ...) now will not overwrite existing symbols, to allow true
1976   mixins of other contexts. To overwrite symbols as before version
1977   8.2.4 use the true as a third parameter i.e. (new A 'B true).
1979 - 8.2.5
1980   'symbol?' can now be used on dymamic context vars, i.e
1981   (set 'ctx MyCTX) ; MyCTX is existing context
1982   (symbol? 'ctx:x) ; true if MyCTX:x exists, nil if not  
1983   This checks the xistence without inadvertantly creating it.
1984   previously (symbol "x" ctx nil) had to be used.
1986   'replace' can now take an additional option bit 0x8000 for replacing
1987    only once in a string: (replace "a" "aaa" "A" 0x8000) => "Aaa"
1990   'define-new' copies individual funtions from
1991   other contexts with or without renaming them to a new function:.
1992   (define-new 'foo:func 'bar:func) copy to different context
1993   (define-new 'foo:func 'foofa) copy to current and rename
1995   forward referece to a symbol in symbol did not work in mixin mode
1996   of 'new'
1998   the space between optioncharacter (-s,-m,-p,-d,-e) and optionvalue
1999   can now be omitted, i.e. -s 10000 and -s10000, both work.
2001   'date' without an argument returns the character string for the current
2002   local time, this avoids the construct (date (apply date-value (now)))
2004   'date-value' without and argument returns the time of seconds
2005   since 1970-1-1 0:00 equivalent to (apply date-value (now))
2007 8.2.6
2008   'delete' now can delete an entire context without removing conatined 
2009    symbols first
2011   serialization of contexts to a file using 'save' now is done correctly 
2012   when the context context contains overwrites of global symbols.
2014   a more flexible and faster 'symbol' function, which can take any character
2015   sequence and numbers, and can be used this way for hash-like associative 
2016   memory access. New module hash.lsp to show usage.
2018   'define-new' renamed to 'def-new', for shorter typing and for not 
2019    associating it to 'define' but rather to 'new' (was introduced in 8.2.5)
2021   'letn' works similar to 'let' but incrementally uses the local variable 
2022    bindings like multiple nested let when evaluating the initializer expressionsi
2023    for locals.
2025 8.2.7
2026   'address' (previously only documented  in 'hacking_newlisp.html') now also 
2027   returns addresses to integer and double float data type, useful when passing
2028   int * or double * to imported functions, now documented in main manual
2030   'sym' is an abbreviated form of 'symbol', since 'symbol' starting in 8.2.6
2031   can take any sequence of characters, including strings which are illegal
2032   symbols in newLISP syntax, and is used for hash/dictionat like lookups, it
2033   is used more often, therefore this shorter form 'sym' is introduced
2035   added configuration variable in newlisp-tk.config to specify a newLISP
2036   application. See newlisp-tk.html "Delievering Applications" for details
2038   'apply' and 'map' now can be used on macros
2040   'pack' and 'unpack' have new format specifier 'b' for unsigned 8bit numbers
2042   'encrypt' crashed on empty strins in key
2044 8.2.8
2045   'encrypt' crashed on empty key-string, now gives error message
2047   'int' as shorter writing of 'integer'
2049   'pack' now converts all types as needed, i.e. (unpack "b" (pack "b" -1.0)) => 255
2050   from-to integer-floats, did it before only for "f" and "lf"
2052   'flt' converts a number to a 32bit float repesented by an integer for usage
2053   in calling imported library routines, which take floats.
2055   'array' skipped wrong index types instead of giving error message
2057 8.3.0 Released Nov 21st, 2004
2059 8.3.1 Released Nov 23rd, 2004 ============================================
2060   'nth-set' gave error on protected symbol in index
2062   'apply' 'map' on macro was returned to 8.2.0 behaviour
2064 8.3.2
2065    more cleanup in qa file
2067    cleaned up makefiles -D definitions eliminating redundant -DOPSYS
2069    eliminated 'break', which did not do anything after introduction
2070    of 'debug' in version 6.3.07
2072    overall speedup of about 5% by predefining system symbols
2073    $0 -> $15, speedup of 80% to 100% in functions using system
2074    symbols like set-nth, nth-set, find, parse, regex, replace
2076    new 'do-while' and 'do-until' check condition _after_ evaluating
2077    the body expressions
2079    new 'read-key' reads nonblocking keyboard character code
2080    not working on Mac OSX but all other flavors
2082    superflous args in user defined function call caused cell leak
2083    never happened, i.e.: (define (foo x) ..) and (foo a b c)
2085    'get-url' now handles "Transfer-Encoding: chunked" correctly
2087    'amb' picks an argument at random and evaluates it
2089    -x command line switch for server mode with handler function 
2090    'x-event' i.e: newlisp my-httpd -x 8080 
2091    my-httpd is a lisp file containing the user defined handler 
2092    function i.e: (define (x-event request) .....)
2093    this way servers for different protocols / requests can be simply
2094    programmed using 'print','read-line', etc., for IO to the specified
2095    port, the connection stays up until closed by the client.
2096    See chapter 'Command line options ...' in the manual
2098    fixed a bug in 'new' and 'def-new' when the source was MAIN 
2099    this fix was necessary to write a function (def-static ....)
2100    for writing statically scoped functions (see int the manual
2101    chapter 'Lexical, static scoping in newLISP', subchapter
2102    of 'Programming with context objects'.
2104 8.3.3
2105    'debug' did not handle default functions written without colon
2107    'save' 'source' did not space symbols under sum circumstances
2109    'dolist' now double as fast and safe to break out with 'throw'
2111    'catch' now has an additional syntax with just one argument to write
2112    easier returns from functions, loops or blocks, ie:
2113    (catch (dotimes (x 1000) (if (x 500) (throw "fin"))) => "fin"
2114    returns the result  or throw argument
2116 8.3.4
2117   'save' 'source' spacing-fix was incomplete
2119 8.3.5
2120   If the a '!' is entered as the first character on the command line immediately 
2121   followed y a shell command, that command will be executed, i.e. !lsi in Unix 
2122   or !dir in Win32 would show a directory listing. There should be no space 
2123   between '!' and the shell command.
2125   URL length in get-url and post-url is now unlimited
2127 8.3.6
2128   manual corrections, additions and new sub-chapter about XML-RPC
2130   BASE64 encoding and decoding with 'base64-enc' and 'base64-dec'.
2132   new sign-on message, and different for remote modes
2134   added 'xmlrpc-server' to examples directory
2135   added 'xmlrpc-client.lsp' to modules directory
2137   fix for 'Transfer-encoding: chunked' if 'Content-length:'
2138   is given too (which should not happen but is found occasionally)
2140 8.4.0 Released 2005-01-18 ============================================
2141   added xmlrpc.cgi for handling XML-RPC requests as CGI
2143   fixed a file descriptor leak in -d -x modes
2145   after the 'debug' fix in 8.3.3 debug did not recurse into funcs
2147   'args' can take an index argment i.e. (args 0) (args 1) etc.
2149 8.4.1
2150   fixed signon message missing 'n'ewLISP
2152   added UTF-8 to signon message
2154   added f-prob to stat.lsp (probability of F ratio for df1/def2)
2156   (throw-error expr) throws an error with message printed in expr
2157   error thrown this way can be handled like any other newLISP error
2158   using (catch foo 'result) or with (error-event ...)
2160   changed/added docs for catch, throw, throw-error and chapter:
2161   Integer abnd Floating point ...
2163   newlisp-tk.exe now wrapped with freewrap v.6.0 and Tcl/Tk 8.4.8
2164   suppresses occasional display of tcwish console
2166   added updated newlisp.jsf syntax file for JOE editor to distribution
2168 8.4.2
2169   [cmd] tags did not work when compiled with READLINE option
2171   (args) which previously worked only in macros now too works in
2172   functions. The behaviour of (args) has changed: only unbound arguments
2173   for which there is now local variable in the macro (or function) are 
2174   returned in the list. This makes changes in existing macros necessary, 
2175   which specify both, local variables and they use args. Most changes
2176   lead to simpler macros or function, because (args) already contains
2177   only the unassigned args.
2179   changed macro definition of 'tk' in newlisp-tk.tcl to function
2181   changed plot 'macro' in stat.lsp and 'defun' in init.lsp
2183 8.4.3 Release 2005-02-12  =================================================
2184   cleanup from (args) changes, protect $args from deletion
2186 8.4.4
2187   misplaced paren in conditional def of defun in init.lsp
2189   OS number in sys-info was incrementing on every call when DLL or UTF-8
2191   decimal point setting from locale is now used correctly when parsing source
2192   i.e. after performing (set-locale "German_Germany.1252") in Germany
2193   1,23 will be recognized corectly as a decimal number with comma as the 
2194   decimal separator.
2196   qa_comma QA test file for German or other locales using ',' comma as
2197   decimal separator, qa renamed to qa_dot for decimal-dot locales.
2198   In comma locales both, qa_dot and qa_comma should work, in decimal
2199   dot countries onlz qa_dot will work.
2201   daylights savings field in 'now' function now shows a flag 1/0 if time
2202   zone may have DST at certain time of the year on Linux/UNIX. On Win32
2203   it shows a 'daylight minutes bias' for timezones which may have DST.
2204   Note that flag/bias is set through all the year even if DST is not
2205   in effect at a given moment. May not work on all platforms.
2206   
2207   additional format parameter in (date num offset fmt), see GNU gcc
2208   strftime() function for details
2210   Win32 installation now to $PROGRAMFILES/newlisp, which is 
2211   c:\Program Files\newlisp on English Windows. This defines a
2212   fixed location for $PROGRAMFILES/newlisp/newlisp.dll for applications
2213   loading newlisp.dll. 'PROGRAMFILES' is an environment variable available
2214   on all MS Windows installations.
2216   newLISP is now correctly registered in the
2217   'control panel/add or remove programs' applet
2219 8.4.5
2220   newlisp.exe compiled on MinGW or Borland now will look for init.lsp
2221   in the same directory where newlisp.exe resides
2223   installer now sets path on Win32, this allows to import the DLL without 
2224   specifying the full path and allows to start newlisp or newlisp-tk from
2225   anywhere on Win32
2227   installer now allows installing without newlisp-tk
2229   'nth' upgraded to 16 indices (like set-nth and nth-set)
2231   'sort' now allows any binary operator user defined function as
2232   compare funtion in third parameter
2234   'implicit indexing' on lists, arrays and strings i.e.:
2235   (lst 1 3) equivalent to (nth 1 3 lst)
2236   (ary 0 -1) equivalent to (nth 0 -1 ary)
2237   ("newLISP" 3) equivalent to (nth 3 "newLISP")
2238   unlimited number of indices and faster than explicit form
2240   'pack' and 'unpack' now allow switching between little and big endian
2241   byte order using new format characters '<' and '>'
2244 8.4.6
2245   'new' and 'def-new' did not replicate arrays, could cause crash
2247 8.4.7
2248   added 'upload.htm', 'uplload.cgi' to examples directory
2249   minor fix in xmlrpc.cgi xmlrpc-server
2251   better handling of bad server responses in get/post/put-url avoiding
2252   an ifinite loop on some types of bad server responses
2254   fix for endian switch in 'unpack' which changed the original buffer
2256   re-arranged arrays, hashes and indexing chapters in the manual and
2257   enhanced hashing chapter, added Win32 trailing slash warning to
2258   manual entries of 'directory' and 'directory?'
2260   experimental implicit indexing with nrest: 
2261   (1 '(a b c)) => (b c)
2262   (1 "abc") => "bc"
2264 8.4.8
2265   implicit indexing with slice:
2266   (3 2 '(a b c d e f g)) => (d e)
2267   (-4 2 "abcdefg") => "de"
2269   updated infix.lsp to version 1.4/5 was broken after newLISP 8.2.0
2270   because of change in 'symbol' functioanality
2272   possibility to check legality of a string as a newLISP source symbol
2273   with (symbol? string), i.e: (symbol? "a b") => nil
2275   illegal symbols are now serialized correctly in 'save' using a
2276   set expression with (sym str context)
2278   the Win32 installer now will correctly change settings in
2279   newlisp-tk.config when chaning the install path during installation
2280   will only work Windows 2000 and later
2282 8.4.9
2283   did not evaluate length in implicit slice-length
2285 8.4.10
2286   separated legal symbol? functionality into 'legal?' function. 'symbol?'
2287   back to pre 8.4.8 functionality
2289 8.5.0 Released April 8, 2005
2290   '=' fixed problem when comparing strings and binary buffers
2292   'args' with negative index did hang
2294   'main-args' nor can be indexed like args, both accept negative indices
2296 8.5.1
2297   newlisp-tk tripped over file spec "", changed to "." in lastLoadedFile
2298   on MacOSX. Changed Demo.lsp to work with TLCKAqua on MacOSX.
2300   new function 'factor' for factoring numbers up to 15 digits 
2301   (must give floats for numbers bigger max int)
2303   in newlisp.so and newlisp.dll main-args was initilized to nil instead of
2304   the empty list ()
2306   list in 'dolist' now safe to modify (back to 8.3.2 behaviour), but can
2307   leave with 'throw' without leaking cells
2309   signalling SIGUSR1 will perform a 'reset' but not kill newLISP
2311   'timer' start a one shot timer event and registers a user defined
2312   event handler, i.e: (define (ticker) (println (date)) (timer 'ticker 1))
2313   defines a self starting and retriggering ticker.
2315 8.5.2
2316   added debug option to SIGINT handler, eliminated SIGUSR1 handler, because
2317   is redundant
2319 8.5.3
2320   added 'signal' for userdefined signal handlers: (signal sig-no symbol)
2322   args was not reset to '() when left unused in recursion levels
2324 8.5.4
2325   signal handler can pass the signal number as an argument (see manual)
2327   new makefiles for OSX/Darwin UTF-8: make 'osx_utf8' and make 'darwin_osx_utf8'
2328   (Darwin means: OSX + readline support)
2330   when compiled with readline support newLISP will now exit pressing Ctrl-D
2331   (Linux/UNIX)
2333   'net-select' crashed on an empty list
2335 8.5.5
2336   fixed UTF-8 problems in file names in newlisp-tk.tcl (thanks Norman)
2338   UTF-8 symbols where not treated as legal symbols in 'save' , 'legal?'
2339   This prevented UTF-8 symbols to show up in the editor/browser listbox.
2340   This is now fine on all UTF-8 and non-UTF-8 version.
2342   UTF-8 now handled correctly in hostnames in net-xxx routines
2344   UTF-8 now handled correctly in 'float' and 'integer', took some
2345   UTF-8 characters for numbers.
2347   'net-connect' and 'net-select' did not accept/convert floats for 
2348   portnumbers/sockets
2350   sqlite3.lsp v.1.3 now handles FLOAT and BLOB datatypes and finds the correct
2351   library/location depending on the OS platform
2353   newlisp-tk did not save pathnames correctly in newlisp-tk.conf. New
2355   version newLISP-tk 1.26 now works correctly when installing on MacOSX
2356   use 'sudo make install' after build with 'make darwin' or 'make osx'
2357   needs TclTk Aqua installed with darwin port tools
2359 8.5.6
2360   fixed potential problem in 'net-connect' with multicast option on
2361   big-endian CPUs (MacOSX)
2363   added broadcast option to 'net-connect' as udp mode plus broadcast specified
2364   with "b" or "broadcast" instead od "udp". Broadcast mode was already possible
2365   in 'net-send-udp'. Now broadcast can be set up in non-blocking mode on the 
2366   receiver side.
2369 8.5.7
2370   big speedup of 'replace' with strings on a file of 100k about 30x on
2371   500k about 500x times speedup.
2373   added example/tcltk.lsp for showing how to make GUIs without newlisp-tk
2374   controlled from a newlisp script
2377 8.5.8 
2378   added true/nil as allowed data in memory shares
2380   added new make flavor osx_lib for shared library newlisp.so
2382   MacOSX binary are smaller now because since 10.3 osx-dlfcn.o
2383   is not required anymore, but extra makefile_osx_10.2 for older
2384   Mac's
2386   flushing stdio after output if not in terminal mode lets newLISP
2387   now serve as a UNIX inetd handler 
2389 8.5.9
2390   'timer' now can take fractions of a second, i.e. (timer 'alarm 0.1)
2391   for 100 millisec
2393   'read-buffer' now can take an optional wait string as 4th parameter
2394   similar to 'net-receive' with wait string
2396   added Mac OSX package preperation to Makefile
2398   dropped cygwin support. MinGW and Borland remain as Win32 options
2399   #ifdef's for cygwin are still there but have not been tested for
2400   several versions
2402 8.5.10
2403   fixed a crash when hitting cursor-up inbetween [cmd]...[/cmd] tags
2405   'timer' now avalailable on Win32
2407   fixed a regex error, when expression found is of length 0
2408   only one replacement was made
2410   implicit indexing did not accept indices after a var-index, if
2411   var-index was the first.
2413 8.6.0
2414  a bug fix for unpack when passing a number as an address on
2415  OpenBSD where virtual memory pointers may be > 0x7fffffff
2417  new function crc32, version: http://www.w3.org
2419  share on Win32 leaked memory
2421 8.6.1
2422  'sql3:open' now returns nil and sets error the message when trying
2423  to sql3:open twice.
2425  'timer' now returns the elapsed time when calling just with the
2426   event symbol, useful for checking timer progress or programming
2427   timelines/schedules.
2429   'source' now works like 'save' and can take multiple symbols;
2430   context symbols are serialized including all of the contained
2431   symbols.
2433   Files are now created without execution permission with rw-rw-rw
2434   which results in rw-r--r-- on UNIX systems assuming a user mask
2435   of 0022.
2437   'peek' similar to 'net-peek' but for any file descriptor, returns
2438   number of bytes ready to read works also on std I/O 0/1. Only UNIX.
2440   Added gmp.lsp for GNU Multi Precision library, contains
2441   integer functions for arithmetik, see header of file gmp.lsp
2442   for details.
2444   optional parameter 'true' in 'difference' and 'intersect' puts
2445   these functions in list-mode (versus normally set-mode).
2447   new function 'title-case' upper-cases first character and
2448   optionally lowercases the rest characters
2450 8.6.2
2451   changed  makefile_darwin_utf8 to work on standard 10.4 installation
2453   a parameter in utf8 version of upper/lower was evaluated twice 
2454   caused by new title-case code in 8.6.1
2456   fixed append mode in file 'open' which created file with ------ 
2457   permissions when file did not exists
2459   optional 'true' flag in net-lookup to force hostbyname() lookup
2460   for strings like "216.16.84.66.sbl-xbl.spamhaus.org"
2462   huge speedup for 'difference' and 'intersect'. On a 10000 elment
2463   list about 100 times speedup, both functions now scale linearly
2464   with n+m instead of n*m, when n an m are the lenghts of the two
2465   lists
2467   speedup of 'count' for big item lists now scales m+n instead m*n
2468   when m is the list of items to count in list with length n
2470 8.6.3
2471   'difference' did sometimes not unique, 'nil' treated incorrectly
2473 8.6.4
2474   fixed problems in  'count' and 'sort' caused by changes in 'sort'
2475   necessary in new version of 'count', 'difference', 'intersect' and
2476   'unique'
2478 8.6.5
2479   'catch' did not respect protection of symbols in the catch symbol
2480    
2481    make version with sed finally working on UNIX previously only
2482    cygwin
2484    new function 'randomize' shuffles the elements of a list
2486    new function 'net-eval' evaluates a batch of functions remotely
2487    on newlisp servers, manages Tcp/Ip communications and data collection
2488    with multiple servers started with: newlisp -c -d <portno>
2489    timeout and optional callback/idle function
2491    'array' with 0 length dimension crashed, now ignores 0-length
2493    -d mode would exit when loss of communication in multiline [cmd] mode
2494    now just cycles to restart
2496    'error-event' only worked in programs loaded interactively, now works
2497     also defined in scripts started on the command line
2499    -l and -L now usable for logging in normal console mode, -l logs only
2500    user input -L logs both user input and newLISP output (without prompt)
2501    new chapter for logging in users manual
2503    when evaluating multiple expressions on the command line or a batch
2504    of expressions enclosed in [cmd],[/cmd] tags multiple results are now 
2505    separated by one space.
2507 8.6.5-7
2508    'ramdomize' looped on listlen 1
2510    'load' now throws an eror when the file cannot be found or returns
2511    the value of the last expression in the file evaluated. Before 'load'
2512    returned 'nil' when file was not found and else 'true'. Note that this
2513    required a change in init.lsp to catch error when trying to load
2514    $HOME/.init.lsp
2516    eliminated all sprintf() to avoid security warnings on openBSD compiles
2518    'erf' and 'sgn' new functions
2520    took out txt2pdf which is broken, will come back when fixed
2522    fixed leak in evluateStream introduced with 'net-eval'
2524 8.7.0-rc1 released October 10th 2005
2525    'get-url' now acccepts https:// pages in main url or moved location
2527    'sgn' extended with optional triconditional functionality
2529    fixed result stack leak in 'net-eval'
2531    'get-url', 'post-url' and 'put-url' now can take a timeout parameter
2533    'read-buffer' with wait string now will put bytes read in buffer
2534     including when the wait string was not found. When no bytes are
2535     read buffer is nil.
2537    'date-value' returned negative numbers on dates earlier 1970, now returns
2538     0 on dates previous to 1970
2540     'net-eval' would loop on connection errors, more detailed error messages
2542 8.7.0 released October 15th
2543     'append-file' like 'write-file' but appends
2545     'select' on lists with an empty selection list now returns the empty list
2546     previously nil.
2548 8.7.1 RELEASE Nov 7th, 2005
2549     fixed bug for push -1 optimization and various doc corrections
2551     replaced 'integer' with 'int', 'get-integer' with 'get-int' and 'symbol'
2552     with 'sym' in several examples/ and modules/ files
2554     (nth <list> <list>) now throws error (list index only allowed in
2555     push/pop and implicit indexing)
2557 8.7.2 development Release November 20th
2558     new (net-ping host wait-time) returns ip-no or multiple ip-no for multiple
2559     addresses in batch-mode or broadcast. Must have root privileges to use, or 
2560     set the newlisp executable set-user-ID with: chmod u+s /usr/bin/newlisp or: 
2561     chmod 4755 /usr/bin/newlisp; only on UNIX
2563     'time' now safe for midnight wrap
2565     'dup' with optional 'true' flag now can force list return  when a string argument
2566     is given; by default 'dup' concatenates the string
2568     sys-error now reset after readline(), which caused it set to 22
2570     'transpose' on empty lists segfaulted when on zero length dimension in the
2571     first row, now an error message will be issued if the first row is empty
2573     imnplicit rest failed strings when n was >= length of string
2575     'count', 'difference' and 'intersect' crashed when handling  identical lists
2577 8.7.3 development release November 27th
2578    added "list" flag to 'get-url', which permits capturing header and page in a list.
2580    added custom header option to get-url, post-url and put-url
2582    string display translation for char > 126 to \nnn format
2584 8.7.4 development release December 5th, 2005
2585    expanded functionality for 'context': (context 'CTX "symstr" value)
2586    adds symbol to context CTX, (context 'CTX "symstr") returns value
2587    this is a short form for: (set (sym "symstr" 'CTX) 123)
2589    expanded form of 'context?' for checking existence of a symbol
2591    'time' takes an additional parameter for the number of times the
2592    expression should be evaluated for timing
2594    cleanup format, file and directory routines (less code)
2596    the terminating character from an expression returned in the console has been
2597    changed from a space to a line feed
2599 8.7.5 Development release December 23rd
2600    added util/newlisp.plist syntax file for OSX BBEdit or TextWrangler editors
2602    raw mode in 'net-eval' now documented
2604    recognize simple path-href in 'location:' header spec in get/post/put -url
2606    in 'process' on UNIX an optional pipe handle for standard error can be specified
2607    if not present standard error gets redirected to stdout
2609    allow default functions to be defined as primitives
2611    shortened symbol param loop in evaluateLambda and evlaluateMacro
2613    getContext() now safe for debug mode
2615    'replace-assoc' gets additional (long overdue) syntax to remove associations 
2617    help-option in context console menu on newlisp-tk (not working on OS X)
2619 8.7.6 
2620    Help buttons now work on MacOS X in newlisp-tk
2622    fixed and issue with 'case' when a 'true' clause was assembled from an
2623    evaluated 'true
2625    handle some cases of self reference in set-nth/nth-set, i.e: the replacement sub
2626    expression itlself changes the place its supposed to be assigned:
2627    (set-nth i L (set-nth i L 99)) ) 
2629    : (colon) now will be returned as token even if attached to other following chars
2631    'parse' without regex parameter couild overrun string when it ended in \
2633 8.7.7
2634    regular expression support in 'directory'
2636    new 'number?' works like (or (float? x) (integer? x))
2638    in newlisp-tk help on hightlighted reserved word now works on MacOS X bringing
2639    up browser with manual on right spot.   (Ctrl-Left-Button for context menu)
2641    new (bayes-train list-A list-B [list-C ...] context-symbol) lists contain
2642    string tokens; and  (bayes-query list-query context), not documented yet, 
2643    still testing and modifying
2645    memory error fix in 'get-url' for chunked pages
2647 8.7.8 development release January 16th 2006
2648    'apply' now works on lists with unlimited length, no stack limit
2650     both Bayesan modes: Chain Bayesian and R.A. Fisher CHi2, are now supported with 
2651     new 'bayes-train' and 'bayes-query', working and tested, see manual for
2652     details
2654     moved 'prob-chi2' and 'pob-z' in manual to "Simulation and modelling" group
2655     together with 'bayes-train' and 'bayes-query'
2657     ATTENTION:
2659     calling into a context now changes the current run-time context:
2661     (context 'FOO)
2662     (define (foo) (context))
2663     (context MAIN)
2665     (FOO:foo) => MAIN ; old behaviour
2667     (FOO:foo) => FOO  ; new behaviour
2669     The new behaviour is more intuitive and is what most programmers would expect.
2670     Only applications using 'eval-string' or 'sym' (w/o specifying a context) are 
2671     effected. From all apps published by newlisp.org (blog, wiki, ide) only the file
2672     cgi.lsp packaged with these applications is affected and should be changed to
2673     the new cgi.lsp v.1.9 packaged with 8.7.8.
2675     Users should check all applications using 'eval-string' and 'sym' (or the
2676     deprecated 'symbol'). Pre 8.7.8 'eval-string' and 'sym' work with the runtime-
2677     context beeing MAIN, the context where the program was started. Now both functions
2678     work with the context they are part of:
2679     
2680     (context 'FOO)
2681     (set 'x 999)
2682     (define (foo s) (eval-string s))
2683     (define (bar s) (eval (sym s)))
2684     (context MAIN)
2685     (set 'x 123)
2687     (FOO:foo "x") => 123    ; old behaviour
2688     (FOO:bar "x") => 123    ; old behaviour
2690     (FOO:foo "x") => 999    ; new behaviour
2691     (FOO:bar "x") => 999    ; new behaviour 
2693     Changes to old code:
2695     (1) Replace all cgi.lsp in newlisp-ide, newlisp-blog and newlisp-wiki apps.
2696     the replacement will also work with newLISP versions previous to 8.7.8.
2698     (2) Change old apps by preceding the 'eval-string' statement with (context MAIN)
2699     or other required context change. Most of the time it's MAIN, the context where
2700     th whole program was started.
2702     (3) Change old apps adding explicitly the desired context in 'sym' as a
2703     second parameter, i.e. (sym s 'MAIN) or (sym s ctx) where 'ctx' is a context
2704     variable.
2706     The new behaviour is more intuitive and will make OO based programming based
2707     on contexts easier, it also increases isoloation of contexts because the current
2708     run-time context is not dependend from where the program was started originally,
2709     but only on the situation internal to that context.
2710     
2711 8.7.9
2712     added a configure script for compatibility with the popular autoconf/configure
2713     system. An installation of autoconf is not required but the same sequence
2714     of commands as on autoconf systems will work to make newLISP. newLISP's old
2715     ways of making newLISP will also still work:
2717     ./configure will just try to discover the platform and give a message
2718     make will try to discover the platform and make it
2720     if make cannot discover the platform it will give a message
2722     the module/context is now reported in error messages
2724     'load' will never cause the runtime context changed, but the same run-time
2725      context that was valid before the call to 'load' will be valid when 'load'
2726      returns
2728     'eval-string' now can specify the context under which it's string argument
2729     should be parsed and evaluated.
2731     'log' can be specify an additional parameter for a different base than the
2732     default natural log
2734     fixed a problem with reading very long UTF-8 source string constants
2736     big speedup of parse with regular expression, now scaling linear
2737     this enables tokenizing big documents in one piece
2739     args in functions should be evaluated in callers context
2740     (for: sym, context, eval-string)
2742 8.7.10
2743     raw string ouput (upper ascii in \nnn codes) in the newLISP commandline shell
2744     return value only when locale is the default "C" locale.
2746     'trim' was changing the original string in UTF-8 mode
2748     'find', 'replace' and 'search' now do binary in both regex and non-regex modes
2749      searched buffer, key/patterns string and replacement string can all contain 
2750      binary 0s
2752 8.7.11
2753     'string' now optimized double fast on string arguments
2755     getCreateContext() checking symbol protection
2757      'load' switches to context MAIN when loading file except if different
2758      context is specified in file, on return 'load' switches back to callers
2759      context (8.7.9)
2761      'reset' adds an additional parameter for restarting newLISP with same
2762      command line parameters with fresh memory in a new process space.
2764      many security improvements for OpenBSD compiles
2766      'reset' with optional 'true' (or non 'nil') parameter will restart
2767      newLISP with the same commandline parameters, reloading files etc.
2768      Not available on Win32 (execv() leave the system unstable when compiling
2769      with MinGW.
2771 8.8.0-p1 pre-release 1
2772      'reset' was always exiting on UNIX after the change in 8.7.11
2774      text buffers returned in 'net-eval' > 2048 characters and containing zero
2775      characters where throwing  a 'string too long error' 
2777 8.8.0-p2 pre-rlease 2
2778      Many doc corrections
2780          system symbols in set-nth was broken in 8.7.6
2782      self refs in set-nth now safe
2784      added  and changed some cases to qa_dot and qa_comma, now safe again
2785          for memory leak tests.
2787 8.8.0 released February 20th, 2006
2788      large file system support for files > 2 GB can now be turned on in newlisp.h 
2789      specifying #define LFS. File positions > 2^31 must then be specified as
2790      floats up to 999999999999999.0 for 999 terabyte (TB). 'seek' will always 
2791      return a float, file positions should be handled as floats using
2792      add, sub, mul, div instead +,-,*,/
2794          Documentation corrections (thanks Ryon, Nigel et al.)
2796      moved sql.c and types.c into the util directory
2798      updated newlisp.vim (v1.27) and newlisp.jsf (v.1.9)
2800      bug fix in cgi.lsp for '=' in key value strings
2802 8.8.1
2803      realloc compiler warning fix in nl-filesys.c/readBuffer()
2805      error-event, net-eval (edited 4/13/20060), signal and timer can now take 
2806      a function or lambda expression, previously only  a symbol holding a lambda: 
2807      (signal 2 exit) 
2808      (timer (fn () (println "hello")) 5)
2809          The old syntax still works too.
2811      Could not compile to a library (also fixed in re-release of 8.8.0)
2813      code cleanup for allocMemory() + memset() => callocMemory()
2815          now memory cleanup after exception in functor passed by:
2816      'filter', 'index', 'net-eval' and 'replace'. 
2818      implicit n-rest and slice on default lists and strings:
2819      (set 'foo:foo '(a s d f g h j))
2820      (2 foo) => (d f g h j)
2821      (-3 2 foo) => (g h)
2823      'save' and 'source' will always serialize from context MAIN perspective 
2824      (like 'load') (source reverted back in 8.8.2)
2826          fixed odd/even problem for 'rand' on FreeBSD, NetBSD, OpenBSD
2828 8.8.2
2829      'source' reverted back to 8.8.0 behaviour: serialize to current context
2831 8.8.3
2832      'signal' fixed format of internal symbol when passing functions
2834      suppress saving/sourcing system symbols starting with '$' unless specified
2835      specifically
2837      new built-in function 'real-path' translates a relative path into an
2838      absolute path. (read-path) same as (real-path ".") returns the current
2839      working directory
2841 8.8.4
2842     'real-path' now also in Win32
2844     handle self reference of result of while expression in condition
2846     allow (sys-info 3) or (sys-info -1) as with 'args' and 'main-args'
2848     'dup' will assume 0 for negative values
2850     when entering multiline expressions/definitions bracketed by [cmd] ... [/cmd]
2851     tags (each on a separate line] and hitting <enter><up-arrow> after the closing 
2852     [/cmd], newLISP compiled with lib readline support segfaulted, this long standing
2853     bug as finallly been fixed
2855     in 'xml-parse' when a closing CDATA tag was preceded by a forward slash, then
2856     an extra text element containing part of the closing tag was emmitted, 
2857     this is fixed
2859     support for MySQL v. 5.0 was added with mysql5.lsp
2861 8.8.5
2862     'read-key' now also works on MacOS X
2864     a bug in the second syntax of 'context' has been fixed now can do:
2865     (push i (context 'CTX "foo")) which now works if CTX:foo is a list
2867     'load' now can take http:// (and file://) URL prefixes in filnames to retrieve/load 
2868     files via HTTP from remote servers
2870     'xml-parse' now can take a context to place symbols/tags from SXML conversion
2872     zlib.lsp: new module for in memory and .gz compatible file compression 
2874     'net-eval' idle loop did not pass parameter (broken in 8.8.1)
2876     fixed a cell leak caused by 'while' self ref handling in 8.8.4
2878 8.8.6
2880     fix for error reporting of strings, which are too long
2882     an optional break condition in all looping constructs allows early return:
2883         (for (i from to step condition) ...)
2884         (dotimes (i N condition) ...)
2885         (dolist (i lst conditon) ...)
2886     When condition returns non-nil the loop returns with the value of the condition.
2887     When loop comes to end end the result of the last body expression gets returned.
2889     describing the effects of non-rectangular matrices in the "Data types" chapter
2890     and for the functions 'multiply', 'invert' and 'transpose'.
2892     sqlite.lsp vor SQLite v.2.x has been discontinued, use sqlite3.lsp and SQLite3
2894     error message was printed for each catch level where error was not caught,
2895     should only be printed on top level if uncatched
2897     new 'letex': let expression with expansion of let vars into body expressions
2898     before evaluation
2900     file open for append now atomic
2902 8.8.7
2903     new 'clean':
2904     (clean predicate? aList) works like:
2905     (filter (fn (x) (not (predicate? x))) aList)
2907     "Transfer-Encoding: chunked" did not trigger chunked decoding
2908     when more than one space after the ':' before 'chunked'
2910     $0 counter did not count first element when in remove mode of 
2911     'replace'
2913     'unify' does Prolog like unification with occur-check
2914     (unify '(f (g A) A) '(f B xyz)) => ((B (g xyz)) (A xyz))
2916     'unify' can take additional assoc params list:
2917         (unify '(A (B) X) '(A (A) Z) '((A 1) (Z 4)))
2918     => ((A 1) (Z 4) (B 1) (X 4))
2919         this is useful when chanining/nesting 'unify' to pass on
2920     a newly bound environment
2922     new mode in 'expand' with parameter assoc list:
2923     (expand '(a (B (c) (d a B))) '((a 1) (B 2) (c 3) (d 4))) =>
2924         (1 (2 (3) (4 1 2))) 
2925     
2926     new mode in 'expand' without symbol or assoc list:
2927         (set 'X 2)
2928         (expand '(a ((X)) b)) => (a ((2)) b))
2929         expands only uppercase variables for use with the new Prolog like
2930     'unify' function
2932     added file syntax.cgi for syntax highlighting in HTML of newLISP source
2933     to examples directory
2935 8.8.8
2936         eliminates several cell leaks in unify
2938         'pop' can be used on strings (pop str [pos] [len]) pos can be negative
2939     'push' can be used on strings (push str [pos]) pos can be negative
2940     'push' now will only do list mode when lst is list  or nil:
2941     (push new lst) lst has to be list  or nil, previous to string mode of push
2942     any existing datatype non-list was initializeed to () now only nil is allowed
2944     system var $idx contains the offset in dolist:
2945                  (dolist (e '(a b c d e)) (println $idx "->" e))
2946         0->a
2947         1->b etc.
2949     indexing mode of 'args' now works with multiple indices, i.e (args 3 -1)
2950     and is much faster
2952         implicit indexing syntax now allowed in 'nth-set' and 'set-nth':
2953         (set 'd '(a b c d e f g))
2954     (nth-set (d 3) 99) => d
2955     d => (a b c 99 e f g)
2956     or with default functor:
2957     (set 'db:db '(a b c d e f g))
2958     (nth-set (db -1) 99) => g
2959     db:db => (a b c d e f 99)
2960     This also works for strings and arrays
2961     
2962     many fixes/changes/additions in the manual and reference
2964 8.8.9
2965     'net-ping' didn't work on localhost
2967     'nth-set/nth-set' bugfix for new feature breaking old
2969      complete manual pass of the first 3 chapters by Michael - thanks
2971 8.8.10
2972     rotate works also on strings
2974     (cons item lst -1) for consing at the end of the list (undocumented)
2976     allow 0 length in chunked pages happening on put-url
2978     give error message for unterminated [text] in interactive console
2980 8.9.0 Release June 25th
2981     complete pass through Users Manual by Michael Michaels
2983     example programs in Appendix are now syntax highlighted
2985     dolist $idx safe for nested loops
2987     member works for strings
2989     (starts-with s k true) should behave like the default (starts-with s k)
2990     same with ends-with. This bug never surfaced because nobody specified
2991     anything for the default of case sensitivity
2993 8.9.1
2994     (rand x n) returned n+1 after fix in 8.9.0, also looped on n=-1
2996     new 'zero?' was broken for floats with fractional parts
2998     newlisp -c -d <portno> and newlisp -c controlled by inetd now understand 
2999     simple HTTP GET requests. This feature is mainly intended for use with
3000     (get-url "http://...) and (load "http://...) for retrieving or loading
3001     files from remote newlisp/inetd worker nodes in a distributed computing
3002     environment. 
3004     manual reviewed/edited up to and including the letter C
3006 8.9.2
3008     new (find-all pattern string [func [options]]) finds all regex-patterns in a 
3009     string and returns a list of matching strings:
3010     (find-all {\d+} "asdf2kjh44hgfhgf890") 
3011     => ("2" "44" "890")
3012     (find-all {(new)(lisp)} "newLISPisNEWLISP" (append $2 $1) 1) 
3013     => ("LISPnew" "LISPNEW")
3015     the parameters in 'format' after the format string can now also be
3016     given in a list: (format "%d %s" '(123 "hello"))
3018     'read-key' did not work on SUSE Linux
3020 8.9.3
3021      default values in function and macro parameters: (define (foo (a 1) (b 2)) (list a b))
3022     (foo) => (1 2)
3023     (foo 3) => (3 2)
3024     (foo 3 4) => (3 4)
3025     no performance loss for normal syntax without defaults
3027     format partly rewritten for better portability, 
3028     no tru64.c or ffi required after removing TRU64 for p_format in nl-string.c
3030 8.9.4
3031     removed tru64.c and changed makefile_true64
3033     starts-with and ends-with can do reguluar expressions and take a regex option number, 
3034     the old nil-option for case insensitivity still works and is translated to regex 
3035     option = 1, but is deprecated and will be eliminated in the future
3037     member for strings can take regular expressions, the old case insensitivity option
3038     will not work (member for strings was introduced only recently
3040     'symbol' the old writing for 'sym' has been eliminated
3042     fixed create context bug in newlisp-tk.tcl
3044     (<< num) works like (<< num 1), (>> num) like (>> num 1), (div num) like (div 1.0 num)
3046     function 'uuid' for creating Universal Unique IDs type 1 and 4 (RFC 4122)
3048     -C command option for Emacs forces prompt even if in pipe mode
3050     manual edits up to letter J, thanks Michael
3052 8.9.5
3053     type 4 UUID now closer to RFC 4122 specification
3055     trying to use set-nth or nth-set on an empty list corrupted the list
3057 8.9.6
3058     UUID type 1 got timestamp wrong, UUID 4 always started the same sequence
3061 -------------------------- 64 Bit Integers  ------------------------------------
3064 8.9.7
3065     all integer arithmetik 64 bit
3067     'factor' now takes integers with  max 64 bits and is 4x faster than previously
3069     'import', 'pack', still take ints as 32bit, taking the least significant 32 bits
3070         to pack 64bits do: (pack "ldld" int64 (>> int64 32)) for little endian
3071         for big endian do: (pack "ldls" (>> int64 32) int64)
3072     
3073     'format' has new 64 bit formats "%lld", "%llu" "%llx" for 64bit decimals and
3074     hex numbers on UNIX on Win32 use "%I64d", "%I64u", "%I64x"
3076     'format' now also recognises 'e' and 'E' scientific folating point formatting
3078     32 bit format strings "%d" "%u" "%x" will truncate on int64 numbers
3080     in float->int conversions floats out of range are converted to min/max 64 bit int
3081     -9223372036854775808, 9223372036854775807 and 18446744073709551615 for unsigned
3083         if an int32/uint32 is required by a function int64 values overflow to 
3084     min/max 32 bit int -2147483648/2147483647 and 4294967295 for unsignde int
3086     LFS (large file support) in file operations for files opened with 'open'
3087     now full 64 Bits (before 40 Bits)
3089     (for (i from to step)...) has float in i, only when optional step value is specified 
3090     (sequence from to step) produces float only when optional step value is specified 
3091     (dotimes (i N)...) always has integer in i
3092     this is consistend with 'inc' and 'dec'
3094     net-select now can go to 68 :) years waiting time specifying 64bit  higher timeout
3095     values and a timeout of -1 waits forever
3097         'net-close' with optional parameter: (net-close sock true) will suppress shutdown()
3098     before closing the socket. In this case net-close will wait for undergoing traffic
3099     to finish
3101     new function (gcd x y ...) for greatest common deviser of n arguments
3103     (pow x) defaults to (pow x 2)
3105     wrong format could segfault (this bug was introduced in 8.9.3)
3107     when replacing the first element in an association list with 'replace-assoc' and 
3108     an error occured when evaluating the replacement expression a segfault occured
3109     (thanks to Ingo for catching this)
3111     Note that bits shifts <<,>> now work on 64-bit integers too (added 2006-09-12)
3113 8.9.8
3114     'net-eval' now evaluates node parameters, before constants where required
3115     (set 'host "localhost" 'port 4711 'cmd "(+ 3 4)")
3116     (net-eval '((host port cmd)) 1000) = (7)
3118     'net-eval' if no timeout specified waits forever
3120     'net-eval' short form for one node: (net-eval host port cmd [timeout idle-loop])
3121     timeout an idle loop are optional: (net-eval host port cmd)
3123     Similar as for (load "http:// ...) and (get-url "http//..) in 8.9.1;
3124     server mode: newlisp -c with -p or -d, now understands HTTP PUT requests
3125     for saving/writing text files to a newLISP server node on UNIX using:
3126     (save "http://..." ...) and (put-url "http://...") ...)
3127     The server mode together with the beefed up 'net-eval', 'load', 'save'
3128     'get-url' and 'put-url' assemble a nice toolset for distributed applications
3129     with newLISP. The server node can also be started by inetd or xinetd. 
3130     (See manual). Must give full path-file-name in URLs i.e:
3131     (put-url "http://localhost:50001//Myfiles/afile.txt" (read-file "somefile"))
3133     newLISP server mode with HTTP capabilities in not yet available on Win32.
3135     target context MAIN is now disabled in 'def-new' and 'new' because it would
3136     cause ambigous situations when copying context vars after fixing a related
3137     bug: def-new and new on context-vars
3139     on UNIX a shared memory address obtained with 'share' can be unmapped using
3140     (share nil <address>)
3142         'put-url' with "Pragma: append\r\n" in header option appends when talking
3143     to newLISP server
3145     'read-file', 'write-file' and 'append-file' accept "http:// ..." and
3146     for HTTP mode and "file://..." for normal file mode.
3147     in HTTP mode they work exactly like 'get-url', 'put-url' and 'put-url'
3148     with "Pragma: append" in the header option.
3150     new QA file qa-net for testing newLISP server modes with:
3151     net-eval, load, save, read-file, write-file, append-file
3153     new QA file qa-utf8 to display UTF8 characters, this is not a test for 
3154     newLISP but rather the UTF8 display capabilities of the platform running on 
3156 8.9.9
3157     matrix operations now can be performed on arrays (previously only lists)
3158     matrix operations will return the type (list or arrray) which was given
3159     as input. In case of mixed input (i.e. in multiply), array type is
3160     returned.
3162     new function 'det' returns the determinant of a square matrix expressed
3163     as a list or array.
3165     fixed cell leak in define-macro when exercising default values
3167     64-bit integers where not displayed correctly in Win32 MinGW
3169 8.9.10
3170     'append', 'first', 'last', 'rest', 'slice' (and implicit slicing) now also
3171      available for arrays 
3173     (timer 'event 0) did not stop on Win32
3175     a fix in Curl_base64_decode() for bad base64 strings
3177     20% speed up for append on strings and join
3179 8.9.11
3180     'append' did not append correctly to lambda lists, which lost lambda attribute
3182     'qa-net' fixed (this file only tests on UNIX)
3184 8.9.12
3185     'int' did a signed instead of unsigned conversion
3187      'save' did not save global protected symbols in a way they
3188      could be reloaded
3190 8.9.13
3191      'local' like 'let' but no initialization of locals (all nil): 
3192      (local (x b x) body)
3194      'swap' has a third syntax pattern to swap the contents of symbols: (swap x y)
3196 8.9.14
3197      speedup and memory savings on 'apply'
3199      fixed INT64->string conversion in sym for True64/WINCC
3201      error checking on all reallocs()
3203      changed to realloc() in writeStream() routines
3205 8.9.15
3206         (join '(1 2 3)) was hanging, instead of wrong datatype error message
3207         
3208         support "\x41\x42\xff" in string hex format equivalent to "\065\066\255"
3210         new 'ref-all' returns a list of index vectors for all ref's of an expression
3211         (ref-all 'a '(a b c (d a f (a h a)) (k a (m n a) (x))))
3212         => ((0) (3 1) (3 3 0) (3 3 2) (4 1) (4 2 2))
3214 9.0.0 Release October 15th, 2006
3216 9.0.1
3217     'read-file' did not read extended http:// mode parameters correctly
3219     new 'doargs' works like 'dolist' iterates through (args)
3220         (define (foo) (doargs (i) (println i)))
3221     (foo 1 2 3) => prints 1 2 3
3222     implemented on top of 'dolist' also does $idx and break-expressions 
3224     'explode' takes extra parameter for # of characters (works on UTF-8 too):
3225     (explode "newlisp" 2) => ("ne" "wl" "is" "p")
3227     new 'utf8len' length of a string in UTF-8 characters
3229     new scalar matrix operations (matrix is a 2 dimensional list or array): 
3230     (set 'A '((1 2 3) (4 5 6))
3231     (set 'B A)
3232     (mat + A B) => ((2 4 6) (8 10 12))
3233     (mat - A B) => ((0 0 0) (0 0 0))
3234     (mat * A B) => ((1 4 9) (16 25 36))
3235     (mat / A B) => ((1 1 1) (1 1 1))
3236     Note that all matrix operations are in floating point
3238 9.0.2
3239     explode works on lists: 
3240     (explode '(a b c d e)) => '((a) (b) (c) (d) (e))
3241     (explode '(a b c d e) 2) => '((a b) (c d) (e))
3242     many structural transformations can be done combining 'explode' and 'transpose'
3244     fixed cell-leak in 'ref-all'
3246     in (mat <op> A B) B can be a single number: 
3247     (mat + '((1 2 3) (4 5 6)) 2) => ((3 4 5) (6 7 8))
3249     some fixes for HTTP mode on UNIX
3251     HTTP mode now working on Win32 but with some timing issues,
3252     see header of file qa-net for details
3254 9.0.3
3255     $idx was broken after 9.0 starting with 1 instead of 0
3257 9.0.4
3258     fixed midnight rollover in 'timer' on Win32
3260     new (round <number> <precision>) rounds a number to precision digits
3261     left (positive) or rigt (negative) of the decimal point
3263     new hyperbolic functions sinh cosh tanh
3265     fixed push -1 optimization when popping only remaining element in list
3267     new 'ostype' symbol holds os type string
3269     new 'delete-url', needs to be enabled on target www server (most aren't)
3270     else => "ERR: server code 405: HTTP/1.1 405 Method Not Allowed\r\n"
3271     and must have file permissions set accordingly on target file;
3272     additional parameters like timeout and custom headers are available
3273     exactly as in 'get-url', the feature is also available in:
3274     (delete-file "http://......"), similar to HTTP mode in 'read-file', 
3275     'write-file' and 'append-file' and is also implemented in newlisp
3276     server mode (not working on Win32 newlisp server mode)
3278     GET queries are now supported in newlisp server mode (not yet Win32)
3280 9.0.5
3281     'and' and 'or' now () when failing and last evaluation was ()
3283      GET and POST cgi now working on UNIX and Win32 (9.0.6)
3285      new -w <working-directory> commandline switch 
3286      useful for changing working directory after newlisp startup:
3287          newlisp -c -d 8080 -w /Users/lutz/ide
3288      this is the same as going into the directory and starting newlisp
3289          newlisp -c -d 8080
3291      newlisp can now run as a webserver doing newlisp based CGI. It runs both
3292      newlisp-ide-x.x.tgz and newlisp-wiki-x.x.tgz, to run the ide on the local
3293      machine:
3294          newlisp -c -d 8080 -w /usr/home/www/ide
3295      then in a webbrowser enter the URL http://localhost:8080/
3296      index.cgi and index.html are looked for by default if no filename is
3297      specified in URL
3299      httpd example programm has been eliminated, because httpd mode now built-in
3300      into newLISP
3302      'file-info' now correctly reports filesizes > 2G (2147483647) bytes
3303      now also can index: (file-info <path-name> 0) => filesize
3305      the -x commandlne switch has been disabled, use newlisp server modes instead
3307      fixed problems with break-condition in dolist/doargs introduced in 9.0.1
3308      fixed problem when break-condition is the loop symbol itself 
3310 9.0.6
3311      'nth' now with similar syntax options as 'net-set/set-nth'
3312      new in 'nth':
3313         (nth (L <idx1> <idx2> ...))
3314         (nth (L <aref>)) ; where <aref> is a list of indices
3315      new in 'set=nth', 'nth-set'
3316         (set-nth (L <aref>) <newval>)
3317         (nth-set (L <aref>) <newval>)
3319      'file-info' now distinguishes in the mode field (12th bit) between links 
3320      and normal files: 
3321         (define (link? fname) (= 0x2000 (& (file-info fname 1) 0x2000)))
3322      not on Win32, who knows the correct Win32 function for lstat() on MinGW gcc?A
3324 9.0.7
3325      HTTP server mode looks for procedure httpd-conf for processing/transforming
3326      the path-file-name of the request. This way security checks, remappings etc
3327      can be performed. In this case a file httpd.conf containing the definition
3328      of httpd-conf can be loaded when starting the server:
3329         newlisp httpd.conf -c -d 8080 -w www/httpddocs
3330      if the file httpd.conf contains:
3331         (define (httpd-conf request) 
3332             (if (ends-with request ".exe") "errorpage.html" request))
3333      now any request for a file which finishes in .exe will be transformed into a
3334      request for errorpage.html containing an error message for the client.
3336      fixed HTTP server mode crash on LINUX
3338      fixed 'nth' which failed on old mode when indices where expressions
3340 9.0.8
3341     new syntax of 'nth' should work on protected symbols
3343     new syntax of 'set-nth/nth-set' did not check for index maximum of 16
3345     make httpd-conf safe for non-string returns
3347     server mode now correctly remaps directory paths when performing CGI
3348     in directories not web root, i.e. http://ahost.com:/ide/ will work with CGI,
3349     note that directories need to end with "/" to make the resolve to index.html
3350     or iondex.cgi work correctly
3351     
3352     new -http flag like -c (suppressing prompts) but only allow HTTP commands
3353     no newLISP statements (-c allows both), this is a 'safe' HTTP mode not
3354     allowing 'net-eva' or other commandline protocols.
3355     The following configurations can be used:
3356         
3357     (1) serve HTTP requests only
3358         newlisp -http -d <portno> -w <www-root>
3359         newlisp -http -w <www-root> # started vi INIX inetd or xinetd
3361     (2) serve 'net-eval', HTTP and command line without prompt
3362         newlisp -c -d <portno> -w <www-root>
3363         newlisp -c -w <www-root> # started via UNIX inetd or xinetd
3364     this mode is useful when running newLISP server in a controlled environment
3365     behind a secured firewall in a distributed computing environment where 
3366     newLISP server must answer to both: net-eval and HTTP requests.
3368     Note that on Win32 a \tmp directory must be created on the same drive
3369     which is current for CGI processes for newLISP HTTP mode to work correctly
3370     for CGI processing. On UNIX /tmp is standard.
3372     fixed 'invert' crash (since v.9.0.2) on not-invertible matrices
3374     upgraded to better random number generation in 'rand' and 'random'
3375         (not available on Win32)
3377     fixed (rotate '(1) -1)
3379 9.0.9
3380     another fix for 'nth' and protected symbols
3381         
3382     if 'httpd-conf' returns 'nil' nothing will be processed, this can be
3383     used to completely hand off CGI request processing to httpd-conf
3385 9.0.10
3386     moved env variable creation of DOCOUMENT_ROOT earlier, so it is available
3387     in httpd-conf.lsp
3389     added httpd-conf.lspi to the examples directory in the source distribution,
3390     now filters csertain file extensions and does not allow access to files 
3391     outside the web directory tree specified with the -w option:
3392         newlisp httpd-conf.lsp -http -d 8080 -w /wwwdocs
3393     or outside the startup directory if no -w is given, also takes care
3394     of request for directories when no trailing '/' is present
3396     cleaned up nthArray  and implicitIndexList/array code
3398     trying to 'set-nth' and empty list should return the empty list not nil
3400     more tests in qa-dot and qa-comma for symbol protection and 'nth'
3402 9.0.11
3403     rework of whole indexing area, now correctly honors symbol protection in
3404     all modes if symbol is nested inside an expression. The old flat mode: 
3405       (nth i j alist)
3406     is much slower, instead use one of the following modes:
3407       (nth (alist i j)) or (alist i j) or (nth (alist aref)) or (alist aref)
3408         ehere aref is a list of nymbers, i.e.: (1 2), same modes in set-nth,nth-set
3410     reworked nil and empty list detection throughout all files. 'nil' and the
3411     empty list '() are logic false, things work like this:
3412         (map true? '(nil () 0 "")) => (nil nil true true)
3413         (map nil? '(nil () 0 "")) => (true nil nil nil)
3414         (map not '(nil () 0 "")) => (true true nil nil)
3415         (map null? '(nil () 0 "")) => (true true true true)
3416     in v9.0.0:
3417         (true? '()) => true, which was wrong because also 
3418         (true? (not '()) => true, which is correct
3419     this affects filter and index usage with true? as predicate, but does not
3420     affect: if, unless, while, until, do-while, do-until, which always worked
3421     correctly assuming '() as logical false
3423     'name' also can take contexts i.e.: 
3424         (set 'L:L '(a b cd)) (set 'x L) (name x) => "L"
3426     now when evaluating a context by itself it returns the default symbol
3427     if the default symbol does not exists it gets created:
3428           (set 'foo:foo '(a b c d e f g))
3429           (foo) => foo:foo
3430           (eval (foo)) => '(a b c d e f g)
3431     this can be used for reference passing:
3432           (define (mysort ctx func) 
3433               (sort (eval (ctx)) func))
3434           (mysort foo >) => (g f e d c b a)
3435           foo:foo => (g f e d c b a)
3436     previously a passed context could only be used for functions using
3437     index lists and implicit indexing as in (nth-set (ctx idx) value) etc.
3438     now functions working on the entire list can be used with reference passed
3439     data. THIS FUNCTIONALITY HAS BEEN DISABLED IN 9.0.14, as a workaround
3440     use (sym (name ctx) ctx) to retrieve the functor
3442 9.0.12
3443     the newLISP-tk installer now contains a file md5-checksums.txt with
3444     checksums for newlisp-tk.exe, newlisp.exe and newlisp.dll
3445     
3446     bit not ~ was still on 32 bits now 64 like all integer arithmetik since 9.0
3447     
3448     all buffer variables moved to size_t and ssize_t type in preparation for
3449     64-bit model LP64 compile for 64-bit memory addressing.
3450     
3451     get-char, get-int, get-float and get-string failed when using on 64-bit
3452     addresses, which where not truncated correctly on little-endian CPUs.
3453     This affected the mysql.lsp and mysql5.lsp modules when using with newLISP
3454     versions 8.9.7 and later and on Intel CPUs. On Mac PPC and other big-endian
3455     architectures this problem did not occur. All other modules where not affected
3456     on any architecture.
3457     
3458     <,>,<=,>=,= when given only one argument compare agains 0, "" or (),
3459     all other data types return true as before
3460        (< 1) =>nil, (= 0) =>true, (> "abc") => true, (= "") =>true etc.
3462     64-bit file poisitioning fixed under Win32 (now runs qa-lfs)
3464 9.0.13
3465     fixed problems in the new <,>,<=,>=,= single argument feature
3467 9.0.14
3468     further fix in 64-bit ~ function
3470     a context feature intoduced in 9.0.11 to extract the default functor from an 
3471     unknown context has been disabled, instead use the workaround:
3472         (set 'foo:foo '(a b c d e f g))
3473         (set 'ctx foo)
3474         (sym (name ctx) ctx) => foo:foo
3475         (sort (eval (sym (name ctx) ctx)) >) => (g f e d c b a)
3476         foo:foo => (g f e d c b a)
3477     a more elegant way will be supplied in the future
3479     both string and list versions of 'explode' now return an empty list if optional
3480     length <= 0
3482     'nt-set/set-nth' did not honor constant protection of default functors
3484         now compiles for LP64 64-bit memory model on 64-bit LINUX using the makefile:
3485        make -f makefile_linux64LP64
3486     or simply:
3487        make linux64LP64
3489     the old makefile for making a ILP32 32-bit newlisp on 64-bit LINUX has been
3490     renamed:
3491        make -f makefile_linux64ILP32
3492     or simply:
3493        make linux64ILP32
3495     tested on a AMD64 CPU with LINUX 2.6 64-bit Fedora 3
3497     enjoy up to 17,179,869,184 gigabytes or 16 exabytes of RAM, on AMD64
3498     the LP64 compiled version is 12 to 25% faster than the ILP32 version
3500     avoid sign extension when unpacking signed 32bit into unsigned 32bit displayed
3501     in 64-bit: (unpack "lu" (pack "ld" -1)) => (4294967295) ; not (-1)
3503     added 'get-long' and "Ld", "Lu" 64-bit packing formats 
3505     new 'parse-date' for parsing date strings (not yet working for Win32)
3507 9.0.15
3508     more manual additions and changes, moved all predicates into own group
3510     fixed dynamic symbols compare
3512     fixed warnings fo missing -Wno-strict-alasing GCC message on older Solaris
3513     and BSD GCC versions
3515     fixed parsing of [text] tag on 64-bit compiles
3517     fixed 'flt' for TRU64 compile
3519     tried Linux debian package, Ok on Ubuntu, will be included from now on
3520     in newlisp.org releases, but appreciate help in getting it into Ubunto
3521     and Debian for inclusion into their lists
3523     The Tru64UNIX compile using makefile_tru64 is now a large pointer model LP64
3524     compile, thanks to Peter for porting and testing on an Alpha CPU
3526     added makefile_darwin_LP64 for 64-bit compile/link, but cannot test it
3527     on my  PPC-G4 (I believe I need a G5 for this)
3529     fixed 'char' on UTF-8, bug due to 64-bit changes
3531     LP64 mode for Solaris workng, use makefile_solarisLP64
3533     new 'make test' to run qa-dot, qa-net, qa-xml
3535 9.0.16
3536     OS/2 compile flavor now part of distribution
3538     fix for Solaris in some networking routines broken in 9.0.2 !
3540     fixed: (dup x -1), which was broken since 9.0.14
3542     'make test' now does qa-dot, qa-xml, qa-setsig, qa-net all one after
3543      another. The qa-setsig script will drop out on Win32 with a message.
3545      A small change in the 'test-process' routine in the qa-dot script will 
3546      cause less failure message for 'process' on slow computers.
3548      qa-dot now will set to locale "en_US' when testing an UTF-8 version,
3549      this has been done to suppress failure messages for UTF-8 'upper-case'
3550      and 'lower-case' which do not work in the default 'C' locale in
3551      UTF-8 mode on some platforms.
3552      qa-comma always sets to "de_DE"
3554      'asinh', 'acosh', 'atanh' complete the triginometric functions
3556      up to 8 'callback' routines cain be defined to be called by an imported
3557      library, example for Glut lib:
3558         (glutDisplayFunc (callback 0 'draw))
3559         (glutKeyboardFunc (callback 1 'keyboard))
3560         (glutMouseFunc (callback 2 'mouse))
3561      up to four parameters (32-bit ints) are received by the user-defined
3562      callback handlers. See the file newlisp-9.0.16/examples/opengl-demo.lsp
3563      for details. Note that OpenGL passes floating point data, which are only
3564      handled correctly on x86 based platforms. On the Mac PPC this file will
3565      not work (although the callback interface itself does work, but no
3566      drawing will be visible).
3568 9.0.17
3569      fixed 'non-blocking' bug for write on Linux, thanks Peter!
3571      number of maximum cells was not reported correctly in 64-bit newLISP
3573      'ref' and 'ref-all' now can take a comparison functor (like 'sort') for
3574      comparison: (ref-all key List func), if no func is specified
3575      assumes = (equal), ref-all now much faster on big lists with  many finds.
3577      'find' and 'replace' (both in their list forms) can take a comparison
3578      functor like 'sort', 'ref', 'ref-all'.
3579      'replace' for lists now also processes $0 (old entry) in replacement 
3580      expression. 
3582      using replace for lists with 'match' or 'unify' as comparison functor 
3583      makes 'replace' as powerful as 'replace for strings with regular expressions.
3584      This is an important new feature with many applications.  It also gives
3585      the much overlooked 'match' and 'unify' the more frequent usage they deserve.
3587      new logic functions 'exists' and 'for-all' apply a condition to each
3588      element in a list and return the result.
3590      match now will accept atoms in the entry expressions to make it usable 
3591      for 'ref' and 'ref-all'
3593 9.0.18
3594      fixed a bug in (pop <string> <idx>)
3596 9.0.19
3597      (find <str> <str> [<option>]) will do both: regex if option is a number
3598      (as before) and function comparison if option is a funtor or user-defined
3599      function.
3601      fixed 'pop' on an empty string
3603      fixed newlisp -h where new options didm't show
3605      'file-info' was hanging on name pipes now shows 0 for file size
3607      trying to start server mode with no or zero port will fail
3609      'array' will give error message on negative parameters, before
3610      they where simply skippped
3612      Ctrl-C signal handler crashed on Linux when in -d mode
3614      'explode' will take optionl 'true' to omit chunksize too short when
3615       chunk size is given (strings and lists)
3616       (explode "newlisp" 3) => ("new" "lis" "p")
3617       (explode "newlisp" 3 true) => ("new" "lis")
3619 9.0.20
3620      -l and -L mode now always must specify a path-name for the
3621      log file (either attached or detached):
3622          newlisp -l /usr/home/www/logfile.txt
3623      logging is allowed in all modes. -l will only log network connections
3624      or commandline or net-eval requests input. -L will log also HTTP requests 
3625      and newLISP output from commandline and net-eval
3627      doc installation directory changes from /usr/share/newlisp/doc to
3628      /usr/share/doc/newlisp
3630      CodePatterns.html ammended with chapter for HTTP only server mode
3631      MemoryManagement.html ammended with implementation chapter
3633      newLISPdoc.html and inewLISP-X.x-Release.html added to install 
3634      in /usr/share/doc/newlisp, this file will only change on mayor
3635      releases
3637     
3638 9.0.21
3639      a crash bug in 'match' introduced in 9.0.17 was fixed
3641      new 'curry' (curry f x) => (lambda (y) (f x y)), makes a unary opearator
3642      out of a binary operator, useful when using 'match' 'unify' and other 
3643      binary ops in: 'filter', 'clean', 'index' etc., i.e:
3644      (filter (curry match '(a *)) '((a 10) (b 5) (a 3) (c 8) (a 9)))
3645      => ((a 10) (a 3) (a 9))
3647 9.0.22
3648      integrated syntax highlighting into newlispdoc, which now is part of
3649      installation in /usr/bin/ and with man page in /usr/share/man/man1 
3651      added media types for .pdf .mov. .mpg  and .mp3 in HTTP request handling
3652      additionally to .jpg .png .gif
3654      protect stack from overflow when loading huge contexts in sysEvalString()
3657 9.1.0 Release February 15th
3659 9.1.1 Release March 15t
3660      safer memory allocation for net-ping when using wildcard *
3662      new module crypto.lsp with md5 and sha1 hash functions
3664      fixed bug in Win32 version when stdout of more than 2048 chars
3665      in shell window
3667 9.1.2
3668     net-peer, net-local and net-receive-from where dropping the third digit of the
3669     least siginificant IP group in the IP-string return value on 12 digit IP numbers
3671 9.1.3
3672     makefile_osxLP64 produces a 64-Bit version on intel core 2 duo which passes
3673     'make test'. Use: make osxLP64 or: make -f makefile_osxLP64
3675     some cleanup in nl-sock.c
3677     newlisp-tk.tcl now detects default browser in Debian LINUX
3679 9.1.4
3680     passed all rand() to newer, better random() in nl-math.c
3682     local domain UNIX sockets using: (NOTE THAT SYNTAX CHANGES IN 9.1.5)
3683                  (net-listen <str-path> "local") and (net-connect <str-path> "local")
3684     then use 'net-accept', 'net-select, 'net-send' and 'net-receive' as usual
3685     see also file qa-local-domain
3687     fixed many problems with 'net-ping' which did not work correctly on
3688     machines rejecting out of sequence errors in ICMP packets. Now will handle
3689     EHOSTDOWN and EHOSTUNREACH errors correctly
3691     'net-ping' now also can accept ranges, e.g: (net-ping 192.168.1.120-150) 
3692     additionally to the '*' star, i.e: (net-ping 102.168.1.*)
3693     superuser permission are required for net-ping
3695     added MySQL:escape to mysql.lsp (v.4) and mysql5.lsp, thanks to Jeff
3696     for submitting this addition
3698     added HTTP_COOKIE to environemnt variables set by newLISP HTTP server
3699     mode
3701     leading and trailing white space now gets removed from environment variables
3702     set by newLISP server mode, specifically in HTTP_HOST, HTTP_USER_AGENT and 
3703     HTTP_COOKIE
3705 9.1.5
3706         changed the way of specifying local-domain UNIX sockets in net-connect and net-listen:
3707     (net-connect <local-socket-path>) ; don't specify a port
3708     (net-listen <local-socket-path>) ; specify socket-name instead of port)
3710         local domain UNIX socket support in newlisp -d server mode and net-eval:
3711     server mode: newlisp -d /tmp/mysocket
3712         client: (net-eval "/tmp/mysocket"  0 "(+ 3 4)") => 7
3714     speedup utf8_wlen()
3716     load and save do not use lisp source anymore but call getPutPostDeleteUrl() directly
3717     this increases speed and leaves get-url/put-url to be renamed if required
3719     guard against partial send()'s in net-eval and HTTP mode on Win32
3721     'net-eval', 'net-ping', 'net-receive-from' and 'net-receive-udp' now set
3722     timeout error for retrieval with 'net-error'
3724     'net-ping' will stop waiting for response when the number of responses
3725     reaches the number of pings even if no max count was not specified.
3727     a fix for local-domain UNIX sockets on OS/2
3729     reorderd "3. Functions in groups" subchapters adding group "Pattern recognition"
3731     now any keystroke/mouse-button will close the about windows in newLISP-tk.
3732     Before only <esc> worked
3734 9.1.6
3735     newlisp-x.x.x/util/nclocal.c utility program similar to nc/netcat but for
3736     local domain UNIX sockets. 
3738     When deleting contexts the context symbol now will stay and not be deleted 
3739     but demoted to a normal unprotected symbol.
3741     It is now possible to create contexts on local variables in 'define', 
3742     'lambda' or 'local' expressions without error messages on usage of these 
3743     symbols/variables subsequently. After leaving the 'define', 'lambda' or 
3744     'local' the variable symbols will be returned to their previous status in 
3745     the upper scope. Before this version they staid protected. 
3746     Note: For efficiency reasons this coding practice is not recommended but 
3747     will not cause an error anymore.
3749         use strncmp() instead of strcmp() in netReieive() to avoid buffer overflows
3751     read empty [text][/text] tagged text correctly
3753     newlisp doc v.1.1 fixes formatting of the syntax line when parenthesized 
3754     expressions are part of the syntax line.
3756 9.1.7
3757     a fix for ends-with when using with regular expression option (did not anchor
3758     correctly to the end)
3760     net-listen didn't evaluate the port parameter since 9.1.4 when local domain 
3761     sockets where introduced
3763 9.1.8
3764     fixed a crash bug on Win32 when using a permission mask in make-dir
3766         '%%' as a last spec in format was not translated correctly
3768 9.1.9
3769     when a system wide error handler defined with error-event contained 'nil
3770     newLISP would go into a loop caused by an error invoked by the error handler
3771     now an error-event defined with a symbol containing nil will simply to
3772     nothing.
3774     xml-parse now can take an optional callback functor (see manual for detail)
3776     on the Win32 UTF-8 versions UTF-16 file-path names now are processed
3777     correctly, thanks to Michael Sabin for contributing the file win32-path.c
3779     this is the first release containing the source of Java based GUI-server 
3780         in the guiserver subdirectory of the distribution. guiserver.jar is
3781     already prebuilt contained in the source distributin and installed
3782     drng the normal newlisp install. It also can be installed individually
3783     descending into newlisp-x.x.x/guiserver (read README.txt found there)
3785     new global? property function checks if a symbol is global
3786     new protected? property function checks if a symbol s protected
3788     a bug in push on strings when the index was > the length of the string
3789     and a fix for utf8
3791 9.1.10
3792     this development release was made for additions in newLISP-GS
3794 9.1.11
3795     fixed a bug in explode when specifying N > length of string
3797     negative second length in slicing now interpreted as offset
3798     from the right: (2 3 "abcdefg") => "cde", (2 -3 "abcdefg") => "cd"
3799     before negative length would be interpreted as going to the end
3801     implicit n-resting on strings was UTF-8 sensitive which it should
3802     not be, all implicit indexing and slice on strings is on byte borders,
3803     only first,last,rest are UTF-8 sensitive.
3805     fixed crash when net-select was interrrupted by timer, traceExit()
3806     was not protected from entry when signal handlers where defined
3808 9.1.12
3809     newlisp invoked on the command line can take URLs for filespecs to execute
3810     remote programs: newlisp http://newlisp.org/example.lsp
3812     join now can take an extra flag to force a joint string after the last element:
3813     (join '("A" "B" "C") "-" true) => "A-B-C-"
3815 9.2.0 Release August 15th, 2007
3817 9.2.1
3818     rewritten 'count is about 3-4 times faster than before when counting 100 
3819     in 1,000,000 elements. Only on Mac OS X and other UNIX. On the older
3820     MinGW GCC C library the required functions tsearch() and tfind() are not
3821     available.
3822     
3823     fix for special characters in cookies cookies in cgi.lsp
3825     'pack' now can take lists for data:
3826     (set 'lst '("A" "B" "C"))
3827     (set 'adr (pack "lululu" lst))
3828     (map get-string (unpack "lululu" adr)) => ("A" "B" "C")
3829     This was imnplemented in response to a request for a (address <list-of-strings>).
3830     Note that the lst should not be changed and be referenced directly in 'pack'
3831     so the pointers passed by 'adr' are valid. 'adr' would be a 'char * adr[]' in the 
3832     C-programming language
3834     fixed cell leak in indexed sys-info and indexed file-info
3836     new 'dostring' iterates over a string with character values in loop variable. 
3837     On UTF-8 compiled newLISP UTF8 character values are returned by the loop variable
3839     documented 'bind' : 
3840     (bind '((a 1) (b 2) (c 3))) same as  (map set '(a b c) '(1 2 3))
3841     This function was already in earlier versions, but not documented.
3843     on startup NEWLISPDIR will be registered as either: /usr/share/newlisp
3844     on Mac OS X / UNIX as: PROGRAMFILES/newlisp on Win32, where ROGRAMFILES
3845     is an exisiting Windows environmnt variable. (env "NEWLISPDIR") =>
3847     additions in guisserver.lsp and newlisp-edit.lsp, see guiserver/CHANGES
3849 9.2.2
3850     iterators segfaulted when evaluating the iterator variable was the last
3851     statement in the iterator body: dostring, dolist, dotree. 
3852     Added test-cases for this situation.
3854     (main-args) could be pop'ed which was due to an implementaion error, main-args
3855     cannot be popped any more, if necessary, assign to another variable first:
3856     (set 'margs (main-args)), (pop margs) etc.
3858     additions in guisserver.lsp and newlisp-edit.lsp, see guiserver/CHANGES
3860 9.2.3
3861     addtions, changes in guiserver.lsp and newlisp-edit.lsp, see guiserver/CHANGES
3862     for details
3864     misc. code cleanups in core
3866 9.2.4
3867     in 'set-nth/nth-set' when no replacement arg is given, the old value should
3868     be returned only as in 'set'. Was replacing with nil.
3870     fixed a cell-leak in 'set' when using mutliple arg pairs.
3872     allow symbols for the name in (context <ctx> <name> [<value>]), previously
3873     only strings where allowed.
3875     speedup in symbol deletion
3877     in (signal <sig-no> <handler | flag> the nil flag now specifies SIG_IGN
3878     and the true flag SIG_DFL. Before 9.2.4 nil would specifiy an empty newLISP
3879     handler and the true flag was not available.
3881     reworked 'process' now creates the new process without the previous
3882     time and memory overhaead (on UNIX) of an extra newlisp fork which stayed
3883     in memory until the newly created process had finished.
3884     In most cases the full path must be given for the command in 'process'.
3886     new 'destroy' to destroy  processes created with 'process' or 'fork'        
3887     see reworked docmentation for 'fork' and 'process'
3889     fixed a bug when sorting (ordered compare) mixed  boolean values/symbols
3891 9.2.5
3892     'dup' without the repetition number parameter will assume 2, i.e:
3893      (dup 'x) == (dup 'x 2) => (x x) ;  Thanks to Lance Bradley for this idea.
3895     'find-all' will return an empty list '() when nothing is found, previously
3896     nil was returned.
3897     
3898         ':' now also works like a function and can be attached to symbol following
3899     it. The colon operator forms a context symbol from the symbol following it
3900     and the context symbol found as the first element of the list contained
3901     in the next argument.
3903     (define (rectangle:area p)
3904             (mul (p 3) (p 4)))
3906     (define (circle:area c)
3907             (mul (pow (c 3) 2) (acos 0) 2))
3909     (set 'myrect '(rectangle 5 5 10 20)) ; x y width height
3910     (set 'mycircle '(circle 1 2 10)) ; x y radius
3912     (:area myrect) => 200 ; same as (rectangle:area myrect)
3913     (:area mycircle) => 314.1592654 ; same as (circle:area mycircle)
3915     This can be used for simple OO programming where objects are represented 
3916     as lists and methods are packaged contexts / namespaces serving as object
3917     classes. The colon ':' operator implements polymorphism by looking up
3918     the class / context of the object as the first symbol in the object list.
3920     'integer' the long writing of 'int' will be eliminated in the next
3921      development version!!!
3922      new versions newlisp-ide-4.1.tgz and newisp-wiki-4.2.tgz have changed
3923     'integer' to 'int'
3925     better platform independent library detection routines in modules:
3926     crypto.lsp, gmp.lsp, sqlite3.lsp and zlib.lsp
3928     crypto.lsp has new 'crypto:hmac' as of RFC 2104 used for Amazon REST API
3930     new util/newlisp.vim, for matching .vimrc see http://newlisp.org/code/vimrc.txt
3932 9.2.6
3933     Moved to MinGW 5.1.3 with gcc v.3.4.5 and eliminated declarations for
3934     struct timezone and gettimeofday(). Changed sleep() to Sleep().
3935     -> grep 3\.4\.5 *.c <- shows all changes 
3937     Improved random number generation with 'rand' now gives better integer quality
3938     random numbers on Win32, which only does 16 bits in 'C' random(), even for
3939     ranges close to or > 16bit.
3941     newLISP GS 1.07 now automatically restarts monitor shell, if required by run-command.
3943     newLISP GS 1.07 now loads, saves and displays UTF-8 correctly in editor and 
3944     interactive monitor area
3946     new manual chapter: "Object Oriented Programming in newLISP" explaining
3947     newLISP object format and how to use the new : (colon) operator.
3949 9.2.7
3950     changes in newLISP-GS to automatically detect and switch to UTF-8 mode, depending
3951     on the newLISP executable. Edited chapter "17. Object-Oriented Programming in newLISP"
3952     (thanks Michael Michaels)
3954         In Guiserver 1.08:
3955     new gs:window-moved and gs:window-resized. See new demo file move-resize-demo.lsp
3957 9.2.8
3958         get-url, post-url, put-url and delete-url have been extended and reworked:
3960     - now return extended error information if supplied by the server, before only 
3961     the error cocd was reported.
3963     - now can take a trailing "debug" in the option string, i.e."list debug" or 
3964     "header debug" or simply "debug" when neither "list" or "header" applies. The 
3965     debug option will print all outgoing info onto the console screen.
3967     in some situations an empty document returned was reported as "ERR: empty document"
3968     when ist was not an error but intended by the server.
3970     in some situations customheaders were only taken when the option string was
3971     present too. The manual showed the option-string optional, which it is.
3973     the server response code 204 is now handled correctly
3974    
3975     when using a custom header "Content-type:" must be defined for put-url, before
3976     "Content-type: text/html\r\n" was assumed. 
3978 9.2.9
3979     last element speed optimization for 'last', 'nth', 'nth-set', 'set-nth' and
3980     implicit indexing with index -1. 
3982     'sort' can now be used on arrays too
3984     changes in newLISP-GS for editor keyboard short cuts and list-boxes, see
3985     guiserver/CHANGES file
3987     the newlispdoc utility has improved pager headers and a feature to point to
3988     other module collections from the index page.
3990 9.2.10
3991     new functions to modify nested lists by reference via a key:
3993     (set-ref (L key) value)
3994     (ref-set (L key) value)
3995     (set-ref-all (L key) value)
3997     basically 'set-ref' and 'ref-aset' are shortcuts for doing a ref and
3998     using set-nth/nth-set on the result:
4000     (set-ref (L key) value)) equivalent to (set-nth (L (ref key L)) value)
4001     (ref-set (L key) value)) equivalent to (nth-set (L (ref key L)) value)
4003     all ref functions support either:
4004            (<func> (L key) [...]) or (<func> key L [...]) 
4005     syntax similar to nth functions working with indices instead of keys
4007         like with 'set-nth' and 'nth-set' L can be the context of the default
4008     functor L:L containing the list for passing lists by reference
4010     all 8 'nth' and 'ref' functions together now constitute a complete set of
4011     functions for indexing, referencing, accessing, modifying and search and
4012     replace on nested lists. All 8 functions are also capable of receiving
4013     lists passed by reference via context default functors, passed only by
4014     their context name. All functions now offer the same two syntax patterns
4015     with either one index and the key followed by the list:
4016         (<function> <idx>|<key> <list> ...)
4017     or the parethesized formi, which also can take contexts as default functors:
4018         (<function> (<list> <idx>|<key>) ...)
4020     on Win32 function 'directory?' now will accept training slahes '\' or '/'
4021     before it would always fails on trailing slashes
4023 9.2.11
4024    'ends-with' with regex options failed when alternative pattersn where used
4025     and the succeeding pattern was last
4027     fixed directory? for drives on Win32
4029     define MY_RAND_MAX as 0x7FFFFFFF for TRU64 flavor
4031     added mysql51.lsp module for MySQL v.5.1
4033 9.2.12
4034     indices overshooting the list at the end (too big positive index) and
4035     indices overshooting the list at the beginning (too big negative index)
4036     now cause a "list index out of bounds" error. Before the last or
4037     first element of a list was returned instead.
4039     This affects the functions: nth, set-nth, nth-set, push and pop
4041     If more indices are present than nesting levels, these are discarded as before.
4042     Popping an empty list will return nil.
4044     Fixed a stack overflow in the new 'set-ref-all'
4046     Changes in the newlisp-edit.lsp GS editor, see guiserver/CHANGES
4048     The environment variable NEWLISPDIR will only be created and set if it does
4049     not exist. An exisiting definition of NEWLISPDIR will not be overwritten.
4051 9.2.13
4052     a bug fix in set-nth, nth-set, ser-ref, ref-set (in getList() ) when first 
4053     element in an implicit index parameter list evaluates to a context
4055 9.2.15
4056     assoc, set-assoc (old replace-assoc) and new assoc-set all take mutiple keys
4057     for multilevel association lists
4059     fixed stack overflow in ref, set-ref, ref-set
4061 9.2.16
4062     set-assoc and assoc-set redone, fixes for set-ref, ref-set, set-ref-all
4063         newlisop_manual.html updates
4065 9.2.17
4066     Fixes for 'set-assoc' and 'set-ref' when using the wrong syntax
4068     new 'pop-assoc' for removing associations
4070     'find' and 'ref' put their last found expression into $0 when used with a
4071     cpmparison functor as parameter 
4073     'find-all' has two additional syntax patterns
4075     'process' now parses commands and args delimited by single or double quotes.
4076     This is necessary when using file name or argumemnts containing spaces.
4077     On Win32 do: (process {newlisp '"test prog.lsp"'}) 
4078     On Unix do: (process {newlisp 'test prog.lsp'}) ; single or double quotes work
4080     The octal format spcecifier (format "%o" 8) => "10" will work on many
4081     platforms compilers. This is now documented and useful when inspecting
4082     the mode number from the 'file-info' function.
4084 9.3.0 prerelease January 28th, 2008
4085     fix in 'sys-info' for some 64-bit compilations, and other int -> size_t
4087     reset -w base directory after http requests, this is important in -c mode
4088     when both, http and net-eval requests may come in, so that http requests
4089     cannot change the current directory of the server for net-eval requests
4091 9.3.0 final release February 1st, 2008
4092     a fix for newlisp server mode when using IE explorer on Win32
4094     documentation changes
4096 9.3.1
4097     doc changes
4099     fixes for guiserver v.115 (see guiserver/CHANGES)
4101     fixed error message for unclosed curl brace
4103         'pop-assoc' should not set $0 as do 'set-assoc', 'assoc-set' 
4105         : colon operator should not evaluate args after the object
4107     the description - read - has been deleted, the function originally introduced
4108     here in 9.3.1 has been taken out in 9.3.3
4110 9.3.2
4111     new compile flavor for IPv6 with the following makefiles:
4112       makefile_darwin_utf8_IPv6
4113       makefile_linux_IPv6
4114       makefile_bsd_IPv6
4116     elimnate quirky symbol syntax in 'net-send'
4118     functions called by dynamic symbols now switch to the dynamic
4119     context:
4120         (define (foo:foo) (context))
4121         (set 'ctx foo)
4122         (ctx) => foo
4123         (ctx:foo) => foo ; previously MAIN
4125     changed report format in 'net-ping' now includes roundtrip time in 
4126     micro-seconds
4128 9.3.3
4129     fixed display of signon banner, which made newlisp-tk.tcl not work. Also, in order
4130     to make newlisp-tk.tcl work on 9.3.0 and after, the line in newlisp-tk.tcl:
4131                 (net-send SYS:tk-sock 'result)
4132         should be changed
4133                 (net-send SYS:tk-sock result)   
4135     in the runtk.lsp utility (see http://www.newlisp.org/index.cgi?page=Tk_and_newLISP)
4136     the line: 
4137                 (process "wish" tcin tcout)
4138         changed to:
4139                 (process "/usr/bin/wish" tcin tcout)
4140         to make it work on v9.3.0 and after
4142     'search' has a new flag parameter to put the filepointer after the seach to either
4143      the beginnin (nil) or the end (true) of the searched string.
4145     added <hr> as a legal tag in v.1.5 newlispdoc formatted documentation 
4147     'xml-parse' crashed when not passing a valid symbol or context
4149     extra boolean flag in 'bind' forces evaluation of bound parameters:
4151     (bind assocList true) same as: (apply set (flat assocList))
4152     this enables an efficient way to define functions with names parameters:
4154         (define-macro (foo)
4155               (local (len width height)
4156                   (bind (args) true)
4157                   (println "len: " len " width:" width " height:" height)
4158             ))
4160         (foo (width 20) (height (+ 5 25)) (len 10))
4162       outputs -> len: 10 width:20 height:30
4164     a fix for 'expand' when expanding upper-case characters, now limited to 65->90
4165     to prevent expansion of symbils starting with special characters
4167     took out the 'read' from 9.3.1. Just couldn't see the benefit of it. Everything
4168     which can be done eoth it can be done by redefining 'define', or create other
4169     special def- functions which transform toplevel expressions.
4171     'env' now removes an enviroment variable when setting it to an empty string
4172         except when on Solaris, where it stays as an empty string.
4173     (env "VAR" "value") (env "VAR") => "value" (env "VAR" "") (env "VAR") => nil
4174     On Solaris (env "VAR") = ""
4176     fixed a memory leak on Won32 and Solaris when repeatedly setting the same 
4177     environment variable
4179     9.3.2 did not compile on Solaris, 9.3.3 now compiles on Solaris