*DECK C$INSPS 
          IDENT  C$INSPS
          MACHINE ANY,I 
          TITLE  CBINSPS - LONG INSPECT ROUTINE 
          SST 
          COMMENT  LONG INSPECT ROUTINE 
* 
*         C.INSPS  INSPECT TALLYING 
*         C.INSPS  INSPECT REPLACING
* 
*         INPUT 
*                X0  SEARCH SPECIFICATION COUNT 
*                B3 = RESULT ADDRESS
*                B4 = RESULT BCP (+ SUBSC CHAR OFFSET IF SUBSCRIPTED) 
*                B5 = PARAMETER LIST ADDRESS
*                B6 = LAST PARAMETER ADDRESS
*                B7 = RESULT LENGTH 
* 
*         PARAMETER LIST
* 
*         VFD    6/TYPE,18/LENGTH,18/OFFSET,18/ADDRESS
* 
*      TYPE HAS THE FOLLOWING VALUES
*      NOTE THAT 60B IS ALSO THE STRING/UNSTRING IDENTIFIER DELIM PARAM 
*         00B = CHARS SEARCH SPECIFICATION (+ ITEM TO REPACE BY)
*         01B =     CHARS SEARCH SPEC (+ SIGNED LEFT NUMERIC REPL. ITEM)
*         02B =     CHARS SEARCH SPEC (+ SIGNED RIGHT NUMERIC REPL ITEM)
*         10B = ALL SEARCH SPECIFICATION (+ ITEM TO SEARCH FOR) 
*         11B =     ALL SEARCH SPEC (+ SIGNED LEFT NUMERIC SEARCH ITEM) 
*         12B =     ALL SEARCH SPEC (+ SIGNED RIGHT NUMERIC SEARCH ITEM)
*         20B = LEADING SEARCH SPECIFICATION (+ ITEM TO SEARCH FOR) 
*         21B =     LEADING SEARCH SPEC (+ SIGNED LEFT NUMERIC ITEM)
*         22B =     LEADING SEARCH SPEC (+ SIGNED RIGHT NUMERIC ITEM) 
*         30B = FIRST SEARCH SPECIFICATION (+ ITEM TO SEARCH FOR) 
*         31B =     FIRST SEARCH SPEC (+ SIGNED LEFT NUMERIC SEARCH ITM)
*         32B =     FIRST SEARCH SPEC (+ SIGNED RIGHT NUMERIC SRCH ITEM)
*         40B = ITEM TO REPLACE BY (+ OPERAND TO REPLACE BY)
*         41B =     ITEM TO REPLACE BY (+ SIGNED LEFT NUMERIC REPL ITEM)
*         42B =     ITEM TO REPLACE BY (+ SIGNED RIGHT NUMERIC REPL ITM)
*         60B = BEFORE SEARCH BOUNDARY (+ BOUNDARY ITEM)
*         61B =     BEFORE SEARCH BOUNDARY (+ SIGNED LEFT NUMERIC BOUND)
*         62B =     BEFORE SEARCH BOUNDARY (+ SIGNED LEFT NUMERIC BND)
*         70B = AFTER SEARCH BOUNDARY (+ BOUNDARY ITEM) 
*         71B =     AFTER SEARCH BOUNDARY (+ SIGNED LEFT NUMERIC BOUND) 
*         72B =     AFTER SEARCH BOUNDARY (+ SIGNED RIGHT NUMERIC BOUND)
* 
*      TALLY PARAMETER GROUP IS CONSTRUCTED AS FOLLOWS
* 
*         SEARCH SPECIFICATION
*        [BOUNDARY     ]               * IF BEFORE/AFTER
* 
*      REPLACE PARAMETER GROUP IS CONSTRUCTED AS FOLLOWS
* 
*         SEARCH SPECIFICATION
*        [BOUNDARY     ]               * IF BEFORE/AFTER
*        [REPLACE ITEM ]               * IF NOT CHAR SPECIFICATION
* 
* 
*         OUTPUT - NONE 
*         SAVED REGISTERS - B1
* 
          EJECT 
          ENTRY  C.INSRS
 C.INSRS  DATA   0
          SX7    B1 
          SA7    REPLACE
          EQ     CINSPL 
          SPACE  3
          ENTRY  C.INSPS
 C.INSPS  DATA   0
          MX7    0
          SA7    REPLACE
          SPACE  1
 CINSPL   BSS    0
          SX7    B3 
          SA7    INSPADDR    INSPECT FIELD ADDR 
          SX7    B4 
          SA7    INSPBCP     INSPECT FIELD BCP
          SX7    B5 
          SA7    PARMAD      PARAMETER LIST ADDR
          SX7    B6 
          SA7    PARMEND     PARAMETER END ADDR 
          SA1    B6 
          BX7    X1 
          SA7    BOUNDS 
          SX7    B6-B5
          SA7    PARMLEN     PARAMETER LIST LENGTH
          SX7    B7 
          SA7    INSPLEN     INSPECT FIELD LENGTH 
          BX7    X0 
          SA7    COUNT       SEARCH SPECIFICATION COUNT 
          RJ     BOUND       SET SEARCH ITEM BOUNDARIES 
*      START COMPARISON CYCLE 
          SB2    1           INSPECT CHARACTER
          SB3    1           SEARCH ITEM
 CINSP1   SA1    BOUNDS 
          SX1    X1-1 
          SA1    X1+B3
          SB4    X1 
          GT     B2,B4,CINSP3          INELIGIBLE FOR COMPARE 
          AX1    30 
          SB4    X1 
          LT     B2,B4,CINSP3          INELIGIBLE FOR COMPARE 
          SX7    B2 
          SA7    CHAR 
          SX7    B3 
          SA7    SEARCH 
          RJ     SRCHITM               GET SEARCH ITEM FROM PARAM LIST
          RJ     MATCH                 COMPARE
          SA1    CHAR 
          SB2    X1 
          SA2    SEARCH 
          SB3    X2 
          NE     B7,B0,CINSP2          NOT MATCH
          RJ     TALREPL               PROCESS TALLY OR REPLACING 
          EQ     CINSP4 
          SPACE  3
 CINSP2   BSS    0
          SA1    SPEC 
          MX0    3
          BX1    X0*X1
          LX1    3
          SX2    X1-2 
          NZ     X2,CINSP3   NOT LEADING
          SA1    BOUNDS 
          MX7    0
          SX2    X1-1 
          SA7    X2+B3       MAKE INELIGIBLE
 CINSP3   BSS    0
          SB3    B3+B1
          SA1    COUNT
          SB4    X1 
          LE     B3,B4,CINSP1          MORE SEARCH ITEMS
          SB2    B2+B1       ADVANCE CHARACTER
 CINSP4   SA1    INSPLEN
          SB4    X1 
          GT     B2,B4,CINSP5 
          SB3    B1          RECYCLE SEARCH ITEMS 
          EQ     CINSP1 
          SPACE  3
 CINSP5   BSS    0           INSPECT COMPLETE 
          SA1    REPLACE
          ZR     X1,C.INSPS 
          EQ     C.INSRS
          EJECT 
* 
*         BOUND  - SET UP BOUNDARY TABLE
* 
*         TABLE  FORMAT 
*                VFD  30/START,30/STOP
*                     START - FIRST CHARACTER ELIGIBLE
*                     STOP  - LAST CHARACTER ELIGIBLE 
*                           - 0 IF NEVER ELIGIBLE 
* 
 BOUND    BSS    1
          SB2    B0          SEARCH ITEM COUNT
          SB3    B0          PARAM LIST COUNT 
          SB5    B1          BOUND FLAG 
 BOUND0   SA1    PARMAD 
          MX0    6
          SA2    PARMLEN
          SB4    X2          NUMBER OF PARAMS 
 BOUND1   SA2    X1+B3
          BX3    X0*X2
          LX3    6
          SX4    X3-40B 
          SB3    B3+B1
          PL     X4,BOUND3   NOT SEARCH SPECIFICATION 
          SB2    B2+B1
          EQ     B5,B0,BOUND2      NO BOUND SPEC
          SB5    B0 
          EQ     BOUND1 
          SPACE  3
 BOUND2   SX6    B1 
          LX6    30 
          SA5    INSPLEN
          BX6    X6+X5
          SA5    BOUNDS 
          SX5    X5-2 
          SA6    X5+B2       30/1,30/INSPLEN
          SB5    B0 
          EQ     BOUND1 
          SPACE  3
 BOUND3   SX4    X3-60B 
          PL     X4,BOUND4   BOUND SPEC 
          LT     B3,B4,BOUND1      MORE PARAMETERS
          EQ     B5,B1,BOUND       DONE 
          SX6    B1 
          LX6    30 
          SA5    INSPLEN
          BX6    X6+X5
          SA5    BOUNDS 
          SX5    X5-1 
          SA6    X5+B2       30/1,30/INSPLEN
          EQ     BOUND
          SPACE  3
 BOUND4   SX6    B2 
          SA6    SEARCH 
          SX6    B3 
          SA6    PCOUNT 
          BX6    X2 
          SA6    SPEC 
          SX6    B1 
          SA6    CHAR        START COMPARE LOOP 
 BOUND5   RJ     MATCH
          EQ     B7,B0,BOUND7      MATCH
          SA1    CHAR 
          SA2    INSPLEN
          SX6    X1+B1
          IX3    X2-X6
          SA6    A1 
          PL     X3,BOUND5   COMPARE NEXT CHARACTER POSITION
          SB5    B1          NO MATCH FOR BOUND SPEC
          SA4    SEARCH 
          SB2    X4 
          SA4    PCOUNT 
          SB3    X4 
          SA1    SPEC 
          MX0    3
          BX2    X0*X1
          LX2    3
          SX3    X2-6 
          SA5    BOUNDS 
          SX5    X5-1 
          ZR     X3,BOUND6   BEFORE 
          MX6    0           AFTER
          SA6    B2+X5       30/0,30/0
          EQ     BOUND0 
          SPACE  3
 BOUND6   SX6    1
          LX6    30 
          SA1    INSPLEN
          BX6    X1+X6
          SA6    B2+X5       30/1,30/INSPLEN
          EQ     BOUND0 
          SPACE  3
 BOUND7   SA4    SEARCH      MATCH
          SB2    X4 
          SA4    PCOUNT 
          SB3    X4 
          SB5    B1 
          SA2    CHAR 
          SA1    SPEC 
          MX0    3
          BX3    X0*X1
          LX3    3
          SX4    X3-6 
          SA5    BOUNDS 
          SX5    X5-1 
          ZR     X4,BOUND8   BEFORE 
          AX1    36 
          SX7    X1 
          IX6    X2+X7
          LX6    30 
          SA2    INSPLEN
          BX6    X6+X2
          SA6    B2+X5       30/CHAR+LEN,30/INSPLEN 
          EQ     BOUND0 
          SPACE  3
 BOUND8   SX6    B1 
          SX2    X2-1 
          LX6    30 
          BX6    X2+X6
          SA6    B2+X5       30/1,30/CHAR-1 
          EQ     BOUND0 
          EJECT 
* 
*         MATCH  - DETERMINE IF SEARCH ITEM MATCHES NEXT CHARACTERS OF
*                  INSPECT ITEM 
* 
*         INPUT 
*                CHAR  INSPECT ITEM CHARACTER POSITION
*                SPEC  SEARCH ITEM PARAMETER
*         OUTPUT
*                B7 = 0 IF MATCH
*                  " 0 IF NO MATCH
* 
 MATCH    BSS    1
          SA1    INSPLEN     INSPECT ITEM LENGTH
          SA2    SPEC 
          MX0    3
          BX3    X0*X2
          SB7    B0 
          ZR     X3,MATCH    CHARACTERS SPEC
          LX2    24 
          SX3    X2          SEARCH ITEM LENGTH 
          SA4    CHAR        CURRENT CHARACTER POSITION 
          SX4    X4-1 
          IX5    X4+X3
          IX6    X1-X5
          PL     X6,MATCH1
          SB7    B1          SEARCH ITEM TOO LONG, NO MATCH 
          EQ     MATCH
          SPACE  3
 MATCH1   LX2    39 
          MX0    3
          BX3    X0*X2       LOW ORDER HALF OF TYPE 
          ZR     X3,MATCH2   NOT SIGNED NUMERIC 
          SA2    SPEC 
          RJ     SIGNNUM
          SA2    NUMBCP      OFFSET SEARCH ITEM 
          SB4    NUMTEMP     ADDRESS SEARCH ITEM
          SA3    SPEC 
          AX3    36 
          SB6    X3          LENGTH SEARCH ITEM 
          EQ     MATCH3 
          SPACE  3
 MATCH2   SA3    SPEC 
          SB4    X3          ADDRESS SEARCH ITEM
          AX3    18 
          SX2    X3          OFFSET SEARCH ITEM 
          AX3    18 
          SB6    X3          LENGTH SEARCH ITEM 
 MATCH3   SA1    INSPADDR 
          SB3    X1          ADDRESS INSPECT
          SA1    INSPBCP     OFFSET INSPECT 
          SA3    CHAR 
          SX3    X3-1 
          IX1    X1+X3        CURRENT OFFSET
          SB5    B6 
          RJ     =XC.BCDCM
          SB7    B3          RESULT 
          EQ     MATCH
          EJECT 
* 
*         SIGNNUM - MOVE SIGNED NUMERIC WITH OVERPUNCH TO NUMTMP
* 
*         INPUT 
*                X2 - SIGNED NUMERIC PARAMETER
* 
*         OUTPUT
*                NUMTEMP - CONTAINS ITEM RIGHT JUSTIFIED, SIGN REMOVED
*                NUMBCP - BCP OF ITEM IN NUMTEMP
 SIGNNUM  BSS    1
          SB3    X2          ADDRESS
          AX2    18 
          SX1    X2          OFFSET 
          AX2    18 
          SX0    X2          LENGTH 
          SX6    X2 
          SA6    NUMLEN 
          MX3    1
          LX3    6           SIGNED SOURCE
          BX0    X0+X3
          LX3    12 
          BX0    X0+X3
          MX3    1
          LX3    1
          AX2    18 
          BX3    X2*X3
          LX3    7
          BX0    X0+X3       CONTROL WORD 
          RJ     =XC.ND2RN
          SA3    NUMLEN 
          SX4    X3-10
          ZR     X4,SIGNNUM1
          PL     X4,SIGNNUM2
          BX6    -X4         SIZE LT 10 
          SA6    NUMBCP 
          BX7    X2 
          SA7    NUMTEMP
          EQ     SIGNNUM
          SPACE  3
 SIGNNUM1 BSS    0           SIZE EQ 10 
          MX6    0
          SA6    NUMBCP 
          BX7    X2 
          SA7    NUMTEMP
          EQ     SIGNNUM
          SPACE  3
 SIGNNUM2 BSS    0
          BX6    X1 
          SA6    NUMTEMP
          BX6    X2 
          SA6    A6+B1
          SX3    X3 
          SX4    20 
          IX6    X4-X3
          SA6    NUMBCP 
          EQ     SIGNNUM
          EJECT 
* 
*         SRCHITM - GET SEARCH SPECIFICATION PARAMETER
* 
*         INPUT 
*                SEARCH - ORDINAL OF SPECIFICATION
*         OUTPUT
*                SPEC - SEARCH PARAMETER
*                TALLY - TALLY SUBROUTINE ADDRESS IF APPROPRIATE
*                REPL - REPLACE ITEM PARAMETER IF APPROPRIATE 
* 
 SRCHITM  BSS    1
          SA1    PARMAD 
          SB2    B0          PARAM COUNT
          SA2    SEARCH 
          SB3    X2          SEARCH ORDINAL 
          MX0    3
          SB4    0           SEARCH COUNT 
 SRCHITM1 SA2    X1+B2
          BX3    X0*X2
          LX3    3
          SX4    X3-4 
          PL     X4,SRCHITM2 NOT SEARCH SPECIFICATION 
          SB4    B4+B1
          EQ     B4,B3,SRCHITM4 
 SRCHITM2 SB2    B2+B1
          SX4    X3-5 
          NZ     X4,SRCHITM1 NOT TALLY ROUTINE
          SX6    X2 
          SA6    TALLY
          EQ     SRCHITM1 
          SPACE  3
 SRCHITM4 BX6    X2 
          SA6    SPEC 
          SA1    REPLACE
          NZ     X1,SRCHITM6 REPLACING
          MX0    6
          SA2    A2+B1       LOOK FOR TALLY ITEM IN THIS GROUP
          BX3    X0*X2
          LX3    6
          SX4    X3-40B 
          NG     X4,SRCHITM  START OF NEXT GROUP
          SX4    X3-50B 
          ZR     X4,SRCHITM5  TALLY ROUTINE 
          SA2    A2+B1
          BX3    X0*X2
          LX3    6
          SX4    X3-50B 
          NZ     X4,SRCHITM 
 SRCHITM5 BX6    X2 
          SA6    TALLY
          EQ     SRCHITM
          SPACE  3
 SRCHITM6 MX0    3
          BX3    X0*X2
          ZR     X3,SRCHITM7 CHARACTERS 
          SA2    A2+B1
          BX3    X0*X2
          LX3    3
          SX4    X3-4 
          ZR     X4,SRCHITM7 REPLACE PARAMETER
          SA2    A2+B1
 SRCHITM7 BX6    X2 
          SA6    REPL 
          EQ     SRCHITM
          EJECT 
* 
*         TALREPL - TALLY OR REPLACE
*         OUTPUT
*                B2  NEXT CHARACTER 
* 
 TALREPL  BSS    1
          SA1    REPLACE
          NZ     X1,TALREPL1
          SA1    TALLY
          SB2    X1 
          JP     B2          EXECUTE IN-LINE TALLY INCREMENT ROUTINE
          SPACE  3
          ENTRY  C.INSTE
 C.INSTE  BSS    0
          SA1    SPEC        INCREMENT CHARACTER POSITION 
          LX1    24 
          SX2    X1 
          LX1    36 
          MX0    6
          BX0    X0*X1
          NZ     X0,TALREPL0 NOT CHARS
          SX2    B1 
 TALREPL0 BSS    0
          SA3    CHAR 
          IX6    X2+X3
          SA6    A3 
          SB2    X6 
          SA3    SEARCH 
          SB3    X3 
          EQ     TALREPL
          SPACE  3
 TALREPL1 BSS    0           REPLACE
          SA1    SPEC 
          MX0    3
          BX2    X0*X1
          LX2    3
          SX3    X2-3 
          NZ     X3,TALREPL2
          SA1    SEARCH      IF FIRST MAKE INELIGIBLE 
          SA2    BOUNDS 
          SB2    X2-1 
          MX6    0
          SA6    X1+B2
 TALREPL2 SA1    REPL 
          LX1    3
          BX0    X1*X0
          ZR     X0,TALREPL3 NOT SIGN OVERPUNCH 
          SA2    A1 
          RJ     SIGNNUM
          SB5    NUMTEMP     SOURCE ADDRESS 
          SA1    NUMBCP 
          SB6    X1          SOURCE OFFSET
          SA1    REPL 
          AX1    36 
          SB7    X1          LENGTH 
          EQ     TALREPL4 
          SPACE  3
 TALREPL3 SA1    REPL 
          SB5    X1          SOURCE ADDRESS 
          AX1    18 
          SB6    X1          SOURCE OFFSET
          AX1    18 
          SB7    X1          LENGTH 
 TALREPL4 SA1    INSPADDR 
          SB3    X1          DESTINATION ADDRESS
          SA1    CHAR 
          SA2    INSPBCP
          SB2    X1-1 
          SB4    B2+X2       DESTINATION OFFSET 
          MX2    0           NO BLANKS
          RJ     =XC.MOVE 
          EQ     C.INSTE
          EJECT 
 BOUNDS   BSS    1
 CHAR     BSS    1
 COUNT    BSS    1
 INSPADDR BSS    1
 INSPBCP  BSS    1
 INSPLEN  BSS    1
 NUMBCP   BSS    1
 NUMLEN   BSS    1
 NUMTEMP  BSS    2
 PARMAD   BSS    1
 PARMEND  BSS    1
 PARMLEN  BSS    1
 PCOUNT   BSS    1
 REPL     BSS    1
 REPLACE  BSS    1
 SEARCH   BSS    1
 SPEC     BSS    1
 TALLY    BSS    1
          END 
