A Fasload file may be regarded as a human-readable prefix followed by code in a funny little language. When interpreted, this code will cause the construction of the encoded data structures. The virtual machine which interprets this code has a stack and a table, both initially empty. The table may be thought of as an expandable register file; it is used to remember quantities which are needed more than once. The elements of both the stack and the table are Lisp data objects. Operators of the funny language may take as operands following bytes of the data stream, or items popped from the stack. Results may be pushed back onto the stack or pushed onto the table. The table is an indexable stack that is never popped; it is indexed relative to the base, not the top, so that an item once pushed always has the same index.
More precisely, a Fasload file has the following macroscopic organization. It is a sequence of zero or more groups concatenated together. End-of-file must occur at the end of the last group. Each group begins with a series of seven-bit ASCII characters terminated by one or more bytes of all ones #xFF; this is called the header. Following the bytes which terminate the header is the body, a stream of bytes in the funny binary language. The body of necessity begins with a byte other than #xFF. The body is terminated by the operation FOP-END-GROUP.
The first nine characters of the header must be FASL FILE in upper-case letters. The rest may be any ASCII text, but by convention it is formatted in a certain way. The header is divided into lines, which are grouped into paragraphs. A paragraph begins with a line which does not begin with a space or tab character, and contains all lines up to, but not including, the next such line. The first word of a paragraph, defined to be all characters up to but not including the first space, tab, or end-of-line character, is the name of the paragraph. A Fasload file header might look something like this:
FASL FILE >SteelesPerq>User>Guy>IoHacks>Pretty-Print.Slisp Package Pretty-Print Compiled 31-Mar-1988 09:01:32 by some random luser Compiler Version 1.6, Lisp Version 3.0. Functions: INITIALIZE DRIVER HACK HACK1 MUNGE MUNGE1 GAZORCH MINGLE MUDDLE PERTURB OVERDRIVE GOBBLE-KEYBOARD FRY-USER DROP-DEAD HELP CLEAR-MICROCODE %AOS-TRIANGLE %HARASS-READTABLE-MAYBE Macros: PUSH POP FROB TWIDDLE
one or more bytes of #xFF.
The particular paragraph names and contents shown here are only intended as suggestions.