DIRECTORY Commander USING [CommandProc, Handle, Register], FS USING [Error], GetTree USING [ReadIndent], InterFile USING [ToFile], IO USING [EndOfStream, GetRefAny, PutRope, RIS, STREAM], List USING [Nconc1], ProcessExtras USING [CheckForAbort], PutGet USING [FromFile, ToFile, WriteFilePlain, WriteMesaFilePlain], Rope USING [Concat, Fetch, Find, ROPE, Size], TEditDocument USING [Selection], TEditInput USING [FreeTree, Interpret, ReadTipTables], TEditMesaOps USING [SetSpanMesaLooks], TEditOps USING [GetSelData], TEditProfile USING [GetToken], TEditSelection USING [LockSel, UnlockSel], TextNode USING [LastWithin, MakeNodeSpan, Ref]; TiogaExecCommands: CEDAR PROGRAM IMPORTS FS, Commander, GetTree, IO, InterFile, List, ProcessExtras, PutGet, Rope, TEditMesaOps, TEditInput, TEditOps, TEditProfile, TEditSelection, TextNode = BEGIN TiogaMesaLooks: Commander.CommandProc = { DoTiogaMesa[cmd, FALSE, TRUE]; }; TiogaMesa: Commander.CommandProc = { DoTiogaMesa[cmd, TRUE, TRUE]; }; ReadIndent: Commander.CommandProc = { DoTiogaMesa[cmd, TRUE, FALSE]; }; Get: PROC [name: Rope.ROPE, log: IO.STREAM, tree: BOOL _ FALSE] RETURNS [root: TextNode.Ref, filename: Rope.ROPE] = { failed: BOOL _ FALSE; filename _ name; { ENABLE FS.Error => { IF ~failed AND Rope.Find[filename,"."] = -1 THEN { -- add .mesa extension filename _ Rope.Concat[filename,".mesa"]; failed _ TRUE; RETRY }; log.PutRope[filename]; log.PutRope[" not found.\n"]; GOTO Quit }; root _ IF tree THEN GetTree.ReadIndent[filename, tabIndent] ELSE PutGet.FromFile[filename]; }; EXITS Quit => RETURN [NIL, NIL]}; tabIndent: NAT _ 8; DoTiogaMesa: PROC [cmd: Commander.Handle, tree, mesaLooks: BOOL] = { Writer: DoWriteProc = { IF mesaLooks THEN [] _ TEditMesaOps.SetSpanMesaLooks[ TextNode.MakeNodeSpan[root,TextNode.LastWithin[root]],NIL]; [] _ PutGet.ToFile[filename, root] }; tabIndent _ 8; Dudley[Writer, cmd, tree]; }; ReadTiogaTipTables: Commander.CommandProc = { TEditInput.ReadTipTables[]; }; WriteMesaPlain: Commander.CommandProc = { Writer: DoWriteProc = { PutGet.WriteMesaFilePlain[filename, root] }; Dudley[Writer, cmd]; }; WritePlain: Commander.CommandProc = { Writer: DoWriteProc = { PutGet.WriteFilePlain[filename, root] }; Dudley[Writer, cmd]; }; WriteInterFile: Commander.CommandProc = { Writer: DoWriteProc = { [] _ InterFile.ToFile[filename, root] }; Dudley[Writer, cmd]; }; DoWriteProc: TYPE = PROC [filename: Rope.ROPE, root: TextNode.Ref]; Dudley: PROC [writer: DoWriteProc, cmd: Commander.Handle, tree: BOOL _ FALSE] = { offset: INT _ 0; out: IO.STREAM _ cmd.out; DO root: TextNode.Ref; filename: Rope.ROPE; [filename,offset] _ TEditProfile.GetToken[cmd.commandLine, offset]; IF Rope.Size[filename]=0 THEN EXIT; IF Rope.Size[filename]=1 AND Rope.Fetch[filename,0] IN ['1..'9] THEN { tabIndent _ LOOPHOLE[Rope.Fetch[filename,0]-'1]; LOOP }; [root, filename] _ Get[filename, out, tree]; IF root=NIL THEN LOOP; IO.PutRope[out, " "]; IO.PutRope[out, filename]; IO.PutRope[out, " "]; ProcessExtras.CheckForAbort[]; writer[filename, root]; TEditInput.FreeTree[root]; IO.PutRope[out, "\n"]; ENDLOOP; }; DoTiogaOps: Commander.CommandProc = { pSel: TEditDocument.Selection _ TEditOps.GetSelData[]; rope: Rope.ROPE _ cmd.commandLine; h: IO.STREAM _ IO.RIS[rope]; item: REF ANY; list: LIST OF REF ANY; DO item _ IO.GetRefAny[h ! IO.EndOfStream => { item _ NIL; CONTINUE}]; IF item = NIL THEN EXIT; list _ List.Nconc1[list, item]; ENDLOOP; TEditSelection.LockSel[primary, "DoTiogaOps"]; -- IF pSel.viewer # NIL THEN -- TEditInput.Interpret[pSel.viewer, list]; TEditSelection.UnlockSel[primary]; }; Commander.Register["TiogaMesa", TiogaMesa, "Convert Mesa files to Tioga tree format. Number in line gives spaces/tab -- must be in [1..9]; default is 8"]; Commander.Register["ReadTiogaTipTables", ReadTiogaTipTables, "Have Tioga read its TIP tables again."]; Commander.Register["ReadIndent", ReadIndent, "Convert to tree structure based on indenting."]; Commander.Register["WritePlain", WritePlain, "Convert Tioga file to unformatted file."]; Commander.Register["WriteMesaPlain", WriteMesaPlain, "Convert Tioga file to unformatted file.\n\tRestores dashes before comments if necessary."]; Commander.Register["WriteInterFile", WriteInterFile, "Convert Tioga file to pseudo InterScript format."]; Commander.Register["DoTiogaOps", DoTiogaOps, "Like EditTool Do Operations command."]; END. úTiogaExecCommands.mesa Paxton, October 26, 1982 10:12 am Maxwell, January 14, 1983 8:46 am Plass, April 20, 1983 9:26 am Russ Atkinson, September 29, 1983 11:17 am Doug Wyatt, February 9, 1984 5:51:57 pm PST [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] process each file in command line [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] ÊV˜šÏc™Jš!™!J™!J™J™*J™+J™—šÏk ˜ Jšœ žœ!˜0Jšžœžœ ˜Jšœžœ˜Jšœ žœ ˜Jšžœžœ#žœžœ˜8Jšœžœ ˜Jšœžœ˜$Jšœžœ8˜DJšœžœžœ˜-Jšœžœ ˜ Jšœ žœ&˜6Jšœ žœ˜&Jšœ žœ˜Jšœ žœ ˜Jšœžœ˜*Jšœ žœ!˜/J˜—J˜Jšœž ˜ Jšžœžœžœz˜œJšœž˜J˜šœ)˜)Jšœ?™?Jšœžœžœ˜Jšœ˜J˜—šœ$˜$Jšœ?™?Jšœžœžœ˜Jšœ˜J˜—šœ%˜%Jšœ?™?Jšœžœžœ˜Jšœ˜J˜—šÏnœžœ žœžœžœžœžœ˜?Jšžœ%žœ˜5Jšœžœžœ˜J˜šžœžœ ˜šžœ žœžœ˜JJ˜)Jšœ žœ˜Jšžœ˜—Jšœ˜Jšœ˜Jšžœ˜ —Jšœžœžœ)žœ˜[J˜Jšžœ žœžœžœ˜!J˜—Jšœ žœ˜J˜šŸ œžœ*žœ˜D˜šžœ žœ$˜5Jšœ6žœ˜;—J˜%—J˜Jšœ˜Jšœ˜J˜—šœ-˜-Jšœ?™?Jšœ˜Jšœ˜J˜—šœ)˜)Jšœ?™?J˜DJ˜J˜J˜—šœ%˜%Jšœ?™?J˜@J˜J˜J˜—šœ)˜)Jšœ?™?J˜@J˜J˜J˜—JšŸ œžœžœžœ˜CJ˜šŸœžœ4žœžœ˜QJšœžœ˜Jšœžœžœ ˜šž˜Jšœ!™!J˜Jšœžœ˜JšœC˜CJšžœžœžœ˜#šžœžœžœ žœ˜FJšœ žœ˜0Jšž˜Jšœ˜—Jšœ,˜,Jšžœžœžœžœ˜Jšžœ˜Jšžœ˜Jšžœ˜Jšœ˜Jšœ˜J˜Jšžœ˜Jšžœ˜—Jšœ˜J˜—šœ%˜%Jšœ?™?Jšœ6˜6Jšœ žœ˜"Jš œžœžœžœžœ˜Jšœžœžœ˜Jš œžœžœžœžœ˜šž˜Jš œžœžœžœžœ˜CJšžœžœžœžœ˜J˜Jšžœ˜—J˜.Jšœ)˜HJšœ"˜"Jšœ˜—J˜šœT˜TJšœE˜E—J˜šœf˜fJ˜—Jšœ^˜^J˜JšœX˜XJ˜Jšœ‘˜‘J˜Jšœi˜iJ˜JšœU˜UJ˜Jšžœ˜J˜J˜—…—l