<> <> <> <> <> <> DIRECTORY RPC USING [maxShortStringLength]; AlpineInternal: DEFINITIONS = BEGIN <> FileHandle: TYPE = REF FileObject; -- base type of FileMap.Handle FileObject: TYPE; FileInstanceHandle: TYPE = REF FileInstanceObject; -- base type of FileInstance.Handle FileInstanceObject: TYPE; OpenFileHandle: TYPE = REF OpenFileObject; -- base type of OpenFileMap.Handle OpenFileObject: TYPE; <> LeaderPageHandle: TYPE = REF LeaderPageObject; LeaderPageObject: TYPE; <> FPMFileHandle: TYPE = REF FPMFileObject; -- base type of FilePageMgr.FPMFileHandle FPMFileObject: TYPE; <> LockID: TYPE = RECORD [entity: UniversalID, subEntity: ID2, subSubEntity: LockSubID]; UniversalID: TYPE [5]; -- can be compressed someday by implementing a separate map ID2: TYPE [2]; -- large enough to hold file ID within volume LockSubID: TYPE [3]; -- large enough to hold [tag, page number within file] nullLockIDRep: ARRAY [0..SIZE[LockID]) OF WORD = [0,0,0,0,0,0,0,0,0,0]; nullLockID: LockID = LOOPHOLE[nullLockIDRep]; LockTransHeaderHandle: TYPE = REF LockTransHeaderObject; LockTransHeaderObject: TYPE; <> LogRecordID: TYPE = MACHINE DEPENDENT RECORD [ lowBits: LONG CARDINAL, highBits: CARDINAL ]; nullLogRecordID, firstRecordID: LogRecordID = [0, 0]; lastRecordID: LogRecordID = [lowBits: LAST[LONG CARDINAL], highBits: LAST[CARDINAL]]; LogRecordType: TYPE = MACHINE DEPENDENT { <> --ControlRecord-- noop (0), checkpointBegin, checkpointComplete, coordinatorBegin (10), coordinatorRegisterWorker, coordinatorCollecting, coordinatorCompleting, coordinatorComplete, workerBegin (30), workerReady, workerCompleting, workerComplete, --FileRecord-- writePages (100), writeLeaderPage, setSize, create, delete, lock, --Reserved-- reserved (200), (LAST[INTEGER]) }; -- s/b LAST[CARDINAL] but for compiler bug ControlRecord: TYPE = LogRecordType [noop..writePages); FileRecord: TYPE = LogRecordType [writePages..reserved); StrBody: TYPE = MACHINE DEPENDENT RECORD [ length: CARDINAL _ 0, maxLength: CARDINAL _ StrMaxLength, text: PACKED ARRAY [0..StrMaxLength) OF CHAR _ TRASH]; StrMaxLength: CARDINAL = 64; -- If I could write StringBody[StrMaxLength], or even TEXT[StrMaxLength], I would! AssertStrMaxLengthOK: BOOL [TRUE ..TRUE] = StrMaxLength >= RPC.maxShortStringLength; <> LogMapHandle: TYPE = REF LogMapObject; -- base type of LogMap.Handle LogMapObject: TYPE; <> TransHandle: TYPE = REF TransObject; -- Base type of TransactionMap.Handle TransObject: TYPE; WorkerOutcome: TYPE = {abort, readOnly, commit}; Difficulty: TYPE = {zero, normal, hard}; WorkLevel: TYPE = Difficulty [normal .. hard]; TransState: TYPE = {committed, aborted, ready}; CoordinatorHandle: TYPE = REF CoordinatorObject; CoordinatorObject: TYPE; END.