<> <> <> DIRECTORY Commander USING[CommandProc, Register], IO USING[CharClass, Close, EndOfStream, GetTokenRope, IDProc, RIS, STREAM], FS USING[StreamOpen], OneCasabaParser USING[GetReportStream], KipperCentralDef USING[ParseOneStream], KipperCodeGen USING[BuildFilesFromContext, PrintTypeNodeContext], KipperMain1Def USING[ModuleBodyNode, TypeContextNode], Rope USING[Cat, ROPE]; KipperDriver: CEDAR MONITOR IMPORTS Commander, FS, IO, KipperCentralDef, KipperCodeGen, OneCasabaParser, Rope = BEGIN OPEN Commander, IO, Rope; debugFlags: CARDINAL _ 0; printContext: BOOLEAN _ FALSE; TestKipper: CommandProc = BEGIN commandLineStream: STREAM _ RIS[cmd.commandLine]; errorFlag: BOOLEAN _ FALSE; rootName: ROPE; sourceStream: STREAM; root: KipperMain1Def.ModuleBodyNode; context: KipperMain1Def.TypeContextNode; rootName _ GetTokenRope[commandLineStream, IDProc ! EndOfStream => {rootName _ NIL; CONTINUE}].token; Close[commandLineStream]; sourceStream _ FS.StreamOpen[Rope.Cat[rootName, ".Kipper"]]; root _ NARROW[KipperCentralDef.ParseOneStream[sourceStream, debugFlags, cmd.out ! OneCasabaParser.GetReportStream => {errorFlag _ TRUE; RESUME[cmd.out]}]]; Close[sourceStream]; IF errorFlag THEN RETURN; context _ root.procs.FormContext[root]; IF printContext THEN KipperCodeGen.PrintTypeNodeContext[context, cmd.out]; KipperCodeGen.BuildFilesFromContext[context, cmd.out]; END; <
> Register["///Commands/Kipper", TestKipper]; END..