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.