<> <> <> <> <> DIRECTORY Intime USING [EventTime, MsTicks]; ClassInscript: DEFINITIONS = BEGIN <> Inscript: TYPE ~ REF InscriptObject; InscriptObject: TYPE; AccessMethod: TYPE = {read, readNext, writeNew}; OrderKey: TYPE = RECORD [a, b, c: WORD]; COmProc: TYPE = PROC [a, b: OrderKey] RETURNS [aLessB: BOOL]; KEyProc: TYPE = PROC [inscript: Inscript, descriptor: InscriptPageDescriptor] RETURNS [OrderKey]; LengthProcType: TYPE = PROC [p: LONG POINTER TO UNSPECIFIED] RETURNS [wordsToAdvance: CARDINAL]; WaitMode: TYPE = {forever, dontWait, timed}; InscriptPageNumber: TYPE = INTEGER; InscriptPageDescriptor: TYPE = LONG POINTER TO InscriptPageDescBody; InscriptPageDescBody: TYPE[4]; -- <> NewStdInscript: PROC [KeyProc: KEyProc, ComProc: COmProc, initializeFile: BOOL _ FALSE, lnFileSize: CARDINAL _ 4, lnGroupSize: CARDINAL _ 2 ] RETURNS [Inscript]; Release: PROC [self: Inscript] RETURNS [nilInscript: Inscript]; <> GetPageLimits: PROC [self: Inscript] RETURNS [earliestPageNo: InscriptPageNumber, latestPageNo: InscriptPageNumber]; ResetPageDescriptor: PROC [self: Inscript, descriptor: InscriptPageDescriptor]; <> CopyPageDescriptor: PROC [self: Inscript, dest: InscriptPageDescriptor, source: InscriptPageDescriptor]; SetPage: PROC [self: Inscript, descriptor: InscriptPageDescriptor, pageNumber: InscriptPageNumber, init: BOOL _ FALSE] RETURNS [success: BOOL]; <> <> <> AdvancePage: PROC [self: Inscript, descriptor: InscriptPageDescriptor] RETURNS [success: BOOL]; <> SetWritePage: PROC [self: Inscript] RETURNS [success: BOOL]; <> <<>> ReadEntry: PROC [self: Inscript, descriptor: InscriptPageDescriptor, destination: LONG POINTER, LengthProc: LengthProcType] RETURNS [success: BOOL]; <> WriteEntry: PROC [self: Inscript, entry: LONG DESCRIPTOR FOR ARRAY OF WORD] RETURNS [success: BOOL]; <> waitALongTime: Intime.MsTicks = 5000; WaitForEntry: PROC [self: Inscript, waitMode: WaitMode, waitInterval: Intime.MsTicks _ waitALongTime, descriptor: InscriptPageDescriptor, waitStartTime: LONG POINTER TO Intime.EventTime _ NIL ] RETURNS [moreEntries: BOOL]; InscriptError: -- Abstraction --ERROR [code: InscriptErrorCode]; InscriptErrorCode: TYPE = { entryOutOfBounds, -- trying to position out of bounds or old stuff has disappeared invalidInscriptSpecs, -- bad arguments to NewStd... invalidInscriptFile, -- while opening old inscript file descriptorUninitialized, -- in AdvancePage invalidPageKey -- in KeyProc during intitialization }; END.