"Personal Fonts Maker - G. PFM Program Messages" G. PFM Program Messages This appendix lists (in alphabetical order) and explains the most important messages of the Personal Fonts Maker. A more complete description can be found in the referenced sections. Some messages are displayed by the Personal Fonts Maker on the title bar, while others are contained in a requester. Messages on the title bar are usually highlighted for a few seconds, but disappear sooner if the program has to process any user action (e.g. the selection of a gadget). If the message is displayed in a requester containing only the "Proceed", "Cancel" or "OK" gadgets, the key can be used instead of the "OK" or "Proceed" gadget, while can be pressed instead of selecting the "Cancel" gadget. Sections 1.10.11 ("The key") and 1.10.15 ("The key") have more on the topic. The codes between parentheses which follow the message texts are for Cloanto internal use. They are used to identify each message independently of the language in which it is written. Message codes prefixed by a 'W' letter refer to texts which appear on the program's screen title bar. 16 x 18 character size is required (T34) A "Save Character Set" operation (section 4.9) has been attempted, but one or more characters in the current font do not have the format required to store the character images in a character set. The height of the font must be set to 18 (section 7.3.2, "Y Max"). All characters must be 16 dots wide. This can easily be verified with the "Font Statistics" function (section 4.14), which displays the width of the largest character and the width of the narrowest character. Both values should be 16. The "X Dpi" and "Y Dpi" parameters (sections 7.3.3 and 7.3.4) should be set in a way that the X/Y ratio of the font is close to the screens display ratio. This is done automatically by the "Edit Character Set" function (section 4.11), which also sets the width and height parameters properly and copies the character images of the current character set into the current font. All rights reserved. Unauthorized reproduction or transfer is illegal (T3D) This message has to be displayed for strictly legal reasons. Unfortunately, the program cannot recognize the honest user, and begin the session by displaying a "Have a nice day" message. The users of an original copy of the Personal Fonts Maker should interpret this message as a "Thank you" from Cloanto. The users of counterfeited versions of the program should instead not hope that their act will be interpreted by the programmers as a "Thank you" for the years spent developing the Personal Fonts Maker. Appendix A. Another program is using the file (T59) The operation on the specified file cannot be performed because the file is currently being locked by another process. This can happen, for example, if another program is working on the same font which the Personal Fonts Maker is trying to load or save. A ROM-font cannot be deleted (T7F) The "Delete Amiga Font" function (section 4.16.2) could not delete the specified font, which is found to be stored in the computer's Read Only Memory, rather than in a file. Audio cannot be activated (T38) The Personal Fonts Maker could not start the CloantoAudio program, after searching for it in the "devs" logical volume and in the drawer (or volume) from where the Personal Fonts Maker was loaded. By default, the "devs" logical volume is assigned to the "devs" drawer of the Workbench disk containing the Personal Fonts Maker. It may also be that the CloantoAudio file has been found, but the CloantoAudio module could not reply in time (handshake function) because it was slowed down by another disk operation, or because there was not enough memory. The Personal Fonts Maker tries to load the audio module if there is enough memory to do so, and no Cloanto program has already loaded CloantoAudio. The same CloantoAudio module can serve an unlimited number of Cloanto programs, therefore overcoming the limitations set by the Amiga on the maximum number of open audio channels. If the CloantoAudio module is started manually by the user (e.g. by selecting its icon), it remains RAM-resident until the computer is reset or switched off, and does not need to be loaded every time from its client programs. Sections 1.12 ("Environment Variables and Standard Drawers") and 1.13 ("Installing the Personal Fonts Maker"). Bad IFF structure (T77) The file read by the Personal Fonts Maker is recognized as being in IFF format, but its content does not adhere to the rules defined for the IFF standard. Some programs do not use the IFF format correctly. Brush mode not possible (no brush in memory) (W1A) The brush mode has been selected (section 3.17), but no brush has been defined yet. A brush can be defined as described in section 3.18 ("The 'Define Brush' Gadget"), or by loading the brush from a file ("Load Brush", section 5.1). If an error is encountered when loading the brush from a file, no brush is defined, but a previously defined brush is cleared. Data compression algorithm not identified (T78) Graphical data can occupy more memory than one would believe. Different techniques exist to compress this data, so that it occupies less space than it would otherwise. The Personal Fonts Maker uses and recognizes different standard compression techniques to store and read fonts, character sets and IFF ILBM brushes. Another program may write some data using a compression method (or algorithm) not recognized by the Personal Fonts Maker. When the Personal Fonts Maker tries to load this data, it displays this message. This means that the data cannot be loaded unless it is saved in another format. Disk incompatible (T66) The disk in the specified drive is not recognized as an AmigaDOS disk by the operating system. The disk may be damaged, not formatted or be in the format of another computer. Sections 1.3.4 ("Peripheral Units"), 1.6 ("Backup Copies") and 14.1 ("Problems with Disks"). Disk is not mounted (T67) The specified disk is not inserted in any drive. Section 14.1 ("Problems with Disks"). Disk is write-protected (T64) Data cannot be written on a disk which is write-protected. The hole at the corner of the disk must be covered by the write-protect tab. Section 14.1 ("Problems with Disks"). Disk not validated (T5F) The Amiga operating system has not yet validated the disk. The operation may have failed, or still be in progress, if the disk has just been inserted. If the disk is not successfully validated ("Disk not validated" system message), no new data can be written to the disk, which can be read normally. Section 14.1 ("Problems with Disks"). Division by zero in prologue (T42) Division by zero in ON sequence (T43) Division by zero in OFF sequence (T73) Division by zero in epilogue (T44) A "division by zero" error has occurred while the Personal Fonts Maker was processing an FFDL sequence. It is impossible to divide a number by zero. Even if no "(0)" or "NUL" constant appear in an FFDL sequence, the result of a subtraction (or another operation) may be zero, possibly causing an unexpected error if the value is used as a divisor. If the "Font Description" function is recalled after one of these errors occurs, the cursor is automatically placed where the error was detected. Error during file I/O (T17) The Personal Fonts Maker has several detailed error messages which are used if an error occurs during a read or write operation. The Amiga operating system may issue error codes which the Personal Fonts Maker cannot translate into messages indicating the exact cause of the error. If this happens during a file read/write operation, this message is displayed. Error during printer output (T81) An error is signalled by the Amiga operating system while data is being sent to the printer. The most likely causes are: printer is switched off or is in the off-line (deselected) state; printer is out of paper or the paper is jammed; the printer's cover is open; the printer cable is not connected properly; the wrong port (serial vs. parallel) was selected in the Amiga Preferences. Sections 4.12 ("Printer Test"), 4.13.2 ("Write Font Data/Printer") and 14.2 ("Problems with Printers"). File is protected from deletion (T62) The specified file has a software protection which prevents the operating system from removing it. The Workbench "Information" (or "Info") or the Shell/CLI "Protect" command can be used to modify the access status of the file. File is protected from reading (T65) The specified file has a software protection which prevents the operating system from reading it. The Workbench "Information" (or "Info") or the Shell/CLI "Protect" command can be used to modify the access status of the file. File is write-protected (T63) The specified file has a software protection which prevents the operating system from modifying it. The Workbench "Information" (or "Info") or the Shell/CLI "Protect" command can be used to modify the access status of the file. Font allocation - There is not enough memory (W32) The alternate font environment has been selected (section 3.2) for the first time, or after a "Free Font Memory" operation, but there is not enough memory to handle a new font. This is explained in more detail in section 4.2 ("Free Font Memory"). To free some memory it may help to close the Workbench screen (section 7.7, "Workbench") and/or terminate some other programs. Function not allowed (character is OFF) (W15) An editing function on the content of the character editing box has been requested, but the current character is "Off". Only "On" characters can be modified. To switch a character "On", the "ON/OFF" gadget can be selected (section 3.10), or the keyboard shortcut can be pressed (appendix I). Graphic data cannot be loaded (T6B) The "Load Character Set" function (section 4.8), which needs to load the data of the default character images in addition to other information (e.g. the character encoding vector) has been partially unsuccessful. There is not enough chip (video) ram to load the graphic data, while the remaining data can be loaded. Graphic module cannot be loaded (T3C) The Personal Fonts Maker cannot load the graphical data stored in the "PFM_Gfx" file of the "PFM" volume. This may happen if the file is missing, or the data contained in the file is not recognized by the Personal Fonts Maker as being in the correct format. Sections 1.11 ("Loading the Personal Fonts Maker") and 1.13 ("Installing the Personal Fonts Maker"). Illegal data (T79) This general purpose message is used by the Personal Fonts Maker if extremely unusual circumstances are encountered. This may happen, for example, if the user tries to load a font whose size is 0 by 0. Illegal font description (T1D) The font format specified in the "Font Description" requester (section 7.3), in a parameter file or in a font file, cannot be displayed on the screen. This may be caused by too large font dimensions, or by an extreme X/Y display ratio. Illegal parameter in line... (T29) An error has been encountered in loading a parameter or macro file. One or more parameters of an instruction in the specified line have been found to contain a value out of the valid range. Sections 2.6 ("Program and Font Parameters"), 6.2 ("Save Macro"), 6.6 ("Examine Macro") and 7.2 ("Save Preferences"). Line too long... (T7B) An error has been encountered in loading a parameter or macro file. The line whose position from the top of the file is indicated is too long (i.e. it contains too many characters). Sections 2.6 ("Program and Font Parameters"), 6.2 ("Save Macro"), 6.6 ("Examine Macro") and 7.2 ("Save Preferences"). Logical error in line... (T0E) Loading a macro from a file, the Personal Fonts Maker has detected an impossible condition at the specified line. For example, the LBTD ("Left mouse BuTton Down") command cannot appear in two consecutive instructions, as the mouse button has to be released (LBTU command) before it can be pressed again. This error can only happen if the macro was written manually by the user, rather than recorded by the Personal Fonts Maker. Section 6.6 ("Examine Macro") and appendix L ("PFM Macros Command Consistency Table") explain the rules which must be followed in order to write a consistent macro. Macro execution aborted (W29) The Personal Fonts Maker has interrupted the execution of a macro in order to process a new user request. This is not caused by the selection of the "Stop Execution" function (section 6.9), but rather by the selection of a new operation, like a gadget associated with an editing function. Memory save mode (T6A) This message indicates that the Personal Fonts Maker has detected a low-memory environment and has taken action to reduce the occupation of RAM. This mode can also be activated by holding the key down while the program is starting. If possible, the program does the following things: the audio functions are not used (the CloantoAudio module is not loaded); the graphic module is not loaded; the Workbench screen is closed; the printer driver is not pre-loaded at the start of the program, and is removed from RAM (expunged) immediately after each print operation; no memory is allocated for the second font environment (except for the encoding vector); the directory lists of the file requester are not stored to speed up the re-display of the same lists. Sections 1.10.16 ("The Function Keys"), 1.11 ("Loading the Personal Fonts Maker") and 7.7 ("Workbench"). No character in buffer (W17) The "Paste from Buffer" command has been executed, but the character buffer is empty. Character data can be copied to the buffer only with the "Copy to Buffer" function. The character buffer, which is shared by the two font environments, is completely independent from the undo buffer and the brush data. Sections 3.11 and 3.12. Object too large (T5C) An internal Amiga error has occurred. The data found is too large to be handled by the operating system. One font only - memory cannot be freed (T68) The Personal Fonts Maker can handle two different font environments at the same time, but at least one of the two environments must be in "working conditions", i.e. having some allocated memory and being ready to accept some data. When the program is loaded, the first environment is set into "working" mode, while the second is "ready" to start working as soon as it is selected (but occupies less memory until that moment). The "Free Font Memory" function (section 4.2) can be applied to a font environment only if the other font already has some memory allocated (i.e. is in "working" mode), as the Personal Fonts Maker always reserves the memory to work with at least one font environment. Only the graphic data could be loaded (T7A) An error has occurred while data was being loaded from a file with the "Load Character Set" function (section 4.8). The file is recognized as a Personal Fonts Maker character set, but the encoding vector contains references to an unknown character set. The default character images can be loaded, but the encoding vector cannot be interpreted. This may happen if the user tries to load a character set file written on a computer using a different operating system (and character set). The encoding vector can be set manually with the "Define Character Set" function (section 4.10). Operation impossible (T5D) A function of the Amiga operating system has returned an error, but the cause of the failure is not specified. The Personal Fonts Maker cannot complete the operation. Path incorrect (T5A) The path (i.e. the set of names of drawers, separated by '/' signs) which is written in the file requester, does not exist in the requested unit. One or more of the drawer names are incorrect or too long (max 25 characters). Some characters cannot be used in the names of files and drawers. Sections 1.4 ("File Names and Titles"), 1.5 ("Drawers") and 3.23 ("The File Requester"). Path too long (T60) The selected path contains too many levels (i.e. drawers within drawers), which AmigaDOS cannot handle. Please confirm (T24) The "Printer Test" function (section 4.12) has been selected. This message is provided so that the operation can be aborted if it is selected by mistake. If the "Proceed" gadget is selected the program starts to send the data to the printer. Printer device could not be opened (T1F) The Personal Fonts Maker cannot activate the printer driver to execute the "Printer Test" and "Write Font Data/Printer" (sections 4.12 and 4.13.2) functions. This may happen if there is not enough RAM available, if the "printer.device" file cannot be accessed in the "devs" logical unit, or if the selected printer file cannot be found in the "Printers" drawer contained in the "devs" volume. Sections 1.12 ("Environment Variables and Standard Drawers"), 1.13 ("Installing the Personal Fonts Maker") and 14.2 ("Problems with Printers"). Printing in progress (...-...) ... - Bytes sent: ... (W2D) A "Printer Test" operation (section 4.12) is in progress. The message gives detailed information on the data which the program is currently sending to the printer, and the amount of data which has already been sent. Sections 4.12 ("Printer Test"), 4.13 ("Write Font Data") and 7.3.9 ("Range"). Reading in progress (W2B) The Personal Fonts Maker is reading data from a file. The mouse pointer image is in the "busy" status. No function can be selected until the operation has been completed. Sequence iteration is impossible (T76) The values assigned to the FRST e LAST variables do not describe a valid range. These values are calculated by the program based on the "Range" parameter (section 7.3.9). This may happen if the special values -1 and -2 cannot be translated because no "On" or "Off" characters, respectively, exist. It may also be possible that, as a result of the conversion of the special -1, -2 and -3 codes, LAST is smaller than FRST. Sections 4.13 ("Write Font Data") and 7.3.9 ("Range") explain these possible errors. Some characters will be cut (T1E) A font format has been specified through the "Font Description" requester (section 7.3), or in a parameter file ("Load Preferences", section 7.1), which would cause part of the existing characters to be cut during the conversion to the new format. The Personal Fonts Maker displays this warning message so that a new format can be selected, if necessary. Stretching in progress (W35) A font having a format (size and/or proportions) different from the current font format has been selected to be loaded, or a font size different from that of the current font has been selected through the "Font Description" requester or in a parameter file. The program is stretching the font to the new format, as requested by the user. No function can be selected while this operation is in progress. Sections 4.3 ("Load PFM Font"), 4.5 ("Import Amiga Font"), 7.1 ("Load Preferences"), 7.3 ("Font Description") and 7.10 ("Stretch"). Syntax error in line... (T2D) An error has been found in a parameter or macro file. In the specified line, a keyword has not been recognized, or a command parameter is missing or appears in an incorrect format. The parameters of the FONT (section 6.6.30), SELC (section 6.6.45), SPCE (section 6.6.53), XSIZ (section 6.6.57) and KERN (section 6.6.31) macro commands cannot consist of more characters than those which could be written in the associated string gadgets (sections 3.2 to 3.6). Syntax error in prologue (T16) Syntax error in ON sequence (T18) Syntax error in OFF sequence (T74) Syntax error in epilogue (T19) During the execution of the "Printer Test" (section 4.12) or "Write Font Data" (section 4.13) function an error has been found in the specified FFDL sequence. Different conditions may cause an error. All characters which make up an FFDL sequence must have an ASCII code in the range 32-126. This is necessary to guarantee that an FFDL sequence can be interpreted on computers using different character sets. An error may be caused by a combination of two or more characters which are not recognized as a constant, variable or command. All keywords must be separated by spaces (which are not output). Spaces can be output using the SP constant. The LENG and REPT keywords must be followed immediately by an argument, enclosed between parentheses. No space is allowed between the keyword and the first parenthesis. The two arguments of the REPT function must be separated by a comma (','). The arguments of REPT cannot be preceded by format prefixes (section 2.7.4) and cannot consist of codes associated with sequences of characters (CIDT, HDAT, HICD, VDAT, VIDT, REPT). Prefixes indicating a format other than the default byte format are not allowed before keywords associated with graphic data (CIDT, HDAT, HICD, VDAT and VIDT). Formulas (mathematical expressions enclosed between parentheses) also have some rules which must be followed. Codes representing a sequence of data (CIDT, HDAT, HICD, VDAT, VIDT and REPT) cannot be used as operands. Operands cannot be preceded by format prefixes. Parentheses must be balanced, i.e. there must be an equal number of open and close parantheses. A formula must begin with an open paranthesis. Space characters may be freely used inside formulas. Formulas can be nested, i.e. a formula can appear inside another one. Sections 2.7 ("Programming the Output Format: the Cloanto FFDL"), 4.12 ("Printer Test") and 4.13 ("Write Font Data") and appendix B ("Hexadecimal, Decimal, Octal, Binary and ASCII Codes Table"). If the "Font Format" function is recalled after one of these errors occurs, the cursor appears where the error was detected. The brush is too large (T2C) The image contained in the IFF ILBM file specified through the "Load Brush" function (section 5.1) is too large. The image cannot be wider or taller than 255 dots. The character display size cannot be increased (W18) The "Larger" gadget (section 3.14) has been selected, but the character editing box cannot be magnified any more, as it would not fit in the available screen space. The character display size cannot be reduced (W19) The "Smaller" gadget (section 3.13) has been selected, but the character editing box cannot be reduced any more, since the dots which make up the image have already reached the minimum size. The minimum dot size is 2 by 2 screen pixels if the "Grid" options are disabled (section 7.6) or 1 single dot (plus the surrounding grid) if a grid has been selected. The character set of the selected font is: ... (T82) The current character set is: ... (T83) A font has been loaded successfully, but the character set of the font environment is different than the character set used to design that font. If no character set was selected for the current font environment, only the name of the font's set is displayed. This message should be interpreted as an invitation to load the same character set as the selected font's one, so that the default character images and the encoding vector of the font environment match the characters of the font. Sections 4.3 ("Load PFM Font") and 4.8 ("Load Character Set"). The current font will be lost (T22) The current font has not been saved (it is a new font, or has been modified since it was last loaded or saved), but a command which would cancel that font from the program's memory has been selected. This warning message gives the user the chance to abort the selected function to save the font. The file does not contain the required data (T1B) A file has been selected for a read operation, but the data contained in that file is not of the expected type, or the file's content has been damaged. This can happen, for example, if the Personal Fonts Maker tries to load a font, but discovers that the file specified through the file requester contains a brush image. In order to reduce the risk of similar errors, files of different types should never be stored in the same drawer. It is also advisable to append standard suffixes to file names. Sections 1.4 ("File Names and Titles") and 1.12 ("Environment Variables and Standard Drawers"). The file does not exist (T5B) A file has been specified for a load operation, but the Personal Fonts Maker cannot find a file with the given name following the specified path. Section 3.23 ("The File Requester") explains how to avoid the risk of mistyping file and directory names. The file exists - Confirm overwriting (T33) An operation which would overwrite an existing file has been selected. The "Confirm Overwriting" option is active, so the program displays this warning message, indicating the file whose content would be overwritten. The operation is aborted if the "Cancel" gadget of the requester containing the message is selected. This gives the user the opportunity to execute the operation again, using a different file name. The file will be deleted (T7E) An operation which would delete an existing file has been selected. The operation is aborted if the "Cancel" gadget of the requester containing the message is selected. Sections 4.16.1 ("Delete/File") and 4.16.2 ("Delete/Amiga Font"). The font cannot be opened (T87) The "Import Amiga Font" (section 4.5) has failed to load the specified font. This may happen if an incorrect typeface name was typed, or if the available memory conditions or a read/write error interrupted the font load operation. The format of the selected font is... (T06) The requested format is... (T7D) The current format is... (T05) A font having a format (size and/or proportions) different from the current font format has been selected to be loaded, or a font size different from that of the current font has been selected through the "Font Description" requester or in a parameter file. The program allows the user to leave the font unmodified (but with a possible loss of data and proportions), to stretch the font, to adapt the format of the current font environment to that of the font being loaded (if a load operation is in progress) or to cancel the function (aborting the load operation, or restoring the previous font parameters). Sections 4.3 ("Load PFM Font"), 4.5 ("Import Amiga Font"), 7.1 ("Load Preferences"), 7.3 ("Font Description") and 7.10 ("Stretch"). The name of the selected file is: ... (T84) The character set's internal name is: ... (T85) A character set has been loaded, but the internal name of the character set is found to be different from the name of the file containing it. This may only happen if the file name was modified using a program other than the Personal Fonts Maker. Once a character set has been defined and saved, its file name should not be changed, as any fonts created using that character set contain a reference to that set's name. The Personal Fonts Maker uses a second name, stored inside the character set file, to check whether the file name has been changed improperly (for example, with the AmigaDOS "Rename" command). The Personal Fonts Maker can be used to save a character set under different names. When a character set file is deleted, any references from a font to that character set must be updated by loading the font and saving it using the new character set. Sections 4.3 ("Load PFM Font"), 4.4 ("Save PFM Font"), 4.8 ("Load Character Set") and 4.9 ("Save Character Set"). There is not enough memory (T41) There is not enough memory to perform the operation requested. It may be useful to use the "Free Font Memory" function (section 4.2) on one of the two font environments, and the "Free Character Set" function (section 4.7) on the other font. The Workbench screen can be closed to gain some extra memory (section 7.7, "Close Workbench"). There is nothing to export (T40) The "Export Amiga Font" function has been selected, but no characters can be saved, either because there were no "On" characters, or because those which were "On" had no Amiga-equivalent defined by the encoding vector. This message also appears if no character set at all has been selected. Sections 2.8 ("Character Sets"), 3.10 ("The 'ON/OFF' Gadget") and 4.6 ("Export Amiga Font"). There is nothing to undo (W16) The "Undo" function (section 3.9) has been requested, but the effect of the last command cannot be undone. This may happen immediately after a new character or font is selected, or if no editing operation at all has yet been executed. Title not correct (T5E) A wrong path has been specified for a file read or write function, or the selected file name is not correct. Sections 1.4 ("File Names and Titles"), 1.5 ("Drawers") and 3.23 ("The File Requester"). Unsaved data: (T25) Font 1 (T71) Font 2 (T70) Character set 1 (T6F) Character set 2 (T6E) Brush (T6D) Macro (T6C) An operation which would cause a loss of data has been selected. The program lists all data items which have not been saved, or have been modified since they were loaded or saved. This warning message gives the user the opportunity to abort the selected function to save the data. Sections 4.2 ("Free Font Memory"), 4.4 ("Save PFM Font"), 4.7 ("Free Character Set"), 4.9 ("Save Character Set"), 4.18 ("Quit"), 5.2 ("Save Brush") and 6.2 ("Save Macro"). Volume is full (T58) The unit to which a save operation has been directed is full, and cannot contain the requested amount of data. The data can still be saved on any unit which has enough free room to contain it. The disks which come with the Personal Fonts Maker are almost completely full. Additional data (e.g. a font) should not be saved to these disks. Instead, a new disk should be formatted, or a new drawer should be created on a hard disk partition where some space is left, to contain all Personal Fonts Maker files. Sections 1.3.4 ("Peripheral Units"), 1.5 ("Drawers"), 1.13 ("Installing the Personal Fonts Maker") and 14.1 ("Problems with Disks"). Volume not mounted (T61) The selected peripheral does not contain any storage unit. There probably is no disk in the selected drive. This can only happen if the "Expand Path" option (section 7.11.1) has been disabled, as the Personal Fonts Maker's default volume access mode is by logical name, rather than physical name. Workbench screen cannot be closed (T21) The Personal Fonts Maker cannot close the Workbench screen, since it contains other windows than those used to display the content of disks and drawers. Sections 2.6.22 ("The WBEN Parameter") and 7.7 ("Workbench"). Workbench screen cannot be opened (T23) The Personal Fonts Maker cannot open the Workbench screen, as requested in a parameter file or through a program menu. There is probably not enough free chip (video) memory. Sections 2.6.22 ("The WBEN Parameter") and 7.7 ("Workbench"). Writing in progress (W2C) The Personal Fonts Maker is writing data to a file. The mouse pointer image is in the "busy" status. No function can be selected before the operation has been completed (any user action will have no effect). Writing in progress (...-...) ... - Bytes written: ... (W2E) A "Write Font Data" operation (section 4.13) is in progress. The message informs the user about the data which the program is currently outputting, and the amount of data which has already been written. Sections 4.13 ("Write Font Data") and 7.3.9 ("Range"). @ENDNODE