DIRECTORY Core USING [CellType], CoreDirectory, Rope USING [ROPE, FromRefText], SymTab; CoreDirectoryImpl: CEDAR PROGRAM IMPORTS SymTab, Rope EXPORTS CoreDirectory = BEGIN OPEN CoreDirectory; libraries: SymTab.Ref ~ SymTab.Create[case: TRUE]; RegisterLibrary: PUBLIC PROC [library: Library, name: ROPE] RETURNS [sameLibrary: Library] = { sameLibrary _ library; [] _ SymTab.Store[x: libraries, key: name, val: sameLibrary]; }; ForgetLibrary: PUBLIC PROC [name: ROPE] = { [] _ SymTab.Delete[libraries, name]; }; FetchLibrary: PUBLIC PROC [name: ROPE] RETURNS [library: Library] = { library _ NARROW [SymTab.Fetch[libraries, name].val]; }; LibraryNotFound: PUBLIC SIGNAL [name: ROPE] = CODE; CreateLibrary: PUBLIC PROC [] RETURNS [library: Library] = { library _ SymTab.Create[case: TRUE]; }; GetLib: PROC [library: REF] RETURNS [lib: Library _ NIL] = INLINE { WITH library SELECT FROM lb: Library => RETURN [lb]; r: ROPE => { WITH SymTab.Fetch[libraries, r].val SELECT FROM lb: Library => RETURN [lb]; ENDCASE => SIGNAL LibraryNotFound[r]; }; rt: REF TEXT => WITH SymTab.Fetch[libraries, Rope.FromRefText[rt]].val SELECT FROM lb: Library => RETURN [lb]; ENDCASE => SIGNAL LibraryNotFound[Rope.FromRefText[rt]]; ENDCASE => IF library=NIL THEN SIGNAL LibraryNotFound[NIL] ELSE ERROR; }; Fetch: PUBLIC PROC [library: REF, key: ROPE] RETURNS [ct: CellType _ NIL] = { lib: Library ~ GetLib[library]; IF lib#NIL THEN ct _ NARROW [SymTab.Fetch[lib, key].val]; }; Insert: PUBLIC PROC [library: Library, key: ROPE, ct: CellType, overWrite: BOOL _ FALSE] RETURNS [first: BOOL _ FALSE] = { IF library=NIL THEN ERROR; IF overWrite THEN { IF ct#NIL THEN first _ SymTab.Store[library, key, ct] ELSE first _ SymTab.Delete[library, key] } ELSE IF ct#NIL THEN first _ SymTab.Insert[library, key, ct] }; END. CoreDirectoryImpl.mesa Copyright Σ 1986, 1987 by Xerox Corporation. All rights reversed. Created by Christian Jacobi, July 14, 1986 9:50:03 am PDT Last Edited by: Jacobi July 15, 1986 9:53:01 am PDT Bertrand Serlet June 4, 1987 12:37:51 pm PDT Mike Spreitzer February 27, 1987 2:52:13 pm PST Global variable The global name space of library names Access by primitives Access with sugared version Internal proc to converts Library union ROPE to Library Either returns good Library or SIGNALS and returns NIL ΚY– "cedar" style˜codešœ™KšœB™BKšœ9™9K™3K™,K™/—K™šΟk ˜ Kšœœ ˜Kšœ˜Kšœœœ˜Kšœ˜—K˜šΠbnœœ˜ Kšœ ˜Kšœ˜—Kšœœ˜head™šœ,œ˜2Kšœ&™&——šœ™š Οnœœœœœ˜^Kšœ˜Kšœ=˜=Kšœ˜K˜—šŸ œ œœ˜+Kšœ$˜$K˜K™—šŸ œ œœœ˜EJšœ œ%˜5Kšœ˜——šœ™š œœœœœ˜4K˜—šŸ œœœœ˜