-- Region.Mesa Edited by Sandman on June 30, 1980 5:01 PM
-- Copyright Xerox Corporation 1979, 1980
DIRECTORY
AllocDefs USING [SwappingProcedure],
SegmentDefs USING [AllocInfo, BankIndex, PageNumber, SegmentHandle];
Region: DEFINITIONS =
BEGIN OPEN SegmentDefs;
MaxRegionPage: CARDINAL = 377B;
PagesPerRegion: CARDINAL = MaxRegionPage + 1;
Page: TYPE = [0..MaxRegionPage];
Count: TYPE = [0..PagesPerRegion];
PageStatus: TYPE = {inuse, busy, free};
Index: TYPE = BankIndex;
Object: TYPE = RECORD [
basePage: CARDINAL,
alloc: PROCEDURE [
base: PageNumber, pages: Count, info: AllocInfo, anyWhere: BOOLEAN]
RETURNS [success: BOOLEAN, page: Page],
update: PROCEDURE [
base: Page, pages: Count, seg: SegmentHandle, simple: BOOLEAN],
available: PROCEDURE [page: Page, info: AllocInfo] RETURNS [BOOLEAN],
status: PROCEDURE [page: Page]
RETURNS [seg: SegmentHandle, status: PageStatus],
swap: AllocDefs.SwappingProcedure,
disable: PROCEDURE [abandon: BOOLEAN],
hole: Count];
Handle: TYPE = POINTER TO Region.Object;
Node: TYPE = POINTER TO NodeObject;
NodeObject: TYPE = RECORD [
base, pages: CARDINAL, fwd: Node, back: Node, seal: CARDINAL ← NodeSeal];
NodeSeal: CARDINAL = 111222B;
InvalidNode: ERROR [node: UNSPECIFIED];
HyperRegion: PROGRAM [region: Region.Index] RETURNS [Region.Handle];
END.....