1 XEROX 1186 USER'S GUIDE 1 XEROX 1186 USER'S GUIDE SOFTWARE 1 SOFTWARE 1 6. SOFTWARE 6 This chapter describes software installation and the 1186 file system. 2 Installing Lisp on the 1186 Workstation 1 The seven procedures described in this section supplement the installation software's on-line script. If you run into an unexpected problem, refer to the Troubleshooting section at the end of this section. Read the information before each procedure to find out what conditions should exist before you start (Prerequisites), when that procedure should be performed (Usage), things to watch out for (Warning), and what you should do before starting the procedure. Terminology 1 A list of terminology peculiar to the on-line installation procedure is provided here. cursor code $ 4-digit code that replaces the cursor on your screen, and indicates progress or error conditions. B Reset $ meaning boot reset, the red button on the front of your processor unit. boot device icons $ symbols that appear on your screen representing the 10 function keys on your 1186 keyboard. FTP blinking cursor $ cursor is replaced with the blinking letters FTP indicating that a file transfer process is happening. installer menu $ offers 19 options, to which you respond by typing the number of the chosen item. installer prompt $ the right angle bracket (>) that usually indicates a user response is required. main menu $ currently this menu has only one choice, which is to install Lisp. Choosing the last selection in the installer menu (number 19) returns you to this menu. power on switch $ switch on the front of your processor unit labeled 0/1. All procedures described here require that the processor be turned on (switch set to 1.) Floppy Disks Needed 1 Installation Utility Installation Files System Files 2 0) Factory Configuration (EEPROM) and Bad Page Checkout 1 This procedure is usually performed at the factory before you receive your workstation. If you detect a bad page problem, contact your Xerox representative. 2 1) Partitioning 1 Prerequisites: f Assumes that proper EEPROM Configuration and Bad Page Checkout (Procedure 0) have been performed. f Know the disk size you are working with (usually 40Mb). You will be prompted for this information. Usage: Perform this procedure only when the disk is new, or when you have experienced a catastrophic disk failure. Warning: Partitioning the disk DESTROYS all disk files. If the disk is not new, user files must be saved first. Steps for Procedure 1, Partitioning 1 a. Insert the Installation Utility floppy disk. b. Press the B Reset button on the front of the workstation f Wait (up to 5 seconds) for the boot device icons to appear on the screen. f Press the F2 key (Floppy Boot). The 4-digit cursor code will count 149, 199, 910, 920, 940, 990 then the Main Menu will appear. c. Type 1 (Interlisp-D). d. When the next menu appears, type 3 (System Utilities (Installation etc.)) e. When prompted, insert the Installation Files disk and press . f. When the next menu appears, type 1 (Lisp Installation) g. Type 1, 2, 3, 4 or 5 depending on disk size (Partition xxMB disk...) You will then see a message: WARNING - PARTITIONING A DISK DESTROYS THE CONTENTS If the disk is new or files have been BACKED UP type Y, and press . After about 5 minutes, the installer menu will reappear. Go to Procedure 2, Microcode and System Tool Installation. 2 2) Microcode and System Tool Installation 1 Prerequisites: Assumes the disk is partitioned for Lisp. Usage: Can be safely repeated, but only needs to be done once after Partitioning. Special Instructions: If you have just finished partitioning (Procedure 1), go to step g. Steps for Procedure 2, Microcode and System Tool Installation 1 a. Insert the Installation Utility floppy. b. Press the B Reset button on the front of the processor unit. f Wait up to 5 seconds for the boot device icons to appear on the screen. f Press the F2 key (Floppy Boot). The 4-digit cursor code will count 149, 199, 910, 920, 940, 990, then the Main Menu will appear. c. Type 1 (Interlisp-D). d. When the next menu appears, type 3 (System Utilities (Installation etc.)) e. When prompted, insert the Installation Files disk and press f. When the installer menu appears, type 1 (Lisp Installation) g. When the installer menu appears, type 6 (Initialize System Tools volume with Lisp Installer). f Wait for the prompt to appear. This can take up to 2 minutes. f Insert the System Files floppy as prompted. h.Type 18 (Install Lisp Run Time Microcode on LispFiles). i. Proceed to install the Lisp Sysout from Floppies (Procedure 3) or from the Network (Procedure 4). 2 3) Installing the Lisp Sysout from Floppies 1 Prerequisites: Assumes the Initial Microcode and Lisp Microcode have been installed (Procedure 2, above). Usage: This procedure takes about 30 minutes. Warning: Destroys the Lisp Virtual Memory of last logout, but not the LispFiles. Special Instructions: If you are continuing from Procedure 2, go to step g. Steps for Procedure 3, Installing the Lisp Sysout from Floppies 1 a. Insert the "Installation Utility" floppy. b. Press the B Reset button on the front of the processor unit. f Wait (up to 5 seconds) for the boot device icons to appear on the screen. f Press the F2 key (Floppy Boot). The 4-digit cursor code will count 149, 199, 910, 920, 940, 990 then the Main Menu will reappear. c. Type 1 (Interlisp-D). d. When the next menu appears, type 3 (System Utilities (Installation etc.)) e. When prompted, insert the "Installation Files" disk and press . f. When the next menu appears, type 1 (Lisp Installation) g. Type 12 (Install Interlisp D on Lisp Volume) h. Insert the Lisp.SysOut floppies as prompted. This will take about 30 minutes. (Obtain these floppies from your system administrator.) i. Type 16 (Copy from Lisp Volume to Lisp2 Volume) to keep a copy of the sysout unused and unexpanded. j. Type 13 (Expand Lisp VMem) before booting the sysout. k. Type 17 (Boot from Lisp volume) to boot the volume. i. When the boot device icons reappear, press the F1 key and wait for the Interlisp-D windows to appear. m. Go to Procedure 6, Initializing Lisp. 2 4) Installing a Lisp Sysout from the Network 1 Prerequisites: Assumes the Initial Microcode and Lisp Microcode have been installed (Procedure 2, above) Warning: Destroys the Lisp Virtual Memory of last logout, but not the Lisp Files. Special Instructions: f If you are continuing from Procedure 2, go to step g. f When you have performed step h below, you have the option of doing either an NS or an IFS fetch. Choose one, follow the instructions, then proceed to step i. Steps for Procedure 4, Installing a Lisp Sysout from the Network 1 a. Insert the Installation Utility floppy. b. Press the B Reset button on the front of the workstation f Wait (up to 5 seconds) for the boot device icons to appear on the screen. f Press the F2 key (Floppy Boot). The 4-digit cursor code will count 149, 199, 910, 920, 940, 990 then the Main Menu will appear. c. Enter 1 (Interlisp-D). d. When the next menu appears, enter 3 (System Utilities (Installation etc.)) e. When prompted, insert the "Installation Files" floppy disk and press . f. When the next menu appears, enter 1 (Lisp Installation) g. Enter 11 (Boot System Tools Volume). the 4-digit cursor code will count 910, 920, 940, 990 and LispInstaller will appear. h. The screen will display the following: >Online Drive Name: RD0 Press From an NS Server: 1. At the ">"prompt, enter Clearinghouse At the Domain prompt, enter the name of your domain. Example: PARC. At the Organization prompt, enter your company's name. Example: Xerox 2. Enter Login At the User prompt, enter your user name. At the Password prompt, enter your password. 3. Enter Open At the Open connection to: prompt, enter the name of the server you are fetching from. 4. Enter Lisp sysout fetch. At the Logical Volume prompt, enter LISP At the Lisp sysout File Name prompt, enter the name of the sysout you are loading in the form: sysoutname.sysout After about 20 seconds, the cursor will change to the FTP blinking cursor. The transfer takes about 2-3 minutes. At the Expand Valume prompt, respond No. At the Physical Volume prompt, respond Yes. Skip past the next section, to the section titled "Continuing, from both types of File Server:". From an IFS Server: 1. Enter Login At the User prompt, enter your name.location (eg. SNOW.PARC) At the Password prompt, enter your password. 2. Enter Pup Open At the Open connection to: prompt, enter enter the name of the server you are fetching from. Note: If the cursor code freezes at 981, your EEPROM is not registered! You cannot use this procedure until it is. 3. Enter Lisp sysout fetch. At the Logical Volume prompt, enter Lisp At the Lisp Sysout File Name prompt, enter the name of the sysout in the form: sysoutname.sysout After about 20 seconds, the cursor will change to the FTP blinking cursor. The data transfer takes about 3-4 minutes. At the Expand prompt, enter No. At the Physical Volume prompt, respond Yes Continuing, from both types of File Server: i. Enter Quit and respond Yes to the confirm question. j. Repeat steps a-f above to reload the installer menu. k. Enter 16 (Copy from Lisp volume to Lisp2 volume) to keep a copy unused and unexpanded. This step takes about 2 minutes. l. Enter 13 (Expand Lisp VMem) before booting. m. Enter 17 (Boot from Lisp volume) to boot the volume. n. When the boot device icons reappear, press the F1 key. The Interlisp-D windows should appear in about 1 minute. o. Go to Procedure 6, Initializing Lisp. 5) To Re-Install a Lisp Sysout from the Rigid Disk 1 Prerequisites: f Assumes Initial Microcode and Lisp Microcode were installed with the System Tools. f Assumes there is an unused and unexpanded Lisp Sysout on the Lisp2 volume. Steps 1 a. Insert the "Installation Utility" floppy. b. Press the B Reset button on the front of the processor unit. f Wait (up to 5 seconds) for the boot device icons to appear on the screen. f Press the F2 key (Floppy Boot). The 4-digit cursor code will count 149, 199, 910, 920, 940, 990 then the Main Menu will appear. c. Enter 1 (Interlisp-D). d. When the next menu appears, enter 3 (System Utilities (Installation etc.)) e. When prompted, insert the "Installation Files" disk and press . f. When the next menu appears, enter 1 (Lisp Installation) g. Enter 11 (Boot System Tools Volume) h. At the Drive Name: RD0 prompt, press i. Enter ERASE f At the Logical Volume prompt, enter Lisp f Confirm by typing Y j. Enter Quit and respond Yes to the confirmation question. k. Do parts a-f of this procedure again to reload the installer menu. l. Enter 15 (Copy Lisp2 Volume to Lisp Volume) m. Enter 13 (Expand Lisp Vmem) n. Enter 17 (Boot from Lisp Volume) o. When the boot device icons reappear, press the F1 key and wait for the Interlisp Windows to appear. p. Go to Procedure 6, Initializing Lisp. 2 6) Initializing Lisp 1 Prerequisites: Assumes Initial microcode was installed, and that Lisp (on Lisp volume) was successfully loaded from the network or floppies. Special Instructions: If you already have Lisp display on your screen, go to step c. Steps for Intitializing Lisp 1 a. Press the B Reset button on the front panel of the processor unit. Wait for the boot device icons to appear. b. Press the F1 key (Rigid Disk Boot) The 4-digit cursor code will count 149, 199, 2000 - 2600 1185 ... in 1 - 2 minutes. The InterLisp - D windows will appear on the screen. c. Answer the GREET prompt with {hostname:domain:organization}init.lisp. For example: {taurus:aissouth}pasa>init.lisp 2 7) Logging Out of Lisp 1 Steps for Procedure 7, Logging Out of Lisp 1 a. Enter (LOGOUT) in the Interlisp-D Executive window. b. Turn the power off button to 0. 2 Troubleshooting 1 Problem: When using Procedure 6, Intitializing Lisp, the cursor code freezes at 199. Solution: Be sure you have performed steps g and h of Procedure 2 in the correct order. Problem: When doing an IFS Fetch, the cursor code freezes at 981. Solution: Your EEPROM is not registered. 2 File System 1 The 1186 hard disk file system is designed to provide Interlisp-D users with a flexible mechanism for storing and accessing files. The 1186 file system supports such features as random access and version numbers on files. In addition, the 1186 local file system supports a hierarchical naming structure for files. 2 Disk Partitions 1 The hard disk used with the 1186 may be partitioned into up to 10 regions called logical volumes. Logical volumes are like directories on the disk device: they may be used to hold Interlisp virtual memories, or Interlisp files. You can partition the disk with the Installation Utility floppy. Because partitioning the hard disk erases all its contents, you are advised to partition the disk appropriately before storing anything on it. Otherwise, you will have to off-load all files from the disk, repartition it, and then copy the files back to the disk. Although an Interlisp virtual memory file can coexist on a logical volume with other files, it is generally advisable to give each virtual memory file a logical volume that it does not share with anything else. Otherwise, the resulting fragmentation adversely affects swapping performance. A logical volume intended to contain an Interlisp virtual memory should be between 8,000 disk pages (4 megabytes) and 64,000 pages (32 megabytes) long. The closer to 64,000 pages you can make your virtual memory volume the better, provided there is still enough space on the disk for any other volumes you might need. Note that to store Interlisp files on a logical volume, you must create a Lisp directory on that volume (see below for instructions). 2 File System Utility Functions 1 So long as there is a logical volume with a Lisp directory on it, you will have a local disk device called {DSK}. If you do not have a logical volume with a Lisp directory on it, Interlisp emulates the {DSK} device by a core device. (A core device is a file device whose backing store is entirely within the Lisp virtual memory.) However, this causes three problems. (a) The core device provides limited scratch space for some system programs; (b) when running GREET, Interlisp fails to find {DSK}Init.Lisp and has to prompt you for an init file; and (c) since the core device is contained in virtual memory, it (and the files stored on it) can last only as long as you keep your virtual memory image. To create a Lisp user file directory on a logical volume, call (CREATEDSKDIRECTORY VOLUMENAME) [Function] CREATEDSKDIRECTORY affects only the specified volume. CREATEDSKDIRECTORY returns the name of the directory created. You should install an Interlisp directory only the first time the logical volume is used. After that, the system automatically recognizes and opens access to the logical volumes that have Interlisp directories on them. Should you ever want to get rid of a Lisp directory (and all the files in it), call (PURGEDSKDIRECTORY VOLUMENAME) [Function] PURGEDSKDIRECTORY affects only the Lisp files on the specified volume. An alternative way to get rid of a Lisp directory is to use the System Tool to Erase the entire logical volume. To find out if a particular logical volume already has a Lisp directory on it, call (LISPDIRECTORYP VOLUMENAME) [Function] To find out what logical volumes you have on your local disk, call (VOLUMES) [Function] To find out the total size of a logical volume in disk pages, call (VOLUMESIZE VOLUMENAME) [Function] To find out the number of free pages left on a volume, call (DISKFREEPAGES VOLUMENAME RECOMPUTE) [Function] And to find out which logical volume contains the virtual memory you are currently running in, call (DISKPARTITION) [Function] There is a display window that can keep track of the information provided by LISPDIRECTORYP, VOLUMES, VOLUMESIZE, and DISKFREEPAGES. The display window can be in one of three states: ON, OFF, or CLOSED. ON means the display window is updated whenever the file system state changes. (This continuous updating can slow down the file system significantly.) OFF means that the display window is open, but updated only when you left-button it with the mouse. CLOSED means that the display window is closed and never updated. The display mode is initially set to CLOSED. To change the state of the display, call (DSKDISPLAY NEWSTATE) [Function] DSKDISPLAY returns the old state of the file system display, and if NEWSTATE is one of the litatoms ON, OFF, or CLOSED, then the display state is changed to NEWSTATE. To control the position of the display window, call (DSKDISPLAY PLACE) [Function] Once the display window is open, you can update it or change its state with the mouse. Left-buttoning the display window updates it, and middle-buttoning the window brings up a menu that allows you to change the display state. Finally, once an Interlisp directory has been installed on a logical volume, any program running in Lisp has access to the Lisp files on the volume. Access is provided through the usual device-independent file interface: CONN (to connect to any directory or subdirectory on the local disk), OPENSTREAM, CLOSEF, DELFILE, GETFILEINFO, SETFILEINFO, BIN, BOUT, LOAD, etc. 2 File Name Conventions 1 Each logical volume with a Lisp directory on it serves as a directory of the device {DSK}. Files are referred to as {DSK}FileName Thus the file Init.Lisp on the volume LispFiles would be called {DSK}Init.Lisp. In addition, you can indicate subdirectories using the > character in file names to delimit subdirectory names. Subdirectories allow you to group files to a finer degree of granularity. Files with subdirectories are written {DSK}SubDir1>...>SubDirN>FileName For example, suppose you had a file LRdesign.TEdit on the subdirectory ParserGenerator on the subdirectory Compiler on the directory (logical volume) LispFiles of the hard disk device. Its name would be written as follows: {DSK}Compiler>ParserGenerator>LRDesign.TEdit. You can default directory names for the 1186 hard disk in an unusual but simple way. That is, if the file does not have a subdirectory and you leave out the directory (logical volume) name, the directory defaults to the next logical volume that has a Lisp directory on it, including or after the volume containing the currently running virtual memory. Thus if your disk has the logical volumes Lisp, Tajo, and LispFiles, and the Lisp volume contains the running virtual memory, and only the LispFiles volume has a Lisp directory on it, then {DSK}Init.Lisp refers to the file {DSK}Init.Lisp. All the utility functions presented above default logical volume names in a similar way, except for those that can't, such as CREATEDSKDIRECTORY. If you want to find out what the default Lisp directory is, call (DIRECTORYNAME '{DSK}) This defaulting convention is necessitated by several parts of the Interlisp system that create scratch files on the device {DSK} without specifying a directory (logical volume). 2 Disk Scavenging 1 The Koto release provides a disk scavenging service to help you recover from the unlikely event of file system failure. There are two classes of file system failure: Lisp directory failure and lower-level, Pilot operating system failure. Scavenging for Lisp directories is provided by SCAVENGEDSKDIRECTORY; scavenging for Pilot is provided by the System Tool. Lisp directory failures show up as infinite looping or other aberrant behavior while the system is doing a directory search or enumeration. To repair the directory, return to the top level and call (SCAVENGEDSKDIRECTORY VOLUMENAME) [Function] This function deletes the old directory, then reconstructs it from the files on the given logical volume. Pilot failures manifest themselves as "HARD DISK ERROR" breaks within Lisp. To fix such a failure, return to the top level, log out of Lisp and get into the System Tool. Invoke the Scavenge! command for the damaged logical volume. If the System Tool reports that there were no problems, proceed back to Lisp and call SCAVENGEDSKDIRECTORY as described above. On the other hand, the System Tool may report problems. Each problem is described by a message in the format shown below: [fileID] type = file type; problem description The fileID is a pair of numbers separated by a comma. The file type is a single number. If it is in the range 10048 to 10077 inclusive, the damaged file belongs to the Lisp local file system. Any other file types may be safely ignored. If the file is in the Lisp local file system, you should examine the problem description to determine your next course of action. There are five possible problems. unreadable pages [first...last plus one) 1. This indicates a hardware problem. You should run the disk diagnostics and probably have the pages marked bad. missing pages [first..last plus one) 2. Some of the file pages have not been allocated correctly. You will probably see this after getting VERIFY ERRORS in Lisp. duplicate page found 3. Self-explanatory orphan page found 4. The scavenger found an allocated disk page that it believes belongs to no allocated file. unknown problem 5. This is a catch-all for cases not covered by the previous four. Return to the top level (Interlisp-D Executive) and call SCAVENGEDSKDIRECTORY from Lisp unless case 1 or 2 reported that page 0 of a file was damaged. If the only problems were of class 3 or 4, you should be able to resume normal operation. In cases 1, 2, and 5 we recommend that you copy the files from the local disk to floppies or a file server, then erase the volume using the System Tool's Erase! command. Do not attempt to access the damaged files in any way. The function FILENAMEFROMID will let you translate from Pilot file ID's into file names. (FILENAMEFROMID LOWHALF HIGHHALF VOLUMENAME) [Function] This function take a Pilot file ID, as printed by the Scavenger and tries to find that file in the Lisp directory of the given volume, returning a string with the file name if successful, NIL otherwise. Note that the Pilot scavenger prints file IDs in octal. If you have any doubt about which logical volumes to scavenge, scavenge them all. The scavenger does not harm an intact volume. [This page intentionally left blank] (LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC) STARTINGPAGE# 45) (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)) (180 204 288 36) NIL) (HEADING NIL (HEADINGTYPE FOOTINGR) (144 216 468 36) NIL) (TEXT NIL NIL (144 228 324 528) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (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)) (144 204 288 36) NIL) (HEADING NIL (HEADINGTYPE FOOTINGV) (144 216 468 36) NIL) (HEADING NIL (HEADINGTYPE VERSOHEAD) (144 756 468 36) NIL) (TEXT NIL NIL (144 228 324 510) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (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)) (180 204 288 36) NIL) (HEADING NIL (HEADINGTYPE FOOTINGR) (144 216 468 36) NIL) (HEADING NIL (HEADINGTYPE RECTOHEAD) (144 756 468 36) NIL) (TEXT NIL NIL (144 228 324 510) NIL)))))./DDT.TTD".D"D.TD/D2DT.TTD.DD.T`D`(.TTD1TTD TD.TTD`.T`D`.DD(D1TTDTD1TTDTD100D 0D(.D2D((D.TTD .DD(TTD1llD lD1llDlD1`lDlD.TTD D.TTD D1`lDlD)D T.TTDDED DJ PAGEHEADING VERSOHEADED DJ PAGEHEADING RECTOHEAD(TTD(D"(TTD EDDJ PAGEHEADING VERSOHEADEDDJ PAGEHEADING RECTOHEAD;D PAGEHEADINGFOOTINGV;D PAGEHEADINGFOOTINGR1TTDDJ1TTD DJ(D(D HELVETICA HELVETICA  HELVETICA MODERN CLASSIC MODERN MODERN MODERN MODERN MODERNMODERN MODERN MODERNMODERNMODERN* HRULE.GETFNMODERN  * ) HRULE.GETFNMODERN  ) # ( HRULE.GETFNMODERN  " ' HRULE.GETFNMODERN  , + HRULE.GETFNMODERNH  HRULE.GETFNMODERN   HRULE.GETFNMODERN    HRULE.GETFNMODERN Y    f   O   `  A          W      O     y   M   HRULE.GETFNMODERN      HRULE.GETFNMODERN  9  HRULE.GETFNMODERN    HRULE.GETFNMODERN    HRULE.GETFNMODERN g  h  l  h  $ HRULE.GETFNMODERN 5 <   L   " `   $ ( M $       2  44   HRULE.GETFNMODERN  +  HRULE.GETFNMODERN ) K D > HRULE.GETFNMODERN 1 A   L   # a   # ( M *  ( 7      3  2 f    HRULE.GETFNMODERN  -  HRULE.GETFNMODERN [ '  H  7 @ HRULE.GETFNMODERN . @  O   " b   $ ( L $   &   _  /  - j *  HRULE.GETFNMODERN  .  HRULE.GETFNMODERN Z  I   9 A i     A A HRULE.GETFNMODERN 0 <   L   " `   % ( R %   s +         2   /             =         C    r        a     '       C s      4  w       +    8  p  $  - s )  4  HRULE.GETFNMODERN     W  N  HRULE.GETFNMODERN . @   N   " `   & ( L &                 G 0  % h )  HRULE.GETFN HELVETICA   HRULE.GETFNMODERN    ?  HRULE.GETFNMODERN F * & T 5   > . HRULE.GETFNMODERN     HRULE.GETFNMODERN  , HRULE.GETFNMODERN   ' $  HRULE.GETFN HELVETICA  HRULE.GETFN HELVETICA M  N  ;     HRULE.GETFNMODERN  . - HRULE.GETFNMODERN &<  % HRULE.GETFNMODERN  . - HRULE.GETFNMODERN &Q     $f $  % HRULE.GETFNMODERN  . - HRULE.GETFNMODERN & $?  ! $T $U !  $ $U ! $E ! $C ! $< $  $e ! $h !  $D  Q  7 !  $ $x % HRULE.GETFNMODERN  . - HRULE.GETFNMODERN &v $   $] $ $ /  $ $9 $1  $ $  % HRULE.GETFNMODERN  .  - HRULE.GETFNMODERN  G }  "    )s $ ~    ^  C      &  & [z