DIRECTORY FS USING [StreamOpen], IO USING [EndOf, EndOfStream, GetTokenRope, STREAM], Rope USING [ROPE, Substr], ExpertKeepRead, SymTab USING [Create, Fetch, Insert, Ref]; ExpertKeepReadImpl: CEDAR PROGRAM IMPORTS FS, IO, Rope, SymTab EXPORTS ExpertKeepRead ~ BEGIN ROPE: TYPE = Rope.ROPE; RefDesTable: TYPE = ExpertKeepRead.RefDesTable; ReadKeepFile: PUBLIC PROC [file: ROPE] RETURNS [refDesTable: RefDesTable] ~ { refDes: Rope.ROPE; in: IO.STREAM _ FS.StreamOpen[file]; refDesTable _ SymTab.Create[]; WHILE NOT IO.EndOf[in] DO refDes _ IO.GetTokenRope[in ! IO.EndOfStream => CONTINUE].token; [] _ SymTab.Insert[refDesTable, refDes, refDes]; ENDLOOP; }; KeepRefDes: PUBLIC PROC [refDesTable: RefDesTable, refDes: Rope.ROPE] RETURNS [found: BOOLEAN] ~ { found _ SymTab.Fetch[refDesTable, refDes].found; IF NOT found THEN { refDes _ Rope.Substr[refDes, 0, 1]; found _ SymTab.Fetch[refDesTable, refDes].found; }; }; END. ΊExpertKeepReadImpl.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Christophe Cuenod, February 1, 1988 4:03:54 pm PST Reads a .keep file Public Procedures ΚΫ˜code•Mark outsideHeaderšœ™Kšœ<™