<> <> <> DIRECTORY BasicTime, Commander, CommandTool, FS, IO, Rope, RoseBind, RoseBindPrivate, RoseTranslate, RoseTranslatePrivate; RoseTranslateImpl: CEDAR PROGRAM IMPORTS BasicTime, Commander, CommandTool, FS, IO, Rope, RoseBindPrivate, RoseTranslatePrivate EXPORTS RoseBind, RoseTranslate = BEGIN ROPE: TYPE = Rope.ROPE; BehaviorClassRec: PUBLIC TYPE = RoseBindPrivate.BehaviorClassRec; translatorTime: PUBLIC BasicTime.GMT _ BasicTime.Now[]; translatorVersion: PUBLIC ROPE _ GetFileLine["RoseTranslator.version"]; cmdBase: ROPE = "RoseTranslate"; installationDir: ROPE = CommandTool.CurrentWorkingDirectory[]; RoseTranslate: PROC [cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: Rope.ROPE _ NIL] --Commander.CommandProc-- = { commandLineStream: IO.STREAM _ IO.RIS[cmd.commandLine]; FOR i: INT _ commandLineStream.SkipWhitespace[], commandLineStream.SkipWhitespace[] WHILE NOT commandLineStream.EndOf[] DO moduleNameRoot: ROPE _ commandLineStream.GetTokenRope[IO.IDProc].token; moduleRoot: RoseBindPrivate.ModuleRoot _ RoseBindPrivate.EnsureModuleRoot[moduleNameRoot]; IF moduleRoot = NIL THEN { cmd.err.PutF["Module root %g not found!\n", [rope[moduleNameRoot]]]; RETURN [$Failure]; }; RoseTranslatePrivate.TranslateDefs[moduleRoot]; RoseTranslatePrivate.TranslatePrivates[moduleRoot]; ENDLOOP; result _ result; }; GetTranslateCommand: PUBLIC PROC [moduleNameRoot: ROPE] RETURNS [cmd: ROPE] = { cmd _ Rope.Cat[installationDir, cmdBase, " ", moduleNameRoot]; }; <> <> <> <<[] _ TEditMesaOps.SetSpanMesaLooks[>> <> <> <<];>> <<};>> GetFileLine: PROC [fileName: ROPE] RETURNS [line: ROPE] = { ENABLE FS.Error, IO.Error, IO.EndOfStream => {line _ "Error reading file"; CONTINUE}; from: IO.STREAM _ FS.StreamOpen[fileName]; [] _ from.SkipWhitespace[]; line _ from.GetLineRope[]; from.Close[]; }; Commander.Register[cmdBase, RoseTranslate, "Generates Rosemary definitions and implementation files"]; END.