         TITLE    'T S S   L I N E   R E P O R T'
LINES    EQU      128
SIZE     EQU      16*4
         SYSTEM   SIG7
         SYSTEM   BPM
         REF      M:EI,M:EO,M:SI,M:LO
         DEF      BEGIN
BEGIN    EQU      %
         M:PC     '#'
READSI   M:READ   M:SI,(BUF,CARD),(SIZE,80),(ABN,OPEN1),(ERR,OPEN1)
         LI,12    CARD
         LH,13    M:SI+4
         SLS,13   -1
WRITELO  M:WRITE  M:LO,(BUF,*12),(SIZE,*13),(WAIT)
         LW,1     CARD
         CW,1     ='ALL '
         BE       OPEN1
         LI,1     -1
         LI,2     LINES
         STW,1    STATUS-1,2
         BDR,2    %-1
NEWCARD  LI,1     BA(CARD)
         LI,2     -1
         LI,3     BA(CARD)+79
GETLINE  BAL,8    PARSE
         M:XXX
         CI,6     0
         BE       CHKCOM
         STW,5    STATUS,5
         LI,5     1
         CI,4     ','
         BE       %+2
         LI,5     0
         STW,5    COMMA
         B        GETLINE
CHKCOM   MTW,0    COMMA
         BEZ      OPEN1
         LI,5     0
         STW,5    COMMA
         EXU      READSI
         LH,13    M:SI+4
         SLS,13   -1
         EXU      WRITELO
         B        NEWCARD
OPEN1    EQU      %
         M:OPEN   M:EI,(DEVICE,'9T'),(SN,'COCO'),(IN)
         M:OPEN   M:EO,(FILE,'COCO'),(OUT),(SAVE),(CONSEC)
READ1    EQU      %
         M:READ   M:EI,(BUF,TBUF),(SIZE,2048),(ABN,END1),(ERR,END1)
         LH,15    M:EI+4
         SLS,15   -2
         LI,1     BA(TBUF)
LOOP1    LB,3     0,1
         AI,1     1
         LB,2     0,1
         AI,1     1
         AND,2    M7
         LW,4     STATUS,2
         BLZ      BDR1
         LW,4     PNTR,2
         LW,5     RECS,2
         STB,3    *5,4
         AI,4     1
         STW,4    PNTR,2
         CI,4     SIZE
         BL       BDR1
         LW,6     KEYS,2
         LCI      2
         LM,8     *6
         STM,8    TEMPBUF
         LI,9     BA(TEMPBUF+2)
         STB,4    9
         LW,8     5
         SLS,8    2
         MBS,8    0
         AI,4     8
WRITEEO  M:WRITE  M:EO,(BUF,TEMPBUF),(SIZE,*4),(WAIT)
         AI,6     1
         MTW,1    0,6
         LI,7     0
         STW,7    PNTR,2
BDR1     BDR,15   LOOP1
         B        READ1
END1     EQU      %
         LB,7     10
         CI,7     5
         BE       LASTWRT
         CI,7     6
         BE       LASTWRT
         M:TYPE   (MESS,M1)
LASTWRT  LI,2     64
         LW,4     PNTR-1,2
         BLEZ     BDR2
         AI,4     1
         LW,5     RECS-1,2
         LW,6     KEYS-1,2
         LCI      2
         LM,8     *6
         STM,8    TEMPBUF
         LI,9     BA(TEMPBUF+2)
         STB,4    9
         LW,8     5
         SLS,8    2
         MBS,8    0
         AI,4     8
         EXU      WRITEEO
BDR2     BDR,2    LASTWRT+1
         M:REW    M:EI
         M:CLOSE  M:EI,(REM)
         M:CLOSE  M:EO,(SAVE)
         M:GCP    1
         CI,8     1
         BE       GOAHEAD
         M:TYPE   (MESS,M2)
         M:XXX
GOAHEAD  LW,6     9
         SLS,9    2
         LI,8     240
         STB,8    9
         LI,8     BA(SORTDATA)
         MBS,8    0
         LW,7     9
         SLS,7    -2
         LB,8     F:SORTIN
         SLS,8    2
         STB,8    9
         LI,8     BA(F:SORTIN)
         MBS,8    0
         LB,8     F:SORTOUT
         SLS,8    2
         STB,8    9
         LI,8     BA(F:SORTOUT)
         MBS,8    0
         M:LINK   'SORT',':SYS'
         CI,6     0
         BE       SORTOK
         M:TYPE   (MESS,M3)
         M:XXX
SORTOK   EQU      %
         M:OPEN   M:EO,(IN),(CONSEC),(SEQUEN),(REL)
         LI,6     0
READ2    EQU      %
         M:READ   M:EO,(BUF,TEMPBUF),(ABN,END2),(ERR,END2),;
         (SIZE,SIZE+8)
         LI,12    LINE#
         LH,15    M:EO+4
         SLS,15   -1
         AI,15    -8
         LI,1     BA(TEMPBUF+2)
         LW,7     TEMPBUF
         AND,7    M8
         CW,7     CURRENT
         BE       GETCHAR
         CI,6     0
         BE       NEWLINE
         AI,6     4
         LW,13    6
         EXU      WRITELO
NEWLINE  STW,7    CURRENT
         BAL,8    BINTOBCD
         LW,6     LINE#
         AND,6    =X'FFFFFF00'
         STW,6    L3+20
         STW,6    L4+20
         M:DEVICE M:LO,(HEADER,2,L4)
PAGELO   M:DEVICE M:LO,(PAGE)
         LI,13    1
         LI,6     14
         EXU      WRITELO
         BDR,6    %-1
         LI,8     2
         LI,13    88
STARS    LI,12    L1
         EXU      WRITELO
         BDR,8    %+3
         EXU      PAGELO
         B        GETCHAR
         LI,9     2
BLANKS   LI,12    L2
         EXU      WRITELO
         EXU      WRITELO
         BDR,9    %+2
         B        STARS
         LI,12    L3
         EXU      WRITELO
         B        BLANKS
GETCHAR  LB,2     0,1
         AI,1     1
         AND,2    M7
         LB,2     EBCDIC,2
         CI,2     X'FF'
         BE       BDR3
         CI,2     X'40'
         BL       SPECIAL
         STB,2    CARD,6
         AI,6     1
         B        BDR3
SPECIAL  CI,2     X'0D'
         BNE      BDR3
LINE     AI,6     4
         LW,13    6
         LI,12    LINE#
         EXU      WRITELO
         LI,6     0
BDR3     BDR,15   GETCHAR
         B        READ2
END2     EXU      PAGELO
         M:CLOSE  M:EO,(REL)
         M:EXIT
         PAGE
BINTOBCD EQU      %
         LW,5     7
         LI,3     BA(LINE#)+2
         LI,4     0
         DW,4     TEN
         AI,4     '0'
         STB,4    0,3
         AI,3     -1
         CI,5     0
         BE       *8
         B        BINTOBCD+2
TEN      DATA     10
         PAGE
M1       TEXTC    'TAPE READ ERROR, TRUNCATE TAPE.'
M2       TEXTC    'NO COMMON PAGES AVAILABLE FOR SORT'
M3       TEXTC    'SORT ERROR - CHECK R6'
M7       DATA     X'7F'
M8       DATA     X'FF'
TEMPBUF  RES      (SIZE+8)/4
SORTDATA TEXT      'M0072001001                             '
         TEXT      '        01A0001008A                     '
         DO1      4
         TEXT      '                                        '
COMMA    DATA     0
TBUF     RES      512
STATUS   RES      0
         DO1      LINES
         DATA     0
BUFADR   RES      0
         DO1      LINES
         RES      16
PNTR     RES      0
         DO1      LINES
         DATA     0
KEYADR   RES      0
I        DO       LINES
         GEN,8,24,32 7,I-1,0
         FIN
KEYS     RES      0
I        DO       128
         DATA     KEYADR+((I-1)*2)
         FIN
RECS     RES      0
I        DO       128
         DATA     BUFADR+((I-1)*16)
         FIN
LINE#    TEXT     '   :'
CARD     RES      0
         DO1      32
         TEXT     '    '
L1       RES      0
         DO1      12
         TEXT     ' '
         TEXT     '  **'
         DO1      8
         TEXT     '****'
         TEXT     '**  '
L2       RES      0
         DO1      12
         TEXT     ' '
         TEXT     '  * '
         DO1      8
         TEXT     ' '
         TEXT     ' *  '
L3       RES      0
         DO1      12
         TEXT     ' '
         TEXT     '  * OUTPUT  FROM  LINE  NUMBER       * '
L4       RES      0
         GEN,8,24 88,'   '
         DO1      11
         TEXT     ' '
         TEXT     '  * OUTPUT  FROM  LINE  NUMBER       * '
CURRENT  DATA     0
         PAGE
EBCDIC   EQU      %
*        ASCII TO EBCDIC CONVERSION TABLE
*        0
         DATA,8   X'0001020304090607'
         DATA,8   X'0805150B0C0D0E0F'
*        1
         DATA,8   X'10111213140A1617'
         DATA,8   X'18191A1B1C1D1E1F'
*        2
         DATA,8   X'405A7F7B5B6C507D'
         DATA,8   X'4D5D5C4E6B604B61'
*        3
         DATA,8   X'F0F1F2F3F4F5F6F7'
         DATA,8   X'F8F97A5E4C7E6E6F'
*        4
         DATA,8   X'7CC1C2C3C4C5C6C7'
         DATA,8   X'C8C9D1D2D3D4D5D6'
*        5
         DATA,8   X'D7D8D9E2E3E4E5E6'
         DATA,8   X'E7E8E9B4B1B56A6D'
*        6
         DATA,8   X'4A81828384858687'
         DATA,8   X'8889919293949596'
*        7
         DATA,8   X'979899A2A3A4A5A6'
         DATA,8   X'A7A8A9B24FB35FFF'
         PAGE
*        PARSER ROUTINE
*
*        IN       R1 - BYTE ADR FIELD TO BE PARSED
*                 R2 - +1  MOVE TO BYTE ADR IN R2
*                       0  CONVERT TO HEX IN R5
*                      -1  CONVERT TO BINART IN R5
*                 R3 - BYTE ADR OF LAST CHARCTER IN FIELD
*
*        OUT      R1 - BYTE ADR OF DELIMITER
*                 R4 - DELIMITER
*                 R5 - VALUE IF R2<0 OR R2=0
*                 R6 - NUMBER OF CHARACTERS PARSED
*
*        BAL,8    PARSE
*        +1  ERROR IN SYNTAX EXPECTED
*        +2 ALL OK
*
*                 REGISTERS 9-15 NOT CHANGED
*
         LOCAL    NEXT,BIN,HEX,STOP,SYNTAX,MASK,DLIMC,;
                  CHKHEX1,CHKHEX2
PARSE    EQU      %
         LI,5     0
         LI,6     0
         LI,0     8+1
         AI,2     0
         BGEZ     %+2
         LI,0     X'3FFFF'
NEXT     CW,1     3
         BG       STOP
         LB,4     0,1
         LB,7     DLIMC
         CB,4     DLIMC,7
         BE       STOP
         BDR,7    %-2
         AI,6     1
         AI,1     1
         AI,2     0
         BLZ      BIN
         BEZ      HEX
         STB,4    0,2
         AI,2     1
         B        NEXT
BIN      BDR,0    %+2
         B        SYNTAX
         CLM,4    CHKHEX1
         BCS,9    SYNTAX
         MI,5     10
         AND,4    MASK
         AW,5     4
         B        NEXT
HEX      BDR,0    %+2
         B        SYNTAX
         CLM,4    CHKHEX1
         BCR,9    %+4
         CLM,4    CHKHEX2
         BCS,9    SYNTAX
         AI,4     9
         AND,4    MASK
         SLS,5    4
         OR,5     4
         B        NEXT
STOP     AI,8     1
SYNTAX   AI,1     1
         B        *8
MASK     DATA     X'F'
DLIMC    TEXTC    ' ,'
         BOUND    8
CHKHEX1  DATA     X'F0',X'F9'
CHKHEX2  DATA     X'C1',X'C6'
         LOCAL
         PAGE
F:SORTIN DSECT    1
F:SORTIN M:DCB    (FILE,'COCO'),(CONSEC),(SEQUEN),(IN)
F:SORTOUT DSECT   1
F:SORTOUT M:DCB   (FILE,'COCO'),(CONSEC),(SEQUEN),(SAVE),(OUT)
         USECT    BEGIN
         END      BEGIN
