Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-07 - decus/20-0169/mail.rno
There is 1 other file named mail.rno in the archive. Click here to see a list.
.comment This document file uses the FROFF command conventions
.comment most of which are identical to those of RUNOFF.
.comment The first 2 pages are a cover and title page constructed
.comment from large multiple-line lettering.
.comment FROFF is a FORTRAN word processing program written by
.comment the same author as the programs described in this manual
.spacing 2.OFFSET RIGHT PAGE 5
.FIGURE 13
.OUTLINE'MAILING*ADDRESS*SYSTEM*',1,1,3,1,1
.CENTER NO FILL
.SQUEEZE 5,15,21,26,30,37,42
.LETTER,2,1;MAILING
.SQUEEZE 4,13,22,31,40,49,58
.LETTER;ADDRESS
.SQUEEZE 5,23,41,51
.LETTER;SYSTEM
.END OBJECT
.SKIP 2
Mailing Address System
Donald E. Barth
8-Jun-83
.initial PAGE.SKIP LEFT PAGE.INITIAL PAGE
.FIGURE 13
.CENTER NO FILL
.SQUEEZE 5,15,21,26,30,37,42
.LETTER;MAILING
.SQUEEZE 4,13,22,31,40,49,58
.LETTER;ADDRESS
.SQUEEZE 5,23,41,51
.LETTER;SYSTEM
.SKIP 2
Mailing Address System
Donald E. Barth
8-Jun-83
.FILL.spacing 1
.initial PAGE.SKIP LEFT PAGE.INITIAL PAGE
.number 1
.PAGE WIDTH 60
.right top title'Mailing Address System',,'>'
.left top title'>',,'Mailing Address System'
.skip.test page 6
.center;MAILING ADDRESS SYSTEM
.center;------- ------- ------
.skip.test page 3
This package consists of several FORTRAN programs which can print
addresses onto various types of paper stock for use in making mass
mailings.  The addresses can be printed onto envelopes and labels and,
with the use of an appropriate word processing program, can be inserted
into customized form letters.  The programs accumulate the addresses
which are to be written in a single row, shift the addresses
horizontally to be the proper distance from the edge of the paper stock,
and generate enough blank lines above and below to place each row of
addresses onto a new row of forms.  The dimensions of several standard
sizes of forms are built into the programs, but the user can also match
the dimensions of other forms.
.skip.test page 3
The programs in this package are not used to maintain the address lists.
Instead, the addresses are read from a file which has been previously
generated by an independent program.  There might be many address lists
maintained by several programs.  It is only necessary that each of
the programs which maintain the address lists be able to generate the
same form of intermediate files which can then be read by the programs
in this package.  The format of these intermediate files is described
later in this document.  The intermediate files can contain the
completely formatted addresses, or can contain the individual
components, each separately identified, of each of the lines which
are to be included in the addresses.  Both types of files can be read
by most of the programs in this package, but the form of the
intermediate files which specifies the components of the addresses
is more generally useful.
.skip.test page 3
The programs in this package do not obtain the addresses directly from
the original data bases because that would have required the writing
of a separate version of the programs for each different data base
structure.  Having only a single version of each program makes the
programs in this package easier to develop and to maintain.  However,
having the programs read an intermediate file rather than the original
data base does require more run time since the intermediate file must
first be produced by the program which maintains the address list,
and requires more disk space to store the intermediate file.
.skip.test page 6
Once a programmer has converted the programs which maintain the address
lists to produce the proper intermediate files, the user should be
able to run the programs in this package without consulting this manual.
The questions which are asked by these programs are all simple, although
in some cases there are many of them.  The user can request an
explanation of the available options by pressing the question mark
key and then the RETURN key in response to any request other than for
the name of a file.
.skip.test page 6
The following programs are contained in this package.
.skip.test page 3
The ENVELO program writes the addresses to a file which can be printed
later onto envelopes mounted on continuous fanfold paper.  The ENVELO
program can also type the addresses directly onto envelopes which are
inserted individually by hand into the controlling terminal or which
are mounted on continuous fanfold paper.
.skip.test page 3
The LABELS program writes the addresses to a file which can be printed
later onto parallel columns of labels mounted on continuous fanfold
paper.  The LABELS program can also type the addresses directly onto
labels mounted on continuous fanfold paper which has been inserted
into the controlling terminal.
.skip.test page 3
The SPLICE program writes the addresses to a file which can be used
with the aid of a suitable word processing program to insert inside
addresses and salutations into form letters.  The SPLICE program does
not itself insert the addresses into the form letters.
.skip.test page 3
The MRGADR program merges 2 or more files which specify the components
of the addresses and which are each sorted in zip code order.  The
resulting single address file can be processed by the ENVELO, LABELS
or SPLICE programs.  The MRGADR program does not itself print the
addresses onto paper stock.
.skip 3.TEST PAGE 6
.rtt'Input Files Containing Previously Formatted Addresses',,'>'
.c;INPUT FILES CONTAINING PREVIOUSLY FORMATTED ADDRESSES
.c;----- ----- ---------- ---------- --------- ---------
.skip.test page 3
The addresses which are to be processed by the programs in this package
are read from a file which was written by the program which maintains
the address list.  This file can contain either the previously formatted
addresses, or the separate components of the addresses.
.skip.test page 3
If the addresses have already been formatted, then at least 1 line
starting with a period in the left column must appear between successive
addresses.  Lines starting with periods can also appear at the start
and at the end of the file but are not required at these positions.
The contents of the lines which start with periods are not copied into
the addresses.
.skip.test page 3
The addresses can include salutations which are to be incorporated
into form letters.  These salutations are suppressed when the addresses
are typed onto labels or envelopes.  In order to be recognized as a
salutation, the salutation must appear on the final line in the address,
must start with the word "Dear" and must end with either a colon or
a comma.  The salutation will not be recognized if it violates any
of these requirements.  The salutation line should be separated from
the rest of the address by at least one blank line, although this is
not required.  If the address does not end with a salutation line,
then a salutation can instead be constructed from the person's name
in the first line of the address.  However, salutations constructed
in this manner should be carefully checked by the user since the program
cannot recognize all possible variations in people's names.
.skip 3.TEST PAGE 6
.rtt'Input files Containing Components of Addresses',,'>'
.C;INPUT FILES CONTAINING COMPONENTS OF ADDRESSES
.C;----- ----- ---------- ---------- -- ---------
.SKIP
Each line of a file which specifies the components of the addresses,
rather than addresses which have already been formatted, starts with
an at sign (the @ character) followed immediately by a single character
which specifies the type of component which is defined by that line.
These first 2 characters on each line are not copied into the resulting
address.  If the character to the right of the at sign is one of the
alphabetic letters A through Z, then this letter can appear in either
upper case (a capital letter) or lower case (a small letter).  The
various components of the address can be specified in any order.
.skip.test page 3
The programs in this package insert punctuation marks where needed
into lines, such as the name line and the city line, which are
constructed from several components.  Those portions of the address
which require a full line, for example the department name, the
organization name, and the street address, can be continued on as many
subsequent lines as are necessary, but the extra lines must each be
identified by the same at sign character pair in the first 2 columns.
Each continuation line begins a new line in the resulting address.
If a single component is continued onto subsequent lines, then these
continuation lines can be separated in the input file by lines which
define other components.  The initial and continuation lines for a
particular component of the address are copied into the address in
the order in which they were encountered in the input file, but grouped
together on adjacent lines.  Extra spaces are deleted at the left end
of the initial line for a particular component, but are retained at
the left end of the continuation lines for the same component.
.SKIP.test page 3
The at sign character pairs which identify the components needed by
these programs to construct the addresses are listed below.  If a
particular component is not defined for an address, then a line starting
with the corresponding at sign character pair, but containing nothing
else, is allowed but not required.  The contents of a line are ignored
if the line begins with an at sign character pair which is not listed
here.
.SKIP.test page 3.lm 4
.i-4;@_###Start of new address. The address defined by the preceding lines
is complete.  The rest of the current line is ignored.  The following
lines start a new address.
.skip.test page 3
.i-4;@@##End of file.  Not required.
 Subsequent lines in the file are not read.
.skip.test page 3
.i -4;@A##Street address.
This item can be continued on following lines.
.skip.test page 3
.i-4;@C##City name.
.skip.test page 3
.i-4;@D##Department name.  This item can be continued on following lines.
.skip.test page 3
.i-4;@E##Suffix to be placed to the right of
the person's last name. Examples are Jr., III, etc.
.skip.test page 3
.i-4;@F##Person's first name.
.skip.test page 3
.i-4;@G##Name for salutation.  This might be a first name for a personal
letter or a Mr_. or Ms_. prefix together with the last name for a
business letter.  This should not include either the word "Dear" or
a following colon or comma.  The word "Dear" and the final punctuation
mark will be inserted by the SPLICE program.  The salutation is ignored
by the other programs.
.skip.test page 3
.i-4;@K##Code line. The LABELS program can place this line at the top
of the labels.  The code line is ignored by the other programs.  This
line can contain any characters.
.skip.test page 3
.i-4;@L##Person's last name.
.skip.test page 3
.i-4;@M##Person's middle name.  This should include the period if it
is an initial.
.skip.test page 3
.i-4;@N##Country.  This is not needed if the
 address is for the local country.
.skip.test page 3
.i-4;@O##Organization name.
This item can be continued on following lines.
.skip.test page 3
.i-4;@P##Prefix to be placed to the left of the person's first name.
Examples are Mr., Ms., Professor, etc.
.skip.test page 3
.i-4;@S##State name. This can have any form, such as a 2 letter
abbreviation, a 4 letter abbreviation or the full spelling.  The state
name is used exactly as supplied and is not verified.
.skip.test page 3
.i-4;@T##Title to be placed below the person's name.
This item can be continued on following lines.  The title is considered
to be expendable if the address must be reduced in height to fit onto
a small label.
.skip.test page 3
.i-4;@X##Line to be inserted below the salutation by the SPLICE program.
This is ignored by the other programs.  This item could be used for
something which is to be inserted into the body of the letter.  This
item can be continued on following lines.
.skip.test page 3
.i-4;@Y##Any additional line to be at the bottom of the address.
This will appear above the salutation as a part of the address.  An
example might be CAMPUS MAIL.
.skip.test page 3
.i-4;@Z##Zip code. This can have any form, such as 5 digits or 9 digits.
.lm 0.skip.test page 3
The components defined by these at sign character pairs are inserted
into the address in the order which is shown below.  The list of items
which appear in the address is defined by 2 arrays which appear in
the PUTADR subroutine and which are easily changed.  The contents of
these arrays are described later in this document.
.skip.nofill.test page 15
_.LITERAL               Word processor instruction
@K                     Code (optional)
@P @F @M @L, @E        Prefix First Middle Last, Suffix
@T                     Title
@D                     Department
@O                     Organization
@A                     Street
@C, @S @Z, @N          City, State Zip, Country
@Y                     Final line in place of above line

Dear @G:               Salutation if supplied in input file
Dear @F,               Alternate form of personal salutation
Dear @P @L:            Alternate form of business salutation
_.END LITERAL.END SPLICE
@X                     Extra line to be spliced into letter
.fill.skip.test page 6
For example, an input file having the contents shown below
.skip.test page 3.nofill
@PMr.
@FJohn
@MB.
@LSmith
@EJr.
@TDirector
@DCareer Counseling Office
@OCentral College
@CRockport
@SCT
@Z06352
@GMr. Smith
@_#
@GLinda
@Z51222
@STN
@CVictorville
@A6721 Main Street
@OVillage University
@OCollege of Science
@DDepartment of Chemistry
@LJones
@MF.
@FLinda
@PMs.
@@
.fill.skip.test page 6
would be converted by the SPLICE program into an output file having
the contents shown below.
.skip.test page 3.nofill
_.LITERAL
Mr. John B. Smith, Jr.
Director
Career Counseling Office
Central College
Rockport, CT  06352

Dear Mr. Smith:
_.END LITERAL.END SPLICE
_.LITERAL
Ms. Linda F. Jones
Department of Chemistry
Village University
College of Science
6721 Main Street
Victorville, TN  51222

Dear Linda:
_.END LITERAL.END SPLICE
.fill.skip.test page 3
The file produced by the SPLICE program could itself be treated as
an input file which is to be processed by the ENVELO, LABELS and SPLICE
programs.  If such a second generation file were to be processed again
by the SPLICE program, then the resulting third generation file would
exactly duplicate the second generation file.  However, an output file
which has been produced by the SPLICE program cannot be correctly
processed by any of the programs in this package if this output file
contains any lines after the _.END#LITERAL.END#SPLICE commands which
are to be merged by the word processing program into the body of the
form letter.
.SKIP 3.TEST PAGE 6
.rtt'Starting at an Address Beyond First Address in File',,'>'
.C;STARTING AT AN ADDRESS BEYOND FIRST ADDRESS IN FILE
.C;-------- -- -- ------- ------ ----- ------- -- ----
.skip.test page 3
An interruption while the addresses are being printed can mean that
the paper stock has to be realigned in the printer or that the printing
process has to be started over.  Since considerable time or expensive
paper stock might have been used for the addresses which have been
printed correctly, it may be desirable to run the program which copied
the addresses again starting at or just before the first address which
was spoiled.  The programs in this package allow the user to type a
word or a phrase which appears in the first address which is to be
copied but which does not appear in any address which is located earlier
in the file.  If the ENVELO program is being used to type the addresses
onto separate envelopes, then, after any envelope has been completed,
the user can merely press the RETURN key to type the next address or
else the user can type a word or a phrase which is unique to a
subsequent address to skip to that address.  If the addresses are being
typed onto labels or onto envelopes which are mounted on continuous
fanfold paper, then all of the addresses appearing after the selected
address will be generated.
.skip.test page 3
The word or phrase which the user types to select a particular address
must be longer than 1 character.  If the ENVELO program is being used,
then a single printing character can be typed by the user before the
first address is generated to obtain a target pattern instead, and
a single printing character can be typed by the user after any address
has been typed on a separate envelope to repeat that address.  If there
are several addresses which have not yet been generated and which
contain the word or phrase, then the first of these will be selected.
If the user is inserting individual envelopes and if an address is
obtained which is too early in the file, then the user can merely
specify the word or phrase again after the incorrectly selected address
has been generated.  However, if the addresses are being typed onto
labels or onto envelopes which are mounted on continuous fanfold paper,
then there is no way to interrupt the typing of the addresses other
than to stop the program entirely.
.skip.test page 3
The word or phrase typed by the user will match the word or phrase
having the same spelling in the address regardless of the cases of
the alphabetic letters, i.e_.  whether these are capital or small
letters.
.skip.test page 3
The word matched in the address must start with the first printing
character on the line or must start with the first printing character
following either a space or a comma.  The word must extend through
the final printing character on the line or must be followed by a space
or must be followed by a printing character which is neither one of
the alphabetic letters A through Z nor one of the digits 0 through
9.
.skip.test page 3
Spaces between words typed by the user indicate the only locations
in the address at which spaces are allowed for a match, but spaces
are not required for a match at these locations in the address.  For
example, if the user types the single word "NewHaven", then this word
will match the single word "NewHaven" in the address, but will not
match the 2 word phrase "New Haven" with a space between the words.
If the user types the 2 word phrase "New Haven" with a space between
the words, then this phrase will match either the single word "NewHaven"
without a space or the 2 word phrase "New Haven" with a space between
the words.
.skip 3.test page 6
.rtt'File Name Conventions',,'>'
.C;FILE NAME CONVENTIONS
.C;---- ---- -----------
.skip
On either the DECsystem10 or DECsystem20 computers, the names of the
files which are read or written by the programs in this package must
consist of 1 to 6 letters or digits, optionally followed by a period
and then by 0 to 3 letters or digits.  If the user does not type a
period in the file name, or if a period is typed but nothing else is
typed to the right of the period, then the name of the file will consist
only of the characters which were actually typed.  No default or
standard file name extension (file type) is assumed.  If the user types
ABC as the file name, then the name of the file will be exactly this,
not ABC.RNO or ABC.TXT or ABC.ADR or any other combination.
.skip
The files written by the LABELS program are named LABELS.DDD where
DDD is a decimal number from 001 through 999.  The program checks for
the first currently unused file name in the sequence and writes the
new labels into this file.  For a large label run in which more labels
are generated than the operators of the computer want to have in a
single file, the LABELS program will create additional output files
as necessary, each time selecting the next unused file name in the
sequence.  The first output file would be named LABELS.001 if a file
with this name did not already exist, the second output file would
be named LABELS.002, and so on.  The files written by the ENVELO program
are similarly named ENVELO.DDD where DDD is a decimal number from 001
through 999.  The user is not able to change the manner in which the
names of the output files produced by the LABELS and ENVELO programs
are constructed.
.skip 3.test page 6
.PAGE
.rtt'Instructions for Using the ENVELO Program',,'>'
.c;INSTRUCTIONS FOR USING THE ENVELO PROGRAM
.C;------------ --- ----- --- ------ -------
.skip.test page 3
The ENVELO program writes the addresses into an output file which can
be printed later onto envelopes which are mounted on continuous fanfold
paper.  The ENVELO program can also type the addresses directly onto
separate envelopes which are inserted individually by hand into the
controlling terminal or onto envelopes which are mounted on continuous
fanfold paper.  The dimensions of 2 standard sizes of envelopes are
built into the program, but the user can also specify the exact
dimensions of any other size of envelopes.  The user can request that
the program generate as many target patterns as are necessary to align
the paper stock in the terminal prior to the generation of the actual
addresses.  If separate envelopes are being inserted individually by
hand into the terminal, then the program can repeat an address if an
envelope is seen to be spoiled.
.skip
The program either can type just the destination addresses read from
an input file onto the envelopes, or can type both the destination
addresses and a return address specified by the user when the program
is started.  If a return address is requested, then the return address
can be typed in the upper left corner with the destination address
at the center, or these positions can be exchanged.
.skip
Salutations specified by the input file are not typed onto the
envelopes.  If the input file specifies addresses which have already
been formatted, then the salutation lines are recognized by their
starting with the word "Dear" and ending with either a colon or a comma.
.skip
It is strongly recommended that if the addresses are to be typed
directly onto envelopes which are mounted on fanfold paper, then the
initial interaction with the program be done on regular paper and that
the fanfold paper be inserted into the terminal just before the program
types the first address.  Attempting to type the initial interaction
onto envelopes which are mounted on fanfold paper can cause extremely
bad paper jams when the terminal types onto the bottom edges of
envelopes if these are attached only at the top.  Once the typing of
the addresses has begun, there is little danger of paper jams since
the program will only type on the central portions of the envelopes.
.SKIP
A typical dialog between the user and the ENVELO program is shown below.
The phrases which end in question marks are the requests typed by the
program.  The characters to the right of the question marks were typed
by the user in response to these requests.
.SKIP
.NOFILL.TEST PAGE 21
ENVELO (03/83)

Separate or Continuous envelopes or File (S, C or F)? F
Number of target envelopes in each file? 10
Maximum number of envelopes in each file? 1000
Wide, Narrow or Other size envelopes (W, N or O)? N
Pica or Elite spacing (P or E)? P
Light or dark type (L or D)? L
Type how many copies of each envelope? 1
Did a blank line appear after your last answer (Y or N)? N
Type return address (press RETURN key again when done)
?First line of Return address
?
Return address at corner, middle or both (C, M or B)? C
File containing addresses? ADDRSS
Output file number   1 is named ENVELO.001
Output file number   1 contains       208 envelopes
Process additional addresses (Y or N)? N
Total envelopes produced:       208

EXIT
.FILL.SKIP
The items which the user must type are described below in the order
in which these items are requested.  The user will not always be asked
to specify every item.  Which items are requested will depend upon
what responses the user has already made.
.list
.list element
Whether the addresses are to be written into an output file or are
to be typed directly onto separate envelopes or directly onto envelopes
mounted on fanfold paper.  The user should respond by typing one of
the following letters.
.skip.lm+3
.i-3.test page 3
S##(for Separate) if the addresses will be typed directly onto separate
envelopes which are inserted individually by hand into the terminal.
The program will pause after each envelope is finished and wait for
the user to insert the next envelope.
.skip.i-3.test page 3
C##(for Continuous) if the addresses will be typed directly onto
envelopes mounted on continuous fanfold paper.  The program will not
pause between envelopes.
.skip.i-3.test page 3
F##(for File) if the addresses are to be written into an output file
which will be printed later onto envelopes which are mounted on
continuous fanfold paper.
.lm-3
.list element
The number of target envelopes which are to be written at the start
of each output file for use in aligning the paper in the printer or
terminal.  This question is asked only if the addresses are being
written into an output file rather than being typed directly onto the
envelopes.  The locations of the corner address and of the middle
address will be outlined on each of these target envelopes.  Target
envelopes are also available when the addresses are being typed directly
onto the envelopes, but in that case these target envelopes are
requested one by one until the paper is properly aligned.
.list element
The maximum number of envelopes which can be written into a single
output file.  This question is asked only if the addresses are being
written into an output file rather than being typed directly onto the
envelopes.  The maximum number of envelopes should include both the
target envelopes and those actually bearing addresses.  The program
will begin a new output file starting with a set of target envelopes
each time that the desired maximum number of envelopes has been
written into the current output file.  This limit should be used to
assure that no more envelopes are written into a single output file
than can be printed onto the envelopes which are mounted on a single
length of continuous fanfold paper.
.list element
Whether the addresses will be typed onto wide or narrow envelopes, the
dimensions of which are built into the program, or whether the user will
specify the exact dimensions of the envelopes.  The user should respond
by typing one of the following letters.
.skip.lm+3.i-3.test page 3
W##(for Wide) if the envelopes are 9 1/2 inches wide by 4 1/8 inches
high.
.skip.i-3.test page 3
N##(for Narrow) if the envelopes are 7 1/2 inches wide by 4 inches
high.
.skip.i-3.test page 3
O##(for Other) if the envelopes have some other dimensions.  The user
will be asked the following additional questions if this option is
selected.
.skip.nofill.test page 7
Maximum number of lines above corner address?
Minimum number of lines below corner address?
Maximum number of lines above middle address?
Minimum number of lines below middle address?
Height of envelope as number of lines?
Number of blank columns left of corner address?
Number of blank columns left of middle address?
.skip.fill
The dimensions of the 2 standard sizes of envelopes, narrow and wide,
which are built into the ENVELO program, are shown below.  The
dimensions in this table should be consulted if only a minor adjustment
of the size is necessary.  Which address is labeled "corner" and which
is labeled "middle" is based upon the default positions for these
addresses.  The positions of these addresses could be interchanged
provided that the answers to the other questions which mention "corner"
and "middle" are likewise reversed.  The column offsets for the corner
and middle addresses are stated assuming an elite spacing of 12
characters per inch.  These offsets can be multiplied by 10/12 to get
the corresponding offsets for a pica spacing of 10 characters per inch.
.skip.nofill.test page 11.left margin -7
size:          Narrow      Narrow       Wide        Wide
how fed:      Separate     Fanfold    Separate     Fanfold
locations:   Middle Both Middle Both Middle Both Middle Both
.skip
above corner     -     0     -     2     -     0     -     2
below corner     -     3     -     3     -     3     -     3
above middle     6    11    10    10     7    12    10    10
below middle     3     3     3     3     3     3     3     3
total height    17    22    21    21    18    23    21    21
offset corner    -     0     -     0     -     0     -     0
offset middle   28    34    34    34    40    46    46    46
.skip.fill.left margin +7.test page 3
In the above table, the column headings "Narrow" and "Wide" refer to
the envelope size.  "Separate" and "Fanfold" refer to whether the
envelopes are separately fed into the the terminal or are mounted on
fanfold paper.  "Middle" and "Both" refer to whether only the middle
address is to be typed, or whether both the corner and middle addresses
are to be typed.  Minus signs appear where a dimension refers to the
corner address but no corner address is being typed.  If the addresses
are being written into a file which will be typed later onto the
envelopes, then the dimensions in the columns labeled "Fanfold" and
"Both" are used, regardless of whether the envelopes bear return
addresses or not.
.lm-3
.list element
Whether Pica or Elite character spacing is desired.  The character
spacing is used to calculate the offset of the central address from
the left edge of the envelope.  This question is not asked if the user
is specifying the envelope dimensions directly.  This program does
not issue control character or escape character sequences to set the
character spacing on the terminal or printer.  Instead, it is the
responsibility of the operator of the terminal or printer to adjust
the terminal or printer to give the desired character spacing.
.skip.test page 3
The user should respond to this question by typing one of the following
letters.
.skip.lm+3
.i-3
P##(for Pica) if the addresses are to be typed at 10 characters per
inch.
.skip.i-3
E##(for Elite) if the addresses are to be typed at 12 characters per
inch.
.lm-3
.list element
Whether the addresses are to be overprinted to make them appear darker.
This question is not asked if the addresses are being written into
an output file to be typed later.  The user should respond by typing
one of the following letters.
.skip.lm+3
.i-3.test page 3
L##(for Light) if each line is to be typed only once for normal density.
.skip.i-3.test page 3
D##(for Dark) if each line is to be typed twice to make it darker.
.lm-3
.list element
The number of envelopes upon which each destination address or each
combination of return address and destination address is to be typed.
As an example, this would have the value 1 if both the return address
and destination address are being typed and one envelope is desired
with the destination address in the middle and a second envelope is
desired with the destination address in the corner.
.list element
Whether a blank line appeared after the last answer typed by the user.
This question is not asked if the addresses are being written into
an output file which will be typed later.  The particular FORTRAN
operating system being used determines whether a blank line appears
between a line typed by the user and the next line displayed by a
program.  The user will usually not have any control over which
operating system is used.  The answer to this question is used to keep
track of the number of lines typed onto the terminal while the envelopes
which are mounted on fanfold paper are being aligned in the terminal.
After each envelope is finished, the program generates enough blank
lines before the next address is typed so as to realign the paper with
the top of the next address.  If the addresses are being typed onto
envelopes which are mounted on fanfold paper, then the correct
calculation of the number of lines displayed on the terminal is
necessary if the addresses are to be aligned the same as the target
patterns, and also if the addresses in a subsequent file are to be
aligned the same as the addresses in the first file.
.skip
The user should respond by typing one of the following letters.
.lm+3.skip.i-3
Y##(for Yes) if a blank line appeared after the last answer typed by
the user.
.skip.i-3
N##(for No) if a blank line did not appear after the last answer typed
by the user.
.lm-3
.list element
The return address.  If the user specifies a return address here, then
this return address will be typed on each of the envelopes in addition
to the destination addresses read from the input address file.  This
return address will be typed on the envelopes exactly as it is typed
by the user.  The return address can be just a single line, or can
be continued onto several lines.  The user must press the RETURN key
after each line, and must press the RETURN key an extra time after
the last line has been typed.  If no return address is desired, then
the user must still press the RETURN key once in response to this
request.
.list element
Whether the return address is to be typed at the upper left corner
of the envelope with the destination address in the middle, or in the
middle with the destination address at the upper left corner.  This
question is asked only if a return address has been specified.  The
user should respond by typing one of the following letters.
.lm+3.skip.i-3
C##(for Corner) if the return address is to appear at the upper left
corner of the envelope and the destination address is to appear in
the middle.
.skip.i-3
M##(for Middle) if the return address is to appear in the middle of
the envelope and the destination address is to appear at the upper
left corner.
.skip.i-3
B##(for Both) if 2 times the number of copies of each envelope specified
earlier are to be produced typed with each destination address.  Half
of these envelopes are to have the return address at the upper left
corner and the other half are to have the return address in the middle.
.lm-3.
.list element
The name of the address file which is to be read by this program.  The
address file either specifies the components of the addresses or
contains the previously formatted addresses.  If the address file
specifies the components, then each line starts with an at sign.  If
the address file contains the previously formatted addresses, then
these are separated by lines starting with periods.
.end list
.skip.test page 3
The program will instruct the user how to align the first envelope.
After the first envelope has been inserted into the terminal, the user
can press the RETURN key to signal to the program that the first address
can be typed.  The user can instead request that the program type a
stylized test address onto the envelope currently in the terminal by
pressing the key for a single printing character before pressing the
RETURN key.  If additional stylized test envelopes are needed to align
the paper, then the user can again press the key for a single printing
character and the RETURN key for each of these.
.skip.test page 3
If the addresses are being typed onto envelopes mounted on fanfold
paper, then the program will type all of the addresses in the input
file before halting.  If the user is instead inserting individual
envelopes into the terminal, then the user will have to press the RETURN
key again after each envelope has been inserted to signal to the program
that it can type the next address.  If individual envelopes are being
inserted into the terminal, and if one of these is spoiled in some
manner, then the user can press either the TAB key or the key for any
single printing character before pressing the RETURN key to cause the
program to retype the current address.  If the TAB key, which does
not print anything on the envelope, is pressed, then the address will
be retyped onto the envelope already in the terminal.  If the key for
a single printing character is pressed instead, then the program will
type a stylized test address onto the envelope currently in the terminal
and will then wait for the user to insert another envelope and press
the RETURN key again.  There is no way to retype an address which
appeared before the current address other than to stop the program
and then start over.
.skip.test page 3
Instead of merely pressing the RETURN key to generate the first address
after the envelopes have been aligned, the user can type any word or
phrase which appears on any line of an address appearing later in the
file to select that address as the first which is to be generated.
If the addresses are being typed onto separate envelopes which are
being individually inserted into the terminal, then after any address
has been typed, the user can insert a scrap sheet of paper into the
terminal and type a word or phrase to skip forward to the address
containing that word or phrase.  If the addresses are being typed onto
envelopes which are mounted on fanfold paper, then such a word or phrase
can only be typed before the first address is generated and the paper
stock must already have been correctly aligned.
.skip.test page 3
The word or phrase should be unique to the desired address.  The word
or phrase must be longer than 1 character since a single letter would
cause the current address to be retyped instead.  If there are several
addresses which have not yet been typed and which contain the word
or phrase, then the first of these will be selected.  If the user is
inserting individual envelopes and if an address is obtained which
is too early in the file, then the user can merely specify the word
or phrase again after the incorrectly selected address has been typed.
However, if the addresses are being typed onto envelopes which are
mounted on fanfold paper, then there is no way to interrupt the typing
of the addresses other than to stop the program entirely.
.skip 3.test page 6
.PAGE
.rtt'Instructions for Using the LABELS Program',,'>'
.c;INSTRUCTIONS FOR USING THE LABELS PROGRAM
.C;------------ --- ----- --- ------ -------
.skip.test page 3
The LABELS program writes the addresses into an output file which can
be printed later onto parallel columns of labels which are mounted
on continuous fanfold paper.  The LABELS program can also type the
addresses directly onto labels mounted on continuous fanfold paper
which has been inserted into the controlling terminal.  Several rows
of target labels can appear before the addresses for use in aligning
the paper stock in the printer or terminal.  A single minus sign is
also printed at the left edge between the rows of addresses for
confirming the alignment once printing has begun.  If the paper stock
is properly aligned, then these minus signs will be printed in the
spaces between the labels.  Since labels can be relatively small, the
program can be given a vocabulary of words which can be abbreviated
and of words which can be deleted to shorten long lines.  The person's
job title can also be deleted if the address contains too many lines.
If the input file contains the previously formatted addresses, then
the second line of each address is assumed to contain the job title
and the following lines are assumed to be extensions of the job title
if they are indented to the right of the left column.
.skip.test page 3
The vocabulary of words which can be abbreviated or deleted is read
from an input file.  These replacements and deletions are performed
only in lines which are too long to fit onto the labels.  If the user
specifies that words in long lines cannot be abbreviated, then the
file which defines the vocabulary will not be read and no such
replacements will be made.  Each line in the file which defines the
vocabulary should contain either one or two words.  Lines containing
1 and 2 words can be intermixed.  The first word on a line can start
either in the left column, or further to the right.  If a line in the
vocabulary file contains a single word, then this word is taken to
be a word which can be deleted to shorten a line which is too long
in an address.  If a line in the vocabulary file contains 2 words
separated by 1 or more spaces, then the shorter word is taken to be
a synonym by which the longer word can be replaced.  If the words are
of the same length, then the first can be replaced by the second,
although this would not change the length of the line and would be
done only if the line were already too long.  The words in the
vocabulary are recognized ignoring the cases of the alphabetic letters
A through Z.  The cases of the alphabetic letters in the words which
are inserted into the addresses are the same as were specified in the
vocabulary file.
.skip.test page 3
The following lines could appear in the vocabulary file to specify
that the word THE could be deleted and the word AND could be replaced
by an ampersand (the _& character).
.skip.test page 2.nofill
THE
AND _&
.skip.fill.test page 3
A typical dialog between the user and the LABELS program is shown below.
The phrases which end in question marks are the requests typed by the
program.  The characters to the right of the question marks were typed
by the user in response to these requests.
.SKIP
.nofill.test page 7
LABEL (04/83)

Type number which selects intial dimensions you then modify
1 for 1 column  of 4 by 1 1/2 labels, 10 pitch, 6 lines/inch
2 for 4 columns of 3 3/8 by 1 labels, 12 pitch, 8 lines/inch
Set dimensions initially to which default? 2
A) Asterisk on labels with code
B) Boxes (rows of for alignment)     33
C) Columns of labels                  4
D) Detach bottom line and zip code  YES
E) Each address on how many labels    1
G) Gutter width (spaces between)      4
H) Height of each label in inches 1.000
I) Initial code lines                NO
L) Line spacing (lines per inch)      8
M) Maximum rows of labels in file  5000
O) Offset (extra spaces at left)      0
P) Pitch (characters per inch)       12
S) Separate CAMPUS MAIL,zip,neither  NO
T) Tab characters replace spaces    YES
U) Upper case conversion             NO
W) Width of each label in inches  3.375
Are the above all correct (Y or N)? N
Press RETURN key extra time when all items are correct
Change item? B
Number of rows of alignment boxes? 5
Press RETURN key extra time to list all items
Change item? M1000
Change item?
A) Asterisk on labels with code
B) Boxes (rows of for alignment)      5
C) Columns of labels                  4
D) Detach bottom line and zip code  YES
E) Each address on how many labels    1
G) Gutter width (spaces between)      4
H) Height of each label in inches 1.000
I) Initial code lines                NO
L) Line spacing (lines per inch)      8
M) Maximum rows of labels in file  1000
O) Offset (extra spaces at left)      0
P) Pitch (characters per inch)       12
S) Separate CAMPUS MAIL,zip,neither  NO
T) Tab characters replace spaces    YES
U) Upper case conversion             NO
W) Width of each label in inches  3.375
Are the above all correct (Y or N)? Y
Are addresses to be written into an output file (Y or N)? Y
Did a blank line appear after your last answer (Y or N)? N
Abbreviate words in long lines (Y or N)? Y
File specifying abbreviations? ABBREV
Abbreviations
Remove: THE
Change: AND to _&
File containing addresses? SAMPLE
Word or phrase unique to first label?
Output file number   2 is named LABELS.002
Output file number   2 contains       416 labels
Process additional addresses (Y or N)? N
Total labels produced:       416

EXIT
.fill.skip.test page 3
The values of the items which can be selected and changed by the user
are summarized in the tables shown in the above dialog.  To change
a particular value or option specification, the user first types the
letter which is shown to the left of the item in the table.  Only the
single letter, not the full word which it represents, should be typed
by the user.
.skip.test page 3
The user can type the new value or option specification either to the
right of the letter or else on the next line.  If the user types the
new value or option specification to the right of the letter, then
one or more spaces can be typed between the letter and the new value
or option specification, but such spaces are not required.  If the
user types the new value or option specification to the right of the
letter, and if this value or option specification is within the valid
range, then the program will merely ask what item the user wants to
change next.  If the user does not type a value or option specification
to the right of the letter, then the program will display a short
description of the item.  The user can press the question mark (the
_?  character) key and then the RETURN key to obtain a more complete
description.  The short description will then be displayed again.
.skip.test page 3
Where a YES or NO answer is expected, Y and N are sufficient responses,
but the user can type the full words instead.  Where a height in inches
or a width in inches is expected, the user can type a period between
the whole number portion of the answer and the fractional portion.
The original value or option specification will usually be retained
if the user merely presses the RETURN key in response to the short
description.  However, an empty or null answer, when setting the code
which is to be matched for addresses which are to be marked with
asterisks on the labels, instead specifies that no addresses are to
be marked in this fashion, and is a valid response.
.skip.test page 3
The items which the user can set are described below.  The letter by
which the item is selected is shown to the left in the margin.  To
the right of this letter is shown the question which is displayed by
this program to prompt the user to enter the new value or option
specification.
.lm5 .skip.test page 6.indent -3
A##Asterisks on labels with code (*,% are wild cards)?
.skip.test page 3
The user should type the identification code of any address which is
to bear an asterisk (the * character) at the upper right corner of
the label.  This option is active only if the input file specifies
the components of the addresses.  The identification code is the
sequence of characters which are defined in the input file on the line
starting with an @K character pair.  The label can be marked with an
asterisk even if the identification code is not itself copied into
the label.
.skip.test page 3
The cases of the alphabetic letters A through Z are ignored, both in
the code typed by the user and in the codes specified in the input
file.  A percent sign (the % character) can be included in the code
typed by the user where any single printing character is to be allowed.
The percent sign will not match either a space or a code which is
shorter than the location of the percent sign.  An asterisk can be
included at the right end of the code if any sequence of characters
is to be allowed starting at that point.  The asterisk will match a
sequence of characters which contains a space or spaces and will not
prevent the matching of a code which is shorter than the location of
the asterisk.  If the user specifies the code A%C*, then labels
containing addresses having codes such as AAC..., ABC..., ACC.._.  etc_.
would be marked with asterisks regardless of the cases of the letters
in the codes.
.skip.test page 3
If the user selected a code previously, but has since decided that
the labels are not to be marked with asterisks, then the user should
just press the RETURN key again when asked to type the code.
.skip.test page 6.indent -3
B##Number of rows of alignment boxes?
.skip.test page 3
Several rows of label outlines can be generated before the first address
in each output file to be used for alignment of the paper in the
terminal or printer.  The user should type the number of rows of empty
boxes which are desired.  Probably zero rows of labels outlines should
be selected here if the addresses are to be typed directly onto the
controlling terminal, since in that case the user can interactively
request as many rows of label outlines as are necessary to align the
paper in the controlling terminal.
.skip.test page 6.indent -3
C##Number of parallel columns of labels?
.skip.test page 3
The addresses can be arranged in a single column, or in 2 to 4 parallel
columns.  If 3 columns of labels are selected here, then the first
3 addresses would be placed on the first row of 3 labels, and the fourth
address would be on the left label in the second row.
.skip.test page 6.indent -3
D##Detach bottom line and zip from address (Y or N)?
.skip
The bottom line of the address, which usually contains the city and
state names, can be separated from the rest of the address by an extra
blank line, and the zip code at the right end of the bottom line can
be shifted a few extra spaces to the right.  In order to be recognized,
the zip code must consist either of 5 digits or of 5 digits followed
immediately by a minus sign and 4 digits.
.skip.test page 3
The user should type either of the following letters.
.lm+3.skip.test page 3.i-3
Y##to separate the bottom line from the rest of the address by an extra
blank line and to shift the zip code slightly to the right.
.skip.test page 3.i-3
N##to have the bottom line be contiguous with the rest of the address
and to have the zip code be just to the right of the state.
.lm-3
.skip.test page 6.indent -3
E##Each address is to be printed on how many labels?
.skip.test page 3
The user should type the number of labels onto which each address is
to be printed.  If each address is to be printed onto 2 labels, then
the number 2 would typed here.  The duplicate copies of the addresses
are printed on adjacent labels.  To print 1 complete set of labels
to be followed by a second complete set, either the input file should
be processed twice, or this program should be run twice.
.skip.test page 6.indent -3
G##Width of gutters between labels (columns)?
.skip.test page 3
The user should type the number of columns of characters which are
to be kept blank between adjacent labels to allow for horizontal
misalignment of the paper stock in the terminal or printer.  The user
would type 4 here if 2 columns are to be kept blank at the right edge
of each label and 2 more columns to be kept blank at the left edge
of the adjacent label.  The label width specified elsewhere in inches
must include the width of these blank columns.
.skip.test page 6.indent -3
H##Height of labels in inches?
.skip.test page 3
The user should type the distance between the tops of successive labels.
The user should type 1.25 if the labels are 1 and 1/4 inches high.
.skip.test page 6.indent -3
I##Include initial code line (Y or N)?
.skip.test page 3
The code specified in the address file by a line starting with an @K
character pair can be typed on a separate line above the rest of the
address.  This code can be included on the labels only if the input
file specifies the components of the addresses.  Inclusion of this
code on the label is independent of the marking of an asterisk at the
upper right corner of addresses having particular codes.
.skip.test page 3
The user should type either of the following letters.
.skip.lm+3.i-3.test page 2
Y##to include the code on the top line of each label.
.skip.test page 2.i-3
N##to exclude the code.
.lm-3
.skip.test page 6.indent -3
L##6 or 8 lines per inch?
.skip.test page 3
The line spacing is used to calculate the maximum number of lines in
a single address.  The operator must adjust the terminal or printer
to obtain this line spacing.  This program does not insert escape or
control character sequences into the output file to set the terminal
or printer to the desired line spacing automatically.
.skip.test page 3
The user should type either of the following numbers.
.skip.lm+3.i-3.test page 2
6##if the terminal or the printer is adjusted for 6 lines per inch.
.skip.test page 2.i-3
8##if the terminal or the  printer is adjusted for 8 lines per inch.
.lm-3
.skip.test page 6.indent -3
M##Maximum number of rows of labels?
.skip.test page 3
The user should type the maximum number of rows of labels which can
appear in a single output file.  A new output file will be begun after
this many rows have been written to the current output file.  The
maximum number of rows of labels includes the rows of alignment boxes
which are generated at the start of each output file.  If each file
starts with 10 rows of boxes, and if there are 3 parallel columns of
labels, then selecting 1000 rows here would allow up to 3*(1000-10)
or 2970 labels actually bearing addresses in each file.
.skip.test page 6.indent -3
O##Offset left label to right how many spaces?
.skip.test page 3
The user should type the number of extra spaces which are to be inserted
to the left of the addresses in the leftmost column of labels.  Unlike
the spaces in the gutter between adjacent labels, the spaces inserted
to the left of the addresses in the leftmost column of labels should
not be included in the width of the labels stated in inches elsewhere.
This offset shifts all of the addresses on each row of labels to the
right.  The offset does not change the placement of the addresses
relative to one another.
.skip.test page 6.indent -3
P##Pitch?
.skip.test page 3
The pitch or characters per inch is used to calculate the number of
characters which can appear across the width of each label.  The
operator must adjust the terminal or printer to obtain this character
spacing.  This program does not insert escape or control character
sequences into the output file to set the terminal or printer to the
desired character spacing automatically.
.skip.test page 3
The user should type either of the following numbers.
.lm+3.skip.test page 2.i-3
10#if 10 characters are being typed per inch (Pica spacing).
.skip.test page 3.i-3
12#if 12 characters are being typed per inch (Elite spacing).
.lm-3
.skip.test page 6.indent -3
S##Separate CAMPUS MAIL, ZIP and neither (Y or N)?
.skip.test page 3
On the system for which these programs were originally developed,
foreign and campus mail addresses often had derelict United States
zip codes.  The addresses which were sorted by United States zip codes
could be separated into the correct groups only by making 3 passes
through the input file.  This option is probably useless elsewhere.
.skip.test page 3
The user should type either of the following letters.
.lm+3.skip.test page 3.i-3
Y##to scan the input file 3 times, producing first the labels which
have CAMPUS MAIL on the last line, then the labels which have neither
CAMPUS MAIL nor a zip code on the last line, and finally the labels
which have a zip code on the last line.
.skip.test page 3.i-3
N##to produce the labels exactly in the order in which these are
specified in the input file.
.lm-3
.skip.test page 6.indent -3
T##Convert multiple spaces to tab characters (Y or N)?
.SKIP.TEST PAGE 3
This program can convert multiple spaces to tab characters to save
transmission time to the terminal or printer and/or to save disk space
if the labels are being written to an output file.  The tab character
is a non-printing character which causes the next printing character
to appear to the right of the next integral multiple of 8 column
positions.
.skip.test page 3
The user should type either of the following letters.
.skip.lm+3.i-3.test page 2
Y##if multiple spaces are to be converted to tab characters.
.skip.test page 2.i-3
N##if multiple spaces are not to be converted to tab characters.  This
should be used if either the operating system or the output device
does not support the tab character.
.lm-3
.skip.test page 6.indent -3
U##Convert lower case to upper case (Y or N)?
.skip.test page 3
Whether labels are more legible when the alphabetic letters A through
Z are typed in the mixture of upper and lower cases specified in the
address file or when all alphabetic letters have been converted entirely
to upper case will depend upon the terminal or printer used.
.skip.test page 3
The user should type either of the following letters.
.lm+3.skip.test page 3.i-3
Y##to convert all lower case alphabetic letters in the addresses to
upper case (capitals).
.skip.test page 3.i-3
N##to keep all alphabetic letters in their original cases.
.lm-3
.skip.test page 6.indent -3
W##Width of labels in inches including gutters?
.skip.test page 3
The user should type the distance in inches between the left edges
of adjacent parallel columns of labels.  This distance must include
the columns which are in the blank gutter between the labels.  This
distance must not include the columns by which the labels at the left
are offset from the left edge of the paper.  The user should type 3.5
if the labels are 3 and 1/2 inches wide.
.lm0
.LEFT MARGIN 0.SKIP.TEST PAGE 3
After the user has verified that the description of the labels is
correct, the program will ask whether the addresses are to be written
into an output file which will be printed later onto the labels.  If
the user responds by typing "NO", then the addresses are instead typed
directly onto the controlling terminal.  Later, just before the first
address is typed onto the terminal, the user can interactively request
one by one as many label outlines as are necessary to align the labels
in the terminal.
.skip.test page 3
If the labels are being typed onto the controlling terminal, then the
user will be asked whether a blank line appeared after the last answer
typed by the user.  The particular FORTRAN operating system being used
determines whether a blank line appears between a line typed by the
user and the next line displayed by a program.  The user will usually
not have any control over which operating system is used.  The answer
to this question is used to keep track of the number of lines typed
onto the terminal while the labels which are mounted on fanfold paper
are being aligned in the terminal.  After each row of labels is
finished, the program generates enough blank lines before the next
row is typed so as to realign the paper with the top of the next
address.  The correct calculation of the number of lines displayed
on the terminal is necessary if the addresses are to be aligned the
same as the target patterns, and also if the addresses in a subsequent
file are to be aligned the same as the addresses in the first file.
.skip.test page 3
The program will ask whether a list of words will be supplied which
can be abbreviated or deleted in lines which are too long to fit onto
the labels.  If such a list is to be supplied, then the program will
ask the user to specify the name of the file which specifies the list.
A list of the deletions and substitutions which are specified by the
file will be displayed to the user.
.skip.test page 3
After the user has specified the name of the address file, the user
will be asked to type a word or phrase which is found first on any
of the lines of the first address which is to be copied onto a label.
Addresses which appear before the first appearance of this word or
phrase will be discarded.  If there are several addresses which contain
the word or phrase, then the first of these will be selected.  If a
single word is typed, then it must be longer than a single character.
All punctuation marks which appear between the words of a phrase must
be included.  The cases of the alphabetic letters A through Z are
ignored.  Only the RETURN key should be pressed to start with the first
address.
.skip.test page 3
If the addresses are being typed onto the controlling terminal, then,
instead of typing a word or a phrase which appears in the first address,
the user can type just a single printing character before pressing
the RETURN key to obtain a single row of target labels.  The user can
repeatedly type a single character to request such target labels until
the paper is properly aligned in the terminal.  Once the paper has
been properly aligned, the user can either press the RETURN key an
extra time to start with the first address, or can type a word or a
phrase which appears in a later address to skip over the earlier
addresses.
.LEFT MARGIN 0.skip 3.test page 6
.PAGE
.rtt'Instructions for Using the SPLICE Program',,'>'
.c;INSTRUCTIONS FOR USING THE SPLICE PROGRAM
.c;------------ --- ----- --- ------ -------
.skip
The SPLICE program writes addresses into an output file which can be
processed later by an independent word processing program to insert
these addresses into form letters.  Extra lines are inserted before
and after each address to serve as instructions for the word processing
program named FROFF.  The statements in the SPLICE program which
generate these extra lines can be changed easily to generate whatever
instructions are required by some other word processing program.  FROFF
emulates the RUNOFF word processing program, but FROFF provides many
more features.  FROFF is a FORTRAN program written by the same author
as the programs in this package.
.SKIP
A typical dialog between the user and the SPLICE program is shown below.
The phrases which end in question marks are the requests displayed
by the program.  The characters to the right of the question marks
were typed by the user in response to these requests.
.SKIP.NOFILL.TEST PAGE 3
SPLICE (05/83)

Business, Personal or No salutations (B, P or N)? B
Default title if salutation is missing? Dr.
Include lines to be merged into body of letter (Y or N)? Y
Input address file? ADDRS1
Word or phrase unique to first address? JIM SMITH
Output splice file? SPLICE
   Number of addresses read:   108
 Number of addresses copied:    57
Number of added Salutations:     4
Process additional addresses (Y or N)? Y
Input address file? ADDRS2
Word or phrase unique to first address? JANE DOE
Continuing output file
   Number of addresses read:     9
 Number of addresses copied:   ALL
Number of added Salutations:     1
 Number of addresses copied:    66 (total)
Process additional addresses (Y or N)? N
   Number of addresses read:   117
 Number of addresses copied:    66
Number of added Salutations:     5

EXIT
.FILL
.skip
The items which the user must type are described below in the order
in which these items are requested.  The user will not always be asked
to specify every item.  Which items are requested will depend upon
what responses the user has already made.
.list
.list element
Whether the addresses are to include business or personal salutations
or are not to include salutations at all.  This determines whether
a colon or a comma is to be attached to the right end of each
salutation.  If the input file specifies the previously formatted
addresses separated by lines which start with periods, and if the bottom
line in an address is a salutation, i.e_.  it starts with the word
"Dear" and ends with either a comma or a colon, then the terminal comma
or colon is removed and replaced by the punctuation mark selected by
the answer to this question.
.skip.test page 3
If the input file does not specify a salutation for a particular
address, then the answer to this question also specifies whether the
person's first name or last name is to be used in the salutation.  If
the input file contains previously formatted addresses separated by
lines which start with periods, then the name from which the salutation
is constructed must be obtained from the contents of the first line
of the address.  Salutations which are constructed in this manner should
be carefully verified by the user.
.skip.test page 3
The user should respond by typing one of the following letters.
.skip.lm+3.i-3.test page 3
B##(for Business) to place a colon at the right end of each salutation.
A salutation will be constructed using the person's last name in each
address for which a salutation is not defined by the input file.
.skip.i-3.test page 3
P##(for Personal) to place a comma at the right end of each salutation.
A salutation will be constructed using the person's first name in each
address for which a salutation is not defined by the input file.
.skip.i-3.test page 2
N##(for No) if no salutations are to be copied into the output file.
Salutations will not be copied even if salutations are defined by the
input file.  Salutations will not be constructed in those addresses
for which salutations are not defined by the input file.
.lm-3
.list element
If business salutations are selected, then the user will be asked to
specify a title such as Professor or Doctor or Dr. which is to be used
in constructing the salutation for each address which does not already
end with a salutation.  Such a salutation would be constructed from
the information in the first line of the address.  If the input file
contains previously formatted addresses separated by lines which start
with periods, and if the first line of an address starts with an
abbreviation such as Ms. or Mr. which ends with a period, then this
abbreviation will be used in constructing a salutation for that address
instead of the title which you specify here.  If the input file
specifies the components of the addresses on lines which start with
at signs, and if the name prefix for a particular address is specified
by a line which starts with an @P character pair, then this name prefix
will be used in constructing a salutation for that address instead
of the title which you specify here.
.skip
The user should merely press the RETURN key if all of the addresses
already contain salutations or if a default title is not to be included
in salutations which are constructed by this program.
.list element
Whether lines which start with an @X character pair in an input file
which specifies the components of the addresses are to be copied into
the output file after the _.END#LITERAL.END#SPLICE commands so that
the contents of these lines can be merged into the body of the letter.
.skip
The user should respond by typing either of the following letters.
.skip.LEFT MARGIN +3.INDENT -3.test page 3
Y##if lines starting with an @X character pair are to be copied into
the output file after the .END SPLICE command.
.skip.test page 3.INDENT -3
N##if lines starting with an @X character pair are not to be copied
into the output file.
.skip.test page 3
.LEFT MARGIN -3
The answer to this question is used only if the input file specifies
the components of the addresses.  This question must still be answered,
but the answer is ignored, if the input file specifies previously
formatted addresses separated by lines which start with periods.
If lines which start with an @X character pair are to be copied into
the output file, then each address should have the same number of lines
which start with this character pair, and, if there is more than one
input file, then all of the input files should specify the components
of the addresses.
.list element
The name of the address file which is to be read by this program.  The
address file either specifies the components of the addresses or
contains the previously formatted addresses.  If the address file
specifies the components, then each line should start with an at sign
character pair.  If the address file contains the previously formatted
addresses, then these are separated by lines starting with periods.
If the address file contains the previously formatted addresses, then
blank lines within each address are retained, but blank lines at the
start or end of each address are discarded.
.list element
A word or phrase which is found first in the first address which is
to be copied into the output file.  Addresses which appear before the
first appearance of this word or phrase will be discarded.  If a single
word is typed, then it must be longer than a single character.  All
punctuation marks which appear between the words of a phrase must be
included.  The cases of the alphabetic letters A through Z are ignored.
.skip.test page 3
If the input address file specifies the components of the addresses,
then the word or phrase, in order to be matched, must appear on one of the
lines of the address, but not in the salutation nor in an extra line
after the salutation which is to be merged into the body of the letter.
.skip.test page 3
Only the RETURN key should be pressed to start with the first address.
.list element
The name of the file into which the addresses are to be copied.  A
_.LITERAL command will be inserted before each address which is copied
into this file, and the pair of commands _.END LITERAL_.END SPLICE
will be inserted after each address.
.end list
.skip 3.test page 6.left margin 0
.PAGE
.rtt'Instructions for Using the MRGADR Program',,'>'
.center;INSTRUCTIONS FOR USING THE MRGADR PRORAM
.CENTER;------------ --- ----- --- ------ ------
.SKIP.test page 3
The MRGADR program can merge up to 5 files each of which specify the
components of a group of addresses and each of which are already sorted
in increasing zip code order.  The zip codes can consist either of
5 digits or of the 5 most significant digits followed by a minus sign
and then by 4 less significant digits.  The MRGADR program cannot
process files which contain the previously formatted addresses rather
than the components of the addresses.
.skip.test page 3
The program reads the first address contained in each of the input
files, determines the address having the lowest zip code among these
several addresses, writes out the address having the lowest zip code,
and reads in the next address from the file from which the address
having the lowest zip code code was originally read.  The address having
the lowest zip code among the new group of addresses is then determined,
and so on until the ends of all of the input files have been reached.
.skip.test page 3
Addresses which were read from a particular file will be copied in
their original order relative to the other addresses from the same
file, but these addresses may be interspersed with addresses which
were read from the other input files.  If some of the addresses do
not include zip codes, then these addresses should appear at the start
of the input files.  If more than one input file starts with addresses
which do not include zip codes, or, for that matter, if more than one
input file contains addresses which include a particular zip code,
then these addresses are copied into the output file in any order which
is convenient for the program.  If the order of addresses which do
not include zip codes must be maintained, then these addresses must
appear in only one of the input files.
.skip.test page 3
A typical dialog between the user and the MRGADR program is shown below.
The program only asks for file names, and nothing else.  The phrases
which end in question marks are the requests displayed by the program.
The characters to the right of the question marks are the file names
which were typed by the user in response to these requests.  The MRGADR
program does not have any built in help messages.
.skip.test page 12.nofill
MRGADR (05/83)

Merges up to  5 address files previously sorted by zip code
New composite file? MERGED
Original file (press RETURN again if no more)? FIRST
Original file (press RETURN again if no more)? SECOND
Original file (press RETURN again if no more)? THIRD
Original file (press RETURN again if no more)? FOURTH
Original file (press RETURN again if no more)?
Total number of addresses copied:     113

EXIT
.skip.fill.test page 3
If the user wants to merge less than 5 address files, then only the
RETURN key should be pressed in response to the request for the name
of the next file.
.skip 3.test page 6
.page
.rtt'Arrays and Variables Used by These Programs',,'>'
.c;ARRAYS AND VARIABLES USED BY THESE PROGRAMS
.c;------ --- --------- ---- -- ----- --------
.skip.test page 3
The programs in this package use the same names for the arrays and
variables which perform identical functions.
.skip.test page 3
The arrays which are used to store the components of the address and
the dimensions of these arrays are described below.  These arrays are
used only if the components of the addresses are read from a file in
which each line starts with an at sign.  The arrays are not used if
the addresses are read from a file in which the previously formatted
addresses are separated by lines starting with periods.
.LM9
.skip.test page 3.indent-9
LTRKND#=#Array containing the characters which identify the various
types of components of the address.  Both LTRKND and ISTART are
dimensioned at LMTKND.  Currently, LTRKND contains the letters of the
alphabet, and LMTKND is 26, so there can be 26 different types of
components, each identified by a different letter of the alphabet.
The number sign (the _# character) and the at sign itself as a second
character on the line are tested for explicitly and are not specified
within the LTRKND array.  If one or more lines in the input array start
with an @C character pair, then ISTART(3) contains the subscript of
the location within the LOCATN array which in turn contains the
subscript of the location in the LTRSTR array which contains the first
character of the first component specified by these lines.
.skip.test page 3.indent-9
ISTART#=#Array containing the subscripts of the locations in the LOCATN
array which in turn contain the subscripts of the locations in the
LTRSTR which contain the first characters of the first components of
each type.
.skip.test page 3.indent-9
LMTKND#=#Dimension of the LTRKND and ISTART arrays.  This is the number
of different kinds of components of the address.  LMTKND does not place
a limit on the number of components of a single type however.
.skip.test page 3.indent-9
LOCATN#=#Array containing the subscripts of the locations within the
LTRSTR array which contain the first characters of each component of
the address.  The ICHAIN, LOCATN and LENGTH arrays are dimensioned
at LMTSEC.  If there is only 1 component of a particular type, then
the parallel location in the ICHAIN array is zero.  If there are several
components of a particular type, then the parallel locations in the
ICHAIN array contain the subscripts of the ICHAIN, LOCATN and LENGTH
array locations which describe the next component of the same type.
The ICHAIN entry for the final component of a particular type is always
zero.
.skip.test page 3.indent-9
ICHAIN#=#Array containing the subscripts of the locations within the
ICHAIN, LOCATN and LENGTH arrays which describe the next component
of a particular type.  The ICHAIN entry for the final component of
a particular type is always zero.
.skip.test page 3.indent-9
LENGTH#=#Array containing the number of characters in each component.
.skip.test page 3.indent-9
LMTSEC#=#Dimension of the ICHAIN, LOCATN and LENGTH arrays.  LMTSEC
is the maximum number of components of all types in a single address,
counting separately every appearance of components of the same type.
.skip.test page 3.indent-9
LTRSTR#=#Array which stores the letters of the components of the address
in the order in which these are defined in the input file.  LTRSTR
is dimensioned at LMTSTR.
.skip.test page 3.indent-9
LMTSTR#=#Dimension of the LTRSTR array.  LMTSTR is the maximum number
of characters which can appear in a single address.
.skip.test page 3.indent-9
LTRBFR#=#Array into which each line in the input file is read.  LTRBFR
is dimensioned to LMTBFR which is therefore 2 more than the maximum
number of characters in a single component of the address since the
first 2 letters in each line in the input file identify the type of
component being defined.  LMTONE is the maximum length of a single
component in the output file.  LMTTWO is the maximum length of a line
in the reconstructed address if this line is constructed of more than
just a single component.  If the next component which is to be appended
to the line would cause the line to be longer than LMTTWO characters,
then the line is split before this next component.  Either the component
already in the line or the component about to be added could be of
length LMTONE.  LMTONE is therefore an absolute upper limit, but LMTTWO
is merely a suggested length.  LMTTWO must be less than or equal to
LMTONE.  LMTONE would probably equal LMTBFR-2.  Neither LMTONE nor
LMTTWO are used as dimensions of any array.
.skip.test page 3.indent-9
LMTBFR#=#Dimension of the LTRBFR array.  This is the maximum number
of characters including the initial at sign and the following character
in a single line in the file which defines the components of the
address.
.SKIP.LM0.test page 9
For example, if the input file contained the following specifications
of the components of an address,
.SKIP.NOFILL
@CFIRST
@ASECOND
@BTHIRD
@BFOURTH
@CFIFTH
@BSIXTH
.SKIP.FILL
then this information would be stored as is shown below.  Subscript
1 is at the bottom in the diagram, subscript 2 immediately above, and
so on.
.SKIP.NOFILL.test page 18
ISTART   ICHAIN  LENGTH  LOCATN
array    array   array   array

          +-> 0       5  28 >------------------------+
          !                                          !
          !   0 <---+ 5  23 >-------------------+    !
          !         !                           !    !
          +-< 6 <-+ ! 6  17 >-------------+     !    !
                  ! !                     !     !    !
+-< 1     /-> 4 >-+ ! 5  12 >--------+    !     !    !
!        /          !                !    !     !    !
!   3 >-/ /-> 0     ! 6   6 >--+     !    !     !    !
!        /          !          !     !    !     !    !
!   2 >-/ /-> 5 >---+ 5   1    !     !    !     !    !
!        /                !    !     !    !     !    !
+-------/                 FIRSTSECONDTHIRDFOURTHFIFTHSIXTH

                          LTRSTR array
.skip.test page 3
.fill
The arrays which are needed for the assembly process and their
dimensions are described below.  The components stored in the LTRSTR
array are copied into the LTRADR array and the lengths of the resulting
lines are stored in the LNGLIN array.  The KONTNT and ITRAIL arrays
specify which types of components go into which lines and with what
separating characters.
.SKIP.TEST PAGE 3
If the input file specifies the components of the address, then neither
the salutation nor the blank line before the salutation are stored
in the LTRSTR AND LNGLIN arrays.  The salutation and the blank line
before the salutation must however be stored in these arrays if the
input file contains the previously formatted addresses separated by
lines which start with periods.
.skip.test page 3.left margin 9
.indent-9
LTRADR#=#The array which contains the characters of the formatted
address.  This is dimensioned at LMTCHR.
.skip.test page 3.indent-9
LMTCHR#=#The maximum number of characters which can be in a formatted
address.
.skip.test page 3.indent -9
LNGLIN#=#The array which contains the lengths of each of the lines
in the formatted address.  This is dimensioned at LMTLIN.
.skip.test page 3.indent-9
LMTLIN#=#The maximum number of lines in the formatted address.  This
does not include the salutation or the blank line before the salutation
if the address is reassembled from its components.
.skip.test page 3.indent-9
LMTONE#=#The maximum allowable length of a line consisting of a single
component in the reassembled address.  Any characters in excess of
this are discarded.
.skip.test page 3.indent-9
LMTTWO#=#The desired maximum width of a line in the reassembled address.
The next component of the current line of the address is reserved for
the next output line if addition of the next component to the line
would cause the line to contain more than LMTTWO characters.  LMTTWO
must be less than or equal to LMTONE.
.skip.test page 3.indent-9
KONTNT#=#The array which defines which components of the address are
to appear on each line in the reassembled address.  The values in the
KONTNT array are the locations in the alphabet of the letters which
identified the components in the original file which was read as data.
The final component on each line is indicated by an extra zero value.
The values in the ITRAIL array are parallel.
.skip.test page 3.indent-9
ITRAIL#=#Indicates what characters are to be inserted before the item
indicated by the parallel entry in the KONTNT array if this item is
not the first on the current line of the address.  No character is
inserted before the component if the component is the first on the
line either because it is the first component specified for the line
by the KONTNT array or because it would have caused the line of which
it would normally have been a part to have been too long.  The value
in this array is ignored if the parallel value in the KONTNT array
is zero.
.skip.test page 2.INDENT-2
=#0, Insert a single space between adjacent items on the same line.
.skip.test page 2.INDENT-2
=#1, Insert a comma and a space between adjacent items on the same
line.
.skip.test page 2.INDENT-2
=#2, Insert 2 spaces between adjacent items on the same line.
.left margin 0
.skip 3.test page 6.left margin 0
.page
.rtt'List of Files Forming This Package',,'>'
.center;LIST OF FILES FORMING THIS PACKAGE
.center;---- -- ----- ------- ---- -------
.skip.test page 3
The routines which manipulate file names and which open and close files
are dependent upon the particular computer system being used.  These
routines have been collected together in a single file.  A version
of these routines is supplied for use with the TOPS10 emulator on the
DECsystem20 computer.  The argument lists and functions of these
routines are described within the routines themselves.  These routines
should be relatively easy to modify for use on other computer systems.
.left margin 12
.skip.i-12.test page 3
ENVELO.CMD##Command file used to load the ENVELO program on the
DECsystem10 or DECsystem20 computers.
.skip.i-12.test page 3
ENVELO.FOR##The source of the ENVELO program.  This file must be loaded
with the LBLLIB, LBLD10 and MACRO (or MACD20) packages.
.skip.i-12.test page 3
ENVHLP.RNO##Rough text used to construct the help messages for the
ENVELO program.  This file must be processed by the FORMAT program
to produce the FORTRAN source of the ENVHLP routine.  FORMAT is a
FORTRAN program which was written by the same author as the programs
in this package and which is available from the DECUS DECsystem10
program library.  If this file is modified so as to change the number
of lines in any message which is issued after the addresses start to
be typed on the terminal, then the amount by which the KNTOUT variable
is incremented after the message must be changed accordingly in the
ENVELO main program.
.skip.i-12.test page 3
LABELS.CMD##Command file used to load the LABELS program on the
DECsystem10 or DECsystem20 computers.
.skip.i-12.test page 3
LABELS.FOR##The source of the LABELS program.  This file must be loaded
with the LBLLIB, LBLD10 and MACRO (or MACD20) packages.
.skip.i-12.test page 3
LBLD10.FOR##The computer dependent subroutines which are needed by
the ENVELO, LABELS, MRGADR and SPLICE programs.  The routines in this
package evaluate file names typed by the user, open and close files,
and convert contiguous spaces to tab characters.  These routines are
dependent upon the hardware, operating system and run-time library
of the computer being used.  This version is for the DECsystem10
computer or for use with the TOPS10 emulator on the DECsystem20
computer.  These routines should be easily modified for use on other
computers.
.skip.i-12.test page 3
LBLHLP.RNO##Rough text used to construct the help messages for the
LABELS program.  This file must be processed by the FORMAT program
to produce the FORTRAN source of the LBLHLP routine.  If this file
is modified so as to change the number of lines in any message which
is issued after the addresses start to be typed on the terminal, then
the amount by which the KNTOUT variable is incremented after the message
must be changed accordingly in the LABELS main program.
.skip.i-12.test page 3
LBLLIB.FOR##The computer independent subroutines which are needed by
the ENVELO, LABELS and SPLICE programs.  The routines in this package
evaluate the commands typed by the user, read the file specifying the
components of the addresses and construct the addresses from their
components.
.skip.i-12.test page 3
MACRO.FOR###A non-functional FORTRAN version of some useful but
non-essential routines.  If functional, these routines would set
terminal output characteristics and turn off the exit messages from
FORTRAN programs.
.skip.i-12.test page 3
MACD20.MAC##An assembly language version of the routines which set
terminal output characteristics and turn off the exit messages from
FORTRAN programs.  This version is for the DECsystem20.  The file named
MACRO.FOR contains a non-functional FORTRAN version of these routines.
.skip.i-12.test page 3
MAIL.DOC####The instruction manual for the programs in this package.
This was produced by processing the rough text in the MAIL.RNO file
using the FROFF word processing program.  FROFF is a FORTRAN program
which was written by the same author as the programs in this package.
.skip.i-12.test page 3
MAIL.RNO####Rough text which produces the instruction manual for the
programs in this package when processed by the FROFF word processing
program.  Minor changes would be necessary if this file is to be
processed by RUNOFF.
.skip.i-12.test page 3
MRGADR.CMD##Command file used to load the MRGADR program on the
DECsystem10 or DECsystem20 computers.
.skip.i-12.test page 3
MRGADR.FOR##The source of the MRGADR program.  This file must be loaded
with the LBLD10 package.
.skip.i-12.test page 3
SPLICE.CMD##Command file used to load the SPLICE program on the
DECsystem10 or DECsystem20 computers.
.skip.i-12.test page 3
SPLICE.FOR##The source of the SPLICE program.  This file must be loaded
with the LBLLIB, LBLD10 and MACRO (or MACD20) packages.
.skip.i-12.test page 3
SPLHLP.RNO##Rough text used to construct the help messages for the
SPLICE program.  This file must be processed by the FORMAT program
to produce the FORTRAN source of the SPLHLP routine.
.skip.i-12.test page 3
TEST01.ADR##Short address file which contains previously formatted
addresses separated by lines which start with periods.
.skip.i-12.test page 3
TEST02.ADR##Short address file which specifies the components of the
addresses on lines which start with at sign character pairs.
.left margin 0