41 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
| DEFINITION MODULE Storage;
 | |
| (*
 | |
|   Module:	Dynamic storage allocation
 | |
|   From:		"Programming in Modula-2", 3rd, corrected edition, by N. Wirth
 | |
|   Version:	$Id$
 | |
| *)
 | |
| 
 | |
| (*
 | |
|   Wirth's 3rd edition certainly is confusing: mostly it uses Allocate, but
 | |
|   the module at the end of the book defines ALLOCATE. To avoid problems,
 | |
|   I included them both.
 | |
| *)
 | |
| 
 | |
| 	FROM SYSTEM IMPORT ADDRESS;
 | |
| 
 | |
| 	PROCEDURE ALLOCATE(VAR a : ADDRESS; size : CARDINAL);
 | |
| 	(* Allocate an area of the given size and return the address
 | |
| 	   in "a". If no space is available, the calling program is
 | |
| 	   killed.
 | |
| 	*)
 | |
| 
 | |
| 	PROCEDURE Allocate(VAR a : ADDRESS; size : CARDINAL);
 | |
| 	(* Identical to ALLOCATE *)
 | |
| 
 | |
| 	PROCEDURE DEALLOCATE(VAR a : ADDRESS; size : CARDINAL);
 | |
| 	(* Free the area at address "a" with the given size. The area
 | |
| 	   must have been allocated by "ALLOCATE", with the same size.
 | |
| 	*)
 | |
| 
 | |
| 	PROCEDURE Deallocate(VAR a : ADDRESS; size : CARDINAL);
 | |
| 	(* Identical to DEALLOCATE *)
 | |
| 
 | |
| 	PROCEDURE Available(size : CARDINAL) : BOOLEAN;
 | |
| 	(* Return TRUE if a contiguous area with the given size could be
 | |
| 	   allocated.
 | |
| 	   Notice that this only indicates if an ALLOCATE of this size
 | |
| 	   would succeed, and that it gives no indication of the total
 | |
| 	   available memory.
 | |
| 	*)
 | |
| 
 | |
| END Storage.
 |