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:	$Header$
 | 
						|
*)
 | 
						|
 | 
						|
(*
 | 
						|
  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.
 |