-- SegOps.mesa Edited by: Sandman, July 10, 1980 7:37 AM -- Copyright Xerox Corporation 1979, 1980 DIRECTORY AltoDefs USING [PageCount, PageNumber], SegmentDefs USING [DefaultBase, DefaultPages, FileHandle, FileSegmentHandle], WartDefs USING [SegIndex]; SegOps: DEFINITIONS = BEGIN OPEN SegmentDefs, AltoDefs; DefaultBase: PageNumber = SegmentDefs.DefaultBase; DefaultPages: PageCount = SegmentDefs.DefaultPages; DefaultFile: FileHandle = NIL; Seg: TYPE = POINTER TO SegObject; SegObject: TYPE = RECORD [ realFile: FileHandle, resident, write, data, in: BOOLEAN, class: CodeClass ← other, inUse: BOOLEAN, base: CARDINAL, pages: PageCount, vmPage: CARDINAL, lockCount: CARDINAL, trueFile: FileHandle, imageBase: PageNumber, link: Seg, link2: FileSegmentHandle, index: WartDefs.SegIndex]; CodeClass: TYPE = {resident, in, other}; InvalidSeg: ERROR [s: POINTER]; NewSeg: PROCEDURE [ file: FileHandle, base: PageNumber, pages: PageCount, write: BOOLEAN ← FALSE] RETURNS [Seg]; DeleteSeg: PROCEDURE [segment: Seg]; TooManySegs: SIGNAL; InvalidSegSize: ERROR; NoVM: SIGNAL [needed: PageCount]; VMBusy: SIGNAL [base: PageNumber, pages: PageCount]; SwappingError: ERROR [segment: Seg]; SwapInSeg, UnlockSeg, SwapOutSeg: PROCEDURE [segment: Seg]; EnumerateSegs: PROCEDURE [proc: PROCEDURE [Seg] RETURNS [BOOLEAN]] RETURNS [Seg]; InitSegMachinery: PROCEDURE [PageNumber, PageNumber]; ffvmp, lfvmp: CARDINAL; vmFile: FileHandle; END.