-- TexMemDefs.mesa

-- last written by Doug Wyatt,  December 13, 1979  6:04 PM

TexMemDefs: DEFINITIONS =
BEGIN

MemError: SIGNAL; -- runtime memory checking detected an error

ZonePtr: TYPE = PRIVATE POINTER TO RECORD[UNSPECIFIED];

-- allocation from primary memory
AllocMem: PROCEDURE[size: CARDINAL] RETURNS[POINTER];
FreeMem: PROCEDURE[p: POINTER, size: CARDINAL];
AllocString: PUBLIC PROCEDURE[len: CARDINAL] RETURNS[STRING];
FreeString: PUBLIC PROCEDURE[s: STRING];

-- dumb allocation from a transient zone
CreateZone: PROCEDURE[init,grow: CARDINAL] RETURNS[ZonePtr];
OpenZone: PROCEDURE[ZonePtr];
CloseZone: PROCEDURE[ZonePtr] RETURNS[BOOLEAN];
Alloc: PROCEDURE[zone: ZonePtr, size: CARDINAL] RETURNS[POINTER];
DestroyZone: PROCEDURE[ZonePtr];

-- allocating and freeing segments
AllocSeg: PROCEDURE[pages: CARDINAL, resident: BOOLEAN←FALSE]
	RETURNS[base: POINTER];
FreeSeg: PROCEDURE[base: POINTER];
PagesForWords: PROCEDURE[words: CARDINAL] RETURNS[pages: CARDINAL];
WordsForPages: PROCEDURE[pages: CARDINAL] RETURNS[words: CARDINAL];

PutHighSeg: PROCEDURE[POINTER] RETURNS[LONG POINTER];
GetHighSeg: PROCEDURE[POINTER, LONG POINTER];

TexMem: PROGRAM;

END.