-- File: XFSP.mesa
-- Pilot version
-- Last Updated: 16-Jul-81
10:51:09

DIRECTORY
Space USING[Handle, Create, Map, LongPointer, virtualMemory],
XFSPDefs;

XFSP: PROGRAM
IMPORTS Space
EXPORTS XFSPDefs =
BEGIN

PagesPerBlock:
CARDINAL ← 32; --number of pages allocated at a time
PageSize: CARDINAL ← 2
56*PagesPerBlock; --words
Count: CARDINAL; --current position in block
CurrentSegmentPointer: LONG POINTER ← NIL; --current block address

XAllocateHeapNode: PUBLIC PROCEDURE[size: CARDINAL] RETURNS[ptr: LONG POINTER] =
BEGIN
IF CurrentSegmentPointer=NIL OR Count+size>PageSize THEN
BEGIN
h: Space.Handle;
IF size>PageSize THEN ERROR;
h ← Space.Create[size: PagesPerBlock,parent: Space.virtualMemory];
Space.Map[h];
CurrentSegmentPointer ← Space.LongPointer[h];
Count ← 0;
END;
ptr ← CurrentSegmentPointer + Count;
Count ← Count + size;
END;

END.