MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   0

TABLE OF CONTENTS   



   (1)    4800  ALLOCATE MEMORY AND CONDITIONALLY WAIT

   (1)   15200  ALLOCATE NONPAGED DYNAMIC MEMORY

   (1)   19100  ALLOCATE PAGED DYNAMIC MEMORY

   (1)   23300  GENERAL ALLOCATE MEMORY SUBROUTINE

   (1)   27100  DEALLOCATE NONPAGED DYNAMIC MEMORY

   (1)   30200  DEALLOCATE PAGED DYNAMIC MEMORY

   (1)   33600  CHECK BLOCK PARAMETERS SUBROUTINE

   (1)   35200  GENERAL DEALLOCATION SUBROUTINE

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   1

01                                                                                                                               (1)



                                     0000   100 	.TITLE	MEMORYALC - DYNAMIC MEMORY ALLOCATION

                                     0000   200 	.IDENT	/01/

                                     0000   300  

                                     0000   400 ;

                                     0000   500 ; COPYRIGHT (C) 1977

                                     0000   600 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

                                     0000   700 ;

                                     0000   800 ; THIS SOFTWARE IS FURNISHED UNDER  A LICENSE FOR USE ONLY  ON  A

                                     0000   900 ; SINGLE COMPUTER SYSTEM AND MAY BE  COPIED ONLY WITH  THE INCLU-

                                     0000  1000 ; SION OF  THE  ABOVE  COPYRIGHT NOTICE.  THIS SOFTWARE,  OR  ANY

                                     0000  1100 ; OTHER COPIES THEREOF, MAY NOT BE  PROVIDED  OR  OTHERWISE  MADE

                                     0000  1200 ; AVAILABLE TO ANY OTHER PERSON EXCEPT  FOR  USE  ON  SUCH SYSTEM

                                     0000  1300 ; AND TO  ONE WHO AGREES  TO  THESE LICENSE  TERMS.  TITLE TO AND

                                     0000  1400 ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.

                                     0000  1500 ;

                                     0000  1600 ; THE INFORMATION IN THIS SOFTWARE  IS  SUBJECT TO CHANGE WITHOUT

                                     0000  1700 ; NOTICE AND SHOULD NOT BE CONSTRUED  AS  A COMMITMENT BY DIGITAL

                                     0000  1800 ; EQUIPMENT CORPORATION.

                                     0000  1900 ;

                                     0000  2000 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS

                                     0000  2100 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.

                                     0000  2200 ;

                                     0000  2300 ; D. N. CUTLER 3-AUG-76

                                     0000  2400 ;

                                     0000  2500 ; DYNAMIC MEMORY ALLOCATION

                                     0000  2600 ;

                                     0000  2700 ; MACRO LIBRARY CALLS

                                     0000  2800 ;

                                     0000  2900  

                                     0000  3000 	$DYNDEF				;DEFINE DATA STRUCTURE TYPE CODES

                                     0000  3100 	$IPLDEF				;DEFINE INTERRUPT PRIORITY LEVELS

                                     0000  3200 	$IRPDEF				;DEFINE IRP OFFSETS

                                     0000  3300 	$PCBDEF				;DEFINE PCB OFFSETS

                                     0000  3400 	$PQBDEF				;DEFINE PQB OFFSETS

                                     0000  3500 	$PRDEF				;DEFINE PROCESSOR REGISTERS

                                     0000  3600 	$RSNDEF				;DEFINE RESOURCE WAIT NUMBERS

                                     0000  3700 	$SSDEF				;DEFINE SYSTEM STATUS VALUES

                                     0000  3800 	$TQEDEF				;DEFINE TQE OFFSETS

                                     0000  3900  

                                     0000  4000 ;

                                     0000  4100 ; LOCAL SYMBOLS

                                     0000  4200 ;

                                     0000  4300 ; ALLOCATION GRANULARITY MASK

                                     0000  4400 ;

                                     0000  4500  

                           0000000F  0000  4600 MASK=^XF				;16 BYTE ALLOCATION GRANULARITY

                           0000000F  0000  4620 EXE$C_ALCGRNMSK==MASK			; ALLOCATION GRANULARITY MASK

                                     0000  4650 

                                 00000000  4660 	.PSECT	AEXENONPAGED		; NONPAGED EXEC

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   2

01              ALLOCATE MEMORY AND CONDITIONALLY WAIT                                                                           (1)



                                     0000  4800 	.SBTTL	ALLOCATE MEMORY AND CONDITIONALLY WAIT

                                     0000  4900 ;+

                                     0000  5000 ; EXE$ALLOCBUF - ALLOCATE BUFFERED I/O BUFFER AND CONDITIONALLY WAIT

                                     0000  5100 ;

                                     0000  5200 ; THIS ROUTINE IS CALLED TO ALLOCATE A BUFFERED I/O BUFFER. IF SUFFICIENT

                                     0000  5300 ; MEMORY IS NOT AVAILABLE, THEN A RESOURCE WAIT STATE IS CONDITIONALLY

                                     0000  5400 ; ENTERED DEPENDING ON THE CURRENT PROCESS' RESOURCE WAIT MODE.

                                     0000  5500 ;

                                     0000  5600 ; EXE$ALLOCCEB - ALLOCATE COMMON EVENT BLOCK AND CONDITIONALLY WAIT

                                     0000  5700 ;

                                     0000  5800 ; THIS ROUTINE IS CALLED TO ALLOCATE A COMMON EVENT BLOCK. IF SUFFICIENT

                                     0000  5900 ; MEMORY IS NOT AVAILABLE, THEN A RESOURCE WAIT STATE IS CONDITIONALLY

                                     0000  6000 ; ENTERED DEPENDING ON THE CURRENT PROCESS' RESOURCE WAIT MODE.

                                     0000  6100 ;

                                     0000  6200 ; EXE$ALLOCIRP - ALLOCATE I/O REQUEST PACKET AND CONDITIONALLY WAIT

                                     0000  6300 ;

                                     0000  6400 ; THIS ROUTINE IS CALLED TO ALLOCATE AN I/O PACKET. IF SUFFICIENT MEMORY

                                     0000  6500 ; IS NOT AVAILABLE, THEN A RESOURCE WAIT STATE IS CONDITIONALLY ENTERED

                                     0000  6600 ; DEPENDING ON THE CURRENT PROCESS' RESOURCE WAIT MODE.

                                     0000  6700 ;

                                     0000  6800 ; EXE$ALLOCPCB - ALLOCATE PROCESS CONTROL BLOCK AND CONDITIONALLY WAIT

                                     0000  6900 ;

                                     0000  7000 ; THIS ROUTINE IS CALLED TO ALLOCATE A PROCESS CONTROL BLOCK WHEN

                                     0000  7100 ; CREATING A NEW PROCESS.  IF SUFFICIENT MEMORY IS NOT AVAILABLE, THEN

                                     0000  7200 ; A RESOURCE WAIT STATE IS CONDITIONALLY ENTERED DEPENDING ON THE CURRENT

                                     0000  7300 ; PROCESS' RESOURCE WAIT MODE.

                                     0000  7400 ;

                                     0000  7500 ; EXE$ALLOCPQB - ALLOCATE PROCESS QUOTA BLOCK AND CONDITIONALLY WAIT

                                     0000  7600 ;

                                     0000  7700 ; THIS ROUTINE IS CALLED TO ALLOCATE A PROCESS QUOTA BLOCK WHEN CREATING

                                     0000  7800 ; A NEW PROCESS.  IF SUFFICIENT MEMORY IS NOT AVAILABLE, THEN A RESOURCE

                                     0000  7900 ; WAIT STATE IS ENTERED DEPENDING ON THE CURRENT PROCESS' RESOURCE WAIT

                                     0000  8000 ; MODE.

                                     0000  8100 ;

                                     0000  8200 ; EXE$ALLOCTQE - ALLOCATE TIME QUEUE ENTRY AND CONDITIONALLY WAIT

                                     0000  8300 ;

                                     0000  8400 ; THIS ROUTINE IS CALLED TO ALLOCATE A TIME QUEUE ENTRY. IF SUFFICIENT

                                     0000  8500 ; MEMORY IS NOT AVAILABLE, THEN A RESOURCE WAIT STATE IS CONDITIONALLY

                                     0000  8600 ; ENTERED DEPENDING ON THE CURRENT PROCESS' RESOURCE WAIT MODE.

                                     0000  8700 ;

                                     0000  8800 ; INPUTS:

                                     0000  8900 ;

                                     0000  9000 ;	R4 = CURRENT PROCESS PCB ADDRESS.

                                     0000  9100 ;

                                     0000  9200 ; IF ENTRY AT EXE$ALLOCBUF, THEN

                                     0000  9300 ;

                                     0000  9400 ;	R1 = SIZE OF REQUESTED BUFFER IN BYTES.

                                     0000  9500 ;

                                     0000  9600 ; OUTPUTS:

                                     0000  9700 ;

                                     0000  9800 ;	R0 = LOW BIT CLEAR IF ALLOCATION FAILURE WITH CALLING IPL PRESERVED.

                                     0000  9900 ;

                                     0000 10000 ;		R0 = SS$_INSFMEM = INSUFFICIENT MEMORY AVAILABLE TO ALLOCATE

                                     0000 10100 ;			BUFFER.

                                     0000 10200 ;

                                     0000 10300 ;	R0 = LOW BIT SET IF SUCCESSFUL ALLOCATION WITH:

                                     0000 10400 ;

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   3

01              ALLOCATE MEMORY AND CONDITIONALLY WAIT                                                                           (1)



                                     0000 10500 ;		R1 = SIZE OF REQUESTED BUFFER IN BYTES.

                                     0000 10600 ;		R2 = ADDRESS OF ALLOCATED BUFFER WITH SIZE AND TYPE FIELDS

                                     0000 10700 ;			FILLED IN.

                                     0000 10800 ;

                                     0000 10900 ;		AND IPL SET TO AST DELIVERY LEVEL.

                                     0000 11000 ;-

                                     0000 11100  

                                     0000 11200 	.ENABL	LSB

                                     0000 11300 EXE$ALLOCBUF::				;ALLOCATE BUFFERED I/O BUFFER

                          13     DD  0000 11400 	PUSHL	#DYN$C_BUFIO		;SET DATA STRUCTURE TYPE

                          1F     11  0002 11500 	BRB	20$			;

                                     0004 11600 EXE$ALLOCCEB::				;ALLOCATE COMMON EVENT BLOCK

                          04     DD  0004 11700 	PUSHL	#DYN$C_CEB		;SET DATA STRUCTURE TYPE

                          17     11  0006 11800 	BRB	10$			;

                                     0008 11900 EXE$ALLOCIRP::				;ALLOCATE I/O PACKET - CONDITIONAL WAIT

                          0A     DD  0008 12000 	PUSHL	#DYN$C_IRP		;SET DATA STRUCTURE TYPE

                          13     11  000A 12100 	BRB	10$			;

                                     000C 12200 EXE$ALLOCPCB::				;ALLOCATE PROCESS CONTROL BLOCK

                          0C     DD  000C 12300 	PUSHL	#DYN$C_PCB		;SET DATA STRUCTURE TYPE

            51         7C 8F     9A  000E 12400 	MOVZBL	#PCB$C_LENGTH,R1	;AND STRUCTURE SIZE

                          0F     11  0012 12500 	BRB	20$			;

                                     0014 12600 EXE$ALLOCPQB::				;ALLOCATE PROCESS QUOTA BLOCK

                          0D     DD  0014 12700 	PUSHL	#DYN$C_PQB		;SET DATA STRUCTURE TYPE

            51       01AC 8F     3C  0016 12800 	MOVZWL	#PQB$C_LENGTH,R1	;AND STRUCTURE SIZE

                          06     11  001B 12900 	BRB	20$			;

                                     001D 13000 EXE$ALLOCTQE::				;ALLOCATE TIME QUEUE ENTRY

                          0F     DD  001D 13100 	PUSHL	#DYN$C_TQE		;SET DATA STRUCTURE TYPE

            51         50 8F     9A  001F 13200 10$:	MOVZBL	#<IRP$C_LENGTH+MASK>&<^C<MASK>>,R1 ;SET SIZE OF BUFFER REQUIRED

                          7E     DC  0023 13300 20$:	MOVPSL	-(SP)			;READ CURRENT PSL

                                     0025 13400 	DSBINT	#IPL$_SYNCH		;SYNCHRONIZE ACCESS TO SYSTEM DATA BASE

                          51     DD  002B 13500 	PUSHL	R1			;SAVE REQUEST SIZE

                          2A     10  002D 13600 	BSBB	EXE$ALONONPAGED		;ATTEMPT TO ALLOCATE PACKET

                          0A     BA  002F 13700 	POPR	#^M<R1,R3>		;RETRIEVE REQUEST SIZE AND PREVIOUS IPL

            13            50     E9  0031 13800 	BLBC	R0,40$			;IF LBC NO PACKET ALLOCATED

         08 A2            51     B0  0034 13900 	MOVW	R1,IRP$W_SIZE(R2)	;INSERT SIZE OF ALLOCATED BLOCK

         0A A2         04 AE     90  0038 14000 	MOVB	4(SP),IRP$B_TYPE(R2)	;INSERT DATA STRUCTURE TYPE

            53            02     3C  003D 14100 	MOVZWL	#IPL$_ASTDEL,R3		;SET TO RAISE TO AST DELIVERY LEVEL

                                     0040 14200 30$:	ENBINT	R3			;ALLOW INTERRUPTS

            5E            08     C0  0043 14300 	ADDL	#8,SP			;REMOVE PSL AND STRUCTURE TYPE FROM STACK

                                 05  0046 14400 	RSB				;

            50       0124 8F     3C  0047 14500 40$:	MOVZWL	#SS$_INSFMEM,R0		;SET INSUFFICIENT MEMORY

         28 A4            0A     E0  004C 14600 	BBS	#PCB$V_SSRWAIT,PCB$L_STS(R4),30$ ;IF SET, NO WAIT

                          EF         0050       

            50            03     3C  0051 14700 	MOVZWL	#RSN$_NPDYNMEM,R0	;SET NONPAGED DYNAMIC MEMORY RESOURCE NUMBER

                          FFA9'  30  0054 14800 	BSBW	SCH$RWAIT		;WAIT FOR NONPAGED MEMORY

                          CA     11  0057 14900 	BRB	20$			;

                                     0059 15000 	.DSABL	LSB

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   4

01              ALLOCATE NONPAGED DYNAMIC MEMORY                                                                                 (1)



                                     0059 15200 	.SBTTL	ALLOCATE NONPAGED DYNAMIC MEMORY

                                     0059 15300 ;+

                                     0059 15400 ; EXE$ALONONPAGED - ALLOCATE NONPAGED DYNAMIC MEMORY

                                     0059 15500 ;

                                     0059 15600 ; THIS ROUTINE IS CALLED TO ALLOCATE A BLOCK OF MEMORY FROM THE NONPAGED POOL.

                                     0059 15700 ; IF THE BLOCK IS THE SAME SIZE AS AN I/O PACKET, AN ATTEMPT IS MADE TO ALLO-

                                     0059 15800 ; CATE IT FROM THE LOOKASIDE LIST.

                                     0059 15900 ;

                                     0059 16000 ; INPUTS:

                                     0059 16100 ;

                                     0059 16200 ;	R1 = SIZE OF BLOCK REQUIRED IN BYTES.

                                     0059 16300 ;

                                     0059 16400 ; OUTPUTS:

                                     0059 16500 ;

                                     0059 16600 ;	R0 = LOW BIT CLEAR IF MEMORY IS NOT AVAILABLE.

                                     0059 16700 ;

                                     0059 16800 ;	R0 = LOW BIT SET IF MEMORY ALLOCATED WITH:

                                     0059 16900 ;

                                     0059 17000 ;		R1 = SIZE OF ALLOCATED BLOCK.

                                     0059 17100 ;		R2 = ADDRESS OF ALLOCATED BLOCK.

                                     0059 17200 ;-

                                     0059 17300  

                                     0059 17400 	.ENABL	LSB

                                     0059 17500 EXE$ALONONPAGED::			;ALLOCATE NONPAGED MEMORY

            51            0F     C0  0059 17600 	ADDL	#MASK,R1		;ROUND SIZE UP TO NEXT BOUNDRY

            51            0F     CA  005C 17700 	BICL	#MASK,R1		;TRUNCATE SIZE BACK TO MULTIPLE

                          54     13  005F 17800 	BEQL	20$			;IF EQL BAD ALLOCATION REQUEST

            51       0050 8F     B1  0061 17900 	CMPW	#<IRP$C_LENGTH+MASK>&<^C<MASK>>,R1 ;SIZE EQUAL TO I/O PACKET?

                          0B     12  0066 18000 	BNEQ	10$			;IF NEQ NO

            52       0000'DF     0F  0068 18100 	REMQUE	@W^IOC$GL_IRPFL,R2	;REMOVE FIRST PACKET FROM LOOK ASIDE LIST

                          04     1D  006D 18200 	BVS	10$			;IF VS EMPTY LIST

            50            01     D0  006F 18300 	MOVL	#SS$_NORMAL,R0		;SET SUCCESSFUL COMPLETION

                                 05  0072 18400 	RSB				;

            53       0000'CF     9E  0073 18500 10$:	MOVAB	W^EXE$GL_NONPAGED,R3	;GET ADDRESS OF NONPAGED MEMORY LISTHEAD

                                     0078 18600 	DSBINT	(R3)+			;DISABLE INTERRUPTS

                          3C     10  007E 18700 	BSBB	EXE$ALLOCATE		;ALLOCATE BLOCK

                                     0080 18800 	ENBINT				;ENABLE INTERRUPTS

                                 05  0083 18900 	RSB				;

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   5

01              ALLOCATE PAGED DYNAMIC MEMORY                                                                                    (1)



                                     0084 19100 	.SBTTL	ALLOCATE PAGED DYNAMIC MEMORY

                                     0084 19200 ;+

                                     0084 19300 ; EXE$ALOPAGED - ALLOCATE PAGED DYNAMIC MEMORY

                                     0084 19400 ;

                                     0084 19500 ; THIS ROUTINE IS CALLED TO ALLOCATE A BLOCK OF MEMORY FROM THE PAGED POOL.

                                     0084 19600 ;

                                     0084 19700 ; INPUTS:

                                     0084 19800 ;

                                     0084 19900 ;	R1 = SIZE OF BLOCK REQUIRED IN BYTES.

                                     0084 20000 ;

                                     0084 20100 ; OUTPUTS:

                                     0084 20200 ;

                                     0084 20300 ;	R0 = LOW BIT CLEAR IF MEMORY IS NOT AVAILABLE.

                                     0084 20400 ;

                                     0084 20500 ;	R0 = LOW BIT SET IF MEMORY ALLOCATED WITH:

                                     0084 20600 ;

                                     0084 20700 ;		R1 = SIZE OF ALLOCATED BLOCK.

                                     0084 20800 ;		R2 = ADDRESS OF ALLOCATED BLOCK.

                                     0084 20900 ;-

                                     0084 21000  

                                     0084 21100 EXE$ALOPAGED::				;ALLOCATE PAGED DYNAMIC MEMORY

            51            0F     C0  0084 21200 	ADDL	#MASK,R1		;ROUND SIZE UP TO NEXT BOUNDRY

            51            0F     CA  0087 21300 	BICL	#MASK,R1		;TRUNCATE SIZE BACK TO MULTIPLE

                          29     13  008A 21400 	BEQL	20$			;IF EQL BAD ALLOCATION REQUEST

                                     008C 21500 	SAVIPL				;SAVE CURRENT IPL

                          54     DD  008F 21600 	PUSHL	R4			;SAVE REGISTER

            50       0000'CF     9E  0091 21700 	MOVAB	W^EXE$GL_PGDYNMTX,R0	;GET ADDRESS OF PAGED MEMORY MUTEX

            54       0000'CF     D0  0096 21800 	MOVL	W^SCH$GL_CURPCB,R4	;GET CURRENT PROCESS PCB ADDRESS

                          FF62'  30  009B 21900 	BSBW	SCH$LOCKW		;LOCK PAGED MEMORY DATA BASE FOR WRITE

            53       0000'CF     9E  009E 22000 	MOVAB	W^EXE$GL_PAGED,R3	;GET ADDRESS OF PAGED MEMORY LISTHEAD

                          17     10  00A3 22100 	BSBB	EXE$ALLOCATE		;ALLOCATE BLOCK

                          07     BB  00A5 22200 	PUSHR	#^M<R0,R1,R2>		;SAVE REGISTERS

            50       0000'CF     9E  00A7 22300 	MOVAB	W^EXE$GL_PGDYNMTX,R0	;GET ADDRESS OF PAGED MEMORY MUTEX

                          FF51'  30  00AC 22400 	BSBW	SCH$UNLOCK		;UNLOCK PAGED MEMORY DATA BASE

                          17     BA  00AF 22500 	POPR	#^M<R0,R1,R2,R4>	;RESTORE REGISTERS

                                     00B1 22600 	ENBINT				;ENABLE INTERRUPTS

                                 05  00B4 22700 	RSB				;

                                     00B5 22800 20$:	BUG_CHECK BADALORQSZ		;BAD ALLOCATION REQUEST SIZE

                          50     D4  00B9 22900 	CLRL	R0			;INDICATE NO BLOCK ALLOCATED

                                 05  00BB 23000 	RSB				;

                                     00BC 23100 	.DSABL	LSB

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   6

01              GENERAL ALLOCATE MEMORY SUBROUTINE                                                                               (1)



                                     00BC 23300 	.SBTTL	GENERAL ALLOCATE MEMORY SUBROUTINE

                                     00BC 23400 ;+

                                     00BC 23500 ; EXE$ALLOCATE - ALLOCATE MEMORY SUBROUTINE

                                     00BC 23600 ;

                                     00BC 23700 ; THIS ROUTINE IS CALLED TO ALLOCATE A BLOCK OF MEMORY FROM A POOL WHOSE ENTRIES

                                     00BC 23800 ; ARE MAINTAINED IN A MEMORY ORDER SORTED LIST.

                                     00BC 23900 ;

                                     00BC 24000 ; INPUTS:

                                     00BC 24100 ;

                                     00BC 24200 ;	R1 = SIZE OF BLOCK REQUIRED IN BYTES.

                                     00BC 24300 ;	R3 = ADDRESS OF ALLOCATION REGION LISTHEAD.

                                     00BC 24400 ;

                                     00BC 24500 ; OUTPUTS:

                                     00BC 24600 ;

                                     00BC 24700 ;	R0 = LOW BIT CLEAR IF MEMORY IS NOT AVAILABLE.

                                     00BC 24800 ;

                                     00BC 24900 ;	R0 = LOW BIT SET IF MEMORY ALLOCATED WITH:

                                     00BC 25000 ;

                                     00BC 25100 ;		R1 = SIZE OF ALLOCATED BLOCK.

                                     00BC 25200 ;		R2 = ADDRESS OF ALLOCATED BLOCK.

                                     00BC 25300 ;-

                                     00BC 25400 

                                     00BC 25500 EXE$ALLOCATE::				;ALLOCATE MEMORY

            50            53     D0  00BC 25600 	MOVL	R3,R0			;COPY ADDRESS OF FIRST FREE BLOCK ADDRESS

            52            50     D0  00BF 25700 10$:	MOVL	R0,R2			;SAVE ADDRESS OF PREVIOUS FREE BLOCK

            50            62     D0  00C2 25800 	MOVL	(R2),R0			;GET ADDRESS OF NEXT FREE BLOCK

                          1C     13  00C5 25900 	BEQL	30$			;IF EQL NO MEMORY AVAILABLE

         04 A0            51     D1  00C7 26000 	CMPL	R1,4(R0)		;FREE BLOCK BIG ENOUGH?

                          F2     1A  00CB 26100 	BGTRU	10$			;IF GTRU NO

                          0E     13  00CD 26200 	BEQL	20$			;IF EQL FREE BLOCK IS EXACT SIZE

            51            50     C1  00CF 26300 	ADDL3	R0,R1,R3		;CALCULATE ADDRESS OF NEW FREE BLOCK

                          53         00D2       

            83            80     D0  00D3 26400 	MOVL	(R0)+,(R3)+		;COPY LINK TO NEXT FREE BLOCK

            60            51     C3  00D6 26500 	SUBL3	R1,(R0),(R3)		;CALCULATE SIZE OF NEW FREE BLOCK

                          63         00D9       

            70            73     DE  00DA 26600 	MOVAL	-(R3),-(R0)		;SET LINK TO NEW FREE BLOCK

            62            60     D0  00DD 26700 20$:	MOVL	(R0),(R2)		;COPY LINK TO NEW FREE BLOCK

            52            80     9E  00E0 26800 	MOVAB	(R0)+,R2		;SET ADR OF ALLOCATED BLOCK, INDICATE SUCCESS

                                 05  00E3 26900 30$:	RSB				;

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   7

01              DEALLOCATE NONPAGED DYNAMIC MEMORY                                                                               (1)



                                     00E4 27100 	.SBTTL	DEALLOCATE NONPAGED DYNAMIC MEMORY

                                     00E4 27200 ;+

                                     00E4 27300 ; EXE$DEANONPAGED - DEALLOCATE NONPAGED DYNAMIC MEMORY

                                     00E4 27400 ;

                                     00E4 27500 ; THIS ROUTINE IS CALLED TO DEALLOCATE A BLOCK OF MEMORY TO THE NONPAGED POOL.

                                     00E4 27600 ; IF THE BLOCK WAS ALLOCATED FROM THE I/O PACKET LOOKASIDE LIST IT IS RETURNED

                                     00E4 27700 ; TO THAT LIST. OTHERWISE IT IS MERGED INTO THE NONPAGED POOL.

                                     00E4 27800 ;

                                     00E4 27900 ; INPUTS:

                                     00E4 28000 ;

                                     00E4 28100 ;	R0 = ADDRESS OF BLOCK TO BE DEALLOCATED.

                                     00E4 28200 ;

                                     00E4 28300 ; OUTPUTS:

                                     00E4 28400 ;

                                     00E4 28500 ;	THE SPECIFIED BLOCK IS RETURNED TO I/O PACKET LOOKASIDE LIST OR THE

                                     00E4 28600 ;	NONPAGED POOL AS APPROPRIATE.

                                     00E4 28700 ;-

                                     00E4 28800  

                                     00E4 28900 	.ENABL	LSB

                                     00E4 29000 EXE$DEANONPAGED::			;DEALLOCATE NONPAGED DYNAMIC MEMORY

                          53     10  00E4 29100 	BSBB	CHECKBLOCK		;CHECK DEALLOCATION PARAMETERS

            53       0000'CF     9E  00E6 29200 	MOVAB	W^EXE$GL_NONPAGED,R3	;GET ADDRESS OF NONPAGED MEMORY LISTHEAD

                                     00EB 29300 	DSBINT	(R3)+			;DISABLE INTERRUPTS

       0000'CF            50     D1  00F1 29400 	CMPL	R0,W^EXE$GL_SPLITADR	;I/O PACKET?

                          07     1F  00F6 29500 	BLSSU	10$			;IF LSSU NO

       0000'DF            60     0E  00F8 29600 	INSQUE	(R0),@W^IOC$GL_IRPBL	;INSERT NEW PACKET AT END OF LIST

                          02     11  00FD 29700 	BRB	20$			;

                          50     10  00FF 29800 10$:	BSBB	EXE$DEALLOCATE		;DEALLOCATE BLOCK

            50            03     3C  0101 29900 20$:	MOVZWL	#RSN$_NPDYNMEM,R0	;SET NONPAGED DYNAMIC MEMORY RESOURCE NUMBER

                          2C     11  0104 30000 	BRB	30$			;

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   8

01              DEALLOCATE PAGED DYNAMIC MEMORY                                                                                  (1)



                                     0106 30200 	.SBTTL	DEALLOCATE PAGED DYNAMIC MEMORY

                                     0106 30300 ;+

                                     0106 30400 ; EXE$DEAPAGED - DEALLOCATE PAGED DYNAMIC MEMORY

                                     0106 30500 ;

                                     0106 30600 ; THIS ROUTINE IS CALLED TO DEALLOCATE A BLOCK OF MEMORY TO THE PAGED POOL.

                                     0106 30700 ;

                                     0106 30800 ; INPUTS:

                                     0106 30900 ;

                                     0106 31000 ;	R0 = ADDRESS OF BLOCK TO BE DEALLOCATED.

                                     0106 31100 ;

                                     0106 31200 ; OUTPUTS:

                                     0106 31300 ;

                                     0106 31400 ;	THE SPECIFIED BLOCK OF MEMORY IS RETURNED TO THE PAGED POOL.

                                     0106 31500 ;-

                                     0106 31600  

                                     0106 31700 EXE$DEAPAGED::				;DEALLOCATE PAGED DYNAMIC MEMORY

                          31     10  0106 31800 	BSBB	CHECKBLOCK		;CHECK DEALLOCATION PARAMETERS

                                     0108 31900 	SAVIPL				;SAVE CURRENT IPL

                          11     BB  010B 32000 	PUSHR	#^M<R0,R4>		;SAVE REGISTERS

            50       0000'CF     9E  010D 32100 	MOVAB	W^EXE$GL_PGDYNMTX,R0	;GET ADDRESS OF PAGED MEMORY MUTEX

            54       0000'CF     D0  0112 32200 	MOVL	W^SCH$GL_CURPCB,R4	;GET CURRENT PROCESS PCB ADDRESS

                          FEE6'  30  0117 32300 	BSBW	SCH$LOCKW		;LOCK PAGED MEMORY DATA BASE FOR WRITE

                          50   8ED0  011A 32400 	POPL	R0			;RESTORE REGISTER

            53       0000'CF     9E  011D 32500 	MOVAB	W^EXE$GL_PAGED,R3	;GET ADDRESS OF PAGED MEMORY LISTHEAD

                          2D     10  0122 32600 	BSBB	EXE$DEALLOCATE		;DEALLOCATE BLOCK

            50       0000'CF     9E  0124 32700 	MOVAB	W^EXE$GL_PGDYNMTX,R0	;GET ADDRESS OF PAGED MEMORY MUTEX

                          FED4'  30  0129 32800 	BSBW	SCH$UNLOCK		;UNLOCK PAGED MEMORY DATA BASE

                          54   8ED0  012C 32900 	POPL	R4			;RESTORE REGISTER

            50            05     3C  012F 33000 	MOVZWL	#RSN$_PGDYNMEM,R0	;SET PAGED DYNAMIC MEMORY RESOURCE NUMBER

                          FECB'  30  0132 33100 30$:	BSBW	SCH$RAVAIL		;MARK RESOURCE AVAILABLE

                                     0135 33200 	ENBINT				;ENABLE INTERRUPTS

                                 05  0138 33300 	RSB				;

                                     0139 33400 	.DSABL	LSB

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page   9

01              CHECK BLOCK PARAMETERS SUBROUTINE                                                                                (1)



                                     0139 33600 	.SBTTL	CHECK BLOCK PARAMETERS SUBROUTINE

                                     0139 33700 ;

                                     0139 33800 ; CHECKBLOCK - CHECK BLOCK PARAMETERS SUBROUTINE

                                     0139 33900 ;

                                     0139 34000  

                                     0139 34100 CHECKBLOCK:				;CHECK BLOCK PARAMETERS

            50            0F     D3  0139 34200 	BITL	#MASK,R0		;BLOCK ALIGNED ON BOUNDRY?

                          0C     12  013C 34300 	BNEQ	10$			;IF NEQ NO - BAD DEALLOCATION

            51         08 A0     3C  013E 34400 	MOVZWL	IRP$W_SIZE(R0),R1	;GET SIZE OF BLOCK IN BYTES

            51            0F     C0  0142 34500 	ADDL	#MASK,R1		;ROUND SIZE UP TO NEXT BOUNDRY

            51            0F     CA  0145 34600 	BICL	#MASK,R1		;TRUNCATE SIZE BACK TO MULTIPLE

                          06     12  0148 34700 	BNEQ	20$			;IF NEQ OKAY

                                     014A 34800 10$:	BUG_CHECK BADDALRQSZ		;BAD DEALLOCATION REQUEST SIZE OR ADDRESS

                          8E     D5  014E 34900 	TSTL	(SP)+			;REMOVE RETURN FROM STACK

                                 05  0150 35000 20$:	RSB				;

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page  10

01              GENERAL DEALLOCATION SUBROUTINE                                                                                  (1)



                                     0151 35200 	.SBTTL	GENERAL DEALLOCATION SUBROUTINE

                                     0151 35300 ;+

                                     0151 35400 ; EXE$DEALLOCATE - DEALLOCATION SUBROUTINE

                                     0151 35500 ;

                                     0151 35600 ; INPUTS:

                                     0151 35700 ;

                                     0151 35800 ;	R0 = ADDRESS OF BLOCK TO BE DEALLOCATED.

                                     0151 35900 ;	R1 = SIZE OF BLOCK IN BYTES

                                     0151 36000 ;	R3 = ADDRESS OF ALLOCATION REGION LISTHEAD.

                                     0151 36100 ;

                                     0151 36200 ; OUTPUTS:

                                     0151 36300 ;

                                     0151 36400 ;	NONE

                                     0151 36500 ;-

                                     0151 36600 

                                     0151 36700 EXE$DEALLOCATE::			;DEALLOCATE BLOCK

            52            53     D0  0151 36800 10$:	MOVL	R3,R2			;SAVE ADDRESS OF PREVIOUS FREE BLOCK

            53            62     D0  0154 36900 	MOVL	(R2),R3			;GET ADDRESS OF NEXT FREE BLOCK

                          07     13  0157 37000 	BEQL	20$			;IF EQL END OF LIST

            53            50     D1  0159 37100 	CMPL	R0,R3			;BLOCK LOGICALLY GO HERE?

                          F3     1A  015C 37200 	BGTRU	10$			;IF GTRU NO

                          2D     13  015E 37300 	BEQLU	50$			;IF EQLU DOUBLE DEALLOCATION

            60            53     D0  0160 37400 20$:	MOVL	R3,(R0)			;ASSUME NO AGGLOMERATION

            51            50     C1  0163 37500 	ADDL3	R0,R1,-(SP)		;CALCULATE ADDRESS OF END OF BLOCK

                          7E         0166       

            8E            53     D1  0167 37600 	CMPL	R3,(SP)+		;END OF BLOCK EQUAL TO NEXT IN LIST?

                          06     12  016A 37700 	BNEQ	30$			;IF NEQ DO NOT AGGLOMERATE

            60            83     D0  016C 37800 	MOVL	(R3)+,(R0)		;MOVE LINK TO BLOCK BEING RELEASED

            51            63     C0  016F 37900 	ADDL	(R3),R1			;ACCUMULATE LENGTH OF NEW FREE BLOCK

                          52     DD  0172 38000 30$:	PUSHL	R2			;CALCULATE ENDING ADDRESS OF PREVIOUS BLOCK

            82            50     D0  0174 38100 	MOVL	R0,(R2)+		;ASSUME NO AGGLOMERATION

            6E            62     C0  0177 38200 	ADDL	(R2),(SP)		;ADD LENGTH TO BLOCK BASE ADDRESS

            8E            50     D1  017A 38300 	CMPL	R0,(SP)+		;END ADDRESS EQUAL TO BLOCK BEING RELEASED?

                          09     12  017D 38400 	BNEQ	40$			;IF NEQ DO NOT AGGLOMERATE BLOCKS

            51            62     C0  017F 38500 	ADDL	(R2),R1			;ACCUMULATE SIZE OF NEW FREE BLOCK

            72            60     D0  0182 38600 	MOVL	(R0),-(R2)		;MOVE LINK TO PREVIOUS FREE BLOCK

            50            52     D0  0185 38700 	MOVL	R2,R0			;SET ADDRESS OF NEW FREE BLOCK

         04 A0            51     D0  0188 38800 40$:	MOVL	R1,4(R0)		;SET SIZE OF FREE BLOCK

                                 05  018C 38900 	RSB				;

                                     018D 39000 50$:	BUG_CHECK DOUBLDEALO,FATAL	;DOUBLE DEALLOCATION OF MEMORY BLOCK

                                     0191 39100  

                                     0191 39200 	.END

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page  11

SYMBOL TABLE                                                                                                                     (1)



BIT...         = 00000003            EXE$GL_PAGED     ********   X   03   IRP$V_FUNC     = 00000001            

BUG$_BADALORQSZ  ********   X   03   EXE$GL_PGDYNMTX  ********   X   03   IRP$V_MODE     = 00000000            

BUG$_BADDALRQSZ  ********   X   03   EXE$GL_SPLITADR  ********   X   03   IRP$V_PAGIO    = 00000002            

BUG$_DOUBLDEALO  ********   X   03   GBL...         = 00000000            IRP$V_PHYSIO   = 00000008            

CHECKBLOCK       00000139 R     03   IOC$GL_IRPBL     ********   X   03   IRP$V_PRIVIO   = 00000009            

DYN$C_ACB      = 00000002            IOC$GL_IRPFL     ********   X   03   IRP$V_SWAPIO   = 00000006            

DYN$C_ADP      = 00000001            IPL$_ASTDEL    = 00000002            IRP$V_VIRTUAL  = 00000004            

DYN$C_AQB      = 00000003            IPL$_HWCLK     = 00000018            IRP$W_ABCNT      0000003C            

DYN$C_BRDCST   = 0000001A            IPL$_IOPOST    = 00000004            IRP$W_BCNT       00000032            

DYN$C_BUFIO    = 00000013            IPL$_MAILBOX   = 0000000B            IRP$W_BOFF       00000030            

DYN$C_CEB      = 00000004            IPL$_POWER     = 0000001F            IRP$W_CHAN       00000028            

DYN$C_CIR      = 0000001E            IPL$_QUEUEAST  = 00000006            IRP$W_FUNC       00000020            

DYN$C_CRB      = 00000005            IPL$_SCHED     = 00000003            IRP$W_OBCNT      0000003E            

DYN$C_CXB      = 0000001B            IPL$_SYNCH     = 00000007            IRP$W_SIZE       00000008            

DYN$C_DDB      = 00000006            IPL$_TIMER     = 00000007            IRP$W_STS        0000002A            

DYN$C_FCB      = 00000007            IRP$B_CARCON     00000038            IRP$W_TT_PRMPT   0000003C            

DYN$C_FRK      = 00000008            IRP$B_EFN        00000022            MASK           = 0000000F            

DYN$C_GSD      = 00000015            IRP$B_PRI        00000023            PCB$B_ASTACT     0000000C            

DYN$C_IDB      = 00000009            IRP$B_RMOD       0000000B            PCB$B_ASTEN      0000000D            

DYN$C_IRP      = 0000000A            IRP$B_TYPE       0000000A            PCB$B_PRI        0000000B            

DYN$C_JPB      = 0000001F            IRP$C_LENGTH     0000004C            PCB$B_PRIB       00000033            

DYN$C_KFH      = 00000026            IRP$K_LENGTH     0000004C            PCB$B_TYPE       0000000A            

DYN$C_KFI      = 00000018            IRP$L_AST        00000010            PCB$B_WEFC       00000032            

DYN$C_LOG      = 0000000B            IRP$L_ASTPRM     00000014            PCB$C_LENGTH     0000007C            

DYN$C_MTL      = 00000019            IRP$L_DIAGBUF    00000044            PCB$K_LENGTH     0000007C            

DYN$C_MVL      = 00000016            IRP$L_IOQBL      00000004            PCB$L_ASTQBL     00000014            

DYN$C_NDB      = 0000001C            IRP$L_IOQFL      00000000            PCB$L_ASTQFL     00000010            

DYN$C_NET      = 00000017            IRP$L_IOSB       00000024            PCB$L_EFC2P      00000058            

DYN$C_PBH      = 00000020            IRP$L_IOST1      00000034            PCB$L_EFC3P      0000005C            

DYN$C_PCB      = 0000000C            IRP$L_IOST2      00000038            PCB$L_EFCS       00000050            

DYN$C_PDB      = 00000021            IRP$L_MEDIA      00000034            PCB$L_EFCU       00000054            

DYN$C_PFL      = 00000023            IRP$L_PID        0000000C            PCB$L_EFWM       0000004C            

DYN$C_PIB      = 00000022            IRP$L_SEGVBN     00000040            PCB$L_OWNER      0000001C            

DYN$C_PQB      = 0000000D            IRP$L_SEQNUM     00000048            PCB$L_PHD        00000064            

DYN$C_PTR      = 00000025            IRP$L_SVAPTE     0000002C            PCB$L_PHYPCB     00000018            

DYN$C_RVT      = 0000000E            IRP$L_TT_TERM    00000038            PCB$L_PID        00000060            

DYN$C_SFT      = 00000024            IRP$L_UCB        0000001C            PCB$L_PQB        0000004C            

DYN$C_SSB      = 0000001D            IRP$L_WIND       00000018            PCB$L_SQBL       00000004            

DYN$C_TQE      = 0000000F            IRP$M_BUFIO    = 00000001            PCB$L_SQFL       00000000            

DYN$C_TYPAHD   = 00000014            IRP$M_CHAINED  = 00000020            PCB$L_STS        00000028            

DYN$C_UCB      = 00000010            IRP$M_COMPLX   = 00000008            PCB$L_UIC        00000020            

DYN$C_VCB      = 00000011            IRP$M_DIAGBUF  = 00000080            PCB$L_WSSWP      00000024            

DYN$C_WCB      = 00000012            IRP$M_FUNC     = 00000002            PCB$L_WTIME      0000002C            

EXE$ALLOCATE     000000BC RG    03   IRP$M_PAGIO    = 00000004            PCB$T_LNAME      0000006C            

EXE$ALLOCBUF     00000000 RG    03   IRP$M_PHYSIO   = 00000100            PCB$V_ASTPEN   = 00000011            

EXE$ALLOCCEB     00000004 RG    03   IRP$M_PRIVIO   = 00000200            PCB$V_BATCH    = 0000000E            

EXE$ALLOCIRP     00000008 RG    03   IRP$M_SWAPIO   = 00000040            PCB$V_DELPEN   = 00000001            

EXE$ALLOCPCB     0000000C RG    03   IRP$M_VIRTUAL  = 00000010            PCB$V_FORCPEN  = 00000002            

EXE$ALLOCPQB     00000014 RG    03   IRP$S_FCODE    = 00000006            PCB$V_HIBER    = 00000013            

EXE$ALLOCTQE     0000001D RG    03   IRP$S_FMOD     = 0000000A            PCB$V_INQUAN   = 00000003            

EXE$ALONONPAGED  00000059 RG    03   IRP$S_MODE     = 00000002            PCB$V_LOGIN    = 00000014            

EXE$ALOPAGED     00000084 RG    03   IRP$V_BUFIO    = 00000000            PCB$V_NOACNT   = 0000000F            

EXE$C_ALCGRNMSK= 0000000F  G         IRP$V_CHAINED  = 00000005            PCB$V_PHDRES   = 00000012            

EXE$DEALLOCATE   00000151 RG    03   IRP$V_COMPLX   = 00000003            PCB$V_PSWAPM   = 00000004            

EXE$DEANONPAGED  000000E4 RG    03   IRP$V_DIAGBUF  = 00000007            PCB$V_RES      = 00000000            

EXE$DEAPAGED     00000106 RG    03   IRP$V_FCODE    = 00000000            PCB$V_RESPEN   = 00000005            

EXE$GL_NONPAGED  ********   X   03   IRP$V_FMOD     = 00000006            PCB$V_SSFEXC   = 00000006            

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page  12

SYMBOL TABLE                                                                                                                     (1)



PCB$V_SSFEXCE  = 00000007            PR$_ICR        = 0000001A            SS$_BADIMGHDR  = 00000044            

PCB$V_SSFEXCS  = 00000008            PR$_IPL        = 00000012            SS$_BADIRECTORY= 00000828            

PCB$V_SSFEXCU  = 00000009            PR$_ISP        = 00000004            SS$_BADPARAM   = 00000014            

PCB$V_SSRWAIT  = 0000000A            PR$_KSP        = 00000000            SS$_BADSTACK   = 000002B4            

PCB$V_SUSPEN   = 0000000B            PR$_MAPEN      = 00000038            SS$_BEGOFFILE  = 00000938            

PCB$V_SWPVBN   = 00000010            PR$_NICR       = 00000019            SS$_BLOCKCNTERR= 00000940            

PCB$V_WAKEPEN  = 0000000C            PR$_P0BR       = 00000008            SS$_BREAK      = 00000414            

PCB$V_WALL     = 0000000D            PR$_P0LR       = 00000009            SS$_BUFFEROVF  = 00000601            

PCB$W_APTCNT     00000034            PR$_P1BR       = 0000000A            SS$_BUGCHECK   = 000002A4            

PCB$W_ASTCNT     0000003C            PR$_P1LR       = 0000000B            SS$_CANCEL     = 00000830            

PCB$W_BIOCNT     0000003E            PR$_PCBB       = 00000010            SS$_CHANINTLK  = 0000004C            

PCB$W_BIOLM      00000040            PR$_RXCS       = 00000020            SS$_CLIFRCEXT  = 00000980            

PCB$W_BYTCNT     00000042            PR$_RXDB       = 00000021            SS$_CMODSUPR   = 0000041C            

PCB$W_BYTLM      00000068            PR$_SBIER      = 00000034            SS$_CMODUSER   = 00000424            

PCB$W_DIOCNT     00000044            PR$_SBIFS      = 00000030            SS$_COMPAT     = 0000042C            

PCB$W_DIOLM      00000046            PR$_SBIMT      = 00000033            SS$_CONTINUE   = 00000001            

PCB$W_FILCNT     00000048            PR$_SBIQC      = 00000036            SS$_CONTROLC   = 00000651            

PCB$W_GPGCNT     00000038            PR$_SBIS       = 00000031            SS$_CONTROLO   = 00000609            

PCB$W_GRP        00000022            PR$_SBISC      = 00000032            SS$_CONTROLY   = 00000611            

PCB$W_MEM        00000020            PR$_SBITA      = 00000035            SS$_CREATED    = 00000619            

PCB$W_MTXCNT     0000000E            PR$_SBR        = 0000000C            SS$_CTRLERR    = 00000054            

PCB$W_PPGCNT     0000003A            PR$_SCBB       = 00000011            SS$_DATACHECK  = 0000005C            

PCB$W_PRCCNT     0000006A            PR$_SID        = 0000003E            SS$_DATAOVERUN = 00000838            

PCB$W_SIZE       00000008            PR$_SIRR       = 00000014            SS$_DEBUG      = 0000046C            

PCB$W_STATE      00000030            PR$_SISR       = 00000015            SS$_DEVACTIVE  = 000002C4            

PCB$W_TMBU       00000036            PR$_SLR        = 0000000D            SS$_DEVALLOC   = 00000840            

PCB$W_TQCNT      0000004A            PR$_SSP        = 00000002            SS$_DEVALRALLOC= 00000641            

PQB$B_STS        0000000B            PR$_TBIA       = 00000039            SS$_DEVASSIGN  = 00000848            

PQB$B_TYPE       0000000A            PR$_TBIS       = 0000003A            SS$_DEVFOREIGN = 00000064            

PQB$C_LENGTH     000001AC            PR$_TODR       = 0000001B            SS$_DEVICEFULL = 00000850            

PQB$K_LENGTH     000001AC            PR$_TXCS       = 00000022            SS$_DEVMOUNT   = 0000006C            

PQB$L_ASTLM      0000014C            PR$_TXDB       = 00000023            SS$_DEVNOTALLOC= 00000858            

PQB$L_BIOLM      00000150            PR$_USP        = 00000003            SS$_DEVNOTMBX  = 00000074            

PQB$L_BYTLM      00000154            PR$_WCSA       = 0000002C            SS$_DEVNOTMOUNT= 0000007C            

PQB$L_CPULM      00000158            PR$_WCSD       = 0000002D            SS$_DEVOFFLINE = 00000084            

PQB$L_DIOLM      0000015C            RSN$_ASTWAIT   = 00000001            SS$_DIRFULL    = 00000860            

PQB$L_FILLM      00000160            RSN$_BRKTHRU   = 00000006            SS$_DRVERR     = 0000008C            

PQB$L_PGFLQUOTA  00000164            RSN$_MAILBOX   = 00000002            SS$_DUPFILENAME= 00000868            

PQB$L_PRCLM      00000168            RSN$_NPDYNMEM  = 00000003            SS$_DUPLNAM    = 00000094            

PQB$L_TQELM      0000016C            RSN$_PGDYNMEM  = 00000005            SS$_ENDOFFILE  = 00000870            

PQB$L_WSDEFAULT  00000174            RSN$_PGFILE    = 00000004            SS$_ENDOFTAPE  = 00000878            

PQB$L_WSQUOTA    00000170            SCH$GL_CURPCB    ********   X   03   SS$_ENDOFUSRLBL= 00000970            

PQB$Q_PRVMSK     00000000            SCH$LOCKW        ********   X   03   SS$_EXQUOTA    = 0000001C            

PQB$T_ACCOUNT    00000184            SCH$RAVAIL       ********   X   03   SS$_EXTIDXFILE = 00000880            

PQB$T_DDSTRING   0000018C            SCH$RWAIT        ********   X   03   SS$_FCPREADERR = 00000888            

PQB$T_DISK       0000010C            SCH$UNLOCK       ********   X   03   SS$_FCPREPSTN  = 00000988            

PQB$T_ERROR      0000004C            SS$_ABORT      = 0000002C            SS$_FCPREWNDERR= 00000890            

PQB$T_IMAGE      0000000C            SS$_ACCONFLICT = 00000800            SS$_FCPSPACERR = 00000898            

PQB$T_INPUT      0000008C            SS$_ACCVIO     = 0000000C            SS$_FCPWRITERR = 000008A0            

PQB$T_OUTPUT     000000CC            SS$_ARITH      = 00000404            SS$_FILACCERR  = 0000009C            

PQB$T_USERNAME   00000178            SS$_ASTFLT     = 0000040C            SS$_FILALRACC  = 000000A4            

PQB$W_SIZE       00000008            SS$_BADATTRIB  = 00000034            SS$_FILELOCKED = 000008A8            

PR$_ACCR       = 00000029            SS$_BADCHKSUM  = 00000808            SS$_FILENUMCHK = 000008B0            

PR$_ACCS       = 00000028            SS$_BADESCAPE  = 0000003C            SS$_FILESEQCHK = 000008B8            

PR$_ASTLVL     = 00000013            SS$_BADFILEHDR = 00000810            SS$_FILESTRUCT = 000008C0            

PR$_ESP        = 00000001            SS$_BADFILENAME= 00000818            SS$_FILNOTACC  = 000000AC            

PR$_ICCS       = 00000018            SS$_BADFILEVER = 00000820            SS$_FILNOTCNTG = 000002AC            

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page  13

SYMBOL TABLE                                                                                                                     (1)



SS$_FILNOTEXP  = 000000B4            SS$_NORMAL     = 00000001            TQE$C_WKREPT   = 00000006            

SS$_FORMAT     = 000000BC            SS$_NOSIGNAL   = 00000900            TQE$C_WKSNGL   = 00000002            

SS$_GPTFULL    = 000000C4            SS$_NOSOLICIT  = 00000284            TQE$K_LENGTH     00000030            

SS$_GSDFULL    = 000000CC            SS$_NOSUCHDEV  = 00000908            TQE$L_AST        00000010            

SS$_GSDNOTXXX  = 000000D4            SS$_NOSUCHFILE = 00000910            TQE$L_ASTPRM     00000014            

SS$_HANGUP     = 000002CC            SS$_NOSUCHNODE = 0000028C            TQE$L_FPC        0000000C            

SS$_HEADERFULL = 000008C8            SS$_NOSUCHSEC  = 00000978            TQE$L_FR3        00000010            

SS$_IDXFILEFULL= 000008D0            SS$_NOTAPEOP   = 00000264            TQE$L_FR4        00000014            

SS$_ILLBLKNUM  = 000000DC            SS$_NOTFILEDEV = 000001CC            TQE$L_PID        0000000C            

SS$_ILLCNTRFUNC= 000000E4            SS$_NOTINTBLSZ = 000001D4            TQE$L_RQPID      0000002C            

SS$_ILLEFC     = 000000EC            SS$_NOTLABELMT = 000001DC            TQE$L_TQBL       00000004            

SS$_ILLIOFUNC  = 000000F4            SS$_NOTNETDEV  = 000002EC            TQE$L_TQFL       00000000            

SS$_ILLLBLAST  = 00000968            SS$_NOTRAN     = 00000629            TQE$M_REPEAT   = 00000004            

SS$_ILLPAGCNT  = 000000FC            SS$_NOTSQDEV   = 000001E4            TQE$Q_DELTA      00000020            

SS$_ILLSEQOP   = 000002DC            SS$_OPCCUS     = 00000434            TQE$Q_TIME       00000018            

SS$_ILLSER     = 00000104            SS$_OPCDEC     = 0000043C            TQE$V_REPEAT   = 00000002            

SS$_ILLUSRLBLRD= 00000958            SS$_OPINCOMPL  = 000002D4            TQE$W_SIZE       00000008            

SS$_ILLUSRLBLWT= 00000960            SS$_PAGOWNVIO  = 000001EC            

SS$_INCVOLLABEL= 0000010C            SS$_PAGRDERR   = 00000444            

SS$_INSFARG    = 00000114            SS$_PARITY     = 000001F4            

SS$_INSFMEM    = 00000124            SS$_PARTESCAPE = 000001FC            

SS$_INSFRAME   = 0000012C            SS$_PFMBSY     = 00000204            

SS$_INSFWSL    = 0000011C            SS$_PSTFULL    = 0000020C            

SS$_IVADDR     = 00000134            SS$_RADRMOD    = 0000044C            

SS$_IVCHAN     = 0000013C            SS$_REJECT     = 00000294            

SS$_IVCHNLSEC  = 0000026C            SS$_REMOTE     = 00000649            

SS$_IVDEVNAM   = 00000144            SS$_RESIGNAL   = 00000918            

SS$_IVGSDNAM   = 0000014C            SS$_RESULTOVF  = 00000214            

SS$_IVLOGNAM   = 00000154            SS$_ROPRAND    = 00000454            

SS$_IVLOGTAB   = 0000015C            SS$_SECTBLFUL  = 0000021C            

SS$_IVPROTECT  = 000002F4            SS$_SSFAIL     = 0000045C            

SS$_IVQUOTAL   = 00000164            SS$_SUPERSEDE  = 00000631            

SS$_IVSECFLG   = 0000016C            SS$_TAPEPOSLOST= 00000224            

SS$_IVSECIDCTL = 000002E4            SS$_TBIT       = 00000464            

SS$_IVSSRQ     = 00000174            SS$_TIMEOUT    = 0000022C            

SS$_IVSTSFLG   = 0000017C            SS$_TOOMANYVER = 00000990            

SS$_IVTIME     = 00000184            SS$_TOOMUCHDATA= 0000029C            

SS$_LENVIO     = 0000018C            SS$_UNASEFC    = 00000234            

SS$_LKWSETFUL  = 00000194            SS$_UNSAFE     = 0000023C            

SS$_MBFULL     = 000008D8            SS$_UNWIND     = 00000920            

SS$_MBTOOSML   = 0000019C            SS$_UNWINDING  = 00000928            

SS$_MCHECK     = 000002BC            SS$_VASFULL    = 00000244            

SS$_MEDOFL     = 000001A4            SS$_VECINUSE   = 0000024C            

SS$_MSGNOTFND  = 00000621            SS$_VOLINV     = 00000254            

SS$_MUSTCLOSEFL= 00000948            SS$_WAITUSRLBL = 00000950            

SS$_NODATA     = 000001AC            SS$_WASCLR     = 00000001            

SS$_NOHANDLER  = 000008F8            SS$_WASECC     = 00000639            

SS$_NOHOMEBLK  = 000008E0            SS$_WASSET     = 00000009            

SS$_NOIOCHAN   = 000001B4            SS$_WRITLCK    = 0000025C            

SS$_NOLINKS    = 0000027C            TQE$B_EFN        00000029            

SS$_NOLOGNAM   = 000001BC            TQE$B_RMOD       00000028            

SS$_NOMBX      = 00000274            TQE$B_RQTYPE     0000000B            

SS$_NOMOREFILES= 00000930            TQE$B_TYPE       0000000A            

SS$_NONEXDRV   = 000001C4            TQE$C_LENGTH     00000030            

SS$_NONEXPR    = 000008E8            TQE$C_SSREPT   = 00000005            

SS$_NONLOCAL   = 000008F0            TQE$C_SSSNGL   = 00000001            

SS$_NOPRIV     = 00000024            TQE$C_TMSNGL   = 00000000            

MEMORYALC       - DYNAMIC MEMORY ALLOCATION                      21-AUG-1978 23:30:58   VAX-11 MACRO X0.3-11               Page  14

PROGRAM SECTION SYNOPSIS                                                                                                         (1)







PROGRAM SECTION SYNOPSIS



.  ABS  .        00000000      00     NOPIC   USR   CON   ABS   LCL NOSHR NOEXE NORD  NOWRT BYTE  

. BLANK .        00000000      01     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$ABS$            000001AC      02     NOPIC   USR   CON   ABS   LCL NOSHR   EXE   RD    WRT BYTE  

AEXENONPAGED     00000191      03     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  





THERE WERE NO ERRORS OR WARNINGS.

12582. BYTES LEFT IN FREE MEMORY POOL.

2936. BYTES OF RECLAIMED MEMORY.

OBJ$:MEMORYALC,LIS$:MEMORYALC/-SP=LIB$:LIB/ML,SRC$:MEMORYALC

8 MLB DIR RDS - 759 GETS TO DEFINE 22 MACROS. 54 INTER. FILE WRITES. 

