six characters long. The LIBRARY command (abbreviation L) had the following sub-commands: LIBRARY DELETE [device:]program name – delete a program LIBRARY LIST [device:][file name] – catalog LIBRARY RUN [device:]program name [line number] – chain a program, optionally resuming at a specified line number LIBRARY SAVE [device:]program name – save a program LIBRARY EXIT – return to the PDP-8 monitor program FOCAL-71 added: LIBRARY CALL [device:]program name – load a program LIBRARY GOSUB [device:]program name [group number] – call a subroutine in an external program Error codes Since the interpreter lacked sufficient memory space to store error messages, or even a table of error numbers, FOCAL used a workaround by reporting the address of the error-detecting code as a fixed-point number. For example, the division by zero error was detected it would report , where 28.73 represents the code checking for this error at memory page 28 plus an offset of 73 words, and 01.10 is the line number where the error occurred. Pages in the PDP-8 were 128 bytes long, so this address translates to location 3657. Changes between versions DEC released three versions of FOCAL for the PDP-8 series, the original, known simply as FOCAL, and two updated versions, FOCAL,1969 and FOCAL,1971. FOCAL,1969 was largely identical to the original, but FOCAL,1971 was major update that added file handling, new mathematics, and a variety of other changes. In contrast to the first two versions, which were stand-alone systems, FOCAL,1971 was based on the emerging OS/8 (then still known as PS/8) and relied more heavily on that operating system for file handling and editing. FOCAL,1971 One change in the new version was a 10-digit math package for added precision. The function now returned zero if the input expression evaluated to zero. Previously this would return one. The now used a better algorithm that produced more randomly distributed numbers. It also added the new function that took a string and returned its ASCII value (akin to BASIC's ) and which took a number and returned a string with that ASCII character (). As all of these options used up limited memory, when started, FOCAL,1971 entered a dialog that asked the user what features they wanted to use. Comparison with JOSS FOCAL is, for all intents, a cleaned-up version of JOSS with changes to make the syntax terser and easier to parse. Almost all FOCAL commands have a one-to-one correspondence with JOSS and