         SYSTEM   SIG7FDP
         SYSTEM   BPM
         TITLE    'C:INS - RUNTIME ROUTINE FOR INSPECT(EXAMINE)'
         DEF      C:INS
         REF      C:CBD,C:VPL,C:ABA
         REF      C:CFD,C:CDB,TALLY
R1       EQU      1
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
R8       EQU      8
R9       EQU      9
R10      EQU      10
R11      EQU      11
         BOUND    8
DINSP    RES      1                 ADDR AND SIZE-INSPECT
SINSP    RES      1
DTALY    RES      1                 ADDR AND SIZE-TALLY
STALY    RES      1
DTRAL    RES      1                 ADDR AND SIZE-ALL
STRAL    RES      1
DRPBY    RES      1                 ADDR AND SIZE-BY
SRPBY    RES      1
DTRBA    RES      1                 ADDR AND SIZE-BEFORE
STRBA    RES      1
OINSP    RES      1                 CLASS AND OPTION-INSPECT
CINSP    RES      1
OTALY    RES      1                 CLASS AND OPTION-TALLY
CTALY    RES      1
OTRAL    RES      1                 CLASS AND OPTION-ALL
CTRAL    RES      1
ORPBY    RES      1                 CLASS AND OPTION-BY
CRPBY    RES      1
OTRBA    RES      1                 CLASS AND OPTION-BEFORE
CTRBA    RES      1
BADR1    DATA     0                 MATCHED ADDR-START
BADR2    DATA     0                             -END
ENDF     DATA     0                 CC OF CONTROL
DCMPR    DATA     X'000000F0'       VARIOUS DATA
CVDATA   RES      5
GPNUM    DATA     0                 GP NUMBER
FSZ      RES      0                 FLOATING SHORT ZERO
FLZ      DATA     X'48000000'       FLOATING LONG ZERO
         DATA     0
SBADR    DATA     BA(SBUF)          BYTE ADDR OF BUFFER-PERM
SBADE    DATA     0                 LAST INSPECT ADDR
TALYC    DATA     0                 TALLYING COUNT
VADRF    DATA     0
SUCMA    DATA     0                 SOURCE ADDR
MVB1     DATA     BA(CVDATA)
DLDMY    GEN,12,20  X'7E0',CVDATA     DL,0  CVDATA
PKDMY    GEN,12,3,17 X'760',5,CVDATA  PACK,0  CVDATA,R5
SBUF     RES      64                BUFFER FOR INSPECT DATA
SAVR     RES      15                SAVE REGISTERS
BBINT    DATA,2   BDDSP-BFLTL,BDDSP-BFLTL
         DATA,2   BPDEC-BFLTL,BPDEC-BFLTL
         DATA,2   ERROR-BFLTL,ERROR-BFLTL
         DATA,2   BBIN-BFLTL,BBIN-BFLTL
         DATA,2   BFLTS-BFLTL,BFLTL-BFLTL
BTOBI    DATA,2   NDSU-FLTL,NDSU-FLTL
         DATA,2   PDSU-FLTL,PDSU-FLTL
         DATA,2   ERROR-FLTL,ERROR-FLTL
         DATA,2   BINY-FLTL,BINY-FLTL
         DATA,2   FLTS-FLTL,FLTL-FLTL
*  INSPECT(EXAMINE) - TALLYING
C:INS    LCI      15                SAVE REGISTERS
         STM,R1   SAVR
         BAL,R9   VLAS              GET NEXT FIELD
         LW,R2    SINSP             LENGTH
         CI,R2    256
         BL       INS1
         SLD,R2   -32
         DW,R2    L(X'200')         PAGE COUNT FOR GP
         AI,R2    0
         BEZ      %+2
         AI,R3    1
         LW,R6    GPNUM
         BEZ      INS0              GP NEVER EXCUTED
         CW,R3    GPNUM
         BLE      INS1              ENOUGH BUFFER GOT
         OR,R6    L(X'09000000')
         CAL1,8   R6                RELEASE PAGES GOT
INS0     OR,R3    L(X'08000000')    GPLIST
         CAL1,8   R3                GET BUFFER NEEDED
         BCS,8    TERME             NO BUFFER AVAILABLE
         STW,R8   GPNUM
         SLS,R9   2
         STW,R9   SBADR             BA OF BUFFER GOT
INS1     LW,R3    SINSP             LENGTH OF INSPECT
         AI,R3    -1
         BAL,R11  CKBSL
         LW,R4    DINSP
         LW,R5    SBADR             BUFFER ADDR
         LW,13    CINSP             INSPECT CLASS
         BAL,R10  MVTIP             MOVE INSPECT TO WORK BUFFER
         AI,R5    1
         STW,R5   SBADE             LAST INSPECT ADDR
         STW,R5   BADR1             SET TO LAST BYTE
         BAL,R9   VLAS              GET NEXT FIELD
         LCF      ENDF
         BCS,1    INS20             REPLACING
INS2     BAL,R9   VLABA             GET NEXT FIELD
         LCF      ENDF
         BCS,2    INST              START TALLYING
         INT,R2   0,R7              LOOK AHEAD NEXT PARAM
         SLS,R2   -8
         CI,R2    4
         BE       INS4              INITIAL
INST     BAL,R9   TOBIN             TALLY TO BINARY
         MTW,0    OTRAL
         BNEZ     INS6              NOT CHARACTERS
         LW,R3    SBADE
INS3     SW,R3    SBADR             TALLYING COUNT
         LW,R1    SBADR
INST1    AWM,R3   TALYC
         LCF      ENDF
         BCS,2    INS10
         AI,R3    -1
         BAL,R11  CKBSL
         AI,R3    1
         BAL,R10  NULFL0
         B        INS10             NEXT ALL ITERATION
INS4     BAL,R9   VLAS              GET NEXT FIELD
         BAL,R10  FNDBA
         STD,R2   BADR1             SAVE ADDR OF BEFORE/AFTER
         SW,R3    R2
         BNEZ     INS45             INITIAL FOUND                       C:INS
         MTW,0    OTRBA             IF A 1, AFTER CLAUSE                C:INS
         BNEZ     INS45             DO NOT SET, NOT FOUND               C:INS
         STW,R3   DTRBA             SET INITIAL FLAG
INS45    RES      0                                                     C:INS
         MTW,0    OTRAL
         BNEZ     INS6              NOT CHARACTERS
         MTW,0    OTRBA
         BEZ      INS5              TALLYING BEFORE INITIAL
         LW,R3    SBADE
         SW,R3    BADR2             TALLYING AFTER INITIAL
         LW,R1    BADR2
         B        INST1
INS5     LW,R3    BADR1             TALLYING BEFORE INITIAL
         B        INS3
INS6     LW,R1    SBADR             CURRENT INSPECT ADDR
         MTW,0    DTRBA
         BEZ      INS8              NO INITIAL
         MTW,0    OTRBA
         BEZ      INS8              BEFORE INITIAL
         LW,R1    BADR2             BA OF INSPECT - AFTER INITIAL
INS8     BAL,R10  FNDAL
         CW,R2    R3
         BE       INS10             NOT MATCHED
         MTW,0    DTRBA
         BEZ      INS9              NO INITIAL
         MTW,0    OTRBA
         BNEZ     INS9              AFTER INITIAL
         CW,R3    BADR1
         BG       INS10             OVERLAP WITH INITIAL
INS9     BAL,R10  NULFL             ZERO FILL
         MTW,1    TALYC             UPDATE TALLYING COUNT
         CW,R1    BADR1
         BL       INS8              NEXT COMPARE
INS10    LI,R4    0
         STH,R4   DCMPR             CLEAR DIVIDE FLAG
         LCF      ENDF
         BCS,2    INS12             END OF INSPECT
         INT,R2   0,R7
         BCS,1    INS11             REPLACING FOLLOWS
         SLS,R2   -8
         CI,R2    2
         BE       INS2              ALL ITERATING
INS11    BAL,R9   BINTO             SET TALLYING
         B        INS1
INS12    BAL,R9   BINTO             SET TALLYING
         B        INSE              END OF INSPECT
*  INSPECT(EXAMINE) - REPLACING
INS20    BAL,R9   VLABA             GET BY FIELD
         LCF      ENDF
         BCS,2    INSR              START REPLACING
         INT,R2   0,R7              LOOK AHEAD NEXT PARAM
         SLS,R2   -8
         CI,R2    4
         BE       INS23             INITIAL
INSR     MTW,0    OTRAL
         BNEZ     INS24             NOT CHARACTERS
         LW,R3    SINSP             SIZE OF INSPECT
INS21    LW,R1    DINSP             BA OF INSPECT
         BAL,R11  CKBSL
         LW,R2    DRPBY
         LW,13    CRPBY
         BAL,R11  CKNDS
INS22    STB,R8   R1
         MBS,0    19
         AI,R9    -1
         BLZ      INS28             FINISHED
         LI,R8    255
         B        INS22
INS23    BAL,R9   VLAS              GET INITIAL PARAM
         BAL,R10  FNDBA
         STD,R2   BADR1             SAVE INITIAL ADDR
         SW,R3    R2
         BNEZ     INS235            INITIAL FOUND                       C:INS
         MTW,0    OTRBA             IF A 1, AFTER CLAUSE                C:INS
         BNEZ     INS235            DO NOT SET, NOT FOUND               C:INS
         STW,R3   DTRBA             SET INITIAL FLAG
INS235   RES      0                                                     C:INS
         MTW,0    OTRAL
         BNEZ     INS24             NOT CHARACTERS
         MTW,0    OTRBA
         BEZ      INSR1             BEFORE INITIAL
         LW,R1    BADR2
         SW,R1    SBADR
         LW,R3    SINSP
         SW,R3    R1                SIZE OF INSPECT
         AW,R1    DINSP             BA OF INSPECT
         B        INS21+1
INSR1    SW,R2    SBADR             SIZE OF INSPECT
         LW,R3    R2
         B        INS21
INS24    LW,R1    SBADR             CURRENT REPLACING ADDR
         MTW,0    DTRBA
         BEZ      INS26             NO INITIAL
         MTW,0    OTRBA
         BEZ      INS26             BEFORE INITIAL
         LW,R1    BADR2             BA - AFTER INITIAL
INS26    BAL,R10  FNDAL
         CW,R2    R3
         BE       INS28             NOT MATCHED
         MTW,0    DTRBA
         BEZ      INS27             NO INITIAL
         MTW,0    OTRBA
         BNEZ     INS27             AFTER INITIAL
         CW,R3    BADR1
         BG       INS28             OVERLAP WITH INITIAL
INS27    BAL,R10  NULFL             ZERO FILL
         LW,R5    R2
         SW,R5    SBADR
         AW,R5    DINSP             INSPECT ADDR
         LW,R4    DRPBY             BA OF BY
         LW,13    CRPBY             CLASS OF BY
         LW,R3    SRPBY
         BDR,R3   %+3
         BAL,R10  MVOBT             MOVE ONE BYTE ONLY
         B        %+2
         BAL,R10  MVTIP             MOVE TO INSPECT
         LW,R3    OTRAL
         CI,R3    3
         BE       INS28             FIRST
         CW,R1    BADR1
         BL       INS26
INS28    LI,R6    0
         STH,R6   DCMPR             CLEAR DIVIDE FLAG
         LCF      ENDF
         BCS,2    INSE              END OF REPLACING
         BAL,R9   VLAS
         B        INS20
INSE     LCI      15
         LM,R1    SAVR              RECOVER REGISTERS
         B        *R11
*  COMPARE INSPECT, ALL OR BEFORE STRING
FNDBA    LI,R6    4                 COMPARE BEFORE
         LW,R1    SBADR             SOURCE ADDR
         MTW,1    FNDBASW           SET ON FOR LATER TEST               C:INS
         B        SUCMP
FNDAL    LI,R6    2                 COMPARE ALL
SUCMP    LD,R2    DINSP,R6          BA AND SIZE
         LD,12    OINSP,R6          OPTION AND SIZE
         LW,R6    R3
         BDR,R3   SUCMP0            MORE THAN ONE CHARACTERS
         BAL,R11  CKNDS
SUCMN    CB,R4    0,R1
         BNE      SUCMN1            NOT MATCHED
         LW,R3    R1
         B        SUCMP6
SUCMN1   CI,12    2
         BE       SUCMP5            LEADING
         AI,R1    1
         CW,R1    SBADE
         BL       SUCMN
         B        SUCMP5            NOT MATCHED
SUCMP0   STW,R2   SUCMA             SAVE SOURCE ADDRESS
         MTH,0    DCMPR
         BNEZ     SUCMP1
         MTH,1    DCMPR             SET NO MORE DIVIDE FLAG
         BAL,R11  CKBSL
SUCMP1   LD,R4    R8                SAVE R8, R9
         LW,R3    R1
SUCMP2   STB,R4   R3
         CBS,R2   0
         BNE      SUCMP4            NOT MATCHED
         AI,R5    -1
         BLZ      SUCMP3            MATCHED
         LI,R4    255
         B        SUCMP2
SUCMP3   BAL,R11  CKNDS
         CB,R4    0,R3              COMPARE LAST BYTE
         BE       SUCMP6            MATCHED
SUCMP4   CI,12    2
         BE       SUCMP5            LEADING
         LW,R2    SUCMA
         AI,R1    1
         LW,R3    R1
         AW,R3    R6                LAST BA OF NEXT COMPARE
         CW,R3    SBADE
         BLE      SUCMP1            NOT FINISHED
SUCMP5   LW,R2    SBADE             NOT MATCHED
         LW,R3    SBADE
         B        SUCMP7
SUCMP6   LW,R2    R1                MATCHED
         AI,R3    1
SUCMP7   RES      0                                                     C:INS
         MTW,0    FNDBASW           DID WE COME FROM FNDBA              C:INS
         BEZ      *R10              NO                                  C:INS
         LI,R11   0                 SET OFF                             C:INS
         STW,R11  FNDBASW                                               C:INS
         MTW,0    OTRBA             IS THIS AN AFTER CLAUSE             C:INS
         BEZ      *R10              NO                                  C:INS
         LW,R2    SBADE             ENDING ADDR FOR AFTER               C:INS
         B        *R10                                                  C:INS
FNDBASW  DATA     0                 IF A 1,CAME FROM FNDBA              C:INS
CKBSL    LW,R9    R3
         LI,R8    0
         CI,R9    255
         BG       CKBSL1            GREATER THAN 255
         XW,R8    R9
         B        *R11
CKBSL1   LI,R4    255
         DW,R8    R4
         B        *R11
*  SEPARATE PARAMETERS AND RESOLVE VAR REC
VLABA    LI,R2    0                 CLEAR INITIAL FLAG
         STW,R2   DTRBA
VLAS     INT,R2   0,R7              GET PARAM FIELDS
VLAS1    STCF     ENDF              SAVE CONDITION CODE
         STB,R2   R4
         LW,R1    R2
         AND,R2   L(X'3')
         AW,R7    R2                ADJUST PARAM ADDR
         SLS,R1   -8                GET SUBCONTROL
         LI,R5    0
         SCD,R4   4                 CLASS IN R5
         SCS,R4   2
         AND,R4   L(X'3')           OPTION IN R4
         STD,R4   OINSP,R1
         CI,R1    2
         BNE      VLAS2             NOT ALL - FIRST
         LW,R2    R4
         BEZ      VLAS3             CHARACTERS
VLAS2    AI,R7    1
         LW,R2    0,R7              BA OF DATA
VLAS3    AI,R7    1
         STD,R2   DINSP,R1
         LCF      ENDF
         BCR,8    *R9               NO VAR REC
         LI,R6    0
         STW,R6   VADRF
         LW,R6    0,R7
         AI,R7    1
         CW,R6    R7
         BE       %+3               VAR REC PARAM FOLLOWS
         STW,R7   VADRF
         LW,R7    R6
         BAL,R11  C:VPL             RESOLVE VAR REC
         SW,R3    0,R7              ADJUST LENGTH
         LB,R11   R2                SAVE DECP
         AND,R2   L(X'FFFFFF')
         SW,R2    1,R7              ADJUST ADDRESS
         STB,R11  R2                RECOVER DECP
         STD,R2   DINSP,R1
         LW,R7    2,R7              NEXT PARAM ADDR
         MTW,0    VADRF
         BEZ      *R9
         LW,R7    VADRF
         B        *R9
*  MOVE BY DATA TO INSPECT AREA
MVTIP    STB,R8   R5
         MBS,R4   0
         AI,R9    -1
         BLZ      MVOBT             GO TO MOVE LAST BYTE
         LI,R8    255
         B        MVTIP
MVOBT    LB,R4    0,R4              LAST BYTE
         BAL,R11  CKNDS1
         STB,R4   0,R5
         B        *R10
CKNDS    LB,R4    0,R2              LAST BYTE
CKNDS1   AI,13    0
         BNEZ     *R11              NOT NUMERIC DISPLAY
         OR,R4    L(X'F0')          GET RID OF SIGN
         B        *R11
*  ZERO FILL THE PART MATCHED
NULFL    LW,R1    R2                BA OF DESTINATION
         SW,R3    R2                LENGTH
NULFL0   BDR,R3   NULFL1
         STB,R3   0,R1              ONE BYTE ZERO FILL
         AI,R1    1
         B        *R10
NULFL1   LD,R4    R8
         LI,R3    0
NULFL2   STB,R4   R1
         MBS,0    BA(DCMPR)+2       ZERO FILL
         AI,R5    -1
         BLZ      NULFL0+1          LAST BYTE
         LI,R4    255
         B        NULFL2
*  SET TALLYING DATA-NAME VALUE
TOBIN    LD,R2    DTALY
         CI,R2    BA(TALLY)
         BNE      TOBIN1
         LI,R4    0                 TALLY ITSELF
         B        BINY1
TOBIN1   STB,R3   MVB1              SIZE
         LW,R3    MVB1
         MBS,R2   0
         LW,R2    CTALY             CLASS OF TALLY
         LH,R2    BTOBI,R2
         B        FLTL,R2
FLTL     LD,R4    CVDATA            FLOATING
         B        FLTS1
FLTS     LW,R4    CVDATA
         LI,R5    0
FLTS1    LI,R10   0
         BAL,R11  C:CFD             FLOATING TO PACK
         BCS,4    ERROR             NEGATIVE OR OVERFLOW
         B        PDSU3
NDSU     LB,R4    MVB1              NUMERIC DISPLAY
         AI,R4    2
         SLS,R4   -1                L COUNT
         SLS,R4   20
         OR,R4    PKDMY
         LB,R5    MVB1
         AND,R5   L(X'1')           CHECK ODD OR EVEN
         AI,R5    -1
         B        PDSU2
PDSU     LB,R4    MVB1              PACKED DECIMAL
         SLS,R4   20
         OR,R4    DLDMY
PDSU2    EXU      R4
         LW,R10   DTALY             DECIMAL POINT
         SAS,R10  -24
PDSU3    LCW,R10  R10               FOR DECA SHIFT
         BEZ      PDSU4
         DSA      *R10
         LI,R10   0
PDSU4    BAL,R11  C:CDB             DECA TO BINARY
         BCS,4    ERROR
         B        BINY1
BINY     LW,R4    CVDATA            BINARY
BINY1    STW,R4   TALYC
         B        *R9
BINTO    XW,R4    TALYC             GET AND RESET TALLYING
         LW,R3    CTALY             CLASS OF TALLYING
         LH,R2    BBINT,R3
         B        BFLTL,R2
BFLTL    RES      0                 FLOATING LONG
BFLTS    LI,R5    0                 FLOATING SHORT
         SAD,R4   -8
         EOR,R4   FSZ               SET CHARACTERISTIC
         FAL,R4   FLZ
BBIN     STD,R4   CVDATA            BINARY OR INDEX
         LI,R2    BA(CVDATA)
         B        BINTO1
BDDSP    RES      0                 NDU OR NDS
BPDEC    LI,R10   0                 BIN TO PACK DECIMAL
         BAL,R11  C:CBD
         LW,R4    DTALY
         SAS,R4   -24               DECP
         DSA      *R4
         CI,R3    1
         BG       BPDEC1            PACKED DECIMAL
         UNPK,10  CVDATA            NDU OR NDS
         LI,R2    19
         B        BPDEC2
BPDEC1   DST,0    CVDATA            PACKED DECIMAL
         LI,R2    16
BPDEC2   SW,R2    STALY             SIZE
         AI,R2    BA(CVDATA)
BINTO1   LW,R3    DTALY             DESTINATION
         LW,R5    STALY             SIZE
         STB,R5   R3
         MBS,R2   0
         B        *R9
*  ERROR DETECTED DURING RUNTIME
ERROR    LI,R2    X'9A'             BAD DATA
         STB,R2   R10
         B        C:ABA
TERME    LI,R2    X'9B'             NO COMMON PAGES AVAILABLE
         STB,R2   R10