FORM (I)                     6/15/72                     FORM (I)





NAME

                form -- form letter generator



SYNOPSIS

                form proto arg  ...
                              1


DESCRIPTION

                form generates a form letter from a prototype

                letter, an associative memory, arguments and in a

                special case, the current date.



                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 pro-

                totype.



                If the prototype argument is missing, '{letter}'

                is assumed.



                Basically, form is a copy process from the proto-

                type to the output file.  If an element of the

                form [n] (where n is a digit from 1 to 9) is en-

                countered, the nth argument arg  is inserted in
                                               n
                its place, and that argument is then rescanned.

                If [0] is encountered, the current date is in-

                serted.  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 argu-

                ment.



                If an element of the form [name] or {name} is en-

                countered, the name is looked up in the associa-

                tive memory.  If it is found, the contents of the

                memory under this name replaces the original ele-

                ment (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 en-

                closed in {}.



                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.



                If one of the special characters [{]}\ is pre-

                ceded by a \, it loses its special character.



                If a file named "forma" already exists in the

                users directory, "formb" is used as the output

                file and so forth to "formz".



                The file "form.m" is created if none exists.  Be-

                cause form.m is operated on by the disc allo-

                cater, it should only be changed by using fed,

                the form letter editor, or form.



FILES

                form.m  associative memory

                form?   output file (read only)



SEE ALSO

                fed(I), type(I), roff(I)



DIAGNOSTICS

                "cannot open output file" "cannot open memory

                file" when the appropriate files cannot be lo-

                cated or created.



BUGS

                An unbalanced ] or } acts as an end of file but

                may add a few strange entries to the associative

                memory.