         SYSTEM    SIG7
         SYSTEM    BPM
         PCC       0
         REF       M:UC
         REF       F:105
*
F:DCB    DSECT     1
F:DCB    M:DCB     (FILE),(KEYED),(IN),(SAVE)
         CSECT
*                                            EQU SECTION
* TAB SETTINGS FOR PROGRAM - 10, 20, 36
*
* REGISTER USAGE
* 0 - NOT USED
* 1 - BUFFER LENGTH  (EQU BUFL)
* 2 - INDEX THRU USER INPUT (EQU IND)
* 3 - USED IN THE SECTION CALLED 'VALIDITY'
* 4 - POINTS TO PROCESSOR, THEN TO COMMAND
* 6 - USED FOR TEMPORARY WORK
* 7 - USED FOR TEMPORARY WORK
* 8 - NOT USED
* 9 - NOT USED
*10 - NOT USED
*11 - NOT USED
*12 - INDICATES THAT LINE HAS BEEN COMPLETELY PARSED (EQU FINI)
*13 - SECONDARY BAL REGISTER; USED IN OUTPUT ROUTINE
*14 - BAL REGISTER
*15 - INDICATES TYPE OF OUTPUT TO BE PERFORMED
*      0 - LIST OF COMMANDS FOR PROCESSOR
*      2 - EXAMPLES OF COMMAND
*      4 - DESCRIPTION OF COMMAND FUNCTION
*      8 - FORMAT OF COMMAND; SET BY EXPLICIT REQUEST OR DEFAULT
         PAGE
*                                  EQU SECTION
BUFL     EQU       1
IND      EQU       2
FINI     EQU       12
         PAGE
*                                  RETURN ADDRESS STORAGE
         BOUND     4
RREADREQ RES       1
RHEADING RES       1
RPARSE   RES       1
RPART1   RES       1
RPART2   RES       1
RGETCOM  RES       1
RREADPRO RES       1
RTEXT    RES       1
         PAGE
         BOUND     4
PATCH    RES       40              PATCHING AREA
         PAGE
*                                  MESSAGES TO USER
HEADER   TEXT      'Explain INFO? (Y/N)'
LINE1    TEXT      'INFO provides reference information about:'
         GEN,8     X'0D'
NOYN     TEXT      'TYPE Y OR N'
ERR1A    TEXT      'PROCESSOR NAME -'
ERRB     TEXT      '- NOT VALID '
         GEN,8     X'0D'
ERR2A    TEXT      'COMMAND NAME -  '
ERR3A    TEXT      'OPTION -'
BG       TEXT      'INPUT INVALID - TOO BIG '
         GEN,8     X'0D'
BADEND   TEXT      'TO STOP THIS PROGRAM, ENTER THE WORD  END  ALONE'
         GEN,8     X'0D'
EXTRA    TEXT      'TOO MANY INPUT PARAMETERS   '
         GEN,8     X'0D'
OPTSMESS TEXT      'OPTION? '
         PAGE
*                                  DATA AREA
CR       DATA,2    X'0D0D'
         BOUND     4
KEY      RES       1
BLNK     DATA      X'40404040'     USED TO CLEAR BUFF
BUFF     RES       40              BUFFER FOR USER INPUT
BLANK    DATA      X'40404040'
         DATA      X'40404040'
         DATA      X'40404040'
STWORD   RES       6
N24      DATA      X'18000000'
TWELVE   DATA      X'0C000000'
THREE    DATA      X'03000000'
ADDRESS  RES       1               USED FOR INDIRECT ADDRESSING
END      TEXT      'END '
STARS    TEXT      '****'
EIGHTY   DATA      X'50000000'
EDIT1    DATA      1000
EDIT100  DATA      100000
EDIT400  DATA      400000
EDIT500  DATA      500000
VAL      DATA      8
         DATA      4
         DATA      2
TEMP     RES       3
ONE      DATA      X'01000000'
OPNFILES RES       1               INDICATES WHICH FILES ARE OPEN
CURPROC  RES       1
N1000    DATA      1000
COMIND   RES       1               HOLD POINTER TO COMMAND
         PAGE
*                                  TABLES
PROCTAB  RES       60              LIST OF PROCESSORS HANDLED BY
*                                    BY INFO; ROOM FOR 30 NAMES
COMTAB   RES       1200            LIST OF COMMANDS FOR CURRENT
*                                    PROCESSOR
OPTIONS  TEXT      'F           '
         TEXT      '            '
         TEXT      'D           '
         TEXT      '            '
         TEXT      'E           '
         TEXT      '            '
         TEXT      '            '
         TEXT      '            '
         PAGE
START    M:INT     START+3
         BAL,14    READPROC        GET LIST OF PROCESSORS
*                                    HANDLED BY INFO
         BAL,14    HEADING         PRINT HEADING FOR INFO
         LI,6      0               CURPROC INDICATES WHICH PROCESSOR'S
         STW,6     CURPROC           COMMANDS ARE IN COMTAB
READ     M:PC      '*'
         BAL,14    READREQ         READ USER'S REQUEST
PRINT    BAL,14    OUTPUT          PRINT REQUESTED INFORMATION
*                                  OUTPUT ROUTINE RETURNS TO READ
         PAGE
READPROC STW,14    RREADPRO        SAVE RETURN ADDRESS
         LI,4      0
         STW,4     OPNFILES        INDICATE ALL FILES CLOSED
         LI,4      1               NEED TO OPEN FFHELP1
         BAL,14    CLOSEOPN
         LW,14     RREADPRO
         LW,6      EDIT100         BUILD EDIT KEY
         OR,6      THREE           PROC LIST BEGINS AT KEY 100
         STW,6     KEY
         LI,6      PROCTAB         ADDRESS OF PROCS
         STW,6     ADDRESS         USE FOR INDIRECT ADDRESSING
         M:READ    F:DCB,(BUF,*ADDRESS),(KEY,KEY),(SIZE,24)
RDMORE   LB,7      *ADDRESS
         CI,7      X'40'           HAVE ALL PROCS.  BEEN READ?
         BE        *14             YES
         AI,6      6
         STW,6     ADDRESS         NEW ADDRESS IN TABLE
         M:READ    F:DCB,(BUF,*ADDRESS),(SIZE,24)
         B         RDMORE
         PAGE
HEADING  STW,14    RHEADING        SAVE RETURN ADDRESS
*                                  WRITE HEADER MESSAGE
         M:WRITE   M:UC,(BUF,HEADER),(SIZE,19)
*                                  PROMPT FOR Y/N
TRYAGAIN M:READ    M:UC,(BUF,BUFF),(SIZE,80)
         BAL,14    BUFLEN          LENGTH OF INPUT INTO BUFL
         LI,IND    0               SET INDEX THROUGH BUFF TO 0
         BAL,14    CLEAR           CLEAR PARSING STORAGE AREA
         BAL,14    ENDLINE         IS THERE ANY INPUT AT ALL?
         B         REMIND          NO
         BAL,14    BLANKS          GET RID OF PRECEDING BLANKS
         LI,7      0               SET INDEX
         BAL,14    PARSE           ISOLATE USER RESPONSE CHARS
         LB,6      STWORD
         CI,6      C'Y'            CAPITAL Y
         BE        EXPLAIN
         CI,6      C'y'            LITTLE Y
         BE        EXPLAIN
         CI,6      C'N'            CAPITAL N
         BE        RETURN          READY TO READ REQUEST
         CI,6      C'n'            LITTLE N
         BE        RETURN          READY TO READ REQUEST
REMIND   M:WRITE   F:105,(BUF,NOYN),(SIZE,11)
         B         TRYAGAIN        INPUT WAS NOT Y OR N
RETURN   LW,14     RHEADING
         B         *14
EXPLAIN  M:WRITE   F:105,(BUF,LINE1),(SIZE,45)
         LI,6      PROCTAB
MORE     STW,6     ADDRESS
         LB,7      *ADDRESS
         CI,7      X'40'
         BE        EXMORE
         M:WRITE   F:105,(BUF,*ADDRESS),(SIZE,24)
         AI,6      6
         B         MORE
EXMORE   M:WRITE   F:105,(BUF,CR),(SIZE,1)
         LW,6      EDIT1
         OR,6      THREE           EDIT KEY LENGTH
         STW,6     KEY
         BAL,14    TEXT
         LW,14     RHEADING
         B         *14
         PAGE
READREQ  STW,14    RREADREQ        SAVE RETURN ADDRESS
         LI,15     0               INDICATES TYPE OF OUTPUT;
*                                    SEE NOTES ON REGISTERS
REPEAT   BAL,14    INPUT           READ USER'S REQUEST
         BAL,14    BUFLEN          LENGTH OF INPUT INTO BUFL
         BAL,14    ENDLINE         WAS THERE ANY INPUT?
         B         REPEAT          NO
         BAL,14    PART1           GET PROCESSOR NAME
         BAL,14    ENDLINE         IS THAT ALL?
         B         COMMAND         YES; LIST THE PROCESSORS COMMANDS
         BAL,14    GETCOM          GET LIST OF PROCESSOR'S COMMANDS
         BAL,14    PART2           GET COMMAND NAME
         BAL,14    ENDLINE         IS THAT ALL?
         B         DEFAULT         PREPARE FOR DEFAULT
*                                    OUTPUT (FORMAT AND
*                                    DESCRIPTION)
*                                    THEN RETURN VIA RREADREQ
         BAL,14    PART3           GET F E D
         BAL,14    ENDLINE         IS THAT ALL?
         B         TOOMUCH         NO; SEND ERROR MESSAGE;
*                                    TOO MUCH INPUT
         LW,14     RREADREQ
         B         *14             GO BACK TO OUTPUT REQUESTED
*                                    INFORMATION
TOOMUCH  M:WRITE   F:105,(BUF,EXTRA),(SIZE,29)
         B         READ
         PAGE
GETCOM   STW,14    RGETCOM         SAVE RETURN ADDRESS
         BAL,14    CLOSEOPN        DO NOT MOVE THIS INSTRUCTION;
*                                    EVEN IF THE LIST OF COMMANDS
*                                    IS CORRECT FOR THIS PROCESSOR,
*                                    THE FILE MAY NOT BE OPEN
         LW,14     RGETCOM
         CW,4      CURPROC         COMMANDS ALREADY IN COMTAB?
         BE        *14             YES
         LW,6      EDIT500         NO; PREPARE KEY FOR READ
         OR,6      THREE
         STW,6     KEY
         LI,6      COMTAB          ADDRESS OF COMTAB
         STW,6     ADDRESS         USE FOR INDIRECT ADDRESSING
         M:READ    F:DCB,(BUF,*ADDRESS),(KEY,KEY),(SIZE,24)
MORECOM  LB,7      *ADDRESS
         CI,7      X'40'           ARE THERE MORE COMMANDS TO READ?
         BE        *14             NO
         AI,6      6               YES
         STW,6     ADDRESS
         M:READ    F:DCB,(BUF,*ADDRESS),(SIZE,24)
         B         MORECOM
         PAGE
OUTPUT   M:WRITE   M:UC,(BUF,CR),(SIZE,1)
         LI,FINI   0               USED LATER AS OPTIONS FLAG
         LW,7      COMIND
         MW,6      N1000           PREPARE EDIT KEY
         STW,7     4
         OR,4      THREE
         CI,15     8               IS FORMAT TO BE PRINTED?
         BL        A2              NO
         BAL,13    READB           YES
         AI,15     -8
A2       AI,4      100000          POSITION TO DESCRIPTION
         CI,15     4               IS DESCRIPTION TO BE PRINTED?
         BL        A3              NO
         LI,FINI   1               YES-LOOK FOR OPTIONS LATER
         BAL,13    READB           PRINT DESCRIPTION NOW
         AI,15     -4
A3       AI,4      100000          POSITION TO EXAMPLES
         CI,15     2               ARE EXAMPLES TO BE PRINTED?
         BL        A4              NO
         BAL,13    READB           YES
A4       CI,FINI   0
         BE        READ            NO DESCRIPT.; NO OPTIONS
         B         OPTION
         PAGE
OPTION   AI,4      100000          POSITION TO OPTIONS
         STW,4     KEY
         M:READ    F:DCB,(BUF,BUFF),(SIZE,80),(KEY,KEY),(WAIT)
         LB,6      BUFF
         CI,6      X'7C'           CHECK FOR OPTION DESCRIPTIONS
         BE        READ            NO OPTIONS DESCRIBED IN FILE
         B         REQOPTS         OPTIONS DESCRIBED
         PAGE
REQOPTS  M:WRITE   F:105,(BUF,OPTSMESS),(SIZE,8)
         M:PC      '.'
READOP   LI,IND    0
         M:READ    M:UC,(BUF,BUFF),(SIZE,80)
         BAL,14    BUFLEN
         BAL,14    CLEAR
         BAL,14    ENDLINE
         B         ENDATOP
         BAL,14    BLANKS
         LI,7      0               SET INDEX
         BAL,14    PARSE
         LB,6      STWORD
         CI,6      X'40'
         BE        READ            NO MORE OPTIONS REQUESTED
         B         WRITEOP
         PAGE
WRITEOP  STW,4     KEY
         BAL,14    CLRBUFF
         M:READ    F:DCB,(BUF,BUFF),(SIZE,80),(KEY,KEY),(WAIT)
LOOP     LI,6      BA(STWORD)
         LI,7      BA(BUFF)
         OR,7      TWELVE
         CBS,6     0
         BE        PRINTOP
         BAL,14    CLRBUFF
         M:READ    F:DCB,(BUF,BUFF),(SIZE,80),(WAIT)
         LB,6      BUFF
         CI,6      X'7C'           BAD OPTION
         BNE       LOOP            NO
         M:WRITE   M:UC,(BUF,ERR3A),(SIZE,8)
         M:WRITE   M:UC,(BUF,STWORD),(SIZE,12)
         M:WRITE   F:105,(BUF,ERRB),(SIZE,13)
         B         READOP
         PAGE
PRINTOP  BAL,14    CLRBUFF
         M:READ    F:DCB,(BUF,BUFF),(SIZE,80),(WAIT)
         LB,6      BUFF
         CI,6      X'40'
         BNE       CARRET
         M:WRITE   F:105,(BUF,BUFF),(SIZE,80)
         B         PRINTOP
CARRET   M:WRITE   M:UC,(BUF,CR),(SIZE,1)
         B         READOP
         PAGE
ENDATOP  LB,6      STWORD
         CI,6      X'40'
         BE        READ
         B         WRITEOP
         PAGE
READB    STW,4     KEY
         BAL,14    CLRBUFF
         M:READ    F:DCB,(BUF,BUFF),(SIZE,80),(KEY,KEY),(WAIT)
         B         PRINTA
READA    BAL,14    CLRBUFF
         M:READ    F:DCB,(BUF,BUFF),(SIZE,80),(WAIT)
         LB,6      BUFF
         CI,6      X'7C'           CHECK FOR @ (END OF DATA)
         BNE       PRINTA
         M:WRITE   M:UC,(BUF,CR),(SIZE,1)
         B         *13
PRINTA   M:WRITE   M:UC,(BUF,BUFF),(SIZE,80)
         M:WRITE   M:UC,(BUF,CR),(SIZE,1)
         BAL,14    CLRBUFF
         B         READA
         PAGE
         PAGE
INPUT    LI,IND    0               SET INDEX THROUGH INPUT TO 0
         LI,FINI   0               FINI=1 WHEN LINE COMPLETELY
*                                    PARSED
*                                  OUTPUT TWO CARRIAGE RETURNS;
*                                    THEN READ REQUEST
         M:WRITE   M:UC,(BUF,CR),(SIZE,2)
         M:READ    M:UC,(BUF,BUFF),(SIZE,160)
         B         *14
         PAGE
ENDLINE  CW,IND    BUFL            HAVE ALL THE CHARACTERS BEEN
*                                    PARSED?
         BE        DONE            YES
         AI,14     1               NO
         B         *14
DONE     LI,FINI   1
         B         *14
         PAGE
PART1    STW,14    RPART1          SAVE RETURN ADDRESS
         BAL,14    CLEAR           CLEAR PARSING STORAGE AREA
         BAL,14    BLANKS          GET RID OF PRECEDING BLANKS
         LI,7      0               SET INDEX
         BAL,14    PARSE           ISOLATE USER RESPONSE CHARS
         LW,6      STWORD
         CW,6      END
         BE        EXIT            USER IS DONE
         LI,3      BA(PROCTAB)
         BAL,14    VALIDITY        IS IT A VALID PROCESSOR?
         B         YES             YES
*                                  NO; ISSUE MESSAGE
         M:WRITE   M:UC,(BUF,ERR1A),(SIZE,16)
         M:WRITE   M:UC,(BUF,STWORD),(SIZE,12)
         M:WRITE   F:105,(BUF,ERRB),(SIZE,13)
         B         READ            GO BACK TO READ NEW REQUEST
YES      AI,4      2               INCREASE INDEX TO GET CORRECT OPENS
*                                    AND CLOSES
         LW,14     RPART1
         B         *14
         PAGE
PART2    STW,14    RPART2          SAVE RETURN ADDRESS
         BAL,14    CLEAR           CLEAR PARSING STORAGE AREA
         BAL,14    BLANKS          GET RID OF PRECEDING BLANKS
         LI,7      0               SET INDEX
         BAL,14    PARSE           ISOLATE FIRST SET OF CHARACTERS
         BAL,14    ENDLINE         IS THAT ALL?
         B         DEFAULT         YES
*THIS NEXT AREA EXISTS BECAUSE SOME COMMANDS HAVE TWO WORD NAMES
         BAL,14    BLANKS          GET RID OF PRECEDING BLANKS
         LI,7      12              SET INDEX TO SECOND HALF OF
*                                    STWORD
         BAL,14    PARSE           ISOLATE NEXT SET OF CHARACTERS
         LI,3      BA(COMTAB)
         BAL,14    VALIDITY        IS IT A VALID COMMAND?
         B         COMOK2          YES-IT'S A VALID TWO WORD COMMAND
         LI,6      BA(STWORD)+12   CHECK FOR ONE WORD COMMAND
         LI,7      BA(TEMP)
         OR,7      TWELVE
         MBS,6     0
         LI,6      BA(BLANK)
         LI,7      BA(STWORD)+12
         OR,7      TWELVE
         MBS,6     0
         LI,3      BA(COMTAB)
         BAL,14    VALIDITY        IS IT A VALID COMMAND?
         B         COMOK1          YES-IT'S A VALID ONE WORD COMMAND
*THE COMMAND NAME IS NOT VALID; ISSUE MESSAGE
BADCOM   M:WRITE   M:UC,(BUF,ERR2A),(SIZE,16)
         M:WRITE   M:UC,(BUF,STWORD),(SIZE,12)
         M:WRITE   F:105,(BUF,ERRB),(SIZE,13)
         B         READ            GO BACK TO READ NEW REQUEST
         PAGE
*THE ENTIRE REQUEST HAS BEEN PARSED;CHECK TO SEE IF THE COMMAND
*NAME IS VALID.  IF SO, PRINT JUST THE COMMAND FORMAT.  IF NOT,
*PRINT AN ERROR MESSAGE.
DEFAULT  LI,3      BA(COMTAB)
         BAL,14    VALIDITY
         B         AROUND          THE COMMAND NAME IS VALID
         B         BADCOM          THE COMMAND NAME IS NOT VALID
AROUND   BAL,14    ADJUST
         LI,15     8               SET TO PRINT FORMAT ONLY
         B         PRINT
         PAGE
*A VALID TWO WORD COMMAND NAME HAS BEEN PARSED
COMOK2   BAL,14    ADJUST
         LW,14     RPART2
         B         *14
         PAGE
*A VALID ONE WORD COMMAND NAME HAS BEEN PARSED; EITHER OPTION
*LETTERS OR BLANKS EXIST IN 'TEMP'
COMOK1   BAL,14    ADJUST
         LI,8      0               8=0 MEANS OPTIONS OK SO FAR
         B         CHKTEMP
         PAGE
*THIS ROUTINE HANDLES ABBREVIATED COMMAND NAMES
ADJUST   CI,4      99              IN SECOND HALF OF TABLE?
         BLE       ADJUST1         NO
         AI,4      -99             ADJUST INDEX
ADJUST1  STW,4     COMIND          SAVE FOR USE AT OUTPUT
         B         *14
         PAGE
         PAGE
PART3    BAL,14    ENDLINE         AT END OF INPUT LINE
*IS THE ABOVE COMMAND NECESSARY?????
         B         GETFILE         YES
         BAL,14    CLEAR           CLEAR PARSING STORAGE AREA
         BAL,14    BLANKS          GET RID OF PRECEDING BLANKS
         LI,7      0               SET INDEX FOR PARSE ROUTINE
         BAL,14    PARSE           ISOLATE THE CHARACTERS
CHKOPT   LI,8      0               8=0 MEANS OPTIONS OK SO FAR
         LI,6      BA(STWORD)      MOVE STWORD TO TEMP TO CHECK
         LI,7      BA(TEMP)
         OR,7      TWELVE
         MBS,6     0
CHKTEMP  BAL,14    CLEAR           CLEAR STWORD
         LI,15     0               15 FLAGS WHICH OPTIONS REQUESTED
         LI,2      0               TEMPORARY INDEX THRU TEMP
NEXT     LB,6      TEMP,2
         CI,6      X'40'           IS IT A BLANK?
         BE        END3            YES
         STB,6     STWORD
         LI,3      BA(OPTIONS)
         BAL,14    VALIDITY        IS IT A VALID OPTION?
         B         SET3            YES
         M:WRITE M:UC,(BUF,ERR3A),(SIZE,8)
         M:WRITE M:UC,(BUF,STWORD),(SIZE,12)
         M:WRITE   F:105,(BUF,ERRB),(SIZE,13)
         LI,8      1               A BAD OPTION FOUND
         B         SET3A
SET3     OR,15     VAL,4
SET3A    AI,2      1               INDEX TO NEXT CHARACTER IN TEMP
         B         NEXT
END3     LW,8      8
         BNEZ      READ
         LW,FINI   FINI
         BEZ       GARBAGE
         B         GETFILE
*                                            CHECK FOR GARBAGE AT END
GARBAGE  BAL,14    ENDLINE
         B         %+1
         B         GETFILE
         BAL,12    BLANKS
         M:WRITE   F:105,(BUF,EXTRA),(SIZE,29)
         B         READ
GETFILE  B         PRINT
         PAGE
         PAGE
COMMAND  BAL,14    CLOSEOPN        OPEN FILE FOR PROCESSOR
         LW,6      EDIT400
         OR,6      THREE
         STW,6     KEY
         M:WRITE   M:UC,(BUF,CR),(SIZE,1)
         BAL,14    TEXT
         B         READ
         PAGE
         PAGE
BUFLEN   LH,BUFL   M:UC+4          DETERMINE LENGTH OF USER INPUT
         SLS,BUFL  -1
         AI,BUFL   -1
         B         *14
         PAGE
CLEAR    LI,6      BA(BLANK)       CLEAR STORAGE AREA FOR PARSING
         LI,7      BA(STWORD)
         OR,7      N24
         MBS,6     0
         B         *14
         PAGE
BLANKS   LB,6      BUFF,IND        GET RID OF PRECEDING BLANKS
         CI,6      X'40'
         BE        SUB1
         B         *14
SUB1     AI,IND    1
         CW,IND    BUFL            HAVE ALL CHARS BEEN PARSED?
         BE        DONE            (DONE IS IN ENDLINE SUBROUTINE)
         B         BLANKS
         PAGE
***NEED TO SET REGISTER 7 BEFORE COMING HERE
PARSE    CW,FINI   FINI            IS THERE ANYTHING TO PARSE?
         BNEZ      *14               NO
         STW,14    RPARSE            YES
PARSE1   STB,6     STWORD,7
         AI,IND    1
         BAL,14    ENDLINE
         B         AAA
         AI,7      1
         LB,6      BUFF,IND
         CI,6      X'40'
         BNE       BIG
         AI,IND    1
         B         AAA1
AAA      LI,FINI   1
AAA1     LW,14     RPARSE
         B         *14
BIG      CI,7      24
         BNE       PARSE1
         M:WRITE   F:105,(BUF,BG),(SIZE,25)
         B         READ
*
         PAGE
         PAGE
EXIT     LI,4      0               INDICATE NO FILES TO BE OPENED
         BAL,14    CLOSEOPN        CLOSE DCB
         M:EXIT
         PAGE
TEXT     STW,14    RTEXT
         BAL,14    CLRBUFF
         M:READ    F:DCB,(BUF,BUFF),(SIZE,80),(WAIT),(KEY,KEY)
MORETEXT LW,6      BUFF
         CW,6      STARS           END OF INFORMATION?
*                                    (END INDICATED BY 4 ASTERISKS)
         BE        OUT
         M:WRITE   M:UC,(BUF,BUFF),(SIZE,80)
         M:WRITE   M:UC,(BUF,CR),(SIZE,1)      ONE CARRIAGE RETURN
         BAL,14    CLRBUFF
         M:READ    F:DCB,(BUF,BUFF),(SIZE,80),(WAIT)
         B         MORETEXT
OUT      LW,14     RTEXT
         B         *14
         PAGE
CLRBUFF  LI,6      BA(BLNK)
         LI,7      BA(BUFF)
         OR,7      EIGHTY
         MBS,6     0
         B         *14
*
         PAGE
VALIDITY LI,4      0               SET INDEX FOR MATCH
AGAIN    LW,6      3
         LI,7      BA(STWORD)
         OR,7      N24
         CBS,6     0
         BE        *14
         AI,3      24              SKIP TO NEXT ENTRY IN LIST;
*                                    BYTE ADDRESSING
         AI,4      1               INDEX TO WHERE MATCH FOUND
         LW,6      3
         LI,7      BA(BLANK)
         OR,7      THREE           CHECK FOR 3 BLANKS
         CBS,6     0
         BE        NOTVALID
         B         AGAIN
NOTVALID AI,14     1
         B         *14
         PAGE
CLOSEOPN CW,4      OPNFILES
         BE        OPEN            DCB DOESN'T NEED TO BE CLOSED
         M:CLOSE   F:DCB,(SAVE)
OPEN     STW,4     OPNFILES
         EXU       OPENS,4
         B         *14
         PAGE
OPENS    NOP
         M:OPEN    F:DCB,(FILE,'FFHELP1','X')
         M:OPEN    F:DCB,(FILE,'FFHELP2','X')
         M:OPEN    F:DCB,(FILE,'FFHELP3','X')
         M:OPEN    F:DCB,(FILE,'FFHELP4','X')
         M:OPEN    F:DCB,(FILE,'FFHELP5','X')
         M:OPEN    F:DCB,(FILE,'FFHELP6','X')
         M:OPEN    F:DCB,(FILE,'FFHELP7','X')
         M:OPEN    F:DCB,(FILE,'FFHELP8','X')
         M:OPEN    F:DCB,(FILE,'FFHELP9','X')
         END       START
