|
|
|
|
||
|
DEFINITION MODULE DMStorage; (******************************************************************* Module DMStorage ('Dialog Machine' DM_V3.0) Copyright (c) 1989-2006 by Andreas Fischlin and ETH Zurich. Purpose Dynamic heap allocation on any subprogram level for 'Dialog Machine' client programs. Remarks Use only these routines to allocate resp. deallocate heap blocks, not the routines from the MacMETH module System in order to ensure correct functioning of heap management. Blocks not deallocated by the calling program will be deallocated automatically upon exiting the calling program level. This module belongs to the 'Dialog Machine'. Programming o Design Andreas Fischlin 22/11/1989 o Implementation Andreas Fischlin 22/11/1989 ETH Zurich Systems Ecology CHN E 35.1 Universitaetstrasse 16 8092 Zurich SWITZERLAND URLs: <mailto:RAMSES@env.ethz.ch> <http://www.sysecol.ethz.ch> <http://www.sysecol.ethz.ch/SimSoftware/RAMSES> Last revision of definition: 27/08/1990 AF *******************************************************************) FROM SYSTEM IMPORT ADDRESS; PROCEDURE Allocate(VAR p: ADDRESS; size: LONGINT); (* Allocates on the current Dialog Machine level a heap block of the given size and assigns the starting address to p. In case no more memory is available p becomes NIL. WARNING: No error message is issued, so test in the calling program always whether NIL has been assigned. *) PROCEDURE Deallocate(VAR p: ADDRESS); (* Deallocates on the current Dialog Machine level the memory block to which p points. The block must have been allocated by a previous and successful call to either one of the procedures Allocate or AllocateOnLevel from this module only. If the calling program does not call this routine before terminating, DMStorage does automatically release the occupied memory upon termination of the subprogram level on which the calling program resides. *) PROCEDURE AllocateOnLevel (VAR p: ADDRESS; size: LONGINT; level: INTEGER); (* Allocates on (sub)program level level a heap block of the given size and assigns the starting address to p. In case no more memory is available p becomes NIL. WARNING: No error message is issued, so test in the calling program always whether NIL has been assigned. *) PROCEDURE DeallocateOnLevel (VAR p: ADDRESS; level: INTEGER); (* Deallocates on (sub)program level level the heap block memory block to which p points. The block must have been allocated by a previous and successful call to either one of the procedures Allocate or AllocateOnLevel from this module only. If the calling program does not call this routine before terminating, DMStorage does automatically release the occupied memory upon termination of the subprogram level on which the calling program resides. *) (* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = The following two procedures are just exported for compatibility reasons with the IBM PC version of the Dialog Machine. They act exactly as the ones above, i.e. the second parameter in DEALLOCATE is ignored. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = *) PROCEDURE ALLOCATE (VAR p: ADDRESS; size: CARDINAL); PROCEDURE DEALLOCATE (VAR p: ADDRESS; size: CARDINAL); END DMStorage.
|
||
|
|
|