-- file Core.mesa -- Last edited by Brotz, November 20, 1981 2:39 PM. DIRECTORY AltoFileDefs USING [FP], VMDefs USING [FileHandle]; Core: DEFINITIONS = BEGIN -- Core is a remnant of the once mighty Laurel CoreDefs. It now provides a thin veneer -- over the VM package to make it suitable for use in Laurel. The major functions -- provided by this interface are: -- (1) To give a uniform way to open files on the local disk or on remote servers. -- The file name format is: [Site]SimpleName.Extension -- (2) To guard against opening files illegally, both those files that should never be touched -- by a client (such as DiskDescriptor, Laurel.run, etc.) and those files that are currently -- open by the client. -- Core provides a file name cache, which contains the names of all currently open files, the -- names of files that must not be opened under any circumstances, and if room permits -- (up to the cache limits), a mapping of file name to Alto FP for certain commonly used -- files that are not currently open. -- Exported variable -- localCacheHead: CacheHeader; -- Procedures -- Login: PROCEDURE [user: DMSUser]; -- Notifies the Core of the new name, registry and password to be used on subsequent -- Open's. Open: PROC [filename: STRING, mode: OpenMode] RETURNS [handle: VMDefs.FileHandle]; -- Opens "filename" in "mode", and returns a handle to the opened file. -- ERRORS: -- VMDefs.CantOpen (notFound, alreadyExists, accessDenied, illegalFileName) -- VMDefs.Error (io, resources, credentials) [io = unrecoverable disk error or communications -- failure for remote files, resources = disk full or directory limit on remote server, -- credentials = credentials presented at Login were not sufficient to permit this Open]. Close: PROCEDURE [handle: VMDefs.FileHandle]; -- Closes the file associated with "handle". "handle" must not be re-used by the caller. Delete: PROCEDURE [handle: VMDefs.FileHandle]; -- Deletes the file associated with "handle". "handle" must not be re-used by the caller. InsertInFileCache: PROC [name: STRING, fp: AltoFileDefs.FP, open: BOOLEAN _ TRUE] RETURNS [entry: LocalCacheEntry]; -- Inserts "name" and "fp" in the Alto file name cache. -- To protect a file from being opened, "open" should be TRUE. In this case, subsequent -- Open's on this file will fail with VMDefs.Error[alreadyExists]. -- Possible uses of this procedure are to provide faster Open's and to protect critical files as -- described above. LookupInFileCache: PROCEDURE [name: STRING] RETURNS [fp: AltoFileDefs.FP]; -- Returns the FP associated with the name (or NullFP if no such file). FreeCacheEntry: PROCEDURE [name: STRING]; -- Removes the cache entry for "name" from the local file cache (if it existed). -- May call SysBug if that file is marked open. -- Data Structures and Types. DMSUserBlk: TYPE = RECORD [name: STRING, registry: STRING, password: STRING]; DMSUser: TYPE = POINTER TO DMSUserBlk; OpenMode: TYPE = {read, update}; -- read: Read only; the file must exist -- update: Read + Write + Append; if the file exists then the old version is referenced, -- otherwise, a new file is created. CacheHeaderBlk: TYPE = RECORD [server: STRING, firstEntry: CacheEntry, lastEntry: CacheEntry, next: CacheHeader, prev: CacheHeader]; CacheHeader: TYPE = POINTER TO CacheHeaderBlk; CacheEntryBlk: TYPE = RECORD [next: CacheEntry, prev: CacheEntry, name: STRING, handle: VMDefs.FileHandle, open: BOOLEAN, vp: SELECT location: Location FROM local => [fp: AltoFileDefs.FP], remote => [loginEpoch: CARDINAL], ENDCASE]; CacheEntry: TYPE = POINTER TO CacheEntryBlk; LocalCacheEntry: TYPE = POINTER TO local CacheEntryBlk; RemoteCacheEntry: TYPE = POINTER TO remote CacheEntryBlk; Location: TYPE = {local, remote}; END. -- of Core --z20461(529)\f1