DIRECTORY TEditDisplay USING [EstablishLine], TEditDocument USING [LineTable, Selection, SelectionRec, SpinAndLock, TEditDocumentData, Unlock], TEditOps USING [CopyLoadHistory, CopyPositionHistory], TEditSplit USING [], TextNode USING [Location, pZone], ViewerClasses USING [Viewer], ViewerOps USING [AddProp, ComputeColumn, CreateViewer, DestroyViewer, FetchProp, MoveBelowViewer, OpenIcon, PaintViewer, SetMenu]; TEditSplitImpl: CEDAR PROGRAM IMPORTS TEditDisplay, TEditDocument, TEditOps, TextNode, ViewerOps EXPORTS TEditSplit SHARES ViewerClasses = BEGIN Viewer: TYPE = ViewerClasses.Viewer; Split: PUBLIC PROC [old: Viewer] = BEGIN tddNew, tddOld: TEditDocument.TEditDocumentData; new: Viewer; paintCaption: BOOL _ FALSE; selectionHistory: TEditDocument.Selection; lines: TEditDocument.LineTable; loc: TextNode.Location; tddOld _ NARROW[old.data]; IF tddOld = NIL THEN RETURN; new _ ViewerOps.CreateViewer[flavor: old.class.flavor, info: [name: old.name, column: old.column, iconic: TRUE], paint: FALSE]; ViewerOps.OpenIcon[icon: new, paint: FALSE]; ViewerOps.MoveBelowViewer[altered: new, static: old, paint: FALSE]; tddNew _ NARROW[new.data]; IF tddNew = NIL THEN RETURN; -- How this could happen is beyond me, but paranoia is cheap. [McGregor] selectionHistory _ NARROW[ViewerOps.FetchProp[old, $SelectionHistory]]; new.link _ old; IF old.link=NIL THEN { old.link _ new; paintCaption _ TRUE } ELSE FOR v: Viewer _ old.link, v.link UNTIL v.link=old DO REPEAT FINISHED => v.link _ new; ENDLOOP; new.newVersion _ old.newVersion; new.newFile _ old.newFile; new.file _ old.file; ViewerOps.ComputeColumn[column: new.column, paint: FALSE]; -- to find new height [] _ TEditDocument.SpinAndLock[tddOld, "Split"]; -- must ComputeColumn before lock tdd tddNew.text _ tddOld.text; tddNew.tsInfo _ tddOld.tsInfo; tddNew.clipLevel _ tddOld.clipLevel; tddNew.commentFilter _ tddOld.commentFilter; ViewerOps.SetMenu[new, old.menu, FALSE]; IF selectionHistory # NIL THEN { -- copy it newSelectionHistory: TEditDocument.Selection _ TextNode.pZone.NEW[TEditDocument.SelectionRec]; newSelectionHistory^ _ selectionHistory^; ViewerOps.AddProp[new, $SelectionHistory, newSelectionHistory] }; TEditOps.CopyPositionHistory[from: old, to: new]; TEditOps.CopyLoadHistory[from: old, to: new]; lines _ tddOld.lineTable; loc _ lines[lines.lastLine].pos; -- in case loop doesn't find anything FOR n: INTEGER IN [0..lines.lastLine] DO -- find line that goes past new bottom IF lines[n].yOffset+lines[n].descent >= old.ch THEN { loc _ lines[n].pos; EXIT }; ENDLOOP; TEditDocument.Unlock[tddOld]; TEditDisplay.EstablishLine[tddNew, loc]; ViewerOps.ComputeColumn[column: new.column, paint: TRUE]; -- now do the painting FOR v: Viewer _ new.link, v.link UNTIL v=new DO IF v.iconic THEN { -- get rid of it -- ViewerOps.DestroyViewer[v]; EXIT }; IF paintCaption THEN ViewerOps.PaintViewer[v, caption]; -- turn on [Split] ENDLOOP; END; END. žTEditSplitImpl.mesa Edited by Paxton on June 2, 1983 9:00 am Edited by McGregor on August 27, 1982 2:38 pm Edited by Wyatt on December 15, 1983 6:50 pm ΚΩ˜šœ™Jšœ(™(Jšœ-™-Jšœ,™,—J˜šΟk ˜ Jšœ œ˜#JšœœN˜aJšœ œ(˜6Jšœ œ˜Jšœ œ˜!Jšœœ ˜šœ œA˜PJšœ1˜1J˜——šœ ˜Jšœ;˜BJšœ ˜Jšœ˜J˜—Jš˜J˜Jšœœ˜$J˜šΟnœœœ˜(J˜0J˜ Jšœœœ˜J˜*J˜J˜Jšœ œ ˜Jšœ œœœ˜˜MJšœœ œ˜1—Jšœ%œ˜,Jšœ<œ˜CJšœ œ ˜Jš œ œœœΟcH˜eJšœœ.˜GJ˜Jšœ œœ"œ˜<šœœœ ˜9Jšœœ˜ Jšœ˜—J˜ J˜J˜Jšœ3œŸ˜PJšœ1Ÿ%˜VJ˜J˜J˜$J˜,Jšœ!œ˜(šœœœŸ ˜+˜.Jšœœ˜/—J˜)J˜A—J˜1J˜-J˜Jšœ!Ÿ%˜Fš œœœœŸ&˜Ošœ-œ˜5Jšœœ˜—Jšœ˜—J˜J˜(Jšœ3œŸ˜Pšœœ˜/Jšœ œŸœ œ˜JJšœœ$Ÿ˜JJšœ˜—Jšœ˜J˜—Jšœ˜J˜—…— hί