2-Jun-83 06:33:16-EDT,521;000000000000 Return-path: <rms@MIT-OZ> Date: Thursday, 2 June 1983, 06:31-EDT From: Richard M. Stallman <rms@MIT-OZ> Subject: System 94 released. To: INFO-LISPM-MIT@MIT-OZ System 94 is now released, with microcode 239. Documentation is in SRC:<L.DOC>SYS94.MSG. User programs should be compatible with system 93. The main change is a new way notifications are presented to the user. Please try converting to system 94 as soon as possible. System 93 is not going to be patched any more unless there is an urgent need. System 94 comes with microcode 239. An earlier microcode version contained bugs. All System 94 bands should be updated to use microcode 239. There are no major changes that affect user programs. The most important change is a rearrangement of the macroinstruction destination codes which will allow several new macroinstructions to be created. As a result of this change, QFASL files made by Meta-X Fasl Update in system 94 cannot be loaded into system 93, nor can any QFASL file made by fasdumping data that includes compiled functions. QFASL files produced by QC-FILE in system 94 can be loaded into system 93, but a few things will work only if all system 93 patches are loaded. Programming Changes: A] ERRORP of a String Is Now NIL. B] WITH-TIMEOUT. C] Inhibiting SETF and LOCF. D] "A or An" String Functions. E] FS:BALANCE-DIRECTORIES Improved. F] Pathname Creation Changes. G] Dangerous Conditions Not Caught. H] End-of-File Errors Handled Differently. I] Flavor Aliases. J] :INVERSE-AROUND Methods. K] TV:DESELECT-AND-MAYBE-BURY-WINDOW Takes New Argument. L] TAB-WIDTH Argument to :COMPUTE-MOTION and :STRING-LENGTH Operations. A] ERRORP of a String Is Now NIL. It used to be T for compatibility with the times before the new error system. B] WITH-TIMEOUT. The new special form WITH-TIMEOUT allows you to execute any piece of code with a timeout. Do (WITH-TIMEOUT (timeout timeout-forms...) body...) body is executed with a timeout in effect for timeout 60'ths of a second. If body finishes before then, values of the last form in body are returned. Otherwise, at the end of the timeout, the timeout-forms are evaluated and the values of the last one of them are returned. For example, (WITH-TIMEOUT ((* 60. 60.) (FORMAT QUERY-IO " ... Yes.") T) (Y-OR-N-P "Really do it? (Yes automatically after one minute) ")) C] Inhibiting SETF and LOCF. If you have a macro or subst function that should never be used in a SETF, you can prevent SETF from working on it by giving the function name a SETF property of SI:UNSETFABLE, as in (DEFUN FOO (A) (AREF A 3)) (DEFDECL FOO SETF SI:UNSETFABLE) Normally the system would automatically handle (SETF (FOO X) Y) by expanding the definition of FOO and using AREF's SETF definition. The DEFDECL shown prevents that. SI:UNLOCFABLE is used similarly to forbid LOCF. D] "A or An" String Functions. (STRING-SELECT-A-OR-AN word) returns "a" or "an" according to the string word; whichever one appears to be correct to use before word in English. (STRING-APPEND-A-OR-AN word) returns the result of prepending "a" or "an" to word with a space in between. E] FS:BALANCE-DIRECTORIES Improved. FS:BALANCE-DIRECTORIES now takes a new keyword argument :DIRECTION which specifies to transfer files only in one direction between the directories. The value may be :1->2 meaning transfer only from the first directory to the second, or :2->1 meaning transfer only from the second to the first. The default, NIL, means transfer either way. F] Pathname Creation Changes. The :NEW-PATHNAME operation, and all other operations for creating a new pathname, now replace any invalid component specified with something valid. The :NEW-DEFAULT-PATHNAME operation is now identical to :NEW-PATHNAME. The :VALID-NAME, etc, operations no longer exist. To tell whether the value of FOO is a valid name (say) component for a pathname on host BAR, you can do (EQUAL FOO (SEND (SEND BAR-PATHNAME ':NEW-NAME FOO) ':NAME)) G] Dangerous Conditions Not Caught. ERRSET, CATCH-ERRORS and IGNORE-ERRORS no longer catch "dangerous" conditions (those for which :DANGEROUS-CONDITION-P returns non-NIL). These include errors such as running out of virtual memory. You can still catch them with a CONDITION-CASE if you are willing to suffer the dire consequences. H] End-of-File Errors Handled Differently. Errors for end of file from operations such as :TYI now signal a condition with SYS:END-OF-FILE as a condition name, and a standard error message which includes the stream. The argument to these operations, which used to be used as the error messages if it was non-NIL, is now just a boolean flag saying whether to get an error on end of file. I] Flavor Aliases. You can now define one flavor name to be an alias for another. Do (DEFFLAVOR FOO () (BAR) :ALIAS-FLAVOR) to make FOO an alias for BAR. Attempting to create an instance of FOO will actually make an instance of BAR. The main use of this is for changing a flavor's name gracefully. It has been used to eliminate various flavors such as TV:COMMAND-MENU-PANE which are now identical to other existing flavors without requiring user programs to be changed. J] :INVERSE-AROUND Methods. :INVERSE-AROUND methods are a new feature of flavors. They work like :AROUND methods but they are nested in the inverse order: those on earlier flavor components are done inside those on later flavor components. Thus, you can use them to bind a special variable to a particular value, and then be able to override a base flavor's binding with a new :INVERSE-AROUND on a mixin or combination flavor. K] TV:DESELECT-AND-MAYBE-BURY-WINDOW Takes New Argument. TV:DESELECT-AND-MAYBE-BURY-WINDOW now takes two arguments, a window and an optional deselect-mode. The latter is passed as an argument to the :DESELECT operation on the window. It can specify where to put the window in the list of previously selected windows used by Terminal and System commands, including Terminal S. L] TAB-WIDTH Argument to :COMPUTE-MOTION and :STRING-LENGTH Operations. These two operations on windows now take the spacing to assume between tab stops as an additional argument. The default is to use the spacing that the window actually uses on output. Miscellaneous User Interface Changes: A] New Way of Presenting Notifications. B] No More "Illegal Simultaneous Access". C] Password Guessing Improved. D] Converse: End Now Stays in Converse, and Control-End exits. E] SI:EDIT-DISK-LABEL Improved. F] QC-FILE and Microcompilation. G] Dumping Microassemblies. H] Shifted Mouse Characters. I] TV:FULL-SCREEN-HACK-MIXIN Is Back. J] Network Break in SUPDUP. K] Host Objects Print Readably. L] System Menu Layouts Command Records Partially Visible Windows. M] DEBUG-IO May Be NIL. N] Debugger Command Meta-R. O] BREAKON With No Argument. A] New Way of Presenting Notifications. When a notification is to be printed (such as, for an incoming QSEND, a window or background process wanting to do input or output, or garbage collection activity), what happens depends on the selected window. Certain flavors of window will, when selected, allow the notification to be printed on them. These include Lisp listeners and the typeout windows of editors. Other windows, such as SUPDUP, PEEK, and editors except for short notifications, cannot allow the notification to be simply printed. In the past, the latter class of windows handled a notification by presenting a small pop-up window and printing the notification there. But this is slow. In the hope of making notifications less of a nuisance, a new behavior is installed for these windows. The keyboard will beep, and the who-line mouse documentation line will announces that notifications are waiting. Blinking asterisks will appear at both ends of the line to attract your attention. The notifications will keep on waiting until you switch to a window that can print them directly -- such as a lisp listener -- or until you type Terminal N. The new command Terminal N is defined to quickly show you your new notifications. Terminal 1 N will display all the notifications you have received (like (PRINT-NOTIFICATIONS)) in addition to any pending notifications. If you would rather not see the notifications now and would like your mouse documentation line to go back to its usual function, type Terminal 2 N. You can still see the notifications when you are ready to see them by typing Terminal N at that time. If the notification is going to urge you to select some window, the notification will go away if you select the window without printing the notification. You can do this with Terminal 0 S as you used to. The variable TV:WAIT-FOR-NOTIFICATIONS-FLAG controls whether the old or new behavior will occur. Set this variable to NIL to get the old behavior back. Please express your opinions on this change. B] No More "Illegal Simultaneous Access". The tendency of the Twenex file server to complain "illegal simultaneous access" if you abort out of opening a file has been circumvented. It ought not to happen any more. C] Password Guessing Improved. Once a password is recorded for one host, if you connect to a file server on another host the system will guess that your password on the second host is the same as on the first. As before, the first time you connect to a host your user-id (or the part of it after the last period) will be used as the guess for the password. D] Converse: End Now Stays in Converse, and Control-End exits. The meanings of End and Control-End in Converse have been interchanged. End now sends the message and stays in Converse, while Control-End sends it and exits. The idea is that if you want to exit and you type End and it fails to exit, you can exit painlessly by typing Abort, whereas the old way if you typed End by habit and you wanted to stay in Converse it was a hassle to switch back there. E] SI:EDIT-DISK-LABEL Improved. This function now prompts for commands so you can tell whether you are inside it or not. The new Control-D command describes a partition. If you try to exit without saving your changes, you will be asked whether to save them. F] QC-FILE and Microcompilation. The way to say in a source file that function FOO should be microcompiled is now (DEFDECL FOO COMPILER:MICROCOMPILE T) G] Dumping Microassemblies. Once you have used UA:ADD-ASSEMBLY to assemble an incremental microcode module, you can now save it in a file with UA:DUMP-MODULE. Normally you need only give it one argument, the output file name. The result is a QFASL file which saves the result of the microassembly. Just loading the file is equivalent to calling UA:ADD-ASSEMBLY again, but is much faster. Remember that the microcode module is not available for use unless you call UA:LOAD-MODULE. This is true whether the module was created by UA:ADD-ASSEMBLY or by loading a file made by UA:DUMP-MODULE. H] Shifted Mouse Characters. "Mouse" characters inserted in input buffers by TV:KBD-MOUSE-BUTTONS-MIXIN and appearing in the lists inserted by TV:LIST-MOUSE-BUTTONS-MIXIN now contain information on the state of the four main shift keys on the keyboard. The %%KBD-HYPER, %%KBD-SUPER, %%KBD-META and %%KBD-CONTROL fields of the character code are now 1 if either one of the corresponding shift keys is pressed down. The new function TV:MERGE-SHIFT-KEYS is used to create the character code with correct values for those bits. This is completely independent of the TV:*MOUSE-INCREMENTING-KEYSTATES* feature whereby some of the same shift keys (or other keys) can act like an extra click. I] TV:FULL-SCREEN-HACK-MIXIN Is Back. In earlier systems, some commonly-used windows did not have borders when they filled the whole screen. This was changed in system 93 because most people prefer the borders. But some people prefer no borders. Now you can turn them on and off at run time. The function TV:FLUSH-FULL-SCREEN-BORDERS turns borders on or off. It takes one argument, NIL to turn borders on and T to turn them off (flush them). The function applies to existing windows as well as those yet to be created, but only windows that fill the whole screen. To be affected, a window must have TV:FULL-SCREEN-HACK-MIXIN in its flavor. Various system flavors, such as Lisp listeners, peek frames, inspectors, and SUPDUP, use the mixin. J] Network Break in SUPDUP. You can now use Network Break instead of Network B to get a break loop inside SUPDUP. K] Host Objects Print Readably. They look like #FS:TOPS20-CHAOS-HOST "MIT-OZ", etc. L] System Menu Layouts Command Records Partially Visible Windows. The Layouts command in the system menu now records the ordering of all the active windows when you save a layout, and puts them back into that order when you restore the layout. As a result, this command is now useful for recording a setup of overlapping windows which you wish to switch between. M] DEBUG-IO May Be NIL. It is now legitimate for DEBUG-IO to be NIL. This tells the debugger to use the value of TERMINAL-IO. If you give DEBUG-IO a nonstandard value and then wish to change it back to normal, setting it to NIL is an easier way. N] Debugger Command Meta-R. The debugger has a new command, Meta-R. It reinvokes the current frame's function, like C-M-R, but allows you to replace the arguments or change the number of arguments. Meta-R asks you what to do for each argument, one by one. You can use the previous value of that argument by typing a Space, or type a new value for the argument. To terminate the argument list (once all the required arguments have been supplied), type End rather than an argument. O] BREAKON With No Argument. (BREAKON) returns a list of all functions broken on. Editor and ZMail Changes: A] {TEX} Mode is now TEX Mode. B] Control-X Control-F Allows Wildcards. C] New Editor Case-Conversion Commands. D] ZWEI:*DEFAULT-BASE* Initialized from BASE. E] Blinkers in Incremental Search. F] DIRED Improvements and Related Things. G] ZMail Header Editing Commands in Control-X M. H] Preloading ZMAIL. I] ZMAIL Commands for Window Configuration While Sending Mail. J] Mail Templates. K] ZMail Can Reformat Headers. L] Moving Messages by Individual Filters. A] {TEX} Mode is now TEX Mode. The editor command Meta-X {TEX} Mode has been renamed to Meta-X TEX MODE, for Emacs compatibility. Apologies to those of you who try to enter Text mode by typing m-x tex ! B] Control-X Control-F Allows Wildcards. You can now use a pathname with wildcards as the argument to the ZMACS command Control-X Control-F. This causes each file matching what you specify to be loaded into an editor buffer. C] New Editor Case-Conversion Commands. Meta-X Lisp Uppercase Region and Meta-X Lisp Lowercase Region convert the Lisp code in the region to the specified case, while not touching comments, strings and slashified characters. This is just the thing for taking a file written in primarily upper case and converting it to primarily lower case, or vice versa. D] ZWEI:*DEFAULT-BASE* Initialized from BASE. The first tie a ZMACS window is exposed in each session, the option ZWEI:*DEFAULT-BASE* is initialized from the current value of BASE. So if you set BASE in your init file, ZWEI:*DEFAULT-BASE* will be set also. If you set ZWEI:*DEFAULT-BASE* to something non-NIL after you log in, however, that value will not be overridden. E] Blinkers in Incremental Search. During an incremental search, the blinkers blink both in the typein window where the search string is displayed and in the editor window where the buffer is displayed. F] DIRED Improvements and Related Things. DIRED now names its buffers after the directory being edited. Once you observe the pattern of naming from the mode line, you will be able to reselect a particular DIRED buffer without having to do C-X B to figure out its number. L is now a DIRED command which says to load the file you are pointing at; the function LOAD is used. < is now a DIRED command which says to edit the superior directory of the directory you are editing. This creates a new DIRED buffer for that directory. C-Shift-E is now a DIRED command which visits the file you are pointing at, in the other window. This is like C-X 4 F but operating on a filename from the DIRED buffer rather than reading one. When you use the A command in DIRED to mark files to have a function applied to them, you can now specify a lambda-expression as the function to be applied. Previously, a symbol or function spec had to be used. Meta-X Undelete File undeletes a deleted file. It works like Meta-X Delete File. Meta-X Reap File and Meta-X Clean Directory now offer to expunge at the end if you have deleted anything. Meta-X Reap File, Meta-X Clean Directory and the H command in DIRED now only delete versions that are connected to the most recent version by consecutive versions. For example, if there are versions 8, 14, 22, 23, 24 and 25, the versions deleted or marked for deletion would be 22 and 23. 8 and 14 would be exempted because of the gap between them and the most recent sequence of versions. G] ZMail Header Editing Commands in Control-X M. The ZMail commands for editing headers of outgoing mail are now available in ZMACS in the Control-X M command for sending mail. H] Preloading ZMAIL. "Preloading" ZMAIL means requesting that various files be loaded into ZMAIL while you work on other things. You would be able to enter ZMAIL later, after preloading was finished, and access all the files with no delay. (If you enter ZMAIL sooner and try to access one of them, you must wait while it is read, as usual.) To do this, simply call ZWEI:PRELOAD-ZMAIL with a list of pathnames or strings as arguments. This might be done in your LISPM init file, for example. The more hairy calling sequence used by Symbolics systems is also supported, but the hair is not needed. I] ZMAIL Commands for Window Configuration While Sending Mail. The ZMAIL commands you use to switch window configurations while composing outgoing mail have been changed. It used to be that C-X 2 went into "two window mode", which had three windows. The other commands were similarly misnamed. Now C-X 3 enters "three window mode", which shows the same three windows (selected incoming message, headers, and text). C-X 2 enters "two window mode", which shows two windows (headers and text). C-X 1 enters "one window" mode, which shows the headers and text together in one window (plus the summary window, if that is normally displayed). The ZMAIL profile options for window configurations for the Reply command have new values: :LIKE-MAIL means to use the same configuration that the Mail comand would use, and :SHOW-ORIGINAL means to display the original message as well as the headers and text of the reply (three windows). The default is now :LIKE-MAIL. The old values of these keywords are still understood, if they are present in existing ZMAIL init files. J] Mail Templates. ZMAIL templates are a means of specifying header fields automatically in messages you are sending. Each template you define has a name and its definition specifies various header fields to initialize. You can invoke a template explicitly, and you can also have various default templates that are invoked automatically in certain circumstances. A template is defined with ZWEI:DEFINE-MAIL-TEMPLATE, as follows: (ZWEI:DEFINE-MAIL-TEMPLATE name documentation body...) body is Lisp code which uses convenient functions described below to modify header fields as you desire. documentation is a string whose first line is brief documentation (a complete sentence) and whose entire text is the full documentation. The purpose of the documentation is to say what this template is to be used for. name is the template's name, a symbol. An editor command is automatically constructed from the template. Its name is created by appending "COM-" and name. The resulting command is made available through Meta-X when you are composing mail in ZMACS or ZMAIL, and when you are editing a received message in ZMAIL. Thus, a template named MORE-INFO would produce a command COM-MORE-INFO which would be accessed using Meta-X More Info. These are the functions recommended for use in the body of a template: ZWEI:ADD-FIELD type contents Adds a type field to the header, putting in contents contents. Existing type fields are left alone. type should be a keyword identifying a header field, such as :CC or :REPLY-TO. contents should be a string. ZWEI:DEFAULT-FIELD type contents Similar to ADD-FIELD but does nothing if a field of type type already exists with nonempty contents. ZWEI:DELETE-FIELD type Deletes any field(s) of type type. ZWEI:FIND-FIELD type Returns a buffer pointer to the first type field, or NIL if there are none. This is for sophisticated alteration of header fields. ZWEI:ADD-TEXT-START string Adds string to the text of the message, at the beginning of the text. ZWEI:ADD-TEXT-END string Adds string to the text of the message, after any existing text. The arguments to these functions can be calculated in an arbitrary fashion. Actually, templates are not limited to calling these functions. They can run arbitrary Lisp code. In particular, they can use any of the primitives that editor commands use. ZWEI:*INTERVAL* will be bound to an interval containing the message being operated on. In addition, if you are replying to messages or forwarding messages in ZMAIL, the variable ZWEI:*MSGS* will be bound to a list of those messages (otherwise, it is NIL). You can therefore easily examine those messages, such as by using ZWEI:MSG-FITS-FILTER-P on them to see if they match one of your ZMAIL filters, and make your header alterations conditional on the answer. In addition to invoking templates expicitly with Meta-X, you can have templates that are run automatically when you begin to send a message. The ZMAIL options ZWEI:*DEFAULT-FORWARDING-TEMPLATE*, ZWEI:*DEFAULT-BUG-TEMPLATE*, ZWEI:*DEFAULT-REPLY-TEMPLATE*, and ZWEI:*DEFAULT-MAIL-TEMPLATE* may have as their values the names of templates (as specified in the template definitions) to be run automatically when you start to compose, respectively, a forwarding of other messages, a bug report, a reply, or anything else. The variables may also be NIL to specify that no template is to be invoked; this is the default. Sending with ZMACS uses, instead, the variables ZWEI:*DEFAULT-ZMACS-MAIL-TEMPLATE* and ZWEI:*DEFAULT-ZMACS-BUG-TEMPLATE*. They too should have as values either template names or NIL. Here is an example of a template: (ZWEI:DEFINE-MAIL-TEMPLATE MORE-INFO "Compose request for more info on a bug." (ZWEI:ADD-FIELD ':CC "BUG-LISPM") (ZWEI:DEFAULT-FIELD ':SUBJECT "Your bug report.") (ZWEI:ADD-TEXT-START "I need more information in order to track down the bug that you reported.")) K] ZMail Can Reformat Headers. You can now tell ZMail to reformat headers of messages in Babyl files for display. For example, you can easily cause certain boring header fields not to be shown. To do this, create a mail template as described above to do the editing you want. Set the ZMail option *DEFAULT-REFORMATTING-TEMPLATE* to the name of that template. The template will be called only once on any given message; from then on, the Babyl file remembers both the original header and the reformatted one. For example, this template would cause Return-path fields not to appear: (ZWEI:DEFINE-MAIL-TEMPLATE DISCARD-BORING-FIELDS "Delete fields I don't like to see displayed." (ZWEI:DELETE-FIELD ':RETURN-PATH)) L] Moving Messages by Individual Filters. In ZMail, Map Over of Move to File now allows you to move each message to a different mail file, determined from the message itself using the filter--mail-file associations. Each message is individually matched against the filters to find the mail file to move it to; if a message does not match any of the filters that are associated with mail files, that message is not moved. To do this, click middle on Move to File after Map Over, or choose By Individual Filters from the menu from clicking right on Move to File. Changes in Patches: A] Explicit Release of Patches. B] LOAD-PATCHES Reloads Site Files When Needed. C] MAKE-SYSTEM of a Patchable System Loads Patches. D] SI:LOAD-AND-SAVE-PATCHES Queries At The Beginning. A] Explicit Release of Patches. It is now possible to finish a patch so that it can be loaded experimentally without releasing the patch for users in general to load. To do this, use the command Meta-X Finish Patch Unreleased instead of the usual Meta-X Finish Patch. This will finish the patch, compiling it, but mark it in the patch directory as unreleased. By default, LOAD-PATCHES requires confirmation before loading an unreleased patch, and warns the user that doing so is risky. LOAD-PATCHES in nonselective mode will not load them at all. You can load the patch, see that it works reasonably, fix it if necessary by editing and recompiling the patch file source, and finally release or cancel the patch. You release the patch with Meta-X Release Patch or cancel it with Meta-X Cancel Patch. Loading an unreleased patch warns the user not to try to save the band, and sets the status of the patchable system to :INCONSISTENT. This tells DISK-SAVE to require extra confirmation after a stern warning. If you do save such a band, the disk label will say it is "Bad". These precautions are because unreleased patches are still subject to change, and a band dumped with them might possibly contain invalid patches that differ from the patches ultimately released. If :UNRELEASED is passed as an argument to LOAD-PATCHES, it will load unreleased patches with no special confirmation. DISK-SAVE will still warn, however. B] LOAD-PATCHES Reloads Site Files When Needed. LOAD-PATCHES now checks whether the site files have changed since they were last loaded, and loads them if that is appropriate. This is done by default if you do not specify which systems to load patches for. Additionally, you can say to do this with the argument :SITE and say not to do this with the argument :NOSITE. C] MAKE-SYSTEM of a Patchable System Loads Patches. If you load a patchable system with MAKE-SYSTEM, it automatically loads patches. It queries for loading patches if it was querying for loading the system's files. D] SI:LOAD-AND-SAVE-PATCHES Queries At The Beginning. SI:LOAD-AND-SAVE-PATCHES now will ask all the questions it needs to ask before loading the patches. Its first argument is now the partition to save into; only the following arguments are passed to LOAD-PATCHES. Once it has begin loading patches, no questions will be asked unless something goes wrong (such as, the specified partition is not big enough). This should make it convenient to use this function to update a band when you are ready to go home, and leave it running when you go.
Last modified: 2021/08/24 14:29:11 (UTC) by ams