COMCRSP 
COMMON
          CTEXT  COMCRSP - REMOVE SECURE PARAMETERS FROM CONTROL CARD.
          SPACE  4,10 
          IF     -DEF,QUAL$,1 
          QUAL   COMCRSP
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RSP      SPACE  4,10 
***       RSP - REMOVE SECURE PARAMETER FROM CONTROL STATEMENT. 
*         J. L. LARSON.      77/09/06.
 RSP      SPACE  4,10 
***       RSP ELIMINATES SECURE PARAMETERS FROM A CONTROL STATEMENT 
*         BASED ON A LIST OF KEYWORDS AND/OR POSITIONS OF THE 
*         PARAMETERS TO BE REMOVED.  THE CONTROL STATEMENT IS 
*         REPACKED WITH BLANK PAD AFTER THE TERMINATOR TO 
*         PREVENT COMMENTS FROM BEING REPOSITIONED.  RSP INTERPRETS 
*         A ZERO CHARACTER AS END-OF-LINE.  IF *RSPL$* IS DEFINED,
*         NO STATEMENT LABEL OR PROGRAM NAME WILL BE SKIPPED BEFORE 
*         BEGINNING PARAMETER REMOVAL.
* 
*         ENTRY  (A4) = FWA ARGUMENT TABLE, TERMINATED BY ZERO WORD,
*                     IN FOLLOWING FORMAT - 
*                     12/ OP, 18/ ASV, 36/
*                     OP     1-2 CHARACTER KEYWORD. 
*                     ASV    ADDRESS OF ASSUMED VALUE.
*                     IF *ASV* .LT. 0, *OP* MUST NOT BE EQUIVALENCED. 
*                     NOTE - TABLE CAN BE GENERATED BY *ARG* MACRO. 
*                (A5) = FWA PACKED CONTROL STATEMENT BUFFER.
*                (X5) = FIRST WORD OF CONTROL STATEMENT.
*                (B1) = 1.
*                (B2) = 0, IF NO PARAMETERS TO SKIP BEFORE BEGINNING
*                     PARAMETER REMOVAL.
*                (B2) .GT. 0, IF SKIP TO SPECIAL SEPARATOR DEFINED BY 
*                     (B2) BEFORE BEGINNING PARAMETER REMOVAL.
*                (B2) .LT. 0, IF SKIP NUMBER OF PARAMETERS SPECIFIED BY 
*                     COMPLEMENT OF (B2) BEFORE BEGINNING PARAMETER 
*                     REMOVAL.
*                (B6) = FWA LIST OF KEYWORD/POSITIONS OF SECURE 
*                     PARAMETERS, TERMINATED BY ZERO WORD, IN 
*                     FOLLOWING FORMAT -
*                     42/ KW, 18/ PS
*                     KW     1-2 CHARACTER KEYWORD WHOSE VALUE IS 
*                            TO BE REMOVED, ZERO IF NOT APPLICABLE. 
*                     PS     POSITION OF PARAMETER TO BE REMOVED, 
*                            ZERO IF NOT APPLICABLE.
*                     AN EQUIVALENCED ARGUMENT WILL NOT BE REMOVED BY 
*                     A *PS* ENTRY AND A POSITIONAL PARAMETER WILL
*                     NOT BE REMOVED BY A *KW* ENTRY. 
* 
*         EXIT   CONTROL STATEMENT REPACKED IN PLACE WITH SECURE
*                PARAMETERS REMOVED.
* 
*         USES   A - 1, 2, 3, 5, 6, 7.
*                B - 2, 3, 4, 5, 6, 7.
*                X - ALL. 
* 
*         CALLS  GNP, RPS.
  
  
 RSP      SUBR               ENTRY/EXIT 
          SB5    60          INITIALIZE SHIFT COUNT 
          BX6    X6-X6
          SX0    B1          INITIALIZE PARAMETER POSITION INDICATOR
          SX7    B2+
          SA6    RSPA        CLEAR TERMINATOR FLAG
 RSPL$    IF     -DEF,RSPL$ 
  
*         SKIP STATEMENT LABEL AND PROGRAM NAME.
  
          SA1    RSPC        DISABLE LITERAL PROCESSING 
          SX6    1
          LX6    1R$
          BX6    X1+X6
          SA6    A1+
 RSP1     RJ     GNP         GET NEXT PARAMETER 
          NG     X6,RSPX     IF TERMINATOR ENCOUNTERED
          ZR     X4,RSP1     IF NO PARAMETER ASSEMBLED
          LX4    6
          MX6    -6 
          BX3    -X6*X4 
          SX3    X3-1R0 
          PL     X3,RSP1     IF FIRST CHARACTER NOT ALPHA 
          SA1    RSPC        ENABLE LITERAL PROCESSING
          SX6    1
          LX6    1R$
          BX6    -X6*X1 
          SA6    A1+
          LE     B2,RSP2     IF NOT SKIP TO SPECIAL SEPARATOR 
          SX7    B3-B2       CHECK FOR SPECIAL SEPARATOR
 RSPL$    ENDIF 
  
*         SKIP SPECIFIED NUMBER OF PARAMETERS OR TO SPECIAL SEPARATOR.
  
 RSP2     ZR     X7,RSP6     IF NO MORE PARAMETERS TO SKIP
          RJ     GNP         GET NEXT PARAMETER 
          NG     X6,RSPX     IF TERMINATOR ENCOUNTERED
          SX7    B3-B2       CHECK FOR SPECIAL SEPARATOR
          PL     B2,RSP2     IF SKIP TO SPECIAL SEPARATOR 
          SB2    B2+B1       DECREMENT PARAMETER SKIP COUNT 
          SX7    B2 
          EQ     RSP2        CONTINUE PARAMETER SKIP
  
*         PROCESS POSITIONAL AND/OR EQUIVALENCED PARAMETERS.
  
 RSP3     BX0    -X0         REVERSE EQUIVALENCED VALUE FLAG
          PL     B6,RSP5     IF NOT KEYWORD VALUE TO BE REMOVED 
          SB6    -B6
          ZR     X4,RSP5     IF NULL PARAMETER
 RSP4     SA1    RSPB        GET PREVIOUS PARAMETER ADDRESS 
          RJ     RPS         REPACK CONTROL STATEMENT 
 RSP5     NG     X0,RSP6     IF PROCESSING VALUE OF KEYWORD 
          SX0    X0+1        ADVANCE POSITION INDICATOR 
 RSP6     SA1    RSPA        GET TERMINATOR FLAG
          NG     X1,RSPX     IF TERMINATOR OR END-OF-LINE ENCOUNTERED 
          SX6    A5          SAVE CURRENT PARAMETER POSITION
          BX7    X5 
          SA6    RSPB 
          SB2    B5 
          RJ     GNP         GET NEXT PARAMETER 
          SA6    A1          SAVE TERMINATOR FLAG 
          NG     X0,RSP3     IF VALUE OF KEYWORD
          MX6    12 
          ZR     X4,RSP5     IF NULL PARAMETER
          SA1    A4-B1
          SA2    B6-B1
  
*         CHECK FOR KEYWORD.
  
 RSP7     SA1    A1+B1       GET ARGUMENT TABLE ENTRY 
          ZR     X1,RSP9     IF END OF ARGUMENT TABLE 
          BX2    X6*X1
          BX2    X2-X4
          NZ     X2,RSP7     IF NO MATCH
          LX1    12 
          SB3    B3-1R= 
          NZ     B3,RSP5     IF NOT EQUIVALENCED
          NG     X1,RSP5     IF KEYWORD NOT TO BE EQUIVALENCED
          BX0    -X0         REVERSE EQUIVALENCED VALUE FLAG
          MX6    42 
  
*         CHECK FOR PARAMETER TO BE REMOVED.
  
 RSP8     SA2    A2+B1       GET KEYWORD/POSITION TABLE ENTRY 
          ZR     X2,RSP5     IF END OF TABLE
          BX2    X6*X2
          ZR     X2,RSP8     IF NOT CORRECT TYPE OF ENTRY 
          BX1    X2-X4
          NZ     X1,RSP8     IF NO MATCH
          PL     X0,RSP4     IF POSITIONAL PARAMETER
          SB6    -B6         INDICATE VALUE OF KEYWORD TO BE REMOVED
          EQ     RSP6        CONTINUE PROCESSING PARAMETERS 
  
 RSP9     SX4    X0          PARAMETER POSITION 
          LX6    12 
          EQ     RSP8        CHECK FOR POSITION MATCH 
  
  
 RSPA     CON    0           TERMINATOR FLAG
 RSPB     CON    0           PREVIOUS PARAMETER ADDRESS 
 RSPC     CON    77776566000000000001B  SEPARATOR/TERMINATOR MASK 
 RSPD     CON    40000000000000410000B  TERMINATOR/END-OF-LINE MASK 
 GNP      SPACE  4,30 
**        GNP - GET NEXT PARAMETER. 
* 
*         ENTRY  (A5) = ADDRESS OF CURRENT WORD IN STATEMENT BUFFER.
*                (X5) = SHIFTED CURRENT WORD FROM STATEMENT BUFFER. 
*                (B5) = SHIFT COUNT FOR CURRENT WORD FROM CONTROL 
*                     STATEMENT BUFFER. 
* 
*         EXIT   (A5) = UPDATED ADDRESS OF CURRENT WORD IN BUFFER.
*                (X3) = SEPARATOR/TERMINATOR. 
*                (X4) = NEXT PARAMETER, LEFT JUSTIFIED, ZERO FILLED 
*                     (FIRST 10 CHARACTERS RETURNED IF PARAMETER
*                     TOO LONG).
*                (X5) = UPDATED SHIFTED CURRENT WORD FROM BUFFER. 
*                (X6) .LT. 0, IF TERMINATOR OR END-OF-LINE ENCOUNTERED. 
*                (B3) = SEPARATOR/TERMINATOR. 
*                (B5) = UPDATED SHIFT COUNT FOR CURRENT WORD FROM 
*                     CONTROL STATEMENT BUFFER. 
*                (B7) = NUMBER OF CHARACTERS PROCESSED. 
* 
*         USES   A - 2, 5.
*                B - 3, 4, 5, 7.
*                X - 1, 2, 3, 4, 5, 6.
  
  
 GNP3     NG     X6,GNP2.1   IF INSIDE A LITERAL
          SA2    RSPD        GET TERMINATOR/END-OF-LINE MASK
          LX4    B4          LEFT JUSTIFY PARAMETER 
          LX6    X2,B3
  
 GNP      SUBR               ENTRY/EXIT 
          BX4    X4-X4       INITIALIZE PARAMETER ASSEMBLY REGISTER 
          SB4    60          INITIALIZE PARAMETER SHIFT COUNT 
          BX6    X6-X6       CLEAR LITERAL FLAG 
          SA2    RSPC        GET SEPARATOR/TERMINATOR MASK
          SB7    -1 
 GNP1     LX5    6           GET NEXT CHARACTER 
          MX1    -6 
          SB5    B5-6 
          BX3    -X1*X5 
          SX1    X3-1R$ 
          NZ     X1,GNP1.1   IF NOT A LITERAL DELIMITER 
          SB3    1R$-59 
          AX1    X2,B3
          NG     X1,GNP1.1   IF NOT PROCESSING LITERALS 
          BX6    -X6         INVERT LITERAL FLAG
 GNP1.1   SX1    X3-1R
          NZ     B5,GNP2     IF MORE CHARACTERS IN CURRENT WORD 
          SA5    A5+1        GET NEXT WORD IN BUFFER
          SB5    60 
 GNP2     SB7    B7+B1       INCREMENT CHARACTERS PROCESSED COUNT 
          ZR     X1,GNP1     IF BLANK CHARACTER 
          SB3    X3 
          AX1    X2,B3
          LX1    -1 
          NG     X1,GNP3     IF SEPARATOR OR TERMINATOR ENCOUNTERED 
 GNP2.1   ZR     B4,GNP1     IF NO MORE ROOM IN ASSEMBLY REGISTER 
          LX4    6
          BX4    X4+X3
          SB4    B4-6 
          EQ     GNP1        CONTINUE PARAMETER ASSEMBLY
 RPS      SPACE  4,30 
**        RPS - REPACK CONTROL STATEMENT. 
* 
*         REPACKS CONTROL STATEMENT IN PLACE, ELIMINATING PREVIOUSLY
*         ASSEMBLED PARAMETER, AND ADDING APPROPRIATE NUMBER OF BLANKS
*         AFTER THE TERMINATOR TO PREVENT COMMENTS FROM BEING 
*         REPOSITIONED. 
* 
*         ENTRY  (A5) = ADDRESS OF CURRENT WORD IN STATEMENT BUFFER.
*                ((A1)) = (X1) = ADDRESS OF BEGINNING OF PREVIOUS 
*                     PARAMETER IN CONTROL STATEMENT BUFFER.
*                (X3) = SEPARATOR/TERMINATOR FROM LAST PARAMETER. 
*                (X5) = SHIFTED CURRENT WORD FROM STATEMENT BUFFER. 
*                (X7) = SHIFTED WORD FROM CONTROL STATEMENT BUFFER
*                     CONTAINING BEGINNING OF PREVIOUS PARAMETER. 
*                (B2) = SHIFT COUNT FOR PREVIOUS PARAMETER WORD.
*                (B5) = SHIFT COUNT FOR CURRENT STATEMENT BUFFER WORD.
*                (B7) = NUMBER OF CHARACTERS PROCESSED FOR PREVIOUS 
*                     PARAMETER.
* 
*         EXIT   (A5) = UPDATED ADDRESS OF CURRENT WORD IN BUFFER.
*                (X5) = UPDATED SHIFTED CURRENT WORD FROM BUFFER. 
*                (B5) = UPDATED SHIFT COUNT FOR CURRENT WORD. 
* 
*         USES   A - 2, 3, 5, 7.
*                B - 2, 3, 4, 5, 7. 
*                X - 1, 2, 3, 4, 5, 6, 7. 
  
  
 RPS      SUBR               ENTRY/EXIT 
          SB3    B2-B1       CLEAR ALL BUT CHARACTERS PRIOR TO REMOVAL
          MX6    1
          SB4    B2 
          AX6    B3 
          SA2    RSPD        GET TERMINATOR MASK
          BX7    -X6*X7 
          BX4    X4-X4       CLEAR LITERAL FLAG 
 RPS1     LX7    6           REPACK NEXT CHARACTER
          SB2    B2-6 
          BX7    X7+X3
          SX6    X3-1R$ 
          NZ     X6,RPS1.1   IF NOT A LITERAL DELIMITER 
          BX4    -X4         INVERT LITERAL FLAG
 RPS1.1   NZ     B2,RPS2     IF MORE ROOM IN ASSEMBLY REGISTER
          SA7    X1+         SAVE REPACKED WORD 
          SB2    60 
          BX7    X7-X7
          SX1    X1+B1
 RPS2     NG     B7,RPS4     IF ADDING BLANKS AFTER TERMINATOR
          ZR     X3,RPS5     IF END OF LINE ENCOUNTERED 
          SB3    X3+
          NG     X4,RPS2.1   IF INSIDE A LITERAL
          LX3    X2,B3
          NG     X3,RPS3     IF TERMINATOR ENCOUNTERED
 RPS2.1   LX5    6
          MX6    -6 
          SB5    B5-6 
          BX3    -X6*X5 
          NZ     B5,RPS1     IF MORE CHARACTERS IN CURRENT WORD 
          SA5    A5+B1       GET NEXT WORD IN BUFFER
          SB5    60 
          EQ     RPS1        CONTINUE REPACKING CONTROL STATEMENT 
  
 RPS3     SX3    1R          ADD BLANKS AFTER TERMINATOR
          SB7    -B7
          EQ     RPS1        CONTINUE REPACKING CHARACTERS
  
 RPS4     SB7    B7+B1
          LT     B7,RPS1     IF MORE BLANKS TO ADD AFTER TERMINATOR 
          SB3    B2-B1       ENTER CHARACTERS FOLLOWING TERMINATOR
          MX6    1
          AX6    B3 
          BX6    X6*X5
          BX7    X7+X6
 RPS5     LX7    B2          LEFT JUSTIFY ASSEMBLY
          SA3    A1          GET ADDRESS OF PREVIOUS PARAMETER WORD 
          SB5    B4-6        RESET SHIFT COUNT FOR CURRENT WORD 
          SA7    X1 
          SB3    60 
          SA5    X3          GET CURRENT REPACKED WORD
          SB4    B3-B5       REPOSITION CURRENT WORD
          LX5    B4 
          NZ     B5,RPSX     IF MORE CHARACTERS IN CURRENT WORD 
          SA5    A5+B1       GET NEXT WORD IN BUFFER
          SB5    B3 
          EQ     RPSX        RETURN 
          SPACE  4,10 
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 RSP      EQU    /COMCRSP/RSP 
 QUAL$    ENDIF 
          ENDX
