DIRECTORY ThreeC4Support USING[GetReportStream], ThreeC4BaseDecl1Def USING[NameNode], ThreeC4BaseDecl2Def USING[ContextNode], ThreeC4BasicAbTypesDef USING[FindParseTree, WholeFileNode], ThreeC4PrimImplDefs USING[GetNameIds, RecordParseTree, IsErrorName, UnrecoveredError, GlobalEnvHandle, GetGlobalEnv], ThreeC4CentralDef USING[ParseOneStream], FS USING[StreamOpen], IO USING[Close, PutF, rope, STREAM], Rope USING[Cat, ROPE]; ThreeC4PrimImpl5: CEDAR PROGRAM IMPORTS ThreeC4Support, ThreeC4BasicAbTypesDef, ThreeC4PrimImplDefs, ThreeC4CentralDef, FS, IO, Rope EXPORTS ThreeC4BasicAbTypesDef, ThreeC4PrimImplDefs = BEGIN OPEN ThreeC4BaseDecl1Def, ThreeC4BaseDecl2Def, ThreeC4BasicAbTypesDef, ThreeC4PrimImplDefs; sourceFNSuffix: Rope.ROPE _ NIL; -- normal running state = ".7Casaba" targetFNPrefix: Rope.ROPE _ NIL; -- normal running state = "" SetMode: PUBLIC PROC[targetFilesNamePrefix: Rope.ROPE, sourceFilesNameSuffix: Rope.ROPE] = {sourceFNSuffix _ sourceFilesNameSuffix; targetFNPrefix _ targetFilesNamePrefix}; ReadModeInfo: PUBLIC PROC RETURNS[targetFilesNamePrefix: Rope.ROPE, sourceFilesNameSuffix: Rope.ROPE] = {RETURN[targetFNPrefix, sourceFNSuffix]}; ClearMode: PUBLIC PROC = {sourceFNSuffix _ targetFNPrefix _ NIL}; -- parse call ReadAndParseFile: PUBLIC PROC[name: Rope.ROPE] RETURNS[WholeFileNode] = BEGIN sourceStream: IO.STREAM _ FS.StreamOpen[Rope.Cat[name, sourceFNSuffix]]; root: REF ANY _ ThreeC4CentralDef.ParseOneStream[sourceStream, 0, NIL]; IO.Close[sourceStream]; RETURN[NARROW[root]]; END; FindOrReadAndParseTree: PUBLIC PROC[context: ContextNode, name: NameNode] RETURNS[ContextNode, WholeFileNode] = BEGIN tree: WholeFileNode; IF IsErrorName[name] THEN ERROR UnrecoveredError; tree _ FindParseTree[context, name]; IF tree = NIL THEN -- we have to read and parse it BEGIN tree _ ReadAndParseFile[GetNameIds[name].id1.text]; context _ RecordParseTree[context, name, tree]; END; RETURN[context, tree]; END; -- some error handling stuff ReportError: PUBLIC PROC[msg: Rope.ROPE] = BEGIN globalEnv: GlobalEnvHandle; IO.PutF[ThreeC4Support.GetReportStream[], "\N(%g..%g): %g\N", IO.rope[msg]]; globalEnv _ GetGlobalEnv[]; globalEnv.errorCount _ globalEnv.errorCount + 1; END; END.. †ThreeC4PrimImpl5.mesa: August 22, 1985 1:07:51 pm PDT Sturgis, May 9, 1986 3:50:39 pm PDT Shoup, June 17, 1986 1:16:24 pm PDT Κo˜Jšœ5™5šœ#™#Icode™#—J˜šΟk ˜ Jšœ&˜&Jšœ$˜$Jšœ'˜'Jšœœ˜;Jšœu˜uJšœ(˜(Jšœ˜J˜%J˜J˜—J˜š œœœœ^œ/˜»JšœœW˜aJ˜JšœE˜EJšœ=˜=J˜J˜Jšœ¬˜¬J˜Jšœ‘˜‘J˜JšœA˜AJ˜J˜ J˜˜GJ˜Jšœœ,˜HJšœG˜GJ˜J˜J˜—J˜˜oJ˜J˜J˜J˜1J˜J˜$˜2J˜J˜3J˜/J˜—J˜J˜—J˜J˜J˜˜*J˜J˜J˜J˜MJ˜J˜J˜0J˜J˜—J™Jšœ˜JšΟb˜——…—΄ ©