*TITLEDDFREE -- DYNAMIC ALLOCATION (SVC 99) INTERFACE - UNALLOCATE 00000101 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** *A AUTHOR BOB BENSON - BELL HELICOPTER TEXTRON 00000200 *A DESIGNER BOB BENSON 00000300 *A LANGUAGE ASSEMBLER 00000400 *A SYSTEM S/370 00000500 *A WRITTEN 04-16-79 00000600 * REVISED 9/08/87 REM. INCREASE FIXSPACE BY 4 BYTES TO ALLOW 1 00000700 * EXTRA WORD. 00000800 *A 00000900 *A CALL DDFREE (NUNIT, KEYS, PARMS, DSNAME, IERR, JERR) 00001000 *A 00001100 *A IN/OUT ARGUMENT TYPE DESCRIPTION 00001200 *A 00001300 *A IN NUNIT I4 NUMBER OF KEYS PROVIDED IN KEY/PARM ARRAYS 00001400 *A IN KEYS I4 KEYS(N) IS A SINGLE WORD, INTEGER ARRAY 00001500 *A CONTAINING FLAGS TO INDICATE WHAT ACTION 00001600 *A IS BEING REQUESTED. 00001700 *A IN PARMS I8 PARMS(NUNIT) IS A DOUBLE WORD. INTEGER 00001800 *A ARRAY THAT HOLDS THE DATA FOR THE PARM 00001900 *A FIELDS. 00002000 *A IN/OUT DSNAME 12I4 46 BYTE AREA WHICH CONTAINS THE DSNAME TO 00002100 *A BE UNALLOCATED. 00002200 *A OUT IERR I4 OUTPUT SINGLE WORD INTEGER WHICH REPRESENT 00002300 *A IERR GE 0 RETURN CODE FROM SVC 99. IF 00002400 *A IERR GE 4, THE UNALLOCATION WAS REQUESTED 00002500 *A BUT FAILED. 00002600 *A IERR LT 0 RETURN CODE FROM DDFREE. AN 00002700 *A ERROR WAS DETECTED WHILE BUILDING THE SVC 00002800 *A 99 CONTROL BLOCKS AND PROCESSING WAS TERM- 00002900 *A INATED; THE SVC WAS NOT ISSUED. 00003000 *A OUT JERR I4 4 BYTE FIELD. 1ST 2 BYTES CONTAINS THE 00003100 *A ERROR RETURN CODE FIELD FROM SVC 99. THE 00003200 *A NEXT 2 BYTES IS THE INFO RETURN CODE FIELD 00003300 *A FROM SVC 99. 00003400 *A 00003500 *A 00003600 *A DDFREE PROVIDES A FORTRAN-CALLABLE INTERFACE TO THE DYNAMIC 00003700 *A ALLOCATION FACILITIES PROVIDED BY OS/VS2 REL3.7. 00003800 *A DDALOC BUILDS THE REQUEST BLOCKS AND INVOKES SVC 99 (DYNALLOC) 00003900 *A TO PERFORM DYNAMIC UNALLOCATION. 00004000 *A 00004100 * EJECT 00004200 * 00004300 ********* MACRO DEFINITIONS ***** 00004400 * 00004500 SPACE 2 00004600 MACRO 00004700 &NAME SETTEXT &KEY,&NUM,&LEN 00004800 AIF (N'&NAME EQ 0).SKIP2 00004900 &NAME EQU * 00005000 .SKIP2 ANOP 00005100 ST R6,S99TUPTR CHAIN IN THE TEXT UNIT PTR 00005200 LA R8,&KEY PICK UP PROPER KEY 00005300 STH R8,S99TUKEY STORE IN TEXT UNIT 00005400 LA R8,&NUM NUMBER OF PARMS 00005500 STH R8,S99TUNUM STORE IN TEXT UNIT 00005600 AIF (&NUM EQ C'0').SKIP3 JUMP IF NO PARM 00005700 LA R8,&LEN PICK UP PARM LENGTH 00005800 STH R8,S99TULNG STORE IN TEXT UNIT 00005900 .SKIP3 ANOP 00006000 MEND 00006100 SPACE 00006200 MACRO 00006300 &NAME CHECKEY &VAL,&PUT,&NEXT,&OVER 00006400 AIF (N'&NAME EQ 0).SKIP3 00006500 &NAME EQU * 00006600 .SKIP3 AIF (K'&VAL EQ 1).SCLI 00006700 LCLA &LVAL 00006800 &LVAL SETA K'&VAL 00006900 CLC 0(&LVAL,R2),=C'&VAL' CHECK VALUE 00007000 AGO .SBNE 00007100 .SCLI CLI 0(R2),C'&VAL' CHECK VALUE 00007200 .SBNE BNE &NEXT BRANCH IF NOT EQUAL 00007300 AIF (K'&PUT EQ 2).SMVI 00007400 MVC S99TUPAR(2),=X'&PUT' 00007500 AGO .SOVER 00007600 .SMVI MVI S99TUPAR,X'&PUT' INSERT CORRECT KEY 00007700 .SOVER AIF (N'&OVER EQ 0).SKIP4 00007800 B &OVER MOVE ALONG 00007900 .SKIP4 ANOP 00008000 MEND 00008100 EJECT 00008200 DDFREE START 0 00008300 SPACE 2 00008400 * REGISTER SYNONYMS 00008500 SPACE 2 00008600 R0 EQU 0 REGISTER 00 00008700 R1 EQU 1 REGISTER 01 00008800 R2 EQU 2 REGISTER 02 00008900 R3 EQU 3 REGISTER 03 00009000 R4 EQU 4 REGISTER 04 00009100 R5 EQU 5 REGISTER 05 00009200 R6 EQU 6 REGISTER 06 00009300 R7 EQU 7 REGISTER 07 00009400 R8 EQU 8 REGISTER 08 00009500 R9 EQU 9 REGISTER 09 00009600 R10 EQU 10 REGISTER 10 00009700 R11 EQU 11 REGISTER 11 00009800 R12 EQU 12 REGISTER 12 00009900 R13 EQU 13 REGISTER 13 00010000 R14 EQU 14 REGISTER 14 00010100 R15 EQU 15 REGISTER 15 00010200 SPACE 5 00010300 SAVE (14,12),T,* SAVE REGISTERS 00010400 USING DDFREE,R15 TO GET THIS ACT GOING 00010500 LA R10,ADDR ASSURE 00010600 USING ADDR,R10 ADDRESSIBILITY 00010700 * LA R11,RQDSORG THROUGHOUT 00010800 * USING RQDSORG,R11 THIS 00010900 * LA R12,SAVE MOTHER 00011000 * USING SAVE,R12 00011100 ADDR EQU * 00011200 DROP R15 CAUSE WE'RE TOOK CARE OF 00011300 LA R15,SAVE STANDARD PROLOGUE 00011400 ST R13,4(,R15) TO LINK 00011500 ST R15,8(,R13) THE 00011600 LR R13,R15 SAVE AREAS 00011700 SPACE 2 00011800 * 00011900 * ACQUIRE PARAMETER LIST 00012000 * 00012100 ST R1,PLISTADR SAVE ADDRESS OF PARAMETER LIST 00012200 LM R2,R7,0(R1) LOAD PARAMETER ADDRESSES 00012300 STM R2,R7,PARAMLST SAVE PARAMETER ADDRESSES 00012400 L R2,0(R2) NUMBER OF KEYS/PARMS 00012500 ST R2,NUNITS SAVE THIS NUMBER 00012600 SPACE 2 00012700 LTR R2,R2 ASSURE NUNITS > 0 00012800 BZ FIGDSN BRANCH IF NONE 00012900 EJECT 00013000 * 00013100 * SCAN DOWN KEYS ARRAY TO DETERMINE HOW MUCH CORE WILL BE NEEDED 00013200 * TO HANDLE ALL THE INPUT REQUESTS 00013300 * 00013400 SPACE 00013500 GOUNITS L R1,FIXSPACE LOAD FIXED SPACE LENGTH 00013600 LA R6,1 FOR OFFSET CALC'S 00013700 LA R7,0 FOR KEY RANGE CHECKS 00013800 LA R8,11 FOR KEY RANGE CHECKS 00013900 * 00014000 LGLOOP L R4,0(R3) PICK UP REQUEST CODE 00014100 CR R4,R7 CHECK KEY > 0 00014200 BNH BADKEY BRANCH IF NOT 00014300 CR R4,R8 CHECK KEY < 11 00014400 BNL BADKEY BRANCH IF NOT 00014500 SR R4,R6 CONVERT CODE TO OFFSET 00014600 SLL R4,1 IN HALFWORD TABLE 00014700 LH R5,PRMLEN(R4) OBTAIN PARM LENGTH ESTIMATE 00014800 AR R1,R5 SUM LENGTHS 00014900 LA R3,4(R3) STEP TO NEXT REQUEST 00015000 BCT R2,LGLOOP LOOP THRU REQUEST ARRAY 00015100 SPACE 00015200 * 00015300 * DETERMINE LENGTH OF THE DSNAME 00015400 * 00015500 FIGDSN L R2,ADSNAME GET DSNAME ADDRESS 00015600 CLI 0(R2),X'40' SEE IF ITS THERE 00015700 BE SNODSN BRANCH IF NONE 00015800 SPACE 00015900 LA R5,1 R5 = LENGTH OF DSNAME 00016000 LA R6,1 COUNTER WITH WHICH TO INCREMENT 00016100 LA R3,43 SCOPE OUT THE DSNAME 00016200 DSNSCN LR R4,R2 STARTING AT 00016300 AR R4,R5 THE FRONT 00016400 CLI 0(R4),X'40' LOOK FOR ENDING BLANK 00016500 BE ENDDSN BRANCH IF FOUND 00016600 AR R5,R6 KICK UP LENGTH 00016700 BCT R3,DSNSCN LOOP WILL TERMINATE OR MAXOUT AT 43 00016800 ENDDSN ST R5,DSNLGTH SAVE DSN LENGTH 00016900 LA R4,10 INCREMENT FOR TEXT UNIT POINTERS 00017000 AR R5,R4 AND HEADERS 00017100 AR R1,R5 COMPUTE GETMAIN LENGTH 00017200 B GETSET GO DO GETMAIN 00017300 SPACE 00017400 SNODSN LA R3,0 NO DSN ==> NO LENGTH 00017500 ST R3,DSNLGTH REMEMBER IT 00017600 SPACE 2 00017700 * 00017800 * PREPARE FOR BUILDING SVC 99 CONTROLS BY GETTING CORE FOR THEM 00017900 * 00018000 SPACE 00018100 GETSET ST R1,GETLGTH SAVE GETMAIN LENGTH 00018200 LR R0,R1 PUT REQUEST IN R0 00018300 SPACE 2 00018400 GETMAIN R,LV=(0) 00018500 SPACE 2 00018600 ST R1,AGETRB SAVE ADDRESS 00018700 SPACE 2 00018800 EJECT 00018900 * 00019000 * WE NOW EMBARK ON THAT MOST PERILOUS OF ENDEAVORS, THE BUILDING 00019100 * OF THE SVC 99 REQUEST CONTROL BLOCKS. WE NEED TO KNOW MANY THINGS 00019200 * DURING THIS LONG AND DANGEROUS TASK, SO WE RESERVE THE FOLLOWING 00019300 * REGISTERS TO POINT AT THE FOLLOWING WILD BEASTIES: 00019400 * R1 --> CURRENT KEY REQUEST 00019500 * R2 --> CURRENT PARM VALUE 00019600 * R3 - ADDRESSIBILITY FOR RBPTR 00019700 * R4 - ADDRESSIBILITY FOR RB 00019800 * R5 - ADDRESSIBILITY FOR TEXT UNIT POINTERS 00019900 * R6 - ADDRESSIBILITY FOR TEXT UNITS 00020000 * R7 - NUNITS (VALUE) TO CONTROL LOOPING 00020100 * 00020200 * WHILE IT WILL ALSO BE USED IN BUILDING THE TEXT UNITS, R8 WILL 00020300 * CONTAIN THE TRUE LENGTH OF THE TEXT UNIT WHEN A 'RETURN' IS MADE 00020400 * TO ENDREQ. THE FOLLOWING IS A PSEUDO-'DO CASE' FOR ALL YOU 00020500 * STRUCTURED PROGRAMMING NUTS. 00020600 * 00020700 SPACE 3 00020800 LR R3,R1 00020900 USING S99RBP,R3 ACCESS RBPTR 00021000 LA R4,S99RBPTR+4 00021100 USING S99RB,R4 ACCESS RB 00021200 ST R4,S99RBPTR RBPTR --> RB 00021300 OI S99RBPTR,S99RBPND TURN ON HI ORDER BIT 00021400 XC S99RB(RBLEN),S99RB ZERO ENTIRE RB 00021500 MVI S99RBLN,RBLEN PUT LENGTH IN LENGTH FIELD 00021600 MVI S99VERB,S99VRBUN VERB CODE IS DSNAME ALLOCATE 00021700 LA R5,S99RB+RBLEN 00021800 USING S99TUPL,R5 ACCESS TEXT POINTERS 00021900 ST R5,S99TXTPP POINTS TO POINTERS 00022000 L R7,NUNITS GET NUMBER OF REQUESTS 00022100 LR R6,R7 CALCULATE LENGTH OF PTRS 00022200 LA R8,1 INCREMENT BY ONE 00022300 AR R6,R8 FOR DSNAME 00022400 SLL R6,2 (MULTIPLY BY 4) 00022500 AR R6,R5 THAT'S THAT 00022600 USING S99TUNIT,R6 ACCESS TEXT UNITS 00022700 L R1,AKEYS --> REQUEST KEYS 00022800 L R2,APARMS --> REQUEST PARM VALUES 00022900 EJECT 00023000 * NOW THAT WE'RE ALL SET, STEP THRU THE INPUT TABLES, MERRILY 00023100 * BUILDING TEXT UNITS AS WE GO, TRA-LA, TRA-LA, TRA-LA. 00023200 * 00023300 SPACE 00023400 LA R0,1 1 FOR JUMP CALCULATION 00023500 B CFIND JUMP PAST THE 1ST TIME 00023600 SPACE 00023700 REQLOOP LA R1,4(R1) TO NEXT REQUEST KEY 00023800 LA R2,8(R2) TO NEXT PARM VALUE 00023900 LA R5,4(R5) TO NEXT TEXT PTR 00024000 LA R6,0(R8,R6) TO NEXT TXT UNIT 00024100 SPACE 00024200 CFIND L R9,0(R1) GET KEY VALUE 00024300 SR R9,R0 COMPUTE OFFSET 00024400 SLL R9,2 IN BRANCH TABLE 00024500 LA R8,FIND PICK UP HEAD OF TABLE 00024600 AR R9,R8 COMPUTE JUMP ADDRESS 00024700 BR R9 JUMP TO BRANCH TABLE 00024800 SPACE 00024900 FIND B RQDDNAM DDNAME REQUEST 00025000 B BADPARM DSNAME - THRU ANOTHER PARAMETER 00025100 B RQMEMBR PDS MEMBER REQUEST 00025200 B RQOVDSP OVERRIDE PREVIOUS DISPOSITION 00025300 B RQUNALC UNNALOC EVEN IF MARKED PERM. 00025400 B RQREMOV REMOVE IN-USE BIT 00025500 B RQOVSNH OVERRIDE - NOHOLD SYSOUT 00025600 B RQOVCLS OVERRIDE - SYSOUT CLASS 00025700 B RQOVSUS OVERRIDE - REMOTE WORKSTATION 00025800 B RQOVSHQ OVERRIDE - HOLD SYSOUT 00025900 SPACE 2 00026000 * UNRECOGNIZED REQUEST KEY ENCOUNTERED 00026100 SPACE 00026200 BADKEY LA R15,2 LOAD ERROR CODE -2 00026300 LCR R15,R15 MAKE NEGATIVE 00026400 L R7,AIERR GET ADDR OF IERR 00026500 ST R15,0(R7) PASS ERROR CODE BACK 00026600 B GOHOME NOW BEAT IT 00026700 SPACE 2 00026800 ENDREQ BCT R7,REQLOOP GO GET NEXT REQUEST 00026900 B ALLREQ ALL REQ'S DONE 00027000 SPACE 2 00027100 * 00027200 * NOW COME THE NASTY BITS - THOSE PARTS OF THE CODE WHEREIN THE REAL 00027300 * LIVE TEXT UNITS ARE BUILT. ARRRRRGGGGGGHHHHHH. 00027400 * 00027500 PRINT NOGEN 00027600 SPACE 2 00027700 * 00027800 * REQUEST CODE 1 X'0001' - DDNAME 00027900 * 00028000 RQDDNAM SETTEXT DUNDDNAM,1,8 00028100 MVC S99TUPAR(8),0(R2) MOVE DDNAME 00028200 LA R8,14 LENGTH OF TEXT UNIT 00028300 B ENDREQ 00028400 SPACE 2 00028500 * 00028600 * REQUEST CODE 3 X'0003' - MEMBER NAME 00028700 * 00028800 RQMEMBR SETTEXT DUNMEMBR,1,8 00028900 MVC S99TUPAR(8),0(R2) MOVE MEMBER NAME 00029000 LA R8,14 LENGTH OF TEXT UNIT 00029100 B ENDREQ 00029200 SPACE 2 00029300 * 00029400 * REQUEST CODE 4 X'0004' - OVERRIDE DISPOSITION 00029500 * 00029600 RQOVDSP SETTEXT DUNOVDSP,1,1 00029700 CHECKEY U,01,RQOVDS1,RQOVDS4 OVERRIDE - UNCATLG 00029800 RQOVDS1 CHECKEY C,02,RQOVDS2,RQOVDS4 - CATLG 00029900 RQOVDS2 CHECKEY D,04,RQOVDS3,RQOVDS4 - DELETE 00030000 RQOVDS3 CHECKEY K,08,BADPARM - KEEP 00030100 RQOVDS4 LA R8,7 LENGTH OF TEXT UNIT 00030200 B ENDREQ 00030300 SPACE 2 00030400 * 00030500 * REQUEST CODE 5 X'0005' - UNALLOCATE PERMANENTLY ALLOCATEDS 00030600 * 00030700 RQUNALC SETTEXT DUNUNALC,0,0 00030800 LA R8,4 LENGTH OF TEXT UNIT 00030900 B ENDREQ 00031000 SPACE 2 00031100 * 00031200 * REQUEST CODE 6 X'0006' - REMOVE IN-USE BIT 00031300 * 00031400 RQREMOV SETTEXT DUNREMOV,0,0 00031500 LA R8,4 LENGTH OF TEXT UNIT 00031600 B ENDREQ 00031700 SPACE 2 00031800 * 00031900 * REQUEST CODE 7 X'0007' - MARK SYSOUT NOHOLD 00032000 * 00032100 RQOVSNH SETTEXT DUNOVSNH,0,0 00032200 LA R8,4 LENGTH OF TEXT UNIT 00032300 B ENDREQ 00032400 SPACE 2 00032500 * 00032600 * REQUEST CODE 8 X'0008' - OVERRIDE SYSOUT CLASS 00032700 * 00032800 RQOVCLS SETTEXT DUNOVCLS,1,1 00032900 MVC S99TUPAR(1),0(R2) GET NEW CLASS 00033000 LA R8,7 LENGTH OF TEXT UNIT 00033100 B ENDREQ 00033200 SPACE 2 00033300 * 00033400 * REQUEST CODE 9 X'0009' - OVERRIDE WORKSTATION 00033500 * 00033600 RQOVSUS SETTEXT DUNOVSUS,1,8 00033700 MVC S99TUPAR(8),0(R2) GET NEW STATION ID 00033800 LA R8,14 LENGTH OF TEXT UNIT 00033900 B ENDREQ 00034000 SPACE 2 00034100 * 00034200 * REQUEST CODE 10 X'000A' - PUT SYSOUT ON HOLD 00034300 * 00034400 RQOVSHQ SETTEXT DUNOVSHQ,0,0 00034500 LA R8,4 LENGTH OF TEXT UNIT 00034600 B ENDREQ 00034700 PRINT GEN 00034800 EJECT 00034900 * 00035000 * BY THE TIME WE GET HERE, WE'VE PROCESSED ALL THE TEXT UNITS IN THE 00035100 * KEY/PARM ARRAYS. THERE REMAINS THE POSSIBILITY THAT A DSNAME HAS 00035200 * BEEN PROVIDED IN THE DSNAME ARGUMENT. IF SO, BUILD A TEXT UNIT FOR 00035300 * IT; ELSE SKIP THIS SECTION. 00035400 * 00035500 SPACE 00035600 ALLREQ L R9,DSNLGTH GET DSNAME LENGTH 00035700 LTR R9,R9 TEST IT 00035800 BZ LSTPTR BRANCH IF NO DSNAME 00035900 SPACE 00036000 * HAVE DSNAME TO LOAD 00036100 LA R5,4(R5) CHAIN TO NEXT TEXT POINTER 00036200 LA R6,0(R8,R6) CHAIN TO NEXT TEXT UNIT 00036300 ST R6,S99TUPTR CHAIN IN POINTER 00036400 LA R8,DUNDSNAM GET DSNAME KEY 00036500 STH R8,S99TUKEY PUT KEY IN TEXT 00036600 LA R8,1 NUMBER = 1 00036700 STH R8,S99TUNUM INDICATE 1 PARM 00036800 STH R9,S99TULNG STORE LENGTH OF DSNAME 00036900 L R8,ADSNAME GET ADDR OF DSNAME 00037000 EX R9,MVC MOVE PROPER LENGTH ( IN R9) 00037100 B LSTPTR BRANCH PAST MVC EX 00037200 MVC MVC S99TUPAR,0(R8) REMOTELY EXECUTE MOVE COMMAND. 00037300 SPACE 2 00037400 * 00037500 * ALL THE UNITS ARE BUILT. THE LAST TXT PTR MUST BE MARKED TO 00037600 * SHOW THAT IT IS INDEED THE LAST. 00037700 * 00037800 LSTPTR OI S99TUPTR,S99TUPLN MARK IT LAST 00037900 SPACE 2 00038000 * 00038100 * IS NOW READY FOR THE BIG BLOWING-THE-PROGRAM-OUT-OF-THE-WATER GIG 00038200 * 00038300 SPACE 00038400 LR R1,R3 PUT ADDR OF RBPTR IN R1 00038500 SPACE 2 00038600 DYNALLOC DO IT DO IT DO IT... 00038700 SPACE 2 00038800 * 00038900 * POST THE VARIOUS RETURN CODES BACK TO THE USER'S AREAS 00039000 * 00039100 L R8,AIERR GET IERR ADDR 00039200 ST R15,0(,R8) STORE RETURN CODE THERE 00039300 L R9,AJERR GET JERR ADDR 00039400 MVC 0(4,R9),S99ERROR MOVE THE SVC CODES THERE 00039500 B CLEANUP COMMENCE GETTNG OUT OF HERE 00039600 SPACE 2 00039700 * 00039800 * THS IS THE PLACE WHERE WE COME WHEN AN INPUT PARM IS BOTCHED 00039900 * 00040000 BADPARM LA R15,3 RETURN ERROR CODE 00040100 LCR R15,R15 IS -3 00040200 L 7,AIERR PICK UP ADDR OF IERR 00040300 ST R15,0(R7) RETURN CODE IN IERR 00040400 SPACE 2 00040500 * 00040600 * NOW THAT WE'RE FINISHED, ISSUE A FREEMAIN TO GET RID OF THE 00040700 * EVIDENCE (OTHERWISE KNOWN AS THE SVC99 REQUEST BLOCKS). 00040800 * 00040900 CLEANUP L R1,AGETRB GET THE ADDRESS OF IT 00041000 L R0,GETLGTH GET LENGTH OF IT 00041100 SPACE 00041200 FREEMAIN R,LV=(R0),A=(R1) FREE IT UP 00041300 SPACE 00041400 LTR R15,R15 SEE WHAT WE GOT 00041500 BZ GOHOME SPLIT IF CLEAN 00041600 L R8,AIERR PUT RETURN CODE 00041700 ST R15,0(R8) IN IERR 00041800 SPACE 00041900 GOHOME L R13,SAVE+4 CHAIN BACKIN 00042000 RETURN (14,12),T AND SPLIT 00042100 EJECT 00042200 * 00042300 * WHEREUPON WE NOW DECLARE OUR MANY AND VARIED STORAGE AREAS 00042400 * (ITS NOT AS BAD AS IT SOUNDS) 00042500 * 00042600 SPACE 00042700 SAVE DS 18F SAVE AREAS 00042800 SPACE 2 00042900 PLISTADR DS F PARAMETER LIST ADDRESS 00043000 SPACE 00043100 PARAMLST DS 0F THIS IS THE ACTUAL PARAMETER LIST 00043200 ANUNITS DS V NUMBER OF UNITS 00043300 AKEYS DS V ARRAY OF KEYS 00043400 APARMS DS V ARRAY OF PARMS 00043500 ADSNAME DS V DATA SET NAME 00043600 AIERR DS V PRIMARY ERROR FLAG 00043700 AJERR DS V SVC ERROR FLAG 00043800 SPACE 00043900 FIXSPACE DC F'28' FIXED SPACE REQUIREMENT(BYTES) 00044000 NUNITS DS F NUMBER OF REQUESTS 00044100 DSNLGTH DS F LENGTH OF INPUT DSNAME 00044200 GETLGTH DS F LENGTH OF GETMAIN AREA 00044300 AGETRB DS F ADDRESS OF GETMAIN RETURNED AREA 00044400 SPACE 00044500 * 00044600 * TABLE OF HALFWORD ENTRIES GIVING THE (MAXIMUM) LENGTH, IN BYTES, OF 00044700 * THE ENTRY REQUIRED BY EACH FUNCTION REQUEST. THIS LENGTH INCLUDES 00044800 * THE PARM, TEXT UNIT PREFACE, AND TEXT UNIT POINTERS. NOTE: JUST 00044900 * BECAUSE A FUNCTION HAS AN ENTRY HERE DOES NOT IMPLY THAT SAID 00045000 * FUNCTION HAS SUPPORTING CODE IMPLEMENTED. 00045100 * 00045200 PRMLEN DC X'001200380012000B000800080008000B00120008' 00045300 EJECT 00045400 IEFZB4D0 RB/TEXT DSECTS AND CODES 00045500 EJECT 00045600 IEFZB4D2 DYNALLOC TEXT UNIT KEYS 00045700 SPACE 2 00045800 RBLEN EQU (S99RBEND-S99RB) EASY LENGTH CONSTANT 00045900 SPACE 00046000 END 00046100