Decription of upcoming version of WINTERP (1.14):
==============================================================================
# WINTERP Copyright 1989, 1990, 1991 Hewlett-Packard Company (by Niels Mayer).
# XLISP version 2.1, Copyright (c) 1989, by David Betz.
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of Hewlett-Packard and David Betz not be
# used in advertising or publicity pertaining to distribution of the software
# without specific, written prior permission.  Hewlett-Packard and David Betz
# make no representations about the suitability of this software for any
# purpose. It is provided "as is" without express or implied warranty.

At the time of this 1.13 WINTERP release, I actually have version 1.14 up
and running, but I haven't had enough time to test it extensively, nor have
I had time to find out whether it is portable or not.

Thus, I went ahead and released version 1.13, which is known to be portable
because it is directly derived from version 1.12, which seems to be
portable. I figured I'd be better off releasing something reliable and
portable for the X11r5 contrib tape.... Version 1.14 has many new features,
and an all-new XLISP, and therefore has great potential for trouble.

I plan to have version 1.14 available in a few weeks to a few months,
depending on how my schedule goes. Put yourself on the WINTERP mailing list
if you want to find out about the 1.14 release, or watch for an
announcement on comp.windows.x/comp.windows.x.motif.

			--------------------

Version 1.14 will include the following new features:

* Ability to communicate with interactive unix programs running as WINTERP
subprocesses -- allow easy GUI construction around existing Unix
applications. THis is partially implemented via an interface to Don Libes'
expect library. When combined with a higher-level interface to
XtAppAddInput(), the effect you get is very similar to the way gnuemacs
uses process-filter/process-sentinel to run asynchronous subprocesses.
This allows you to have widget displays which dynamically display the
output of a subprocess, while the rest of the UI is still "active" and able
to carry out it's intended actions.

* Trace and backtrace of 
	callbacks
	event handlers
	action procedures
	timeouts
	input callbacks

* Callbacks and event handlers can directly access instance
  variables of subclassed widgets.

* Resource to specify a load-path

* Callbacks (hooks) that fire upon a lisp error -- user can attach
arbitrary code in order to do things like pop up a dialog box warning of
error.

* All new improved version XLISP (xlisp 2.1c)
		-- faster, faster garbage collect, uses less memory
		-- closer to Common Lisp
		-- features conditionally compilable

For more info on xlisp 2.1c see below:

			--------------------

From: toma@sail.LABS.TEK.COM (Tom Almy)
Newsgroups: comp.lang.lisp.x
Subject: Enhanced XLISP differences
Date: 16 Aug 91 16:46:03 GMT
Reply-To: toma@sail.LABS.TEK.COM (Tom Almy)
Organization: Tektronix, Inc., Beaverton,  OR.

I have occasionally been asked about the differences between the
standard XLISP 2.1 and the version I have modified (which I am now
calling 2.1b). I have culled through my notes and produced the
following document of the changes made. I hope I found everything.

Tom Almy
toma@sail.labs.tek.com
Standard Disclaimers Apply


DIFFERENCES BETWEEN XLISP 2.1 AND XLISP 2.1b
*********************************************

In the following document, CL means "Common Lisp compatible to
the extent possible". CX means "now works with complex numbers". *
means "implemented in LISP rather than C". # means "implementation
moved from LISP to C".

**********************Bug fixes*********************************************

RESTORE did not work -- several bugs for 80x86 systems. Only one restore
	would work per session -- all systems.

:downcase for variable *printcase* did not work with some compilers.

Modifications to make the source acceptable to ANSI C compilers.

Values for ADEPTH and EDEPTH changed to more reasonable values -- before
this change the processor stack would overflow first, causing a crash.

On systems with 16 bit integers: STRCAT crashes when aggregate size of
argument strings were greater than 32k. MAKE-ARRAY crashes on too-large
arrays. DOTIMES, AREF, AREF and NTH place forms of SETF, 
MAKE-STRING-INPUT-STREAM  and GET-OUTPUT-STREAM-STRING treat numeric
argument modulo 65536. MAKE-STRING-INPUT-STREAM did not check for start>end.

Strings containing nulls could not be read or printed.

NTH and NTHCDR failed for zero length lists.

Unnamed streams did not survive garbage collections.

(format nil ...) did not protect from garbage collection the unnamed stream
it creates.

SORT did not protect some pointers from garbage collection.

SYMBOL-NAME SYMBOL-VALUE SYMBOL-PLIST BOUNDP and FBOUNDP failed with
symbol NIL as argument.

LAST returned wrong value when its argument list ended with a dotted pair.

*gc-hook* was not rebound to NIL during execution of gchook function, causing
potential infinite recursion and crash.

Executing RETURN from within a DOLIST or DOTIMES caused the environment to
be wrong.

When errors occured during loading, which were not caught, the file would
be left open.

EVAL and LOAD did not use global environment. EVALHOOK's default environment
was not global.

Invalid symbols (those containing control characters, for instance),
can no longer be created with intern and make-symbol.

The key T, meaning "otherwise" in the CASE function used to be allowed in
any position. Now it only means "otherwise" when used as the last case.

The lexical and functional environment of send of :answer (which defines
a new method) are now used during the method's evaluation, rather than
the global environment.

Signatures added for WKS files so that invalid ones will be rejected.

Checks added for file names and identifier names being too long.

Indexing code fixed to allow almost 64k long strings in 16 bit systems.
It is no longer possible to allocate arrays or strings that are too long
for the underlying system.

Circularity checks added to PRINT LAST BUTLAST LENGTH MEMBER and MAP 
functions. An error is produced for all but MEMBER, which will execute 
correctly.


*******************User interface changes***********************************

-w command line argument to specify alternate or no workspace.

-? command line argument gives usage message.

init.lsp not loaded if workspace loaded.

Search path can be provided for workspaces and .lsp files.

Standard input and output can be redirected.

Display writes are buffered.

Character literals available for all 256 values. CL

Uninterned symbols print with leading #:. CL

PRIN1 generates appropriate escape sequences for control and
meta characters in strings. CL

Read macro #. added. CL

Lisp code for nested backquote macros added. CL

Read macro #C added for complex numbers. CL

Semantics for #S read macro changed so that it can read in structures
written by PRINT. CL

*******************New/changed data types***********************************
NIL -- was treated as a special case, now just a normal symbol.
symbols -- value binding can optionally be constant or special.
complex numbers -- new type, can be integer or real.
character strings -- The ASCII NUL (code 0) is now a valid character.
objects -- objects of class Class have a new instance variable
	which is the print name of the class.
hash-table -- new type, close to CL
random-state -- new type, CL

Property list properties are no longer limited to just symbols CL

*******************New variables/constants**********************************

*apply-hook* Now activated
*displace-macros* Macros are replaced with their expansions when possible
*dos-input* MSDOS only, uses DOS interface to interact with user. Allows
	recall of earlier command(s).
*print-level* CL
*print-length* CL
*random-state* CL
*terminal-io* CL
internal-time-units-per-second CL
pi CL

*******************New functions********************************************

ACONS CL*
ACOSH CL*
ADJOIN CL
APPLYHOOK CL
ASINH CL*
ATANH CL*
BUTLAST CL
CEILING CL
CIS CL*
CLREOL (clear to end of line -- MS/DOS only)
CLRHASH CL
CLS (clear screen -- MS/DOS only)
COERCE CL
COLOR (graphics -- MS/DOS only)
COMPLEX CL
COMPLEXP CL
CONCATENATE CL
CONJUGATE CL
CONSTANTP CL
COPY-ALIST CL*
COPY-LIST CL*
COPY-TREE CL*
COSH CL*
COUNT-IF CL except no :from-end
DECF CL*
DEFCLASS * (define a new class)
DEFINST * (define a new instance)
DEFMETHOD * (define a new method)
DEFSETF CL*
DRAW (graphics -- MS/DOS only)
DRAWREL (graphics -- MS/DOS only)
ELT CL
EQUALP CL*
EVERY CL
FILE-LENGTH CL
FILE-POSITION CL
FILL CL*
FIND-IF CL except no :from-end
FLOOR CL
FRESH-LINE CL
FUNCTIONP CL*
GENERIC (implementation debugging function)
GET-INTERNAL-REAL-TIME CL
GET-INTERNAL-RUN-TIME CL
GETHASH CL
GOTO-XY (position cursor -- MS/DOS only)
HASH-TABLE-COUNT CL
IDENTITY CL*
IMAGPART CL
INCF CL*
INPUT-STREAM-P CL
INTERSECTION CL
LCM CL
LIST* CL
LOG CL
LOGTEST CL*
MAKE-HASK-TABLE CL
MAKE-RANDOM-STATE CL
MAP CL
MAPHASH CL
MODE (graphics -- MS/DOS only)
MOVE (graphics -- MS/DOS only)
MOVEREL (graphics -- MS/DOS only)
NINTERSECTION CL*
NOTANY CL
NOTEVERY CL
NREVERSE CL
NSET-DIFFERENCE CL*
NSET-EXCLUSIVE-OR CL*
NUNION CL*
OPEN-STREAM-P CL
OUTPUT-STREAM-P CL
PAIRLIS CL*
PHASE CL
POP CL*
POSITION-IF CL except no :from-end
PUSH CL*
PUSHNEW CL*
REALPART CL
REDUCE CL except no :from-end
REMHASH CL
REMOVE-DUPLICATES CL except no :from-end
REPLACE CL*
ROUND CL
SEARCH CL except no :from-end
SET-DIFFERENCE CL
SET-EXCLUSIVE-OR CL*
SETF Placeform ELT  CL
SETF Placeform GETHASH  CL
SETF Placeform SEND*	(set instance variable)
SIGNUM CL*
SINH CL*
SOME CL
SUBSETP CL
TANH CL*
TIME CL
TYPEP CL
UNINTERN CL*
UNION CL
WITH-INPUT-FROM-STRING CL*
WITH-OPEN-FILE CL*
WITH-OUTPUT-TO-STRING CL*
Y-OR-N-P CL*

	
******************Changed functions****************************************

&ALLOW-OTHER-KEYS CL (now functions, is no longer ignored)
* CL CX (with no arguments, returns 1)
+ CL CX (with no arguments, returns 0)
- CL CX
/ CX Almost CL (division of integers returns fp if no exact integer value)
1+ CL CX
1- CL CX
ABS CL CX
ACOS CL CX
ALLOC (new optional second argument)
APPLY CL (allows multiple arguments)
AREF CL (now works on strings)
ASIN CL CX
ASSOC CL (added :key)
ATAN CL CX (second argument now allowed)
CHAR-CODE CL (parity bit is stripped)
CLOSE CL (will close unnamed stream strings)
COS CL CX
DEFCONSTANT CL# (true constants)
DEFPARAMETER CL# (true special variables)
DEFVAR CL# (true special variables)
DELETE (added keywords :key :start :end. Works on arrays and strings)
DELETE-IF (added keywords :key :start :end. Works on arrays and strings)
DELETE-IF-NOT (added keywords :key :start :end. Works on arrays and strings)
EXP CL CX
EXPT CL CX
FORMAT (added directives ~D ~E ~F ~G ~& ~T ~\N and lowercase directives)
HASH (hashes everything, not just symbols or strings)
LOAD CL (uses path to find file)
LOGAND CL (with no arguments, returns -1)
LOGIOR CL (with no arguments, returns 0)
LOGXOR CL (with no arguments returns 0)
MAKE-STRING-INPUT-STREAM CL (:end NIL means end of string)
MAKUNBOUND #
MEMBER CL (added :key)
NSTRING-DOWNCASE CL (string argument can be symbol, :end NIL means end of 
	string)
NSTRING-UPCASE CL (string argument can be symbol, :end NIL means end of 
	string)
OPEN CL (many additional options, as in Common Lisp)
PEEK (fixnum sized location is fetched)
PEEK-CHAR CL (input stream NIL is *standard-input*, T is *terminal-io*)
POKE (fixnum sized location is stored)
PPRINT (output stream NIL is *standard-output*, T is *terminal-io*)
PRIN1 CL (output stream NIL is *standard-output*, T is *terminal-io*)
PRINC CL (output stream NIL is *standard-output*, T is *terminal-io*)
PRINT (output stream NIL is *standard-output*, T is *terminal-io*)
RANDOM CL (works with random-states)
READ (input stream NIL is *standard-input*, T is *terminal-io*)
READ-BYTE CL (input stream NIL is *standard-input*, T is *terminal-io*)
READ-CHAR CL (input stream NIL is *standard-input*, T is *terminal-io*)
READ-LINE CL (input stream NIL is *standard-input*, T is *terminal-io*)
REM CL (only two arguments now allowed, may be floating point)
REMOVE (added keywords :key :start :end. Works on arrays and strings)
REMOVE-IF (added keywords :key :start :end. Works on arrays and strings)
REMOVE-IF-NOT (added keywords :key :start :end. Works on arrays and strings)
RESTORE (uses path to find file, restores file streams)
REVERSE CL (works on arrays and strings)
SIN CL CX
SORT (added :key)
SQRT CL CX
STRCAT * (now a macro, use of CONCATENATE is recommended)
STRING-comparisonFunctions CL (string arguments can be symbols)
STRING-DOWNCASE CL (string argument can be symbol, :end NIL means end of 
	string)
STRING-LEFT-TRIM CL (string argument can be symbol)
STRING-RIGHT-TRIM CL (string argument can be symbol)
STRING-TRIM CL (string argument can be symbol)
STRING-UPCASE CL (string argument can be symbol, :end NIL means end of string)
SUBLIS CL (modified to do minimum copying)
SUBSEQ CL (works on arrays and lists)
SUBST CL (modified to do minimum copying)
TAN CL CX
TERPRI CL (output stream NIL is *standard-output*, T is *terminal-io*)
TRUNCATE CL (allows denominator argument)
TYPE-OF (returns HASH-TABLE for hashtables, COMPLEX for complex, and LIST for 
	NIL)
UNTRACE CL (with no arguments, untraces all functions)
WRITE-BYTE CL (output stream NIL is *standard-output*, T is *terminal-io*)
WRITE-CHAR CL (output stream NIL is *standard-output*, T is *terminal-io*)


****************New messages for class Object*******************************

	:prin1 <stream>
	:superclass *
	:ismemberof <cls> *
	:iskindof <cls> *
	:respondsto <selector> * 
	:storeon (returns form that will create a copy of the object) *

****************New messages for class Class********************************

	:superclass *
	:messages *
	:storeon (returns form that will recreate class and methods) *


-- 
Tom Almy
toma@sail.labs.tek.com
Standard Disclaimers Apply





