*DECK SETLINE 
          IDENT  SETLINE
          TITLE  SETLINE -  SET SOURCE LINE UP FOR TOKEN EXTRACTION 
          COMMENT  SET SOURCE LINE UP FOR TOKEN EXTRACTION
  
*CALL STRUCT
  
          SPACE  4
**        SETLINE -  SET SOURCE LINE UP FOR TOKEN EXTRACTION
* 
*     CALLING SEQUENCE- 
*         CALL   SETLINE
* 
*     GIVEN-
*         ENDCHRS = 1 (TRUE) IFF NO MORE CHARACTERS.
*         READLIB = 1 (TRUE) IFF READING FROM LIBRARY.
*         INFORMATION IN COPYBLK FOR NEWLINE. 
* 
*     DOES- 
*         LETS NEWLINE HANDLE READING/PRINTING LINES. 
*         PUTS ONE CHARACTER PER WORD INTO A LOCAL ARRAY (ONE OF TWO
*           DEPENDING ON READLIB) AND SETS ACHR = ADDRESS OF NEXT CHAR. 
*         BLANKS ON THE LEFT ARE STRIPPED IF THE CURRENT COLUMN 7 
*           HAS A HYPHEN.   THE LAST CHARACTER FROM THE PREVIOUS LINE 
*           IS SET UP JUST BEFORE A.CHR, SO SINGLE-CHARACTER BACKUP 
*           CAN BE DONE.   BLANKS ON THE RIGHT ARE DELIMITED BY 
*           A NEGATIVE INDEFINITE VALUE (I.E. IF IN QL THEN IGNORE, 
*           ELSE END-OF-LINE).   THE LINE WILL BE TERMINATED BY EITHER
*           A NEGATIVE OUT-OF-RANGE VALUE MEANING THAT THE NEXT COLUMN 7
*           DOES NOT HAVE A HYPHEN (I.E. IF IN QL THEN ERROR, ELSE EOL),
*           OR BY A NORMAL NEGATIVE VALUE (I. E. ALWAYS END-OF-LINE). 
*         IF END-OF-DATA, 
*           SETS EXCEPT = 2  (END-OF-DATA FOR GETSTR), AND
*           SETS X.TMP NEGATIVE.
*         ELSE
*           SETS LINENO = CURRENT LINE NUMBER, AND
*           SETS ACHR = ADDRESS OF NEXT CHARACTER, AND
*           SETS A.CHR = ADDRESS OF NEXT CHARACTER, AND 
*           SETS X.CHR = VALUE OF NEXT CHARACTER. 
*CALL SSCANREGS 
  
          TITLE 
  
*     IF NO MORE LINES, EXIT
  
 SETLINE  SUBR
          SA.LOD ENDCHRS           1 (TRUE) IFF NO MORE CHRS
          IFTHEN X.LOD"0           IF END-OF-DATA 
            SX.STO B..1+B..1
            SA.STO EXCEPT          EXCEPTIONAL SITUATION = END-OF-DATA
            MX.TMP -1                INDICATE END-OF-DATA 
___         EXIT                     EXIT FROM SETLINE
            ENDIF.
  
*     SAVE AX.SAV, B.SCT, B.CNT, B.SAL
  
          SX.STO A.SAV
          SA.STO A=SAV
          SA.SAV X=SAV
          SX.STO B.SCT
          SX.SAV B.CNT
          SA.STO B=SCT
          SA.SAV B=CNT
          SX.STO B.SAL
          SA.STO B=SAL
  
*     PRINT THE OLD PRTLINE AND SET NEW PRTLINE AND EOD 
  
          CALL   NEWLINE           SET EITHER EOD OR
                                     ADDRLIN+NEWCOL7+LINENO.
                                     (AT LEAST ONE OF COLUMNS 8-72
                                      WILL BE NON-BLANK)
          SB..1  1                 RESET CONSTANT 1 
  
*     IF END-OF-DATA, EXIT
  
          SA.LOD ENDCHRS           1 (TRUE) IFF NO MORE CHRS
          IFTHEN X.LOD"0           IF EOD = TRUE, 
            SA.LOD A=SAV
            SA.LOD X.LOD
            BX.SAV X.LOD
            SA.SAV A.LOD           RESTORE A.SAV
            SA.LOD X=SAV
            BX.SAV X.LOD           RESTORE X.SAV
            SA.LOD B=SCT
            SA.TMP B=CNT
            SB.SCT X.LOD
            SB.CNT X.TMP
          SA.LOD B=SAL
          SB.SAL X.LOD             RESTORE B.SAL
            SB..1  1
            SX.STO B..1+B..1
            SA.STO EXCEPT          EXCEPTIONAL SITUATION = END-OF-DATA
            MX.TMP -1                INDICATE END-OF-DATA 
___         EXIT
            ENDIF.
  
*     AIM FOR THE PROPER DESTINATION ARRAY
  
          SA.LOD READLIB           1 (TRUE) IFF READING FROM LIBRARY
          IFTHEN X.LOD"0           IF READING FROM LIBRARY
            SA.LIN CPYLINE
          ELSE-                    IF READING SOURCE INPUT
            SA.LIN SRCLINE
            ENDIF.
  
*     UNPACK RELEVANT CHARACTERS
          SX.STO B..0 
          SA.STO RADDR
  
  
          MX.MSK -6                77777777777777777700B
          SA.LOD ADDRLIN           ADDRESS OF COLUMNS 1-10
          SA.LOD X.LOD             COLUMNS 1-10 
          LX.LOD 6*8               RIGHT-JUSTIFY COLUMN 8 
          BX.STO -X.MSK*X.LOD        EXTRACT COLUMN 8 
          SA.STO A.LIN+1           STORE COLUMN 8 
          LX.LOD 6                 RIGHT-JUSTIFY COLUMN 9 
          BX.STO -X.MSK*X.LOD 
          SA.STO A.STO+B..1 
          LX.LOD 6                 RIGHT-JUSTIFY COLUMN 10
          BX.STO -X.MSK*X.LOD 
          SA.STO A.STO+B..1 
  
1         DUP    6                 11-20,21-30,31-40,41-50,51-60,61-70
          SA.LOD A.LOD+B..1        GET NEXT SOURCE WORD 
2         DUP    10 
          LX.LOD 6
          BX.STO -X.MSK*X.LOD 
          SA.STO A.STO+B..1 
2         ENDD
1         ENDD
  
          SA.LOD A.LOD+B..1        71-80
          LX.LOD 6                 RIGHT-JUSTIFY COLUMN 71
          BX.STO -X.MSK*X.LOD 
          SA.STO A.STO+B..1 
          LX.LOD 6                 RIGHT-JUSTIFY COLUMN 72
          BX.STO -X.MSK*X.LOD 
          SA.STO A.STO+B..1 
          SX.STO 1R                MAKE UP FOR NEG. INDEF.  IF -, 
          SA.STO A.STO+B..1          OR ENSURE COL. 73 = BLANK IF NOT - 
  
*     SET A.CHR/X.CHR ACCORDING TO CURRENT COLUMN 7 
  
          SA.LOD ADDRLIN           ADDRESS OF COLUMNS 1-10
          SA.LOD X.LOD             COLUMNS 1-10 
          AX.LOD 3*6               RIGHT-JUSTIFY COLUMN 7 
          BX.LOD -X.MSK*X.LOD      EXTRACT COLUMN 7 
          SX.TMP X.LOD-1R-
          IFTHEN X.TMP=0           IF COLUMN 7 IS A HYPHEN
            SA.CHR A.LIN-1+1         IGNORE LEADING BLANKS
1           LOOP1 
              SA.CHR A.CHR+1           EXAMINE NEXT CHARACTER 
              SX.TMP X.CHR-1R          IGNORE LEADING BLANKS
_             ZR     X.TMP,LOOP1       IF BLANK, LOOP FOR NEXT CHARACTER
          ELSE-                    IF COLUMN 7 IS NOT A HYPHEN
            SA.CHR A.LIN+1           START WITH COLUMN 8
            ENDIF.
          SA.LOD LASTCHR           ALLOW SINGLE-CHARACTER BACKUP
          BX.STO X.LOD
          SA.STO A.CHR-B..1 
  
*     SET TERMINATOR ACCORDING TO COLUMN 7 OF NEXT LINE 
  
          SA.LOD NEWCOL7
          SX.TMP X.LOD-1R-
          IFTHEN X.TMP=0           IF NEXT COLUMN 7 IS A HYPHEN 
            SA.LOD A.LIN-7+72+1      SKIP BACK OVER TRAILING BLANKS 
1           LOOP1 
              SA.LOD A.LOD-1
              SX.TMP X.LOD-1R 
_             ZR     X.TMP,LOOP1   IF BLANK, LOOP FOR NEXT CHARACTER
            MX.STO 2                 600...000B = NEGATIVE INDEFINITE 
            SA.STO A.LOD+B..1 
            BX.STO X.LOD             SAVE LAST NON-QL CHARACTER 
            SA.STO LASTCHR
            MX.STO -1                -1 MEANS NORMAL END-OF-LINE
            SA.STO A.LIN-7+72+1+1 
          ELSE-                    IF NEXT COLUMN 7 IS NOT A HYPHEN 
            MX.STO 1                 4000...000B MEANS NEGATIVE O.R.
            SA.STO A.LIN-7+72+1+1  LEAVE COLUMN 73 BLANK
            SX.STO 1R                SAVE LAST NON-QL CHARACTER 
            SA.STO LASTCHR
            ENDIF.
  
*     EXIT
  
                                   A.CHR/X.CHR HAVE BEEN SET
          SX.STO A.CHR             SET ACHR 
          SA.STO ACHR 
  
          SA.LOD A=SAV
          SA.LOD X.LOD
          BX.SAV X.LOD
          SA.SAV A.LOD             RESTORE S.SAV
          SA.LOD X=SAV
          BX.SAV X.LOD             RESTORE X.SAV
          SA.LOD B=SCT
          SA.TMP B=CNT
          SB.SCT X.LOD             RESTORE B.SCT
          SB.CNT X.TMP             RESTORE B.CNT
          SA.LOD B=SAL
          SB.SAL X.LOD             RESTORE B.SAL
          SB..1  1                 RESTORE B..1 
  
          SX.TMP 1                 SET X.TMP POSITIVE = NOT END-OF-DATA 
          EXIT
          TITLE  DATA 
  
*     DATA
  
          EXT    ACHR              VALUE OF A.CHR 
          EXT    ADDRLIN           ADDRESS OF PACKED LINE 
  
  
 A=SAV    BSS    1                 VALUE OF S.SAV 
  
 B=CNT    BSS    1                 VALUE OF B.CNT 
  
 B=SAL    BSS    1                 VALUE OF B.SAL 
  
 B=SCT    BSS    1                 VALUE OF B.SCT 
  
          EXT    ENDCHRS           1 (TRUE) IFF NO MORE CHARACTERS
  
 LASTCHR  BSS    1                 LAST NON-QL CHARACTER
          EXT  RADDR
  
          EXT    CPYLINE
  
          EXT    EXCEPT            WHICH GETSTR EXCEPTIONAL SITUATION - 
                                     0 = NORMAL 
                                     2 = END-OF-DATA
                                     3 = NUMALP3 IN GETSTR
  
          EXT    NEWCOL7
          EXT    READLIB           1 (TRUE) IFF READING FROM A LIBRARY
  
          EXT    SRCLINE           LINE OF CHARACTERS FROM SOURCE INPUT 
  
 X=SAV    BSS    1                 VALUE OF X.SAV 
  
          SPACE  4
          END 
