DIRECTORY InputFocus USING [SetInputFocus], Menus USING [CreateEntry, AppendMenuEntry, MenuProc], Rope USING [Concat, Equal, Fetch, ROPE, Size, Substr], TiogaOps USING [GetSelection, GetRope], UserTerminal USING [BlinkDisplay], ViewerClasses USING [Viewer], ViewerEvents USING [EventProc, RegisterEventProc], ViewerOps USING [EnumProc, EnumerateViewers, PaintViewer], ViewerTools USING [GetSelectedViewer, GetSelectionContents, SetSelection]; ExecHacks: CEDAR PROGRAM IMPORTS InputFocus, Menus, Rope, TiogaOps, UserTerminal, ViewerEvents, ViewerOps, ViewerTools = BEGIN Compile: Menus.MenuProc = BEGIN exec: ViewerClasses.Viewer ~ NARROW[parent]; sel: Rope.ROPE _ ViewerTools.GetSelectionContents[]; IF sel = NIL THEN TRUSTED {UserTerminal.BlinkDisplay[]; RETURN}; IF Rope.Size[sel] <= 1 THEN BEGIN selViewer: ViewerClasses.Viewer _ ViewerTools.GetSelectedViewer[]; IF selViewer=exec THEN TRUSTED {UserTerminal.BlinkDisplay[]; RETURN}; sel _ selViewer.name; END; sel _ Rope.Concat["Compile ", sel]; sel _ Rope.Concat[sel, " "]; ViewerTools.SetSelection[exec, NIL]; exec.class.notify[exec, LIST[sel]]; END; Redo: Menus.MenuProc = BEGIN ScanAndStuff: PROC = BEGIN exec: ViewerClasses.Viewer ~ NARROW[parent]; rope: Rope.ROPE; start, end: INT; ViewerTools.SetSelection[exec, NIL]; rope _ TiogaOps.GetRope[TiogaOps.GetSelection[].end.node]; IF (start _ Rope.Size[rope]) < 6 THEN ERROR; start _ start - 4; --one to point to the last char, 2 to skip current %, 1 for prev CR WHILE Rope.Fetch[rope, start]#'% DO start _ start-1; ENDLOOP; end _ start _ start+2; WHILE Rope.Fetch[rope, end]#15C DO end _ end+1; ENDLOOP; rope _ Rope.Substr[rope, start, end-start+1]; exec.class.notify[exec, LIST[rope]]; END; ScanAndStuff[! ANY => TRUSTED {UserTerminal.BlinkDisplay[]; CONTINUE}]; END; Reset: Menus.MenuProc = BEGIN exec: ViewerClasses.Viewer ~ NARROW[parent]; InputFocus.SetInputFocus[NIL]; exec.class.set[exec, NIL, FALSE]; ViewerTools.SetSelection[exec, NIL]; exec.class.notify[exec, LIST["-- reset -- "]]; END; DoMenu: ViewerEvents.EventProc = BEGIN IF Rope.Equal[viewer.name, "Commander"] THEN BEGIN Menus.AppendMenuEntry[viewer.menu, Menus.CreateEntry[name:"Compile", proc:Compile, fork:FALSE]]; Menus.AppendMenuEntry[viewer.menu, Menus.CreateEntry[name:"Redo", proc:Redo, fork:FALSE]]; Menus.AppendMenuEntry[viewer.menu, Menus.CreateEntry[name:"Reset", proc:Reset, fork:FALSE, guarded: TRUE]]; ViewerOps.PaintViewer[viewer, menu]; END; END; AttachMenuItemsToExecs: PROC = BEGIN PerViewer: ViewerOps.EnumProc = BEGIN [] _ DoMenu[v, create, FALSE]; END; ViewerOps.EnumerateViewers[PerViewer]; END; [] _ ViewerEvents.RegisterEventProc[DoMenu, create, $Typescript, FALSE]; AttachMenuItemsToExecs[]; END. DExecHacks.mesa; Edited by McGregor on August 17, 1983 5:09 pm Ê3˜Jšœ=™=J˜šÏk ˜ Jšœ œ˜!Jšœœ*˜5Jšœœœ˜6Jšœ œ˜'Jšœ œ˜"Jšœœ ˜Jšœ œ ˜2Jšœ œ+˜:Jšœ œ9˜JJ˜—Jšœ œ˜J˜JšœY˜eJ˜šÏnœ˜Jšœœ ˜,Jšœ œ&˜4Jš œœœœœ˜@šœœ˜!JšœB˜BJšœœœœ˜EJšœ˜Jšœ˜—J˜#Jšœ˜Jšœœ˜$Jšœœ˜#Jšœ˜J˜—šžœ˜šž œœ˜Jšœœ ˜,Jšœ œ˜Jšœ œ˜Jšœœ˜$Jšœ:˜:Jšœœœ˜,JšœÏcC˜VJšœœœ˜=Jšœ˜Jšœœœ˜8Jšœ-˜-Jšœœ˜$Jšœ˜—Jšœœœœ˜GJšœ˜J˜—šžœ˜Jšœœ ˜,Jšœœ˜Jšœ œ˜!Jšœœ˜$Jšœœ˜.Jšœ˜J˜—šžœ˜&šœ&œ˜2JšœXœ˜`JšœRœ˜ZJšœTœ œ˜kJšœ$˜$Jšœ˜—Jšœ˜—J˜šžœœ˜$šœ ˜%Jšœœ˜Jšœ˜—Jšœ&˜&Jšœ˜—J˜JšœAœ˜HJšœ˜J˜Jšœ˜J˜—…— –