DIRECTORY Atom USING [MakeAtom], PutGet USING [ToFile], Rope USING [IsEmpty, ROPE], TextEdit USING [ChangeLooks, ChangeFormat, ChangeStyle, ReplaceByRope], TextLooks USING [Looks, noLooks], TextNode USING [LastChild, NewTextNode, Node, NodeRep, Root], TiogaFileOps; TiogaFileOpsImpl: CEDAR PROGRAM IMPORTS Atom, PutGet, Rope, TextEdit, TextNode EXPORTS TiogaFileOps = BEGIN OPEN TiogaFileOps; Node: TYPE = TextNode.Node; -- points to a Tioga node NodeBody: PUBLIC TYPE = TextNode.NodeRep; CreateRoot: PUBLIC PROC RETURNS [root: Node] = { root _ TextNode.NewTextNode[]; root.last _ TRUE }; InsertNode: PUBLIC PROC [x: Node, child: BOOL _ FALSE] RETURNS [new: Node] = { new _ TextNode.NewTextNode[]; IF child THEN { IF x.child # NIL THEN { new.next _ x.child; new.last _ FALSE } ELSE { new.next _ x; new.last _ TRUE }; x.child _ new } ELSE { new.next _ x.next; new.last _ x.last; x.next _ new; x.last _ FALSE }}; InsertAsLastChild: PUBLIC PROC [x: Node, prevLast: Node _ NIL] RETURNS [new: Node] = { IF prevLast=NIL OR ~prevLast.last OR prevLast.next # x THEN prevLast _ TextNode.LastChild[x]; new _ IF prevLast=NIL THEN InsertNode[x, TRUE] ELSE InsertNode[prevLast, FALSE] }; SetContents: PUBLIC PROC [x: Node, txt: Rope.ROPE] = { [] _ TextEdit.ReplaceByRope[TextNode.Root[x], x, txt]; }; AddLooks: PUBLIC PROC [x: Node, start, len: INT, look: CHAR ['a..'z], root: Node _ NIL] = { looks: TextLooks.Looks _ TextLooks.noLooks; looks[look] _ TRUE; IF root = NIL THEN root _ TextNode.Root[x]; TextEdit.ChangeLooks[root: root, node: x, remove: TextLooks.noLooks, add: looks, start: start, len: len]; }; SetFormat: PUBLIC PROC [x: Node, format: Rope.ROPE] = { name: ATOM _ IF format.IsEmpty THEN NIL ELSE Atom.MakeAtom[format]; TextEdit.ChangeFormat[x, name] }; SetStyle: PUBLIC PROC [x: Node, style: Rope.ROPE] = { TextEdit.ChangeStyle[x, style] }; Store: PUBLIC PROC [x: Node, filename: Rope.ROPE] = { [] _ PutGet.ToFile[filename, x] }; END. ΦTiogaFileOpsImpl.mesa Copyright Σ 1985, 1988 by Xerox Corporation. All rights reserved. written by Bill Paxton, June 1982 last written by Paxton. September 22, 1982 1:19 pm Last Edited by: Maxwell, January 6, 1983 11:48 am Rick Beach, March 28, 1985 10:02:14 am PST Michael Plass, March 27, 1985 5:06:37 pm PST Doug Wyatt, February 17, 1988 5:27:24 pm PST -- if ~child then new is sibling of x -- else new is first child of x -- prevLast is optional accelerator ΚΡ˜codešœ™KšœB™BKšœ!™!Kšœ2™2K™1K™*K™,K™,—K™šΟk ˜ Jšœœ ˜Jšœœ ˜Jšœœ œ˜Jšœ œ9˜GJšœ œ˜!Jšœ œ/˜=Jšœ ˜ —K˜KšΠblœ ˜Kšœ'˜.Kšœ ˜Kšœœœ˜˜KšœœΟc˜5Kšœ  œ˜)K˜šΟn œœœœ˜0K˜Kšœ œ˜K˜—š   œœœœœœ˜NKšŸ%™%KšŸ™K˜šœœ˜Kšœ œœ"œ˜>Kšœœ˜'K˜—Kšœ@œ˜MK˜—š  œœœœœ˜VKšŸ#™#š œ œœœ˜;Kšœ!˜!—Kš œœ œœœœœ˜RK˜—š  œœœœ˜6Kšœ6˜6Kšœ˜—K˜š  œœœœœœ˜[K˜+Kšœœ˜Kšœœœ˜+Kšœj˜jK˜K˜—š  œœœœ˜7Kš œœœœœœ˜CK˜!K˜—Kš œœœœ'˜WK˜Kš œœœœ(˜X—K˜Kšœ˜K˜—…—  G