DIRECTORY Ascii USING [Lower], Commander USING [CommandProc, Register], CommandTool USING [ArgumentVector, Failed, Parse], FS USING [Error, StreamOpen], IO USING [Close, EndOf, GetChar, GetIndex, PeekChar, PutChar, PutRope, SetIndex, STREAM], MT USING [Direction, Info, ParseHeaders, PrintHeaders, TranslateMessage, TranslateToArpa, TranslateToGrapevine], Process USING [CheckForAbort], Rope USING [Fetch, Length, ROPE]; MTDriver: CEDAR PROGRAM IMPORTS Ascii, Commander, CommandTool, FS, IO, MT, Process, Rope = BEGIN Translate: Commander.CommandProc = { argv: CommandTool.ArgumentVector = CommandTool.Parse[cmd ! CommandTool.Failed => {cmd.out.PutRope[errorMsg]; GOTO GoAway}]; direction: MT.Direction _ toArpa; FOR i: NAT IN [1..argv.argc) DO IF argv[i].Fetch[0] = '- THEN SELECT Ascii.Lower[argv[i].Fetch[1]] FROM 'a => direction _ toArpa; 'g => direction _ toGrapevine; ENDCASE ELSE BEGIN file: IO.STREAM _ FS.StreamOpen[argv[i] ! FS.Error => {cmd.out.PutRope[error.explanation]; LOOP}]; MT.TranslateMessage[file, cmd.out, cmd.out, direction, "Foo"]; file.Close[]; END; ENDLOOP; EXITS GoAway => NULL }; Headers: Commander.CommandProc = { argv: CommandTool.ArgumentVector = CommandTool.Parse[cmd ! CommandTool.Failed => {cmd.out.PutRope[errorMsg]; GOTO GoAway}]; FOR i: NAT IN [1..argv.argc) DO file: IO.STREAM _ FS.StreamOpen[argv[i] ! FS.Error => {cmd.out.PutRope[error.explanation]; LOOP}]; info: MT.Info _ MT.ParseHeaders[file, cmd.out]; file.Close[]; cmd.out.PutRope["Raw: \n"]; MT.PrintHeaders[info, cmd.out]; cmd.out.PutRope["Arpa: \n"]; MT.TranslateToArpa[info]; MT.PrintHeaders[info, cmd.out]; cmd.out.PutRope["GV: \n"]; MT.TranslateToGrapevine[info]; MT.PrintHeaders[info, cmd.out]; file.Close[]; ENDLOOP; EXITS GoAway => NULL }; TestMT: Commander.CommandProc = { argv: CommandTool.ArgumentVector = CommandTool.Parse[cmd ! CommandTool.Failed => {cmd.out.PutRope[errorMsg]; GOTO GoAway}]; file: IO.STREAM _ FS.StreamOpen[argv[1] ! FS.Error => {cmd.out.PutRope[error.explanation]; GOTO GoAway}]; pos1, pos2: INT; direction: MT.Direction _ toGrapevine; Find: PROC [in: IO.STREAM, what: Rope.ROPE] RETURNS [found: BOOL] = { i, pos: INT; found _ FALSE; DO IF in.EndOf THEN EXIT; IF in.PeekChar[] = what.Fetch[] THEN { pos _ file.GetIndex[]; FOR i IN [0..what.Length[]) DO IF file.GetChar[] # what.Fetch[i] THEN GO TO NotFound; REPEAT NotFound => NULL; FINISHED => RETURN [TRUE]; ENDLOOP; file.SetIndex[pos]; }; [] _ file.GetChar[]; ENDLOOP; }; PutRange: PROC [in, out: IO.STREAM, pos1, pos2: INT] = { i: INT; in.SetIndex[pos1]; FOR i IN [pos1..pos2) DO out.PutChar[in.GetChar[]]; ENDLOOP; }; WHILE Find[file, "*start*\n"] DO info: MT.Info; pos1 _ file.GetIndex[]; info _ MT.ParseHeaders[file, cmd.out]; pos2 _ file.GetIndex[]; MT.TranslateToGrapevine[info]; cmd.out.PutRope["**Original header:**\n"]; PutRange[file, cmd.out, pos1, pos2]; cmd.out.PutChar['\n]; [] _ Find[file, "*translation*\n"]; pos1 _ file.GetIndex[]; [] _ Find[file, "\n\n"]; pos2 _ file.GetIndex[]; cmd.out.PutRope["-- Maxc translation --\n"]; PutRange[file, cmd.out, pos1, pos2]; cmd.out.PutRope["-- MT translation --\n"]; MT.PrintHeaders[info, cmd.out, FALSE]; cmd.out.PutChar['\n]; Process.CheckForAbort[]; ENDLOOP; EXITS GoAway => NULL }; Commander.Register["Headers", Headers, "Show Header Parsing."]; Commander.Register["Translate", Translate, "Translate a message to or from arpa format."]; Commander.Register["TestMT", TestMT, "Run a test on a file of translations."]; END. ΚMTDriver.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Hal Murray May 27, 1985 8:03:30 pm PDT Last Edited by: HGM, February 8, 1985 3:52:11 am PST Last Edited by: Nichols, July 18, 1983 3:44 pm Last Edited by: Taft, February 5, 1984 2:26:50 pm PST Take a file that contains a message and do the translation. Syntax is "translate -a file" or "translate -g file". Parse a file that contains a message show all forms of the headers. ΚJ˜headšœ ™ Icodešœ Οmœ1™<™&Jšœ4™4Jšœ.™.Jšœ5™5—code2šΟk ˜ Mšœžœ ˜Mšœ žœ˜(Mšœ žœ!˜2Mšœžœ˜MšœžœIžœ˜YMšœžœh˜pMšœžœ˜Mšœžœžœ˜!——šΟnœžœž˜Mšžœ9˜@Mšœž˜šŸ œ˜$M™ršœ:˜:Mšœ2žœ ˜@—šœ!˜!M˜—šžœžœžœž˜šžœž˜šžœž˜)M˜M˜Mšž˜——šž ˜ šœ žœ˜)Mšœ1žœ˜8—Mšžœ<˜>M˜ Mšžœ˜—Mšžœ˜—šž˜Mšœ žœ˜—M˜—šŸœ˜"M™Cšœ:˜:Mšœ2žœ ˜@M˜—šžœžœžœž˜šœ žœ˜)Mšœ1žœ˜8—Mšœ/˜/M˜ Mšœ˜Mšœ˜Mšœ˜Mšžœ˜Mšœ˜Mšœ˜Mšžœ˜Mšœ˜M˜ Mšžœ˜—šž˜Mšœ žœ˜—M˜—šŸœ˜!šœ:˜:Mšœ2žœ ˜@—šœ žœ˜)Mšœ1žœ ˜?—Mšœ žœ˜Mšœ žœ˜&M˜š Ÿœžœ žœ žœžœ žœ˜EMšœžœ˜ Mšœžœ˜šž˜Mšžœ žœžœ˜šžœžœ˜&M˜šžœžœž˜šžœ ž˜&Mšžœžœ ˜—šž˜Mšœ žœ˜Mšžœžœžœ˜—Mšžœ˜—M˜M˜—M˜Mšžœ˜ —M˜—š Ÿœžœ žœžœžœ˜8Mšœžœ˜M˜šžœžœž˜Mšœ˜Mšžœ˜ —M˜—šžœž˜ M˜M˜MšΠklžœ˜&M˜Mšžœ˜M˜*Mšœ$˜$M˜M˜#M˜M˜M˜M˜,M˜$M˜*Mšžœžœ˜&M˜M˜Mšžœ˜—šž˜Mšœ žœ˜——Mšœ?˜?MšœZ˜ZMšœN˜NMšžœ˜——…— Œ