DIRECTORY Commander USING [CommandProc, Register], EditToolBuilder USING [HRule, LayoutRec, ToMiddle, ToNext, VGap], EditToolPrivate USING [BuildExtraButtons, BuildFileListEntries, BuildGetAndSetOpsEntries, BuildInitCapEntry, BuildLooksButtons, BuildMiniPatternDocEntry, BuildOperationEntry, BuildOperationField, BuildPropertyButtons, BuildSearchButtons, BuildSortButtons, BuildSourceEntry, BuildStyleButtons, BuildSubstituteEntry, BuildTargetEntry, BuildFormatButtons, DoCountMenuButton, DoItMenuButton, DoNoMenuButton, DoSearchMenuButton, DoSubstituteMenuButton, DoYesMenuButton, Info, InfoRec], Menus USING [AppendMenuEntry, CreateEntry, CreateMenu, Menu, MenuProc], Rope USING [ROPE], TEditInput USING [CommandProc, Interpret, Register, UnRegister], UndoEvent USING [Ref], ViewerClasses USING [Viewer], ViewerEvents USING [EventProc, RegisterEventProc], ViewerOps USING [CreateViewer, FindViewer, OpenIcon, SetOpenHeight]; EditToolTopImpl: CEDAR PROGRAM IMPORTS Commander, EditToolBuilder, EditToolPrivate, Menus, TEditInput, ViewerEvents, ViewerOps EXPORTS EditToolPrivate = { OPEN EditToolBuilder, EditToolPrivate; Event: TYPE = UndoEvent.Ref; BuildContainer: PROC [info: Info, name: Rope.ROPE] = { OPEN info; viewer: ViewerClasses.Viewer; editToolMenu: Menus.Menu _ Menus.CreateMenu[]; Menus.AppendMenuEntry[editToolMenu, Menus.CreateEntry["Stop", Stop]]; Menus.AppendMenuEntry[editToolMenu, Menus.CreateEntry[name: "Search", proc: DoSearchMenuButton, fork: TRUE]]; Menus.AppendMenuEntry[editToolMenu, Menus.CreateEntry[name: "Substitute", proc: DoSubstituteMenuButton, fork: TRUE]]; Menus.AppendMenuEntry[editToolMenu, Menus.CreateEntry["Yes", DoYesMenuButton]]; Menus.AppendMenuEntry[editToolMenu, Menus.CreateEntry["No", DoNoMenuButton]]; Menus.AppendMenuEntry[editToolMenu, Menus.CreateEntry["Replace", DoItMenuButton]]; Menus.AppendMenuEntry[editToolMenu, Menus.CreateEntry[name: "Count", proc: DoCountMenuButton, fork: TRUE]]; layout.container _ viewer _ ViewerOps.CreateViewer[flavor: $Container, info: [name: name, iconic: TRUE, column: right, menu: editToolMenu, icon: LOOPHOLE[5]], paint: TRUE]; editTool _ viewer; -- save in global variable }; editTool: PUBLIC ViewerClasses.Viewer; MyDestroy: ViewerEvents.EventProc = { IF viewer#editTool THEN RETURN; -- filter mainToolInfo _ NIL; editTool _ NIL; UnRegister[]; }; Stop: Menus.MenuProc = { mainToolInfo.interrupt^ _ TRUE; }; ChangeState: PUBLIC PROC [flag: BOOL, trueList, falseList: LIST OF REF] = { DoButton[IF ~flag THEN trueList ELSE falseList] }; CycleTriple: PUBLIC PROC [state: [0..2], list0, list1, list2: LIST OF REF] = { nextState: ARRAY [0..2] OF [0..2] = [1,2,0]; nextLIST: ARRAY [0..2] OF LIST OF REF = [list0, list1, list2]; DoButton[nextLIST[nextState[state]]] }; DoButton: PUBLIC PROC [ redList, blueList: LIST OF REF _ NIL, redButton: BOOL _ FALSE, viewer: ViewerClasses.Viewer _ NIL] = { IF viewer=NIL THEN viewer _ mainToolInfo.targetArg; -- must be a text viewer IF ~redButton AND blueList#NIL THEN TEditInput.Interpret[viewer,blueList] ELSE TEditInput.Interpret[viewer,redList] }; registered: LIST OF RegCom; RegCom: TYPE = RECORD [atom: ATOM, op: TEditInput.CommandProc]; Register: PUBLIC PROC [atom: ATOM, op: TEditInput.CommandProc] RETURNS [LIST OF REF] = { TEditInput.Register[atom, op]; registered _ CONS[[atom, op], registered]; RETURN [LIST[atom]] }; ReRegister: PROC = { FOR r: LIST OF RegCom _ registered, r.rest UNTIL r=NIL DO TEditInput.Register[r.first.atom, r.first.op]; ENDLOOP }; UnRegister: PROC = { FOR r: LIST OF RegCom _ registered, r.rest UNTIL r=NIL DO TEditInput.UnRegister[r.first.atom, r.first.op]; ENDLOOP }; mainToolInfo: PUBLIC Info; firstTime: BOOL _ TRUE; InitToolCommand: Commander.CommandProc = { name: Rope.ROPE _ "EditTool"; viewer: ViewerClasses.Viewer _ ViewerOps.FindViewer[name]; mainEditTool: BOOL _ viewer = NIL; info: Info _ NEW[InfoRec]; info.layout _ NEW[LayoutRec]; IF ~mainEditTool THEN { IF viewer.iconic THEN ViewerOps.OpenIcon[viewer]; RETURN [NIL, "Opened existing Edit Tool."] }; IF firstTime THEN firstTime _ FALSE ELSE ReRegister[]; {OPEN info; interrupt _ NEW[BOOL _ FALSE]; layout.entryLeft _ layout.initLeft _ 0; layout.entryVSpace _ 3; layout.heightSoFar _ layout.initHeight _ 1; BuildContainer[info,name]; -- build enclosing viewer BuildTargetEntry[info]; -- the "target:" field BuildSourceEntry[info]; -- the "replacement:" field heights[0] _ layout.heightSoFar+layout.entryVSpace; layout.heightSoFar _ layout.heightSoFar+2; BuildSearchButtons[info]; -- the various choices for seaching ToNext[layout]; BuildInitCapEntry[info]; -- Capitalize like first replaced char or not ToMiddle[layout]; BuildOperationEntry[info]; -- Do Replace / Do Operations Specified Below ToNext[layout]; BuildSubstituteEntry[info]; -- the within/after/entire choice ToNext[layout]; BuildMiniPatternDocEntry[info]; heights[1] _ layout.heightSoFar+layout.entryVSpace+1; HRule[layout]; BuildLooksButtons[info]; -- caret/selection looks, Looks:, Get, Set, etc. ToNext[layout]; HRule[layout]; BuildFormatButtons[info]; -- format names ToNext[layout]; HRule[layout]; BuildStyleButtons[info]; -- style names ToNext[layout]; heights[2] _ layout.heightSoFar+layout.entryVSpace+1; HRule[layout]; BuildPropertyButtons[info]; -- property values HRule[layout]; BuildSortButtons[info]; -- Sort increasing/decreasing; sort text/lines/branches; Sort ToNext[layout]; HRule[layout]; BuildOperationField[info]; -- the "Operations:" field VGap[layout]; BuildGetAndSetOpsEntries[info]; -- "GetLast" "SetCom" "GetCom" etc. VGap[layout]; BuildFileListEntries[info]; -- the "Files:" field and the DoForEachFile command VGap[layout]; heights[3] _ layout.heightSoFar+layout.entryVSpace+1; HRule[layout]; BuildExtraButtons[info]; -- the low level edit commands HRule[layout]; currentHeightIndex _ 0; ViewerOps.SetOpenHeight[layout.container, heights[currentHeightIndex]]; }; mainToolInfo _ info; RETURN [NIL, "Created new Edit Tool."]; }; Commander.Register["EditTool", InitToolCommand, "Create a Tioga Edit Tool"]; [] _ InitToolCommand[NIL]; [] _ ViewerEvents.RegisterEventProc[MyDestroy, destroy]; }. .. VEditToolTopImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Plass, March 15, 1985 2:01:34 pm PST Doug Wyatt, April 6, 1985 2:16:54 pm PST Russ Atkinson (RRA) June 18, 1985 5:08:56 pm PDT -------------------------- -------------------------- -------------------------- -------------------------- -- Initialization [cmd: Handle] RETURNS [result: REF _ NIL, msg: Rope.ROPE _ NIL] an EditTool already exists, so flush the command -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- -------------------------- --BuildPatternDocEntry[info];-- -- explaining special chars for patterns -------------------------- ΚO˜codešœ™Kšœ Οmœ1™K˜'K˜—Kšœ™K˜šŸœžœžœ˜Kš œžœžœžœžœ˜%Kšœ žœžœ˜Kšœžœ˜'Kšžœžœžœ" ˜LKšžœ žœ žœžœ&˜IKšžœ(˜,K˜—Kšœ™K˜Kšœ žœžœ˜Kšœžœžœžœ˜?K˜šŸœžœžœžœžœžœžœžœ˜XK˜Kšœ žœ˜*Kšžœžœ ˜K˜—šŸ œžœ˜š žœžœžœžœžœž˜9K˜.Kšžœ˜ K˜——šŸ œžœ˜š žœžœžœžœžœž˜9K˜0Kšžœ˜ K˜——Kšœ™K˜Kšœžœ˜Kšœ žœžœ˜K˜šœ*˜*Kšœ?™?Kšœ žœ˜K˜:Kšœžœ žœ˜"Kšœ žœ ˜Kšœžœ ˜K˜šžœžœ˜Kšœ0™0Kšžœžœ˜1Kšžœžœ˜*Kšœ˜—Kšžœ žœ žœžœ˜6K˜šœžœ˜ Kšœ žœžœžœ˜K˜'K˜K˜+Kšœ™Kšœ ˜4Kšœ™Kšœ ˜.Kšœ ˜3K˜3K˜*Kšœ™Kšœ #˜=K˜Kšœ -˜FK˜Kšœ -˜HK˜Kšœ !˜=K˜K˜K˜5K˜Kšœ™Kšœ 0˜IK˜Kšœ™Kšœ ˜)K˜Kšœ™Kšœ ˜'K˜K˜5K˜Kšœ™Kšœ ˜.K˜Kšœ™Kšœ =˜UK˜Kšœ™Kšœ ˜5K˜ Kšœ  #˜CK˜ Kšœ 3˜OK˜ K˜5K˜Kšœ™Kšœ ˜7K˜Kšœ™KšœH™HKšœ™K˜K˜GK˜—K˜K˜Kšžœžœ˜'˜K˜——˜LK˜—Kšœžœ˜K˜Kšœ8˜8K˜Kšœ˜K˜K˜K˜—…—φ!›