%INCLUDE FILEMONS GENERATED SCREENS DCL OL SCRNIO (.S-CTRL, .S-SD, .S-WA) ARG; DCL SYSPTR .SCRNIO; DCL DD RESOLVE CHAR(34); DCL DD RESOLVE-TYPE CHAR( 2) DEF(RESOLVE) POS( 1) INIT(X'0000'); DCL DD RESOLVE-NAME CHAR(30) DEF(RESOLVE) POS( 3); DCL DD RESOLVE-AUTH CHAR( 2) DEF(RESOLVE) POS(33) INIT(X'0000'); DCL DD SYSPTRS CHAR(16) BDRY(16); DCL SYSPTR .OWN-LIB DEF(SYSPTRS) POS( 1); DCL DD CUR-ENTRY-NBR BIN(4); DCL DD THE-ENTRY-NBR BIN(4); DCL DD LAST-ENTRY-NBR BIN(4); DCL DD THE-SORTKEY CHAR(16) BDRY(16); DCL DD SORTKEY(5000) CHAR(16); DCL DD ENTRIES(5000) CHAR(64) BDRY(16); DCL DD THE-ENTRY CHAR(64) BDRY(16); DCL DD ENTRY-DEVICE CHAR(10) DEF(THE-ENTRY) POS( 1); DCL DD ENTRY-USER CHAR(10) DEF(THE-ENTRY) POS(11); DCL DD ENTRY-NUMBER CHAR( 6) DEF(THE-ENTRY) POS(21); DCL DD ENTRY-TYPE CHAR( 1) DEF(THE-ENTRY) POS(27); DCL DD ENTRY-FILE CHAR(10) DEF(THE-ENTRY) POS(28); DCL DD ENTRY-LIBRARY CHAR(10) DEF(THE-ENTRY) POS(38); DCL DD ENTRY-OPERATION CHAR( 1) DEF(THE-ENTRY) POS(48); DCL DD ENTRY-COUNT BIN( 4) DEF(THE-ENTRY) POS(49); DCL DD ENTRY-MEMBER CHAR(10) DEF(THE-ENTRY) POS(53); DCL DD LINE BIN(2); DCL DD SIZE BIN(2); DCL CON PUT-CURSOR-THERE CHAR(1) INIT("."); DCL DD SCREEN-FINE-POSITION CHAR(4); DCL DD SCREEN-OPERATIONS CHAR(2); DCL DD PUT CHAR(1) DEF(SCREEN-OPERATIONS) POS(1); DCL DD GET CHAR(1) DEF(SCREEN-OPERATIONS) POS(2); DCL DD D-FIRST BIN(2); DCL DD D-LAST BIN(2); DCL DD D-SIZE BIN(2); DCL DD THE-CHAR CHAR(1); DCL DD ENTRY-NBR-FOR-LINE(24) BIN(4); DCL SYSPTR .SEPT(6440) BAS(@SEPT); DCL DD PCO CHAR(256) BASPCO; DCL SPCPTR @SEPT DEF(PCO) POS( 1); DCL SPCPTR .PARM1 PARM; DCL DD PARM-VALUE CHAR(1) BAS(.PARM1); DCL OL PARAMETERS(.PARM1) EXT PARM MIN(0); DCL DD NBR-OF-PARMS BIN(2); DCL DD SPCPTRS CHAR(48) BDRY(16); DCL SPCPTR .WCBSPC DEF(SPCPTRS) POS( 1); DCL SPCPTR .WCB-ROOT DEF(SPCPTRS) POS(17); DCL SPCPTR .WCB-ENTRY DEF(SPCPTRS) POS(33); DCL DD OWN-PCO CHAR(512) BASPCO; DCL SYSPTR @WCBT00 DEF(OWN-PCO) POS(433); DCL DD WCB-ROOT CHAR(2048) BAS(.WCB-ROOT); DCL SYSPTR .WCB-TABLES(20) DEF(WCB-ROOT) POS(577); DCL DD THE-TABLE BIN(4); DCL DD THE-OFFSET BIN(4); DCL DD WCBTBL-SPACE CHAR(256) BAS(.WCBSPC); DCL DD WCBTBL-SIZE BIN(4) DEF(WCBTBL-SPACE) POS(21); DCL DD WCB-ENTRY CHAR(1024) BAS(.WCB-ENTRY); DCL DD WCB-DEVICE CHAR(10) DEF(WCB-ENTRY) POS( 1); DCL DD WCB-USER CHAR(10) DEF(WCB-ENTRY) POS( 11); DCL DD WCB-NUMBER CHAR( 6) DEF(WCB-ENTRY) POS( 21); DCL SYSPTR .WCB-PCS DEF(WCB-ENTRY) POS( 33); DCL DD WCB-TYPE CHAR( 1) DEF(WCB-ENTRY) POS( 97); DCL DD WCB-STATUS CHAR( 1) DEF(WCB-ENTRY) POS( 98); DCL DD WCB-GROUP CHAR( 1) DEF(WCB-ENTRY) POS(100); DCL DD WCB-START-TIME CHAR( 8) DEF(WCB-ENTRY) POS(345); DCL SPCPTR .WCB-PCO; DCL DD WCB-PCO CHAR(992) BAS(.WCB-PCO); DCL DD WCB-PCO-GROUP-STATUS CHAR(1) DEF(WCB-PCO) POS(548); DCL DD WCB-PCO-SYSREQ-STATUS CHAR(1) DEF(WCB-PCO) POS(980); DCL DD DMCQ CHAR(512) BAS(.WCB-PCO); DCL SYSPTR @DMCQ DEF(DMCQ) POS(33); DCL MSPPTR .WALK; DCL DD ODP-OFFSET BAS(.WALK) BIN(4) POS(1); DCL SYSPTR .ODP BAS(.WALK) POS(49); DCL DD ODP-PTR CHAR(16) BDRY(16); DCL SPCPTR .ODP-SPACE DEF(ODP-PTR) POS(1); DCL DD ODP-SPACE CHAR(1024) BAS(.ODP-SPACE); DCL DD ODP-STATUS CHAR(4) DEF(ODP-SPACE) POS( 1); DCL DD ODP-DEV-LENGTH BIN(4) DEF(ODP-SPACE) POS( 5); DCL DD ODP-OPEN-SIZE BIN(4) DEF(ODP-SPACE) POS( 9); DCL DD ODP.OPEN-FEEDBACK BIN(4) DEF(ODP-SPACE) POS( 13); DCL DD ODP.DEV-NAMELIST BIN(4) DEF(ODP-SPACE) POS( 17); DCL DD ODP.IO-FEEDBACK BIN(4) DEF(ODP-SPACE) POS( 21); DCL DD ODP.LOCK-LIST BIN(4) DEF(ODP-SPACE) POS( 25); DCL DD ODP.SPOOL-OUTPUT BIN(4) DEF(ODP-SPACE) POS( 29); DCL DD ODP.MBR-DESCR BIN(4) DEF(ODP-SPACE) POS( 33); DCL DD ODP.CUR-IN-REC BIN(4) DEF(ODP-SPACE) POS( 37); DCL DD ODP.CUR-OUT-REC BIN(4) DEF(ODP-SPACE) POS( 41); DCL DD ODP.OPEN-DMCQ BIN(4) DEF(ODP-SPACE) POS( 45); DCL DD ODP.OUTSTANDINGS BIN(4) DEF(ODP-SPACE) POS( 49); DCL DD * CHAR(12) DEF(ODP-SPACE) POS( 53); DCL SYSPTR .ODP-CURSOR DEF(ODP-SPACE) POS( 65); DCL SPCPTR * DEF(ODP-SPACE) POS( 81); DCL SPCPTR .ODP-CDM-ERROR DEF(ODP-SPACE) POS( 97); DCL SPCPTR .ODP-INPUT-BUFFER DEF(ODP-SPACE) POS(113); DCL SPCPTR .ODP-OUTPUT-BUFFER DEF(ODP-SPACE) POS(129); DCL DD ODP.CDM-CLOSING BIN(2) DEF(ODP-SPACE) POS(145); DCL DD ODP-DEV-NAME-IDX BIN(2) DEF(ODP-SPACE) POS(147); DCL DD ODP-NBR-OF-DEVS BIN(2) DEF(ODP-SPACE) POS(149); DCL DD ODP-SEQUENCE-NBR BIN(4) DEF(ODP-SPACE) POS(151); DCL DD ODP-REC-LENGTH BIN(2) DEF(ODP-SPACE) POS(155); DCL DD ODP-REC-LENGTH2 BIN(2) DEF(ODP-SPACE) POS(157); DCL DD ODP-NBR-OF-*RDS BIN(2) DEF(ODP-SPACE) POS(159); DCL DD ODP-RELEASE-NBR BIN(2) DEF(ODP-SPACE) POS(161); DCL DD ODP-OPEN-POSN CHAR( 1) DEF(ODP-SPACE) POS(163); DCL DD ODP-OVR-REC-LEN BIN(2) DEF(ODP-SPACE) POS(164); DCL DD ODP-COM-DEV-CNT BIN(2) DEF(ODP-SPACE) POS(166); DCL DD ODP.INPUT-BPCA BIN(4) DEF(ODP-SPACE) POS(168); DCL DD ODP.OUTPUT-BPCA BIN(4) DEF(ODP-SPACE) POS(172); DCL DD * CHAR( 1) DEF(ODP-SPACE) POS(176); DCL SPCPTR .OPEN-FEEDBACK; DCL DD OPEN-FEEDBACK CHAR(256) BAS(.OPEN-FEEDBACK); DCL DD ODP-FILETYPE CHAR( 2) DEF(OPEN-FEEDBACK) POS( 1); DCL DD ODP-FILE CHAR(10) DEF(OPEN-FEEDBACK) POS( 3); DCL DD ODP-LIBRARY CHAR(10) DEF(OPEN-FEEDBACK) POS( 13); DCL DD ODP-SPOOL-FILE CHAR(10) DEF(OPEN-FEEDBACK) POS( 23); DCL DD ODP-SPOOL-LIB CHAR(10) DEF(OPEN-FEEDBACK) POS( 33); DCL DD ODP-SPOOL-NBR BIN(2) DEF(OPEN-FEEDBACK) POS( 43); DCL DD ODP-MAX-RCD-SIZE BIN(2) DEF(OPEN-FEEDBACK) POS( 45); DCL DD ODP-MAX-KEY-SIZE BIN(2) DEF(OPEN-FEEDBACK) POS( 47); DCL DD ODP-MEMBER CHAR(10) DEF(OPEN-FEEDBACK) POS( 49); DCL DD * BIN(4) DEF(OPEN-FEEDBACK) POS( 59); DCL DD * BIN(4) DEF(OPEN-FEEDBACK) POS( 63); DCL DD ODP-DEVICE-TYPE BIN(4) DEF(OPEN-FEEDBACK) POS( 67); DCL DD * CHAR( 3) DEF(OPEN-FEEDBACK) POS( 69); DCL DD ODP-NBR-LINES BIN(2) DEF(OPEN-FEEDBACK) POS( 72); DCL DD ODP-NBR-COLUMNS BIN(2) DEF(OPEN-FEEDBACK) POS( 74); DCL DD ODP-NBR-REC-OPEN BIN(4) DEF(OPEN-FEEDBACK) POS( 76); DCL DD ODP-ACCESS-TYPE CHAR( 2) DEF(OPEN-FEEDBACK) POS( 80); DCL DD ODP-DUPL-KEY CHAR( 1) DEF(OPEN-FEEDBACK) POS( 82); DCL DD ODP-SOURCE-FILE CHAR( 1) DEF(OPEN-FEEDBACK) POS( 83); DCL DD * CHAR(10) DEF(OPEN-FEEDBACK) POS( 84); DCL DD * CHAR(10) DEF(OPEN-FEEDBACK) POS( 94); DCL DD ODP-VOL-LABEL BIN(2) DEF(OPEN-FEEDBACK) POS(104); DCL DD ODP-MAX-RCD-BLK BIN(2) DEF(OPEN-FEEDBACK) POS(106); DCL DD ODP-OVERFLOW-LN BIN(2) DEF(OPEN-FEEDBACK) POS(108); DCL DD ODP-BLK-RCD-INCR BIN(2) DEF(OPEN-FEEDBACK) POS(110); DCL DD * BIN(4) DEF(OPEN-FEEDBACK) POS(112); DCL DD ODP-MISC-FLAGS1 CHAR( 1) DEF(OPEN-FEEDBACK) POS(116); DCL DD ODP-REQUESTER CHAR(10) DEF(OPEN-FEEDBACK) POS(117); DCL DD ODP-OPEN-FILES BIN(2) DEF(OPEN-FEEDBACK) POS(127); DCL DD * BIN(2) DEF(OPEN-FEEDBACK) POS(129); DCL DD ODP-NBR-FILES BIN(2) DEF(OPEN-FEEDBACK) POS(131); DCL DD ODP-MISC-FLAGS2 CHAR( 1) DEF(OPEN-FEEDBACK) POS(133); DCL DD ODP-OPEN-ID CHAR( 2) DEF(OPEN-FEEDBACK) POS(134); DCL DD ODP-MAX-FMT-SIZE BIN(2) DEF(OPEN-FEEDBACK) POS(136); DCL DD * BIN(2) DEF(OPEN-FEEDBACK) POS(138); DCL DD ODP-MISC-FLAGS3 CHAR( 1) DEF(OPEN-FEEDBACK) POS(140); DCL DD * CHAR( 6) DEF(OPEN-FEEDBACK) POS(141); DCL DD ODP-NBR-DEVICES BIN(2) DEF(OPEN-FEEDBACK) POS(147); DCL DD ODP-DEV-LIST... CHAR( 1) DEF(OPEN-FEEDBACK) POS(149); DCL SPCPTR .IO-FEEDBACK; DCL DD IO-FEEDBACK CHAR(512) BAS(.IO-FEEDBACK); DCL DD IO-FILE-DEPNT-AREA BIN(2) DEF(IO-FEEDBACK) POS( 1); DCL DD IO-WRITE-COUNT BIN(4) DEF(IO-FEEDBACK) POS( 3); DCL DD IO-READ-COUNT BIN(4) DEF(IO-FEEDBACK) POS( 7); DCL DD IO-UPDATE-COUNT BIN(4) DEF(IO-FEEDBACK) POS(11); DCL DD IO-OTHER-COUNT BIN(4) DEF(IO-FEEDBACK) POS(15); DCL DD * CHAR(1) DEF(IO-FEEDBACK) POS(19); DCL DD IO-CUR-OPERATION CHAR(1) DEF(IO-FEEDBACK) POS(20); DCL DD IO-RECORD-FORMAT CHAR(10) DEF(IO-FEEDBACK) POS(21); DCL DD IO-DEVICE-CLASS CHAR(2) DEF(IO-FEEDBACK) POS(31); DCL DD IO-DEVICE-NAME CHAR(10) DEF(IO-FEEDBACK) POS(33); DCL DD IO-RECORD-LENGTH BIN(4) DEF(IO-FEEDBACK) POS(43); DCL DD * CHAR(80) DEF(IO-FEEDBACK) POS(47); DCL DD IO-RECORDS-IN-BLOCK BIN(2) DEF(IO-FEEDBACK) POS(127); DCL DD IO-RCD-FORMAT-LENGTH BIN(2) DEF(IO-FEEDBACK) POS(129); DCL DD * CHAR(2) DEF(IO-FEEDBACK) POS(131); DCL DD IO-BLOCK-COUNT BIN(4) DEF(IO-FEEDBACK) POS(133); DCL DD * CHAR(8) DEF(IO-FEEDBACK) POS(137); DCL DD SHOW-MODE CHAR(1) INIT(X'00'); DCL DD THE-COUNT ZND(10,0); DCL DD COUNT-TOP BIN(2); DCL DD THE-SIZE BIN(2); DCL DD CHAR-NBR BIN(2); DCL DD OP-CODE BIN(2); DCL DD OP-TEXT(9) CHAR(9) INIT("READ", "RD/DIRECT", "RD/KEYED", "04", "WRITE", "WRT/READ", "UPDATE", "DELETE", "OTHER"); DCL DD DELTA-TIME CHAR(8); DCL DD START-TIME CHAR(8); DCL DD MACHINE-CLOCK CHAR(2) INIT(X'0100'); DCL SPCPTR .MACHINE-ATTR INIT(MACHINE-ATTR); DCL DD MACHINE-ATTR CHAR(24) BDRY(16); DCL DD MAT-MAX-SIZE BIN(4) DEF(MACHINE-ATTR) POS( 1) INIT(16); DCL DD MAT-ACT-SIZE BIN(4) DEF(MACHINE-ATTR) POS( 5); DCL DD THE-TIMESTAMP CHAR(8) DEF(MACHINE-ATTR) POS( 9); DCL DD THE-TIME-HI BIN(4) UNSGND DEF(THE-TIMESTAMP) POS(1); DCL DD THE-TIME-LO BIN(4) UNSGND DEF(THE-TIMESTAMP) POS(5); DCL DD * CHAR(8) DEF(MACHINE-ATTR) POS(17); DCL DD TIMESTAMP PKD(21,0); /* CAN HOLD 64-BIT UNSIGNED */ DCL DD TIMESTAMP-HI PKD(11,0); DCL DD TIMESTAMP-LO PKD(11,0); DCL DD TWO**32 PKD(11,0) INIT(P'4294967296'); DCL DD NBR-SECONDS PKD(15,0); /*******************************************************************/ ENTRY * (PARAMETERS) EXT; CPYNV D-SIZE , S-JOB-AREA-SIZE; ADDN D-FIRST, S-JOB-AREA-BASE, 1; ADDN D-LAST , S-JOB-AREA-BASE, D-SIZE; ADDN COUNT-TOP, S-COUNT-SIZE , 1; STPLLEN NBR-OF-PARMS; RESOLVE-PGMS: CALLI GET-OWN-LIB, *, .GET-OWN-LIB; CPYBLA RESOLVE-TYPE, X'0201'; CPYBLAP RESOLVE-NAME, "LSSCRNIO", " "; RSLVSP .SCRNIO, RESOLVE, .OWN-LIB, *; CPYBLAP RESOLVE-NAME, "LSHELP" , " "; RSLVSP .HELP, RESOLVE, .OWN-LIB, *; SHOW-INITIAL-SCREEN: CPYBLAP S-MESSAGE, "Scanning all ODPs...", " "; CPYBLA A-S-MESSAGE, "TITLE"; CPYBLA A-S-MORE, "BLANK"; CPYBLA SCREEN-OPERATIONS, "PG"; /* PUT, GET */ CPYBLA S-OPERATION, PUT; CALLX .SCRNIO, SCRNIO, *; /* SEND SCREEN */ CPYBLA A-S-MESSAGE, "BLANK"; CPYBLA A-S-MORE, "TITLE"; GET-WCB-ROOT: SETSPPFP .WCB-ROOT, @WCBT00; GET-START-TIME: CPYBLA SORT-DIR, SORT-DIRS(SORT-NBR); MATMATR .MACHINE-ATTR, MACHINE-CLOCK; CPYBLA START-TIME, THE-TIMESTAMP; CPYNV NBR-SECONDS, 3600; /* ONE HOUR */ CMPBLA(B) S1YOUNGER-UNIT, "M"/NEQ(=+2); CPYNV NBR-SECONDS, 60;: /* ONE MINUTE */ CMPBLA(B) S1YOUNGER-UNIT, "D"/NEQ(=+2); CPYNV NBR-SECONDS, 86400;: /* ONE DAY */ MULT(S) NBR-SECONDS, S1YOUNGER-THAN; MULT TIMESTAMP, NBR-SECONDS, 4096000000; DIVREM THE-TIME-HI, TIMESTAMP, TWO**32, THE-TIME-LO; CPYBLA DELTA-TIME, THE-TIMESTAMP; SUBLC(S) START-TIME, DELTA-TIME; SEARCH-WORK-CONTROL-TABLES: CPYNV LAST-ENTRY-NBR, 0; CPYNV THE-TABLE, 0; SEARCH-NEXT-TABLE: ADDN(S) THE-TABLE, 1; CMPNV(B) THE-TABLE, 30 /HI(DONE-WITH-TABLES); CMPPTRT(B) .WCB-TABLES(THE-TABLE), */EQ(DONE-WITH-TABLES); SETSPPFP .WCBSPC, .WCB-TABLES(THE-TABLE); PREPARE-TO-SEARCH-WCB-TABLE: SETSPPFP .WCB-ENTRY, .WCBSPC; CPYNV(B) THE-OFFSET, H'0300'/POS(=+2); NEXT-WCBTBL-ENTRY: ADDN(S) THE-OFFSET, H'0400';: CMPNV(B) THE-OFFSET, WCBTBL-SIZE/NLO(SEARCH-NEXT-TABLE); SETSPPO .WCB-ENTRY, THE-OFFSET; CHECK-WCBTBL-ENTRY: CMPBLA(B) WCB-STATUS, X'20'/NEQ (NEXT-WCBTBL-ENTRY); /*ACTIVE */ TSTBUM(B) WCB-GROUP , X'06'/ONES(NEXT-WCBTBL-ENTRY); /*SUSPGRP */ SETSPPFP .WCB-PCO, .WCB-PCS; TSTBUM(B) WCB-PCO-SYSREQ-STATUS, X'80'/NZER(NEXT-WCBTBL-ENTRY); CHECK-START-TIME: CMPBLA(B) WCB-START-TIME, START-TIME/LO(NEXT-WCBTBL-ENTRY); CHECK-USER-PROFILE: CMPBLAP(B) S1USER-PROFILE, "*ANY", " "/ EQ(HAVE-ACTIVE-ENTRY); CMPBLAP(B) WCB-USER, S1USER-PROFILE, " "/NEQ(NEXT-WCBTBL-ENTRY); HAVE-ACTIVE-ENTRY: CPYBLA ENTRY-DEVICE, WCB-DEVICE; CPYBLA ENTRY-USER, WCB-USER; CPYBLA ENTRY-NUMBER, WCB-NUMBER; CPYBLA ENTRY-TYPE, WCB-TYPE; GET-ODP: SETSPPFP .WALK, @DMCQ; SETSPPO .WALK, H'98'; /* PTR TO SHARED HEADER */ CMPNV(B) ODP-OFFSET, -1/NEQ(WALK-ODP-CHAIN); SETSPPO .WALK, H'A0';: WALK-ODP-CHAIN: CMPNV(B) ODP-OFFSET, -1/EQ(DONE-WITH-ODP); SETSPPO .WALK, ODP-OFFSET; SETSPPFP .ODP-SPACE, .ODP; ADDSPP .OPEN-FEEDBACK, .ODP-SPACE, ODP.OPEN-FEEDBACK; SKIP-IF-DISPLAY-FILE: CMPBLA(B) ODP-FILETYPE, "DS"/ EQ(WALK-ODP-CHAIN); SKIP-IF-LOGICAL-FILE: TSTBUM(B) ODP-MISC-FLAGS1, X'08'/ONES(WALK-ODP-CHAIN); HAVE-DATABASE-OR-SPOOLFILE: ADDSPP .IO-FEEDBACK, .ODP-SPACE, ODP.IO-FEEDBACK; CMPBLA(B) SHOW-MODE, X'00'/EQ(=+2); /* 05 IS WRITES ONLY */ CMPBLA(B) IO-CUR-OPERATION, X'05'/NEQ(WALK-ODP-CHAIN);: CMPBLA(B) IO-CUR-OPERATION, X'00'/ EQ(WALK-ODP-CHAIN); CPYBLA ENTRY-OPERATION, IO-CUR-OPERATION; CPYNV ENTRY-COUNT, IO-WRITE-COUNT; ADDN(S) ENTRY-COUNT, IO-READ-COUNT; ADDN(S) ENTRY-COUNT, IO-UPDATE-COUNT; ADDN(S) ENTRY-COUNT, IO-OTHER-COUNT; CMPNV(B) ENTRY-COUNT, 0/EQ(WALK-ODP-CHAIN); CPYBLA ENTRY-LIBRARY, ODP-LIBRARY; CPYBLA ENTRY-FILE, ODP-FILE; CPYBLA ENTRY-MEMBER, ODP-MEMBER; ADDN(S) LAST-ENTRY-NBR, 1; CPYBWP ENTRIES(LAST-ENTRY-NBR), THE-ENTRY; SET-SORTKEY: CPYBREP THE-SORTKEY(1:10), X'00'; CMPBLA(B) SORT-DIR, "A"/NEQ(=+2); XOR THE-SORTKEY(11:6), ENTRY-NUMBER, X'FFFFFFFFFFFF';: CMPBLA(B) SORT-DIR, "D"/NEQ(=+2); XOR THE-SORTKEY(11:6), ENTRY-NUMBER, X'000000000000';: CMPNV(B) SORT-NBR, 1/NEQ(=+2); CPYBLA THE-SORTKEY, ENTRY-DEVICE;: CMPNV(B) SORT-NBR, 2/NEQ(=+2); CPYBLA THE-SORTKEY, ENTRY-USER;: CMPNV(B) SORT-NBR, 3/NEQ(=+2); CPYBLA THE-SORTKEY, ENTRY-NUMBER;: CMPNV(B) SORT-NBR, 4/NEQ(=+2); CPYBLA THE-SORTKEY, ENTRY-TYPE;: CMPNV(B) SORT-NBR, 5/NEQ(=+2); CPYBLA THE-SORTKEY, ENTRY-FILE;: CMPNV(B) SORT-NBR, 6/NEQ(=+2); CPYBLA THE-SORTKEY, ENTRY-LIBRARY;: CMPNV(B) SORT-NBR, 7/NEQ(=+2); CPYBLA THE-SORTKEY, ENTRY-COUNT;: CMPNV(B) SORT-NBR, 8/NEQ(=+2); CPYBLA THE-SORTKEY, ENTRY-OPERATION;: CPYBLA SORTKEY(LAST-ENTRY-NBR), THE-SORTKEY; B WALK-ODP-CHAIN; DONE-WITH-ODP: B NEXT-WCBTBL-ENTRY; DONE-WITH-TABLES: CALLI COMBSORT, *, .COMBSORT; CPYNV CUR-ENTRY-NBR, 1; DIALOG-LOOP: CPYNV LINE, S-SORT-1-ROW; CPYBREP S-WA-LINE(LINE), " "; CMPNV(B) SORT-NBR, 1/NEQ(=+2); CPYBLA S-SORT-1, ".";: CMPNV(B) SORT-NBR, 2/NEQ(=+2); CPYBLA S-SORT-2, ".";: CMPNV(B) SORT-NBR, 3/NEQ(=+2); CPYBLA S-SORT-3, ".";: CMPNV(B) SORT-NBR, 4/NEQ(=+2); CPYBLA S-SORT-4, ".";: CMPNV(B) SORT-NBR, 5/NEQ(=+2); CPYBLA S-SORT-5, ".";: CMPNV(B) SORT-NBR, 6/NEQ(=+2); CPYBLA S-SORT-6, ".";: CMPNV(B) SORT-NBR, 7/NEQ(=+2); CPYBLA S-SORT-7, ".";: CMPNV(B) SORT-NBR, 8/NEQ(=+2); CPYBLA S-SORT-8, ".";: CPYNV LINE, S-JOB-AREA-BASE; SHOW-LINE: ADDN(S) LINE, 1; CPYBLA SD-LINE, S-SD-LINE(LINE); CPYBREP WA-LINE, " "; CMPNV(B) CUR-ENTRY-NBR, LAST-ENTRY-NBR/HI(EMPTY-LINE); CPYBWP THE-ENTRY, ENTRIES(CUR-ENTRY-NBR); CPYBLA A-S-OPTION, "JNPUT"; CPYBLA S-JOB-DEVICE, ENTRY-DEVICE; CPYBLA S-JOB-USER , ENTRY-USER; CPYBLA S-JOB-NUMBER, ENTRY-NUMBER; CPYBLA S-JOB-TYPE , ENTRY-TYPE; CMPBLAP(B) S1SHOW-MBR-OR-FILE, "*FILE", " "/NEQ(=+3); CPYBLAP S-FILE-HEADER, "File", " "; CPYBLA S-FILE , ENTRY-FILE;: CMPBLAP(B) S1SHOW-MBR-OR-FILE, "*MBR", " "/NEQ(=+3); CPYBLAP S-FILE-HEADER, "Member", " "; CPYBLA S-FILE , ENTRY-MEMBER;: CPYBLA S-LIBRARY , ENTRY-LIBRARY; CPYNV THE-COUNT, ENTRY-COUNT; CPYBLA S-COUNT, THE-COUNT; VERIFY(B) CHAR-NBR, S-COUNT, "0"/ZER(=+3); SUBN THE-SIZE, COUNT-TOP, CHAR-NBR; CPYBOLAP S-COUNT, S-COUNT(CHAR-NBR:THE-SIZE), " ";: CPYBRAP OP-CODE, ENTRY-OPERATION, X'00'; CMPNV(B) OP-CODE, 8/NHI(=+2); CPYNV OP-CODE, 9;: CPYBLAP S-LAST-OP, OP-TEXT(OP-CODE), " "; STORE-LINE: CPYNV ENTRY-NBR-FOR-LINE(LINE), CUR-ENTRY-NBR; ADDN(S) CUR-ENTRY-NBR, 1; SET-LINE-INFO: CPYBLA S-WA-LINE(LINE), WA-LINE; CPYBLA S-SD-LINE(LINE), SD-LINE; CMPNV(B) LINE, D-LAST/LO(SHOW-LINE); CPYBLAP S-MORE, " Bottom", " "; CMPNV(B) CUR-ENTRY-NBR, LAST-ENTRY-NBR/HI(=+2); CPYBLAP S-MORE, "More...", " ";: SUBN(S) CUR-ENTRY-NBR, S-JOB-AREA-SIZE; B SHOW-THE-SCREEN; EMPTY-LINE: CPYBLA A-S-OPTION, "LABEL"; B STORE-LINE; SHOW-THE-SCREEN: CMPNV(B) LAST-ENTRY-NBR, 0/EQ(NO-FILES-OPEN); SEND-THE-SCREEN: CALLX .SCRNIO, SCRNIO, *; /* SEND SCREEN */ GET-THE-SCREEN: CPYBLA S-OPERATION, GET; CALLX .SCRNIO, SCRNIO, *; /* RECEIVE SCREEN */ CPYBLA S-OPERATION, PUT; CPYBLA A-S-MESSAGE, "BLANK"; CPYNV LINE, S-CURSOR-ROW; CHECK-PASSIVE-KEYS: CMPNV(B) S-PFKEY, 01/EQ(MAIN-HELP); CMPNV(B) S-PFKEY, 03/EQ(EXIT); CMPNV(B) S-PFKEY, 09/EQ(COMMAND-POPUP); CMPNV(B) S-PFKEY, 10/EQ(SETTINGS); CMPNV(B) S-PFKEY, 12/EQ(CANCEL); CHECK-ACTIVE-KEYS: CMPNV(B) S-PFKEY, 00/EQ(ENTER-KEY); CMPNV(B) S-PFKEY, 05/EQ(REFRESH); CMPNV(B) S-PFKEY, 06/EQ(TOGGLE-MODE); CMPNV(B) S-PFKEY, 07/EQ(PREVIOUS-PAGE); CMPNV(B) S-PFKEY, 08/EQ(NEXT-PAGE); CMPNV(B) S-PFKEY, 11/EQ(SORT); KEY-NOT-USED: CPYBLAP S-MESSAGE, "Function key not used", " "; SHOW-ERROR-MESSAGE: CPYBLA A-S-MESSAGE, "TITLE"; B SEND-THE-SCREEN; NO-FILES-OPEN: CPYBLAP S-MESSAGE, "No files open for selected jobs...", " "; B SHOW-ERROR-MESSAGE; SORT: CMPBLA(B) S-CURSOR-COL, S-JOB-DEVICE-COL/NEQ(=+2); CPYNV(B) SORT-NBR, 1/POS(REFRESH);: CMPBLA(B) S-CURSOR-COL, S-JOB-USER-COL /NEQ(=+2); CPYNV(B) SORT-NBR, 2/POS(REFRESH);: CMPBLA(B) S-CURSOR-COL, S-JOB-NUMBER-COL/NEQ(=+2); CPYNV(B) SORT-NBR, 3/POS(REFRESH);: CMPBLA(B) S-CURSOR-COL, S-JOB-TYPE-COL /NEQ(=+2); CPYNV(B) SORT-NBR, 4/POS(REFRESH);: CMPBLA(B) S-CURSOR-COL, S-FILE-COL /NEQ(=+2); CPYNV(B) SORT-NBR, 5/POS(REFRESH);: CMPBLA(B) S-CURSOR-COL, S-LIBRARY-COL /NEQ(=+2); CPYNV(B) SORT-NBR, 6/POS(REFRESH);: CMPBLA(B) S-CURSOR-COL, S-COUNT-COL /NEQ(=+2); CPYNV(B) SORT-NBR, 7/POS(REFRESH);: CMPBLA(B) S-CURSOR-COL, S-LAST-OP-COL /NEQ(=+2); CPYNV(B) SORT-NBR, 8/POS(REFRESH);: CMPNV(B) SORT-NBR, 8/LO(=+2); CPYNV(B) SORT-NBR, 1/POS(REFRESH);: ADDN(SB) SORT-NBR, 1/POS(REFRESH); COMING-SOON: CPYBLAP S-MESSAGE, "Coming Soon...", " "; B SHOW-ERROR-MESSAGE; TOGGLE-MODE: XOR(S) SHOW-MODE, X'FF'; CMPBLA(B) SHOW-MODE, X'00'/NEQ(=+2); CPYBLAP S-F6, "F6=Only Writes ", " ";: CMPBLA(B) SHOW-MODE, X'FF'/NEQ(=+2); CPYBLAP S-F6, "F6=All operations", " ";: REFRESH: B GET-WCB-ROOT; NEXT-PAGE: ADDN THE-ENTRY-NBR, CUR-ENTRY-NBR, S-JOB-AREA-SIZE; CMPNV(B) THE-ENTRY-NBR, LAST-ENTRY-NBR/HI(ALREADY-AT-BOTTOM); ADDN(SB) CUR-ENTRY-NBR, S-JOB-AREA-SIZE/POS(DIALOG-LOOP); ALREADY-AT-BOTTOM: CPYBLAP S-MESSAGE, "Already at the end", " "; B SHOW-MESSAGE; PREVIOUS-PAGE: CMPNV(B) CUR-ENTRY-NBR, 1/NHI(ALREADY-AT-TOP); SUBN(SB) CUR-ENTRY-NBR, S-JOB-AREA-SIZE/POS(DIALOG-LOOP); CPYNV(B) CUR-ENTRY-NBR, 1/POS(DIALOG-LOOP); ALREADY-AT-TOP: CPYBLAP S-MESSAGE, "Already at the top", " "; B SHOW-MESSAGE; CANCEL: EXIT: RTX *; COMMAND-POPUP: CALLX .SEPT(1852), *, *; B GET-THE-SCREEN; ENTER-KEY: CPYBLA S-FINE-ACTION, "."; /* KEEP CURSOR POSITION */ CPYNV LINE, S-JOB-AREA-BASE; CHECK-LINE: ADDN(S) LINE, 1; CMPNV(B) LINE, D-LAST/HI(DIALOG-LOOP); CPYBLA WA-LINE, S-WA-LINE(LINE); CPYBLA SD-LINE, S-SD-LINE(LINE); CMPBLA(B) S-OPTION, " "/EQ(CHECK-LINE); CPYNV THE-ENTRY-NBR, ENTRY-NBR-FOR-LINE(LINE); CPYBWP THE-ENTRY, ENTRIES(THE-ENTRY-NBR); CMPBLA(B) S-OPTION(2:1), " "/EQ(=+2); CPYBOLAP S-OPTION(1:2), S-OPTION(2:1), " ";: CMPBLA(B) S-OPTION, "1 "/EQ(EXECUTE-DISPLAY-FILE-D); CMPBLA(B) S-OPTION, "2 "/EQ(EXECUTE-DISPLAY-USER-P); CMPBLA(B) S-OPTION, "3 "/EQ(EXECUTE-WORK-WITH-JOB ); CPYBLAP S-MESSAGE, "Option is not valid", " "; SHOW-OPTION-ERROR: CPYBLA A-S-OPTION, "FAULT"; CPYBLA S-SD-LINE(LINE), SD-LINE; SHOW-MESSAGE: CPYBLA A-S-MESSAGE, "TITLE"; B SHOW-THE-SCREEN; DCL EXCM * EXCID(H'0000') BP(DIALOG-LOOP ) CV("MCH") IMD; DCL EXCM * EXCID(H'3074') BP(NOT-AUTHORIZED-FILE) CV("CPF") IMD; DCL EXCM * EXCID(H'3026') BP(NOT-AUTHORIZED-FILE) CV("CPF") IMD; DCL EXCM * EXCID(H'3014') BP(ACCESS-ERROR-FILE) CV("CPF") IMD; DCL EXCM * EXCID(H'3012') BP(ACCESS-ERROR-FILE) CV("CPF") IMD; DCL EXCM * EXCID(H'2217') BP(NOT-AUTHORIZED-USER) CV("CPF") IMD; DCL EXCM * EXCID(H'1071') BP(NOT-AUTHORIZED-JOB) CV("CPF") IMD; EXECUTE-DISPLAY-FILE-D: CPYBLAP COMMAND, "DSPFD FILE(", " "; CPYBLAP TEXT, ENTRY-LIBRARY, " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, "/", " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, ENTRY-FILE, " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, ")", " "; CALLI ATC, *, .ATC; EXECUTE-COMMAND: CALLX .SEPT(1989), QCMDEXC, *; B CHECK-LINE; EXECUTE-DISPLAY-USER-P: CPYBLAP COMMAND, "DSPUSRPRF USRPRF(", " "; CPYBLAP TEXT, ENTRY-USER, " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, ") TYPE(*ALL)", " "; CALLI ATC, *, .ATC; B EXECUTE-COMMAND; EXECUTE-WORK-WITH-JOB: CPYBLAP COMMAND, "WRKJOB JOB(", " "; CPYBLAP TEXT, ENTRY-NUMBER , " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, "/", " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, ENTRY-USER, " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, "/", " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, ENTRY-DEVICE, " "; CALLI ATC, *, .ATC; CPYBLAP TEXT, ") OPTION(*ALL)", " "; CALLI ATC, *, .ATC; B EXECUTE-COMMAND; DCL SPCPTR .CMD-LENGTH INIT(CMD-LENGTH); DCL DD CMD-LENGTH PKD(15,5) INIT(P'80'); DCL SPCPTR .COMMAND INIT(COMMAND); DCL DD COMMAND CHAR(80); DCL OL QCMDEXC (.COMMAND, .CMD-LENGTH) ARG; DCL DD TEXT CHAR(20); DCL INSPTR .ATC; ENTRY ATC INT; TRIML CHAR-NBR, COMMAND, " "; ADDN(S) CHAR-NBR, 1; CPYBLA COMMAND(CHAR-NBR:20), TEXT; B .ATC; NOT-AUTHORIZED-FILE: CPYBLAP S-MESSAGE, "Not authorized to this File", " "; B SHOW-OPTION-ERROR; ACCESS-ERROR-FILE: CPYBLAP S-MESSAGE, "This file cannot be accessed", " "; B SHOW-OPTION-ERROR; NOT-AUTHORIZED-USER: CPYBLAP S-MESSAGE, "Not authorized to user profile", " "; B SHOW-OPTION-ERROR; NOT-AUTHORIZED-JOB: CPYBLAP S-MESSAGE, "Not authorized to job", " "; B SHOW-OPTION-ERROR; DCL SYSPTR .HELP; DCL SPCPTR .HELP-ARG INIT(HELP-ARG); DCL DD HELP-ARG CHAR(90); DCL DD HELP-MBR CHAR(10) DEF(HELP-ARG) POS( 1) INIT("FILEMON"); DCL DD HELP-KEY CHAR(30) DEF(HELP-ARG) POS(11); DCL DD HELP-PROMPT CHAR(50) DEF(HELP-ARG) POS(41); DCL OL HELP(.HELP-ARG) ARG; MAIN-HELP: CPYBLAP HELP-KEY, "FILEMON", " "; CPYBLAP HELP-PROMPT, "File Monitor", " "; CMPBLA(B) S-CURSOR, S-MESSAGE-POSN /EQ(ERROR-MESSAGE-HELP); SHOW-MAIN-HELP: CALLX .HELP, HELP, *; B SHOW-THE-SCREEN; ERROR-MESSAGE-HELP: CPYBLAP HELP-KEY, "ERROR MESSAGES", " "; CPYBLAP HELP-PROMPT, "Error messages", " "; B SHOW-MAIN-HELP; /*******************************************************************/ DCL DD SORT-CONFIG CHAR(16) BDRY(4); DCL DD SORT-NBR BIN(4) DEF(SORT-CONFIG) POS( 1) INIT(3); DCL DD SORT-DIRS(8) CHAR(1) DEF(SORT-CONFIG) POS( 5) INIT ("A","A","D","A","A","A","D","D"); DCL DD JUMP-SIZE BIN(4); DCL DD SWEEP-END BIN(4); DCL DD ITEM-NBR BIN(4); DCL DD COMP-NBR BIN(4); DCL DD SWAP-FLAG CHAR(1); DCL DD SORT-DIR CHAR(1); /* A - ASCENDING, D - DESCENDING */ DCL INSPTR .COMBSORT; ENTRY COMBSORT INT; CPYNV JUMP-SIZE, LAST-ENTRY-NBR; SORT-JUMP: CMPNV(B) JUMP-SIZE, 1 /HI(SORT-SWEEP); CMPBLA(B) SWAP-FLAG, "S"/NEQ(.COMBSORT); SORT-SWEEP: MULT(S) JUMP-SIZE, 10; ADDN(S) JUMP-SIZE, 3; DIV(S) JUMP-SIZE, 13; SUBN SWEEP-END, LAST-ENTRY-NBR, JUMP-SIZE; CPYBLA SWAP-FLAG, " "; CPYNV(B) ITEM-NBR, 0/NNAN(SORT-COMPARE); SORT-SWAP: EXCHBY SORTKEY(ITEM-NBR), SORTKEY(COMP-NBR); EXCHBY ENTRIES(ITEM-NBR), ENTRIES(COMP-NBR); CPYBLA SWAP-FLAG, "S"; SORT-COMPARE: ADDN(S) ITEM-NBR, 1; CMPNV(B) ITEM-NBR, SWEEP-END/HI(SORT-JUMP); ADDN COMP-NBR, ITEM-NBR, JUMP-SIZE; CMPBLA(B) SORT-DIR, "A"/EQ(=+2); CMPBLA(B) SORTKEY(ITEM-NBR), SORTKEY(COMP-NBR) /LO(SORT-SWAP), NLO(SORT-COMPARE);: CMPBLA(B) SORTKEY(COMP-NBR), SORTKEY(ITEM-NBR) /LO(SORT-SWAP), NLO(SORT-COMPARE); /********************************************************************/ DCL SPCPTR .PROGRAM INIT(PROGRAM); DCL DD PROGRAM CHAR(77) BDRY(16); DCL DD PGM-BYTES-PRV BIN(4) DEF(PROGRAM) POS( 1) INIT(77); DCL DD PGM-LIB-TYPE CHAR(02) DEF(PROGRAM) POS(10); DCL DD PGM-LIB-NAME CHAR(30) DEF(PROGRAM) POS(12); DCL SPCPTR .THE-STACK; DCL DD THE-STACK CHAR(8) AUTO BDRY(16); DCL DD STK-BYTES-PRV BIN(4) DEF(THE-STACK) POS( 1); DCL DD STK-BYTES-AVL BIN(4) DEF(THE-STACK) POS( 5); DCL DD STK-NBR-OF-ENTRIES BIN(4) DEF(THE-STACK) POS( 9); DCL DD STK-ENTRY(1) CHAR(128) DEF(THE-STACK) POS(17); DCL DD THE-STACK-ENTRY CHAR(128) BDRY(16); DCL SYSPTR .STK-ENTRY-PGM DEF(THE-STACK-ENTRY) POS(33); DCL INSPTR .GET-OWN-LIB; ENTRY GET-OWN-LIB INT; CPYNV STK-BYTES-PRV, 8; /* MINIMUM */ SETSPP .THE-STACK, THE-STACK; MATINVS .THE-STACK, *; MODASA .THE-STACK, STK-BYTES-AVL; CPYNV STK-BYTES-PRV, STK-BYTES-AVL; SETSPP .THE-STACK, THE-STACK; MATINVS .THE-STACK, *; OVRPGATR 1, 2; /* DO NOT CONSTRAIN ARRAY REFS */ CPYBWP THE-STACK-ENTRY, STK-ENTRY(STK-NBR-OF-ENTRIES); MATPTR .PROGRAM, .STK-ENTRY-PGM; /* MYSELF */ CPYBLA RESOLVE-TYPE, PGM-LIB-TYPE; CPYBLA RESOLVE-NAME, PGM-LIB-NAME; RSLVSP .OWN-LIB, RESOLVE, *, *; B .GET-OWN-LIB; /********************************************************************/ DCL OL SCRNIO1(.S-CTRL, .S1SD, .S1WA) ARG; SETTINGS: CALLX .SCRNIO, SCRNIO1, *; /* SEND SCREEN */ CPYBLA S-OPERATION, GET; CALLX .SCRNIO, SCRNIO1, *; /* RECEIVE SCREEN */ CPYBLA S-OPERATION, PUT; CPYBLA A-S1MESSAGE, "BLANK"; CMPNV(B) S-PFKEY, 00/EQ(ENTER-KEY1); CMPNV(B) S-PFKEY, 01/EQ(HELP1); CMPNV(B) S-PFKEY, 05/EQ(REFRESH1); CMPNV(B) S-PFKEY, 12/EQ(DIALOG-LOOP); KEY-NOT-USED1: CPYBLAP S1MESSAGE, "Function Key Not Used", " "; SHOW-ERROR-MESSAGE1: CPYBLA A-S1MESSAGE, "TITLE"; B SETTINGS; HELP1: CPYBLAP HELP-KEY, "SETTINGS", " "; CPYBLAP HELP-PROMPT, "Settings", " "; CALLX .HELP, HELP, *; CALLX .SCRNIO, SCRNIO, *; B SETTINGS; COMING-SOON1: CPYBLAP S1MESSAGE, "Coming Soon...", " "; B SHOW-ERROR-MESSAGE1; REFRESH1: B SETTINGS; ENTER-KEY1: B REFRESH; PEND;