<> <> <> <> <> <> <> <> <> DIRECTORY AlpineEnvironment, AlpTransaction USING [Handle], DBCommon, DBFile, DBFileAlpine, Rope; DBFileImpl: CEDAR PROGRAM IMPORTS DBFileAlpine, Rope EXPORTS DBFile = BEGIN ROPE: TYPE = Rope.ROPE; OpenFileHandle: TYPE = DBCommon.OpenFileHandle; AlpTrans: TYPE = AlpTransaction.Handle; SegmentIndex: TYPE = DBCommon.SegmentIndex; VersionOptions: TYPE = DBCommon.VersionOptions; DBPage: TYPE = DBCommon.DBPage; NullDBPage: DBPage = DBCommon.NullDBPage; PagesFromBytes: PUBLIC PROC [bytes: INT] RETURNS [pages: CARDINAL] = { IF bytes < 0 OR bytes > LONG[CARDINAL.LAST - 1]*DBCommon.BytesPerPage THEN ERROR; RETURN [(bytes+DBCommon.BytesPerPage-1)/DBCommon.BytesPerPage]; }; BytesFromPages: PUBLIC PROC [pages: CARDINAL] RETURNS [bytes: INT] = { RETURN [pages*DBCommon.BytesPerPage]; }; CreateTransaction: PUBLIC PROC [server: ROPE] RETURNS [t: AlpTrans] = { RETURN [NARROW[DBFileAlpine.CreateTransaction[server], AlpTrans]] }; FinishTransaction: PUBLIC PROC [t: AlpTrans, abort: BOOL, continue: BOOL] = { DBFileAlpine.FinishTransaction[t, abort, continue]; }; OpenFile: PUBLIC PROC [t: AlpTrans, file: ROPE, version: VersionOptions, discardFileContents: BOOL, nPagesInitial: INT, lock: AlpineEnvironment.LockOption, readOnly: BOOL] RETURNS [f: OpenFileHandle, createdFile: BOOL] = { flatFile: Rope.Text = Rope.Flatten[file]; [f, createdFile] _ DBFileAlpine.OpenFile[t, flatFile, version, discardFileContents, nPagesInitial, lock, readOnly]; }; Close: PUBLIC PROC [f: OpenFileHandle] ~ { DBFileAlpine.Close[f] }; ReadFilePage: PUBLIC PROC [ f: OpenFileHandle, p: CARDINAL, corePage: LONG POINTER] = { DBFileAlpine.ReadFilePage[NARROW[f], p, corePage]; }; WriteFilePage: PUBLIC PROC [ f: OpenFileHandle, p: CARDINAL, corePage: LONG POINTER] = { DBFileAlpine.WriteFilePage[NARROW[f], p, corePage]; }; GetSize: PUBLIC PROC [f: OpenFileHandle] RETURNS [nPages: CARDINAL] = { RETURN[DBFileAlpine.GetSize[NARROW[f]]]; }; SetSize: PUBLIC PROC [f: OpenFileHandle, nPages: CARDINAL] = { DBFileAlpine.SetSize[NARROW[f], nPages]; }; END.