*TITLEFREMN2 -- FREE STORAGE OBTAINED BY ROUTINE GETMN2 00010000 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** *A AUTHOR NORMAN MOZLEY 00020000 *A DESIGNER NORMAN MOZLEY 00030000 *A LANGUAGE ASSEMBLER 00040000 *A SYSTEM S/370 00050000 *A WRITTEN 03-09-83 00060000 * REVISED 03-18-87 REM. CHANGE FREEMAIN TO "RU" INSTEAD OF "R" FOR 00070000 * EXTENDED ADDRESSING. 00080000 * REVISED 04-14-88 REM. ADD SUBPOOL=1 TO FREEMAIN TO AGREE WITH 00090000 * GETMN2. 00100000 *A 00110000 *A 00120000 *A CALL FREMN2 (STORAGE, CORGOT) 00130000 *A 00140000 *A IN/OUT ARGUMENT TYPE DESCRIPTION 00150000 *A 00160000 *A IN STORAGE I4 THE ADDRESS OF THE BEGINNING OC THE AREA 00170000 *A TO BE FREED. IT IS TYPICALLY IN THE 00180000 *A FORM 'ARRAY(NDX)' WHERE 'ARRAY' IS THE 00190000 *A FIRST PARAMATER USED IN THE GETMN2 CALL 00200000 *A AND 'NDX' IS THE THIRD PARAMETER USED IN 00210000 *A THE GETMN2 CALL PLUS ONE BYTE. 00220000 *A 00230000 *A IN CORGOT I4 THE NUMBER OF 4-BYTE WORDS TO BE FREED. 00240000 *A THIS IS ALSO THE FOURTH PARAMETER USED 00250000 *A IN THE GETMN2 CALL. 00260000 *A 00270000 *A FREMN2 ISSUES A FREEMAIN MACRO TO FREE UP THE AREA POINTED TO 00280000 *A BY THE FIRST PARAMETER FOR A LENGTH IN WORDS DEFINED BY THE 00290000 *A SECOND PARAMETER. 00300000 *A 00310000 *A IF THE LENGTH OF THE AREA TO BE FREED IS ZERO, THE SECOND 00320000 *A PARAMETER WILL BE RETURNED WITH A VALUE OF HEX 'F'S. (-1) 00330000 EJECT 00340000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00350000 * * 00360000 * REGISTER EQUATES * 00370000 * * 00380000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00390000 R0 EQU 0 00400000 R1 EQU 1 00410000 R2 EQU 2 00420000 R3 EQU 3 00430000 R4 EQU 4 00440000 R5 EQU 5 00450000 R6 EQU 6 00460000 R7 EQU 7 00470000 R8 EQU 8 00480000 R9 EQU 9 00490000 R10 EQU 10 00500000 R11 EQU 11 00510000 R12 EQU 12 00520000 R13 EQU 13 00530000 R14 EQU 14 00540000 R15 EQU 15 00550000 EJECT 00560000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00570000 * * 00580000 * R12 = BASE REGISTER * 00590000 * * 00600000 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00610000 FREMN2 CSECT 00620000 SAVE (14,12),,* SAVE REGISTERS IN CALLING 00630000 * PROGRAMS SAVE AREA 00640000 LR R12,R15 00650000 USING FREMN2,R12 ESTABLISH BASE REGISTER 00660000 ST R13,SAVEAREA+4 SAVE ADDRESS OF CALLING 00670000 * PROGRAM SAVE AREA 00680000 LR R2,R13 00690000 LA R13,SAVEAREA SET UP REG 13 TO POINT TO 00700000 * MY SAVE AREA 00710000 ST R13,8(R2) CHAIN CALLING PROGRAM TO MY 00720000 * SAVE AREA 00730000 * 00740000 L R3,0(R1) LOAD ADDRESS OF AREA TO FREE 00750000 L R4,4(R1) LOAD ADDRESS OF LENGTH 00760000 L R2,0(R4) LOAD LENGTH 00770000 LTR R2,R2 IS LENGTH GREATER THAN ZERO? 00780000 BP FREEIT YES - BRANCH 00790000 MVC 0(4,R4),HIGHVALU SET PARAMETER 2 TO ERROR VALUE 00800000 B RETURN EXIT 00810000 FREEIT EQU * 00820000 SLL R2,2 CNVT LENGTH IN WORDS TO BYTES 00830000 FREEMAIN RU,LV=(R2),A=(R3),SP=1 FREE IT UP 00840000 * 00850000 RETURN EQU * 00860000 L R13,SAVEAREA+4 RESTORE R13 00870000 LM R14,R12,12(R13) RESTORE REGISTERS 00880000 BR R14 RETURN 00890000 * 00900000 SAVEAREA DC 18F'0' 00910000 HIGHVALU DC X'FFFFFFFF' ERROR CODE 00920000 END 00930000