.ax Release Notes .in rnochaini .f.j .p The new version of RUNOFF has a number of new features and enhancements. This list is an attempt to enumerate all of these changes, but it may not be complete. The RUNOFF manual should be consulted for a complete description of the new version of RUNOFF. .LIST .LM-4 .le A new method of dispatching commands has been adopted which resulted in a very substantial increase in speed at a small investment in memory. The old method would search the entire command table for each command, whereas the new method uses the first letter in the command to begin searching at the appropriate location in the table. This increased the memory requirements by about 30. words, but reduced the CPU requirements by 20-30%%, depending on the file being processed. .le On operating systems which support it, the new version of RUNOFF will use multi-buffering for the input and output files. This, along with the above CPU time reductions, reduces the total running time for many RUNOFF applications by a total of 35-50%%, with a usual reduction of around 40%%, depending on the file being processed and the disks being used for the file I/O. .le The buffer usage for all of RUNOFF's internal buffers has been re-arranged to be standard for all of RUNOFF's internal buffers. This has allowed the modification of RUNOFF to be much easier than dealing with the haphazard methods used before the modification. .le RUNOFF now has a character table which contains character attributes for all of the ASCII characters. These attributes include whether the character is an upper or lower case alphabetic, numeric, etc. This replaces a number of special case code sequences for locating upper or lower case characters, numerics, and others; there are still a few places which look for special cases (not contained in the character table) but these are rare. .le RUNOFF's usage of dynamic memory has been standardised. The old method had two stacks growing toward each other, one for the index and the other for the footnotes. This made it difficult to use dynamic memory for other purposes, and also made it virtually impossible to use the extend task directive under RSX-11M (and soon to be supported in IAS), especially since pointers in the index and footnote buffers would have to be modified and the buffers moved in order to properly use the new areas allocated. The new method has all dynamic memory allocations go through a common subroutine, which maintains a heap of available memory. The degradation in time is usually quite minimal, less than 1%% for most applications, especially since memory is not usually allocated and deallocated in ways which fragment the heap. This has allowed RUNOFF to use dynamic memory for numerous applications where it is appropriate, and also to properly use the extend task directive for RSX-11M. .le The infamous self-modifying code in RUNOFF has all been removed. This has allowed RUNOFF to be broken up into read-only and read-write sections. For systems which support sharable read-only code, this means that only one copy of the read-only portion (and it is substantial) need be in memory at one time, even if multiple copies of RUNOFF are running. .le The number of error messages for RUNOFF has been increased and the messages themselves have been made easier to understand. Numerous conditions which were once passed by without comment (such as truncating index items which were too long to be printed) are now remarked upon to the user so that corrective action can be taken if desired. Because this increase in the number of error messages would imply a large increase in task image size, the error messages have been broken off into a file, and only the message required is read into memory. This does not use dynamic memory for the buffer, in order to be able to report dynamic memory exhaustion without getting into an infinite error loop. .le Much of the internals of RUNOFF have been cleaned up and documented properly for the first time. Also, related subroutines have been broken up into more modules to allow easier modification. .le The references to %$MUL and %$DIV have been conditionalised to be used only on non-EIS machines, dependent on the definition of R%$%$EIS in the prefix file. This allows a moderately faster and smaller version to be built on an EIS machine. R%$%$EIS is also used in a few places to conditionalise the use of the ASH instruction. Currently, there are a few uses of the SOB instruction which should be supported on all machines other than the PDP-11/20 and PDP-11/10. .le It is now possible to request output for specific ranges of chapters as well as for ranges of pages. In addition, the default base of the numbers in the switches for RUNOFF has been changed from octal to decimal. .le RUNOFF now supports superscripts and subscripts for some types of output devices. The DIABLO terminal (and a few others which are compatible with it) is supported in this mode; in connection with this, two new meta-characters have been introduced: %{ (begin superscripts) and %} (begin subscripts). These work like the underlining meta-characters: just %{ only superscripts the next character, while %^%{ puts the terminal into a "latched-superscript" mode. The subscript character works similarly. .le The bugs in change bars have been fixed. .le RUNOFF supports include files. These files can be included in the text at any point via a .include command, and can be used to reference standard text or standard RUNOFF commands. Included files can be nested (that is, they can include other files), and the only limit to the depth of nesting is the amount of dynamic memory available. .le RUNOFF now supports multiple input files on the command line, and will support multiple command lines. Multiple command lines are requested by having the last significant character of the command line be a "-". .le RUNOFF now provides the ability to change meta-characters from their default settings to a setting more compatible with the user's needs with the .change command. .le Variables and expressions are supported wherever numbers were supported before. A new command, .setn, is provided to set numeric variables. An unusual quirk appears in relative numbers: a + or - at the beginning of an expression means to add or subtract the expression from the old value of the item being set (as in the older versions of RUNOFF), but a + or a - at the beginning of a term within an expression has the normal arithmetic meaning of not negating or negating the term, respectively. Thus, in order to specify a negative value in an expression as opposed to a relative value, it would be necessary to write, for example, (-3) as opposed to -3. Dynamic memory is used to hold the symbol table. .le Page numbering can now be done at the bottom center of each page instead of in the upper right hand corner. .le The default mode for the page number header has been changed from UPPER to MIXED (i. e., from "PAGE" to "Page"). .le A .date command can be used to stamp each page with the date of the creation of the RUNOFF file (or any other short string). This can also be applied to the Table of Contents file. .le A table of contents output file is now supported. This places all of the chapter headings into the table of contents with the page number where the chapter begins. Along with this, it is possible to specify the table of contents date (similar to the .date command above), and to swap the default output file to the table of contents file (say to have a title page or a prefix to the table of contents listing or a postfix to the table of contents). Pages in the table of contents are numbered with Roman numerals. .le Alphabetic list elements are now supported. .le Roman numeral list elements are now supported. .le List elements with a bullet (o) denoting the beginning of the item are now supported. .le Numeric list elements with numbers greater than 99 are now supported. .le List elements with a user-supplied string as the list element identifier are now supported. .le List elements which have no indentation for the first line and indentation for all lines thereafter in the list element are now supported. .le The .ap command now takes the same arguments as the .p command. .le It is now possible for the RUNOFF file to pass a message to the user (such as "This file last edited on mm/dd/yy") which is printed out on the user's terminal rather than on the output file. .LM+4 .end list .p The new version of RUNOFF has a few restrictions not found in all of the previous versions of RUNOFF. This is an attempt to list those restrictions. .list .LM-4 .le The new RUNOFF (as noted above) has a few references to the SOB instruction. This instruction is supported on all machines (including non-EIS PDP-11/40's, LSI-11's, and others) with the exception of the PDP-11/20 and the PDP-11/10. If it is necessary to use RUNOFF on one of these machines, it would be easy to put a macro defining the SOB instruction in the prefix file. .le The new version of RUNOFF is somewhat more strict about where certain switches are placed. In particular, the /WA switch must now be specified only on the output file (not on the input file or the table of contents file). This was necessary because the addition of the extra file made some of the possible combinations ambiguous. .lm+4 .end list