1
0
mirror of synced 2026-01-15 16:26:26 +00:00
Interlisp.medley/docs/ReleaseNote/SEC4-IRMERRATA.TEDIT

208 lines
130 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

1
LISP RELEASE NOTES, MEDLEY RELEASE, CHANGES TO INTERLISP-D
1
LISP RELEASE NOTES, MEDLEY RELEASE, CHANGES TO INTERLISP-D
4. CHANGES TO INTERLISP-D IN LYRIC/MEDLEY
1
4. CHANGES TO INTERLISP-D IN LYRIC/MEDLEY
1
4. CHANGES TO INTERLISP-D IN LYRIC/MEDLEY
6
NOTE: Chapter 4 is organized to correspond to the original Interlisp-D Reference Manual, and explains changes that have occurred in Interlisp-D with the Lyric and Medley releases. To make it easy to use this chapter with the IRM, information is organized by IRM volume and section numbers. Section headings from the IRM are maintained to aid in cross-referencing.
Lyric information as well as Medley release enhancements are included. Medley additions are indicated with revision bars in the right margin.
VOLUME Iÿÿï%ÿLANGUAGE
2
Chapter 3 Lists
1
Section 3.2 Building Lists From Left To Right
1
(I:3.7)
The functions DOCOLLECT(DOCOLLECT (Function) NIL NIL (4) NIL) and ENDCOLLECT(ENDCOLLECT (Function) NIL NIL (4) NIL) are no longer supported.
(I:3.8)
The description of the (ADDTOSCRATCHLIST (Function) NIL NIL (4) NIL)ADDTOSCRATCHLIST function has been revised to read:
(ADDTOSCRATCHLIST VALUE) [Function]
1
For use inside a (SCRATCHLIST NIL NIL NIL (4) NIL)SCRATCHLIST form. VALUE is added on to the end of the value being collected by SCRATCHLIST. When the SCRATCHLIST returns, its value is a list containing all of the things that ADDTOSCRATCHLIST has added.
Section 3.10 Sorting Lists
1
(I:3.17)
(SORT(SORT (Function) NIL NIL (4) NIL) DATE COMPAREFN) [Function]
1
There is no safe interrupt to SORTÿÿï%ÿif you ÿÿabort a call to ÿSORT by any means the possibility exists for losing elements from the list being sorted.
2
Chapter 6 Hash Arrays
1
(I:6.1)
(HASHARRAY(HASHARRAY (Function) NIL NIL (4) NIL) MINKEYS OVERFLOW HASHBITSFN EQUIVFN RECLAIMABLE
REHASH-THRESHOLD) [Function]
1
The function HASHARRAY has two new optional arguments, RECLAIMABLE and REHASH-THRESHOLD. If RECLAIMABLE is true, then entries in the hash table are considered "reclaimable" in the sense that the system is permitted to remove any key and its associated value from the hash table at any time. In practice, the contract is less severe: the system only removes keys when a hash table fills and is about to be rehashed, and then it only removes keys whose reference count is one, and to which there are thus no pointers outstanding except possibly from the stack (local variables). This is useful for hash tables that serve to cache information about Lisp objects to avoid recomputation; for example, the system hash table CLISPARRAY(CLISPARRAY NIL NIL NIL (4) NIL) is now reclaimable. Discarding keys keeps the table from necessarily needing to grow, and potentially allows the storage consumed by both the key and value to be reclaimed.
Section 6.1 Hash Overflow
1
(I:6.3)
You should note changes to the wording of two of the possibilites for the overflow method:
The first sentence for NIL should read: The array is automatically enlarged by at least a factor of 1.5 every time it overflows.
The explanation for "a positive integer N" should read: The array is enlarged to include at least N more slots than it currently has.
2
Chapter 7 Integer Arithmetic
1
(I:7.5)
The variables MIN.INTEGER(MIN.INTEGER (Variable) NIL NIL (4) NIL) and MAX.INTEGER(MAX.INTEGER (Variable) NIL NIL (4) NIL) have been removed from the Interlisp-D Reference Manual. Therefore, calling (MIN(MIN (Function) NIL NIL (4) NIL)) and (MAX(MAX (Function) NIL NIL (4) NIL)) is an error.
(I:7.7)
(FIXR N) [Function]
1
When N is exactly half way between two integers, FIXR rounds it to the even number. For example (FIXR 1.5) ÿÿïOÿ 2 and (FIXR 2.5) ÿÿïOÿ 2.
Section 7.3 Logical Arithmetic Functions
1
The function INTEGERLENGTH(INTEGERLENGTH (Function) NIL NIL (4) NIL) does not coerce floating point numbers to integers; rather, it signals an error, "Arg not Integer". (This was true in Koto as well.)
Section 7.5 Other Arithmetic Functions
1
(I:7.13)
The algorithms for SIN(SIN (Function) NIL NIL (4) NIL), COS(COS (Function) NIL NIL (4) NIL), and other trigometric functions have been tuned and are now accurate to at least six significant figures.
2
Chapter 8 Record Package
1
(I:8.11)
When using (BLOCKRECORD (Record Type) NIL NIL (4) NIL)BLOCKRECORD, it is an error to try to declare a record with a zero-length field. Previously, the system would go into an infinite loop. In the Medley release, the system will now detect this and signal an error.
2
Chapter 9 Conditionals and Iterative Statements
1
Section 9.2 Equality Predicates
1
(I:9.3)
(EQUALALL(EQUALALL (Function) NIL NIL (4) NIL) X Y) [Function]
1
Add the following NOTE to the EQUALALL function:
Note: In general, EQUALALL descends all the way into all datatypes, both those defined by the user and those built into the system. If you have a data structure with fonts and pointers to windows, EQUALALL will descend into those also. If the data structures are circular, as windows are, EQUALALL can cause a Stack Overflow error.
Section 9.8.3 Condition I.s. oprs
1
UNTIL(UNTIL NIL NIL NIL (4) NIL) N (N a number) [I.S. Operator]
1
REPEATUNTIL(REPEATUNTIL NIL NIL NIL (4) NIL) N (N a number) [I.S. Operator]
1
These descriptions were included in the Interlisp-D Reference Manual in error and should be removed. UNTIL and REPEATUNTIL work only with predicate expressions, not numbers.
2
Chapter 10 Function Definition, Manipulation , and Evaluation
1
Section 10.2 Defining Functions
1
(I:10.11)
In the definition of the MOVD(MOVD (Function) NIL NIL (4) NIL) function, the sentence "COPYDEF(COPYDEF (Function) NIL NIL (4) NIL) is a higher-level function that only moves expr definitions, but..." should be revised to read:
COPYDEF is a higher-level function that not only moves expr definitions, but also works for variables, records, etc.
Section 10.5 Functional Arguments
1
(I:10.19)
FUNARG(FUNARG NIL NIL NIL (4) NIL) functionality (non-NIL second argument to FUNCTION) has been withdrawn. Most of the uses for Interlisp FUNARG's are better written using the lexical closure functionality of Common Lisp.
Section 10.6.2 Interpreting Macros
1
The variables (SHOULDCOMPILEMACROATOMS (Variable) NIL NIL (4) NIL)SHOULDCOMPILEMACROATOMS and UNSAFEMACROATOMS(UNSAFEMACROATOMS (Variable) NIL NIL (4) NIL) no longer exist.
2
Chapter 11 Variable Bindings and the Interlisp Stack
1
(II:11.2)
In Lisp there is a fixed amount of space allocated for the stack. When this space is exhausted, the STACK OVERFLOW(STACK% OVERFLOW (Error Type) NIL NIL (4) NIL) error occurs. However, if the system waited until the stack were really exhausted, there wouldn't be room to run the debugger. Thus, a portion of the stack space is reserved; when the stack intrudes into the reserved area, it causes a stack overflow interrupt, and subsequently a call to the debugger.
In order not to get a STACK OVERFLOW error while inside the debugger, this intrusion into the reserved area is only noted once. If the reserved area is exhausted, then a "hard" stack overflow occurs (a 9319 MP halt), from which the only recourse is a hard reset via STOP (or Ctrl-D from TeleRaid). Following a hard reset, the stack is cleared, stack overflow detection is reenabled, and all processes are restarted.
The implications of this are that you should not attempt any deep computations while inside the debugger for a stack overflow error, and you should call (HARDRESET(HARDRESET (Function) NIL NIL (4) NIL)) as soon as possible in order that subsequent stack overflows can again be caught in the debugger before they advance to the MP halt. In order to make this more convenient, the system automatically calls (HARDRESET) if you exit the debugger via the ^ or OK commands, or abort with a Ctrl-D. The only way to exit the debugger without having a (HARDRESET) occur is by using the RETURN(RETURN NIL NIL NIL (4) NIL) command. You can disable this feature by setting AUTOHARDRESETFLG (AUTOHARDRESETFLG NIL NIL NIL (4) NIL)to NIL, in which case you must be sure to perform the (HARDRESET) yourself if you want the next stack overflow to be detected early enough to enter the debugger.
Section 11.2.1 Searching the Stack
1
(STKPOS FRAMENAME N POS OLDPOS) [Function]
1
(STKPOS 'STKPOS) does not cause an error; it merely returns NIL. (This was true in Koto as well.) It is still not permissible to create a pointer to the active frame; however, STKPOS(STKPOS (Function) NIL NIL (4) NIL) never attempts to, as it starts searching for the specified frame by looking first at its caller.
Section 11.2.2 Variable Bindings in Stack Frames
1
(I:11.7)
(STKARG(STKARG (Function) NIL NIL (4) NIL) N POS ÿÿï%) [Function]ÿ
1
(STKNARGS(STKNARGS (Function) NIL NIL (4) NIL) POS ÿÿï%) [Function]
1
The functions STKARG and STKNARGS will now return the number of arguments supplied to a Lambda Nospread when there is a break. The ?= command will show all the arguments.
(SETSTKARGNAME(SETSTKARGNAME (Function) NIL NIL (4) NIL) N POS NAME) [Function]
1
The function SETSTKARGNAME does not work for interpreted frames.
Section 11.2.5 Releasing and Reusing Stack Pointers
1
(CLEARSTK(CLEARSTK (Function) NIL NIL (4) NIL) FLG) [Function]
1
(CLEARSTK NIL) is a no-opÿÿï%the ability to clear all stack pointers is inconsistent with the modularity implicit in a multi-processing environment.ÿ
CLEARSTKLST(CLEARSTKLST (Variable) NIL NIL (4) NIL) [Variable]
1
NOCLEARSTKLST(NOCLEARSTKLST (Variable) NIL NIL (4) NIL) [Variable]
1
The variables CLEARSTKLST and NOCLEARSTKLST are no longer used. (More precisely, they are used only by the Old Interlisp Executive, which means that programs can no longer depend on them.)
Section 11.2.7 Other Stack Functions
1
(II:11.13)
In the REALFRAMEP(REALFRAMEP (Function) NIL NIL (4) NIL) function, the INTERPFLG argument description has been corrected to read:
If INTERPFLG=T returns T if POS is not a dummy frame. For example, if (STKNAME POS)=COND, (REALFRAMEP POS) is NIL, but (REALFRAMEP POS T) is T.
2
Chapter 12 Miscellaneous
1
Section 12.2 Idle Mode
1
The following properties in IDLE.PROFILE(IDLE.PROFILE NIL NIL NIL (4) NIL) are new or have meanings different from the documentation in the Interlisp-D Reference Manual:
ALLOWED.LOGINS(ALLOWED.LOGINS NIL NIL NIL (4) NIL) The authentication aspects of this property have been separated into the AUTHENTICATE property. The value of this property now speaks specifically to who is allowed to exit idle mode: If the value is NIL (or any other non-list), no login at all is required to exit Idle mode. Otherwise, the value is a list composed of any of the following:
* Require login, but let anyone exit idle mode. This will overwrite the previous user's name and password each time idle mode is exited.
T Let the previous user (as determined by (USERNAME NIL NIL NIL (4) NIL)USERNAME) exit idle mode. If the user name has not been set, this is equivalent to *.
A user name Let this specific user exit idle mode.
A group name Allow any members of this group (an NS Clearinghouse group name) to exit idle mode.
The initial value for ALLOWED.LOGINS is (T *), i.e., anyone is allowed to exit idle mode.
AUTHENTICATE(AUTHENTICATE NIL NIL NIL (4) NIL) The value of this property determines what mechanism is used to check passwords. If T, use the NS authentication protocol (requires the presence of an NS Authentication server accessible via the network). If NIL, do not check the password at allÿÿï%accept any password. This is ÿonly particularly useful if ALLOWED.LOGINS(ALLOWED.LOGINS NIL NIL NIL (4) NIL) contains *.
The initial value of AUTHENTICATE is T.
FORGET(FORGET NIL NIL NIL (4) NIL) If this is the symbol FIRST, the user's password will be erased when idle mode is entered. Otherwise, this property is relevant only when ALLOWED.LOGINS is NIL (if ALLOWED.LOGINS is a list, then some sort of login is required, which will have the effect of erasing any previous login): If FORGET is non-NIL, the user's password will be erased when idle mode is exited. Initial value is T (erase password on exit).
Note: If the password is erased on entry to Idle mode (value FIRST), any program left running when idle mode is entered may fail if it tries doing anything requiring passwords (such as accessing file servers).
LOGIN.TIMEOUT(LOGIN.TIMEOUT NIL NIL NIL (4) NIL) Value is a number indicating how many seconds Idle's prompt for a login should remain up before timing it out and resuming Idle mode. Initial value is 30. This feature avoids the problem of having an Idle machine "freeze up" indefinitely (stop running the idle pattern) just because someone brushed against the keyboard.
RESETVARS(RESETVARS NIL NIL NIL (4) NIL) This property is no longer used; rather, the value of the global variable IDLE.RESETVARS (IDLE.RESETVARS (Variable) NIL NIL (4) NIL)is used instead.
SUSPEND.PROCESS.NAMES(SUSPEND.PROCESS.NAMES NIL NIL NIL (4) NIL) This property is no longer used; rather, the value of the global variable IDLE.SUSPEND.PROCESS.NAMES(IDLE.SUSPEND.PROCESS.NAMES (Variable) NIL NIL (4) NIL) is used instead.
Section 12.3 Saving Virtual Memory State
1
AROUNDEXITFNS(AROUNDEXITFNS (Variable) NIL NIL (4) NIL) [Variable]
1
This variable provides a way to "advise" the system on cleanup and restoration activities to perform around(LOGOUT (Function) NIL NIL (4) NIL) LOGOUT, SYSOUT(SYSOUT (Function) NIL NIL (4) NIL), MAKESYS(MAKESYS (Function) NIL NIL (4) NIL) and SAVEVM(SAVEVM (Function) NIL NIL (4) NIL); it subsumes the functionality of (BEFORESYSOUTFORMS NIL NIL NIL (4) NIL)BEFORESYSOUTFORMS, AFTERLOGOUTFORMS(AFTERLOGOUTFORMS NIL NIL NIL (4) NIL), etc. Its value is a list of functions (names) to call around every "exit" of the system. Each function is called with one argument, a symbol indicating which particular event is occurring:
BEFORELOGOUT(BEFORELOGOUT NIL NIL NIL (4) NIL) The system is about to perform a LOGOUT. The event function might want to save state, notify a network connection that it is about to go away, etc.
BEFORESYSOUT(BEFORESYSOUT NIL NIL NIL (4) NIL)
BEFOREMAKESYS(BEFOREMAKESYS NIL NIL NIL (4) NIL)
BEFORESAVEVM(BEFORESAVEVM NIL NIL NIL (4) NIL) The system is about to perform a SYSOUT, MAKESYS, or SAVEVM. Often these three events are treated equivalently; however, sometimes the distinction is interesting. For example, a program might want to perform a much more extensive tidying-up before MAKESYS than if it is merely doing a routine SAVEVM.
(AFTERLOGOUT NIL NIL NIL (4) NIL)AFTERLOGOUT
AFTERSYSOUT(AFTERSYSOUT NIL NIL NIL (4) NIL)
AFTERMAKESYS(AFTERMAKESYS NIL NIL NIL (4) NIL)
AFTERSAVEVM(AFTERSAVEVM NIL NIL NIL (4) NIL) The system is starting up a virtual memory image that was saved by performing a LOGOUT, SYSOUT, etc. Ordinarily, the event function should treat all of these the sameÿÿï%ÿin all four cases, some arbitrary amount of time has passed, remote files may have come and gone, a different user may be logged in, or the virtual memory image might even be running on a different workstation.
AFTERDOSYSOUT(AFTERDOSYSOUT NIL NIL NIL (4) NIL)
AFTERDOMAKESYS(AFTERDOMAKESYS NIL NIL NIL (4) NIL)
AFTERDOSAVEVM(AFTERDOSAVEVM NIL NIL NIL (4) NIL) The system is continuing in the same virtual memory image following a SYSOUT, MAKESYS, or SAVEVM (as opposed to having just booted the same virtual memory image). Ordinarily, these events are uninteresting; they exist solely so that actions taken by the BEFORExxx events can be compensated for after the event. For example, if the before event cleared a cache, the after event might initiate refilling it. There is, of course, no event AFTERDOLOGOUT, as LOGOUT does not "continue".
Section 12.4 System Version Information
1
(I:12.13)
In the description of the (MACHINETYPE (Function) NIL NIL (4) NIL)MACHINETYPE function, add another machine, the DOVE (for the Xerox 1186).
VOLUME IIÿÿï%ÿENVIRONMENT
2
Chapter 13 Interlisp Executive
1
(I:23.37)
(READLINE(READLINE (Function) NIL NIL (4) NIL) RDTBL ÿÿï% ï%) [Function]ÿ
1
ÿÿ
ÿThe Interlisp-D Reference Manual states:
The description on p 13.37 of READLINE's behavior when one or more spaces precede the carriage return applies only when LISPXREADFN(LISPXREADFN (Function) NIL NIL (4) NIL) is READ. LISPXREADFN is initially TTYINREAD, which ignores spaces before the carriage return, and thus will never prompt you with "..." for an additional line. Also, the new Executive does not use READLINE at all, so you will never see this behavior in a new Executive, independent of the setting of LISPXREADFN.
2
Chapter 14 Errors and Breaks
1
Section 14.5 Break Window Variables
1
(II:14.15)
Setting the variable BREAKREGIONSPEC(BREAKREGIONSPEC (Variable) NIL NIL (4) NIL) to NIL no longer creates problems if there is a subsequent break.
Section 14.8 Catching Errors
1
(II:14.22)
The Nlambda functions ERSETQ(ERSETQ (Function) NIL NIL (4) NIL) and NLSETQ (NLSETQ (Function) NIL NIL (4) NIL)now allow evaluation of an arbitrary number of forms, rather than only one.
(II:14.26)
For Medley, the Interlisp interpreter's handler for RESETFORM has been fixed (in Lyric, it worked only from the Common Lisp interpreter, or compiled) .
2
Chapter 17 File Package
1
Note: The File Package is now known as the File Manager.
Section 17.8.1 Functions for Manipulating Typed Definitions
1
(II:17.26)
(HASDEF(HASDEF (Function) NIL NIL (4) NIL) NAME TYPE SOURCE SPELLFLG) [Function]
1
Clarification: HASDEF for type FNS (or NIL) indicates that NAME has an editable source definition, not that NAME is defined at all. Thus if NAME exists on a file for which you have loaded only the compiled version but not the source, HASDEF returns NIL.
Section 17.8.2 Defining New File Package Types
1
(II:17.31)
In the WHENCHANGED(WHENCHANGED NIL NIL NIL (4) NIL) File Package Type Property the REASON argument passed to WHENCHANGED no longer is T or NIL. The Note has been revised as follows:
Note: The REASON argument passed to WHENCHANGED functions is either CHANGED or DEFINED.
(II:17.32)
The Nospread Function FILEPKGTYPE(FILEPKGTYPE (Function) NIL NIL (4) NIL) returns a property list rather than an alist.
Section 17.9.2 Variables
1
(II:17.36)
In the Lyric release, HORRIBLEVARS did not preserve common substructures across several variables.
In Lyric, you could not dump an (UGLYVARS NIL NIL NIL (4) NIL)UGLYVARS or (HORRIBLEVARS NIL NIL NIL (4) NIL)HORRIBLEVARS whose printed representation required more than ARRAY-TOTAL-SIZE-LIMIT characters. This is no longer the case with the Medley release.
Section 17.9.8 Defining New File Package Commands
1
(II:17.47)
The Nospread Function FILEPKGCOM(FILEPKGCOM (Function) NIL NIL (4) NIL) returns a property list rather than an alist.
Section 17.11 Symbolic File Format
1
(PRETTYDEF(PRETTYDEF (Function) NIL NIL (4) NIL) PRTTYFNS PRTTYFILE PRTTYCOMS REPRINTFNS SOURCEFILE
CHANGES) [Function]
1
PRETTYDEF accepts only a symbol for its file argument.
In Lyric and Medley, SYSPRETTYFLG is ignored in Interlisp exec and does not pretty-print values in the executive.
(LISPSOURCEFILEP(LISPSOURCEFILEP (Function) NIL NIL (4) NIL) FILE) [Function]
1
LISPSOURCEFILEP is more specifically defined to mean that the file is in File Manager format and has a file map.
Section 17.11.3 File Maps
1
File maps are no longer stored on the FILEMAP property. See GET-ENVIRONMENT-AND-FILEMAP in the section entitled "Programmer's Interface to Reader Environments" in chapter 3.
2
Chapter 18 Compiler
1
CAUTION: Files compiled in Medley cannot be loaded back into Lyric. Medley-compiled .LCOM and .DFASL files will produce an error message when (LOADING% MEDLEY% FILES% INTO% LYRIC% NIL loading% Medley% files% into% Lyric% NIL (4) NIL)loaded into Lyric. (Lyric-compiled .LCOM and .DFASL files can be loaded and run in Medley. ) If you need to run a Medley file in Lyric, load the source file and use the Lyric compiler.
Note that you should not attempt to compile a file containing a function named STOP(STOP (Function) NIL NIL (4) NIL). The format of the .LCOM file produced by BCOMPL(BCOMPL (Function) NIL NIL (4) NIL) or TCOMPL(TCOMPL (Function) NIL NIL (4) NIL) admits an unfortunate ambiguity in the treatment of the symbol STOPÿÿï%ÿLOAD prefers to treat it as the token signifying the end of the file, rather than as starting the definition of the function STOP.
There is no such restriction for the .DFASL files produced by CL:COMPILE-FILE(CL:COMPILE-FILE (Function) NIL NIL (4) NIL).
2
Chapter 21 CLISP
1
Section 21.8 Miscellaneous Functions and Variables
1
(CLEARCLISPARRAY(CLEARCLISPARRAY (Function) NIL NIL (4) NIL) NAME ÿÿï% ï%ÿ) [Function]
1
Macro and CLISP expansions are cached in CLISPARRAY, the system's CLISP hash array. When anything changes that would invalidate an expansion, it needs to be removed from the cache. CLEARCLISPARRAY removes from the CLISP hash array any key whose CAR is NAME. The system does this automatically whenever you edit a clisp or macro form, or when you redefine a clisp word or macro definition. However, you may need to call CLEARCLISPARRAY explicitly if you change something in a more subtle way, e.g., you redefine a function used by a macro. If your change invalidates an unknown set of expansions, you might prefer to take the performance penalty of calling (CLRHASH CLISPARRAY) to invalidate the entire cache, just to make sure no incorrect expansions are kept around.
2
Chapter 22 Performance Issues
1
Section 22.1 Storage Allocation and Garbage Collection
1
The following should be appended to the description of garbage collection in Interlisp-D:
Another limitation of the reference-counting garbage collector is that the table in which reference counts are maintained is of fixed size. For typical Lisp objects that are pointed to from exactly one place (e.g., the individual conses in a list), no burden is placed on this table, since objects whose reference count is 1 are not explicitly represented in the table. However, large, "rich" data structures, with many interconnections, backward links, cross references, etc, can contribute many entries to the reference count table. For example, if you created a data structure that functioned as a doubly-linked list, such a structure would contribute an entry (reference count 2) for each element.
When the reference count table fills up, the garbage collector can no longer maintain consistent reference counts, so it stops doing so altogether. At this point, a window appears on the screen with the following message, and the debugger is entered:
Internal garbage collector(GARBAGE% COLLECTOR NIL garbage% collector NIL (4) NIL) tables have overflowed, due
to too many pointers with reference count greater than 1.
*** The garbage collector is now disabled. ***
Save your work and reload as soon as possible.
[This message is slightly misleading, in that it should say "count not equal to 1". In the current implementation, the garbage collection of a large pointer array whose elements are not otherwise pointed to can place a special burden on the table, as each element's reference count simultaneously drops to zero and is thus added to the reference count table for the short period before the element is itself reclaimed.]
If you exit the debugger window (e.g., with the RETURN command), your computation can proceed; however, the garbage collector is no longer operating. Thus, your virtual memory will become cluttered with objects no longer accessible, and if you continue for long enough in the same virtual memory image you will eventually fill up the virtual memory backing store and grind to a halt.
Section 22.5 Using Data Types Instead of Records
1
(II:22.13)
The note in this section states that "pages for datatypes are allocated one page at a time." The note should read:
Space for datatypes is allocated two pages at a time. Thus, each datatype for which any instances at all have been allocated has at least two pages assigned to it.
2
Chapter 23 Processes
1
Section 23.1 Creating and Destroying Processes
1
(III:23.2)
ADD.PROCESS(ADD.PROCESS (Function) NIL NIL (4) NIL) no longer coerces the process name to a symbol. Rather, process names are treated as case-insensitive strings. Thus, you can use strings for process names, and when typing process commands to an exec, you need not worry about getting the alphabetic case correct.
Section 23.2 Process Control Constructs
1
The Medley release fixes the PROCESS.EVAL(PROCESS.EVAL (Function) NIL NIL (4) NIL) and PROCESS.APPLY functions. In PROCESS.EVAL and PROCESS.APPLY, with argument WAITFORRESULT = T, if the computation in the other process aborts (or the process is killed), then PROCESS.EVAL and PROCESS.APPLY(PROCESS.APPLY (Function) NIL NIL (4) NIL) return :ABORTED instead of hanging.
Section 23.6 Typein and the TTY Process
1
BACKGROUNDFNS(BACKGROUNDFNS (Variable) NIL NIL (4) NIL) [Variable]
1
A list of functions to call "in the background". The system runs a process (called "BACKGROUND") whose sole task is to call each of the functions on the list BACKGROUNDFNS repeatedly. Each element is the name of a function of no arguments. This is a good place to put cheap background tasks that only do something once in a while and hence do not want to spend their own separate process on it. However, note that it is considered good citizenship for a background function with a time-consuming task to spawn a separate process to do it, so that the other background functions are not delayed.
TTYBACKGROUNDFNS(TTYBACKGROUNDFNS (Variable) NIL NIL (4) NIL) [Variable]
1
This list is like BACKGROUNDFNS, but the functions are only called while in a tty input wait. That is, they always run in the tty process, and only when the user is not actively typing. For example, the flashing caret is implemented by a function on this list. Again, functions on this list should spend very little time (much less than a second), or else spawn a separate process.
Section 23.8 Process Status Window
1
The Medley release modifies the way in which the Process Status Window can be reshaped and refreshed.
The Process Status Window(PROCESS% STATUS% WINDOW NIL process% status% window NIL (4) NIL) is now created in such a way that reshaping the window reshapes ONLY the backtrace window, not the main window.
The process status window now refreshes itself automatically following a KILL command.
VOLUME IIIÿÿï%ÿINPUT/OUTPUT
2
Chapter 24 Streams and Files
1
Section 24.7 File Attributes
1
((GETFILEINFO (Function) NIL NIL (4) NIL)GETFILEINFO FILE ATTRIB) [Function]
1
NS file servers implement the following additional attributes for GETFILEINFO (neither of these attributes is currently settable with SETFILEINFO(SETFILEINFO (Function) NIL NIL (4) NIL)):
READER(READER NIL NIL NIL (4) NIL) The name of the user who last read the file.
PROTECTION(PROTECTION NIL NIL NIL (4) NIL) A list specifying the access rights to the file. Each element of the list is of the form (name nametype . rights), where name is the name of a user or group or a name pattern, and rights is one or more of the symbols ALL READ WRITE DELETE CREATE MODIFY. For servers running Services release 10.0 or later, nametype is the symbol "--"; in earlier releases it is either INDIVIDUAL or GROUP, to distinguish the type of name. For example, the value ((Jane Jones: -- ALL) (*: -- READ)) means that user Jane Jones has full access to the file, while all members of the default domain only have read access to the file.
Section 24.9 Local Hard Disk Device
1
(III:24.22)
In the Medley release, the {DSK} device now accepts a wider range of characters in file names. Almost any character in char set 0 is acceptable. Previously, if you tried to create a file whose name included, for example, an underscore, you would see a "FILE NOT FOUND" error.
Section 24.10 Floppy Disk Device
1
(III:24.26)
As of the Lyric release, CPM-format floppy disks are no longer supported.
Section 24.12 Temporary Files and CORE Device
1
(III:24.30)
In Medley, (GETFILEINFO xx 'LENGTH) works for both opened and closed NODIRCORE streams.
A closed (NODIRCORE (File Device) NIL NIL (4) NIL)NODIRCORE stream can be reopened.
Section 24.18.1 Pup File Server Protocols
1
UNIXFTPFLG(UNIXFTPFLG (Variable) NIL NIL (4) NIL) [Variable]
1
When the Leaf protocol was first implemented for the Vax Unix operating system, its use was inconsistent with the operation of the Pup FTP server on the same host: the Leaf server supported versions, but the Ftp server knew only about the native, versionless file system. Thus, Lisp could not use the two protocols interchangeably. For example, if it used Ftp to write a file FOO, the Ftp server would, in versionless style, overwrite the versionless file FOO, rather than create a new version FOO;6 to supersede the highest version FOO;5 created by the Leaf server.
Lisp thus makes the conservative assumption that the Ftp server is unusable for anything other than directory enumeration on a host of type UNIX. This is unfortunate, since it is often the case that Ftp is more efficiently implemented than Leaf, since one need only tune the performance of sequential access.
More recent versions of the Unix Pup software have a Leaf and Ftp server more in agreement with each other. Setting UNIXFTPFLG to true (it is initially NIL) informs Lisp that all the Unix servers accessible on your internetwork that possess Ftp servers are safe to use in parallel with their Leaf servers.
Section 24.18.1 and 24.18.2 Use of BREAKCONNECTION with File Servers
1
(III:24.37)
In Medley, the function BREAKCONNECTION can be used equally well with NS servers and Leaf servers. Formerly, it only worked on Leaf servers, and there was a separate function (BREAK.NSFILING.CONNECTION HOST) to handle NS servers.
((BREAKCONNECTION (Function) NIL NIL (4) NIL)BREAKCONNECTION HOST FAST) [Function]
1
Breaks the file server connection to HOST. If HOST = T, breaks connections to all file servers that understand the BREAKCONNECTION method (currently Leaf and NS). BREAKCONNECTION returns the server name, or if HOST = T, returns a list of all hosts that responded to the BREAKCONNECTION request.
This function may be useful if Lisp and the server disagree about what files are open, or if the Lisp system is caching something that you do not want it to; e.g., if you get a file busy error from another workstation for a file that you may have touched on this workstation.
The behavior of BREAKCONNECTION is server-specific. On an NS server, BREAKCONNECTION releases any locks that Lisp may have on recently-accessed files, including those for open files, but does not close any files from Lisp's point of view--any subsequent access to an open file will quietly reestablish the connection. Most NS servers have a short timeout on the order of 10 minutes after which an implicit BREAKCONNECTION occurs if you have no files open.
On a Leaf server, BREAKCONNECTION first closes any files. If the argument FAST is true, it marks the files closed without attempting to close them cleanly. Leaf connections ordinarily do not timeout if any files at all are open.
Section 24.18.2 NS File Server Protocols
1
(III:24.37)
Medley incorporates the random access capability on NS servers provided by the NSRANDOM LispUsers module in Lyric.
The Medley release also supports NS file names containing characters other than character set 0 (e.g., Greek characters).
Section 24.18.3 Operating System Designations
1
DEFAULT.OSTYPE(DEFAULT.OSTYPE (Variable) NIL NIL (4) NIL) [Variable]
1
If a host's name is not found in NETWORKOSTYPES(NETWORKOSTYPES (Variable) NIL NIL (4) NIL), its operating system type is assumed to be the value of DEFAULT.OSTYPE. This variable may be of use to sites with many servers all of the same type. Its default value (IFS) is, unfortunately, inappropriate for most sites. It is recommended you set DEFAULT.OSTYPE in the initialization file that lives on the local disk (not in an init file on a file server, since Lisp needs to know the operating system type before talking to the server).
2
Chapter 25 Input/Output Functions
1
Section 25.2 Input Functions
1
(LASTC(LASTC (Function) NIL NIL (4) NIL) FILE) [Function]
1
The function LASTC can return an incorrect result when called immediately following a PEEKC(PEEKC (Function) NIL NIL (4) NIL) on a file that contains run-coded NS characters.
Section 25.3.2 Printing Numbers
1
(III:25.15)
In the PRINTNUM(PRINTNUM (Function) NIL NIL (4) NIL) function, the FLOAT format option (FLOAT 7 2 NIL T) is illegal; change the option to (FLOAT 7 2 NIL 0).
Section 25.3.4 Printing Unusual Data Structures
1
(HPRINT(HPRINT (Function) NIL NIL (4) NIL) EXPR FILE UNCIRCULAR DATATYPESEEN) [Function]
1
Using HPRINT to save structures that include pointers to raw storage will cause stack overflows. This includes dumping things using the VARS(VARS NIL NIL NIL (4) NIL), UGLYVARS(UGLYVARS NIL NIL NIL (4) NIL), or HORRIBLEVARS(HORRIBLEVARS NIL NIL NIL (4) NIL) filemanager commands.
For example, a font descriptor points to raw storage, and cannot be dumped; for that reason, other system data types (e.g. windows) that point to fonts also cannot be dumped.
Section 25.4 Random Access File Operations
1
(III:25.20)
The first argument in the FILEPOS(FILEPOS (Function) NIL NIL (4) NIL) function should be called STR not PATTERN.
(III:25.20)
In the Medley release, the function COPYBYTES(COPYBYTES (Function) NIL NIL (4) NIL) now accepts START and END arguments even when the input stream is not random access. This caused an error in earlier releases.
Section 25.6 PRINTOUT
1
(III:25.27)
The PRINTOUT command .FONT(.FONT NIL NIL NIL (4) NIL) changes the DSPFONT(DSPFONT NIL NIL NIL (4) NIL) font permanently, that is, even after printout finishes.
Section 25.8.3 READ Macros
1
(III:25.42-43)
These READMACROS(READMACROS NIL NIL NIL (4) NIL) appear only in the OLD-INTERLISP-T readtable. (See Section 2 for a description of Lyric readtables.)
2
Chapter 26 User Input/Output Packages
1
Section 26.3 ASKUSER(ASKUSER (Function) NIL NIL (4) NIL)
1
(ASKUSER WAIT DEFAULT MESS KEYLST TYPEAHEAD LISPXPRNTFLG
OPTIONSLST FILE) [Function]
1
ASKUSER does not accept a string to mean a stream open on the string; you must call OPENSTRINGSTREAM(OPENSTRINGSTREAM (Function) NIL NIL (4) NIL) if that's what you mean.
Section 26.4 TTYIN Display Typein Editor(TTYIN% DISPLAY% TYPEIN% EDITOR NIL TTYIN% display% typein% editor NIL (4) NIL)
1
(III:26.22)
The following fixes have been made to TTYIN in the Medley release:
ÿÿïfÿ TTYIN now respects the DSPLEFTMARGIN of the ttydisplaystream, rather than assuming it is zero.
ÿÿïf ÿ You can now assign the keyaction 194 (octal 302--acute accent in the NS character set) to a key and TTYIN will not treat it like the UNDO key (except on the 1132, where this functionality is still on blank-middle).
ÿÿïf ÿ TTYIN correctly handles prompts that are wider than the window.
ÿÿïf ÿ TTYIN now handles NS characters correctly when you are using a fixed-width font into which you have coerced, say, Classic characters for the non-zero character sets.
ÿÿïf ÿ TTYIN now handles Escape completion much more efficiently. If the completion is ambiguous, it completes the unambiguous prefix (as it did in Koto but not Lyric); it also correctly interprets escape characters. For example, in an exec with Common Lisp readtable, it correctly completes symbols that start with \\, or a mixed-case symbol written with vertical bars. Also, Escape completion computes character widths correctly when it lowercases an upper case string, rather than leave some garbage bits on the display.
ÿÿïf ÿ The off-by-the-descent bug wherein TTYIN sometimes left stray bits at the bottom of the window has been fixed.
Section 26.4.3 Display Editing Commands
1
(III:26.25)
?= and Meta-P no longer hang if you had an unbalanced string quote in the input.
?=, Meta-P, and the FIX command now work correctly when there are NS characters in the input.
The printout for ?= is now improved; it respects *print-case*, matches up keywords better, and prints abstract syntax descriptions (such as for cl:do) a bit more clearly.
SMARTARGLIST fetches the argument lists of cl:compiled functions, so ?= now works in more cases.
The Ctrl-X command, when the caret is already positioned at the end of the input and everything but parentheses are balanced (i.e., no unbalanced string quotes or vertical bars), types as many closing parentheses as necessary to complete the input and then returns, much as if you had typed right bracket ("]") in Interlisp. Thus, if the cursor is somewhere in the middle of the input, typing two Ctrl-X's is sufficient to complete (assuming all you needed to type were some more parens).
TTYIN can now be used as a substitute for PROMPTFORWORD. The new function TTYINPROMPTFORWORD takes the same set of arguments as PROMPTFORWORD. In the most common cases it then calls TTYIN in "promptforword" mode, so that you can use the mouse and other TTYIN commands on the input. For cases it can't handle, it calls the old PROMPTFORWORD. These cases are: DONTECHOTYPEIN.FLG or KEYBD.CHANNEL is non-NIL; ECHO.CHANNEL is not a displaystream; or TERMINCHARS.LST contains a character other than cr, space or ^X and you have set the variable TTYIN.USE.EXACT.CHARS (initially NIL) to T. TTYIN saves the old definition of PROMPTFORWORD, so you can either have your program explicitly call TTYINPROMPTFORWORD instead of PROMPTFORWORD, or you can have all calls to PROMPTFORWORD changed by doing a (MOVD 'TTYINPROMPTFORWORD 'PROMPTFORWORD).
Section 26.4.5 Useful Macros
1
(III:26.29)
CTRLUFLG(CTRLUFLG NIL NIL NIL (4) NIL) is no longer supported by default. To use this feature, turn it on explicitly: (INTERRUPTCHAR (CHARCODE ^U) 'CTRLUFLG).
2
Chapter 27 Graphic Output Operations
1
Section 27.1.3 Bitmaps
1
Note: The printed representation of bitmaps has changed. Please see release notes Chapter 3, Integration of Interlisp-D/ Common Lisp, "Bitmap Syntax."
(III:27.4)
The following function has been added to Bitmap Operations between the functions EXPANDBITMAP(EXPANDBITMAP (Function) NIL NIL (4) NIL) and SHRINKBITMAP(SHRINKBITMAP (Function) NIL NIL (4) NIL):
(ROTATE-BITMAP(ROTATE-BITMAP (Function) NIL NIL (4) NIL) BITMAP) [Function]
1
Given an m-high by n-wide bitmap, this function returns an n-high by m-wide bitmap. The returned bitmap is the image of the original bitmap, rotated 90 degrees clockwise.
(III:27.4)
In the Medley release, the (EDITBM (Function) NIL NIL (4) NIL)EDITBM function is substantially faster with the inclusion of FASTEDITBM (a former LispUsers module) in the sysout.
Section 27.3 Accessing Image Stream Fields
1
The following functions were not documented in the Koto release of the Interlisp-D Reference Manual:
(DSPCLEOL(DSPCLEOL (Function) NIL NIL (4) NIL) XPOS YPOS HEIGHT) [Function]
1
"Clear to end of line". Clears a region from (XPOS,YPOS) to the right margin of the display, with a height of HEIGHT. If XPOS and YPOS are NIL, clears the remainder of the current display line, using the height of the current font.
(DSPRUBOUTCHAR(DSPRUBOUTCHAR (Function) NIL NIL (4) NIL) DS CHAR X Y TTBL) [Function]
1
Backs up over character code CHAR in the display stream DS, erasing it. If X, Y are supplied, the rubbing out starts from the position specified. DSPRUBOUTCHAR assumes CHAR was printed with the terminal table TTBL, so it knows to handle control characters, etc. TTBL defaults to the primary terminal table.
Section 27.6 Drawing Lines
1
(III:27.17)
The non-NIL value of the DASHING argument of DRAWLINE uses LINEWITHBRUSH. LINEWITHBRUSH is a width-by-width brush which draws then lifts.
In the Medley release, when using the color argument, Interpress (DRAWLINE (Function) NIL NIL (4) NIL)DRAWLINE treats 16x16 bitmaps or negative numbers as shades/textures. Positive numbers continue to refer to color maps, and so cannot be used as textures. To convert an integer shade into a negative number use NEGSHADE (e.g. (NEGSHADE 42495) is -23041).
(III:27.18)
The RELDRAWTO(RELDRAWTO (Function) NIL NIL (4) NIL) function has been corrected so that it no longer draws a spot if the DX and DY arguments are 0.
Section 27.7 Drawing Curves
1
(III:27.18)
For the brush width value of NIL, the previous default value (ROUND 1) has been changed. The default value for the brush width value NIL is the DSPSCALE(DSPSCALE NIL NIL NIL (4) NIL) of the stream (that is, 1 printer's point wide).
(III:27.19)
A new image stream function, DRAWARC(DRAWARC (Function) NIL NIL (4) NIL), follows DRAWCIRCLE in the InterLisp-D Reference Manual.
(DRAWARC CENTERX CENTERY RADIUS STARTANGLE NDEGREES BRUSH
DASHINGSTREAM) [Function]
1
Draws an arc of the circle whose center point is (CENTERX CENTERY) and whose radius is RADIUS from the position at STARTANGLE degrees for NDEGREES number of degrees. If STARTANGLE is 0, the starting point will be (CENTERX (CENTERY + RADIUS)). If NDEGREES is positive, the arc will be counterclockwise. If NDEGREES is negative, the arc will be clockwise. The other arguments are interpreted as described in DRAWCIRCLE.
Section 27.8 Miscellaneous Drawing and Printing Operations
1
(III:27.20)
To have a filled polygon print correctly, set the global variable PRINTSERVICE to floating point value 9.0 for printers running Services 9.0 or later.
When using FILLPOLYGON(FILLPOLYGON (Function) NIL NIL (4) NIL) to be sent to Xerox 8044 Interpress printers, the global variable PRINTSERVICE(PRINTSERVICE (Variable) NIL NIL (4) NIL) must be set to the same value as the Print Service installed on your printer, currently either 8.0, 9.0 or 10.0. Thus, if your printer is running Print Service 9.0, you must set the global variable PRINTSERVICE to the floating point value 9.0. This works around an incompatible change in the Xerox 8044 Interpress implementation.
In Medley, Interpress curves are now rendered at a lower accuracy, allowing faster hardcopy. The spline is now rendered at 1/150 inch; in Lyric it was 1/300 inch.
The following function was omitted from previous version of the Interlisp-D Reference Manual:
(DRAWPOLYGON(DRAWPOLYGON (Function) NIL NIL (4) NIL) POINTS CLOSED BRUSH DASHING STREAM) [Function]
1
Draws a polygon on the image stream STREAM. POINTS is a list of positions to which the figure will be fitted (the vertices of the polygon). If CLOSED is non-NIL, then the starting position is specified only once in POINTS. If CLOSED is NIL, then the starting vertex must be specified twice in POINTS. BRUSH and DASHING are interpreted as described in Chapter 27 of the Interlisp-D Reference Manual.
For example,
(DRAWPOLYGON '((100 . 100) (50 . 125)
(150 . 175) (200 . 100) (150 . 50))
T '(ROUND 3) '(4 2) XX)
would draw a polygon like the following on the display stream XX.
¡ˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÀÀÀÀÀàÀàÀpÀ8À8ÀÀ>ÀüÀðÀÀÀÀÀÀÀ>ÀüÀð8ÀÀÀÀÀÀÀ>ÀüÀÀðàÀÀàÀ@ÀÀÀÀÀ~ÀøÀàÀÀÀÀàÀàÀpÀ~8ÀøÀàÀÀÀÀÀÀ~@ÁøàÇàpÏ€pÇà8ÁøÀ~ÀÀÀÀÀÀàÀøÀ~ÀÀÀÀÀÀÀÀðÀü<03>À>Á€ÀÁ€Àá€Àq€À1€À9€ÀÀq€Ààá€ÀpA€À8ÀÀÀÀ ÀÀpÀàÀÀÀÀÀÀÀ8ÀÀpÀààÀp@À8ÀÀÀÀ ÀÀpÀàÀÀÀÀÀÀÀ8ÀÀpÀààÀp@À8ÀÀÀÀ ÀÀpÀàÀÀÀÀÀÀÀ¸ÀðÀàÀ@ÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€
(III:27.20)
The function FILLPOLYGON contains two new arguments, OPERATION and WINDNUMBER. The new form for the function, and definitions for added arguments, follow.
(FILLPOLYGON(FILLPOLYGON (Function) NIL NIL (4) NIL) POINTS TEXTURE OPERATION WINDNUMBER STREAM) [Function]
1
OPERATION is the BITBLT operation (see page 27.15 in the Interlisp-D Reference Manual) used to fill the polygon. If the OPERATION is NIL, the OPERATION defaults to the STREAM default OPERATION.
WINDNUMBER is the number for the winding rule convention . This number is either 0 or 1; 0 indicates the "zero" winding rule, 1 indicates the "odd" winding rule.
When filling a polygon, there is more than one way of dealing with the situation where two polygon sides intersect, or one polygon is fully inside the other. Currently, FILLPOLYGON to a display stream uses the "odd" winding rule, which means that intersecting polygon sides define areas that are filled or not filled somewhat like a checkerboard. For example,
(FILLPOLYGON '((125 . 125) (150 . 200) (175 . 125)
(125 . 175) (175 . 175))
GRAYSHADE WINDOW)
would produce a display something like this:
/E@@@
 
 PPPUTUTUTªªªªª¨*ªUTUTTUP
¨* 
¨* P@P 
 
@((*¨PUT*€¨* 
¨UPTUPTª¨*ªªªªªUTUUUPUª 
ª€ª 
ª€U@UUU@ªª€ªª€TU@P@
 
 
 
 @PP*¨*¨PP  @
This fill convention also takes into account all polygons in POINTS, if it specifies multiple polygons.
Section 27.12 Fonts
1
A revised set of font printing metrics is a part of the Lyric release of Lisp. Note that Koto font files are still available to users who request them.
With the revised font set the interline spacing (line leading) is now consistent across all fonts within a point size. Previously, text with multiple fonts (but with the same point size, i.e., if a word were made bold or italic, or if the family were changed) would have different leading on different lines. The new .WD files clean up document appearance.
Note that these printer metric changes affect only hardcopy, not the display. The contents of the display fonts are essentially unchanged in Lyric.
Generally, line leading in the Lyric font files is tighter than in previous releases of the fonts. The default line leading is now the same as the font's nominal point size. As a consequence of the above, any text file (one not already formatted for Interpress) which is printed after installation of the new fonts will be formatted to a different length. This means that decisions regarding TEdit line leading, widows and orphans, left/right pages, references to page numbers, etc. will need to change. Koto documentation produced by users may need to be reformatted with different line leading, using the new fonts.
All of the font files now have a new naming scheme, which allows FONTSAVAILABLE(FONTSAVAILABLE NIL NIL NIL (4) NIL) to be able to do more accurate pattern matching. For example, the display font file for modern 8 bold italics used to be named:
Modern8-B-I-C41.Displayfont
The file is now named:
Modern08-BIR-C41.Displayfont
In general font files use the following format:
The family name (e.g., Modern); a two digit size (e.g., 08); a three letter Face (e.g., BIR, for Bold Italic Regular); the letter C followed by the font's character set in base 8 (e.g., C41); and finally an extension (e.g., Displayfont).
((SKETCH a% figure% from% a% document VERSION 3 PRIRANGE (19 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.05 13.0 (PRI 3)) (TEXT (88.0 . 120.0) ("Family") 1 (CENTER BASELINE) (MODERN 10 (MEDIUM REGULAR REGULAR)) ((72.5 116.5 31 13)) BLACK)) ((0.05 13.0 (PRI 4)) (TEXT (112.0 . 176.0) ("Size") 1 (CENTER BASELINE) (MODERN 10 (MEDIUM REGULAR REGULAR)) ((102.5 172.5 19 13)) BLACK)) ((0.05 13.0 (PRI 5)) (TEXT (132.0 . 120.0) ("Face") 1 (CENTER BASELINE) (MODERN 10 (MEDIUM REGULAR REGULAR)) ((121.5 116.5 21 13)) BLACK)) ((0.05 13.0 (PRI 7)) (TEXT (152.0 . 144.0) ("Modern08-BIR-C41.Displayfont") 1 (CENTER BASELINE) (TERMINAL 10 (MEDIUM REGULAR REGULAR)) ((68.0 140.5 168 13)) BLACK)) ((0.05 13.0 (PRI 8)) (TEXT (192.0 . 168.0) ("CharacterSet (base 8)") 1 (CENTER BASELINE) (MODERN 10 (MEDIUM REGULAR REGULAR)) ((142.5 164.5 99 13)) BLACK)) ((0.05 13.0 (PRI 9)) (TEXT (208.0 . 120.0) ("Extension") 1 (CENTER BASELINE) (MODERN 10 (MEDIUM REGULAR REGULAR)) ((185.0 116.5 46 13)) BLACK)) ((0.0 6.0 (PRI 11)) (WIRE ((88 . 128) (88 . 140)) (ROUND 1 BLACK) (NIL (SOLID 18.0 8)) NIL 1 NIL (NIL ((88 . 140) (90.47214 . 132.3916) (85.52786 . 132.3916))))) ((0.0 6.0 (PRI 13)) (WIRE ((208 . 128) (208 . 140)) (ROUND 1 BLACK) (NIL (SOLID 18.0 8)) NIL 1 NIL (NIL ((208 . 140) (210.4721 . 132.3916) (205.5279 . 132.3916))))) ((0.0 6.0 (PRI 14)) (WIRE ((156 . 164) (156 . 152)) (ROUND 1 BLACK) (NIL (SOLID 18.0 8)) NIL 1 NIL (NIL ((156 . 152) (153.5279 . 159.6085) (158.4721 . 159.6085))))) ((0.0 6.0 (PRI 15)) (WIRE ((112 . 164) (112 . 152)) (ROUND 1 BLACK) (NIL (SOLID 18.0 8)) NIL 1 NIL (NIL ((112 . 152) (109.5279 . 159.6085) (114.4721 . 159.6085))))) ((0.05 11.0 (PRI 16)) (TEXT (112.0 . 168.0) ("(two digits)") 1 (CENTER BASELINE) (MODERN 8 (MEDIUM REGULAR REGULAR)) ((90.5 165.5 43 11)) BLACK)) ((0.0 10.0 (PRI 18)) (WIRE ((120 . 144) (120 . 136) (140 . 136) (140 . 144)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)) ((0.0 6.0 (PRI 19)) (WIRE ((132 . 124) (132 . 136)) (ROUND 1 BLACK) NIL NIL 1 NIL NIL)))
(68.0 116.0 174.0 69.0)
1.0
4
The old file naming convention is still supported, however, with the exception of the old Strike file naming convention. In Lyric, FONTCREATE(FONTCREATE (Function) NIL NIL (4) NIL) will first search for fonts using the new font naming convention, and if the desired font is not found it will search using the Koto convention.
Compatibility considerations You can continue using the old printer metrics (.WD files) in Lyric, thus preserving document looks between Koto and Lyric. If you choose to do so, it is recommended that you rename your old .WD files to the new naming scheme (see above), so that you benefit from the changes to the font searching mechanisms. However, we strongly urge you to use the new .WD files. Otherwise, if you exchange TEdit documents with a site that is using the new files, the documents will print differently at the two sites. The creation date, rather than the naming convention, determines whether a .WD file represents the old or new format.
If, after installing the new .WD files, you wish to print a document using the old Koto formatting, make the font variable INTERPRESSFONTDIRECTORIES(INTERPRESSFONTDIRECTORIES (Variable) NIL NIL (4) NIL) point to a directory containing the Koto font files. Also any Lyric printer font file information must be uncached from the sysout. To uncache the fonts, perform
(for INFO in (FONTSAVAILABLE '* '* '* '* 'INTERPRESS)
do (APPLY 'SETFONTDESCRIPTOR INFO))
(III:27.30)
(STRINGWIDTH(STRINGWIDTH (Function) NIL NIL (4) NIL) STR FONT FLG RDTBL) [Function]
1
In Lyric STRINGWIDTH observes *PRINT-LEVEL*(*PRINT-LEVEL* (Variable) NIL NIL (4) NIL) and *PRINT-LENGTH*(*PRINT-LENGTH* (Variable) NIL NIL (4) NIL).
In Medley, STRINGWIDTH with a NIL argument no longer returns the string width of the string with *STANDARD-OUTPUT* font. It now uses DEFAULTFONT.
Some new font manipulation functions have been added to Lisp. They are:
(WRITESTRIKEFONTFILE(WRITESTRIKEFONTFILE (Function) NIL NIL (4) NIL) FONT CHARSET FILENAME) [Function]
1
Takes a display font font descriptor(FONT% DESCRIPTOR NIL font% descriptor NIL (4) NIL) and a character set number, and writes that character set into a file suitable for reading in again. Note that the font descriptor's current state is used (which was perhaps modified by INSPECTing the datum), so this provides a mechanism for creating/modifying new fonts.
For example:
(WRITESTRIKEFONTFILE (FONTCREATE 'GACHA 10) 0 '{DSK}Magic10-MRR-C0.DISPLAYFONT)
writes a font file which is identical in appearance to the current state of Gacha 10 charset 0.
If your DISPLAYFONTDIRECTORIES(DISPLAYFONTDIRECTORIES (Variable) NIL NIL (4) NIL) includes {DSK}, then a subsequent (FONTCREATE 'MAGIC 10) will create a new font descriptor whose appearance is the same as the old Gacha font descriptor.
However, the new font is identical to the old one in appearance only. The individual datatype fields and bitmap may not be the same as those in the old font descriptor, due to peculiarities of different font file formats.
Section 27.13 Font Files and Font Directories
1
(III:27.31)
Press fonts are not part of the sysout since PRESS is now a Library module.
Section 27.14 Font Classes
1
(III:27.32-27.48)
This section has been expunged from the InterLisp-D Reference Manual. Renumber the sections which followed the old Section 27.14 as
SECTION 27.15 ÿÿïOÿ SECTION 27.14 Font Profiles
SECTION 27.16 ÿÿïOÿ SECTION 27.15 Image Objects
SECTION 27.17 ÿÿïOÿ SECTION 27.16 Implementation of Image Streams
Section 27.14 Font Profiles
1
(III:27.34)
The variable FONTCHANGEFLG(FONTCHANGEFLG (Variable) NIL NIL (4) NIL) has an additional value, ALL. FONTCHANGEFLG=ALL indicates that all calls to CHANGEFONT(CHANGEFONT (Function) NIL NIL (4) NIL) are executed.
(III:27.33-34)
The function FONTNAME no longer exists. This function was previously used in Interlisp-D to collect the names and values of variables on FONTDEFSVARS. The variable FONTDEFSVARS is no longer used; it was appropriate when most output devices were fixed-pitch, "line-printer" style devices, but is not suitable for use when most output devices are laser printers.
2
Chapter 28 Windows and Menus
1
Section 28.4 Windows
1
(III:28.13, 28.38)
The ADDMENU(ADDMENU (Function) NIL NIL (4) NIL) function will change a window's RESHAPEFN(RESHAPEFN NIL NIL NIL (4) NIL) and also will change the window's REPAINTFN(REPAINTFN NIL NIL NIL (4) NIL).
Section 28.4.5 Reshaping Windows
1
(III:28.17)
The Lisp window system allows the following minimum (MINIMUM% WINDOW% SIZE NIL minimum% window% size NIL (4) NIL)window sizes:
When creating a new window, the width and height specified must be at least 9, or else you will get an error "region too small to use as a window"
When reshaping a window, the smallest shape you can get is width = 26 and height = height of the font to be used in the window. If you specify a smaller region, SHAPEW(SHAPEW (Function) NIL NIL (4) NIL) will simply adjust it to fit these limits.
Section 28.4.8 Shrinking Windows Into Icons
1
(III:28.22)
SHRINKFN [Window property]
1
In previous releases, there was a bug in the attached window system such that if an attached window had a SHRINKFN(SHRINKFN (Window Property) NIL NIL (4) NIL) of the single symbol DON'T, attempting to shrink the window resulted in a break with the message "UNDEFINED FUNCTION DON'T." For this case in Lyric, all windows that can be shrunk will be, while those windows with a SHRINKFN of the symbol DON'T will be left open.
1
To facilitate the management of window regions, the window property EXPANDREGIONFN(EXPANDREGIONFN (Window Property) NIL NIL (4) NIL) has been added to Lisp. This feature allows applications to arrange for reshaping a window when it is expanded.
(EXPANDREGIONFN (Window Property) NIL NIL (4) NIL)EXPANDREGIONFN [Window property]
1
EXPANDREGIONFN, if non-NIL, should be the function to be called (with the window as its argument) before the window is actually expanded.
The EXPANDREGIONFN must return NIL or a valid region, and must not do any window operations (e.g., redisplaying). If NIL is returned, the window is expanded normally, as if the EXPANDREGIONFN had not existed. The region returned specifies the new region for the main window only, not for the group including any of its attached windows. The window will be opened in its new shape, and any attached windows will be repositioned or rejustified appropriately. The main window must have a REPAINTFN(REPAINTFN (Window Property) NIL NIL (4) NIL) which can repaint the entire window under these conditions.
As with expanding windows normally, the OPENFN(OPENFN (Window Property) NIL NIL (4) NIL) for the main window is not called.
Also, the window is reshaped without checking for a special shape function (e.g., a DOSHAPEFN(DOSHAPEFN (Window Property) NIL NIL (4) NIL)).
(III:28.23)
Add the variable DEFAULTICONFN(DEFAULTICONFN (Variable) NIL NIL (4) NIL) to the Icon section of the InterLisp-D Reference Manual:
(DEFAULTICONFN (Variable) NIL NIL (4) NIL)DEFAULTICONFN [Variable]
1
Changes how an icon is created when a window having no ICONFN is shrunk or when SHRINKW, with a TOWHAT argument of a string, is called. The value of DEFAULTICONFN is a function of two arguments (window text); text is either NIL or a string. DEFAULTICONFN returns an icon window.
The initial value of DEFAULTICONFN is MAKETITLEBARICON(MAKETITLEBARICON NIL NIL NIL (4) NIL). It creates a window that is a title bar only; the title is either the text argument, the window's title, or "Icon made <date>" for titleless windows. MAKETITLEBARICON places the title bar at some corner of the main window.
An alternative behavior is available by setting DEFAULTICONFN to be TEXTICON(TEXTICON (Function) NIL NIL (4) NIL). TEXTICON creates a titled icon window from the text or window's title. It is described further in Appendix B (ICONW).
(III:28.23)
You can now copy-select titled icons(TITLED% ICONS NIL titled% icons NIL (4) NIL) such as those used by FileBrowser, SEdit, TEdit, Sketch. The default behavior is that the icon's title is unread (via BKSYSBUF), but if the icon window has a COPYFN property, that gets called instead, with the icon window as its argument. For example, if the name displayed in an icon is really a symbol, and you want copy selection to cause the name to be unread correctly with respect to the package and read table of the exec you are copying into, you could put the following COPYFN property on the icon window:
(lambda (window)
(il:bksysbuf <fetch symbolic name from window> t ))
Section 28.4.11 Terminal I/O and Page Holding
1
(III:28.29)
TTYDISPLAYSTREAM(TTYDISPLAYSTREAM (Function) NIL NIL (4) NIL) has been fixed so that it can be successfully used with non-windows.
Section 28.5 Menus
1
Two features have been added to this section, ICONW for creating icons, and FREE MENU, for creating and using free menus. Both features were formerly part of the Lisp Library.
The description for ICONW is in Appendix C. The FREE MENU description is in Appendix D.
1
The Lyric version of Free Menu differs in some respects from the Koto version of Free Menu. Following is a description of the incompatible feature changes from the old version to the new version of Free Menu. Some of the terminology used in these notes is introduced in the Free Menu documentation found in Appendix B. Please reference Appendix B before reading the following notes.
ÿÿïfÿ The function FREEMENU(FREEMENU (Function) NIL NIL (4) NIL) is used to create a Free Menu, replacing and combining the functions FM.MAKEMENU(FM.MAKEMENU (Function) NIL NIL (4) NIL) and FM.FORMATMENU(FM.FORMATMENU (Function) NIL NIL (4) NIL).
ÿÿThe description of Free Menuÿ has these changes:
1. There is no longer a WINDOWPROPS(WINDOWPROPS NIL NIL NIL (4) NIL) list in the Free Menu Description. Instead, the window properties TITLE and BORDER thatwere previously set in the WINDOWPROPS list can now be passed to the function FREEMENU. Other window properties (like FM.PROMPTWINDOW) can be set directly after Free Menu returns the window using the system function WINDOWPROP(WINDOWPROP (Function) NIL NIL (4) NIL). See Appendix B, Section 28.7.14, Free Menu Window Properties.
2. Setting the initial state of an item is now done with the item property INITSTATE(INITSTATE (FreeMenu Item Prop) NIL NIL (4) NIL) in the item description, rather than the STATE(STATE NIL NIL NIL (4) NIL) property.
Free Menu Items has been modified as follows:
1. 3STATE(3STATE (FreeMenu Item) NIL NIL (4) NIL) items now have states OFF, NIL, and T (instead of a NEUTRAL state). They appear by default in the NIL state.
2. STATE items are general purpose items which maintain state, and replace the functionality of NCHOOSE(NCHOOSE% ITEM NIL NCHOOSE% item NIL (4) NIL) items. To get the functionality of NCHOOSE items, specify the property MENUITEMS (a list of items to go in a popup menu), which instructs the STATE item to popup the menu when it is selected. STATE items do not display their current state by default, like NCHOOSE items used to. Instead, if you want the state displayed in the Free Menu, you have to link the STATE item to a DISPLAY(DISPLAY% ITEM NIL DISPLAY% item NIL (4) NIL) item using a Free Menu Item Link named "DISPLAY". The current state of the STATE item will then automatically be displayed in the specified DISPLAY item. The item properties MENUFONT and MENUTITLE also apply to the popup menu.
3. NWAY(NWAY (FreeMenu Item) NIL NIL (4) NIL) items are declared slightly differently. There is now the notion of an NWay Collection, which is a collection of items acting an a single nway item. The Collection is declared by specifying any number of NWay items, each with the same COLLECTION property(COLLECTION% PROPERTY NIL COLLECTION% property NIL (4) NIL). NWay Collections have properties themselves, accessible by the macro FM.NWAYPROPS(FM.NWAYPROPS (Macro) NIL NIL (4) NIL). These properties can be specified in property list format as the value of the NWAYPROPS(NWAYPROPS (FreeMenu Item Prop) NIL NIL (4) NIL) Item Property of the first NWay item declared for each Collection. NWay Collections by default cannot be deselected (a state in which no item selected). Setting the Collection property DESELECT to any non-nil value changes this behavior. The state of the NWay Collection is maintained in its STATE property.
4. EDIT(EDIT (FreeMenu Item) NIL NIL (4) NIL) items no longer will stop at the edge of the window. Editing is either restricted by the MAXWIDTH property, or else it is not restricted at all. The EDITSTOP property is obsolete. When you start editing with the right mouse button the item is first cleared.
5. EDITSTART(EDITSTART (FreeMenu Item) NIL NIL (4) NIL) items now specify their associated edit item (there can only be one, now) by a Free Menu Item Link named "EDIT" from the EDITSTART item to the EDIT item.
6. TITLE(TITLE (FreeMenu Item) NIL NIL (4) NIL) items are replaced by DISPLAY items, which work the same way.
With Free Menu, the item interface functions can take the actual item datatype, the item's ID or LABEL, or a list of the form (GROUPID ITEMID) specifying a particular item in a group, as the ITEM argument.
The description for ICONW is in Appendix B. The FREE MENU description is in Appendix C.
1
ÿÿThese changes have occurred in the ÿFree Menu Interface functions:
(FREEMENU(FREEMENU (Function) NIL NIL (4) NIL) DESCRIPTION TITLE BACKGROUND BORDER) [Function]
1
Replaces FM.MAKEMENU(FM.MAKEMENU (Function) NIL NIL (4) NIL) and FM.FORMATMENU(FM.FORMATMENU (Function) NIL NIL (4) NIL). The desired format is not specified as the value of the FORMAT property in the group's PROPS list.
(FM.GETITEM(FM.GETITEM (Function) NIL NIL (4) NIL) ID GROUP WINDOW) [Function]
1
Replaces FM.ITEMFROMID(FM.ITEMFROMID (Function) NIL NIL (4) NIL).
Searches within GROUP for an item whose ID property is ID.
ID is matched against the item ID and then the item LABEL. If GROUP is NIL, the entire menu is searched.
(FM.GETSTATE(FM.GETSTATE (Function) NIL NIL (4) NIL) WINDOW) [Function]
1
Replaces FM.READSTATE(FM.READSTATE (Function) NIL NIL (4) NIL).
Returns a property list of the selected item in the menu. This list now also includes the NWay Collections and their selected item.
(FM.CHANGELABEL(FM.CHANGELABEL (Function) NIL NIL (4) NIL) ITEM NEWLABEL WINDOW UPDATEFLG) [Function]
1
Has a new argument order. Now works by rebuilding the item label from scratch, taking the original specification of MAXWIDTH and MAXHEIGHT into account. NEWLABEL can be an atom, string, or bitmap. If UPDATEFLG is set, then the Free Menu Group's regions are recalculated, so that boxed groups will be redisplayed properly.
(FM.CHANGESTATE(FM.CHANGESTATE (Function) NIL NIL (4) NIL) X NEWSTATE WINDOW) [Function]
1
Has a new argument order.
X is either an item or an NWay Collection ID. NEWSTATE is an appropriate state to the type of item. If an NWay collection, NEWSTATE is the actual item to be selected, or NIL to deselect. Toggle items take either T or NIL as NEWSTATE, and 3STATE items take OFF, NIL, or T, and STATE items take any atom, string, or bitmap as their new state. For EDIT items, NEWSTATE is the new label, and FM.CHANGELABEL(FM.CHANGELABEL (Function) NIL NIL (4) NIL) is called to change the label of the EDIT item.
(FM.RESETSHAPE(FM.RESETSHAPE (Function) NIL NIL (4) NIL) WINDOW ALWAYSFLG) [Function]
1
Replaces FM.FIXSHAPE(FM.FIXSHAPE (Function) NIL NIL (4) NIL)
(FM.HIGHLIGHTITEM(FM.HIGHLIGHTITEM (Function) NIL NIL (4) NIL) ITEM WINDOW) [Function]
1
Replaces FM.SHADEITEM(FM.SHADEITEM (Function) NIL NIL (4) NIL) and FM.SHADEITEMBM(FM.SHADEITEMBM (Function) NIL NIL (4) NIL).
FM.HIGHLIGHTITEM will programmatically highlight an item, as specified by its HIGHLIGHT property. The highlighting is temporary, and will be undone by a redisplay or scroll. To programmatically shade an item an arbitrary shade, use the new function FM.SHADE(FM.SHADE (Function) NIL NIL (4) NIL).
Section 28.6.2 Attached Prompt Windows
1
(GETPROMPTWINDOW(GETPROMPTWINDOW (Function) NIL NIL (4) NIL) MAINWINDOW #LINES FONT DONTCREATE [Function]
1
In the Lyric release, the prompt window created by GETPROMPTWINDOW is not independently closeable, as it was in Koto. That is, selecting Close from the right-button window menu in the prompt window is the same as selecting it from the menu of any other window in the groupÿÿï%the entire window group is closed.ÿ
Section 28.6.3 Window Operations and Attached Windows
1
(III:28.51)
Communication of Window Menu Commands between Attached Windows(ATTACHED% WINDOWS NIL Attached% Windows NIL (4) NIL) is dependent on the name of function used to implement the window command, e.g., CLOSEW implements CLOSE (refer to PASSTOMAINCOMS documentation under Attached Windows). Consequently, if an application intercepts a window command by changing WHENSELECTEDFN for an item in the WindowMenu (for example, to advise the application that a window is being closed), windows may not behave correctly when attached to other windows.
To get around this problem, the Medley release provides the variable *attached-window-command-synonyms*. This variable is an ALIST, where each element is of the form (new-command-function-name . old-command-function-name).
For example, if an application redefines the WindowMenu to call my-close-window when CLOSE is selected, that application should:
(cl:push '(my-close-window . il:closew) il:*attached-window-command-synonyms*)
in order to tell the attached window system that my-close-window is a synonym function for CLOSEW.
2
Chapter 29 Hardcopy Facilities
1
(III:29.3)
The HARDCOPYW(HARDCOPYW (Function) NIL NIL (4) NIL) function now has an additional argument, HARDCOPYTITLE, which allows you to change or eliminate the "Window Image" message on IP screen images. Moreover, HARDCOPYW function now allows you to print large images occupying more than one page.
(HARDCOPYW WINDOW/BITMAP/REGION FILE HOST SCALEFACTOR ROTATION PRINTERTYPE HARDCOPYTITLE) [Function]
1
HARDCOPYTITLE is a string specifying a title to print on the page containing the screen image. If NIL, the string "Window Image" is used. To omit a title, specify the null string.
2
Chapter 30 Terminal Input/Output
1
Section 30.1 Interrupt Characters
1
(III:30.2)
Control-P(CONTROL-P NIL Control-P NIL (4) NIL) The Control-P (PRINTLEVEL(PRINTLEVEL NIL NIL NIL (4) NIL)) interrupt is no longer supported. The interrupt of that name still exists and is defaultly assigned to Control-P, but has no effect on printing.
Control-T(CONTROL-T NIL Control-T NIL (4) NIL) The Control-T interrupt flashes the window belonging to the tty process and prints its status information in the prompt window. This avoids disrupting the user typescript.
(III:30.3)
(INTERRUPTCHAR(INTERRUPTCHAR (Function) NIL NIL (4) NIL) CHAR TYP/FORM HARDFLG ÿÿï%) [Function]ÿ
1
If the argument TYP/FORM is a symbol designating a predefined system interrupt (RESET, ERROR, BREAK, etc), and HARDFLG is omitted or NIL, then the hardness defaults to the standard hardness of the system interrupt (e.g., MOUSE for the ERROR interrupt).
Section 30.2.3 Line Buffering
1
(III:30.11-12)
The (BKSYSBUF (Function) NIL NIL (4) NIL)BKSYSBUF function has been changed, for compatibility reasons. The description now reads as follows:
(BKSYSBUF X FLG RDTBL) [Function]
1
BKSYSBUF appends the PRIN1(PRIN1 NIL NIL NIL (4) NIL)-name of X to the system input buffer. The effect is the same as though the user had typed X. Returns X.
If FLG is T, then the PRIN2(PRIN2 NIL NIL NIL (4) NIL)-name of X is used, computed with respect to the readtable RDTBL. If RDTBL is NIL or omitted, the current readtable of the TTY process (which is to receive the characters) is used. Use this for copy selection functions that want their output to be a readable expression in an Exec.
Note that if you are typing at the same time as the BKSYSBUF is being performed, the relative order of the typein and the characters of X is unpredictable.
(III:30.12)
Add the function BKSYSCHARCODE(BKSYSCHARCODE (Function) NIL NIL (4) NIL) used in line buffering:
((BKSYSCHARCODE (Function) NIL NIL (4) NIL)BKSYSCHARCODE CODE) [Function]
1
This function appends the character code CODE to the system input buffer. The function BKSYSBUF(BKSYSBUF (Function) NIL NIL (4) NIL) is implemented by repeated calls to BKSYSCHARCODE.
Section 30.4.1 Changing the Cursor Image
1
(III:30.14)
The CURSOR(CURSOR NIL NIL NIL (4) NIL) record has been changed to a DATATYPE, and its field names have changed in the following way:
Old Field Name New Field Name
1
CURSORBITMAP(CURSORBITMAP NIL NIL NIL (4) NIL) CUIMAGE(CUIMAGE NIL NIL NIL (4) NIL)
CURSORHOTSPOTX(CURSORHOTSPOTX NIL NIL NIL (4) NIL) CUHOTSPOTX(CUHOTSPOTX NIL NIL NIL (4) NIL)
CURSORHOTSPOTY(CURSORHOTSPOTY NIL NIL NIL (4) NIL) CUHOTSPOTY(CUHOTSPOTY NIL NIL NIL (4) NIL)
The CURSORHOTSPOT field no longer exists; its value can be fetched by composing CUHOTSPOTX and CUHOTSPOTY into a POSITION, or stored by destructuring a POSITION into those fields.
In Lyric, the (CURSORCREATE (Function) NIL NIL (4) NIL)CURSORCREATE function accepted as its argument bitmaps of any size, but caused an obscure error. In Medley, a bitmap that is bigger than 16 high or 16 wide will cause an ILLEGAL ARGUMENT error.
Section 30.5 Keyboard Interpretation
1
(III:30. 19ÿÿï$ÿ20)
(KEYDOWNP(KEYDOWNP (Function) NIL NIL (4) NIL) KEYNAME) [Function]
(KEYACTION(KEYACTION (Function) NIL NIL (4) NIL) KEYNAME ACTIONS ÿÿï%)ÿ [Function]
1
KEYNAME is interpreted differently in Lyric: If KEYNAME is a small integer, it is taken to be the internal key number. Otherwise, it is taken to be the name of the key. This means, for example, that the name of the "6" key is not the number 6. Instead, spelled-out names for all the digit keys have been assigned. The "6" key is named SIX. It happens that the key number of the "6" key is 2. Therefore, the following two forms are equivalent:
(KEYDOWNP 'SIX)
(KEYDOWNP 2)
Note: The key labeled HELP on the 1186 is named DBK-HELP for use in KEYACTION.
Section 30.6 Display Screen
1
(III:30.22-23)
(CHANGEBACKGROUND(CHANGEBACKGROUND (Function) NIL NIL (4) NIL) SHADE ÿÿï%) [Function]
1
The function CHANGEBACKGROUND treats the SHADE argument as a 4 X 4 texture. The CHANGEBACKGROUNDBORDER function, on the other hand, treats the SHADE argument as a 2 X 8 texture.
Therefore, note that the same SHADE argument, when used by the two functions, will not necessarily produce the same background and border shades on the display screen.
1
(III:30.23)
The VIDEORATE(VIDEORATE (Function) NIL NIL (4) NIL) function works only on the 1108. Append the following note to the VIDEORATE function description:
(VIDEORATE TYPE) [Function]
1
Note: VIDEORATE does not work on the 1186.
Section 30.7 Miscellaneous Terminal I/O
1
(III:30.24)
(BEEPON(BEEPON (Function) NIL NIL (4) NIL) FREQ) [Function]
1
The argument FREQ is measured in hertz, not in TICKS.
2
Chapter 31 Ethernet
1
Section 31.3.1 Name and Address Conventions
1
(III:31.8-9)
Amend the first paragraph, describing NSADDRESS(NSADDRESS NIL NIL NIL (4) NIL), to list, in order, the components of NSADDRESS:
Addresses of hosts in the NS world consist of three parts, a network number, a machine number, and a socket number. These three parts are embodied in the Interlisp-D data type NSADDRESS. The components of NSADDRESS are 32-bit network, 48-bit host, 16-bit socket.
Move the following sentence from page 31.9 of the IRM to the last paragraph of Name and Address Conventions on page 31.8:
If you wish to manipulate NSADDRESS and NSNAME(NSNAME NIL NIL NIL (4) NIL) objects directly you should load the Lisp Library Module ETHERRECORDS.
NS Address Format
1
In Medley, you can now specify NS addresses in decimal notation, the form presented by the Chat interface of Network Services software. In this notation, a decimal number is broken up by hyphens every 3 digits, much like commas in standard American numerical notation. You can also specify a full 48-bit host number in octal without breaking it into 16-bit segments.
An NS address is specified in the form:
net#host#socket
If the address contains a hyphen in any field, the entire address is interpreted in decimal; otherwise in octal. The field socket is optional, and is defaulted appropriately for the application; if specified, it is a single integer in the same radix as the rest of the address. The field net and its terminating # are optional, defaulting usually to the directly-connected network. The fields net and host are non-negative integers written in one of three forms:
ÿÿïf A ÿsequence of 16-bit octal numbers, separated by periods.
ÿÿïf A ÿsingle integer in octal radix.
ÿÿïfÿ A sequence of 3-digit decimal numbers, separated by hyphens.
The special variable *NSADDRESS-FORMAT*(*NSADDRESS-FORMAT* (Variable) NIL NIL (4) NIL) specifies the form used whenever the system prints an NS address object. Its possible values are:
NIL Octal radix, with the host number in three 16-bit parts, the same as in Lyric.
:OCTAL Octal radix without separators.
:DECIMAL Decimal radix with hyphens.
For example, the following all represent the same address, in the three formats listed above:
1750#0.125000.76771#
1750#25200076771#
1-000#2-852-158-969#
The following functions exist for manipulating NS addresses:
(PARSE-NSADDRESS(PARSE-NSADDRESS (Function) NIL NIL (4) NIL) STR DEFAULTSOCKET) [Function]
Parses the string STR into an NS address by the rules listed above, or returns NIL if STR is not a well-formed address. If DEFAULTSOCKET is non-NIL and the string does not include a socket field, the socket of the resulting NS address is set to DEFAULTSOCKET.
(COERCE-TO-NSADDRESS(COERCE-TO-NSADDRESS (Function) NIL NIL (4) NIL) HOST DEFAULTSOCKET) [Function]
Returns an NSADDRESS object corresponding to HOST, or NIL if it can't. This function should be called by any software wanting to convert a user-supplied NS host specification into a network address. HOST can be any one of the following:
ÿÿïf The name of a host, whose address is found by consulting the Clearinghouse data base.
ïf A symbol or string ÿin the syntax of an NS address, as described above.
ÿÿïf An NSADDRESS object.
ïf A list of the form (NSHOSTNUMBER a b c), specifying the host number as three 16-bit values. In this case, the network number is omitted (zero).
ÿIf DEFAULTSOCKET is non-NIL and the socket is unspecified, the socket of the result is set to DEFAULTSOCKET (if HOST is an ÿÿNSADDRESS objectÿ, it is copied in this case).
Network Routing Maintenance
1
The representation of Pup and NS routing tables has changed, and the background gateway listener processes have been tuned to significantly reduce their overhead.
The INFO command for the Pup and NS gateway listener processes in the process status window now display their routing tables. Clicking with the left button displays the table in random order, middle button displays the table sorted by network number (this takes a little longer).
Section 31.3.2 Clearinghouse Functions
1
(III:31.9)
The variable AUTHENTICATION.NET.HINT(AUTHENTICATION.NET.HINT (Variable) NIL NIL (4) NIL) has been added to Clearinghouse Functions. It follows the CH.NET.HINT variable in the Interlisp-D Reference Manual.
AUTHENTICATION.NET.HINT [Variable]
1
AUTHENTICATION.NET.HINT can be set to CH.NET.HINT to speed up the initial authentication connection. Its value is interpreted in the same manner as CH.NET.HINT.
Section 31.3.3 NS Printing
1
(III:31.12)
With the Medley release there is now a single Printer Watcher process for all NS printers. This mean you won't get a stack overflow if you hardcopy many files in quick succession.
Section 31.3.5.3 Performing Courier Transactions
1
(III:31.20-21)
The COURIER.OPEN(COURIER.OPEN (Function) NIL NIL (4) NIL) function requires that a courier server be running on the host machine.
Section 31.3.5.3.3 Using Bulk Data Transfer
1
(III:31.24-25)
The following is a correction and clarification to the description in the Interlisp-D Reference Manual of receiving values from a bulk data transfer(BULK% DATA% TRANSFER NIL bulk% data% transfer NIL (4) NIL):
It is possible for a Courier procedure to return both bulk data, in the form of a bulk data sink, and a single value (or list of values) as the normal result of the call. However, the Lisp function COURIER.CALL(COURIER.CALL (Function) NIL NIL (4) NIL) only returns one value, either the bulk data stream (when the bulk data sink argument is NIL) or the regular value. There are two principal ways in which a caller can obtain both values.
The usual way to get both values is to pass a function as the bulk data argument, have it retrieve the bulk data and prcoess it as a side-effect (e.g., store it into a variable bound around the COURIER.CALL), then return NIL so that the procedure's returned value is returned from COURIER.CALL.
The other way, which is documented incorrectly in the IRM, is to pass NIL as the bulkdata argument, thus getting the bulk data stream back from COURIER.CALL, process the stream, and then get the procedure's returned value by closing the stream. Contrary to the IRM, however, you have to close the bulk data stream using its internal close function, SPP.CLOSE, rather than the user-level function CLOSEF, which consumes the value internally and returns only the stream.
Section 31.5 Pup Level One Functions
1
\10MBTYPE.PUP(\10MBTYPE.PUP (Variable) NIL NIL (4) NIL) [Variable]
1
\10MBTYPE.3TO10(\10MBTYPE.3TO10 (Variable) NIL NIL (4) NIL) [Variable]
1
The values of these variables are the 10MB Ethernet encapsulation types(10MB% ETHERNET% ENCAPSULATION% TYPES NIL 10MB% Ethernet% encapsulation% types NIL (4) NIL) for PUP packets and Pup-to-10MB address translation packets, respectively. The initial values of these variables are 512 and 513, respectively. However, these values are illegal for an Ethernet conforming to IEEE 802.3 specifications(IEEE% 802.3% SPECIFICATION NIL IEEE% 802.3% specification NIL (4) NIL).
New encapsulation types have been defined for IEEE 802.3 networks. To use them, set the variable \10MBTYPE.PUP to 2560 (decimal) and \10MBTYPE.3TO10 to 2561. Then call either (RESTART.ETHER) or (LOGOUT), so that the Ethernet code can reinitialize itself. It may be convenient for a site to smash these values directly into the standard sysout everyone fetches by using the function READSYS(READSYS (Function) NIL NIL (4) NIL) and its ^V command from the TeleRaid Library module(TELERAID% LIBRARY% MODULE NIL TeleRaid% Library% module NIL (4) NIL) (the sysout must be on disk or a random-access file server). Note that all pup hosts on a network (servers as well as workstations) must simultaneously choose to use the new values; those using different values will be unable to communicate with each other. The System Tool must also be upgraded at the same time.
Section 31.6.1 Creating and Managing XIPs
1
The function NSNET.DISTANCE was previously undocumented.
(NSNET.DISTANCE(NSNET.DISTANCE (Function) NIL NIL (4) NIL) NET#) [Function]
1
Returns the "hop count" to network NET#, i.e., the number of gateways through which an XIP must pass to reach NET#, according to the best routing information known at this point. The local (directly-connected) network is considered to be zero hops away. Current convention is that an inaccessible network is 16 hops away. NSNET.DISTANCE may need to wait to obtain routing information from an Internetwork Router if NET# is not currently in its routing cache.
[This page intentionally blank](LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC "4-" "") STARTINGPAGE# 1) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD RIGHT) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC "4-" "")) (270 15 288 36) NIL) (HEADING NIL (HEADINGTYPE FOOTINGR) (54 27 558 36) NIL) (TEXT NIL NIL (54 54 504 723) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC "4-" "")) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD LEFT) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC "4-" "")) (54 15 288 36) NIL) (HEADING NIL (HEADINGTYPE FOOTINGV) (54 27 558 36) NIL) (HEADING NIL (HEADINGTYPE VERSOHEAD) (54 762 558 36) NIL) (TEXT NIL NIL (54 54 504 684) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC "4-" "")) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD RIGHT) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC "4-" "")) (270 15 288 36) NIL) (HEADING NIL (HEADINGTYPE FOOTINGR) (54 27 558 36) NIL) (HEADING NIL (HEADINGTYPE RECTOHEAD) (54 762 558 36) NIL) (TEXT NIL NIL (54 54 504 684) NIL)))))o6ÌÌø<00>øT3ÌÌøTFøø PAGEHEADINGFOOTINGRT.ÌÌø TT4øTT4øTT3ÌêøêT3ÌÌøT4HHøøTT7H<00>ø<00>øTT.ÌÌøTT3HHøøT-øT-øT-ø2T3ø¼T3ø¼T3HHø øT3HHøøT3Ìêø êT3ÌÌø ÞT3øT-ÌÌøT3HHøøT6HHøŠøT6HHøŠøT3ÌÌø ÞT3øT3ø2T-ÌÌøT3ÌÌøøT3HHøøT3øT3HHøøT-ø
T5H<00>ø<00>ø5HHøø5HHøø3øT5ø´Ì6ø´ÌT6ø´ÌT2øø2øø-øT-øT2ø
5øð5øð,ø,ø2,ø,ø2HHøø2ø2ø2ø22ÌÌø2ÌÌø2-ÌÌøT3ÌÌøØT-ÌØøT-ÌÌø T3ÌÌø ÞT-ÌÌøT,ÌÌø ,,ððÔ2Ìêø ê5HHø~ø5HHø~ø5HHøŠø5HHøŠø2ÌÌøÈ2üüø2üüø2üüÎ2üüø,Ì8ø,Ì8ø,ääø2Ìêøê5HHøÈÔ,ÌÌø2ÌÞøÞ,ÌÌø,ÌÌø2HHøø,ÀÀø5HÌø´Ì5Ìø´Ì2ÌÌø Þ2HHø ø5HÌø´Ì,ÌÌø,Ìäø2HHøø5Ìðøð2HHøø2ÌÌø Þ5HHøÈÔ,ÌÌø-øäìT2Ì ø2ÌÌøFøø PAGEHEADING VERSOHEADFøø PAGEHEADING RECTOHEADEøø PAGEHEADINGFOOTINGVEøø PAGEHEADINGFOOTINGR3ÌÌøT2ÌÌø%MODERN
MODERN
MODERN
MODERN
MODERN
MODERN
MODERN
MODERN
MODERN
?1(DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8))
TERMINAL
MODERN
MODERN
MODERN TERMINAL
MODERN

TIMESROMAN
MODERN
MODERN
MODERN
?1(DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8))
CLASSIC
GACHAMODERN
GACHA
CLASSIC
TERMINAL
MODERN TERMINAL
MODERN MODERNMODERNMODERNMODERN
MODERN
MODERN
MODERN
 HRULE.GETFNMODERN
m<l HRULE.GETFNMODERN
=k*k HRULE.GETFNMODERN
j,j HRULE.GETFNMODERN
;,!: HRULE.GETFNMODERN!9<00>7-o$h h  $9 HRULE.GETFNMODERN 8 8 HRULE.GETFNMODERN 8 7.8 HRULE.GETFNMODERN i i%$f
$
#&IM.INDEX.GETFN#$ #'IM.INDEX.GETFN#$i%$f$#-IM.INDEX.GETFN##$6"
a HRULE.GETFNMODERN
f$#!IM.INDEX.GETFN #$"7$ # $ #@$# $78 HRULE.GETFNMODERN d %c!IM.INDEX.GETFN"
a HRULE.GETFNMODERN
f$ $#$#$"N$ HRULE.GETFNMODERN   HRULE.GETFNMODERN  %$ #&IM.INDEX.GETFN$0""
$ HRULE.GETFNMODERN

$ #!$ "$"$ "s$ IM.INDEX.GETFN¯$54 HRULE.GETFNMODERN \ %f[$f$#6$"*$fZ$"%$9 HRULE.GETFNMODERN 8 8 HRULE.GETFNMODERN d %f
$ #(IM.INDEX.GETFN#$ #(IM.INDEX.GETFN#$"$# IM.INDEX.GETFN#$# IM.INDEX.GETFN#$f$%$c$#$"
$a HRULE.GETFNMODERN
fl$$$* HRULE.GETFNMODERN 
$
#*IM.INDEX.GETFN$"~$7'8 HRULE.GETFNMODERN d
%f$# IM.INDEX.GETFN$# IM.INDEX.GETFNm$3 HRULE.GETFNMODERN 2 4 HRULE.GETFNMODERN B %A +IM.INDEX.GETFNMODERN
 Ì3 HRULE.GETFNMODERN 20 4 HRULE.GETFNMODERN 7 8 HRULE.GETFNMODERN d %c$#%IM.INDEX.GETFN$"
$a HRULE.GETFNMODERN
f$
#
$b$ #«$
#T$##$1"0 HRULE.GETFNMODERN cIM.INDEX.GETFN""a HRULE.GETFNMODERN
c !IM.INDEX.GETFN""a HRULE.GETFNMODERN
f(" "* HRULE.GETFNMODERN >  HRULE.GETFNMODERN ! HRULE.GETFNMODERN  %$#!IM.INDEX.GETFN#$#$IM.INDEX.GETFNa$f#m$7"8 HRULE.GETFNMODERN d %#f#IM.INDEX.GETFN#$#$#6$#N$5#4 HRULE.GETFNMODERN f$4IM.INDEX.GETFNMODERN
$#-IM.INDEX.GETFN$9 HRULE.GETFNMODERN 85 8 HRULE.GETFNMODERN d %ff$#.IM.INDEX.GETFNC$"é$f$#~$f$
#&IM.INDEX.GETFN#Í$ #"$#$#W$ #$#IM.INDEX.GETFN3$#$&IM.INDEX.GETFNMODERN
$#0$ #a$5#4 HRULE.GETFNMODERN c$#$"
$X HRULE.GETFNMODERN
d²$##IM.INDEX.GETFNd$#718 HRULE.GETFNMODERN d
%c$##IM.INDEX.GETFN$"$$$X HRULE.GETFNMODERN
c$#%IM.INDEX.GETFN$"$$X HRULE.GETFNMODERN
f$#$ #c$#%$c
#*IM.INDEX.GETFN$
"
$X HRULE.GETFNMODERN
f

#'544 HRULE.GETFNMODERN c$#%IM.INDEX.GETFN"
X HRULE.GETFNMODERN
d$ó$$c #(IM.INDEX.GETFN $X HRULE.GETFNMODERN
c
#*IM.INDEX.GETFN $X HRULE.GETFNMODERN
d¾$/%8 HRULE.GETFNMODERN
d %$f$
#'IM.INDEX.GETFN$ "3$f$ "#$""$"($#"$#$
#$"$#$
#"$#$ HRULE.GETFNMODERN   HRULE.GETFNMODERN  HRULE.GETFNMODERN $ #"IM.INDEX.GETFNB$"$[#$IM.INDEX.GETFNJ$ #u$#$[$#$[$#*$IM.INDEX.GETFNMODERN
L$#$[4$[b$f$#$#-$[$ #"IM.INDEX.GETFNV$#|$#"$A$$#$IM.INDEX.GETFN
$#$f$ #$#$[$#IM.INDEX.GETFN$#p$#$#$#o$#$#Q$#$R#$"$#<00>$[$
##IM.INDEX.GETFND$[$ #IM.INDEX.GETFNK$#$+IM.INDEX.GETFNMODERN
$[$#+IM.INDEX.GETFNK$#7IM.INDEX.GETFN$7)8 HRULE.GETFNMODERN c
*IM.INDEX.GETFN a HRULE.GETFNMODERN
fk$#IM.INDEX.GETFNMODERN
$#$##IM.INDEX.GETFN$#$IM.INDEX.GETFN$##IM.INDEX.GETFN#$'IM.INDEX.GETFNMODERN
$#&IM.INDEX.GETFNÁ$^$ #"IM.INDEX.GETFN"$#n$Z$ #"IM.INDEX.GETFN$Z$
##IM.INDEX.GETFN$Z$ #"IM.INDEX.GETFN"$#$#$#¿$#&$#$ZZ$Z$!IM.INDEX.GETFNMODERN
 $Z$ #!IM.INDEX.GETFN$Z$ #"IM.INDEX.GETFN$Z$ #!IM.INDEX.GETFNQ$#$#I$$Õ$Z$
##IM.INDEX.GETFN$Z$#$IM.INDEX.GETFN$Z$
##IM.INDEX.GETFNG$#$#$#Ÿ$ #¯$
#$#$7(8 HRULE.GETFNMODERN d
%f$#(IM.INDEX.GETFN ##$#$n   3 HRULE.GETFNMODERN 4 4 HRULE.GETFNMODERN d
%c#%IM.INDEX.GETFN"!a HRULE.GETFNMODERN
f" fR (IM.INDEX.GETFN  _ 9 HRULE.GETFNMODERN 8 8 HRULE.GETFNMODERN 7$8 HRULE.GETFNMODERN d %f$#,IM.INDEX.GETFNC$78 HRULE.GETFNMODERN d %$f$##IM.INDEX.GETFN$#$#IM.INDEX.GETFNMODERN
L$@ %A4 [$ HRULE.GETFNMODERN   HRULE.GETFNMODERN 9$< HRULE.GETFNMODERN  %$##IM.INDEX.GETFN$"
$ HRULE.GETFNMODERN
$#&$",$"$"Z$# $#$7/8 HRULE.GETFNMODERN d %f$ #!IM.INDEX.GETFN $"$ #
$#$#)$f
$"$ #$#$#$f %f$ #(IM.INDEX.GETFN/$.- HRULE.GETFNMODERN @ % BA IM.INDEX.GETFNMODERN
 
"IM.INDEX.GETFN
0"C4728 HRULE.GETFNMODERN d %f$
#'IM.INDEX.GETFN/$5#4 HRULE.GETFNMODERN I &IM.INDEX.GETFN3"H"
H HRULE.GETFNMODERN
f .A{I,IM.INDEX.GETFN"
H HRULE.GETFNMODERN
fN"54 HRULE.GETFNMODERN f=09 HRULE.GETFNMODERN 8 8 HRULE.GETFNMODERN A ]IM.INDEX.GETFNÀdO$#!IM.INDEX.GETFN,$##IM.INDEX.GETFN$##IM.INDEX.GETFN@$#$#y$#$f>,IM.INDEX.GETFN3 HRULE.GETFNMODERN 2 4 HRULE.GETFNMODERN 534 HRULE.GETFNMODERN c,IM.INDEX.GETFN"% "a HRULE.GETFNMODERN
fþ"3 HRULE.GETFNMODERN 8 8 HRULE.GETFNMODERN 778 HRULE.GETFNMODERN dZfÁfüQ7IM.INDEX.GETFNµf¥f<01>718 HRULE.GETFNMODERN d %ft$f¤$%3 HRULE.GETFNMODERN 2 4 HRULE.GETFNMODERN .0- HRULE.GETFNMODERN @ %A (IM.INDEX.GETFN 5.)- HRULE.GETFNMODERN -A )IM.INDEX.GETFN
 

"R *IM.INDEX.GETFN
5(4 HRULE.GETFNMODERN ]
*IM.INDEX.GETFN a HRULE.GETFNMODERN
J 
«]-IM.INDEX.GETFN a HRULE.GETFNMODERN
f
b.%- HRULE.GETFNMODERN AfAAIM.INDEX.GETFNpAXn
 9 HRULE.GETFNMODERN 8 8 HRULE.GETFNMODERN ,+ HRULE.GETFNMODERN ]$(IM.INDEX.GETFNMODERN
  " $ a HRULE.GETFNMODERN
fB$ 9$ (IM.INDEX.GETFN$^#IM.INDEX.GETFN-$#^ # IM.INDEX.GETFN\$"$"$" $"7$"y$"+$*%) HRULE.GETFNMODERN ? %A*!) HRULE.GETFNMODERN ? %AJ)).) HRULE.GETFNMODERN ? %A
 -

A
)IM.INDEX.GETFNMODERN
 (* HRULE.GETFNMODERN 
#'IM.INDEX.GETFN  HRULE.GETFNMODERN
:$f6$fu$
#´$!H' HRULE.GETFNMODERN ? %¤",IM.INDEX.GETFNMODERN
 
  HRULE.GETFNMODERN
%A" 8 'C6*˜.*- HRULE.GETFNMODERN ? %AsAz5.4 HRULE.GETFNMODERN c+IM.INDEX.GETFN a HRULE.GETFNMODERN
J!+IM.INDEX.GETFN:·:"u9 HRULE.GETFNMODERN 8# 8 HRULE.GETFNMODERN 78 HRULE.GETFNMODERN c"IM.INDEX.GETFN"
a HRULE.GETFNMODERN
f
D"IM.INDEX.GETFN27 8 HRULE.GETFNMODERN d %$f$ #%IM.INDEX.GETFN#
$#
$#"$#$%504 HRULE.GETFNMODERN c##IM.INDEX.GETFN!"
a HRULE.GETFNMODERN
f}IM.INDEX.GETFNIM.INDEX.GETFN "IM.INDEX.GETFNf¯7,8 HRULE.GETFNMODERN d
%f$#$IM.INDEX.GETFN$"$"$A %A#
&IM.INDEX.GETFN""i#78 HRULE.GETFNMODERN d %f$#IM.INDEX.GETFN
$#IM.INDEX.GETFN#:$78 HRULE.GETFNMODERN d%f$ # IM.INDEX.GETFN#e$9 HRULE.GETFNMODERN 8' 8 HRULE.GETFNMODERN7$IM.INDEX.GETFN8 HRULE.GETFNMODERN G0"F"
F HRULE.GETFNMODERN
fM-IM.INDEX.GETFN.)OIM.INDEX.GETFN' HRULE.GETFNMODERN ? %AC>
;>Ú>C>©> 

> r >.)- HRULE.GETFNMODERN ? %=NAGA 
AF 
 Aë AH 778 HRULE.GETFNMODERN d
%f#IM.INDEX.GETFN#O$'#$9 HRULE.GETFNMODERN 8% 8 HRULE.GETFNMODERN 78 HRULE.GETFNMODERN E˜d %fQ$ #)IM.INDEX.GETFN$ #)IM.INDEX.GETFN$c
#*IM.INDEX.GETFN"
S HRULE.GETFNMODERN
f«$A %A#IM.INDEX.GETFNMODERN
<
-5+4 HRULE.GETFNMODERN dF"c#%IM.INDEX.GETFN"
S HRULE.GETFNMODERN
f/ "7"""#Zc
#*IM.INDEX.GETFN"
S HRULE.GETFNMODERN
f""""D
# "%"2"*78 HRULE.GETFNMODERN @ %@"
V@

%IM.INDEX.GETFNMODERN
ød
%f$
#&IM.INDEX.GETFN#D$"$"$78 HRULE.GETFNMODERN d %#f$#$ #>$# $#IM.INDEX.GETFN2$d
%f$#$IM.INDEX.GETFN
$"
#"$"$&$#2"%"
$S HRULE.GETFNMODERN
f2$"$"$
" $ "$ ""$"$"4$"^$
#$7;8 HRULE.GETFNMODERN d
%fB$ #I$f $ #(IM.INDEX.GETFN#B$ #)IM.INDEX.GETFN#Ç$ #x$A°f@$"$c$ #(IM.INDEX.GETFN$""
$S HRULE.GETFNMODERN
f$$"$"^$"B$"$"=$"$"$"3$"$f
$Y~fB$_ ¼ BMOBJ.GETFN3TERMINAL
 f
%f
$ #$ "$
"N$c (IM.INDEX.GETFN+"
S HRULE.GETFNMODERN
f "$#!$"$$
"$#$ "$"$ "$f
"$fª$ #µ$Yzf-$_ª BMOBJ.GETFN3MODERN
f>$"%$54 HRULE.GETFNMODERN d$fg$f$fn$fA$#$IM.INDEX.GETFN$ff$ff1$f$$$_$#$ $_  SKIO.GETFN.2MODERN
D"f$
#'IM.INDEX.GETFN$f#t$f{$#6IM.INDEX.GETFN¦$P6O'W
%c$ #(IM.INDEX.GETFN$"
$a HRULE.GETFNMODERN
f $ #
$
#*IM.INDEX.GETFN$#+IM.INDEX.GETFN$A˜fJ$c$#0IM.INDEX.GETFN$"
$a HRULE.GETFNMODERN
f$$3IM.INDEX.GETFN$f
$`Pf`$f$3IM.INDEX.GETFNœ$fß$5.4 HRULE.GETFNMODERN W %fO$78 HRULE.GETFNMODERN d%f($"A$o##o##o
#/#78 HRULE.GETFNMODERN d %$f $#*IM.INDEX.GETFN#$#$#$ #'IM.INDEX.GETFN$#A#A

w
 ¹9 HRULE.GETFNMODERN 8 8 HRULE.GETFNMODERN 78 HRULE.GETFNMODERN d%f$#$IM.INDEX.GETFN!$ #IM.INDEX.GETFN"$
#IM.INDEX.GETFN$5!4 HRULE.GETFNMODERN d
%f4=IM.INDEX.GETFNff¢#IM.INDEX.GETFN,C7-8 HRULE.GETFNMODERN d %c#$a HRULE.GETFNMODERN
fj$#,IM.INDEX.GETFNÛ$#($ HRULE.GETFN$fC$#2IM.INDEX.GETFNs$c2IM.INDEX.GETFNMODERN
$a HRULE.GETFNMODERN
f# $#p$f$#
$T9) #-IM.INDEX.GETFN=$f($#*IM.INDEX.GETFN$$fT$ #-IM.INDEX.GETFN$d %f$#*IM.INDEX.GETFN#$"$#c*IM.INDEX.GETFNMODERN

 a HRULE.GETFNMODERN
d6$#$#$"/$#=$#$#$f$#$#&IM.INDEX.GETFN$#9$f0$
#$#%IM.INDEX.GETFN #n$A %A$-IM.INDEX.GETFNx 
=
 <<< 
   
  7.8 HRULE.GETFNMODERN d
%f#-IM.INDEX.GETFN#E$
 HRULE.GETFNMODERN ±$fX$V HRULE.GETFNMODERN
f$U$$#%IM.INDEX.GETFN#E$ #(IM.INDEX.GETFN$
#*IM.INDEX.GETFN#f;$$U$ #!IM.INDEX.GETFND$#$# $ #&$ #!$#S$
#'IM.INDEX.GETFNA$UJ$
#0IM.INDEX.GETFN)$#IM.INDEX.GETFN $W.$U$#(IM.INDEX.GETFN$#$#$#$#&$#$U$#W$#-IM.INDEX.GETFNMODERN
%#$ #=$#-$#:$#a$# $#-IM.INDEX.GETFNMODERN
M#<$#$#$ #$U$#&IM.INDEX.GETFNî$
# $;IM.INDEX.GETFNH$ #&IM.INDEX.GETFNQ$ #0IM.INDEX.GETFN»$#d$# $U$#&IM.INDEX.GETFN#Z$#5$#f$U$ #+IM.INDEX.GETFNz$ #
$#$U$#'IM.INDEX.GETFN$#!$f[$"$"$#"2$"
$fX$V HRULE.GETFNMODERN
fI$!$e #%IM.INDEX.GETFN$"
$a HRULE.GETFNMODERN
f #(IM.INDEX.GETFN#$#*IM.INDEX.GETFN:$#%$e$
#'IM.INDEX.GETFN"
$a HRULE.GETFNMODERN
f $
#*IM.INDEX.GETFN$f$""$"$f"2$#$"$#$e$ #(IM.INDEX.GETFN$"$a HRULE.GETFNMODERN
f
#)IM.INDEX.GETFN$f$6$#+IM.INDEX.GETFN$"$a HRULE.GETFNMODERN
ft #$ #$ "'$
"p$ $#+IM.INDEX.GETFN$"$# HRULE.GETFNMODERN
#"-$"F$"&$#'$#$#$# $#$#$#$#@$#$"$#+IM.INDEX.GETFN&$#$e$
#*IM.INDEX.GETFN$"
$a HRULE.GETFNMODERN
#f $ #(IM.INDEX.GETFN$e$#-IM.INDEX.GETFN$ "$a HRULE.GETFNMODERN
#W 
#)IM.INDEX.GETFN#$#+IM.INDEX.GETFN$f#=$
#£$#%IM.INDEX.GETFN$5(4 HRULE.GETFNMODERN c,IM.INDEX.GETFN!" a HRULE.GETFNMODERN
f3"AƒI.6- HRULE.GETFNMODERN ? %A>5IM.INDEX.GETFNR
 p§Aá U' O 
 \9 HRULE.GETFNMODERN 8 8 HRULE.GETFNMODERN#d %f$
#&IM.INDEX.GETFN)$"e$ #M$$$
#M"
$a HRULE.GETFNMODERN
#f"¦$9 HRULE.GETFNMODERN 8! 8 HRULE.GETFNMODERN 7"8 HRULE.GETFNMODERN d %^
$%IM.INDEX.GETFN$
# IM.INDEX.GETFN$^
$%IM.INDEX.GETFN®$o
%$c
#*IM.INDEX.GETFN$$$a HRULE.GETFNMODERN
#f$"8$#$#$# $"$#U$#$#
$ HRULE.GETFNMODERN %$%IM.INDEX.GETFNMODERN
^$ "
 HRULE.GETFNMODERN
#
$#IM.INDEX.GETFN $"P$"
$"$f$"$"
$#IM.INDEX.GETFN$"1$"$"$#Ë$f4$#K$"$f
%f$
#*IM.INDEX.GETFN$c*IM.INDEX.GETFNMODERN

"
a HRULE.GETFNMODERN
f)$")$#%IM.INDEX.GETFN$$#$5)4 HRULE.GETFNMODERN f$ %$f$#IM.INDEX.GETFN_$N$M HRULE.GETFNMODERN
L #"IM.INDEX.GETFN$#IM.INDEX.GETFN$K#$IM.INDEX.GETFN$
# IM.INDEX.GETFN$K#$IM.INDEX.GETFN$
# IM.INDEX.GETFN$f$
#?$
#$
#$#$#$A)IM.INDEX.GETFNMODERN
 ¸% HRULE.GETFNMODERN $%$%%%$%IM.INDEX.GETFN
$ #&IM.INDEX.GETFN$"$$$ HRULE.GETFNMODERN
$"*$"+$"X$N78 HRULE.GETFNMODERN d%c$#-IM.INDEX.GETFN$$a HRULE.GETFNMODERN
f
$# $"!$#($"$f$"$#T HRULE.GETFNMODERN
f %#f$ #&IM.INDEX.GETFN#B$ #$c$ #$a HRULE.GETFNMODERN
f$ #$#7(8 HRULE.GETFNMODERN d
%c$##IM.INDEX.GETFN$a HRULE.GETFNMODERN
f
$"$#$# HRULE.GETFNMODERN   HRULE.GETFNMODERN , HRULE.GETFNMODERN 
%#&$ #IM.INDEX.GETFN'$
#$¯$
#$
#2$2E$ #$#IM.INDEX.GETFNH$#
- HRULE.GETFNMODERN
Ar A( A" A| "ž "h " "9 A  : A  ! A @ A 
/IM.INDEX.GETFN
c A
O A
A
 A^ A A A  =  ,IM.INDEX.GETFN   "@ "" "l " "0IM.INDEX.GETFN A- " "! A³ A* 6 A1 AF "Ô A "N " " # #
- HRULE.GETFNMODERN
A£ A 7'8 HRULE.GETFNMODERN d %f $#4IM.INDEX.GETFN:$ #$"$c# $a HRULE.GETFNMODERN
f#$ #a$ #$ HRULE.GETFNMODERN  % µ718 HRULE.GETFNMODERN d%f$ #)IM.INDEX.GETFNI$!.' HRULE.GETFNMODERN @%AJ.;IM.INDEX.GETFNÇ )IM.INDEX.GETFN½Â K 6W jU &C5%4 HRULE.GETFNMODERN e
*IM.INDEX.GETFN a HRULE.GETFNMODERN
e,IM.INDEX.GETFN a HRULE.GETFNMODERN
JG[IM.INDEX.GETFNìGIM.INDEX.GETFNJb
µ$IM.INDEX.GETFN )EIM.INDEX.GETFNI"ñ5*4 HRULE.GETFNMODERN f;$e$#+IM.INDEX.GETFN$" $a HRULE.GETFNMODERN
f#$"F$"Ò$#O$"($g$
Úzº