TITLE "GET/SET MEMBER INFORMATION"; /************************************************************/ /* */ /* AUTHOR. LEIF SVALGAARD. */ /* WRITTEN. 91/01/10 */ /* REVISED. 91/01/15 */ /* */ /* CALL "MBRINFO" */ /* USING MBR-CONTROL, MBR-INFO */ /* */ /* 01 MBR-CONTROL. */ /* 02 MBR-OPERATION PIC X. */ /* 88 MBR-GET-INFO-FOR-THIS VALUE IS "G". */ /* 88 MBR-GET-INFO-FOR-NEXT VALUE IS "N". */ /* 88 MBR-SET-TYPE-AND-TEXT VALUE IS "T". */ /* 88 MBR-CLOSE-ACCESS-PATH VALUE IS "C". */ /* */ /* 02 MBR-FEEDBACK PIC X. */ /* 88 MBR-OK VALUE IS SPACE. */ /* 88 MBR-NOT-FOUND VALUE IS "N". */ /* 88 MBR-HARD-ERROR VALUE IS "E". */ /* 88 MBR-WRONG-OPERATION VALUE IS "O". */ /* 02 MBR-LIBRARY PIC X(10). */ /* 88 MBR-LIBRARY-LIST VALUE SPACES. */ /* 02 MBR-FILE PIC X(10). */ /* 02 MBR-MEMBER PIC X(10). */ /* 88 MBR-FIRST-MEMBER VALUE SPACES. */ /* */ /* 01 MBR-INFO. */ /* 02 MBR-TYPE PIC X(10). */ /* 02 MBR-TEXT PIC X(50). */ /* 02 MBR-DATE PIC X(13). */ /* 02 MBR-NBR-OF-RECS PIC 9(10). */ /* 02 MBR-REC-LENGTH PIC 9(05). */ /* */ /************************************************************/ DCL SPCPTR .PARM-CONTROL PARM; DCL SPCPTR .PARM-INFO PARM; DCL OL PARAMETERS(.PARM-CONTROL, .PARM-INFO) EXT PARM MIN(2); DCL DD PARM-CONTROL CHAR(10) BAS(.PARM-CONTROL); DCL DD PARM-OPERATION CHAR(1) DEF(PARM-CONTROL) POS(1); DCL DD PARM-FEEDBACK CHAR(1) DEF(PARM-CONTROL) POS(2); DCL DD PARM-LIBRARY CHAR(10) DEF(PARM-CONTROL) POS(3); DCL DD PARM-FILE CHAR(10) DEF(PARM-CONTROL) POS(13); DCL DD PARM-MEMBER CHAR(10) DEF(PARM-CONTROL) POS(23); DCL DD PARM-INFO CHAR(10) BAS(.PARM-INFO); DCL DD PARM-TYPE CHAR(10) DEF(PARM-INFO) POS(1); DCL DD PARM-TEXT CHAR(50) DEF(PARM-INFO) POS(11); DCL DD PARM-DATE CHAR(13) DEF(PARM-INFO) POS(61); DCL DD PARM-NBR-OF-RECS ZND(10,0) DEF(PARM-INFO) POS(74); DCL DD PARM-REC-LENGTH ZND( 5,0) DEF(PARM-INFO) POS(84); DCL SPCPTR .ODP-ROOT; DCL SPCPTR .MBR-CONTROL-BLOCK; DCL SPC ODP-ROOT BAS(.ODP-ROOT); DCL DD ODP-STATUS CHAR(4) DIR; DCL DD ODP-DEV-LENGTH BIN(4) DIR; DCL DD ODP-OPEN-SIZE BIN(4) DIR; DCL DD ODP.OPEN-FEEDBCK BIN(4) DIR; DCL DD ODP.DEV-NAMELIST BIN(4) DIR; DCL DD ODP.IO-FEEDBACK BIN(4) DIR; DCL DD ODP.LOCK-LIST BIN(4) DIR; DCL DD ODP.SPOOL-OUTPUT BIN(4) DIR; DCL DD ODP.MBR-DESCR BIN(4) DIR; DCL DD ODP.CUR-IN-REC BIN(4) DIR; DCL DD ODP.CUR-OUT-REC BIN(4) DIR; DCL DD ODP.OPEN-DMCQ BIN(4) DIR; DCL DD ODP.OUTSTANDINGS BIN(4) DIR; DCL DD * CHAR(12) DIR; DCL SYSPTR .ODP-CURSOR DIR; DCL SPCPTR * DIR; DCL SPCPTR .ODP-CDM-ERROR DIR; DCL SPCPTR .ODP-INPUT-BUFFER DIR; DCL SPCPTR .ODP-OUTPUT-BUFFER DIR; DCL DD ODP.CDM-CLOSING BIN(2) DIR; DCL DD ODP-DEV-NAME-IDX BIN(2) DIR; DCL DD ODP-NBR-OF-DEVS BIN(2) DIR; DCL DD ODP-SEQUENCE-NBR BIN(4) DIR; DCL DD ODP-REC-LENGTH BIN(2) DIR; DCL DD ODP-REC-LENGTH2 BIN(2) DIR; DCL DD ODP-NBR-OF-*RDS BIN(2) DIR; DCL DD ODP-RELEASE-NBR BIN(2) DIR; DCL DD ODP-OPEN-POSN CHAR(1) DIR; DCL DD ODP-OVR-REC-LEN BIN(2) DIR; DCL DD ODP-COM-DEV-CNT BIN(2) DIR; DCL DD ODP.INPUT-BPCA BIN(4) DIR; DCL DD ODP.OUTPUT-BPCA BIN(4) DIR; DCL DD ODP............ CHAR(1) DIR; DCL SPC MBR-CONTROL-BLOCK BAS(.MBR-CONTROL-BLOCK); DCL SYSPTR .MCB-DATA-SPACE-INDEX DIR; DCL SPCPTR .MCB-QUERY-SPACE DIR; DCL SPCPTR .MCB-HEADER DIR; DCL SPCPTR .MCB-UFCB-LAST-LOCK DIR; DCL SPCPTR .MCB-GET-OPTION-LIST DIR; DCL DD MCB-GET-OPT-LIST CHAR(132) DIR; DCL SPCPTR .MCB-PUT-OPTION-LIST DIR; DCL DD MCB-GET-OPT-SAVE CHAR(4) DIR; DCL DD MCB-PUT-OPT-SAVE CHAR(10) DIR; DCL DD * CHAR(3) DIR; DCL DD MCB-LAST-EXCPTID CHAR(7) DIR; DCL DD MCB-IO-SWITCHES CHAR(4) DIR; DCL DD MCB-REC-WAIT BIN(4) DIR; DCL DD MCB-TRANSF-UNIT BIN(2) DIR; DCL DD MCB-WRITE-RATIO BIN(2) DIR; DCL DD MCB-WRITE-COUNT BIN(2) DIR; DCL DD MCB-RECS-LOCKED BIN(2) DIR; DCL DD MCB-IO-SWITCHES2 CHAR(1) DIR; DCL DD MCB-FORMAT-PGM CHAR(10) DIR; DCL DD MCB-FORMAT-LIB CHAR(10) DIR; DCL DD MCB-EXPIRE-DATE CHAR(7) DIR; DCL DD MCB-JOIN-TYPE CHAR(1) DIR; DCL DD * CHAR(1) DIR; DCL DD MCB-VARIOUS BIN(2) DIR; DCL DD MCB-REC-UPD-LOCK BIN(4) DIR; DCL DD MCB-MBR-UPD-LOCK BIN(2) DIR; DCL DD MCB-MBR-FMT-SUBS BIN(2) DIR; DCL DD MCB-INV-REC-LOCK BIN(4) DIR; DCL DD MCB-COMMIT-INS BIN(2) DIR; DCL DD MCB-COMMIT-UPD BIN(2) DIR; DCL DD MCB-COMMIT-DLT BIN(2) DIR; DCL DD MCB-RECS-CLRPFM BIN(4) DIR; DCL DD MCB-EOF-DELAY BIN(4) DIR; DCL DD MCB-KEY-SAVEAREA CHAR(28) DIR; DCL DD MCB-RECS-PROCSD BIN(4) DIR; DCL DD MCB-RECS-RETRVD BIN(4) DIR; DCL DD MCB.DDM-SECTION BIN(4) DIR; DCL DD * CHAR(8) DIR; DCL DD MCB-KEY-LENGTH BIN(2) DIR; DCL DD MCB-FMT-LENGTH BIN(2) DIR; DCL DD MCB-MAX-KEY-LEN BIN(2) DIR; DCL DD MCB-NBR-OF-KEYS BIN(2) DIR; DCL DD MCB............ CHAR(1) DIR; DCL SPC MBR-HEADER BAS(.MCB-HEADER); DCL SYSPTR .MHDR-PREV-MCB DIR; DCL SYSPTR .MHDR-NEXT-MCB DIR; DCL SYSPTR .MHDR-FILE-CB DIR; DCL SYSPTR .MHDR-SHARE-DIR DIR; DCL SYSPTR .MHDR-DATA-DICT DIR; DCL DD MHDR-STATUS CHAR(2) DIR; DCL DD * CHAR(2) DIR; DCL DD MHDR-TEXT CHAR(50) DIR; DCL DD MHDR-TYPE CHAR(10) DIR; DCL DD * CHAR(10) DIR; DCL DD MHDR-CHANGE-DATE CHAR(13) DIR; DCL DD MHDR-CREATE-DATE CHAR(13) DIR; DCL DD MHDR-PREFRD-UNIT CHAR(1) DIR; DCL DD MHDR-ALLOC-TYPE CHAR(2) DIR; DCL DD MHDR-INIT-RECS BIN(4) DIR; DCL DD MHDR-RECS-EXTEND BIN(2) DIR; DCL DD MHDR-NBR-EXTENDS BIN(2) DIR; DCL DD MHDR-RECOVER-OPT CHAR(1) DIR; DCL DD MHDR-SAVE-DATE CHAR(13) DIR; DCL DD MHDR-RSTR-DATE CHAR(13) DIR; DCL DD MHDR-%-DLT-ALLOW CHAR(1) DIR; DCL DD MHDR.USER-AREA BIN(4) DIR; DCL DD MHDR-OLD-S-DATE CHAR(13) DIR; DCL DD MHDR-OLD-R-DATE CHAR(13) DIR; DCL DD MHDR........... CHAR(1) DIR; DCL SPC FILE-CONTROL-BLOCK BAS(.MHDR-FILE-CB); DCL DD FCB-FLAGS BIN(2) DIR; DCL DD FCB-LENGTH BIN(4) DIR; DCL DD FCB-SCOPE-ENTS BIN(2) DIR; DCL DD FCB-KEY-SPECS CHAR(14) DIR; DCL DD FCB-AUTHORITY CHAR(10) DIR; DCL DD FCB-PREF-UNIT CHAR(1) DIR; DCL DD FCB-MAX-MBRS BIN(2) DIR; DCL DD FCB-MAX-WAIT BIN(2) DIR; DCL DD FCB-WRITE-RATIO BIN(2) DIR; DCL DD FCB-NBR-MBRS BIN(2) DIR; DCL DD * CHAR(20) DIR; DCL DD FCB-TIMESTAMP CHAR(13) DIR; DCL DD FCB-TEXT-LENGTH BIN(2) DIR; DCL DD FCB-TEXT CHAR(50) DIR; DCL DD FCB-COMPILER-ID CHAR(13) DIR; DCL DD FCB-SOURCE-FILE CHAR(10) DIR; DCL DD FCB-SOURCE-MBR CHAR(10) DIR; DCL DD FCB-SOURCE-LIB CHAR(10) DIR; DCL DD FCB-PHYS-ATTRS CHAR(55) DIR; DCL DD FCB-LOGL-ATTRS CHAR(55) DIR; DCL SYSPTR .FCB-FIRST-MBR DIR; DCL SYSPTR .FCB-LAST-MBR DIR; DCL SYSPTR .FCB-ACCESS-SHARING DIR; DCL SYSPTR .FCB-DATA-SHARING DIR; DCL DD FCB............ CHAR(1) DIR; /* THE I/O IS DONE BY USING THE CALLX INSTRUCTION REFERENCING */ /* A SYSTEM POINTER THAT IS OBTAINED FROM THE ENTRY POINT */ /* TABLE. THE ENTRY POINT TABLE CONTAINS PRE-RESOLVED SYSTEM */ /* POINTERS (THOUSANDS...). THE SYSTEM ENTRY POINT TABLE */ /* IS ADDRESSED BY THE POINTER BASED ON THE PROCESS COMMUNI- */ /* CATION OBJECT (PCO): */ /* PCO POINTER --> POINTER TO SEPT --> PTR TO OS FUNCTION 1 */ /* PTR TO OS FUNCTION 2 */ /* ... */ DCL SPC PROCESS-COMM-AREA BASPCO; DCL SPCPTR PCO-POINTER DIR; DCL SPC SYSTEM-ENTRY-POINT-TABLE BAS(PCO-POINTER); DCL SPCPTR .SEPT(2047) DIR; /* THE USER FILE CONTROL BLOCK (UFCB) DEFINES THE FILE NAME, */ /* BUFFER SPACES AND ALL NECESSARY CONTROL INFORMATION NEEDED */ /* TO MANAGE THE FILE. IT ALSO PROVIDES THE FEEDBACKS NEEDED */ /* TO ACCESS VARIOUS STRUCTURES, SUCH AS THE ODP (THE OPEN */ /* DATA PATH). */ DCL DD UFCB CHAR(214) BDRY(16); DCL SPCPTR .UFCB-ODP DEF(UFCB) POS( 1); DCL SPCPTR .UFCB-INBUF DEF(UFCB) POS( 17); DCL SPCPTR .UFCB-OUTBUF DEF(UFCB) POS( 33); DCL SPCPTR .UFCB-OPEN-FEEDBACK DEF(UFCB) POS( 49); DCL SPCPTR .UFCB-IO-FEEDBACK DEF(UFCB) POS( 65); DCL SPCPTR .UFCB-NEXT-UFCB DEF(UFCB) POS( 81); DCL DD * CHAR(32) DEF(UFCB) POS( 97); DCL DD UFCB-FILE CHAR(10) DEF(UFCB) POS(129); DCL DD UFCB-LIB-ID BIN(2) DEF(UFCB) POS(139); DCL DD UFCB-LIBRARY CHAR(10) DEF(UFCB) POS(141); DCL DD UFCB-MBR-ID BIN(2) DEF(UFCB) POS(151); DCL DD UFCB-MEMBER CHAR(10) DEF(UFCB) POS(153); DCL DD UFCB-DEVICE-NAME CHAR(10) DEF(UFCB) POS(163); DCL DD UFCB-DEVICE-INDEX BIN(2) DEF(UFCB) POS(173); DCL DD UFCB-FLAGS-1 CHAR(1) DEF(UFCB) POS(175) INIT(X'80'); DCL DD UFCB-FLAGS-2 CHAR(1) DEF(UFCB) POS(176) INIT(X'00'); DCL DD UFCB-REL-VERSION CHAR(4) DEF(UFCB) POS(177); DCL DD UFCB-INV-MK-COUNT BIN (4) DEF(UFCB) POS(181); DCL DD UFCB-MORE-FLAGS CHAR(1) DEF(UFCB) POS(185); DCL DD * CHAR(23) DEF(UFCB) POS(186); DCL DD UFCB-RECORD-ID BIN (2) DEF(UFCB) POS(209) INIT(1); DCL DD UFCB-RECORD-LENGTH BIN (2) DEF(UFCB) POS(211) INIT(92); DCL DD UFCB-NO-MORE-PARMS BIN (2) DEF(UFCB) POS(213) INIT(32767); DCL SPCPTR .UFCB INIT(UFCB); DCL OL OPEN(.UFCB); DCL OL CLOSE(.UFCB); DCL CON CLOSE-ENTRY BIN(2) INIT(11); DCL CON OPEN-ENTRY BIN(2) INIT(12); DCL CON *LIBL BIN(2) INIT(-75); /* S/38: -72 */ DCL CON *FIRST BIN(2) INIT(-71); /* S/38: -73 */ DCL CON THE-LIB BIN(2) INIT(72); DCL CON THE-MBR BIN(2) INIT(73); DCL CON SPACES CHAR(10) INIT; DCL DD OPTION-ID BIN(2); DCL SPC OPEN-FEEDBACK BAS(.UFCB-OPEN-FEEDBACK); DCL DD OPFB-FILE-TYPE CHAR(2) DIR; DCL DD OPFB-FILE CHAR(10) DIR; DCL DD OPFB-LIBRARY CHAR(10) DIR; DCL DD OPFB-SPOOL-FILE CHAR(10) DIR; DCL DD OPFB-SPOOL-LIBRARY CHAR(10) DIR; DCL DD OPFB-SPOOL-NBR BIN(2) DIR; DCL DD OPFB-RECORD-LENGTH BIN(2) DIR; DCL DD OPFB-RECORD-LENGTH2 BIN(2) DIR; DCL DD OPFB-MEMBER CHAR(10) DIR; DCL DD OPFB-IN-BUFFER-SIZE BIN(4) DIR; DCL DD OPFB-OUT-BUFFER-SIZE BIN(4) DIR; DCL DD OPFB-DEVICE-CLASS BIN(2) DIR; DCL DD OPFB-OPENING-LOCATION CHAR(3) DIR; DCL DD OPFB-NBR-OF-ROWS BIN(2) DIR; DCL DD OPFB-NBR-OF-COLS BIN(2) DIR; DCL DD OPFB-NBR-OF-RECS BIN(4) DIR; DCL DD OPFB-CUR-RECORD-NBR BIN(4) DIR; DCL DD OPFB........... CHAR(1) DIR; DCL SPC IO-FEEDBACK BAS(.UFCB-IO-FEEDBACK); DCL DD IOFB-OFFSET-TO-DEV-DEP BIN(2) DIR; DCL DD IOFB-NBR-OF-PUTS BIN(4) DIR; DCL DD IOFB-NBR-OF-GETS BIN(4) DIR; DCL DD IOFB-NBR-OF-PUTGETS BIN(4) DIR; DCL DD IOFB-NBR-OF-OTHERS BIN(4) DIR; DCL DD IOFB-CURRENT-OPR CHAR(1) DIR; DCL DD IOFB-PREVIOUS-OPR CHAR(1) DIR; DCL DD IOFB-RECORD-FMT-NAME CHAR(10) DIR; DCL DD IOFB-ACTUAL-DEV-TYPE CHAR(1) DIR; DCL DD IOFB-ACTUAL-DEV-CLASS CHAR(1) DIR; DCL DD IOFB-ACTUAL-DEV-NAME CHAR(10) DIR; DCL DD IOFB-ACTUAL-REC-LENGTH BIN(4) DIR; DCL DD IOFB-REQUEST-ID CHAR(80) DIR; DCL DD IOFB-NBR-OF-RECS BIN(2) DIR; DCL DD * BIN(4) DIR; DCL DD IOFB-CUR-RECORD-NBR BIN(4) DIR; DCL DD IOFB........... CHAR(1) DIR; DCL EXCM EXCEPTION-LIST EXCID(H'0000') /* ALL */ BP(ERROR-DETECTED) IGN; /**************************************************************/ ENTRY * (PARAMETERS) EXT; TEST-OPERATION: CPYBLA PARM-FEEDBACK, SPACES; CMPBLA(B) PARM-OPERATION, "G"/EQ(OPEN-THE-MEMBER); CMPBLA(B) PARM-OPERATION, "N"/EQ(GET-INFO-FOR-NEXT); CMPBLA(B) PARM-OPERATION, "T"/EQ(OPEN-THE-MEMBER); CMPBLA(B) PARM-OPERATION, "C"/EQ(CLOSE-ACCESS-PATH); OP-ERROR-EXIT: CPYBLA PARM-FEEDBACK, "O"; RTX *; OPEN-THE-MEMBER: CPYBLA UFCB-FILE, PARM-FILE; CPYNV OPTION-ID, THE-LIB; CMPBLA(B) PARM-LIBRARY, SPACES/HI(SET-LIBRARY); CPYNV OPTION-ID, *LIBL; SET-LIBRARY: CPYNV UFCB-LIB-ID, OPTION-ID; CPYBLA UFCB-LIBRARY, PARM-LIBRARY; CPYNV OPTION-ID, THE-MBR; CMPBLA(B) PARM-MEMBER, SPACES/HI(SET-MEMBER); CPYNV OPTION-ID, *FIRST; SET-MEMBER: CPYNV UFCB-MBR-ID, OPTION-ID; CPYBLA UFCB-MEMBER, PARM-MEMBER; CALLX .SEPT(OPEN-ENTRY), OPEN, *; BRK "OPEN"; SETSPPFP .ODP-ROOT,.UFCB-ODP; ADDSPP .MBR-CONTROL-BLOCK,.ODP-ROOT, ODP.MBR-DESCR; CMPBLA(B) PARM-OPERATION, "T"/EQ(SET-TYPE-AND-TEXT); WORK-WITH-MEMBER: CPYBLA PARM-TYPE, MHDR-TYPE; CPYBLA PARM-TEXT, MHDR-TEXT; CPYBLA PARM-DATE, MHDR-CHANGE-DATE; CPYNV PARM-NBR-OF-RECS, OPFB-NBR-OF-RECS; CPYNV PARM-REC-LENGTH, ODP-REC-LENGTH; RTX *; GET-INFO-FOR-NEXT: SETSPPFP .MBR-CONTROL-BLOCK,.MHDR-NEXT-MCB; /* MORE TO COME */ AT-END-OF-LIST: CPYBLA PARM-FEEDBACK, "N"; RTX *; SET-TYPE-AND-TEXT: CPYBLA MHDR-TYPE, PARM-TYPE; CPYBLA MHDR-TEXT, PARM-TEXT; CLOSE-ACCESS-PATH: CALLX .SEPT(CLOSE-ENTRY), CLOSE, *; RTX *; ERROR-DETECTED: CPYBLA PARM-FEEDBACK, "E"; RTX *; PEND; /* THE MCB CONTAINS A PTR TO THE FILE CONTROL BLOCK */ /* WHICH IN TURN HAS POINTERS TO THE FIRST (AND LAST) MEMBERS */ /* THE PROBLEM IS TO GET THE NAME OF THE MEMBER FROM THAT INFO */ /* MAYBE MATERIALIZE THE MEMBER PTR? */