TITLE 'ICATS CAT COMMAND ROUTINE' CAT00010 *********************************************************************** CAT00020 * * CAT00030 * MODULE NAME = CAT * CAT00040 * * CAT00050 * FUNCTION = DO A LISTFILE ON THE SPECIFIED USER'S MINIDISK * CAT00060 * AND SHIP THE SPECIFIED NUMBER OF BYTES TO THE * CAT00070 * REQUESTOR AT THE UTS MACHINE. * CAT00080 * * CAT00090 * ENTRY POINTS = CAT * CAT00100 * * CAT00110 * LINKAGE = BALR R14,R15 FROM ICATS MAINLINE. * CAT00120 * * CAT00130 * REGISTER CONTENTS UPON ENTRY = * CAT00140 * R2 = POINTS TO THE ICATS COMMON DATA AREA, AS ALWAYS. * CAT00150 * R14 = RETURN ADDRESS BACK TO ICATS MAINLINE * CAT00160 * R15 = ENTRY POINT TO THIS MODULE * CAT00170 * * CAT00180 * REGISTER USAGE = * CAT00190 * R0-R1 = USED TO PASS PARAMETERS TO SUBROUTINES. * CAT00200 * R2 = USED TO ADDRESS THE ICATS COMMON DATA AREA. * CAT00210 * R3 = FREE * CAT00220 * R4 = USED TO ADDRESS CURRENT UTS CONTROL BLOCK. * CAT00230 * R5 = USED TO ADDRESS CURRENT USER CONTROL BLOCK. * CAT00240 * R6 = USED TO ADDRESS CURRENT DISK CONTROL BLOCK. * CAT00250 * R11 = MY BASE REGISTER * CAT00260 * R14 = MY RETURN ADDRESS WHEN I CALL SOMEBODY * CAT00270 * R15 = SUBROUTINE ADDRESS * CAT00280 * * CAT00290 * * CAT00300 * MODULE LOGIC: * CAT00310 * 1) INSURE THIS REQUEST CAME FROM A UTS. IF NOT, * CAT00320 * GIVE A REJECTION NOTICE. * CAT00330 * 2) CALL THE ACCESS ROUTINE TO * CAT00340 * A) LOCATE THE CORRECT UTSCB, * CAT00350 * B) LOCATE THE CORRECT USERCB, * CAT00360 * C) LOCATE THE CORRECT DISKCB, * CAT00370 * D) AND TO ACCESS THE CORRECT MINIDISK. * CAT00380 * 3) CHECK THE READ PASSWORD THE UTS USER SUPPLIED WITH * CAT00390 * THE ONE HE'S SUPPOSE TO SUPPLY FOR THIS MINIDISK. * CAT00400 * A) CL8'ALL' = HE DOESN'T NEED A PASSWORD TO READ IT. * CAT00410 * B) CL8'NONE' = HE CAN'T READ IT NO MATTER WHAT PASSWORD * CAT00420 * HE GAVE US. * CAT00430 * C) ELSE VERIFY THE PASSWORD HE GAVE US. * CAT00440 * 4) DO THE CMS COMMAND LISTFILE WITH THE STACK AND DATE * CAT00450 * OPTIONS. THIS'LL STACK N LINES WHICH I'LL THEN READ. * CAT00460 * IF ERROR WITH THE LISTFILE COMMAND (ONLY POSSIBLE * CAT00470 * ERROR IS RC = 24 = FILE NOT FOUND), THEN QUIT. * CAT00480 * 5) START READING THE STACKED LINES. SINCE THE LISTFILE * CAT00490 * COMMAND STACKS THE LINES LIFO, IT'S IN REVERSE * CAT00500 * ALPHABETICAL ORDER. I'LL HAVE TO RE-REVERSE THEM. * CAT00510 * 6) GIVE DATA TO THE UTS MACHINE. IF HE DIDN'T ALLOCATE * CAT00520 * ENOUGH ROOM FOR THIS REPLY, GIVE HIM A BAD RETURN CODE. * CAT00530 * ELSE, RETURN CODE = 0. * CAT00540 * INCLUDE - # FILES SATISFYING CAT SEARCH ARGUMENTS * CAT00550 * - # COMPLETE FILES YOU GOT WITH THIS CAT REQUEST * CAT00560 * - # BYTES IN REPLY FOR COMPLETE FILES * CAT00570 * - # BYTES YOU ACTUALLY GAVE TO THE UTS * CAT00580 * * CAT00590 * NORMAL EXIT = * CAT00600 * R15 = 0 * CAT00610 * * CAT00620 * EXTERNAL REFERENCES = NONE * CAT00630 * * CAT00640 * MACROS = ICDATA = ICATS COMMON DATA AREA * CAT00650 * ETTE = ENTER TRACE TABLE ENTRY SUBROUTINE * CAT00660 * * CAT00670 * CHANGE ACTIVITY * CAT00680 * DATE NAME REASON FOR CHANGE * CAT00690 * 03/29/83 RICK JASPER INITIAL PROGRAM CREATION * CAT00700 * * CAT00710 *********************************************************************** CAT00720 PRINT GEN,NODATA CAT00730 CAT CSECT CAT00740 USING ICDATA,R2 ADDRESS ICATS COMMON DATA AREA CAT00750 USING NUCON,R0 NUCON DOESN'T NEED A BASE REGISTER CAT00760 USING CBUTS,R4 USE R4 TO ADDRESS UTS CONTROL BLOCK CAT00770 USING CBUSER,R5 USE R5 TO ADDRESS USER CONTROL BLOCK CAT00780 USING CBDISK,R6 USE R6 TO ADDRESS DISK CONTROL BLOCK CAT00790 USING *,R15 USE R15 FOR BASE REG NEXT INSTRUCTION ONLY CAT00800 STM R0,R14,REGSAVE SAVE CALLER'S REGISTERS CAT00810 DROP R15 CAT00820 USING CAT,R11 R11 WILL BE BASE REGISTER CAT00830 LR R11,R15 ESTABLISH BASE REGISTER CAT00840 LA R13,SAVEAREA MY 20 FULLWORD SAVE AREA CAT00850 * CAT00860 * CAT COMMANDS CAN ONLY COME FROM A UTS MACHINE CAT00870 TM FLAGB,UTSCMD DID THIS COMMAND COME FROM A UTS ?? CAT00880 BO CATCONT YEP, GOOD. CONTINUE ON. CAT00890 L R15,AREJECT ELSE, REJECT THIS COMMAND. CAT00900 BALR R14,R15 CAT00910 B QUICKBYE CAT00920 * SET UP THE REPLY CONTROL BLOCK AND INITIALIZE ALL THE PARMS THAT CAT00930 * GET SENT IN IT. THE REPLY CB WILL PRECEDE THE DATA. THIS ALSO CAT00940 * FREES THE PARM1-PARM15 AREA FOR ME TO USE LATER TO PARSE INTO. CAT00950 CATCONT L R9,ABUFFER THE REPLY CONTROL BLOCK CONSISTS CAT00960 MVC 0(128,R9),PARM0 MOSTLY OF THE REQUEST CONTROL BLOCK. CAT00970 ST R9,AOUTDATA REMEMBER WHERE IT IS IN CASE OF ERROR CAT00980 XC UTSPARMS,UTSPARMS CLEAR ALL THE PARMS AT ONCE CAT00990 * PREPARE FOR ACCESS ROUTINE. CAT01000 MVC THISUSER,PARM0 MOVE IN UTS USER ID CAT01010 MVC THISDISK,PARM6 MOVE IN THE DISK HE WANTED CAT01020 L R15,AACCESS GET ADDRESS OF ACCESS ROUTINE CAT01030 BALR R14,R15 GO FIND ALL THE CONTROL BLOCKS CAT01040 * UPON RETURN, IF THERE WAS AN ERROR, THEN R15 > 0, CAT01050 * ELSE R15 = 0 AND R4, R5, AND R6 ALL POINT TO THE CAT01060 * CORRECT UTSCB, USERCB, AND DISKCB RESPECTIVELY. CAT01070 LTR R15,R15 CAT01080 BNZ CATERRA GO FIGURE OUT WHAT THE ERROR WAS CAT01090 * CONVERT THE-NUMBER-OF-BYTES-THE-UTS-USER-WANTS TO A HEX NUMBER CAT01100 LA R1,PARM3 PARM 3 = NUMBER OF BYTES THE UTS WANTS CAT01110 L R15,ACONDEC GET ADDRESS OF DECIMAL CONVERSION ROUTINE CAT01120 BALR R14,R15 GO CONVERT PARM TO NORMAL NUMBER CAT01130 LTR R15,R15 DID THE CONVERSION GO OK ?? CAT01140 BNE CATERRB NOPE, GO FIGURE OUT WHY CAT01150 ST R0,NUMWANTS REMEMBER IT CAT01160 * NOW CHECK THE READ PASSWORD THIS GUY GAVE ME FOR THIS DISK CAT01170 CLC CBDSKRPW,=CL8'ALL' DOES HE REQUIRE A PASSWORD ?? CAT01180 BE CATCONA NOPE, CONTINUE ON CAT01190 CLC CBDSKRPW,=CL8'NONE' IS HE ALLOWED TO READ THIS DISK ? CAT01200 BE CANTREAD NOPE, TELL HIM SO CAT01210 CLC CBDSKRPW,PARM7 NOT SPECIAL CASE - COMPARE PASSWORD CAT01220 BNE WRONGPW PASSWORD IS INCORRECT CAT01230 CATCONA EQU * CAT01240 * OK, THE PASSWORD CHECKS. NOW LET'S DO THE LISTFILE COMMAND. CAT01250 MVC CMDFN,PARM4 MOVE THE FILE ID INTO THE CAT01260 MVC CMDFT,PARM5 LISTFILE COMMAND STRING CAT01270 MVC CMDFM(1),PARM6 CAT01280 LA R1,LISTCMD CAT01290 SVC 202 DO THE LISTFILE COMMAND CAT01300 DC AL4(*+4) CAT01310 LTR R15,R15 DID EVERYTHING GO OK ?? CAT01320 BNZ CATERRC NOPE, GO FIGURE OUT WHAT WENT WRONG CAT01330 * SINCE THE RESPONSE FROM THE LISTFILE COMMAND IS STACKED IN CAT01340 * REVERSE ALPHABETICAL ORDER, THEN I'M GOING TO HAVE TO PUT CAT01350 * LINES FROM THE BOTTOM OF MEMORY AND WORK UP TOWARD THE REPLY CAT01360 * CONTROL BLOCK. SO, FIGURE OUT WHERE TO START PUTTING THE CAT01370 * LISTFILE RESPONSE LINES. CAT01380 L R3,ABUFFER GET START OF OUTPUT BUFFER CAT01390 A R3,LBUFFER ADD ITS LENGTH TO GET END OF BUFFER CAT01400 SH R3,=H'64' BACK UP LENGTH OF ONE LINE CAT01410 N R3,=X'FFFFFF40' START ON EVEN 64-BYTE BOUNDARY CAT01420 * NOW, R3 = ADDRESS OF WHERE THE FIRST (LAST ALPHABETICALLY) LINE CAT01430 * SHOULD BE PUT. START READING THE LINES UNTIL THE CONSOLE CAT01440 * STACK IS EXHAUSTED, PARSING THE LINE, AND PUTTING THE RESPONSE CAT01450 * IN THE OUTPUT BUFFER, BACKING UP R3 ON EACH REPETITION AND CAT01460 * KEEPING A COUNT OF THE NUMBER OF LINES YOU PROCESS IN R12. CAT01470 L R12,ABUFFER IN THE IMPOSSIBLE CHANCE THAT CAT01480 LA R12,128(R12) WE FILL OUR OUTPUT BUFFER, USE CAT01490 ST R12,BUFRFILD THIS TO CHECK R3 AS WE GO CAT01500 SR R12,R12 INITIALIZE COUNTER CAT01510 CATLOOP EQU * CAT01520 CLC NUMFINRD,=X'0000' CAT01530 BE EXITLOOP CAT01540 C R3,BUFRFILD WE SHOULD NEVER OVERFILL OUR CAT01550 BL QUITLOOP BUFFER, BUT IF WE DO, ....... CAT01560 RDTERM INBUFR CAT01570 LA R12,1(R12) BUMP LINE COUNTER CAT01580 STC R0,INBUFRL SAVE LINE LENGTH CAT01590 LA R0,PARM1 PUT TOKENS IN PARM1-15 (WHY NOT?) CAT01600 LA R1,INBUFRL GET ADDRESS OF LINE LENGTH & DATA CAT01610 L R15,APARSE GO PARSE THIS LINE AND PUT IN CAT01620 BALR R14,R15 PARM1 - PARM15 CAT01630 * AT THIS POINT, THIS UNSTACKED LINE IS PARSED, SITTING IN PARM1 CAT01640 * THROUGH PARM15. STARTING WITH PARM1, WE'VE GOT THE FILE NAME, CAT01650 * THE FILE TYPE, FILE MODE, C'F' OR C'V', LRECL, # RECORDS IN THE CAT01660 * FILE, # CMS BLOCKS IT TAKES UP (WHICH WE DON'T NEED), DATE, AND CAT01670 * TIME. CAT01680 * THERE'S AN INCOMPATIBILITY PROBLEM BETWEEN CMS FILES FROM CAT01690 * RELEASE 6 TO RELEASE 5 OF CMS (THIS IS TO THE BEST OF MY KNOW- CAT01700 * LEDGE) WHERE THE DATE COULD BE BLANK. THIS MEANS THAT PARM8, CAT01710 * WHICH IS USUALLY THE DATE, COULD BE THE TIME INSTEAD. IF THIS CAT01720 * IS THE CASE, THEN I'LL BLANK OUT THE DATE, AND PUT PARM8 WHERE CAT01730 * THE TIME GOES. CAT01740 MVC 0(48,R3),PARM1 MOVE FILE NAME THROUGH # RECORDS CAT01750 CLI PARM8+1,C':' TIME IS IN THE FORMAT 1:00 OR 11:00 CAT01760 BE CATCONB SO, LOOK FOR C':' IN BOTH PLACES CAT01770 CLI PARM8+2,C':' CAT01780 BE CATCONB CAT01790 * NORMAL CASE. DATE MUST BE OK. CAT01800 MVC 48(16,R3),PARM8 MOVE DATE AND TIME CAT01810 B CATCONC CAT01820 * ABNORMAL CASE. DATE WASN'T THERE. CAT01830 CATCONB EQU * CAT01840 MVC 48(8,R3),=CL8' ' MAKE DATE ALL BLANKS CAT01850 MVC 56(8,R3),PARM8 MOVE IN TIME CAT01860 CATCONC EQU * CAT01870 SH R3,=H'64' PREPARE OUTPUT LINE POINTER FOR NEXT LINE CAT01880 B CATLOOP CAT01890 QUITLOOP EQU * WE'VE FILLED OUR OUTPUT BUFFER - ABORT CAT01900 MVC RETCODE,=X'00005014' GIVE BAD RETURN CODE AND CAT01910 CATLOOP2 EQU * FLUSH OUT THE PROGRAM STACK CAT01920 CLC NUMFINRD,=X'0000' CAT01930 BE EXITLOOP CAT01940 RDTERM INBUFR CAT01950 LA R12,1(R12) BUMP LINE COUNTER CAT01960 B CATLOOP2 CAT01970 EXITLOOP EQU * CAT01980 * AT THIS POINT, ALL THE STACKED LINES FROM THE LISTFILE COMMAND CAT01990 * HAVE BEEN UNSTACKED AND PUT IN THE OUTPUT BUFFER. CAT02000 * R3 = 64 BYTES BEFORE THE LAST LINE WE PUT IN THE OUTPUT BUFFER CAT02010 * NOW MOVE THE REPLY CONTROL BLOCK UP TO THE OUTPUT DATA, COMPUTE CAT02020 * THE VARIABLES THAT GO IN THE REPLY CONTROL BLOCK, AND FINISH UP. CAT02030 * MAX#R = R12 CAT02040 * GAVE#B = SMALLER OF (64 * MAX#R) OR NUMWANTS CAT02050 * DONE#R = GAVE#B / 64 CAT02060 * DONE#B = DONE#R * 64 CAT02070 ST R12,MAX#R SAVE NUMBER OF FILES FOUND CAT02080 SH R3,=H'64' BACK UP TO WHERE THE REPLY CB GOES CAT02090 L R9,ABUFFER CAT02100 MVC 0(128,R3),0(R9) MOVE REPLY CB TO OUTPUT DATA CAT02110 ST R3,AOUTDATA REMEMBER WHERE IT STARTS CAT02120 L R3,MAX#R CAT02130 SLL R3,6 CAT02140 CLC RETCODE,=F'0' IF ALREADY NON-ZERO RETURN CODE, CAT02150 BNE CATCOND THEN DON'T CHANGE IT. CAT02160 C R3,NUMWANTS CAT02170 BNH CATCOND CAT02180 L R3,NUMWANTS HE DIDN'T ASK FOR ENOUGH BYTES CAT02190 MVC RETCODE,=X'00000004' SO, SOME DATA WILL BE LOST CAT02200 CATCOND EQU * CAT02210 ST R3,GAVE#B CAT02220 SRL R3,6 CAT02230 ST R3,DONE#R CAT02240 SLL R3,6 CAT02250 ST R3,DONE#B CAT02260 CATBYE EQU * CAT02270 * ALL THE WORK SHOULD BE DONE AT THIS POINT. NOW FILL IN THE CAT02280 * REPLY CONTROL BLOCK WITH ALL THE DATA YOU'VE BEEN COLLECTING. CAT02290 * 1) THE VARIABLES GET PUT AT THE END OF THE REPLY CAT02300 * CONTROL BLOCK LIKE SO (ALL IN HEX) CAT02310 * | | | | | | | | | CAT02320 * | | | | | | | | | CAT02330 * |-----------------------------------------------| CAT02340 * | TODAY'S DATE IN MM/DD/YY FORMAT | CAT02350 * |-----------------------------------------------| CAT02360 * | CURRENT TIME IN HH:MM:SS FORMAT | CAT02370 * |-----------------------------------------------| CAT02380 * | DONE#B | DONE#R | MAX#R | CAT02390 * |-----------------------------------------------| CAT02400 * | RETCODE | GAVE#B | CAT02410 * |-----------------------------------------------| CAT02420 L R9,AOUTDATA POINT TO START OF REPLY CONTROL BLOCK CAT02430 *-------------------------------------------------------------* CAT02440 * GET THE TIME AND DATE FROM CP * CAT02450 *-------------------------------------------------------------* CAT02460 LA R1,CPDATA ADDRESS OF DATA FROM DIAG CAT02470 DIAG R1,R0,X'000C' REQUEST DATE AND TIME FROM CP CAT02480 *-------------------------------------------------------------* CAT02490 * CPDATA IS NOW IN THE FORMAT OF * CAT02500 * DC CL8'MM/DD/YY' * CAT02510 * DC CL8'HH:MM:SS' * CAT02520 * DS 2D THE REST IS JUNK * CAT02530 *-------------------------------------------------------------* CAT02540 MVC 96(8,R9),CPDATA CAT02550 MVC 104(8,R9),CPDATA+8 CAT02560 MVC 112(4,R9),DONE#B CAT02570 MVC 116(2,R9),DONE#R+2 CAT02580 MVC 118(2,R9),MAX#R+2 CAT02590 MVC 120(2,R9),RETCODE+2 CAT02600 * I'M RESERVING 6 BYTES FOR GAVE#B CAT02610 XC 122(2,R9),122(R9) 'CAUSE THE LENGTH FIELD IN A CCW CAT02620 MVC 124(4,R9),GAVE#B IS 6 BYTES. ONE DAY WE MAY NEED IT. CAT02630 * CAT02640 * NOW GIVE ALL THE DATA TO THE UTS MACHINE. CAT02650 * CAT02660 L R0,GAVE#B CAT02670 AH R0,=H'128' CAT02680 L R1,AOUTDATA CAT02690 L R15,AWRITUTS CAT02700 BALR R14,R15 IGNORE ANY ERRORS CAT02710 EJECT CAT02720 * CAT02730 QUICKBYE EQU * CAT02740 LM R0,R14,REGSAVE RESTORE CALLER'S REGISTERS CAT02750 BR R14 GOODBYE. CAT02760 * CAT02770 CANTREAD DS 0H CAT02780 * THIS GUY TRIED TO DO A CAT ON A DISK THAT HAD A READ PASSWORD OF CAT02790 * C'NONE' MEANING THAT HE'S NOT ALLOWED TO READ IT (KINDA LIKE CAT02800 * WRITE-ONLY MEMORY). RETCODE = X'2004' CAT02810 MVC RETCODE,=X'00002004' CAT02820 B CATBYE CAT02830 SPACE 4 CAT02840 WRONGPW DS 0H CAT02850 * THIS GUY GAVE ME THE WRONG READ PASSWORD FOR THIS DISK. THAT'S A CAT02860 * NO-NO. RETCODE = X'1010' CAT02870 MVC RETCODE,=X'00001010' CAT02880 B CATBYE CAT02890 EJECT CAT02900 CATERRA DS 0H CAT02910 * WE GOT AN ERROR FROM THE ACCESS ROUTINE. CAT02920 * IF R15 = 04, THEN THIS UTS WAS NOT FOUND IN THE UTSCB CHAIN CAT02930 * (CAN NEVER HAPPEN). RETCODE = X'6004' CAT02940 * IF R15 = 08, THEN THIS USER WAS NOT FOUND IN THE USERCB CHAIN CAT02950 * FOR THIS UTS. RETCODE = X'4004' CAT02960 * IF R15 = 12, THEN THIS DISK WAS NOT FOUND IN THE DISKCB CHAIN CAT02970 * FOR THIS USER. RETCODE = X'100C' CAT02980 * IF R15 = 16, THEN THE DISK WAS FOUND, BUT THERE'S NOT A MINIDISK CAT02990 * AT THAT ADDRESS (CONFIGURATION ERROR). CAT03000 * RETCODE = X'4008' CAT03010 * IF R15 = 20, THEN SOME OTHER ERROR HAPPENED IN THE ACCESS CAT03020 * ROUTINE. RETCODE = X'5004' CAT03030 * IF R15 = ??, THEN PROGRAMMING ERROR. RETCODE = X'7004' CAT03040 C R15,=F'4' CAT03050 BNE ERRA1 CAT03060 MVC RETCODE,=X'00006004' CAT03070 B ERRABYE CAT03080 ERRA1 C R15,=F'8' CAT03090 BNE ERRA2 CAT03100 MVC RETCODE,=X'00004004' CAT03110 B ERRABYE CAT03120 ERRA2 C R15,=F'12' CAT03130 BNE ERRA3 CAT03140 MVC RETCODE,=X'0000100C' CAT03150 B ERRABYE CAT03160 ERRA3 C R15,=F'16' CAT03170 BNE ERRA4 CAT03180 MVC RETCODE,=X'00004008' CAT03190 B ERRABYE CAT03200 ERRA4 C R15,=F'20' CAT03210 BNE ERRA5 CAT03220 MVC RETCODE,=X'00005004' CAT03230 B ERRABYE CAT03240 ERRA5 MVC RETCODE,=X'00007004' CAT03250 ERRABYE B CATBYE CAT03260 EJECT CAT03270 CATERRB DS 0H CAT03280 * WE GOT A BAD RETURN CODE WHILE CONVERTING THE NUMBER OF BYTES CAT03290 * THE UTS WANTS TO A BINARY NUMBER. SO, I DON'T KNOW HOW MANY CAT03300 * BYTES TO READ. RETCODE = X'1004' CAT03310 MVC RETCODE,=X'00001004' CAT03320 B CATBYE CAT03330 SPACE 4 CAT03340 CATERRC DS 0H CAT03350 * WE GOT AN ERROR DOING THE LISTFILE COMMAND. CAT03360 * THE ONLY POSSIBLE ERROR IS CAT03370 * RC = 28 = FILE NOT FOUND RETCODE = X'2008' CAT03380 * OTHER ERRORS SHOULD BE IMPOSSIBLE SO, RETCODE = X'6010' CAT03390 C R15,=F'28' CAT03400 BNE ERRB1 SHOULD NEVER TAKE THIS BRANCH CAT03410 MVC RETCODE,=X'00002008' FILE NOT FOUND CAT03420 B ERRBBYE CAT03430 ERRB1 MVC RETCODE,=X'00006010' CAT03440 ERRBBYE B CATBYE CAT03450 EJECT CAT03460 CPDATA DS 4D CAT03470 REGSAVE DS 15F READ ROUTINE SAVE AREA CAT03480 SAVEAREA DS 20F MY SAVE AREA FOR WHEN I CALL OTHER SUBROUTINES CAT03490 UTSPARMS DS CL24 SENT TO THE UTS IN THE REPLY CONTROL BLOCK CAT03500 BUFRFILD DS F LOWER LIMIT OF OUTPUT BUFFER CAT03510 AOUTDATA DS F ADDRESS OF REPLY CONTROL BLOCK & OUTPUT DATA CAT03520 ORG UTSPARMS CAT03530 NUMWANTS DS F NUMBER OF BYTES THE UTS WANTS CAT03540 RETCODE DS F RETURN CODE CAT03550 GAVE#B DS F NUMBER OF BYTES I GAVE HIM THIS TIME CAT03560 DONE#B DS F NUMBER OF BYTES IN COMPLETE FILES CAT03570 DONE#R DS F NUMBER OF COMPLETE FILES FOUND THIS TIME CAT03580 MAX#R DS F NUMBER OF FILES SATISFYING THIS CAT REQUEST CAT03590 ORG CAT03600 INBUFRL DC X'00' LINE LENGTH FOR PARSE ROUTINE CAT03610 INBUFR DS CL130 CAT03620 LISTCMD DS 0D CAT03630 DC CL8'LISTFILE' CAT03640 CMDFN DC CL8' ' CAT03650 CMDFT DC CL8' ' CAT03660 CMDFM DC CL8' ' CAT03670 DC CL8'(' CAT03680 DC CL8'DATE' CAT03690 DC CL8'STACK' CAT03700 DC 8X'FF' CAT03710 LTORG CAT03720 ICDATA CAT03730 CAT CSECT GO BACK TO NORMAL CSECT CAT03740 NUCON CAT03750 CAT CSECT GO BACK TO NORMAL CSECT CAT03760 END CAT03770