-- AccessControlFile.mesa -- Last edited by -- Kolling on May 27, 1983 4:22 pm DIRECTORY AccessControlPrivate USING[PntrDataRec, PntrHeaderRec, RecNumber], AlpineEnvironment USING[LockMode, OpenFileID, OwnerName, PageCount, PageRun, ReferencePattern, TransID, UniversalFile]; AccessControlFile: CEDAR DEFINITIONS = BEGIN RecNumber: TYPE = AccessControlPrivate.RecNumber; -- we really own the def of this, but it has to live in AccessControlPrivate to avoid circularity. FirstDataRecNum: RecNumber; PagesPerRec: CARDINAL; WordsPerRec: CARDINAL; LockConflict: ERROR [lockItem: LockItem]; -- signalled by various read routines. LockItem: TYPE = RECORD[ mode: AlpineEnvironment.LockMode, whatToLock: SELECT what: {file, pageRun} FROM file => [transID: AlpineEnvironment.TransID, universalFile: AlpineEnvironment.UniversalFile, refPattern: AlpineEnvironment.ReferencePattern], pageRun => [openFileID: AlpineEnvironment.OpenFileID, pageRun: AlpineEnvironment.PageRun], ENDCASE]; --- read the header record. ReadHeaderRec: PROCEDURE[ownerOpenFileID: AlpineEnvironment.OpenFileID, recLockMode: AlpineEnvironment.LockMode, pntrHeaderRec: AccessControlPrivate.PntrHeaderRec]; -- non system-fatal errors: ACF.LockConflict, AC.Unknown[openFileID, transID]. -- read an owner record, given an owner name. ReadDataRec: PROCEDURE[ownerOpenFileID: AlpineEnvironment.OpenFileID, ownerName: AlpineEnvironment.OwnerName, desiredState: WantOwnerOrEmpty, recLockMode: AlpineEnvironment.LockMode, pntrDataRec: AccessControlPrivate.PntrDataRec, lastDataRecNum: RecNumber] RETURNS [dataRecNum: RecNumber, reclaimedRec: BOOLEAN]; -- non system-fatal errors: ACF.LockConflict, AC.OperationFailed[duplicateOwner, ownerDatabaseFull], AC.StaticallyInvalid (badLengthName), AC.Unknown[openFileID, owner, transID]. WantOwnerOrEmpty: TYPE = {wantEmpty, wantOwner}; -- read an owner record, given a logical record number. -- (Used at phase one (write mode) and enumeration (read mode).) ReadDataRecViaRecNum: PROCEDURE[ownerOpenFileID: AlpineEnvironment.OpenFileID, dataRecNum: RecNumber, recLockMode: AlpineEnvironment.LockMode, pntrDataRec: AccessControlPrivate.PntrDataRec, lastDataRecNum: RecNumber]; -- non system-fatal errors: OutOfRecNumRange, ACF.LockConflict, AC.Unknown[openFileID, transID]. OutOfRecNumRange: ERROR; -- unlock a data record. UnlockDataRecViaRecNum: PROCEDURE[ownerOpenFileID: AlpineEnvironment.OpenFileID, dataRecNum: RecNumber, lastDataRecNum: RecNumber]; -- non system-fatal errors: non system-fatal errors: OutOfRecNumRange, AC.Unknown[openFileID, transID]. -- lock a file or a page run. LockFileOrPageRun: PROCEDURE[lockItem: LockItem]; -- non system-fatal errors: AC.LockFailed[timeout], AC.Unknown[transID]. -- write the header record. WriteHeaderRec: PROCEDURE[ownerOpenFileID: AlpineEnvironment.OpenFileID, pntrHeaderRec: AccessControlPrivate.PntrHeaderRec]; -- non system-fatal errors: AC.Unknown[openFileID, transID]. -- write an owner record. WriteDataRec: PROCEDURE[ownerOpenFileID: AlpineEnvironment.OpenFileID, dataRecNum: RecNumber, pntrDataRec: AccessControlPrivate.PntrDataRec]; -- non system-fatal errors: AC.Unknown[openFileID, transID]. -- given a logical record number, return the "next" logical record number. GetNextDataRecNumber: PROCEDURE[prevDataRecNum, lastDataRecNum: RecNumber, whatToDo: StopOrWrap, wrapDataRecNumber: RecNumber] RETURNS [nextDataRecNum: RecNumber]; -- non system-fatal errors: non system-fatal errors: ACF.Stopped, ACF.Wrapped. StopOrWrap: TYPE = {stopOnEof, wrapOnEof}; Stopped: ERROR; Wrapped: ERROR; -- for use only by the "heavies" like InitAndRegisterVolumeGroup or ReorganizeVolumeGroup; not needed by normal routines. ComputeLastDataRecNumberFromFileLength: PROCEDURE [length: AlpineEnvironment.PageCount] RETURNS [lastDataRecNum: RecNumber]; -- non system-fatal errors: none. LengthToSetOwnerFile: PROCEDURE[totalEntries: CARDINAL] RETURNS [length: AlpineEnvironment.PageCount]; -- non system-fatal errors: none. StartAccessControlFile: PROCEDURE; END. Edit Log Initial: Kolling: 29-Oct-81 13:21:18: defs file private to AccessControl; interface to the owner files.