|
|
1.1 ! root 1: .pa 1 ! 2: .he 'FORM (I)'6/15/72'FORM (I)' ! 3: .ti 0 ! 4: NAME ! 5: .br ! 6: form -- form letter generator ! 7: .sp ! 8: .ti 0 ! 9: SYNOPSIS ! 10: .br ! 11: form____ proto arg918 ... ! 12: .sp ! 13: .ti 0 ! 14: DESCRIPTION ! 15: .br ! 16: form____ generates a form letter from a prototype ! 17: letter, an associative memory, arguments and in a special case, the ! 18: current date. ! 19: .sp ! 20: If form____ is invoked with the proto_____ argument 'x', the associative memory is ! 21: searched for an entry with name 'x' and the contents filed under that name are ! 22: used as the prototype. If the search fails, the message "[x]:" is typed on ! 23: the console and whatever text is typed in from the console, terminated by ! 24: two new lines, is used as the prototype. ! 25: .sp ! 26: If the prototype argument is missing, '{letter}' is assumed. ! 27: .sp ! 28: Basically, form____ is a copy process from the prototype to the output file. ! 29: If an element of the form [n] (where n_ is a digit from 1 to 9) is encountered, ! 30: the n_th argument arg___9n8 is inserted in its place, and that argument is then ! 31: rescanned. If [0] is encountered, the current date is inserted. If ! 32: the desired argument has not been given, a message of the form "[n]:" is ! 33: typed. The response typed in then is used for that argument. ! 34: .sp ! 35: If an element of the form [name] or {name} is encountered, the name is looked up in the ! 36: associative memory. If it is found, the contents of the memory under this ! 37: name replaces the original element (again rescanned). If ! 38: the name is not found, a message of the form "[name]:" is typed. ! 39: The response typed in is used for that element. The response is ! 40: entered in the memory under the name if the name is enclosed in []. ! 41: The response is not entered in the memory but is remembered for the ! 42: duration of the letter if the name is enclosed in {}. ! 43: .sp ! 44: In both of the above cases, the response is typed in by entering ! 45: arbitrary text terminated by two new lines. Only the first of the ! 46: two new lines is passed with the text. ! 47: .sp ! 48: If one of the special characters [{]}\\ is preceded by ! 49: a \\, it loses its special character. ! 50: .sp ! 51: If a file named "forma" already exists in the users directory, "formb" is ! 52: used as the output file and so forth to "formz". ! 53: .sp ! 54: The file "form.m" is created if none exists. Because form.m is ! 55: operated on by the disc allocater, it should only be changed by using ! 56: fed___, the form letter editor, or form____. ! 57: .sp ! 58: .fi ! 59: .ti 0 ! 60: FILES ! 61: .br ! 62: form.m associative memory ! 63: .br ! 64: form? output file (read only) ! 65: .sp ! 66: .fi ! 67: .ti 0 ! 68: SEE ALSO ! 69: .br ! 70: fed(I), type(I), roff(I) ! 71: .sp ! 72: .fi ! 73: .ti 0 ! 74: DIAGNOSTICS ! 75: .br ! 76: "cannot open output file" "cannot open memory file" ! 77: when the appropriate files cannot be located or created. ! 78: .sp ! 79: .fi ! 80: .ti 0 ! 81: BUGS ! 82: .br ! 83: An unbalanced ] or } acts as an end of file but ! 84: may add a few strange entries to the associative memory.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.