LIBRARY 
          IDENT  LIBRARY,FETS 
          TITLE  LIBRARY - DECLARE GLOBAL LIBRARY SET.
          ABS 
          SST 
          ENTRY  LIBRARY
          ENTRY  LIB= 
          ENTRY  RFL= 
          ENTRY  SSJ= 
          SYSCOM B1 
          BASE   DECIMAL
*COMMENT  LIBRARY - DECLARE GLOBAL LIBRARY SET. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
*****     LIBRARY - DECLARE GLOBAL LIBRARY SET. 
* 
*         F. E. TERHAAR-YONKERS.  81/01/21. 
* 
*         *LIBRARY* CHANGES THE GLOBAL LIBRARY INFORMATION IN 
*         THE CONTROL POINT AREA. 
          SPACE  4,10 
***       *LIBRARY* CHANGES THE GLOBAL LIBRARY INFORMATION IN 
*         THE CONTROL POINT AREA.  THE GLOBAL LIBRARY SET IS EITHER 
*         CLEARED OR SET TO A LIST OF FILES DEPENDING ON THE
*         CONTROL STATEMENT FORMAT. 
*         THE LIBRARY NAMES ARE VALIDATED AND SEARCHED IN THE ORDER 
*         ON THE CONTROL STATEMENT.  THE *ULIB* RECORD IN EACH
*         LIBRARY IS SEARCHED FOR CONTROL CARD CALLABLE ENTRY POINTS
*         (A *PROC* NAME, RELOCATABLE MAIN PROGRAM NAME, OR AN ENTRY
*         POINT IN AN ABSOLUTE PROGRAM).  FOR EACH ENTRY POINT FOUND, 
*         A FOUR WORD DIRECTORY ENTRY IS WRITTEN TO THE *ZZZZZLD* FILE. 
* 
*         THE DIRECTORY FORMAT IS AS FOLLOWS. 
* 
*T        42/  ENTRY POINT NAME,12/  0,6/  RT 
*T,       24/  RANDOM ADDRESS,36/  0
*T,       42/  LIBRARY NAME,18/  0
*T,       12/  FL,11/  0,1/N,12/  SEPF,6/  0,18/ SSJB 
* 
*         RT = RECORD TYPE. 
*         FL = REQUIRED FIELD LENGTH/100B.
*         N = PARAMETER CRACKING FORMAT.
*             SET IF *NPC=* ENTRY POINT DEFINED.
*         SEPF = SPECIAL ENTRY POINT FLAGS
*                (SEE BYTE 0 OF *SEPW* IN *PPCOM*). 
*         SSJB = *SSJ=* PARAMETER BLOCK ADDRESS.
* 
*         IF ONE OR MORE CONTROL CARD CALLABLE ENTRY POINTS ARE 
*         FOUND, THE GLOBAL LIBRARY BIT IS SET IN *LB1W* IN 
*         THE CONTROL POINT AREA. 
          SPACE  4,10 
***       CONTROL STATEMENT FORMAT. 
* 
*      FORMAT                   ACTION
* 
*      LIBRARY.                 CLEAR GLOBAL LIBRARY SET. 
*      LIBRARY(LIB1,...,LIBN)   SET GLOBAL LIBRARY SET = LIB1,...,LIBN. 
*      LIBRARY(LIB1,...,LIBN/R) SET GLOBAL LIBRARY SET = LIB1,...,LIBN. 
*      LIBRARY(LIB1,...,LIBN/D) DELETE LIB1,...,LIBN FROM GLOBAL SET. 
*      LIBRARY(LIB1,...,LIBN/A) ADD LIB1,...,LIBN TO THE GLOBAL SET.
* 
* 
*         NOTES:  
* 
*         1) TO BE ABLE TO DO CONTROL CARD CALLS FROM USER LIBRARIES
*         THE LIBRARIES MUST BE LOCAL TO THE JOB WHEN *LIBRARY* IS
*         RUN.  THIS IS AN INCOMPATABILITY WITH THE SAME FEATURE ON 
*         NOS/BE. 
* 
*         2) IF THE USER SIMPLY WANTS TO SATISFY RELOCATABLE LOADS AND
*         DOES NOT WISH TO INCUR THE ADDITIONAL OVERHEAD OF SEARCHING 
*         THE DIRECTORY FOR A VALID ENTRY POINT, *LIBRARY* SHOULD BE
*         EXECUTED PRIOR TO THE GET/ATTACH OF THE USER LIBRARIES. 
* 
*         3) BIT 58 IN THE LOADER CONTROL WORD IS UTILIZED AS THE FLAG
*         FOR THE GLOBAL LIBRARY PROCESS.  THIS BIT WILL BE CHECKED 
*         BY *1AJ* BEFORE ANY DIRECTORY SEARCHES ARE MADE.
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
* 
*         * ERROR IN LIBRARY ARGUMENTS.* = AN ILLEGAL ARGUMENT OR 
*                FORMAT WAS USED ON THE CONTROL STATEMENT.  COMPARE 
*                THE CONTROL STATEMENT USED WITH THE DOCUMENTED 
*                FORMATS. 
*                THE GLOBAL LIBRARY SET CURRENTLY IN EFFECT REMAINS 
*                UNCHANGED. 
* 
*         * TOO MANY LIBRARY NAMES SPECIFIED.* = THE NUMBER OF
*                LIBRARIES EXCEEDS THE NUMBER THAT CAN BE STORED IN THE 
*                CONTROL POINT AREA.  THE GLOBAL LIBRARY SET CURRENTLY
*                IN EFFECT REMAINS UNCHANGED. 
* 
*         * GLOBAL LIBRARY SET CLEARED.* = FORMAT 1 ( NO ARGUMENTS ) OF 
*                THE CONTROL STATEMENT WAS PROCESSED.  ALL THE GLOBAL 
*                LIBRARY ENTRIES IN THE CONTROL POINT AREA AND THE
*                GLOBAL LIBRARY BIT IN THE LOADER CONTROL WORD ARE
*                CLEARED. 
* 
*         * TOO MANY USER LIBRARIES SPECIFIED.* = THE NUMBER OF LIBRARY 
*                ARGUMENTS IS LESS THAN OR EQUAL TO THE MAXIMUM, BUT
*                TOO MANY OF THOSE LIBRARIES ARE USER LIBRARIES 
*                (LIBRARIES NOT IN THE CENTRAL DIRECTORY).  THE MAXIMUM 
*                NUMBER OF USER LIBRARIES IS 2 IF 4 OR LESS SYSTEM
*                LIBRARIES ARE DECLARED, 1 IF 5 THRU 14 ARE SYSTEM
*                LIBRARIES, AND 0 IF MORE THAN 14 ARE SYSTEM LIBRARIES. 
*                THE GLOBAL LIBRARY SET CURRENTLY IN EFFECT REMAINS 
*                UNCHANGED. 
* 
*         * LIBRARY NOT FOUND, LNAME* = *LNAME* IS THE NAME OF A USER 
*                LIBRARY ( NOT KNOWN BY THE SYSTEM ) THAT WAS NOT LOCAL 
*                TO THE JOB WHEN *LIBRARY* WAS EXECUTED. NO DIRECTORY 
*                IS GENERATED FOR LIBRARY *LNAME*.
* 
*         * INCORRECTLY FORMATTED LIBRARY, LNAME* = A FILE *LNAME* WAS
*                FOUND, BUT THE ULIB RECORD IS DEFECTIVE OR 
*                MISSING.  THIS MESSAGE APPLIES TO BOTH SYSTEM AND USER 
*                LIBRARIES.  NO DIRECTORY IS GENERATED FOR FILE 
*                *LNAME*. 
* 
*         * ENTRY POINT TABLE OVERFLOW.* = THE NUMBER OF ENTRY POINTS 
*                PER PROGRAM UNIT HAS EXCEEDED THE TABLE SPACE
*                ALLOTTED.  REASSEMBLE THE PROGRAM WITH A LARGER VALUE
*                FOR *LEPT*.
* 
*         * LIBRARY FILE ERROR(S) - SEE DAYFILE.* = ONE OR MORE OF THE
*                SPECIFIED LIBRARY NAMES WERE NOT FOUND OR WERE NOT IN
*                LIBRARY FORMAT.  THE SPECIFIC ERROR CAN BE DETERMINED
*                FROM PREVIOUS DAYFILE MESSAGES.  THE JOB IS ABORTED. 
*                HOWEVER, THE DIRECTORY IS GENERATED FOR ALL LIBRARIES
*                EXCEPT THE ONE(S) IN ERROR.
          SPACE  4
          TITLE  CONSTANTS AND TABLES.
*****     ASSEMBLY CONSTANTS. 
  
  
 SSJ=     EQU    0
 LIB=     EQU    0
 UBUFL    EQU    201B        LENGTH OF ULIB BUFFER
 ZBUFL    EQU    201B        LENGTH OF ZZZZZLD BUFFER 
 LEPT     EQU    1000D       LENGTH OF ENTRY POINT TABLE
 ARGM     EQU    24D         MAXIMUM NUMBER OF ARGUMENTS
 MAXL     EQU    24D         MAXIMUM NUMBER OF LIBRARIES
***       COMMON DECKS. 
          SPACE  4
*CALL     COMCCMD 
*CALL     COMCMAC 
*CALL     COMSLFD 
          SPACE  4
          ORG    111B 
*         FETS. 
  
  
 FETS     BSS    0
  
 ULIB     FILEB  ULBF,UBUFL,(FET=8) 
 ZZZZZLD  FILEB  ZZBF,ZBUFL,(FET=8) 
          SPACE  4,10 
*         RESERVED LOCATIONS. 
  
  
 LDCW     CON    0           LOADER CONTROL WORD
 EFLG     CON    0           ENTRY POINT FLAG 
 ZCNT     CON    0           COUNT OF LIBRARY DIRECTORIES BUILT 
 TADR     CON    0           *SETGLS* TABLE ADDRESS 
 ACNT     CON    0           ARGUMENT COUNT 
 OTYP     CON    1RR         OPERATION TYPE(ADD, DELETE OR REPLACE) 
 PEPT     CON    0           ENTRY POINT BEING PROCESSED
 PRFX     DATA   77000016BS36  FIRST WORD OF ULIB PREFIX TABLE
 UPFX     BSS    17B         ULIB PREFIX TABLE
 UHDR     CON    0           ULIB HEADER WORD 
 TEPTP    BSS    1           *TEPT* POINTER 
 PTYP     CON    0           PROGRAM TYPE 
 SEPF     CON    0           SPECIAL ENTRY POINTS 
 LFEC     CON    0           LIBRARY FILE ERROR COUNT 
  
*         NOTE:  THE FOLLOWING 4 LOCATIONS MAKE UP THE
*                WORKING BUFFER FOR THE *ZZZZZLD* FILE. 
  
 WBUF     BSS    1           WORKING BUFFER 
 PRAN     CON    0           PROGRAM RANDOM ADDRESS 
 CLIB     CON    0           LIBRARY NAME BEING PROCESSED 
 RFL      CON    0           PROGRAM FIELD LENGTH/100B
  
  
**        ADDRESS OF *TLIB* ENTRY BEING PROCESSED.
  
  
 ALIB     VFD    42/0,18/TLIB 
          SPACE  4,10 
**        *SETGLS* PARAMETER WORD.
  
  
 SLPW     VFD    6/0,18/ARGR,36/0 
          SPACE  4,10 
**        *GETGLS* PARAMETER WORD.
  
  
 GLPW     VFD    6/0,18/GLIB,36/0 
          SPACE  4,10 
**        GLOBAL LIBRARY BIT MASK FOR LOADER CONTROL WORD.
  
  
 GFLG     VFD    1/0,1/1,58/0 
          SPACE  4,10 
          TITLE  MAIN PROGRAM.
**        LIBRARY.
* 
*         MAIN ROUTINE. 
  
  
 LIBRARY  SB1    1
          RJ     PRS         PRESET 
          RETURN ZZZZZLD     RETURN OLD DIRECTORY FILE
          SA2    ACNT        READ ARGUMENT COUNT
          SB2    X2 
          ZR     B2,LIB4     IF NO ARGUMENTS
          SA1    TADR        POINTER TO *SETGLS* TABLE
          SX6    X1 
          SA6    ALIB 
 LIB1     SA1    ALIB        POINTER TO *SETGLS* TABLE
          SX6    X1+B1
          SA1    X1          READ NEXT ENTRY
          ZR     X1,LIB2     IF NO MORE ENTRIES 
          SA6    ALIB        STORE NEW ADDRESS
          MX0    42 
          BX6    X0*X1       STORE CURRENT LIBRARY NAME 
          SA6    CLIB 
          RJ     CLL         CHECK FOR LOCAL LIBRARY
          EQ     LIB1        CHECK NEXT LIBRARY 
  
*         ISSUE LIBRARIES PROCESSED MESSAGE AND SET/CLEAR 
*         GLOBAL LIBRARY FLAG IN CONTROL POINT AREA.
  
 LIB2     SETGLS SLPW        ISSUE GLOBAL LIBRARY SET 
          GETLC  LDCW        GET LOADER CONTROL WORD
          SA1    TADR 
          SA1    X1 
          ZR     X1,LIB4     IF NO LIBRARIES LEFT 
          SA1    OTYP        CHECK OPTION TYPE
          SX1    X1-1RD 
          ZR     X1,LIB3     IF OPERATION IS DELETE 
  
*         CHECK TO SEE IF THERE WERE NO ERRORS IN 
*         THE GLOBAL LIBRARY SET JUST ISSUED. 
  
          SA2    TADR        READ TABLE ADDRESS 
          SB3    X2 
          SA1    ACNT        READ ARGUMENT COUNT
          SB2    X1 
          SB2    B2+B3
          SA1    SLPW        READ *SETGLS* PARAMETER WORD 
          LX1    24 
          SB3    X1 
          EQ     B2,B3,LIB3  IF NO ERRORS INDICATED 
          SA1    LFEC 
          NZ     X1,LIB3     IF LIBRARY FILE ERRORS OCCURRED
          MX6    -1          INDICATE TOO MANY LIBRARIES
          SA6    A1 
 LIB3     SA2    EFLG        READ ENTRY POINT FLAG
          NZ     X2,LIB5     IF CROSS REFERENCE GENERATED 
 LIB4     RJ     CGL         CLEAR GLOBAL LIBRARY BIT 
          SA1    ACNT 
          NZ     X1,LIB6     IF NOT CLEAR OF ALL EXISTING LIBRARIES 
          SX0    LIBA        * GLOBAL LIBRARY SET CLEARED.* 
          MESSAGE  X0,3      ISSUE TERMINATION MESSAGE
          EQ     LIB6        END PROCESSING 
  
*         SET GLOBAL LIBRARY FLAG.
  
 LIB5     SA1    GFLG        GET GLOBAL LIBRARY FLAG
          SA2    LDCW        READ LOADER CONTROL WORD 
          BX6    X1+X2       SET FLAG 
          SA6    A2 
          SETLC  LDCW        RESET LOADER CONTROL WORD
          WRITER ZZZZZLD,R   FLUSH BUFFER 
          SETFS  ZZZZZLD,NDST  SET FILE STATUS
*         EQ     LIB6        END PROCESSING 
  
*         TERMINATE PROGRAM.
  
 LIB6     SA1    LFEC        CHECK FOR LIBRARY FILE ERRORS
          SX0    LIBC        * TOO MANY USER LIBRARIES SPECIFED * 
          NG     X1,ABT      IF TOO MANY LIBRARIES
          SX0    LIBB        * LIBRARY FILE ERROR(S) - SEE DAYFILE.*
          NZ     X1,ABT      IF LIBRARY FILE ERRORS OCCURRED
          ENDRUN
  
  
 LIBA     DATA   C* GLOBAL LIBRARY SET CLEARED.*
 LIBB     DATA   C* LIBRARY FILE ERROR(S) - SEE DAYFILE.* 
 LIBC     DATA   C* TOO MANY USER LIBRARIES SPECIFIED.* 
 CLL      TITLE  SUBROUTINES. 
**        CLL - CHECK FOR LOCAL LIBRARY.
* 
*         *CLL* CHECKS FOR THE EXISTENCE OF A LOCAL LIBRARY 
*         FILE.  IF FILE IS NOT LOCAL AND IS NOT IN THE SYSTEM LIBRARY
*         DIRECTORY, A DIAGNOSTIC IS ISSUED.  IF THE FILE IS LOCAL, 
*         THEN THE PREFIX TABLE IS CHECKED TO ENSURE THE FILE 
*         IS ACTUALLY A LIBRARY.
* 
*         ENTRY  (X6) = (CLIB) = LIBRARY NAME.
*                (ALIB) = POINTER TO NEXT ENTRY IN *SETGLS* TABLE.
* 
*         EXIT   ALL PROCESSING COMPLETE FOR THIS LIBRARY.
* 
*         USES   X - 0, 1, 2, 3, 6. 
*                A - 1, 2, 6. 
*                B - 2, 5.
* 
*         CALLS  PLE, SNM.
* 
*         MACROS MESSAGE, READ, READW, REWIND, SETFET, SETFS, STATUS, 
*                SYSTEM.
  
  
 CLL      SUBR               ENTRY/EXIT 
          SETFET ULIB,LFN=X6 STORE LIBRARY NAME IN FET
          STATUS ULIB        CHECK FOR FILE 
          SA1    ULIB 
          MX2    -11
          LX2    1
          BX1    -X2*X1 
          ZR     X1,CLL2     IF FILE DOES NOT EXIST 
          REWIND ULIB,R      POSITION AT BOI
          READ   ULIB,R      INITIATE READ OPERATIONS 
          SA1    ULIB+2      READ *IN*
          SA2    A1+B1       READ *OUT* 
          IX1    X1-X2
          ZR     X1,CLL2     IF NO DATA TRANSFERRED 
          READW  ULIB,UPFX,17B  READ PREFIX TABLE 
          NZ     X1,CLL3     IF TRANSFER INCOMPLETE 
          SA1    UPFX        READ FIRST WORD OF PREFIX TABLE
          SA2    PRFX        FIRST WORD OF A LEGAL ULIB PREFIX TABLE
          BX1    X1-X2
          NZ     X1,CLL3     IF NOT A USER LIBRARY PREFIX TABLE 
  
*         VALID PREFIX TABLE FOUND, NOW CHECK FOR ULIB TABLE. 
  
          READW  ULIB,UHDR,1 READ ULIB HEADER WORD
          NZ     X1,CLL3     IF TRANSFER INCOMPLETE 
          SA1    UHDR        CHECK FOR ULIB TABLE ID
          MX0    12 
          BX2    X0*X1
          LX2    12 
          SX3    X2-7600B 
          NZ     X3,CLL3     IF NOT A ULIB TABLE
          LX1    12          POSITION GROUP NAME COUNT FIELD
          BX2    X1*X0       STRIP OFF GROUP NAME COUNT 
          LX2    12 
          ZR     X2,CLL1     IF NO GROUP NAMES
          READW  ULIB,TEPT,X2  SKIP GROUP NAMES 
          NZ     X1,CLL3     IF TRANSFER INCOMPLETE 
 CLL1     RJ     PLE         PROCESS LIBRARY ENTRY POINT
          SETFS  ULIB,NDST   SET *NDST* STATUS ON LIBRARY 
          EQ     CLLX        RETURN 
  
*         ISSUE LIBRARY NOT FOUND MESSAGE, IF NOT IN SYSTEM LIBRARY 
*         DIRECTORY.
  
 CLL2     SYSTEM CPM,R,CLIB,142B*100B  GET SYSTEM LIBRARY STATUS
          SA1    CLIB        CHECK IF LIBRARY IN SYSTEM DIRECTORY 
          MX2    -1 
          BX1    -X2*X1 
          NZ     X1,CLLX     IF SYSTEM LIBRARY
          SB5    CLLB        SET FWA OF SEARCH
          SX0    CLLA        SET FWA OF MESSAGE 
          EQ     CLL4        SET UP DAYFILE MESSAGE 
  
 CLL3     SB5    CLLD        SET FWA OF SEARCH
          SX0    CLLC        SET FWA OF MESSAGE 
 CLL4     SA1    CLIB        SET LIBRARY NAME TO BE ADDED TO MESSAGE
          SB2    1RX         SET SEARCH CHARACTER 
          RJ     SNM         SET NAME INTO MESSAGE
          MESSAGE  X0,3      ISSUE MESSAGE
          SA1    LFEC        INCREMENT LIBRARY FILE ERROR COUNT 
          SX6    X1+B1
          SA6    A1 
          SA1    ALIB        POINTER TO NEXT ENTRY
          SX6    X1-1 
          SA6    A1 
 CLL5     SA2    X1          MOVE REMAINING ENTRIES DOWN ONE
          BX6    X2 
          SA6    A2-B1
          SX1    X1+B1
          NZ     X2,CLL5     IF MORE TO MOVE
          EQ     CLLX        RETURN 
  
  
 CLLA     DATA   10H LIBRARY N
          DATA   10HOT FOUND, 
 CLLB     DATA   8LXXXXXXX. 
  
 CLLC     DATA   10H INCORRECT
          DATA   10HLY FORMATT
          DATA   10HED LIBRARY
 CLLD     DATA   10H, XXXXXXX.
          DATA   0
 PLE      SPACE  4,10 
**        PLE - PROCESS LIBRARY ENTRY POINTS. 
* 
*         *PLE* PROCESSES THE ENTRY POINT LIST IN THE ULIB
*         RECORD UNTIL THE RANDOM ADDRESS WORD IS FOUND.
*         THEN CALLS *WEP* TO WRITE THE ENTRY POINTS OF 
*         THE PROGRAM TO THE *ZZZZZLD* DIRECTORY FILE.
* 
*         ENTRY  *ULIB* RECORD POSITIONED BEFORE FIRST ENTRY POINT. 
* 
*         EXIT   ALL ENTRY POINTS FOR THIS *ULIB* RECORD PROCESSED. 
* 
*         USES   A - 1, 6, 7. 
*                X - 0, 1, 6, 7.
*                B - 2, 3.
* 
*         CALLS  CEN, WEP.
* 
*         MACROS READW. 
  
  
 PLE      SUBR               ENTRY/EXIT 
          BX6    X6-X6       CLEAR FIELD LENGTH ENTRY 
          SA6    RFL
          SB2    B0          CLEAR ENTRY POINT COUNTER
  
*         READ ENTRY POINTS UNTIL RANDOM ADDRESS FOUND. 
  
 PLE1     READW  ULIB,PEPT,1 READ POSSIBLE ENTRY POINT
          NZ     X1,PLEX     IF END OF RECORD ENCOUNTERED 
          SA1    PEPT 
          NG     X1,PLE3     IF PROGRAM RANDOM ADDRESS POINTER
  
*         CHECK TO SEE IF THE ENTRY POINT CAN BE CONTROL
*         CARD CALLED (NO SPECIAL SYMBOLS). 
  
 PLE2     RJ     CEN         CHECK ENTRY POINT NAME 
          NZ     X5,PLE1     IF NOT CONTROL CARD CALLABLE 
          SX0    PLEA        TABLE OVERFLOW MESSAGE 
          SB3    LEPT        ENTRY POINT TABLE SIZE 
          SA6    TEPT+B2     STORE ENTRY POINT IN TABLE 
          SB2    B2+B1       INCREMENT ENTRY POINT COUNT
          EQ     B2,B3,ABT   IF *TEPT* TABLE OVERFLOWED 
          EQ     PLE1        CHECK NEXT WORD IN ULIB RECORD 
  
*         IF SOME CONTROL CARD CALLABLE ENTRY POINTS WERE 
*         FOUND, CHECK THE PROGRAM TYPE FIELD.  IF THE FIELD
*         IS ZERO THEN THE RECORD CANNOT BE CONTROL CARD CALLED.
  
 PLE3     EQ     B0,B2,PLE4  IF NO ENTRY POINTS FOUND 
          MX0    -24
          BX7    -X0*X1      EXTRACT RANDOM ADDRESS 
          LX7    36 
          MX0    54 
          LX1    30          EXTRACT RECORD TYPE
          BX6    -X0*X1 
          ZR     X6,PLE4     IF NOT CONTROL CARD CALLABLE 
          SA6    PTYP        STORE PROGRAM TYPE 
          SA6    EFLG        SET DIRECTORY ENTRIES FLAG 
          BX6    X6-X6
          SA6    TEPT+B2     TERMINATE ENTRY POINT LIST WITH ZERO WORD
          SA7    PRAN        STORE PROGRAM RANDOM ADDRESS 
          RJ     WEP         WRITE ENTRY POINT DIRECTORY
          SX6    B0+         CLEAR SPECIAL ENTRY POINTS 
          SA6    SEPF 
  
*         SKIP CROSS REFERENCE ENTRIES UNTIL ANOTHER POSSIBLE 
*         ENTRY POINT IS FOUND. 
  
 PLE4     SB2    B0          CLEAR ENTRY POINT COUNT
 PLE5     READW  ULIB,PEPT,1 READ POSSIBLE ENTRY POINT
          NZ     X1,PLEX     IF END OF RECORD ENCOUNTERED 
          SA1    PEPT 
          NG     X1,PLE5     IF NOT AN ENTRY POINT
          BX6    X6-X6       CLEAR FIELD LENGTH 
          SA6    RFL
          EQ     PLE2        PROCESS ENTRY POINT NAME 
  
  
 PLEA     DATA   C* ENTRY POINT TABLE OVERFLOW.*
 CEN      SPACE  4,10 
**        CEN - CHECK ENTRY POINT NAME. 
* 
*         *CEN* CHECKS FOR VALID CONTROL CARD CALLABLE NAMES. 
*         IF A SPECIAL ENTRY POINT IS FOUND, THE APPROPRIATE BIT
*         IS SET IN THE DIRECTORY AND THE *SPECIAL ENTRY POINTS 
*         PRESENT* FLAG IS SET.  IF AN *NPC=* ENTRY POINT IS
*         FOUND, THE NOS-CRACKING BIT IS SET IN THE DIRECTORY.
*         IF AN *RFL=* ENTRY POINT IS FOUND, THE FIELD LENGTH IS
*         EXTRACTED AND STORED IN WORD 4 OF THE DIRECTORY ENTRY.
*         IF AN *SSJ=* ENTRY POINT IS FOUND, THE PARAMETER BLOCK
*         ADDRESS IS EXTRACTED AND STORED IN WORD 4 OF THE
*         DIRECTORY ENTRY.
* 
*         ENTRY  (X1) = NAME TO BE CHECKED. 
* 
*         EXIT   (X5) = ZERO IF NAME IS CONTROL CARD CALLABLE.
*                (X6) = NAME, IF NOT SPECIAL ENTRY POINT. 
* 
*         USES   A - 2, 5, 6. 
*                X - 0, 1, 2, 5, 6. 
*                B - 5, 6.
  
  
 CEN      SUBR               ENTRY/EXIT 
  
*         CHECK FOR SPECIAL ENTRY POINT.
  
          MX0    24 
          SA5    CENA-1      SET TABLE ADDRESS
 CEN1     SA5    A5+B1
          ZR     X5,CEN5     IF END OF SPECIAL ENTRY POINT TABLE
          BX6    X5-X1       COMPARE ENTRY POINT NAMES
          BX6    X6*X0
          NZ     X6,CEN1     IF NO MATCH
          MX0    -12         ADD IN NEW SPECIAL ENTRY POINT FLAG
          BX6    -X0*X5 
          LX6    24 
          SA2    SEPF 
          BX6    X2+X6
          SA6    A2 
          AX5    12          EXTRACT SPECIAL HANDLING ROUTINE ADDRESS 
          SB6    X5 
          SX5    B1          SET NOT COMMAND CALLABLE 
          ZR     B6,CENX     IF NO SPECIAL HANDLING ROUTINE 
          JP     B6          PERFORM SPECIAL HANDLING 
  
*         PROCESS *RFL=* SPECIAL ENTRY POINT. 
  
 CEN2     MX0    12          EXTRACT FIELD LENGTH 
          LX1    30 
          BX6    X0*X1
          SA5    RFL
          BX5    -X0*X5 
          BX6    X6+X5
          SA6    RFL         STORE FIELD LENGTH 
          SX5    B1 
          EQ     CENX        EXIT 
  
*         PROCESS *NPC=* SPECIAL ENTRY POINT. 
  
 CEN3     SA2    RFL         SET NOS CRACKING BIT IN DIRECTORY
          SX6    B1 
          LX6    36 
          BX6    X2+X6
          SA6    A2 
          EQ     CENX        RETURN 
  
*         PROCESS *SSJ=* SPECIAL ENTRY POINT. 
  
 CEN4     MX0    -18         GET PARAMETER BLOCK ADDRESS
          LX1    42 
          BX1    -X0*X1 
          BX6    X1+X6       STORE PARAMETER BLOCK ADDRESS
          SA6    A6 
          EQ     CENX        RETURN 
  
*         CHECK FOR NORMAL ENTRY POINT. 
  
 CEN5     MX0    -6 
          BX6    X1          SAVE NAME IN X6
          SB5    B0+
          SB6    8
 CEN6     LX1    6
          BX5    -X0*X1 
          ZR     X5,CENX     IF END OF NAME FOUND 
          SX2    X5-1R+ 
          PL     X2,CENX     IF INVALID CHARACTER 
          SB5    B5+B1       INCREMENT CHARACTER COUNT
          EQ     B5,B6,CENX  IF EIGHT CHARACTERS CHECKED
          EQ     CEN6        CHECK NEXT CHARACTER 
  
  
**        SPECIAL ENTRY POINT TABLE.
*T        24/  EPTNAME,6/  0,18/  PADDR,12/  EPTFLAG
*         EPTNAME = ENTRY POINT NAME. 
*         PADDR = PROCESSOR ADDRESS.
*         EPTFLAG = SPECIAL ENTRY POINT FLAG (TO PLACE IN DIRECTORY). 
  
 CENA     BSS    0
          VFD    24/0LARG=,6/,18/,12/4040B
          VFD    24/0LCLB=,6/,18/,12/4100B
          VFD    24/0LDMP=,6/,18/,12/4020B
          VFD    24/0LLDR=,6/,18/,12/4200B
          VFD    24/0LLIB=,6/,18/,12/4200B
          VFD    24/0LNPC=,6/,18/CEN3,12/0
          VFD    24/0LRFL=,6/,18/CEN2,12/0
          VFD    24/0LSDM=,6/,18/,12/4010B
          VFD    24/0LSSJ=,6/,18/CEN4,12/4004B
          VFD    24/0LSSM=,6/,18/,12/4001B
          VFD    24/0LVAL=,6/,18/,12/4002B
          CON    0           END OF TABLE 
 WEP      SPACE  4,25 
**        WEP - WRITE ENTRY POINT TABLE.
* 
*         *WEP* WRITES THE CONTENTS OF THE ENTRY POINT TABLE *TEPT*,
*         TO THE *ZZZZZLD* CROSS REFERENCE FILE.
* 
*         ENTRY  ENTRY POINT TABLE SET UP.
* 
*         EXIT   CONTENTS OF *TEPT* WRITTEN TO THE OUTPUT BUFFER. 
* 
*         USES   A - 1, 2, 3, 6, 7. 
*                X - 1, 2, 3, 6, 7. 
* 
*         MACROS WRITEW.
  
  
 WEP      SUBR               ENTRY/EXIT 
          SX6    TEPT 
          SA6    TEPTP       INITIALIZE *TEPT* POINTER
 WEP1     SA1    TEPTP       READ *TEPT* POINTER
          SA2    X1          READ NEXT ENTRY POINT IN TABLE 
          ZR     X2,WEPX     IF NO MORE ENTRY POINTS TO PROCESS 
          SX7    X1+B1       INCREMENT *TEPT* POINTER 
          SA7    TEPTP
          SA3    PTYP        READ RECORD TYPE 
          BX6    X3+X2       COMBINE ENTRY NAME WITH RECORD TYPE
          SA6    WBUF        STORE IN WORKING BUFFER
          SA2    RFL         COMBINE RFL AND SPECIAL ENTRY POINT FLAGS
          SA3    SEPF 
          BX7    X2+X3
          SA7    A2 
          WRITEW ZZZZZLD,WBUF,4 
          EQ     WEP1        CHECK NEXT *TEPT* ENTRY
 CGL      SPACE  4,15 
**        CGL - CLEAR GLOBAL LIBRARY BIT. 
* 
*         *CGL* CLEARS THE GLOBAL LIBRARY BIT IN THE LOADER 
*         CONTROL WORD.  THIS INDICATES THAT THERE
*         ARE EITHER NO USER LIBRARIES TO PROCESS, OR THERE 
*         ARE NO CONTROL CARD CALLABLE ENTRIES IN THE GLOBAL
*         LIBRARY SET.
* 
*         EXIT   GLOBAL BIT IN LOADER CONTROL WORD CLEARED. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
* 
*         MACROS SETLC. 
  
  
 CGL      SUBR               ENTRY/EXIT 
          SA1    GFLG        READ GLOBAL CONTROL FLAG 
          SA2    LDCW        READ LOADER CONTROL WORD 
          BX6    -X1*X2      CLEAR GLOBAL FLAG
          SA6    LDCW 
          SETLC  LDCW        RESET LOADER CONTROL WORD
          EQ     CGLX        RETURN 
 ABT      SPACE  4,10 
**        ABT - ISSUE MESSAGE AND ABORT.
* 
*         ENTRY  (X0) = MESSAGE ADDRESS.
* 
*         MACROS ABORT, MESSAGE.
  
  
 ABT      BSS    0           ENTRY
          MESSAGE  X0,3 
          ABORT              ABORT CONTROL POINT
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCCIO 
*CALL     COMCCPM 
*CALL     COMCLFM 
*CALL     COMCRDW 
*CALL     COMCSNM 
*CALL     COMCSYS 
*CALL     COMCWTW 
 BUFFERS  SPACE  4,10 
*         BUFFERS.
  
  
 ULBF     EQU    *+1         *ULIB* BUFFER
 ZZBF     EQU    ULBF+UBUFL  *ZZZZZLD* BUFFER 
 TEPT     EQU    ZZBF+ZBUFL  ENTRY POINT TABLE
 TLIB     EQU    TEPT+LEPT   LIBRARY NAME TABLE 
 GLIB     EQU    TLIB+MAXL   *GETGLS* TABLE 
 RFL=     EQU    GLIB+MAXL
 PRS      TITLE  PRESET ROUTINE.
**        PRS - PRESET. 
* 
*         *PRS* DETERMINES THE FORMAT OF THE CONTROL
*         STATEMENT AND CHECKS FOR THE PRESENCE OF INVALID
*         SEPARATORS. 
*         THE GLOBAL LIBRARY SET IS CLEARED, THE GLOBAL 
*         FLAG IN THE LOADER CONTROL WORD IS CLEARED AND
*         THE *1AJ* GLOBAL LIBRARY DIRECTORY IS RETURNED
*         IF THE *LIBRARY* STATEMENT CONTAINS NO PARAMETERS 
*         (*LIBRARY.*). 
* 
*         EXIT   (X0) = ERROR MESSAGE.
*                TO *ABT* IF ARGUMENT ERROR.
* 
*         USES   A - 1, 2, 4, 5, 6, 7.
*                X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - 2, 3, 4, 5.
* 
*         CALLS  CGL, CNS.
* 
*         MACROS GETGLS, GETLC, RETURN, SETGLS. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          BX7    X7-X7       CLEAR *TLIB* AND *GLIB* BUFFERS
          SA7    TLIB        STARTING ADDRESS 
          SB5    MAXL+MAXL-1 CLEAR BOTH BUFFERS 
          ERRNZ  GLIB-TLIB-MAXL  CODE ASSUMES CONTIGUOUS BUFFERS
 PRS0     SA7    A7+B1
          SB5    B5-B1
          NZ     B5,PRS0     IF NOT END OF BUFFER 
          GETGLS GLPW        GET CURRENT GLOBAL LIBRARY SET 
          SA1    ACTR        READ ARGUMENT COUNT
          SB2    X1 
          ZR     B2,PRS14    IF NO ARGUMENTS
          SX6    B2 
          SA6    ACNT        STORE ARGUMENT COUNT 
          SB5    ARGM        MAXIMUM ARGUMENT COUNT 
  
*         LOOK FOR */A*, */D* OR */R*.
  
          SX0    =C* ERROR IN LIBRARY ARGUMENTS.* 
          SA1    ARGR-1      FIRST ARGUMENT MINUS ONE 
          SB3    B0+
          MX3    -18
 PRS1     SB3    B3+B1       SCAN ARGUMENT LIST 
          GT     B3,B2,PRS2  IF ALL ARGUMENTS PROCESSED 
          SA1    A1+B1       READ NEXT ARGUMENT 
          BX6    X3*X1       CHECK FOR NULL ARGUMENT
          ZR     X6,ABT      IF NULL ARGUMENT 
          BX2    -X3*X1 
          ZR     X2,PRS1     IF NOS SEPARATOR *,* *.* OR *)*
          SA6    A1+         STORE ARGUMENT WITHOUT SEPARATOR 
          SX2    X2-1R/ 
          ZR     X2,PRS1.1   IF NOS SEPARATOR */* 
          SX2    X2+1R/-1 
          ZR     X2,PRS1     IF PRODUCT SET SEPARATOR *,* 
          SX2    X2+1-17B 
          ZR     X2,PRS1     IF PRODUCT SET TERMINATOR *.* OR *)* 
          SX2    X2+17B-3 
          NZ     X2,ABT      IF NOT PRODUCT SET SEPARATOR */* 
 PRS1.1   SB3    B3+B1       ARGUMENT FOLLOWING */* MUST BE LAST
          NE     B3,B2,ABT   IF NOT LAST ARGUMENT 
          SA1    A1+B1       LAST ARGUMENT MUST BE *A*, *D* OR *R*
          SX7    B0+         ZERO OUT LAST ARGUMENT 
          SA7    A1 
          SX7    B2-B1       DECREMENT ARGUMENT COUNT 
          SA7    ACNT 
          BX7    X3*X1       SAVE OPERATION TYPE
          LX7    6
          SA7    OTYP 
          SX6    X7-1RA      ADD TO GLOBAL LIBRARY SET
          ZR     X6,PRS3     IF ADD OPERATION 
          SX6    X7-1RD      DELETE FROM GLOBAL LIBRARY SET 
          ZR     X6,PRS6     IF DELETE OPERATION
          SX6    X7-1RR      REPLACE GLOBAL LIBRARY SET (DEFAULT) 
          NZ     X6,ABT      IF NOT REPLACE OPERATION 
  
*         REPLACE GLOBAL LIBRARY SET. 
  
 PRS2     SX0    PRSA        * TOO MANY LIBRARY NAMES SPECIFIED.* 
          SB3    B3-B1       (B3) = NUMBER OF ACTUAL ARGUMENTS
          GT     B3,B5,ABT   IF TOO MANY ARGUMENTS
          EQ     PRS14       ISSUE GLOBAL LIBRARY SET 
  
*         ADD TO CURRENT GLOBAL LIBRARY SET.
  
 PRS3     SA1    GLIB 
          ZR     X1,PRS2     IF CURRENT SET EMPTY 
          SA1    GLPW        SET ARGUMENT COUNT TO NUMBER OF LIBRARIES
          LX1    24 
          BX6    -X3*X1 
          SX6    X6-GLIB
          SA6    ACNT 
          SA1    ARGR-1 
          SX0    PRSA        * TOO MANY LIBRARY NAMES SPECIFIED.* 
          SA5    PRSB        *SETGLS* PARAMETER WORD
 PRS4     SA1    A1+B1       READ NEXT ARGUMENT 
          ZR     X1,PRS13    IF END OF ARGUMENTS
          SA2    GLIB-1 
 PRS5     SA2    A2+B1       CHECK NEXT ENTRY 
          BX6    X3*X2       EXTRACT LIBRARY NAME 
          BX4    X1-X6       CHECK FOR DUPLICATE ENTRY
          ZR     X4,PRS4     IF DUPLICATE ENTRY 
          NZ     X6,PRS5     IF SLOT NOT EMPTY
          SB4    GLIB-1      CHECK NUMBER OF ARGUMENTS
          SB4    A2-B4       (B4) = ARGUMENT COUNT
          GT     B4,B5,ABT   IF TOO MANY ARGUMENTS
          SX6    B4          SAVE COUNT 
          SA6    ACNT 
          BX7    X1          STORE ARGUMENT IN LIST 
          SA7    A2 
          EQ     PRS4        CHECK NEXT ARGUMENT
  
*         DELETE FROM CURRENT LIBRARY SET.
  
 PRS6     SA1    GLIB 
          SA5    PRSB        *SETGLS* PARAMETER WORD FOR DELETES
          NZ     X1,PRS8     IF CURRENT SET NOT EMPTY 
 PRS7     SB2    B0          PROCESS AS *LIBRARY.*
          SX6    B0          CLEAR ARGUMENT COUNT 
          SA6    ACNT 
          EQ     PRS13       CLEAR GLOBAL SET 
  
 PRS8     SA1    GLIB-1 
          SB3    GLIB 
 PRS9     SA1    A1+B1       READ NEXT MEMBER OF CURRENT SET
          BX6    X3*X1       EXTRACT LIBRARY NAME 
          ZR     X6,PRS12    IF ALL CURRENT MEMBERS PROCESSED 
          SA4    ARGR-1 
 PRS10    SA4    A4+B1       READ NEXT LIBRARY TO DELETE
          ZR     X4,PRS11    IF END OF ARGUMENTS
          BX1    X6-X4
          ZR     X1,PRS9     IF CURRENT SET MEMBER = ARGUMENT 
          EQ     PRS10       CHECK MEMBER AGAINST NEXT ARGUMENT 
  
 PRS11    SA6    B3          SAVE CURRENT MEMBER
          SB3    B3+B1
          EQ     PRS9        CHECK NEXT MEMBER
  
 PRS12    SA6    B3 
          SA1    GLIB        CHECK FOR ALL CURRENT MEMBERS DELETED
          ZR     X1,PRS7     IF ALL CURRENT MEMBERS DELETED 
 PRS13    BX6    X5          REPLACE *SETGLS* PARAMETER WORD
          SA6    SLPW 
 PRS14    SA1    SLPW        SAVE TABLE ADDRESS 
          LX1    24 
          BX6    -X3*X1 
          SA6    TADR 
          RJ     CNS         CLEAR *NO-DROP* STATUS 
          EQ     PRSX        RETURN 
  
  
 PRSA     DATA   C* TOO MANY LIBRARY NAMES SPECIFIED.*
 PRSB     VFD    6/0,18/GLIB,36/0  *SETGLS* PARAMETER FOR DELETES 
 CNS      SPACE  4,15 
**        CNS - CLEAR *NO-DROP* STATUS. 
* 
*         *CNS* CLEARS THE *NO-DROP* STATUS SET ON CURRENT
*         MEMBERS OF THE GLOBAL LIBRARY SET WHICH ARE TO BE 
*         DELETED IN THE NEW GLOBAL LIBRARY SET.
* 
*         EXIT   *AUTO-DROP* STATUS SET ON ALL DELETED
*                GLOBAL LIBRARIES.
* 
*         USES   A - 1, 5.
*                B - 2. 
*                X - 1, 2, 5. 
* 
*         MACROS SETFET, SETFS, STATUS. 
  
  
 CNS      SUBR               ENTRY/EXIT 
          SA1    ACNT        CHECK NUMBER OF PARAMETERS 
          SB2    X1 
          ZR     B2,CNS1     IF *LIBRARY.*
          SA1    OTYP        CHECK OPTION TYPE
          SX2    X1-1RA 
          ZR     X2,CNSX     IF *ADD* OPTION
          SX2    X1-1RR 
          SA5    ARGR 
          NZ     X2,CNS2     IF NOT *REPLACE* OPTION
 CNS1     SA5    GLIB 
 CNS2     SB2    B0+         INITIALIZE POINTER 
 CNS3     SA1    A5+B2       CHECK NEXT LIBRARY 
          ZR     X1,CNSX     IF NO OTHER LIBRARIES
          SETFET ULIB,LFN=X1 CHANGE LOCAL FILE NAME 
          STATUS ULIB        CHECK FOR FILE 
          SA1    ULIB 
          MX2    -11
          LX2    1
          BX1    -X2*X1 
          ZR     X1,CNS4     IF FILE DOES NOT EXIST 
          SETFS  ULIB,AD     SET *AUTO-DROP* STATUS 
 CNS4     SB2    B2+B1       INCREMENT POINTER
          EQ     CNS3        CONTINUE UNTIL END OF LIBRARIES
  
          ERRNG  RFL=-*      IF *PRS* BIGGER THAN REST OF PROGRAM 
  
  
          END 
