***********************************************************************
*M*      TAPECHST SUBROUTINES USED FOR CHARACTER STRING MANIPULATION
***********************************************************************
*P*
*P*      NAME:    TAPECHST
*P*
*P*      PURPOSE: TO PERFORM SYNTAX ANALYSIS ON CHARACTER STRINGS AND
*P*               TO PERFORM EBCDIC TO HEXADECIMAL CONVERSIONS.
*P*
*P*      DESCRIPTION: THIS MODULE CONTAINS A SET OF SUBROUTINES FOR
*P*               DOING SYNTAX ANALYSIS ON CHARACTER STRINGS OBTAINED
*P*               FROM CONTROL COMMANDS. SEE FUNCTION PREAMBLES FOR
*P*               NXACTCHR, NAMSCAN, CHARSCAN, HEXSCAN, QUOTSCAN,
*P*               DECSCAN, CHSTSCAN, GETCHST, AND DECCNVRT. THESE
*P*               SUBROUTINES ARE CALLED BY THE MODULE TAPEFCN FOR
*P*               PROCESSING THE WEOF, PFIL, AND REW COMMANDS.
*P*
*                 704740     SIGMA 5/7   BPM  M'TPECHST
         SYSTEM   SIG7FDP
R0       EQU      0
R1       EQU      1
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
SR1      EQU      8
SR2      EQU      9
SR3      EQU      10
SR4      EQU      11
D1       EQU      12
D2       EQU      13
D3       EQU      14
D4       EQU      15
         PAGE
*                 CHANGE STACK POINTER AMOUNT SPEC. BY 1ST ARGUMENT.
*                 SECOND ARGUMENT SPEC. AVAILABLE REGISTER.
BUMP     CNAME
         PROC
LF       LI,AF(2) AF(1)
         MSP,AF(2)  *R0
         PEND
*                 PUSH OR PULL N WORDS SPECIFIED BY 1ST ARGUMENT INTO
*                 REG'S STARTING AT 2ND ARGUMENT.
PUSH     CNAME    X'9',X'B'
PULL     CNAME    X'8',X'A'
         PROC
         DO       NUM(AF)=1
LF       GEN,1,7,4,3,17 1,NAME(1),AF(1),0,R0
         ELSE
         DO       AF(1)=1
LF       GEN,1,7,4,3,17 1,NAME(1),AF(2),0,R0
         ELSE
         DO       AF(1)=16
LF       LCI      0
         ELSE
LF       LCI      AF(1)
         FIN
         GEN,1,7,4,3,17 1,NAME(2),AF(2),0,R0
         FIN
         FIN
         PEND
         PAGE
         DEF      CHARSCAN          COMPARE THE NEXT ACTIVE CHARACTER
*,*                                 WITH SPECIFIED CHARACTER
         DEF      CHSTSCAN          GET NEXT FIELD FROM THE CONTROL
*,*                                 COMMAND
         DEF      DECSCAN           GET DECIMAL VALUE FROM THE SPECIFIED
*,*                                 CHARACTER STRING
         DEF      HEXSCAN           GET HEXADECIMAL VALUE FROM THE
*,*                                 SPECIFIED CHARACTER STRING
         DEF      NAMSCAN           GET NEXT FIELD FROM THE CONTROL
*,*                                 COMMAND
         DEF      NXACTCHR          GET NEXT ACTIVE CHARACTER FROM THE
*,*                                 CHARACTER STRING
         DEF      QUOTSCAN          GET THE NEXT FIELD FROM THE CHARACTER
*,*                                 STRING AND COMPARE
         DEF      CLD               EQU; OFFSET INTO PARAMETER TABLE
*,*                                 CONTAINING NUMBER AND BYTE ADDRESS OF
*,*                                 DELIMITERS
         DEF      CONTR             EQU; OFFSET INTO PARAMETER TABLE
*,*                                 CONTAINING ADDRESS OF ROUTINE TO READ
*,*                                 CONTINUATION RECORDS
         DEF      OUTR              EQU; OFFSET INTO PARAMETER TABLE
*,*                                 CONTAINING ADDRESS TO OUTPUT IMAGE
*,*                                 IN INPUT BUFFER
         DEF      CCP               EQU; OFFSET INTO PARAMETER TABLE
*,*                                 CONTAINING NEXT CHARACTER POSITION
*,*                                 IN INPUT RECORD
         DEF      FLAGS             EQU; OFFSET INTO PARAMETER TABLE
*,*                                 CONTAINING FLAGS INDICATING BLANK
*,*                                 ACTIVE ON SCAN, BLANK OUT INPUT RECORD
*,*                                 , AND BUFFER IS EMPTY
         DEF      CBUF              EQU; OFFSET INTO PARAMETER TABLE
*,*                                 CONTAINING INPUT RECORD BUFFER
*,*                                 ADDRESS
         DEF      PCCP              EQU; OFFSET INTO PARAMETER TABLE
*,*                                 CONTAINING CHARACTER POSITION
*,*                                 OF FIRST CHARACTER OF LAST FIELD
*,*                                 OBTAINED
         DEF      CSL               EQU; OFFSET ONTO PARAMETER TABLE
*,*                                 CONTAINING NUMBER OF CHARACTERS IN
*,*                                 CHARACTER STRING IN PARAMETER LIST
*,*                                 BUFFER
         DEF      PLB               EQU; OFFSET INTO PARAMETER TABLE
*,*                                 CONTAINING BUFFER WHICH CONTAINS
*,*                                 LAST CHARACTER STRING
         DEF      DECCNVRT          CONVERT EBCDIC VALUE TO HEXADECIMAL
         PAGE
K0       EQU      X'0'
K1       EQU      X'1'
K2       EQU      X'2'
K3       EQU      X'3'
K6       EQU      X'6'
K8       EQU      X'8'
K20      EQU      X'20'
K24      EQU      X'24'
K40      EQU      X'40'
K50      EQU      X'50'
K80      EQU      X'80'
KFF      EQU      X'FF'
KN1      EQU      -X'1'
KBLANK   EQU      ' '
KCRET    EQU      X'15'
KEOB     EQU      X'26'
KSCOLON  EQU      ';'
*
Y2       DATA     X'20000000'
Y4       DATA     X'40000000'
Y8       DATA     X'80000000'
YDFFFFFFF DATA    X'DFFFFFFF'
         PAGE
*F*
*F*      NAME:        NXACTCHR
*F*
*F*      PURPOSE:     TO GET THE NEXT ACTIVE CHARACTER FROM THE
*F*                   CHARACTER STRING BEING PROCESSED.
*F*
*F*      DESCRIPTION: NXACTCHR GETS THE NEXT ACTIVE CHARACTER FROM
*F*                   THE INPUT RECORD. IF A SEMICOLON IS
*F*                   ENCOUNTERED, THE OUTPUT ROUTINE (CCLIST) IS
*F*                   CALLED TO LIST THE CONTROL COMMAND. THE
*F*                   NEXT RECORD IS OBTAINED AND SCANNING
*F*                   CONTINUED. CONDITION CODES ARE SET TO
*F*                   INDICATE WHETHER A CHARACTER WAS OBTAINED OR
*F*                   WHETHER A DELIMITER WAS ENCOUNTERED.
*F*
*F*
*        NXACTCHR-NEXT ACTIVE CHARACTER ROUTINE GETS THE NEXT ACTIVE
*        CHARACTER FROM THE INPUT RECORD. IF A SEMICOLON IS ENCOUNTERED,
*        THE OUTR ROUTINE IS CALLED IF SPECIFIED. THEN THE NEXT
*        RECORD IS OBTAINED BY CALLING THE SPECIFIED CONTINUATION
*        ROUTINE IF A LEGAL CONTINUATION RECORD IS NOT OBTAINABLE.
*        ENTER WITH ADR OF CHAR PARAM LIST IN R7,
*        JIT POINTER IN R5 AND CUR CHAR OR ZERO IN SR1.
NXACTCHR EQU      %
         CI,SR1   K0                CHECK IF CUR CHAR = 0
         BNE      NXACH3            BRANCH IF NOT
NXACH1   EQU      %
         LW,R2    CCP,R7
         CI,R2    K50               CHECK IF CUR CHAR POSITION = 80
         BE       NXACH5            BRACH IF YES
         LW,R3    CBUF,R7
         LB,SR1   *R3,R2            PICK UP NEXT CHAR
         CI,SR1   KSCOLON           CHECK IF CUR CHAR IS A ;
         BE       NXACH6            BRANCH IF YES
         CI,SR1   KCRET             CHECK IF CARRIAGE RETURN
         BE       NXACH51
         CI,SR1   KEOB
         BE       NXACH51
         LW,R1    FLAGS,R7
         CW,R1    Y4                CHECK IF IN BLANK-OUT MODE
         BAZ      NXACH2            BRACH IF NOT
         LI,R4    K40
         STB,R4   *R3,R2            BLANK OUT CUR CHAR IN RECORD
NXACH2   EQU      %
         MTW,1    CCP,R7            SET CCP = CCP+1
NXACH3   EQU      %
         LW,R1    FLAGS,R7          (R1) = FLAGS
         CI,SR1   K40               CHECK IF CUR CHAR IS A BLANK
         BNE      NXACH4            BRANCH IF NOT
         CW,R1    Y8                CHECK IF BLANK IS ACTIVE
         BAZ      NXACH1            BRANCH IF NOT
NXACH4   EQU      %
         CI,SR1   KCRET             CHECK IF CARRIAGE RETURN
         BE       NXACH51
         CI,SR1   KEOB
         BE       NXACH51
         LW,R1    CLD,R7            (R1) = # OF DELIM, BYTE ADR OF DLM
         LB,R2    R1                (R2) = # OF DELIM
NXACH8   EQU      %
         CB,SR1   0,R1              CHECK IF CUR CHAR IS A DELIM
         BE       NXACH9            BRANCH IF YES
         AI,R1    K1
         BDR,R2   NXACH8
         LCI      K0                SET  CC1 = 0
         B        *SR4              EXIT
NXACH9   EQU      %
         LCI      K8                SET CC1 TO INDICATE CUR CHAR IS DLM
         B        *SR4
*
NXACH5   EQU      %
         LI,SR1   KEOB              SET CUR CHAR  = EOB
NXACH51  EQU      %
         PUSH     SR4
         LW,R1    OUTR,R7
         BEZ      NXACH52
         BAL,SR4  *R1               LIST LAST RECORD
NXACH52  EQU      %
         PULL     SR4
         B        NXACH9
*
NXACH6   EQU      %
         PUSH     2,SR3
         LW,R1    OUTR,R7
         BEZ      NXACH7
         BAL,SR4  *R1               GO TO OUTR ROUTINE
NXACH7   EQU      %
         LW,R1    CONTR,R7
         LB,R2    R1
         STW,R2   CCP,R7            SET CCP = CP (CONTINUATION POS)
         BAL,SR4  *R1               GET CONTINUATION RECORD
         LB,R2    SR3               (R2) = I/O COMPLETE CODE
         PULL     2,SR3
         CI,R2    K6                CHECK IF CONT. RECORD OBTAINED
         BE       NXACH1            BRANCH IF YES
         LI,SR1   KFF               SET CUR CHAR = FF
         LCI      K8                SET CC1 =1, ERR IN GETTING CONT
         B        *SR4                                            RECORD
         PAGE
*F*
*F*      NAME:        NAMSCAN
*F*
*F*      PURPOSE      TO GET THE NEXT FIELD FROM THE CONTROL
*F*                   COMMAND AND CHECK IF IT A LEGAL ALPHANUMERIC
*F*                   NAME.
*F*
*F*      DESCRIPTION: THE NEXT FIELD IS OBTAINED FROM THE CONTROL
*F*                   COMMAND, MOVED TO THE CHARACTER STRING
*F*                   BUFFER (CBUF) AND CHECKED FOR BEING A
*F*                   LEGAL ALPHANUMERIC CHARACTER. CONDITION
*F*                   CODES ARE SET TO INDICATE WHETHER OR
*F*                   NOT AN ILLEGAL CHARACTER STRING WAS
*F*                   SCANNED.
*F*
*        NAMSCAN-SCANS FOR LEGAL ALPHA NUMERIC NAME.
*        IF LEGAL CC1 =0, IF NOT CC1 = 1
*        ENTER WITH ADR OF CCPL IN R7, CUR CHAR OR ZERO IN SR1
*
*
*
NAMSCAN  EQU      %
         PUSH     13,SR4
         LW,R5    R3
         BAL,SR4  GETCHST           GET CHARACTER STRING
         BCS,8    COMEXIT2          BRANCH IF ILLEGAL STRING
         LI,R4    K0
NAMS1    EQU      %
         LB,R3    *R7,R2            SET (R3) = ITH CHAR
         LB,R3    CHTBL,R3          CHECK IF CHAR LEGAL ALPHANUMERIC
         BEZ      COMEXIT2            BRANCH IF NOT
         OR,R4    R3                   MERGE TYPE
NAMS2    EQU      %
         AI,R2    K1
         BDR,R1   NAMS1             SET N# N-1
         CI,R4    K2                CHECK IF AT LEAST ONE ALPHABETIC
         BL       COMEXIT2
         B        COMEXIT1
         PAGE
*F*
*F*      NAME:    CHARSCAN
*F*
*F*      PURPOSE: TO COMPARE CURRENT CHARACTER WITH THE CHARACTER
*F*               SPECIFIED IN SR2.
*F*
*F*      DESCRIPTION: THE NEXT ACTIVE CHARACTER FROM THE INPUT
*F*               CHARACTER STRING IS COMPARED WITH THE SPECIFIED
*F*               CHARACTER AND CONDITION CODES ARE SET TO REFLECT
*F*               THE RESULTS OF THE COMPARISIN.
*F*
*        CHARSCAN-COMPARES CUR CHAR WITH CHAR IN SR2. IF =, CC1 =0.
*        IF NOT CC1 = 1.
*        ENTER WITH PARAMETER LIST ADR IN R7, CUR CHAR OR ZERO IN SR1,
*        AND COMPARISON CHAR IN SR2.
*
CHARSCAN EQU      %
         PUSH     13,SR4
         LW,R5    R3
         BAL,SR4  NXACTCHR          GET NEXT ACTIVE CHAR
CHRS1    EQU      %
         CW,SR1   SR2
         BNE      CHRS3             BRANCH IF NOT
         LI,SR1   K0                SET CUR CHAR = 0
         PULL     13,SR4
         LCI      K0                SET CC1 =  0
         B        *SR4
CHRS3    EQU      %
         PULL     13,SR4
         LCI      K8
         B        *SR4              EXIT
CHRS0    EQU      0
         PAGE
*F*
*F*      NAME:        HEXSCAN
*F*
*F*      PURPOSE:     TO SCAN FOR A HEXADECIMAL NUMBER.
*F*
*F*      DESCRIPTION: THE NEXT FIELD IS OBTAINED FROM THE
*F*                   SPECIFIED CHARACTER STRING, MOVED
*F*                   TO THE CHARACTER STRING BUFFER
*F*                   (CBUF) AND CHECKED FOR BEING A LEGAL
*F*                   HEXADECIMAL CHARACTER . CONDITION CODES
*F*                   ARE SET TO INDICATE WHETHER OR NOT A LEGAL
*F*                   HEXDECIMAL FIELD WAS SCANNED.
*F*
*        HEXSCAN-SCANS FOR HEXIDECIMAL NUMBER.
*        IF LEGAL HEX # CC1 = 0 ,IF NOT CC1 = 1
*        ENTER WITH ADR OF PARAMETER LIST IN R7, CUR CHAR OR 0 IN SR1
*
*
*
HEXSCAN  EQU      %
         PUSH     13,SR4
         LW,R5    R3
         BAL,SR4  GETCHST           GET CHAR STRING
         BCS,8    COMEXIT2          BRANCH IF ILLEGAL CHAR STRING
HEXS1    EQU      %
         LB,R3    *R7,R2            SET (R3) =  ITH CHAR IN STRING
         LB,R3    CHTBL,R3
         BEZ      COMEXIT2          BRANCH IF NOT LEGAL ALPHANUMERIC
         CI,R3    K2                CHECKIF LEGAL HEX CHAR
         BG       COMEXIT2          BRANCH IF NOT
         AI,R2    K1
         BDR,R1   HEXS1             SET N =N-1
COMEXIT1 EQU      %
         LW,R3    YDFFFFFFF         RESET BUFFER
         AND,R3   FLAGS,R7                   EMPTY
         STW,R3   FLAGS,R7                        FLAG
         PULL     13,SR4
         LCI      K0                SET CC1 = 0
         B        *SR4              EXIT
         PAGE
*F*
*F*      NAME:        QUOTSCAN
*F*
*F*      PURPOSE:     TO GET THE NEXT FIELD FROM THE SPECIFIED
*F*                   CHARACTER STRING AND COMPARE IT WITH
*F*                   ANOTHER STRING OF CHARACTERS.
*F*
*F*      DESCRIPTION: THE NEXT FIELD IS OBTAINED FROM THE
*F*                   SPECIFIED CHARACTER STRING AND MOVED TO
*F*                   THE CHARACTER STRING BUFFER (CBUF). THE
*F*                   CHARACTER STRING OBTAINED IS COMPARED
*F*                   WITH A SPECIFIED CHARACTER STRING AND
*F*                   CONDITION CODES SET TO REFLECT WHETHER OR
*F*                   NOT THE CHARACTER STRING COMPARED.
*F*
*        QUOTSCAN-COMPARE QUOTE CONSTANT WITH CHAR STRING AND IF = SETS
*        CC1= 0 ,OTHERWISE SETS CC1 = 1.
*        QUOTE CONSTANT AND CHAR STRING CAN BE = ONLY IF THEY ARE
*        OF THE SAME LENGTH
*        ENTER WITH ADR OF PARAM LIST IN R7, CUR CHAR OR 0 IN SR1,
*        AND WORD ADR OF QUOTE CONSTANT IN SR2.
QUOTSCAN EQU      %
         PUSH     13,SR4
         LW,R5    R3
         BAL,SR4  GETCHST           GET CHAR STRING
         BCS,8    COMEXIT2          BRANCH IF ILLEGAL STRING
         LW,R4    SR2               (R4) = QUOTE CONSTANT ADR
         SLS,R4   2                 CONVERT TO BYTE ADR
         CB,R1    QC0,R4            COMPARE LENGTHS
         BNE      COMEXIT2
QUTS1    EQU      %
         AI,R4    K1
         LB,R3    *R7,R2
         CB,R3    QC0,R4            COMPARE CHARS
         BNE      COMEXIT2
         AI,R2    K1
         BDR,R1   QUTS1
         B        COMEXIT1
*
         PAGE
*F*
*F*      NAME:        DECSCAN
*F*
*F*      PURPOSE:     TO SCAN FOR A DECIMAL NUMBER.
*F*
*F*      DESCRIPTION: THE NEXT FIELD IS OBTAINED FROM THE
*F*                   SPECIFIED CHARACTER STRING, MOVED TO THE
*F*                   CHARACTER STRING BUFFER (CBUF) AND CHECKED
*F*                   FOR BEING A LEGAL DECIMAL CHARACTER.
*F*                   CONDITION CODES ARE SET TO INDICATE
*F*                   WHETHER OR NOT A LEGAL DECIMAL FIELD WAS
*F*                   SCANNED.
*F*
*        DECSCAN- SCANS FOR DECIMAL #.
*        IF LEGAL DEC # CC1 = 0, IF NOT CC1= 1
*        ENTER WITH ADR OF PARAM LIST IN R7 AND CUR CHAR OR 0 IN SR1.
*
*
DECSCAN  EQU      %
         PUSH     13,SR4
         LW,R5    R3
         BAL,SR4  GETCHST           GET CHAR STRING
         BCS,8    COMEXIT2          BRANCH IF ILLEGAL CHAR STRING
DECS1    EQU      %
         LB,R3    *R7,R2            SET (R3) = ITH CHAR IN STRING
         LB,R3    CHTBL,R3          CHECK IF
         CI,R3    K1                         LEGAL DECIMAL  CHAR
         BNE      COMEXIT2          BRANCH IF NOT
         AI,R2    K1
         BDR,R1   DECS1             SET N = N-1
         B        COMEXIT1
*
COMEXIT2 EQU      %
         PULL     13,SR4
         LCI      K8                SET CC1 = 1
         B        *SR4              EXIT
         PAGE
*F*
*F*      NAME:    CHSTSCAN
*F*
*F*      PURPOSE: TO GET THE NEXT FIELD FROM THE CONTROL COMMAND
*F*
*F*      DESCRIPTION: THE NEXT FIELD IS OBTAINED FROM THE SPECIFIED
*F*               CHARACTER STRING, MOVED TO THE CHARACTER STRING BUFFER
*F*               (CBUF). LEGALITY CHECKS ARE NOT PERFORMED ON THE
*F*               CHARACTERS. CONDITION CODES ARE SET TO INDICATE
*F*               WHETHER THE FIELD EXCEEDED THE MAXIMUM LENGTH OF 31
*F*               CHARACTERS.
*F*
*        CHSTSCAN-CHARACTER STRING SCAN- GETS THE NEXT CHARACTER
*                 STRING UP TO THE NEXT DELIMITER AND MOVES THE
*                 STRING TO THE PARAMETER LIST BUFFER.
*        ENTER WITH JOB POINTER IN R5, PARAM LIST POINTER IN R7,
*        CUR CHAR OR ZERO IN SR1
*        IF  N= 0  OR N > 31 CC1 IS SET  TO 1 . IF CHAR STRING IS NOT
*        OBTAINABLE BECAUSE OF ERROR IN TRYING TO OBTAIN A CONT. RECORD,
*        CC1 AND CC2 ARE BOTH SET TO ONE
*
CHSTSCAN EQU      %
         PUSH     13,SR4
         LW,R5    R3
         LI,R1    KBLANK
         LI,R2    BAPLB             (R2) = BYTE ADR OF PARAM LIST BUF
         LI,R3    K24
CHSTS1   EQU      %
         STB,R1   *R7,R2            FILL PARAM LIST BUFFER
         AI,R2    K1                            WITH BLANKS
         BDR,R3   CHSTS1
*
         LI,R2    K0                SET
         LW,R3    Y8                   BLANK
         STS,R2   FLAGS,R7                   NOT ACTIVE
*
         LI,R1    K0
         LI,R2    PLB
         AW,R2    R7
         LI,R3    K24
CHSTS2   EQU      %
         PUSH     3,R1
         BAL,SR4  NXACTCHR          GET NEXT ACTIVE CHAR
         BCS,8    CHSTS4            CHECK IF CHAR IS A DELIMITER
         LW,R3    Y8                SET
         STS,R3   FLAGS,R7              BLANK ACTIVE
         PULL     3,R1
         CI,R1    K0                CHECK IF FIRST CHAR OF FIELD
         BNE      CHSTS22
         LW,D1    CCP,R7            SET PCCP = CHAR POSITION OF 1ST
         AI,D1    KN1
         STW,D1   PCCP,R7                         CHAR OF FIELD
CHSTS22  EQU      %
         STB,SR1  *R2,R1            STORE CHAR IN BUFFER
         LI,SR1   K0                SET CUR CHAR =0
         AI,R1    K1                SET  N= N+1
         BDR,R3   CHSTS2
CHSTS21  EQU      %
         STW,R1   CSL,R7
         LI,R2    K0
         LW,R3    Y8
         STS,R2   FLAGS,R7
         PULL     13,SR4
         LC       Y8
         B        *SR4
CHSTS3   EQU      %
         STW,R1   CSL,R7            STORE N IN PARAM LIST
         LI,R2    K0                SET
         LW,R3    Y8                   BLANK
         STS,R2   FLAGS,R7                   NOT
         PULL     13,SR4
         LCI      K0
         B        *SR4              EXIT
CHSTS4   EQU      %
         PULL     3,R1
         CI,R1    K0                CHECK IF  N= 0
         BNE      CHSTS3
         B        CHSTS21
*
         PAGE
*F*
*F*      NAME:        GETCHST
*F*
*F*      PURPOSE:     GETS NEXT FIELD IF BUFFER IS EMPTY.
*F*
*F*      DESCRIPTION: GETCHST IS CALLED BY THE OTHER ROUTINES IN
*F*                   CHARROUT. IF THE CHARACTER STRING BUFFER IS
*F*                   EMPTY, THE NEXT CHARACTER STRING IS OBTAINED
*F*                   AND THE BUFFER IS MARKED FULL.
*F*
*        GETCHST-GETS THE NEXT CHAR STRING IF THE PARAM LIST BUFFER
*        IS EMPTY AND MARKS THE PARAM LIST BUFFER AS FULL. SETS
*        (R0) = (R1) = N, (R2) = BYTE ADR OF PARAM LIST BUFFER.
*        ENTER WITH ADR OF PARAM LIST IN R7, CUR CHAR OR 0 IN SR1.
*
*
GETCHST  EQU      %
         LI,R4    K0                FOR CONTINUATION
         LW,R3    Y2                CHECK
         AND,R3   FLAGS,R7               IF PARAM LIST BUF IS FULL
         BNEZ     GCHST1            BRANCH IF FULL
         PUSH     1,SR4
         STW,R5   R3
         BAL,SR4  CHSTSCAN          SCAN FOR CHAR STRING
         STCF     R4
         PULL     1,SR4
GCHST1   EQU      %
         LW,R1    CSL,R7
         LI,R2    BAPLB             (R2) = BYTE ADR OF PARAM LIST BUF
         LW,R3    Y2                SET
         STS,R3   FLAGS,R7               PARAM LIST BUF NOT EMPTY FLAG
         LC       R4
         B        *SR4              EXIT
         PAGE
C300     EQU      X'00030000'
C3000    EQU      X'03000000'
C33      EQU      X'00000303'
C3300    EQU      X'03030000'
C333     EQU      X'00030303'
C3333    EQU      X'03030303'
C222     EQU      X'00020202'
C2223    EQU      X'02020203'
C1100    EQU      X'01010000'
C1111    EQU      X'01010101'
CHTBL    DATA     0,0,0,0               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
         DATA     0,0,0,0               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
         DATA     0,0,0,0               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
         DATA     0,0,0,0               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
         DATA     0,0,0,3               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3
         DATA     0,0,3,0               0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0
         DATA     0,0,0,C300            0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0
         DATA     0,0,C33,C3000         0 0 0 0 0 0 0 0 0 0 3 3 3 0 0 0
         DATA     C222,C2223,C3300,0    0 2 2 2 2 2 2 3 3 3 0 0 0 0 0 0
         DATA     C333,C3333,C3300,0    0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0
         DATA     C33,C3333,C3300,0     0 0 3 3 3 3 3 3 3 3 0 0 0 0 0 0
         DATA     0,0,0,0               0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
         DATA     C222,C2223,C3300,0    0 2 2 2 2 2 2 3 3 3 0 0 0 0 0 0
         DATA     C333,C3333,C3300,0    0 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0
         DATA     C33,C3333,C3300,0     0 0 3 3 3 3 3 3 3 3 0 0 0 0 0 0
         DATA     C1111,C1111,C1100,0   1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
QC0      EQU      0
CLD      EQU      0
CONTR    EQU      1
OUTR     EQU      2
CCP      EQU      3
FLAGS    EQU      4
CBUF     EQU      4
CSL      EQU      5
PCCP     EQU      6
PLB      EQU      7
BAPLB    EQU      4*PLB
         PAGE
         PAGE
*F*
*F*      NAME:    DECCNVRT
*F*
*F*      PURPOSE: TO CONVERT AN EBCDIC VALUE TO HEXADECIMAL
*F*
*F*      DESCRIPTION: THE SPECIFIED EBCDIC VALUE IS CONVERTED TO
*F*               HEXADECIMAL. CONDITION CODES ARE SET IF SPECIFIED
*F*               VALUE CANNOT BE CONVERTED.
*F*
KA       EQU      X'A'
KNF0     EQU      -X'F0'
*
* DECIMAL EBCDIC TO HEXADECIMAL CONVERSION ROUTINE.
*  R1,R2,R4 USED   SR3=RESULT IF CORRECT   CC1=SET IF ERROR
*
*  ENTER HERE IF CHARSCAN PLIST IS CURRENT AND R7=ADDRESS.
*   NO OTHER SETUP REQUIREMENTS.
*
DECCNVRT LW,R2    CSL,R7
         LI,R1    PLB
         AW,R1    R7
* ENTER HERE IF NO PLIST CURRENT WITH R7.  R1=WORD ADDR. R2=NO.CHARS.
DECCNV0  SLS,R1   K2
         LW,SR3   R3
         LI,R3    K0
DECCNV1  LB,R4    0,R1
         AI,R4    KNF0
         MI,R3    KA
         BCS,4    DECCNV2
         AW,R3    R4
         AI,R1    K1
         BDR,R2   DECCNV1
         XW,SR3   R3
         LCI      K0
         B        *SR4
DECCNV2  LCI      K8
         B        *SR4
         END

