C.D.Lane 1/83

                                    MULTIW

  MULTIW.LSP  contains  the basic functions necessary for a hierarchical window
environment.  The functions provide both the means  to  link  windows  and  the
changes to the standard window functions to handle multiwindows in a reasonable
way.    Only  the  minimal  support  is  incorporated  since  it is unclear how
multiwindows will be used in different settings.

  Windows that belong to other windows will move, close, shrink and  open  when
their  super  window  does.    A  super  window  is  not affected by the window
functions of its sub windows (but can be made to  be).    Sub  windows  can  be
moved,  closed,  shrunk,  opened, and so forth as normal windows.  When buried,
multiwindows bury as a group, retaining  their  relative  layering,  but  going
below unrelated windows.

  To  get  the  full  support for multiwindows, (MULTIWADVICE) must be invoked.
This function advises several standard window functions  to  reset  the  window
layers  after  they perform their operations.  Multiwindows can be used without
advice, but the windows will have  to  be  explicitly  reset.    Currently  the
functions  being  advised  are  (BURYW  CLEARW  MOVEW  OPENW  SHRINKW).   Where
possible, functions on the windows  property  list  were  changed  rather  than
advising  the  existing ones, to keep the system as compatible as possible with
any environment its used in.

  If SuperWindow, or SubWindowLst are NIL  in  following  functions,  they  are
prompted for with \MULTIWPROMPT.

  MULTIW (SuperWindow SubWindowLst)                                  [function]

  SubWindowLst  can  be  a list of windows or a window.  MULTIW adds windows in
SubWindowLst to SuperWindow's SUBWINDOWLST property if  it  exits,  creates  it
otherwise  (WINDOWADDPROP).  Also, SuperWindow gets added to the SUPERWINDOWLST
property of each element  of  the  SubWindowLst,  providing  pointers  in  both
directions  (currently,  the  multiwindow  package  does  not  use the backward
pointers, they are provided for the user's convienence).  Superwindow also gets
its window function (see \MULTIWNEWFNS) properties redefined to the multiwindow
versions.

  WARNING: Window structures must be  DAGs  (directed  acyclic  graphs),  there
should be no way a window can reach itself by following out the pointers to its
subwindows.    Recursive  window  structures will cause infinite looping of the
window functions.

  MULTIWFREE (SuperWindow SubWindowLst)                              [function]

  SubWindowLst can be a list of windows, a single window, T or NIL.  MULTIWFREE
frees the links from SuperWindow to the windows in SubWindowLst as well as  the
pointers  back.    If  SubWindowLst  is T, then SuperWindow is freed of all its
subwindows (and they of it).

  MULTIWADVICE ()                                                    [function]

  MULTIWADVICE advises functions based on the scripts in \MULTIWADVISEDFNS. The
function returns a list of the advised functions which should be saved  if  one
wishes  to  UNADVISE the functions (which is recommended before another call to
(MULTIWADVICE)).

  MULTIWGRAPH (SuperWindow DisplayWindow)                            [function]

  MULTIWGRAPH graphs a window relation structure in DisplayWindow (which can be
NIL).  Useful in debugging relationships between windows.  The GRAPHER  package
must be loaded to use this function.

  \MULTIWGRAPH (NodeWindow)                                          [function]

  Function MULTIWGRAPH uses to recursively follow down the window links.

MultiWindow Window Functions

  Most  are  functionally  identical to the normal window functions except they
perform the proper  task  on  all  of  the  subwindows  and  reset  the  window
structure.

  \MULTIWMOVEFN (Window NewPosition)                                 [function]

  \MULTIWCLOSEFN (Window)                                            [function]

  \MULTIWSHRINKFN (Window)                                           [function]

  \MULTIWEXPANDFN (Window)                                           [function]

  \MULTIWTOTOPFN (Window)                                            [function]

  \MULTIWBURYFN (Window)                                             [function]

  \MULTIWPROMPT (PromptString)                                       [function]

  Prints PromptString in PROMPTWINDOW and returns a (WHICHW (GETPOSITION))

  NOTE:  A  demonstration  of  multiwindows  can  be found in MULTIW.DEMO.  The
GRAPHER package should be loaded, as  well  as  MULTIW.LSP.    The  call  (DEMO
MULTIWDEMO) starts the demo.