.pa 1
.he 'FORM (I)'6/15/72'FORM (I)'
.ti 0
NAME
.br
form -- form letter generator
.sp
.ti 0
SYNOPSIS
.br
form____ proto arg918 ...
.sp
.ti 0
DESCRIPTION
.br
form____ generates a form letter from a prototype
letter, an associative memory, arguments and in a special case, the
current date.
.sp
If form____ is invoked with the proto_____ argument 'x', the associative memory is
searched for an entry with name 'x' and the contents filed under that name are
used as the prototype.  If the search fails, the message "[x]:" is typed on
the console and whatever text is typed in from the console, terminated by
two new lines, is used as the prototype.
.sp
If the prototype argument is missing, '{letter}' is assumed.
.sp
Basically, form____ is a copy process from the prototype to the output file.
If an element of the form [n] (where n_ is a digit from 1 to 9) is encountered,
the n_th argument arg___9n8 is inserted in its place, and that argument is then
rescanned.  If [0] is encountered, the current date is inserted.  If
the desired argument has not been given, a message of the form "[n]:" is
typed.  The response typed in then is used for that argument.
.sp
If an element of the form [name] or {name} is encountered, the name is looked up in the
associative memory.  If it is found, the contents of the memory under this
name replaces the original element (again rescanned).  If
the name is not found, a message of the form "[name]:" is typed.
The response typed in is used for that element.  The response is
entered in the memory under the name if the name is enclosed in [].
The response is not entered in the memory but is remembered for the
duration of the letter if the name is enclosed in {}.
.sp
In both of the above cases, the response is typed in by entering
arbitrary text terminated by two new lines.  Only the first of the
two new lines is passed with the text.
.sp
If one of the special characters [{]}\\ is preceded by
a \\, it loses its special character.
.sp
If a file named "forma" already exists in the users directory, "formb" is
used as the output file and so forth to "formz".
.sp
The file "form.m" is created if none exists.  Because form.m is
operated on by the disc allocater, it should only be changed by using
fed___, the form letter editor, or form____.
.sp
.fi
.ti 0
FILES
.br
form.m	associative memory
.br
form?	output file (read only)
.sp
.fi
.ti 0
SEE ALSO
.br
fed(I), type(I), roff(I)
.sp
.fi
.ti 0
DIAGNOSTICS
.br
"cannot open output file" "cannot open memory file"
when the appropriate files cannot be located or created.
.sp
.fi
.ti 0
BUGS
.br
An unbalanced ] or } acts as an end of file but
may add a few strange entries to the associative memory.
