Trailing-Edge
-
PDP-10 Archives
-
decuslib20-07
-
decus/20-0169/envelo.for
There is 1 other file named envelo.for in the archive.  Click here to see a list.
C     RENBR(ENVELO/TYPE ADDRESSES ONTO ENVELOPES)
    C
  C     Donald Barth, Yale School of Management
   C
  C     This program types  addresses  onto  either  separate
    C     envelopes  or envelopes mounted on continuous fanfold
    C     forms.
 C
  C     These addresses either are defined by a file in which
    C     the  various  components of the address appear to the
    C     right of at signs and a letter identifying  the  type
    C     of  component,  or  are  defined  by an input file in
    C     which  1  or  more  lines  starting  with  a   period
    C     separates the already formatted addresses.
C
  C     DESCRIPTION OF DOT FORMAT INTPUT FILE
C     ----------- -- --- ------ ------ ----
C
  C     If the addresses are defined by a  dot  format  file,
    C     then  at least one line starting with a period in its
    C     leftmost column must appear  between  the  addresses.
    C     The  lines  which  start  with  periods are otherwise
    C     ignored.  One or more lines starting  with  a  period
    C     can  appear  before  the  first address and after the
    C     last address, but are not necessary.
 C
  C     If the final line of an address starts with the  word
    C     Dear  and  ends with a colon or comma, then this line
    C     is assumed to contain a salutation line  and  is  not
    C     printed on the envelope.
   C
  C     DESCRIPTION OF AT SIGN FORMAT INTPUT FILE
 C     ----------- -- -- ---- ------ ------ ----
 C
  C     Each line in an at sign format input file  defines  a
    C     single   component   of  an  address.   The  first  2
    C     characters  of  each  line  identify  the   type   of
    C     component  and  are  not copied into the output file.
    C     Those portions of the address which  require  a  full
    C     line, for example department name, organization name,
    C     and street address,  can  be  continued  on  as  many
    C     subsequent  lines  as necessary, and are then written
    C     out in the same order in which they were  encountered
    C     in  the  input  file.   The various components of the
    C     address can, however, be specified in any order.  The
    C     following at sign character pairs are recognized.
   C
  C     @#  Start of new address.  Rest of line is ignored.
 C     @@  End of file.  Rest of file is ignored.
C     @A  Street address.  Several can appear.
  C     @C  City name.
   C     @D  Department.  Several can appear.
 C     @E  Name suffix (Jr., III, etc.).
    C     @F  First name.
  C     @G  Name for salutation. Do not include Dear or colon.
   C     @I  Identification number. Any spacing. Not used.
   C     @K  Top line key or code.
  C     @L  Last name.
   C     @M  Middle name.  Include period if initial.
   C     @N  Country.  Don't include if local country.
  C     @O  Organization name.  Several can appear.
    C     @P  Name prefix (Mr., Ms., etc.).
    C     @S  State (any form, 2 letters, 4, full, etc.).
C     @T  Title.  Several can appear.
 C     @Y  Any line at bottom of address.  (@YCAMPUS MAIL).
C     @Z  Zip code (any form, 5 digits, 9, etc.).
    C
  C     SAMPLES OF THE 2 TYPES OF INPUT FILES
C     ------- -- --- - ----- -- ----- -----
C
  C     The  at  sign  and dot  format  files shown below are
    C     equivalent.
 C
  C     @I  608
C     @PMr.
  C     @FJohn
 C     @MB.
   C     @LSmith
C     @EJr.
  C     @TDirector
  C     @DCareer Counseling Office
 C     @OCentral College
C     @CRockport
  C     @SCT
   C     @Z06352
C     @GMr. Smith
 C     @#
C     @GLinda
C     @Z51222
C     @STN
   C     @CVictorville
    C     @A6721 Main Street
    C     @OVillage University
  C     @OCollege of Science
  C     @DDepartment of Chemistry
  C     @LJones
C     @MF.
   C     @FLinda
C     @PMs.
  C     @I       611
C     @@
C
  C
  C     .LITERAL
    C     Mr. John B. Smith, Jr.
C     Director
    C     Career Counseling Office
   C     Central College
  C     Rockport, CT  06352
   C
  C     Dear Mr. Smith:
  C     .END LITERAL.END SPLICE
    C     .LITERAL
    C     Ms. Linda F. Jones
    C     Department of Chemistry
    C     Village University
    C     College of Science
    C     6721 Main Street
 C     Victorville, TN  51222
C
  C     Dear Linda:
 C     .END LITERAL.END SPLICE
    C
  C
  C     ARRAYS USED TO STORE THE DIGITS AND LETTERS A-Z
      DIMENSION LTRDGT(10),LTRABC(26),LWRABC(26)
C
  C     ARRAYS USED TO STORE WORD DEAR FOR FINDING SALUTATION
    C     LTRDEA(LMTDEA),LWRDEA(LMTDEA)
   C
        DIMENSION LTRDEA(5),LWRDEA(5)
   C
  C     ARRAY USED TO STORE LINE READ FROM ADDRESS FILE
C     LTRBFR(LMTBFR)
   C
        DIMENSION LTRBFR(72)
  C
  C     ARRAY USED TO STORE LINE TO BE WRITTEN TO ENVELOPE
  C     LTROUT(LMTOUT)
   C
        DIMENSION LTROUT(300)
 C
  C     ARRAYS USED FOR UNASSEMBLED ADDRESS READ IN AT FORM
 C     ISTART(LMTKND),ICHAIN(LMTSEC),LENGTH(LMTSEC),
  C     LOCATN(LMTSEC),LTRSTR(LMTSTR),LTRKND(LMTKND)
   C
        DIMENSION ISTART(26),ICHAIN(30),LENGTH(30),
         1LOCATN(30),LTRSTR(2000),LTRKND(26)
   C
  C     ARRAYS USED TO STORE WORD TO BE SEARCHED FOR
   C     LTRNXT(LMTNXT),LWRNXT(LMTNXT)
   C
        DIMENSION LTRNXT(40),LWRNXT(40)
 C
  C     ARRAYS USED TO STORE THE ASSEMBLED ADDRESS
C     LTRADR(LMTCHR),LNGLIN(LMTLIN)
   C
        DIMENSION LTRADR(1500),LNGLIN(12)
    C
  C     ARRAYS USED TO STORE THE RETURN ADDRESS
   C     LTRRTN(LMTRTN),LNGRTL(LMTRTL)
   C
        DIMENSION LTRRTN(300),LNGRTL(10)
C
        DATA LTRSPA,LTRDOT,LTRCOM,LTRCOL,LTRATS,LTRSTA,
     1LTRQUE/
     21H ,1H.,1H,,1H:,1H@,1H*,1H?/
          DATA LTRDGT /1H0,1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9/
          DATA LTRABC /1HA,1HB,1HC,1HD,1HE,1HF,1HG,1HH,1HI,1HJ,
         1 1HK,1HL,1HM,1HN,1HO,1HP,1HQ,1HR,1HS,1HT,1HU,1HV,1HW,
         2 1HX,1HY,1HZ/
          DATA LWRABC /1Ha,1Hb,1Hc,1Hd,1He,1Hf,1Hg,1Hh,1Hi,1Hj,
         1 1Hk,1Hl,1Hm,1Hn,1Ho,1Hp,1Hq,1Hr,1Hs,1Ht,1Hu,1Hv,1Hw,
         2 1Hx,1Hy,1Hz/
          DATA LTRKND /1HA,1HB,1HC,1HD,1HE,1HF,1HG,1HH,1HI,1HJ,
         1 1HK,1HL,1HM,1HN,1HO,1HP,1HQ,1HR,1HS,1HT,1HU,1HV,1HW,
         2 1HX,1HY,1HZ/
          DATA LTRDEA/1HD,1HE,1HA,1HR,1H /
      DATA LWRDEA/1Hd,1He,1Ha,1Hr,1H /
C
  C     DIMENSION OF WORD TO BE IN FIRST ADDRESS
        DATA LMTNXT/40/
  C
  C     DIMENSION OF SINGLE LINE INPUT BUFFER
      DATA LMTBFR/72/
  C
  C     DIMENSION OF SINGLE LINE OUTPUT BUFFER
          DATA LMTOUT/300/
 C
  C     DIMENSION OF THE ADDRESS COMPONENT STORAGE
      DATA LMTKND,LMTSEC,LMTONE,LMTTWO,LMTSTR/
       126,30,70,50,2000/
C
  C     DIMENSION OF THE RETURN ADDRESS
       DATA LMTRTN,LMTRTL/300,10/
 C
  C     DIMENSION OF RECONSTRUCTED ADDRESS
         DATA LMTLIN,LMTCHR/12,1500/
C
  C     DIMENSION OF WORD DEAR USED TO LOCATE SALUTATIONS
         DATA LMTDEA/5/
   C
  C     DO NOT INCLUDE CODE LINE IN ADDRESS
        DATA IFCODE/0/
   C
  C     UNIT NUMBERS
      DATA IDISK,JDISK,ITTY,JTTY/1,20,5,5/
 C
  C     ********************************
C     *                              *
C     *  N   N  OOOOO  TTTTT  EEEEE  *
C     *  NN  N  O   O    T    E      *
C     *  N N N  O   O    T    EEEE   *
C     *  N  NN  O   O    T    E      *
C     *  N   N  OOOOO    T    EEEEE  *
C     *                              *
C     ********************************
C
  C     LTRTAB = THE  TAB  CHARACTER  WHICH  MOVES  THE  NEXT
    C              PRINTING  CHARACTER TO THE RIGHT OF THE NEXT
    C              INTEGRAL MULTIPLE OF  8  COLUMNS.   THE  TAB
    C              CHARACTER  CAN BE TYPED BY THE USER TO CAUSE
    C              THE RETYPING OF  THE  CURRENT  ADDRESS.   ON
    C              SYSTEMS WHICH DO NOT HAVE THE TAB CHARACTER,
    C              THE TESTS FOR THIS  CHARACTER  CAN  JUST  BE
    C              REMOVED, SINCE ANY SINGLE PRINTING CHARACTER
    C              CAN SIMILARLY BE TYPED BY THE USER TO  CAUSE
    C              THE  RETYPING  OF  THE CURRENT ADDRESS.  THE
    C              USE  OF  THE  PRINTING  CHARACTER,  HOWEVER,
    C              WASTES  THE ENVELOPE UPON WHICH IT IS TYPED.
    C              LTRTAB IS  DEFINED  IN  OCTAL,  RATHER  THAN
    C              HOLLERITH,  SINCE  THE  EDITOR USED TO WRITE
    C              THIS PROGRAM ITSELF CONVERTS A TAB CHARACTER
    C              TO THE CORRESPONDING NUMBER OF SPACES.
C     ISYSTM = NUMBER OF BLANK LINES WHICH APPEAR BETWEEN A
    C              LINE  TYPED  BY  THE  USER AND THE NEXT LINE
    C              DISPLAYED  BY  THIS  PROGRAM.    THIS   LINE
    C              SPACING  IS  DEPENDENT  UPON  THE  OPERATING
    C              SYSTEM  BEING  USED.   ISYSTM  IS  USED   TO
    C              CALCULATE  THE  NUMBER OF LINES TYPED ON THE
    C              TERMINAL DURING A DIALOG  BETWEEN  THE  USER
    C              AND  THE  PROGRAM.   THE  PROGRAM SHOULD RUN
    C              RELATIVELY WELL EVEN WITH THE WRONG VALUE OF
    C              ISYSTM,  BUT  THE  USER WOULD HAVE TO MAKE A
    C              MINOR ADJUSTMENT BETWEEN ALIGNING THE TARGET
    C              PATTERN  ON  ENVELOPES  WHICH ARE MOUNTED ON
    C              FANFOLD PAPER AND THE ACTUAL TYPING  OF  THE
    C              ADDRESSES.
   C            = 0, NO EXTRA BLANK  LINE  SEPARATES  AN  ITEM
    C              TYPED BY THE USER AND THE NEXT LINE TYPED BY
    C              THIS PROGRAM.  IF THE USER TYPES A CONTROL-Z
    C              OR   END-OF-OF  FILE,  THEN  THE  NEXT  LINE
    C              WRITTEN   BY   THE   PROGRAM   WILL   APPEAR
    C              IMMEDIATELY  TO  THE RIGHT OF THE UP-ARROW Z
    C              BY WHICH THE CONTROL-Z IS REPRESENTED ON THE
    C              TERMINAL.
    C            = 1, ONE EXTRA BLANK LINE  SEPARATES  AN  ITEM
    C              TYPED BY THE USER AND THE NEXT LINE TYPED BY
    C              THIS PROGRAM.  IF THE USER TYPES A CONTROL-Z
    C              OR   END-OF-OF  FILE,  THEN  THE  NEXT  LINE
    C              WRITTEN BY THE PROGRAM WILL  APPEAR  ON  THE
    C              NEXT  LINE  IMMEDIATELY BELOW THE UP-ARROW Z
    C              BY WHICH THE CONTROL-Z IS REPRESENTED
 C
        DATA LTRTAB/"045004020100/
       DATA ISYSTM/1/
   C
  C     ***********************************************
C     *                                             *
C     *  USER INTERACTION TO SET TYPE OF ENVELOPES  *
C     *                                             *
C     ***********************************************
C
  C     TELL USER WHAT PROGRAM THIS IS
        CALL ENVHLP(ITTY,19)
  C
  C     ASK THE USER TO DESCRIBE THE ENVELOPES
          CALL ENVHOW(IFNFLD,IOVERP,IRETRN,ISYSTM,ITTY  ,
     1    JRETRN,JTTY  ,KOPIES,KRETRN,LBLBOX,LBLMAX,LMTBFR,
         2    LMTRTL,LMTRTN,LNGENV,LNGRTL,LTRBFR,LTRRTN,MAXRTL,
         3    MRGBOT,MRGCEN,MRGCOR,MRGDWN,MRGMID,MRGTOP)
 C
  C     SET TERMINAL CHARACTERISTICS
    C     TTYSET IS A SYSTEM DEPENDENT ROUTINE WHICH TURNS OFF
C     THE PAUSING AFTER A SET NUMBER OF LINES HAVE BEEN
   C     TYPED ON THE TERMINAL
       IF(IFNFLD.LT.0)GO TO 1
      CALL TTYSET
     1 CONTINUE
    C
  C     PREPARE FOR FIRST ADDRESS
  C     KNTLCL = NUMBER ENVELOPES THIS FILE W/O TARGETS
C     KNTROW = NUMBER ENVELOPES THIS FILE WITH TARGETS
    C     KNTTTL = NUMBER ENVELOPES ALL FILES W/O TARGETS
C     KNTLBL = NUMBER ENVELOPES ALL FILES WITH TARGETS
    C     KNTOUT = NUMBER LINES WRITTEN TO OUTPUT DEVICE
 C
        KNTLBL=0
          KNTOUT=0
          IFEVER=0
          KNTFIL=0
          KNTTTL=0
    C
  C     MAXIMUM NUMBER OF ENVELOPES IN SINGLE FILE
      MAXROW=LBLMAX-LBLBOX
        IF(MAXROW.LE.0)MAXROW=LBLMAX
          KNTROW=0
    C
  C     LENGTHEN SEPARATE ENVELOPES TO EJECT FROM TERMINAL
        LNGTYP=LNGENV
          IF(IFNFLD.NE.0)GO TO 2
      LNGENV=LNGENV+6
      2 CONTINUE
    C
  C     ASK USER FOR NAME OF THE SOURCE FILE TO BE READ
    3 WRITE(ITTY,4)
        4 FORMAT(' File containing addresses? ',$)
        IF(IFNFLD.GE.0)KNTOUT=KNTOUT+ISYSTM+1
      ISTORE=1
          IWRITE=0
          CALL FILOPN(ISTORE,IDISK,ITTY,JTTY,IWRITE,IFOPEN)
         IF(IFOPEN.EQ.0)GO TO 121
         IF(IFOPEN.GT.0)GO TO 5
C     FILE CANNOT BE OPENED MESSAGE CONSISTS OF 2 LINES
         IF(IFNFLD.GE.0)KNTOUT=KNTOUT+2
        GO TO 3
    5 CONTINUE
    C
  C     ITEMS TO BE RESET FOR EACH NEW FILE PROCESSED
        MINNXT=1
          MAXNXT=-1
         IEOF=0
       KNTADR=0
          KNTINP=0
          INFORM=0
          IAUTHR=-1
   C
  C     *************************************
C     *                                   *
C     *  READ NEXT ADDRESS IN DOT FORMAT  *
C     *                                   *
C     *************************************
C
  C     GET NEXT LINE OF ADDRESS
       6 IF(IAUTHR.GT.0)GO TO 14
          KNTLIN=0
          KNTCHR=0
        7 IF(IEOF.NE.0)GO TO 112
      READ(IDISK,8,END=15)LTRBFR
     8 FORMAT(72A1)
      KNTINP=KNTINP+1
        IF(IAUTHR.EQ.0)GO TO 9
      IF(LTRBFR(1).EQ.LTRATS)GO TO 13
       IAUTHR=0
    C
  C     STORE THE LINE IF NOT A DOT COMMAND
      9 IF(LTRBFR(1).EQ.LTRDOT)GO TO 16
       IF(KNTLIN.GE.LMTLIN)GO TO 7
      MAXPRT=LMTBFR+1
     10 MAXPRT=MAXPRT-1
        IF(MAXPRT.LE.0)GO TO 7
      IF(LTRBFR(MAXPRT).EQ.LTRSPA)GO TO 10
       I=0
       11 IF(I.GE.MAXPRT)GO TO 12
          IF(KNTCHR.GE.LMTCHR)GO TO 12
          I=I+1
        KNTCHR=KNTCHR+1
        LTRADR(KNTCHR)=LTRBFR(I)
         GO TO 11
       12 KNTLIN=KNTLIN+1
        LNGLIN(KNTLIN)=I
       GO TO 7
C
  C     *****************************************
 C     *                                       *
 C     *  READ NEXT ADDRESS IN AT SIGN FORMAT  *
 C     *                                       *
 C     *****************************************
 C
  C     GET NEXT ADDRESS
    13 IAUTHR=1
          KNTINP=-2
      14 CALL GETADR(ITTY,IDISK,LMTKND,LMTSEC,
     1LTRKND,ISTART,ICHAIN,LENGTH,LTRSTR,KNTINP,LOCATN,
        2LMTSTR,INFORM,LTRBFR,LMTBFR)
          IF(KNTINP.EQ.0)GO TO 112
   C
  C     CONSTRUCT THE NEXT ADDRESS
       CALL PUTADR(LMTONE,LMTKND,LMTSEC,LMTTWO,ISTART,
     1    ICHAIN,LENGTH,LTRSTR,LOCATN,LMTSTR,LNGLIN,KNTLIN,
         2    LMTLIN,LTRADR,LMTCHR,KNTCHR,IFCODE,LOCTTL)
       GO TO 16
    C
  C     ************************************
 C     *                                  *
 C     *  REMOVE SALUTATION FROM ADDRESS  *
 C     *                                  *
 C     ************************************
 C
  C     DOT COMMAND INDICATES END OF ADDRESS
    15 IEOF=1
    16 IF(KNTLIN.LE.0)GO TO 6
C
  C     TRIM OFF TERMINAL SALUTATION LINE
          MINTST=KNTCHR-LNGLIN(KNTLIN)
          DO 17 KOLUMN=1,LMTDEA
       MINTST=MINTST+1
        IF(LTRADR(MINTST).EQ.LTRDEA(KOLUMN))GO TO 17
         IF(LTRADR(MINTST).EQ.LWRDEA(KOLUMN))GO TO 17
         GO TO 20
       17 CONTINUE
          IF(LTRADR(KNTCHR).EQ.LTRCOL)GO TO 18
       IF(LTRADR(KNTCHR).EQ.LTRCOM)GO TO 18
       GO TO 20
       18 KNTCHR=KNTCHR-LNGLIN(KNTLIN)
       19 KNTLIN=KNTLIN-1
     20 IF(KNTLIN.LE.0)GO TO 6
      IF(LNGLIN(KNTLIN).LE.0)GO TO 19
 C
  C     ************************************************
    C     *                                              *
    C     *  CHECK IF THIS IS ADDRESS REQUESTED BY USER  *
    C     *                                              *
    C     ************************************************
    C
  C     CHECK IF THIS ADDRESS HAS BEEN SPECIFIED BY USER
       21 IF(MAXNXT.LE.0)GO TO 32
          MAXTST=0
          DO 31 LINE=1,KNTLIN
         MINTST=MAXTST+1
        MAXTST=MAXTST+LNGLIN(LINE)
       IF(MINTST.GT.MAXTST)GO TO 31
          DO 30 KOLUMN=MINTST,MAXTST
       MATCH=KOLUMN
      IF(KOLUMN.EQ.MINTST)GO TO 23
          IF(LTRADR(KOLUMN).EQ.LTRSPA)GO TO 22
       IF(LTRADR(KOLUMN).EQ.LTRCOM)GO TO 22
       GO TO 30
       22 MATCH=KOLUMN+1
      23 INNER=MINNXT
   24 IF(MATCH.GT.MAXTST)GO TO 31
      IF(LTRADR(MATCH).NE.LTRSPA)GO TO 25
        IF(LTRNXT(INNER).NE.LTRSPA)GO TO 30
        MATCH=MATCH+1
          GO TO 24
       25 IF(LTRNXT(INNER).NE.LTRSPA)GO TO 26
        IF(INNER.GE.MAXNXT)GO TO 26
      INNER=INNER+1
          GO TO 25
       26 IF(LTRADR(MATCH).EQ.LTRNXT(INNER))GO TO 27
      IF(LTRADR(MATCH).EQ.LWRNXT(INNER))GO TO 27
      GO TO 30
       27 INNER=INNER+1
          MATCH=MATCH+1
          IF(INNER.LE.MAXNXT)GO TO 24
      IF(MATCH.GT.MAXTST)GO TO 32
      LTRNOW=LTRADR(MATCH)
        IF(LTRNOW.EQ.LTRSPA)GO TO 32
          IF(LTRNOW.EQ.LTRCOM)GO TO 32
          DO 28 I=1,26
      IF(LTRNOW.EQ.LTRABC(I))GO TO 30
       IF(LTRNOW.EQ.LWRABC(I))GO TO 30
    28 CONTINUE
          DO 29 I=1,10
      IF(LTRNOW.EQ.LTRDGT(I))GO TO 30
    29 CONTINUE
          GO TO 32
       30 CONTINUE
       31 CONTINUE
          GO TO 6
   32 CONTINUE
    C
  C     ****************************************
  C     *                                      *
  C     *  TELL USER TO INSERT FIRST ENVELOPE  *
  C     *                                      *
  C     ****************************************
  C
        DO 107 KOPY=1,KOPIES
        DO 106 IRETRN=JRETRN,KRETRN
      IFWAIT=0
       33 IF(IFNFLD.GE.0)GO TO 38
          IF(MAXNXT.LT.0)GO TO 46
    C
  C     DECIDE FILE TO WHICH ADDRESS IS TO BE WRITTEN
        IF(KNTROW.EQ.0)GO TO 37
          IF(KNTROW.GT.0)GO TO 35
          KNTROW=-KNTROW
         WRITE(ITTY,34)KNTFIL
     34 FORMAT(' Output file number',1I4,' is being continued')
        GO TO 84
       35 IF(KNTROW.LE.MAXROW)GO TO 84
          ISTORE=2
          CALL FILEND(ISTORE,JDISK)
        WRITE(ITTY,36)KNTFIL,KNTLCL
   36 FORMAT(' Output file number',1I4,' contains',1I10,' envelopes')
       37 KNTROW=1
          ISTORE=2
          CALL FILNXT(ISTORE,JDISK,ITTY,KNTFIL,2)
         IF(KNTFIL.LE.0)GO TO 131
         KNTLCL=0
          IF(LBLBOX.LE.0)GO TO 84
          GO TO 61
    C
  C     START OF RETYPING OF ANOTHER COPY OF ENVELOPE
     38 IF(MAXNXT.GT.0)GO TO 79
          IF(MAXNXT.EQ.0)GO TO 84
    C
  C     FIRST ENVELOPE
         IF(IFNFLD.NE.0)GO TO 40
          IF(MAXRTL.GT.0)GO TO 39
          CALL ENVHLP(ITTY,24)
        KNTOUT=KNTOUT+5
        GO TO 41
       39 CALL ENVHLP(ITTY,25)
        KNTOUT=KNTOUT+5
        GO TO 41
       40 CALL ENVHLP(ITTY,26)
        KNTOUT=KNTOUT+5
        GO TO 41
    C
  C     RESET LINE COUNT IF FIRST TIME LINE TYPED BY USER
      41 IF(IFEVER.NE.0)GO TO 42
          IFEVER=1
          KNTOUT=0
          GO TO 48
    C
  C     EJECT BLANK LINES BEFORE READING LINE TYPED BY USER
    42 IF(IFNFLD.EQ.0)GO TO 43
    C     COUNT USER PRESSING RETURN AS LINE ON FANFOLD PAPER
       KNTOUT=KNTOUT+ISYSTM+1
   43 NEEDED=(KNTLBL*LNGENV)
      IF(NEEDED.GE.KNTOUT)GO TO 48
       44 KNTLBL=KNTLBL+1
        NEEDED=NEEDED+LNGENV
        IF(NEEDED.GE.KNTOUT)GO TO 45
          IF(IFNFLD.NE.0)GO TO 44
          KNTOUT=KNTOUT-ISYSTM-1
      GO TO 44
       45 IF(NEEDED.LE.KNTOUT)GO TO 48
          KNTOUT=KNTOUT+1
        WRITE(ITTY,99)
         GO TO 45
    C
  C     WAIT UNTIL USER PRESSES RETURN KEY
      46 WRITE(ITTY,47)
      47 FORMAT(' Word or phrase unique to first envelope? ',$)
      48 READ(JTTY,49,END=57)LTRNXT
    49 FORMAT(40A1)
C
  C     FIND OUT IF USER WANTS TO SEARCH FOR PARTICULAR NAME
      MINNXT=0
          MAXNXT=0
       50 MINNXT=MINNXT+1
        IF(MINNXT.GT.LMTNXT)GO TO 59
          IF(LTRNXT(MINNXT).EQ.LTRSPA)GO TO 50
       MAXNXT=LMTNXT+1
     51 MAXNXT=MAXNXT-1
        IF(LTRNXT(MAXNXT).EQ.LTRSPA)GO TO 51
       IF(MINNXT.LT.MAXNXT)GO TO 108
         IF(LTRNXT(MINNXT).EQ.LTRQUE)GO TO 54
       IF(IFNFLD.GE.0)GO TO 53
          WRITE(ITTY,52)
      52 FORMAT(' Word must be longer than a single character')
         GO TO 46
       53 IF(LTRNXT(MINNXT).EQ.LTRTAB)GO TO 84
       IFWAIT=0
          GO TO 60
       54 IF(IFNFLD.GE.0)GO TO 55
          CALL ENVHLP(ITTY,22)
        GO TO 46
       55 IF(KNTADR.NE.0)GO TO 56
          CALL ENVHLP(ITTY,23)
        KNTOUT=KNTOUT+9
        GO TO 42
       56 CALL ENVHLP(ITTY,27)
        KNTOUT=KNTOUT+11
       GO TO 42
       57 CALL TTYEOF(JTTY)
      IF(IFNFLD.LT.0)GO TO 58
          IF(ISYSTM.EQ.0)WRITE(ITTY,99)
         KNTOUT=KNTOUT-ISYSTM
        MINNXT=1
          MAXNXT=0
          GO TO 79
       58 CALL TTYEOF(JTTY)
      WRITE(ITTY,99)
         GO TO 46
       59 IF(IFWAIT.NE.0)GO TO 106
         GO TO 33
    C
  C     ******************************
  C     *                            *
  C     *  GENERATE TARGET ENVELOPE  *
  C     *                            *
  C     ******************************
  C
     60 LBLBOX=-1
      61 NOWBOX=1
       62 LEVEL1=MRGTOP+1
        LEVEL2=MRGTOP+MAXRTL
        IF(LEVEL2.GT.LNGTYP)LEVEL2=LNGTYP
          LEVEL3=MRGMID+1
        LEVEL4=MRGBOT
          IF(LEVEL4.GT.LNGTYP)LEVEL4=LNGTYP
          LEVEL0=KNTLBL*LNGENV
        LEVEL1=LEVEL1+LEVEL0
        LEVEL2=LEVEL2+LEVEL0
        LEVEL3=LEVEL3+LEVEL0
        LEVEL4=LEVEL4+LEVEL0
        NEEDED=LNGENV
          IF(IFNFLD.EQ.0)GO TO 63
          NEEDED=NEEDED-ISYSTM-1
      IF(NEEDED.LT.0)NEEDED=0
       63 LEVEL0=LEVEL0+NEEDED
  C
  C     DETERMINE WHAT IS TO BE ON NEXT LINE OF ADDRESS
   64 IF(KNTOUT.GE.LEVEL0)GO TO 78
          KNTOUT=KNTOUT+1
        LEVEL6=1
          IF(MAXRTL.EQ.0)GO TO 65
          IF(KNTOUT.LT.LEVEL1)GO TO 65
          IF(KNTOUT.GT.LEVEL2)GO TO 65
          LEVEL6=2
       65 IF(KNTOUT.LT.LEVEL3)GO TO 66
          IF(KNTOUT.GT.LEVEL4)GO TO 66
          LEVEL6=LEVEL6+2
     66 LOWBFR=0
          GO TO(76,71,68,67),LEVEL6
  C
  C     COPY ASTERISKS INTO OUTPUT LINE
    67 IF(MRGCOR.LE.MRGCEN)GO TO 71
       68 IF(LOWBFR.GE.MRGCEN)GO TO 69
          IF(LOWBFR.GE.LMTOUT)GO TO 74
          LOWBFR=LOWBFR+1
        LTROUT(LOWBFR)=LTRSPA
       GO TO 68
       69 J=1
          IF(KNTOUT.EQ.LEVEL3)J=20
         IF(KNTOUT.EQ.LEVEL4)J=20
         DO 70 I=1,J
       IF(LOWBFR.GE.LMTOUT)GO TO 74
          LOWBFR=LOWBFR+1
        LTROUT(LOWBFR)=LTRSTA
    70 CONTINUE
          IF(LEVEL6.NE.4)GO TO 74
          IF(MRGCOR.LE.MRGCEN)GO TO 74
       71 IF(LOWBFR.GE.MRGCOR)GO TO 72
          IF(LOWBFR.GE.LMTOUT)GO TO 74
          LOWBFR=LOWBFR+1
        LTROUT(LOWBFR)=LTRSPA
       GO TO 71
       72 J=1
          IF(KNTOUT.EQ.LEVEL1)J=20
         IF(KNTOUT.EQ.LEVEL2)J=20
         DO 73 I=1,J
       IF(LOWBFR.GE.LMTOUT)GO TO 74
          LOWBFR=LOWBFR+1
        LTROUT(LOWBFR)=LTRSTA
    73 CONTINUE
          IF(LEVEL6.NE.4)GO TO 74
          IF(MRGCOR.LE.MRGCEN)GO TO 68
       74 IF(IFNFLD.GE.0)GO TO 75
          WRITE(JDISK,100)(LTROUT(I),I=1,LOWBFR)
          GO TO 64
       75 WRITE(ITTY,101)(LTROUT(I),I=1,LOWBFR)
      GO TO 64
    C
  C     SHOW LINES NOT IN ADDRESSES
   76 IF(IFNFLD.GE.0)GO TO 77
          WRITE(JDISK,99)
        GO TO 64
       77 WRITE(ITTY,99)
         GO TO 64
    C
  C     ADVANCE COUNT OF NUMBER OF ADDRESSES TYPED
   78 KNTLBL=KNTLBL+1
        NOWBOX=NOWBOX+1
        IF(NOWBOX.LE.LBLBOX)GO TO 62
          IF(LBLBOX.LT.0)GO TO 41
          GO TO 84
    C
  C     ******************************************
C     *                                        *
C     *  SKIP OVER ENVELOPE SPOILED BY DIALOG  *
C     *                                        *
C     ******************************************
C
  C     ERROR MESSAGE HELD UNTIL AN ENVELOPE IS READY
  C     NECESSARY FOR WHEN USER HAS TYPED NAME TO BE LOCATED
   79 NEEDED=(KNTLBL*LNGENV)+MRGMID
      80 IF(NEEDED.LE.KNTOUT)GO TO 81
          KNTOUT=KNTOUT+1
        WRITE(ITTY,99)
         GO TO 80
       81 KNTOUT=KNTOUT+1
        WRITE(ITTY,82)
      82 FORMAT(' DISCARD THIS ENVELOPE')
      KNTLBL=KNTLBL+1
        IF(IFNFLD.NE.0)GO TO 84
          NEEDED=(KNTLBL*LNGENV)
   83 IF(NEEDED.LE.KNTOUT)GO TO 42
          KNTOUT=KNTOUT+1
        WRITE(ITTY,99)
         GO TO 83
    C
  C     *******************************
 C     *                             *
 C     *  TYPE ADDRESS ONTO ENELOPE  *
 C     *                             *
 C     *******************************
 C
  C     LOCATIONS OF ADDRESS ON NEXT ENVELOPE
C     LEVEL1 = TOP OF RETURN ADDRESS
  C     LEVEL2 = BOTTOM OF RETURN ADDRESS
    C     LEVEL3 = TOP OF DESTINATION ADDRESS
  C     LEVEL4 = BOTTOM OF DESTINATION ADDRESS
    C     LEVEL0 = BOTTOM OF ENVELOPE
C
  C     DECIDE WHICH ADDRESS IS AT CORNER
       84 IF(IRETRN.EQ.2)GO TO 85
    C
  C     CONSTANT ADDRESS IS AT CORNER
         NOWCOR=MRGCOR
          NOWCEN=MRGCEN
          LEVEL1=MRGDWN-MAXRTL
        IF(LEVEL1.GT.MRGTOP)LEVEL1=MRGTOP
          LEVEL3=MRGBOT-KNTLIN
        IF(LEVEL3.GT.MRGMID)LEVEL3=MRGMID
          GO TO 86
    C
  C     VARYING ADDRESS IS AT CORNER
       85 NOWCOR=MRGCEN
          NOWCEN=MRGCOR
          LEVEL1=MRGBOT-MAXRTL
        IF(LEVEL1.GT.MRGMID)LEVEL1=MRGMID
          LEVEL3=MRGDWN-KNTLIN
        IF(LEVEL3.GT.MRGTOP)LEVEL3=MRGTOP
    C
  C     PREPARE TO TYPE TOP LINE OF THE ADDRESSES
    86 IF(LEVEL1.LT.0)LEVEL1=0
          LEVEL2=LEVEL1+MAXRTL
        IF(LEVEL2.GT.LNGTYP)LEVEL2=LNGTYP
          IF(LEVEL3.LT.0)LEVEL3=0
          LEVEL4=LEVEL3+KNTLIN
        IF(LEVEL4.GT.LNGTYP)LEVEL4=LNGTYP
          LEVEL0=KNTLBL*LNGENV
        LEVEL1=LEVEL1+LEVEL0
        LEVEL2=LEVEL2+LEVEL0
        LEVEL3=LEVEL3+LEVEL0
        LEVEL4=LEVEL4+LEVEL0
        LEVEL0=LEVEL0+LNGENV
        MAXTOP=0
          LINTOP=0
          MAXBOT=0
          LINBOT=0
    C
  C     DETERMINE WHAT IS TO BE ON NEXT LINE OF ADDRESS
   87 IF(KNTOUT.GE.LEVEL0)GO TO 105
         KNTOUT=KNTOUT+1
        LEVEL6=1
          IF(KNTOUT.LE.LEVEL1)GO TO 88
          IF(KNTOUT.GT.LEVEL2)GO TO 88
          LINTOP=LINTOP+1
        MINTOP=MAXTOP+1
        MAXTOP=MAXTOP+LNGRTL(LINTOP)
          LEVEL6=2
       88 IF(KNTOUT.LE.LEVEL3)GO TO 89
          IF(KNTOUT.GT.LEVEL4)GO TO 89
          LINBOT=LINBOT+1
        MINBOT=MAXBOT+1
        MAXBOT=MAXBOT+LNGLIN(LINBOT)
          LEVEL6=LEVEL6+2
     89 LOWBFR=0
          GO TO(103,94,91,90),LEVEL6
 C
  C     COPY ADDRESS OR ADDRESSES INTO OUTPUT LINE
   90 IF(NOWCOR.LE.NOWCEN)GO TO 94
       91 IF(LOWBFR.GE.NOWCEN)GO TO 92
          IF(LOWBFR.GE.LMTOUT)GO TO 97
          LOWBFR=LOWBFR+1
        LTROUT(LOWBFR)=LTRSPA
       GO TO 91
       92 IF(MINBOT.GT.MAXBOT)GO TO 93
          IF(LOWBFR.GE.LMTOUT)GO TO 97
          LOWBFR=LOWBFR+1
        LTROUT(LOWBFR)=LTRADR(MINBOT)
         MINBOT=MINBOT+1
        GO TO 92
       93 IF(LEVEL6.NE.4)GO TO 97
          IF(NOWCOR.LE.NOWCEN)GO TO 97
       94 IF(LOWBFR.GE.NOWCOR)GO TO 95
          IF(LOWBFR.GE.LMTOUT)GO TO 97
          LOWBFR=LOWBFR+1
        LTROUT(LOWBFR)=LTRSPA
       GO TO 94
       95 IF(MINTOP.GT.MAXTOP)GO TO 96
          IF(LOWBFR.GE.LMTOUT)GO TO 97
          LOWBFR=LOWBFR+1
        LTROUT(LOWBFR)=LTRRTN(MINTOP)
         MINTOP=MINTOP+1
        GO TO 95
       96 IF(LEVEL6.NE.4)GO TO 97
          IF(NOWCOR.LE.NOWCEN)GO TO 91
       97 IF(IFNFLD.GE.0)GO TO 98
          WRITE(JDISK,100)(LTROUT(I),I=1,LOWBFR)
          GO TO 87
       98 WRITE(ITTY,101)(LTROUT(I),I=1,LOWBFR)
      IF(IOVERP.NE.0)WRITE(ITTY,102)(LTROUT(I),I=1,LOWBFR)
      GO TO 87
    C
  C     FORMAT STATEMENTS FOR THE ENVELOPES
     99 FORMAT(1X)
    100 FORMAT(300A1)
      101 FORMAT(1X,300A1)
   102 FORMAT('+',300A1)
C
  C     SPACE ABOVE, BETWEEN OR BELOW ADDRESS
  103 IF(IFNFLD.GE.0)GO TO 104
         WRITE(JDISK,99)
        GO TO 87
      104 WRITE(ITTY,99)
         GO TO 87
    C
  C     ************************
   C     *                      *
   C     *  ENVELOPE COMPLETED  *
   C     *                      *
   C     ************************
   C
  C     ADVANCE COUNTS OF NUMBER OF ADDRESSES TYPED
      105 CONTINUE
          KNTTTL=KNTTTL+1
        KNTLCL=KNTLCL+1
        KNTLBL=KNTLBL+1
        KNTROW=KNTROW+1
        KNTADR=1
          MINNXT=1
          MAXNXT=0
          IFWAIT=1
          IF(IFNFLD.EQ.0)GO TO 48
    C
  C     END OF COPIES AND RETURN-MAIN ADDRESS LOOPS
      106 CONTINUE
      107 CONTINUE
          GO TO 6
C
  C     CONVERT CASES OF LETTERS IN PHRASE TYPED BY USER
      108 IF(MINNXT.GT.MAXNXT)GO TO 111
         DO 110 I=MINNXT,MAXNXT
      LWRNXT(I)=LTRNXT(I)
         DO 109 J=1,26
          IF(LTRNXT(I).EQ.LWRABC(J))LTRNXT(I)=LTRABC(J)
        IF(LWRNXT(I).EQ.LTRABC(J))LWRNXT(I)=LWRABC(J)
    109 CONTINUE
      110 CONTINUE
      111 IF(KNTADR.NE.0)GO TO 6
      KNTADR=1
          GO TO 21
    C
  C     CLOSE AND REOPEN OUTPUT FILE IN APPEND MODE
      112 IF(IFNFLD.GE.0)GO TO 115
         IF(KNTROW.LE.0)GO TO 115
         WRITE(ITTY,113)KNTFIL,KNTLCL
      113 FORMAT(' Output file number',1I4,' contains',1I10,' envelopes')
          IF(KNTROW.GT.MAXROW)GO TO 114
         ISTORE=2
    C     FOLLOWING CALL CLOSES OUTPUT FILE AND REOPENS FILE IN
    C     APPEND MODE.  THIS CALL IS NOT REALLY NECESSARY.
          CALL FILCUT(ISTORE,JDISK)
        KNTROW=-KNTROW
         GO TO 115
     114 ISTORE=2
          CALL FILEND(ISTORE,JDISK)
        KNTROW=0
      115 CONTINUE
    C
  C     TELL USER IF SPECIFIED ADDRESS NOT FOUND
        IF(MINNXT.GT.MAXNXT)GO TO 117
         WRITE(ITTY,116)(LTRNXT(I),I=MINNXT,MAXNXT)
  116 FORMAT(' Could not locate ',40A1)
          IF(IFNFLD.GE.0)KNTOUT=KNTOUT+1
        GO TO 121
   C
  C     EJECT EXTRA LINES ON LAST FANFOLD ENVELOPE SINCE IT
 C     MIGHT BE ALIGNED SO LOW THAT USER TYPING WOULD
 C     BE ON BOTTOM OF ENVELOPE JUST COMPLETED
     117 IF(IFNFLD.EQ.0)GO TO 121
         NEEDED=MRGMID
          IF(MAXRTL.EQ.0)GO TO 118
         IF(NEEDED.GT.MRGTOP)NEEDED=MRGTOP
      118 NEEDED=(KNTLBL*LNGENV)+NEEDED
     119 IF(NEEDED.LE.KNTOUT)GO TO 121
         KNTOUT=KNTOUT+1
        IF(IFNFLD.GE.0)GO TO 120
         WRITE(JDISK,99)
        GO TO 119
     120 WRITE(ITTY,99)
         GO TO 119
   C
  C     ASK USER IF ADDITIONAL LABELS ARE TO BE PROCESSED
     121 WRITE(ITTY,122)
    122 FORMAT(' Process additional addresses (Y or N)? ',$)
      CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          IF(IFNFLD.LT.0)GO TO 123
         KNTOUT=KNTOUT+ISYSTM+1
  123 GO TO(121,125,125,124,125,125,125,124),KIND
      124 IF(LETTER.EQ.14)GO TO 127
        IF(LETTER.EQ.25)GO TO 3
      125 IF(IFNFLD.LT.0)GO TO 126
         CALL ENVHLP(ITTY,20)
        KNTOUT=KNTOUT+3
        GO TO 121
     126 CALL ENVHLP(ITTY,21)
        GO TO 121
   C
  C     ALL DONE WITH ALL LABELS
     127 IF(KNTROW.EQ.0)GO TO 130
         IF(IFNFLD.GE.0)GO TO 128
         ISTORE=2
          CALL FILEND(ISTORE,JDISK)
    128 WRITE(ITTY,129)KNTTTL
   129 FORMAT(' Total envelopes produced:',1I10)
   130 GO TO 133
   C
  C     SOMETHING WRONG WITH OUTPUT FILE
  131 WRITE(ITTY,132)
    132 FORMAT(' Cannot open output file')
   C
  C     ALL DONE WITH ALL ENVELOPES
C     LEAVE ROUTINE EXITS WITHOUT TIME SUMMARY
    133 CALL LEAVE
        STOP
         END
          SUBROUTINE ENVHOW(IFNFLD,IOVERP,IRETRN,ISYSTM,ITTY  ,
         1    JRETRN,JTTY  ,KOPIES,KRETRN,LBLBOX,LBLMAX,LMTBFR,
         2    LMTRTL,LMTRTN,LNGENV,LNGRTL,LTRBFR,LTRRTN,MAXRTL,
         3    MRGBOT,MRGCEN,MRGCOR,MRGDWN,MRGMID,MRGTOP)
 C     RENBR(/ASK USER TO DESCRIBE ENVELOPES)
    C
  C     DONALD BARTH, YALE SCHOOL OF MANAGEMENT
   C
        DIMENSION LNGRTL(LMTRTL)
         DIMENSION LTRBFR(LMTBFR),LTRRTN(LMTRTN)
   C
        DATA LTRQUE,LTRSPA/1H?,1H /
C
  C     ASK USER IF FANFOLD ENVELOPES WILL BE USED
    1 WRITE(ITTY,2)
        2 FORMAT(
     1' Separate or Continuous envelopes or File (S, C or F)? ',$)
        CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(1,4,4,3,4,4,4,3),KIND
C     IFNFLD = -1, CONTINUOUS ENVELOPES WRITTEN TO FILE
   C            = 0, SEPARATE ENVELOPES WRITTEN TO TERMINAL
  C            = 1, CONTINUOUS ENVELOPES WRITTEN TO TERMINAL
    3 IFNFLD=-2
         IF(LETTER.EQ.19)IFNFLD=0
         IF(LETTER.EQ. 6)IFNFLD=-1
        IF(LETTER.EQ. 3)IFNFLD=1
         IF(IFNFLD.GE.-1)GO TO 5
        4 CALL ENVHLP(ITTY,1)
         GO TO 1
    5 CONTINUE
    C
  C     ASK HOW MANY TARGET ENVELOPES ARE DESIRED
       LBLBOX=0
          IF(IFNFLD.GE.0)GO TO 10
        6 WRITE(ITTY,7)
        7 FORMAT(' Number of target envelopes in each file? ',$)
         CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(6,8,9,9,9,9,9,9),KIND
    8 LBLBOX=IVALUE
          IF(LBLBOX.GE.0)GO TO 10
        9 CALL ENVHLP(ITTY,2)
         GO TO 6
   10 CONTINUE
    C
  C     ASK MAXIMUM NUMBER OF ENVELOPES IN EACH OUTPUT FILE
       LBLMAX=0
          IF(IFNFLD.GE.0)GO TO 15
       11 WRITE(ITTY,12)
      12 FORMAT(' Maximum number of envelopes in each file? ',$)
        CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(11,13,14,14,14,14,14,14),KIND
     13 LBLMAX=IVALUE
          IF(LBLMAX.GT.0)GO TO 15
       14 CALL ENVHLP(ITTY,3)
         GO TO 11
       15 CONTINUE
    C
  C     ASK IF WIDE OR NARROW ENVELOPES ARE TO BE USED
    16 WRITE(ITTY,17)
      17 FORMAT(' Wide, Narrow or Other size envelopes (W, N',
         1' or O)? ',$)
          CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(16,19,19,18,19,19,19,18),KIND
     18 KNDENV=-2
         IF(LETTER.EQ.14)KNDENV=0
         IF(LETTER.EQ.15)KNDENV=-1
        IF(LETTER.EQ.23)KNDENV=1
         IF(KNDENV.GE.-1)GO TO 20
      19 CALL ENVHLP(ITTY,4)
         GO TO 16
       20 CONTINUE
    C
  C     ASK USER TO SPECIFY SIZE OF SPECIAL ENVELOPE
         IF(KNDENV.GE.0)GO TO 32
          DO 31 NUMBER=1,7
    21 IF(NUMBER.EQ.1)WRITE(ITTY,22)
         IF(NUMBER.EQ.2)WRITE(ITTY,23)
         IF(NUMBER.EQ.3)WRITE(ITTY,24)
         IF(NUMBER.EQ.4)WRITE(ITTY,25)
         IF(NUMBER.EQ.5)WRITE(ITTY,26)
         IF(NUMBER.EQ.6)WRITE(ITTY,27)
         IF(NUMBER.EQ.7)WRITE(ITTY,28)
      22 FORMAT(' Maximum number of lines above corner addre',
         1'ss? ',$)
      23 FORMAT(' Minimum number of lines below corner addre',
         1'ss? ',$)
      24 FORMAT(' Maximum number of lines above middle addre',
         1'ss? ',$)
      25 FORMAT(' Minimum number of lines below middle addre',
         1'ss? ',$)
      26 FORMAT(' Height of envelope as number of lines? ',$)
   27 FORMAT(' Number of blank columns left of corner add',
         1'ress? ',$)
    28 FORMAT(' Number of blank columns left of middle add',
         1'ress? ',$)
       CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(21,29,30,30,30,30,30,30),KIND
     29 IF(IVALUE.LT.0)GO TO 30
          IF(NUMBER.EQ.1)MRGTOP=IVALUE
          IF(NUMBER.EQ.2)MRGDWN=IVALUE
          IF(NUMBER.EQ.3)MRGMID=IVALUE
          IF(NUMBER.EQ.4)MRGBOT=IVALUE
          IF(NUMBER.EQ.5)LNGENV=IVALUE
          IF(NUMBER.EQ.6)MRGCOR=IVALUE
          IF(NUMBER.EQ.7)MRGCEN=IVALUE
          GO TO 31
       30 IF(NUMBER.EQ.1)CALL ENVHLP(ITTY,5)
         IF(NUMBER.EQ.2)CALL ENVHLP(ITTY,6)
         IF(NUMBER.EQ.3)CALL ENVHLP(ITTY,7)
         IF(NUMBER.EQ.4)CALL ENVHLP(ITTY,8)
         IF(NUMBER.EQ.5)CALL ENVHLP(ITTY,9)
         IF(NUMBER.EQ.6)CALL ENVHLP(ITTY,10)
        IF(NUMBER.EQ.7)CALL ENVHLP(ITTY,11)
        GO TO 21
       31 CONTINUE
       32 CONTINUE
    C
  C     ASK USER TO SPECIFY PITCH
        IF(KNDENV.LT.0)GO TO 37
       33 WRITE(ITTY,34)
      34 FORMAT(' Pica or Elite spacing (P or E)? ',$)
        CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(33,36,36,35,36,36,36,35),KIND
     35 IPITCH=0
          IF(LETTER.EQ.16)IPITCH=10
        IF(LETTER.EQ. 5)IPITCH=12
        IF(IPITCH.NE.0)GO TO 37
       36 CALL ENVHLP(ITTY,12)
        GO TO 33
       37 CONTINUE
    C
  C     ASK USER TO EACH LINE IS TO BE TYPED TWICE
      IOVERP=0
          IF(IFNFLD.LT.0)GO TO 42
       38 WRITE(ITTY,39)
      39 FORMAT(' Light or dark type (L or D)? ',$)
      CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(38,41,41,40,41,41,41,40),KIND
     40 IOVERP=-1
         IF(LETTER.EQ.12)IOVERP=0
         IF(LETTER.EQ. 4)IOVERP=1
         IF(IOVERP.GE.0)GO TO 42
       41 CALL ENVHLP(ITTY,13)
        GO TO 38
       42 CONTINUE
    C
  C     ASK USER HOW MANY COPIES OF EACH ENVELOPE
    43 WRITE(ITTY,44)
      44 FORMAT(' Type how many copies of each envelope? ',$)
      CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(43,45,46,46,46,46,46,46),KIND
     45 KOPIES=IVALUE
          IF(KOPIES.GT.0)GO TO 47
       46 CALL ENVHLP(ITTY,14)
        GO TO 43
       47 CONTINUE
    C
  C     ASK WHICH OPERATING SYSTEM IS BEING USED
        ISYSTM=0
          IF(IFNFLD.LT.0)GO TO 52
       48 WRITE(ITTY,49)
      49 FORMAT(' Did a blank line appear after the answer y',
         1'ou just typed (Y or N)? ',$)
         CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(48,51,51,50,51,51,51,50),KIND
     50 ISYSTM=-1
         IF(LETTER.EQ.14)ISYSTM=0
         IF(LETTER.EQ.25)ISYSTM=1
         IF(ISYSTM.GE.0)GO TO 52
       51 CALL ENVHLP(ITTY,15)
        GO TO 48
       52 CONTINUE
    C
  C     ASK USER FOR RETURN ADDRESS
C     MAXRTL = NUMBER OF RETURN ADDRESS LINES
   C     MAXRTN = NUMBER OF RETURN ADDRESS CHARACTERS
         MAXRTL=0
          MAXRTN=0
          WRITE(ITTY,53)
      53 FORMAT(' Type return address (press RETURN key agai',
         1'n when done)')
     54 IF(MAXRTL.GE.LMTRTL)GO TO 62
          WRITE(ITTY,55)
      55 FORMAT(' ?',$)
         READ(JTTY,56)LTRBFR
      56 FORMAT(72A1)
      MAXBFR=LMTBFR
          IF(MAXBFR.GT.(LMTRTN-MAXRTN))MAXBFR=LMTRTN-MAXRTN
      57 IF(MAXBFR.LE.0)GO TO 62
          IF(LTRBFR(MAXBFR).NE.LTRSPA)GO TO 58
       MAXBFR=MAXBFR-1
        GO TO 57
       58 IF(LTRBFR(MAXBFR).NE.LTRQUE)GO TO 60
       I=0
       59 I=I+1
        IF(LTRBFR(I).EQ.LTRSPA)GO TO 59
       IF(I.NE.MAXBFR)GO TO 60
          IF(MAXRTL.EQ.0)CALL ENVHLP(ITTY,16)
        IF(MAXRTL.GT.0)CALL ENVHLP(ITTY,17)
        GO TO 54
       60 MAXRTL=MAXRTL+1
        LNGRTL(MAXRTL)=MAXBFR
       DO 61 I=1,MAXBFR
       MAXRTN=MAXRTN+1
        LTRRTN(MAXRTN)=LTRBFR(I)
      61 CONTINUE
          GO TO 54
       62 IF(MAXRTL.EQ.0)WRITE(ITTY,63)
      63 FORMAT(' No return address')
    C
  C     ASK FOR POSITION OF RETURN ADDRESS ON ENVELOPE
       IRETRN=-1
         IF(MAXRTL.LE.0)GO TO 68
       64 WRITE(ITTY,65)
      65 FORMAT(' Return address at corner, middle or both (',
         1'C, M or B)? ',$)
      CALL ANSWER(JTTY,KIND,LETTER,IVALUE,AVALUE)
          GO TO(64,67,67,66,67,67,67,66),KIND
     66 IRETRN=-2
         IF(LETTER.EQ. 3)IRETRN=-1
        IF(LETTER.EQ.13)IRETRN=1
         IF(LETTER.EQ. 2)IRETRN=0
         IF(IRETRN.GE.-1)GO TO 68
      67 CALL ENVHLP(ITTY,18)
        GO TO 64
       68 CONTINUE
          JRETRN=1
          KRETRN=2
          IF(IRETRN.EQ.-1)KRETRN=1
         IF(IRETRN.EQ.1)JRETRN=2
    C
  C     ************************************************
    C     *                                              *
    C     *  CALCULATE DIMENSIONS OF STANDARD ENVELOPES  *
    C     *                                              *
    C     ************************************************
    C
  C                MRGCOR
C              +-------+
    C              :       :
    C           +--********************************************
    C           :  *MRGTOP:                                   *
    C           :  *      +-----------------------------------*
    C           :  *        First line of return address      *
    C           :  *        Final line of return address      *
    C     LNGENV:  *      +-----------------------------------*
    C           :  *      :                                   *
    C           :  *      : +----- First line of main address *
    C           :  *MRGDWN: :      Final line of main address *
    C           :  *  MRGMID: +-------------------------------*
    C           :  *    MRGBOT:                               *
    C           :  *      : : :                               *
    C           +--********************************************
    C              :              :
  C              +--------------+
  C                   MRGCEN
  C
  C     MRGTOP = NUMBER OF BLANK LINES ABOVE RETURN ADDRESS.
C     MRGMID = IN THIS SECTION ONLY,  IS THE LOWEST ALLOWED
    C              LOCATION  OF THE MAIN ADDRESS, STATED AS THE
    C              MINIMUM NUMBER OF LINES INCLUDING ALL OF THE
    C              LINES  IN THE ADDRESS AND ALL THOSE BELOW IT
    C              ON  THE  ENVELOPE.   OUTSIDE  THIS  SECTION,
    C              MRGMID IS THE MAXIMUM  NUMBER OF LINES ABOVE
    C              THE MAIN ADDRESS.
 C     MRGBOT = MINIMUM NUMBER OF BLANK LINES BELOW THE MAIN
    C              ADDRESS.
C     LNGENV = HEIGHT  OF  ENVELOPE  STATED  AS  NUMBER  OF
    C              LINES.  FOR FANFOLD ENVELOPES THIS IS HEIGHT
    C              OF EXPOSED PORTION OF EACH ENVELOPE.
  C     MRGCOR = NUMBER OF  BLANK COLUMNS  TO LEFT  OF CORNER
    C              ADDRESS.
C     MRGCEN = NUMBER OF BLANK  COLUMNS  TO  LEFT  OF  MAIN
    C              ADDRESS.
C
  C     THERE ARE 4 BASIC VERTICAL FORMATS
   C     1 SEPARATE ENVELOPES WITHOUT RETURN ADDRESS.  EACH IS
    C       LINED UP WITH TOP OF BAIL
C     2 SEPARATE ENVELOPES WITH RETURN  ADDRESS.   EACH  IS
    C       LINED UP WITH TOP OF PRINTHEAD
C     3 FANFOLD ENVELOPES WITHOUT  RETURN  ADDRESS  TOP  OF
    C       EXPOSED PORTION IS LINED UP WITH TOP OF PRINTHEAD.
C     4 FANFOLD  ENVELOPES  WITH  RETURN  ADDRESS  TOP   OF
    C       EXPOSED PORTION IS LINED UP WITH TOP OF PRINTHEAD.
C
        IF(KNDENV.GT.0)GO TO 72
          IF(KNDENV.LT.0)GO TO 77
    C
  C     FORMAT FOR NARROW ENVELOPES
      IF(IFNFLD.NE.0)GO TO 70
          IF(MAXRTL.GT.0)GO TO 69
          MRGTOP=0
          MRGDWN=3
          MRGMID=11
         MRGBOT=3
          LNGENV=17
         MRGCOR=0
          MRGCEN=(28*IPITCH)/12
       GO TO 76
       69 MRGTOP=0
          MRGDWN=3
          MRGMID=11
         MRGBOT=3
          LNGENV=22
         MRGCOR=0
          MRGCEN=(34*IPITCH)/12
       GO TO 76
       70 IF(MAXRTL.GT.0)GO TO 71
          IF(IFNFLD.LT.0)GO TO 71
          MRGTOP=2
          MRGDWN=3
          MRGMID=11
         MRGBOT=3
          LNGENV=21
         MRGCOR=0
          MRGCEN=(34*IPITCH)/12
       GO TO 76
       71 MRGTOP=2
          MRGDWN=3
          MRGMID=11
         MRGBOT=3
          LNGENV=21
         MRGCOR=0
          MRGCEN=(34*IPITCH)/12
       GO TO 76
    C
  C     FORMAT FOR WIDE ENVELOPES
     72 IF(IFNFLD.NE.0)GO TO 74
          IF(MAXRTL.GT.0)GO TO 73
          MRGTOP=0
          MRGDWN=3
          MRGMID=11
         MRGBOT=3
          LNGENV=18
         MRGCOR=0
          MRGCEN=(40*IPITCH)/12
       GO TO 76
       73 MRGTOP=0
          MRGDWN=3
          MRGMID=11
         MRGBOT=3
          LNGENV=23
         MRGCOR=0
          MRGCEN=(46*IPITCH)/12
       GO TO 76
       74 IF(MAXRTL.GT.0)GO TO 75
          IF(IFNFLD.LT.0)GO TO 75
          MRGTOP=2
          MRGDWN=3
          MRGMID=11
         MRGBOT=3
          LNGENV=21
         MRGCOR=0
          MRGCEN=(46*IPITCH)/12
       GO TO 76
       75 MRGTOP=2
          MRGDWN=3
          MRGMID=11
         MRGBOT=3
          LNGENV=21
         MRGCOR=0
          MRGCEN=(46*IPITCH)/12
       GO TO 76
    C
  C     MRGMID = FROM THIS POINT IS LOWEST LOCATION IN WHICH
C              TOP LINE OF MIDDLE ADDRESS CAN APPEAR.
C     MRGBOT = FROM THIS POINT IS LOWEST LOCATION IN WHICH
C              BOTTOM LINE OF MIDDLE ADDRESS CAN APPEAR.
  C     MRGDWB = FROM THIS POINT IS LOWEST LOCATION IN WHICH
C              BOTTOM LINE OF CORNER ADDRESS CAN APPEAR.
     76 MRGMID=LNGENV-MRGMID
     77 MRGBOT=LNGENV-MRGBOT
        MRGDWN=LNGENV-MRGDWN
  C
  C     RETURN TO CALLING PROGRAM
        RETURN
       END
          SUBROUTINE ENVHLP(ITTY,MESAGE)
  C     RENBR(/HELP MESSAGES FOR ENVELO PROGRAM)/M1000
 C
  C     DONALD BARTH, YALE SCHOOL OF MANAGEMENT
   C
  C     THE FORMAT STATEMENTS IN THIS ROUTINE WERE PRODUCED
 C     BY THE FORMAT PROGRAM WHICH WAS WRITTEN BY THE
 C     CURRENT AUTHOR AND WHICH IS AVAILABLE FROM THE DECUS
C     LIBRARY.
    C
  C     HOW ENVELOPES WILL BE FED INTO TERMINAL
         IF(MESAGE.EQ. 1)WRITE(ITTY,1)
       1 FORMAT(' Answer'/' S  (for Separate) if you will in',
         1'sert separate envelopes into the terminal'/' C  (f',
         2'or Continuous) if you will insert envelopes mounte',
         3'd on  continuous  fanfold'/4X,'paper into the term',
         4'inal'/' F  (for File) if you want addresses to be ',
         5' written  to  an  output  file  to  be'/4X,'printe',
         6'd later on continuous envelopes')
   C
  C     NUMBER OF TARGET ENVELOPES AT START OF FILE
          IF(MESAGE.EQ. 2)WRITE(ITTY,2)
       2 FORMAT(' This program can produce a series of targe',
         1't  envelopes  at  the  start  of  each'/' output  ',
         2'file for use in aligning the envelopes in the prin',
         3'ter or terminal.  Type'/' the number of target env',
         4'elopes desired at the start of each file.')
   C
  C     MAXIMUM NUMBER OF ENVELOPES IN SINGLE FILE
      IF(MESAGE.EQ. 3)WRITE(ITTY,3)
       3 FORMAT(' This program can limit the length of each ',
         1'output file.  Type the maximum  number'/' of envel',
         2'opes which can be written into each file.')
   C
  C     SIZE OF ENVELOPES
      IF(MESAGE.EQ. 4)WRITE(ITTY,4)
       4 FORMAT(' Answer'/' W  (for Wide) if you are using w',
         1'ide envelopes 9.5 inches wide by 4 1/8 high'/' N  ',
         2'(for Narros) if you are using narrow envelopes 7.5',
         3' inches wide by 4 high'/' O  (for Other) if you wa',
         4'nt to specify other dimensions for envelopes')
C
  C     DIMENSIONS OF NON-STANDARD ENVELOPES
       IF(MESAGE.EQ. 5)WRITE(ITTY,5)
       5 FORMAT(' Type the maximum number of lines between t',
         1'he top of the envelope and the address'/' at  the ',
         2' upper  left corner of the envelope.  If the envel',
         3'opes are on continuous'/' fanfold paper, then this',
         4' is the number  of  lines  between  the  bottom  o',
         5'f  the'/' previous envelope and the address at the',
         6' upper left corner.')
      IF(MESAGE.EQ. 6)WRITE(ITTY,6)
       6 FORMAT(' Type the minimum number of lines between t',
         1'he bottom of the address at the  upper'/' left cor',
         2'ner of the envelope and the bottom of the envelope',
         3'.')
         IF(MESAGE.EQ. 7)WRITE(ITTY,7)
       7 FORMAT(' Type the maximum number of lines between t',
         1'he top of the envelope and the address'/' at  the ',
         2' middle  of  the  envelope.   If the envelopes are',
         3' on continuous fanfold'/' paper, then this is the ',
         4'number of lines  between  the  bottom  of  the  pr',
         5'evious'/' envelope and the address at the middle.')
      IF(MESAGE.EQ. 8)WRITE(ITTY,8)
       8 FORMAT(' Type the minimum number of lines between t',
         1'he bottom of the address at the middle'/' of the e',
         2'nvelope and the bottom of the envelope.')
      IF(MESAGE.EQ. 9)WRITE(ITTY,9)
       9 FORMAT(' Type the total height of envelope stated a',
         1's the number  of  lines  from  top  to'/' bottom. ',
         2'  If  the  envelopes  are  on continuous fanfold p',
         3'aper, then this is the'/' distance between the exp',
         4'osed bottoms of consecutive envelopes.')
       IF(MESAGE.EQ.10)WRITE(ITTY,10)
     10 FORMAT(' Type the number of blank columns by which ',
         1'the address in the upper  left  corner'/' of  the ',
         2' envelope  is to be shifted to the right of the le',
         3'ftmost column in which'/' the terminal can type an',
         4'ything')
         IF(MESAGE.EQ.11)WRITE(ITTY,11)
     11 FORMAT(' Type the number of blank columns by which ',
         1'the  address  in  the  middle  of  the'/' envelope',
         2'  is  to  be  shifted  to  the right of the leftmo',
         3'st column in which the'/' terminal can type anythi',
         4'ng.')
 C
  C     CHARACTERS PER INCH
         IF(MESAGE.EQ.12)WRITE(ITTY,12)
     12 FORMAT(' Answer'/' P  (for Pica) if the addresses w',
         1'ill be typed or printed using a pica spacing  of'/
      24X,'10 characters per inch'/' E  (for Elite) if usi',
         3'ng an elite spacing of 12 characters per inch')
    C
  C     OVERSTRIKE
        IF(MESAGE.EQ.13)WRITE(ITTY,13)
     13 FORMAT(' Answer'/' L  (for Light) if each line is t',
         1'o be typed once for normal density'/' D  (for Dark',
         2') if each line is to be typed twice to make it dar',
         3'ker')
 C
  C     COPIES OF EACH ENVELOPE
          IF(MESAGE.EQ.14)WRITE(ITTY,14)
     14 FORMAT(' Each address can be typed onto 1 or  sever',
         1'al  envelopes.   Type  the  number  of'/' envelope',
         2's to be typed with each address')
   C
  C     ASK IF BLANK LINE APPEARED AFTER PREVIOUS ANSWER
          IF(MESAGE.EQ.15)WRITE(ITTY,15)
     15 FORMAT(' The answer to this question is used to kee',
         1'p track of the number of  lines  which'/' have bee',
         2'n displayed on the terminal.  Answer'/' Y  (for Ye',
         3's) if a blank line appeared between the last answe',
         4'r  which  you  typed'/4X,'and  this  question.   T',
         5'he  dialog between you and the program will have b',
         6'een'/4X,'mostly double spaced.'/' N  (for No) if a',
         7' blank line did not appear between the  last  answ',
         8'er  which  you'/4X,'typed  and  this  question.  T',
         9'he dialog between you and the program will have')
        IF(MESAGE.EQ.15)WRITE(ITTY,16)
     16 FORMAT(4X,'been mostly single spaced.')
   C
  C     TEXT OF RETURN ADDRESS
      IF(MESAGE.EQ.16)WRITE(ITTY,17)
     17 FORMAT(' Type the first line of the return address.',
         1'  If the envelopes are not to  include'/' return  ',
         2'addresses, then merely press the RETURN key here w',
         3'ithout typing anything'/' else before it.  The ret',
         4'urn address can include 1 or several lines.   Pres',
         5's  the'/' RETURN  key  an  extra  time  after  you',
         6' have typed the final line of the return'/' addres',
         7's.')
        IF(MESAGE.EQ.17)WRITE(ITTY,18)
     18 FORMAT(' Type the next line of the return address. ',
         1' Press the RETURN key  an  extra  time'/' after yo',
         2'u have typed the final line of the return address.')
    C
  C     POSITION OF RETURN ADDRESS
       IF(MESAGE.EQ.18)WRITE(ITTY,19)
     19 FORMAT(' The return address can be placed at the up',
         1'per left corner of each envelope  with'/' the chan',
         2'ging address at the center, or the relative positi',
         3'ons of these addresses'/' can be reversed.  Answer'/
         4' C  (for Corner) to get 1 envelope with return add',
         5'ress at upper left corner'/' M  (for Middle) to ge',
         6't 1 envelope with return address at the center'/' ',
         7'B  (for Both) to get first envelope with return ad',
         8'dress  at  corner  and  second'/4X,'envelope with ',
         9'return address at center')
C
  C     IDENTIFY PROGRAM TO USER
         IF(MESAGE.EQ.19)WRITE(ITTY,20)
     20 FORMAT(' ENVELO (05/83)'/' Reads an address file in',
         1' which each line starts with an  at  sign  or  in ',
         2' which'/' addresses  are  separated  by  1  or  mo',
         3're  lines  starting with periods.  Types'/' addres',
         4'ses directly onto separate or fanfold envelopes or',
         5' writes an  output  file'/' to be printed later.'/)
C
  C     ASK IF ARE DONE PROCESSING
       IF(MESAGE.EQ.20)WRITE(ITTY,21)
     21 FORMAT(' Answer'/' Y  if you want to process more a',
         1'ddresses and type these onto the terminal'/' N  if',
         2' you do not want to process any more addresses')
         IF(MESAGE.EQ.21)WRITE(ITTY,22)
     22 FORMAT(' Answer'/' Y  if you want to process more a',
         1'ddresses and append these to the current  output'/
      24X,'file'/' N  if you do not want to process any mo',
         3're addresses')
  C
  C     ALLOW USER TO SELECT WORD OR PHRASE IN NEXT ENVELOP
       IF(MESAGE.EQ.22)WRITE(ITTY,23)
     23 FORMAT(' Do either of the following'/' 1  Merely pr',
         1'ess the RETURN key to produce all addresses.'/' 2 ',
         2' Type a word or a phrase to produce all  addresses',
         3'  starting  with  the  first'/4X,'address  contain',
         4'ing  this  word or phrase.  Addresses which appear',
         5' before the'/4X,'first appearance of this word or ',
         6' phrase  will  be  discarded.   Be  sure  to'/4X,
       7'include  all  punctuation  marks which appear betw',
         8'een the words if you type a')
        IF(MESAGE.EQ.22)WRITE(ITTY,24)
     24 FORMAT(4X,'phrase.  The cases of the alphabetic let',
         1'ters A through Z are ignored.')
      IF(MESAGE.EQ.23)WRITE(ITTY,25)
     25 FORMAT(' Do one of the following'/' 1  Merely press',
         1' the RETURN key to produce the first address.'/' 2',
         2'  Press the key for a single printing character an',
         3'd  then  the  RETURN  key  to'/4X,'obtain a target',
         4' envelope and then produce the first address.'/' 3',
         5'  Type a word or a phrase to produce the first add',
         6'ress containing this word  or'/4X,'phrase.   Addre',
         7'sses  which appear before the first appearance of ',
         8'this word or'/4X,'phrase will be discarded.  Be su',
         9're to include  all  punctuation  marks  which')
          IF(MESAGE.EQ.23)WRITE(ITTY,26)
     26 FORMAT(4X,'appear  between  the words if you type a',
         1' phrase.  The cases of the alphabetic'/4X,'letters',
         2' A through Z are ignored.')
          IF(MESAGE.EQ.27)WRITE(ITTY,27)
     27 FORMAT(' Do one of the following'/' 1  Merely press',
         1' the RETURN key to produce the next address.'/' 2 ',
         2' Press the TAB key and then the RETURN key  to  pr',
         3'oduce  the  current  address'/4X,'again.'/' 3  Pre',
         4'ss the key for a single printing character and  th',
         5'en  the  RETURN  key  to'/4X,'obtain a target enve',
         6'lope and then produce the current address again.'/
      7' 4  Type a word or a phrase to produce the next ad',
         8'dress containing this  word  or')
         IF(MESAGE.EQ.27)WRITE(ITTY,28)
     28 FORMAT(4X,'phrase.   Addresses  which  appear befor',
         1'e the next appearance of this word or'/4X,'phrase ',
         2'will be discarded.  Be sure to include  all  punct',
         3'uation  marks  which'/4X,'appear  between  the wor',
         4'ds if you type a phrase.  The cases of the alphabe',
         5'tic'/4X,'letters A through Z are ignored.')
   C
  C     INSTRUCT USER HOW TO INSERT ENVELOPES
      IF(MESAGE.EQ.24)WRITE(ITTY,29)
     29 FORMAT(' Line up top of first envelope flush with t',
         1'op of paper bail and flush  with  left'/' end  of ',
         2' platen, then press the RETURN key.  After each en',
         3'velope has been typed,'/' insert another and press',
         4' RETURN again.  Press  the  TAB  key  before  RETU',
         5'RN  to'/' instead  repeat  last  envelope.   Type ',
         6'a person''s name and RETURN to start with'/' that ',
         7'person.')
        IF(MESAGE.EQ.25)WRITE(ITTY,30)
     30 FORMAT(' Line up top of first envelope with top of ',
         1'printwheel and 1/2 inch right of  left'/' end  of ',
         2' platen,  then press the RETURN key.  After each e',
         3'nvelope has been typed'/' insert another and press',
         4' RETURN gain.   Press  the  TAB  key  before  RETU',
         5'RN  to'/' instead  repeat  last  envelope.   Type ',
         6'a person''s name and RETURN to start with'/' that ',
         7'person.')
        IF(MESAGE.EQ.26)WRITE(ITTY,31)
     31 FORMAT(' Insert envelopes on fanfold paper so print',
         1'head is on  the  bottom  line  of  the'/' previous',
         2'  envelope  and left edge of the backing paper is ',
         3'flush with left end of'/' the platen.  Press the R',
         4'ETURN key when the paper is properly aligned, or t',
         5'ype  a'/' single  letter  and  press RETURN for a ',
         6'target envelope, or type a person''s name'/' and p',
         7'ress RETURN to start at that person.')
         RETURN
       END