COMCCNS 
COMMON
          CTEXT  COMCCNS - CHARGE AND PROJECT SELECTION ROUTINES. 
          SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMCCNS
          BASE   D
*         COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC.  1996.
          SPACE  4
***       CNS - CHARGE AND PROJECT NUMBER SELECTION ROUTINES. 
*         G. S. YODER.    96/04/24. 
          SPACE  4
***       CNS CONTAINS ROUTINES TO MANAGE A CHARGE AND PROJECT NUMBER 
*         SELECTIONS TABLE.  THE TABLE CAN BE USED BY A UTILITY TO
*         SELECTIVELY PROCESS OBJECTS SUCH AS PERMANENT FILE CATALOGS 
*         WHICH HAVE A CHARGE AND PROJECT NUMBER ATTRIBUTE.  THE TABLE
*         IS MAINTAINED IN SORTED ORDER FOR DISPLAY PURPOSES EXCEPT FOR 
*         THE LAST ENTRY WHICH IS ALL ZEROES AND TERMINATES THE 
*         ENTRIES.
* 
*         TABLE ENTRY FORMAT -
* 
*         60/CHARGE NUMBER
*         60/PROJECT NUMBER FIRST WORD
*         60/PROJECT NUMBER SECOND WORD 
* 
*         THE NULL CHARGE NUMBER IS REPRESENTED BY A VALUE OF 1.  IF
*         ALL PROJECT NUMBERS FOR A CHARGE NUMBER ARE SELECTED, THE 
*         PROJECT NUMBER WORDS ARE ZERO.  THE NULL PROJECT NUMBER IS
*         REPRESENTED BY A VALUE OF 1.
* 
*         THE FOLLOWING REGISTER CONVENTIONS ARE OBSERVED IN ALL
*         ROUTINES -
* 
*                (B2) = FWA OF SELECTIONS TABLE.
*                (B3) = LWA+1 OF SELECTIONS TABLE.
*                (B4) = ADDRESS OF FIRST TABLE ENTRY FOR ASSUMED CHARGE 
*                       NUMBER USED IN PROJECT NUMBER ADDITIONS AND 
*                       DELETIONS.
*                (B4) = 0 IF NO ASSUMED CHARGE NUMBER IN EFFECT.
*                (B5) = LWA+1 OF ENTRIES IN TABLE.
 ACS      SPACE  4,25 
***       ACS - ADD CHARGE NUMBER SELECTION.
* 
*         ENTRY  (X1) = CHARGE NUMBER TO ENTER IF .NE. 1L0. 
*                (X1) = 1L0 IF ENTER NULL CHARGE NUMBER.
*                (B2) = FWA OF SELECTIONS TABLE.
*                (B3) = LWA+1 OF SELECTIONS TABLE.
*                (B4) = ADDRESS OF FIRST ASSUMED CHARGE NUMBER ENTRY. 
*                (B5) = LWA+1 OF ENTRIES IN SELECTIONS TABLE. 
* 
*         EXIT   (X6) = 0 IF ENTRY MADE OR ALREADY PRESENT. 
*                (X6) = 1 IF ENTRY NOT MADE BECAUSE SELECTION TABLE 
*                       FULL. 
*                (B4) = ADDRESS OF FIRST ENTRY FOR CHARGE NUMBER IF 
*                       TABLE ENTRY MADE OR ALREADY PRESENT AND NOT 
*                       NULL CHARGE NUMBER. 
*                (B4) = 0 IF NULL CHARGE NUMBER ADDED TO TABLE. 
*                (B5) = UPDATED LWA+1 OF ENTRIES IN SELECTIONS TABLE. 
* 
*         USES   X - 1, 2, 3, 6, 7. 
*                A - 1, 6, 7. 
*                B - 4, 5.
* 
*         MACROS MOVE.
  
  
 ACS      SUBR               ENTRY/EXIT 
          BX6    X1 
          LX1    12 
          SX2    X1-1R0*100B
          SA1    B2          SET START OF ENTRIES 
          NZ     X2,ACS1     IF NOT *0* ENTRY (NULL SELECTION)
          SX6    B1          SET NULL CHARGE SELECTION
  
*         SEARCH FOR CHARGE NUMBER. 
  
 ACS1     ZR     X1,ACS4     IF END OF ENTRIES
          BX2    X1-X6
          IX3    X1-X6
          SA1    A1+3        READ NEXT CHARGE NUMBER
          PL     X2,ACS2     IF SAME SIGN 
          NG     X6,ACS1     IF SELECTION ENTRY .LT. CHARGE NUMBER
          EQ     ACS3        ENTER NEW CHARGE SELECTION 
  
 ACS2     ZR     X3,ACS3     IF CHARGE NUMBER FOUND 
          NG     X3,ACS1     IF SELECTION ENTRY .LT. CHARGE NUMBER
 ACS3     SA1    A1-3        RESET ENTRY ADDRESS
          ZR     X3,ACS5     IF EXISTING CHARGE NUMBER FOUND
 ACS4     SA6    CNSA        SAVE CHARGE NUMBER 
          SX1    B5 
          SX6    B1          SET TABLE FULL ERROR 
          EQ     B5,B3,ACSX  IF AT MAXIMUM CHARGE/PROJECT SELECTIONS
  
*         ENTER CHARGE NUMBER IN TABLE. 
  
          SX2    A1          SET SOURCE ADDRESS 
          IX1    X1-X2       SET WORD COUNT 
          SX3    A1+3        SET DESTINATION ADDRESS
          MOVE   X1,X2,X3    MOVE ENTRIES DOWN
          SA2    CNSA 
          SB5    B5+3        SET NEW END OF ENTRIES 
          SX7    B0 
          BX6    X2 
          SA6    A1+         ENTER CHARGE NUMBER
          SA7    A1+1        SELECT ALL PROJECT NUMBERS 
          SA7    A1+2 
  
*         CHECK FOR NULL CHARGE SELECTION.
  
 ACS5     SX7    X6-1 
          SB4    A1          SET ASSUMED CHARGE NUMBER POINTER
          SX6    B0          SET NO ERROR 
          NZ     X7,ACSX     IF NOT NULL CHARGE NUMBER SELECTION
          SB4    B0+         CLEAR ASSUMED CHARGE NUMBER POINTER
          EQ     ACSX        RETURN 
 APS      SPACE  4,30 
***       APS - ADD PROJECT NUMBER SELECTION. 
* 
*         ENTRY  (X1) = FIRST WORD OF PROJECT NUMBER TO ENTER IF .NE. 
*                       0.
*                (X1) = 1L0 IF ENTER NULL PROJECT NUMBER. 
*                (X2) = SECOND WORD OF PROJECT NUMBER.
*                (B2) = FWA OF SELECTIONS TABLE.
*                (B3) = LWA+1 OF SELECTIONS TABLE.
*                (B4) = ADDRESS OF FIRST ENTRY FOR ASSUMED CHARGE 
*                       NUMBER. 
*                (B5) = LWA+1 OF ENTRIES IN SELECTIONS TABLE. 
*                THE CALLER MUST INSURE THAT AN ASSUMED CHARGE NUMBER 
*                IS IN EFFECT (B4 .NE. 0) BEFORE CALLING *APS*. 
* 
*         EXIT   (X6) = 0 IF ENTRY MADE OR ALREADY PRESENT. 
*                (X6) = 1 IF ENTRY NOT MADE BECAUSE SELECTION TABLE 
*                       FULL. 
*                (B4) = ADDRESS OF FIRST ENTRY FOR ASSUMED CHARGE 
*                       NUMBER. 
*                (B5) = UPDATED LWA+1 OF ENTRIES IN SELECTIONS TABLE. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 4, 6, 7.
*                B - 5. 
* 
*         MACROS MOVE.
  
  
 APS      SUBR               ENTRY/EXIT 
          SA4    B4          GET ASSUMED CHARGE NUMBER
          BX6    X1 
          BX7    X2 
          LX1    12 
          SX2    X1-1R0*100B
          SA1    B4+         READ FIRST CHARGE NUMBER 
          NZ     X2,APS1     IF NOT *0* ENTRY (NULL SELECTION)
          SX6    1           SET NULL PROJECT SELECTION 
  
*         CHECK NEXT TABLE ENTRY. 
  
 APS1     SA2    A1+B1       READ FIRST WORD OF PROJECT NUMBER
          BX1    X1-X4
          NZ     X1,APS6     IF NOT SAME CHARGE NUMBER
          NG     X1,APS6     IF NOT SAME CHARGE NUMBER
          ZR     X2,APS7     IF NO PROJECT SELECTIONS FOR CHARGE NUMBER 
          SA1    A1+3        READ NEXT CHARGE NUMBER
          BX3    X2-X6
          IX2    X2-X6
          PL     X3,APS2     IF SAME SIGN 
          NG     X6,APS1     IF SELECTION ENTRY .LT. PROJECT NUMBER 
          EQ     APS5        ENTER NEW PROJECT SELECTION
  
 APS2     ZR     X2,APS3     IF MATCH ON FIRST WORD OF PROJECT NUMBER 
          NG     X2,APS1     IF SELECTION ENTRY .LT. PROJECT NUMBER 
          EQ     APS5        ENTER PROJECT SELECTION
  
 APS3     SA2    A2+1        READ SECOND WORD OF PROJECT NUMBER 
          BX3    X2-X7
          IX2    X2-X7
          PL     X3,APS4     IF SAME SIGN 
          NG     X7,APS1     IF SELECTION ENTRY .LT. PROJECT NUMBER 
          EQ     APS5        ENTER NEW PROJECT SELECTION
  
 APS4     ZR     X2,APS8     IF MATCH ON SECOND WORD OF PROJECT NUMBER
          NG     X2,APS1     IF SELECTION ENTRY .LT. PROJECT NUMBER 
 APS5     SA1    A1-3        RESET ENTRY ADDRESS
 APS6     SA6    CNSA        SAVE PROJECT NUMBER
          SA7    CNSA+1 
          SX6    B1          SET TABLE FULL ERROR 
          EQ     B5,B3,APSX  IF AT MAXIMUM CHARGE/PROJECT SELECTIONS
  
*         ENTER PROJECT NUMBER IN TABLE.
  
          SX1    B5 
          SX2    A1          SET SOURCE ADDRESS 
          SX3    A1+3        SET DESTINATION ADDRESS
          IX1    X1-X2       SET WORD COUNT 
          MOVE   X1,X2,X3    MOVE ENTRIES DOWN
          SA4    B4+         GET CHARGE NUMBER
          SA2    CNSA        GET PROJECT NUMBER 
          SA3    CNSA+1 
          SB5    B5+3        SET NEW END OF ENTRIES 
          BX6    X4 
          SA6    A1          ENTER CHARGE NUMBER
          BX6    X2 
          BX7    X3 
 APS7     SA6    A1+1        ENTER PROJECT NUMBER 
          SA7    A1+2 
 APS8     SX6    B0          SET NO ERROR 
          EQ     APSX        RETURN 
 RCS      SPACE  4,20 
***       RCS - REMOVE CHARGE NUMBER SELECTIONS.
* 
*         ENTRY  (X1) = CHARGE NUMBER TO DELETE IF .NE. 0 AND .NE. 1L0. 
*                (X1) = 1L0 IF DELETE NULL CHARGE NUMBER. 
*                (B2) = FWA OF SELECTIONS TABLE.
*                (B4) = ADDRESS OF FIRST ENTRY FOR ASSUMED CHARGE 
*                       NUMBER. 
*                (B5) = LWA+1 OF ENTRIES IN SELECTIONS TABLE. 
* 
*         EXIT   CHARGE NUMBER SELECTIONS DELETED IF FOUND. 
*                (B4) = ADDRESS OF FIRST ENTRY FOR ASSUMED CHARGE 
*                       NUMBER IF ASSUMED CHARGE NUMBER NOT DELETED.
*                (B4) = 0 IF ASSUMED CHARGE NUMBER DELETED. 
*                (B5) = UPDATED LWA+1 OF ENTRIES IN SELECTIONS TABLE. 
* 
*         USES   X - 1, 2, 3, 4, 6. 
*                A - 1. 
*                B - 4, 5, 7. 
* 
*         MACROS MOVE.
  
  
 RCS      SUBR               ENTRY/EXIT 
          BX6    X1 
          LX1    12 
          SX2    X1-1R0*100B
          SA1    B2          READ FIRST CHARGE NUMBER 
          NZ     X2,RCS1     IF NOT *0* ENTRY (NULL SELECTION)
          SX6    B1          SET NULL CHARGE SELECTION
  
*         SEARCH FOR MATCHING ENTRIES.
  
 RCS1     ZR     X1,RCSX     IF END OF ENTRIES
          BX2    X1-X6
          SX4    A1-B4
          SA1    A1+3        READ NEXT CHARGE NUMBER
          NZ     X2,RCS1     IF CHARGE NUMBER NOT FOUND 
          NG     X2,RCS1     IF CHARGE NUMBER NOT FOUND 
          SX3    A1-3        SET DESTINATION ADDRESS FOR MOVE 
          NZ     X4,RCS2     IF NOT DELETING SELECTION CHARGE NUMBER
          SB4    B0+         CLEAR ASSUMED CHARGE NUMBER POINTER
 RCS2     BX2    X1-X6
          SA1    A1+3        READ NEXT CHARGE NUMBER
          NZ     X2,RCS3     IF NOT SAME CHARGE NUMBER
          PL     X2,RCS2     IF SAME CHARGE NUMBER
  
*         REMOVE ALL ENTRIES FOR CHARGE NUMBER FROM TABLE.
  
 RCS3     SB7    A1-3 
          SX2    B7+         SET SOURCE ADDRESS 
          SX1    B5-B7       SET WORD COUNT 
          SX4    B4-B7
          IX6    X3-X2       - (LENGTH OF DELETED ENTRIES)
          SB5    B5+X6       UPDATE TABLE LWA+1 
          NG     X4,RCS4     IF NOT MOVING ASSUMED CHARGE NUMBER
          SB4    B4+X6
 RCS4     MOVE   X1,X2,X3    MOVE ENTRIES UP
          EQ     RCSX        RETURN 
 RPS      SPACE  4,25 
***       RPS - REMOVE PROJECT NUMBER SELECTION.
* 
*         ENTRY  (X1) = FIRST WORD OF PROJECT NUMBER TO DELETE IF .NE.
*                       0 AND .NE. 1L0. 
*                (X2) = SECOND WORD OF PROJECT NUMBER TO DELETE.
*                (X1) = 1L0 IF DELETE NULL CHARGE NUMBER. 
*                (B2) = FWA OF SELECTIONS TABLE.
*                (B4) = ADDRESS OF FIRST ENTRY FOR ASSUMED CHARGE 
*                       NUMBER. 
*                (B5) = LWA+1 OF ENTRIES IN SELECTIONS TABLE. 
*                THE CALLER MUST INSURE THAT AN ASSUMED CHARGE NUMBER 
*                IS IN EFFECT (B4 .NE. 0) BEFORE CALLING *RPS*. 
* 
*         EXIT   PROJECT NUMBER SELECTION DELETED IF FOUND. 
*                (B5) = UPDATED LWA+1 OF ENTRIES IN SELECTIONS TABLE. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 4, 6.
*                B - 5. 
* 
*         MACROS MOVE.
  
  
 RPS3     SA6    A1-2        SELECT ALL PROJECT NUMBERS 
          SA6    A1-1 
  
 RPS      SUBR               ENTRY/EXIT 
          SA4    B4          GET ASSUMED CHARGE NUMBER
          BX6    X1 
          BX7    X2 
          LX1    12 
          SX2    X1-1R0*100B
          SA1    B4+         READ FIRST CHARGE NUMBER 
          NZ     X2,RPS1     IF NOT *0* ENTRY (NULL SELECTION)
          SX6    1           SET NULL PROJECT SELECTION 
  
*         SEARCH FOR PROJECT NUMBER.
  
 RPS1     SA2    A1+B1       READ PROJECT NUMBER
          SA3    A1+2 
          BX1    X1-X4
          NZ     X1,RPSX     IF NOT SAME CHARGE NUMBER
          NG     X1,RPSX     IF NOT SAME CHARGE NUMBER
          BX2    X2-X6
          BX3    X3-X7
          SA1    A1+3        READ NEXT CHARGE NUMBER
          NZ     X2,RPS1     IF PROJECT NUMBER NOT FOUND
          NG     X2,RPS1     IF PROJECT NUMBER NOT FOUND
          NZ     X3,RPS1     IF PROJECT NUMBER NOT FOUND
          NG     X3,RPS1     IF PROJECT NUMBER NOT FOUND
          SX6    A1-B4
          BX1    X1-X4
          SX6    X6-3 
          NZ     X6,RPS2     IF NOT FIRST ENTRY FOR CHARGE NUMBER 
          NZ     X1,RPS3     IF NEXT ENTRY NOT SAME CHARGE NUMBER 
          NG     X1,RPS3     IF NEXT ENTRY NOT SAME CHARGE NUMBER 
  
*         REMOVE PROJECT NUMBER ENTRY FROM TABLE. 
  
 RPS2     SX1    B5 
          SX2    A1          SET SOURCE ADDRESS 
          SX3    A1-3        SET DESTINATION ADDRESS
          IX1    X1-X2       SET WORD COUNT 
          MOVE   X1,X2,X3    MOVE ENTRIES UP
          SB5    B5-3        SET LWA+1 OF ENTRIES 
          EQ     RPSX        RETURN 
          SPACE  4,10 
**        COMMON DATA LOCATIONS.
  
  
 CNSA     BSSZ   2           CHARGE/PROJECT NUMBER HOLD AREA
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 ACS      EQU    /COMCCNS/ACS 
 APS      EQU    /COMCCNS/APS 
 RCS      EQU    /COMCCNS/RCS 
 RPS      EQU    /COMCCNS/RPS 
 QUAL$    ENDIF 
          ENDX
