From 7175669633ed0efea9567ff34464c53264c586ff Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Mon, 20 Sep 2021 07:36:01 -0700 Subject: [PATCH] TEDITWINDOW: Ensure TOTOPW in tedit buttoneventfn and scrollfn #492 --- library/TEDITWINDOW | 738 ++++++++++++++++++++------------------- library/TEDITWINDOW.LCOM | Bin 56621 -> 56527 bytes 2 files changed, 371 insertions(+), 367 deletions(-) diff --git a/library/TEDITWINDOW b/library/TEDITWINDOW index 0892f601..ae1a86b5 100644 --- a/library/TEDITWINDOW +++ b/library/TEDITWINDOW @@ -1,11 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "24-Aug-2021 23:30:39"  -{DSK}kaplan>Local>medley3.5>git-medley>library>TEDITWINDOW.;3 185251 +(FILECREATED "19-Sep-2021 23:11:04"  +{DSK}kaplan>Local>medley3.5>git-medley>library>TEDITWINDOW.;10 186372 - changes to%: (FNS \TEDIT.BUTTONEVENTFN TEXTSTREAM.TITLE \TEDIT.ORIGINAL.WINDOW.TITLE) + changes to%: (FNS \TEDIT.SCROLLFN) - previous date%: "21-Jun-99 20:00:42" -{DSK}kaplan>Local>medley3.5>git-medley>library>TEDITWINDOW.;1) + previous date%: "19-Sep-2021 22:58:18" +{DSK}kaplan>Local>medley3.5>git-medley>library>TEDITWINDOW.;9) (* ; " @@ -29,29 +29,29 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat \TEDIT.UNSPLITCURSOR \TEDIT.MAKESPLITCURSOR) (INITVARS (TEDIT.DEFAULT.WINDOW NIL)) (GLOBALVARS TEDIT.DEFAULT.WINDOW) - (COMS (* ; - "User-level %"is this a TEdit window?%" function.") + (COMS (* ; + "User-level %"is this a TEdit window?%" function.") (FNS TEDITWINDOWP)) - (COMS (* ; "User-typein support") + (COMS (* ; "User-typein support") (FNS TEDIT.GETINPUT \TEDIT.MAKEFILENAME)) - (COMS (* ; "Attached Prompt window support.") + (COMS (* ; "Attached Prompt window support.") (FNS TEDIT.PROMPTPRINT TEDIT.PROMPTFLASH \TEDIT.PROMPT.PAGEFULLFN) (INITVARS (TEDIT.PROMPT.FONT (FONTCREATE 'GACHA 10)) (TEDIT.PROMPTWINDOW.HEIGHT NIL)) (GLOBALVARS TEDIT.PROMPT.FONT TEDIT.PROMPTWINDOW.HEIGHT)) - (COMS (* ; "Title creation and update") + (COMS (* ; "Title creation and update") (FNS TEXTSTREAM.TITLE \TEDIT.ORIGINAL.WINDOW.TITLE \TEDIT.WINDOW.TITLE \TEXTSTREAM.FILENAME)) - (COMS (* ; "Screen updating utilities") + (COMS (* ; "Screen updating utilities") (FNS TEDIT.DEACTIVATE.WINDOW \TEDIT.REPAINTFN \TEDIT.RESHAPEFN \TEDIT.SCROLLFN)) - (COMS (* ; "Process-world interfaces") + (COMS (* ; "Process-world interfaces") (FNS \TEDIT.PROCIDLEFN \TEDIT.PROCENTRYFN \TEDIT.PROCEXITFN)) (COMS (INITVARS (\CARETRATE 333)) - (* ; - "Caret handler; stolen from CHAT.") + (* ; + "Caret handler; stolen from CHAT.") (FNS \EDIT.DOWNCARET \EDIT.FLIPCARET TEDIT.FLASHCARET \EDIT.UPCARET TEDIT.NORMALIZECARET \SETCARET \TEDIT.CARET)) - [COMS (* ; "Menu interfacing") + [COMS (* ; "Menu interfacing") (FNS TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENUFN TEDIT.REMOVE.MENUITEM \TEDIT.CREATEMENU \TEDIT.MENU.WHENHELDFN \TEDIT.MENU.WHENSELECTEDFN) (GLOBALVARS TEDIT.DEFAULT.MENU) @@ -79,21 +79,21 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat '(TEdit '(TEDIT) "Opens a TEdit window for use."] (SETQ BackgroundMenu NIL] - (COMS (* ; "titled icon info") + (COMS (* ; "titled icon info") (FILES ICONW) (BITMAPS TEDITICON TEDITMASK) (INITVARS (TEDIT.ICON.FONT (FONTCREATE 'HELVETICA 8 'BOLD)) [TEDIT.ICON.TITLE.REGION (CONS 16 (CONS 4 (CONS 64 (CONS 77 NIL] - (* ; - "Original was (create REGION BOTTOM _ 4 LEFT _ 16 WIDTH _ 64 HEIGHT _ 77).") - (* ; - "Changed by yabu.fx, for SUNLOADUP without DWIM.") + (* ; + "Original was (create REGION BOTTOM _ 4 LEFT _ 16 WIDTH _ 64 HEIGHT _ 77).") + (* ; + "Changed by yabu.fx, for SUNLOADUP without DWIM.") [TEDIT.TITLED.ICON.TEMPLATE (CONS TEDITICON (CONS TEDITMASK (CONS TEDIT.ICON.TITLE.REGION NIL] - (* ; "Original was (create TITLEDICON ICON _ TEDITICON MASK _ TEDITMASK TITLEREG _ TEDIT.ICON.TITLE.REGION).") - (* ; - "Changed by yabu.fx, for SUNLOADUP without DWIM.") + (* ; "Original was (create TITLEDICON ICON _ TEDITICON MASK _ TEDITMASK TITLEREG _ TEDIT.ICON.TITLE.REGION).") + (* ; + "Changed by yabu.fx, for SUNLOADUP without DWIM.") ]) (FILESLOAD TEDITDCL) @@ -454,342 +454,345 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat (PROCESSP (WINDOWPROP W 'PROCESS]) (\TEDIT.BUTTONEVENTFN - [LAMBDA (W STREAM) (* ; "Edited 24-Aug-2021 23:30 by rmk:") + [LAMBDA (W STREAM) (* ; "Edited 19-Sep-2021 22:58 by rmk:") - (* ;; "Handle button events for a TEdit window") + (* ;; "Handle button events for a TEdit window. If no button is down, we got control on button-up transition, so ignore it.") - (AND STREAM (SETQ STREAM (TEXTOBJ STREAM))) - (PROG* ((OSEL NIL) - (SEL NIL) - [TEXTOBJ (OR STREAM (WINDOWPROP W 'TEXTOBJ] - (DS (WINDOWPROP W 'DSP)) - USERFN - (GLOBALSEL TEDIT.SELECTION) - (X (LASTMOUSEX W)) - (Y (LASTMOUSEY W)) - (CLIPREGION (DSPCLIPPINGREGION NIL W)) - (SELOPERATION 'NORMAL) - (SELFN (TEXTPROP TEXTOBJ 'SELFN)) - (EXTENDFLG NIL) - (OLDX -32000) - (OLDY -32000) - SELFINALFN PROC NOSEL) - (COND - ((NOT (MOUSESTATE (OR LEFT MIDDLE RIGHT))) (* ; - "No button is down -- we got control on button-up transition, so ignore it.") - (RETURN)) - (TEDIT.SELPENDING (* ; - "There is already a selection in progress. Don't allow another to interfere.") - (RETURN))) - (replace (SELECTION CH#) of TEDIT.SCRATCHSELECTION with 0) - (* ; - "Mark the user-visible scratch selection fresh, so changes can be detected...") - (COND - [[OR (NOT TEXTOBJ) - (fetch (TEXTOBJ EDITFINISHEDFLG) of TEXTOBJ) - (AND (NOT (WINDOWPROP W 'PROCESS)) - (NOT (TEXTPROP TEXTOBJ 'READONLY)) - (NOT (SHIFTDOWNP 'SHIFT)) - (NOT (SHIFTDOWNP 'CTRL)) - (NOT (SHIFTDOWNP 'META)) - (NOT (KEYDOWNP 'MOVE)) - (NOT (KEYDOWNP 'COPY] (* ; "There's no edit session behind this window. You can only do window ops, or re-establish a session.") - (TOTOPW W) - (COND - ((\TEDIT.MOUSESTATE RIGHT) (* ; - "Right button gets the window command menu") - (DOWINDOWCOM W)) - ((AND TEXTOBJ (NOT (TEXTPROP TEXTOBJ 'READONLY)) - (NOT (TEXTPROP TEXTOBJ 'SELECTONLY)) - [NOT (PROCESSP (WINDOWPROP W 'PROCESS] - (\TEDIT.MOUSESTATE MIDDLE)) (* ; - "Middle button on a dead window gives a menu for re-starting TEDIT") - (COND - ((EQ (MENU TEDIT.RESTART.MENU) - 'NewEditProcess) - (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with NIL) - (TEDIT (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ) - W] - [(IGREATERP Y (fetch TOP of CLIPREGION)) - (* ; - "It's not inside the window's REAL region, so call on a menu.") - (TOTOPW W) + (TOTOPW W) - (* ;; "RMK: This comment was originally just after the DON'T below, which generated a value-of-comment used message.") + (* ;; "RMK: 2021/9 TOTOPW was in (almost) all the conditional branches, I moved it up so that it always happens, even if the click is perhaps in a menu. There were cases where a second click in the window was needed to bring it above an overlapping window that it was under. I think perhaps it was because the mouse button may not have been seen as down on the first click, so it would return before it raised the window. But that was really bizarre--maybe the click was to see what was obscured by the overlapping window.") - (* ;; "HAD BEEN: (COND ((AND (SETQ PROC (WINDOWPROP W 'PROCESS)) (PROCESSP PROC)) ; This window has a live process behind it; go evaluate the button fn there. (PROCESS.APPLY PROC USERFN (LIST W))) (T ; Otherwise, create a new process to handle the menu. (ADD.PROCESS (LIST USERFN (KWOTE W)))))") + (CL:WHEN (AND (MOUSESTATE (OR LEFT MIDDLE RIGHT)) + (NOT TEDIT.SELPENDING)) - (COND - ((\TEDIT.MOUSESTATE RIGHT) - (DOWINDOWCOM W)) - ((MOUSESTATE (OR LEFT MIDDLE)) - (AND TEXTOBJ (SETQ USERFN (WINDOWPROP W 'TEDIT.TITLEMENUFN)) - (NEQ USERFN 'DON'T) - (ADD.PROCESS (LIST USERFN (KWOTE W] - ((AND TEXTOBJ (EQ (fetch (TEXTOBJ MOUSEREGION) of TEXTOBJ) - 'WINDOW)) (* ; - "We're in the window-ops region of the window. Do a window split or something") - (\TEDIT.WINDOW.OPS TEXTOBJ W)) - ((AND TEXTOBJ (NOT (fetch (TEXTOBJ EDITOPACTIVE) of TEXTOBJ))) - (* ; - "Usual case -- he's really selecting something. And there's nothing else going on now.") - (TOTOPW W) (* ; - "Move the editing window to the top, so he can select wherever he wants.") - (\CARET.DOWN) (* ; - "Make sure the caret isn't being displayed.") - (RESETLST - (RESETSAVE TEDIT.SELPENDING TEXTOBJ) + (* ;; "(RMK: old comment): Bail out if the mouse isn't down or there is a pending selection--don't want another selection to interfere.") - (* ;; "Tell all TEdits not to run, since there is a selection in progress. This is reset to NIL on return from here, to re-enable TEdit runs.") + (AND STREAM (SETQ STREAM (TEXTOBJ STREAM))) + [LET* ((OSEL NIL) + (SEL NIL) + [TEXTOBJ (OR STREAM (WINDOWPROP W 'TEXTOBJ] + (DS (WINDOWPROP W 'DSP)) + USERFN + (GLOBALSEL TEDIT.SELECTION) + (X (LASTMOUSEX W)) + (Y (LASTMOUSEY W)) + (CLIPREGION (DSPCLIPPINGREGION NIL W)) + (SELOPERATION 'NORMAL) + (SELFN (TEXTPROP TEXTOBJ 'SELFN)) + (EXTENDFLG NIL) + (OLDX -32000) + (OLDY -32000) + SELFINALFN PROC NOSEL) + (replace (SELECTION CH#) of TEDIT.SCRATCHSELECTION with 0) + (* ; + "Mark the user-visible scratch selection fresh, so changes can be detected...") + (COND + [[OR (NOT TEXTOBJ) + (fetch (TEXTOBJ EDITFINISHEDFLG) of TEXTOBJ) + (AND (NOT (WINDOWPROP W 'PROCESS)) + (NOT (TEXTPROP TEXTOBJ 'READONLY)) + (NOT (SHIFTDOWNP 'SHIFT)) + (NOT (SHIFTDOWNP 'CTRL)) + (NOT (SHIFTDOWNP 'META)) + (NOT (KEYDOWNP 'MOVE)) + (NOT (KEYDOWNP 'COPY] (* ; "There's no edit session behind this window. You can only do window ops, or re-establish a session.") + (COND + ((\TEDIT.MOUSESTATE RIGHT) (* ; + "Right button gets the window command menu") + (DOWINDOWCOM W)) + ((AND TEXTOBJ (NOT (TEXTPROP TEXTOBJ 'READONLY)) + (NOT (TEXTPROP TEXTOBJ 'SELECTONLY)) + [NOT (PROCESSP (WINDOWPROP W 'PROCESS] + (\TEDIT.MOUSESTATE MIDDLE)) (* ; + "Middle button on a dead window gives a menu for re-starting TEDIT") + (COND + ((EQ (MENU TEDIT.RESTART.MENU) + 'NewEditProcess) + (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with NIL) + (TEDIT (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ) + W] + [(IGREATERP Y (fetch TOP of CLIPREGION)) + (* ; + "It's not inside the window's REAL region, so call on a menu.") - (RESETSAVE (for CARET inside (fetch (TEXTOBJ CARET) of TEXTOBJ) - do (replace TCCARET of CARET with (\CARET.CREATE - BXHICARET))) - (LIST '\TEDIT.CARET (fetch (TEXTOBJ CARET) of TEXTOBJ))) - (* ; - "Then make the caret be the special, tall one so he can see it.") - (COND - ((KEYDOWNP 'COPY) (* ; - "In a read-only document, you can only copy.") - (SETQ GLOBALSEL TEDIT.SHIFTEDSELECTION) - (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ)) - (SETQ SELOPERATION 'COPY)) - ((AND (KEYDOWNP 'MOVE) - (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ))) - (* ; - "The MOVE key is down, so set MOVE mode.") - (SETQ GLOBALSEL TEDIT.MOVESELECTION) - (SETQ OSEL (fetch (TEXTOBJ MOVESEL) of TEXTOBJ)) - (SETQ SELOPERATION 'MOVE)) - [(SHIFTDOWNP 'SHIFT) (* ; - "the SHIFT key is down; mark this selection for COPY or MOVE.") - (COND - ((AND (SHIFTDOWNP 'CTRL) - (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ))) - (* ; "CTRL-SHIFT select means MOVE.") - (SETQ GLOBALSEL TEDIT.MOVESELECTION) - (SETQ OSEL (fetch (TEXTOBJ MOVESEL) of TEXTOBJ)) - (SETQ SELOPERATION 'MOVE)) - (T (SETQ GLOBALSEL TEDIT.SHIFTEDSELECTION) - (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ)) - (SETQ SELOPERATION 'COPY] - ((SHIFTDOWNP 'META) (* ; - "He's holding the meta key down , do a copylooks selection") - (SETQ GLOBALSEL TEDIT.COPYLOOKSSELECTION) - (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ)) - (SETQ SELOPERATION 'COPYLOOKS)) - ((AND (SHIFTDOWNP 'CTRL) - (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ))) - (* ; - "He's holding the control key down; note the fact.") - (\SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) - NIL NIL) - (SETQ GLOBALSEL TEDIT.DELETESELECTION) - [COND - ((fetch (SELECTION SET) of (fetch (TEXTOBJ DELETESEL) - of TEXTOBJ)) - (* ; - "There's a pending delete selection. Use it, and turn off the existing normal selection.") - ) - (T (* ; - "No existing delete selection. Use the normal selection as a starting point.") - (\COPYSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) - (fetch (TEXTOBJ DELETESEL) of TEXTOBJ] - (replace (SELECTION SET) of (fetch (TEXTOBJ SEL) of TEXTOBJ) - with NIL) + (* ;; "RMK: This comment was originally just after the DON'T below, which generated a value-of-comment used message.") - (* ;; "Remember to turn off the normal selection, since we'll be moving it to a new spot after the deletion.") + (* ;; "HAD BEEN: (COND ((AND (SETQ PROC (WINDOWPROP W 'PROCESS)) (PROCESSP PROC)) ; This window has a live process behind it; go evaluate the button fn there. (PROCESS.APPLY PROC USERFN (LIST W))) (T ; Otherwise, create a new process to handle the menu. (ADD.PROCESS (LIST USERFN (KWOTE W)))))") - (SETQ OSEL (fetch (TEXTOBJ DELETESEL) of TEXTOBJ)) - (SETQ SELOPERATION 'DELETE) - (TEDIT.SET.SEL.LOOKS OSEL 'DELETE) - (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with NIL)) - (T (SETQ OSEL (fetch (TEXTOBJ SEL) of TEXTOBJ)) - (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with NIL) - (* ; "Reset the pending-delete flag.") - )) - (\COPYSEL OSEL GLOBALSEL) - (bind (OSELOP _ SELOPERATION) - while [OR (SHIFTDOWNP 'SHIFT) - (SHIFTDOWNP 'CTRL) - (SHIFTDOWNP 'META) - (KEYDOWNP 'MOVE) - (KEYDOWNP 'COPY) - (NOT (ZEROP (LOGAND LASTMOUSEBUTTONS 7] - do (* ; - "Poll the selection & display its current state") - [COND - ((ZEROP (LOGAND LASTMOUSEBUTTONS 7)) - (* ; - "No mouse buttons are down; don't try anything.") - (SETQ OLDX -32000) (* ; - "However, remember that pushing a mouse button is a change of status that we should notice.") - ) - ((KEYDOWNP 'MOVE) (* ; - "the MOVE key is down; mark this selection for MOVE.") - (SETQ SELOPERATION 'MOVE)) - [(OR (SHIFTDOWNP 'SHIFT) - (KEYDOWNP 'COPY)) (* ; - "the SHIFT key is down; mark this selection for COPY or MOVE.") - (COND - ((SHIFTDOWNP 'CTRL) (* ; - "He's holding down both ctrl and shift -- do a move.") - (SETQ SELOPERATION 'MOVE)) - (T (* ; - "Just the SHIFT key. It's a COPY") - (SETQ SELOPERATION 'COPY] - ((SHIFTDOWNP 'META) (* ; - "He's holding the meta key down; note the fact.") - (SETQ SELOPERATION 'COPYLOOKS)) - ((SHIFTDOWNP 'CTRL) (* ; - "He's holding only the CTRL key -- mark the selection for deletion.") - (SETQ SELOPERATION 'DELETE)) - (T (* ; - "No key being held down; revert to normal selection.") - (SETQ SELOPERATION 'NORMAL] - (COND - [(AND (OR [NOT (IEQP OLDX (SETQ X (LASTMOUSEX DS] - [NOT (IEQP OLDY (SETQ Y (LASTMOUSEY DS] - (NEQ OSELOP SELOPERATION)) - (INSIDEP CLIPREGION X Y)) + (COND + ((\TEDIT.MOUSESTATE RIGHT) + (DOWINDOWCOM W)) + ((MOUSESTATE (OR LEFT MIDDLE)) + (AND TEXTOBJ (SETQ USERFN (WINDOWPROP W 'TEDIT.TITLEMENUFN)) + (NEQ USERFN 'DON'T) + (ADD.PROCESS (LIST USERFN (KWOTE W] + ((AND TEXTOBJ (EQ (fetch (TEXTOBJ MOUSEREGION) of TEXTOBJ) + 'WINDOW)) (* ; + "We're in the window-ops region of the window. Do a window split or something") + (\TEDIT.WINDOW.OPS TEXTOBJ W)) + ((AND TEXTOBJ (NOT (fetch (TEXTOBJ EDITOPACTIVE) of TEXTOBJ))) + (* ; + "Usual case -- he's really selecting something. And there's nothing else going on now.") + (\CARET.DOWN) (* ; + "Make sure the caret isn't being displayed.") + (RESETLST + (RESETSAVE TEDIT.SELPENDING TEXTOBJ) - (* ;; "Only do selection if (1) the mouse is inside the window proper and (2) the mouse has moved, or the kind of selection has changed") + (* ;; "Tell all TEdits not to run, since there is a selection in progress. This is reset to NIL on return from here, to re-enable TEdit runs.") - (* ;; "Must precede the scroll-region test, so that we don't try to scroll while the mouse is inside the main window, even if the scroll bar overlaps the window (at left edge of screen, say)") + (RESETSAVE (for CARET inside (fetch (TEXTOBJ CARET) of TEXTOBJ) + do (replace TCCARET of CARET with (\CARET.CREATE + BXHICARET))) + (LIST '\TEDIT.CARET (fetch (TEXTOBJ CARET) of TEXTOBJ))) + (* ; + "Then make the caret be the special, tall one so he can see it.") + (COND + ((KEYDOWNP 'COPY) (* ; + "In a read-only document, you can only copy.") + (SETQ GLOBALSEL TEDIT.SHIFTEDSELECTION) + (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ)) + (SETQ SELOPERATION 'COPY)) + ((AND (KEYDOWNP 'MOVE) + (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ))) + (* ; + "The MOVE key is down, so set MOVE mode.") + (SETQ GLOBALSEL TEDIT.MOVESELECTION) + (SETQ OSEL (fetch (TEXTOBJ MOVESEL) of TEXTOBJ)) + (SETQ SELOPERATION 'MOVE)) + [(SHIFTDOWNP 'SHIFT) (* ; + "the SHIFT key is down; mark this selection for COPY or MOVE.") + (COND + ((AND (SHIFTDOWNP 'CTRL) + (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ))) + (* ; "CTRL-SHIFT select means MOVE.") + (SETQ GLOBALSEL TEDIT.MOVESELECTION) + (SETQ OSEL (fetch (TEXTOBJ MOVESEL) of TEXTOBJ)) + (SETQ SELOPERATION 'MOVE)) + (T (SETQ GLOBALSEL TEDIT.SHIFTEDSELECTION) + (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ)) + (SETQ SELOPERATION 'COPY] + ((SHIFTDOWNP 'META) (* ; + "He's holding the meta key down , do a copylooks selection") + (SETQ GLOBALSEL TEDIT.COPYLOOKSSELECTION) + (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ)) + (SETQ SELOPERATION 'COPYLOOKS)) + ((AND (SHIFTDOWNP 'CTRL) + (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ))) + (* ; + "He's holding the control key down; note the fact.") + (\SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) + NIL NIL) + (SETQ GLOBALSEL TEDIT.DELETESELECTION) + [COND + ((fetch (SELECTION SET) of (fetch (TEXTOBJ DELETESEL) + of TEXTOBJ)) + (* ; + "There's a pending delete selection. Use it, and turn off the existing normal selection.") + ) + (T (* ; + "No existing delete selection. Use the normal selection as a starting point.") + (\COPYSEL (fetch (TEXTOBJ SEL) of TEXTOBJ) + (fetch (TEXTOBJ DELETESEL) of TEXTOBJ] + (replace (SELECTION SET) of (fetch (TEXTOBJ SEL) of TEXTOBJ + ) with NIL) - (SETQ OLDX X) - (SETQ OLDY Y) - [COND - ((\TEDIT.MOUSESTATE LEFT) (* ; - "Left button is character selection") - (SETQ SEL (TEDIT.SELECT X Y TEXTOBJ (fetch (TEXTOBJ - MOUSEREGION - ) - of TEXTOBJ) - NIL SELOPERATION W)) - (SETQ EXTENDFLG NIL)) - ((\TEDIT.MOUSESTATE MIDDLE) - (* ; "Middle button is word selection") - (SETQ SEL (TEDIT.SELECT X Y TEXTOBJ (fetch (TEXTOBJ - MOUSEREGION - ) - of TEXTOBJ) - T SELOPERATION W)) - (SETQ EXTENDFLG NIL)) - [(\TEDIT.MOUSESTATE RIGHT)(* ; "RIght button extends selections") - (COND - ((NEQ SELOPERATION OSELOP) + (* ;; "Remember to turn off the normal selection, since we'll be moving it to a new spot after the deletion.") - (* ;; "Things changed since the last selection. Grab the prior selection info, so that the extension is taken from the selection NOW being made, rather than the last existing old-type selection.") - - (\COPYSEL OSEL GLOBALSEL))) - (COND - ((fetch (SELECTION SET) of GLOBALSEL) - (AND TEDIT.EXTEND.PENDING.DELETE (EQ SELOPERATION - 'NORMAL) - (SETQ SELOPERATION 'PENDINGDEL) - (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ - with T)) (* ; - "If TeditBluePendingDelete flag is set, then simulate Laurel's blue-pending-delete feature.") - (SETQ SEL (TEDIT.EXTEND.SEL X Y GLOBALSEL TEXTOBJ - SELOPERATION W)) - (SETQ EXTENDFLG T] - (T (* ; - "The mouse buttons are up, leaving us with a pro-tem 'permanent' selection") - (\COPYSEL OSEL GLOBALSEL) - (* ; - "And SEL is NOT SET ANY LONGER, so it won't get copied into OSEL down below") - (AND SEL (replace (SELECTION SET) of SEL with - NIL] - [COND - ((AND SEL (fetch (SELECTION SET) of SEL) - SELFN) (* ; - "The selection was set, but there's a SELFN that has veto authority") - (COND - ((EQ (APPLY* SELFN TEXTOBJ SEL SELOPERATION 'TENTATIVE) - 'DON'T) (* ; - "The selfn vetoed this selection, so mark it un-set.") - (replace (SELECTION SET) of SEL with NIL] - (COND - ((\TEDIT.SEL.CHANGED? SEL OSEL OSELOP SELOPERATION) - (* ; - "Something interesting about the selection changed. We have to re-display its image.") - (COND - ((OR (EQ SELOPERATION 'NORMAL) - (EQ SELOPERATION 'PENDINGDEL)) - (* ; - "For a normal selection, set the 'window last selected in' for the TEXTOBJ") - (replace (TEXTOBJ SELWINDOW) of TEXTOBJ with - W))) - (SETQ OSEL (\TEDIT.REFRESH.SHOWSEL TEXTOBJ SEL OSEL OSELOP - SELOPERATION EXTENDFLG)) - (SETQ OSELOP SELOPERATION)) - ([AND OSEL (fetch (SELECTION SET) of OSEL) - (EQ (fetch (SELECTION SELKIND) of OSEL) - 'VOLATILE) - (OR (NOT SEL) - (NOT (fetch (SELECTION SET) of SEL] - - (* ;; "There is an old selection around, but it is VOLATILE -- i.e., it shouldn't last longer than something is pointing at it. Turn it off.") - - (\SHOWSEL OSEL NIL NIL) - (replace (SELECTION SET) of OSEL with NIL] - ((IN/SCROLL/BAR? W LASTMOUSEX LASTMOUSEY) - (* ; - "If he moves to the scroll bar, let him scroll without trouble") - (SCROLL.HANDLER W))) - (BLOCK) (* ; "Give other processes a chance") - (GETMOUSESTATE) (* ; "And get the new mouse info") - (TEDIT.CURSORMOVEDFN W)) - (\COPYSEL OSEL GLOBALSEL) - (COND - ((fetch (SELECTION SET) of OSEL) - (* ; - "Only if a selection REALLY got made should we do this....") - (SELECTQ SELOPERATION - (COPY (* ; - "A COPY selection -- set the copy flag, and see if this is a copy to a non-TEdit window") - (SETQ TEDIT.COPY.PENDING T) - (replace (SELECTION SET) of OSEL with NIL) - (* ; - "And turn off OSEL, to avoid spurious highlighting") - (\TEDIT.FOREIGN.COPY? GLOBALSEL) - (* ; - "Maybe copy into the SYSBUF, if the recipient isn't a TEdit window.") - ) - (COPYLOOKS (* ; "A COPYLOOKS selection") - (SETQ TEDIT.COPYLOOKS.PENDING T) - (* ; - "And turn off OSEL, to avoid spurious highlighting") - (replace (SELECTION SET) of OSEL with NIL)) - (MOVE (* ; - "A MOVE selection -- set the flag to signal the TEdit command loop,") - (SETQ TEDIT.MOVE.PENDING T) (* ; - "And turn off OSEL, to avoid spurious highlighting") - (replace (SELECTION SET) of OSEL with NIL)) - (DELETE (SETQ TEDIT.DEL.PENDING T) - (replace (SELECTION SET) of OSEL with NIL) - (* ; - "And turn off OSEL, to avoid spurious highlighting") + (SETQ OSEL (fetch (TEXTOBJ DELETESEL) of TEXTOBJ)) + (SETQ SELOPERATION 'DELETE) + (TEDIT.SET.SEL.LOOKS OSEL 'DELETE) + (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with NIL)) + (T (SETQ OSEL (fetch (TEXTOBJ SEL) of TEXTOBJ)) + (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with NIL) + (* ; "Reset the pending-delete flag.") + )) + (\COPYSEL OSEL GLOBALSEL) + (bind (OSELOP _ SELOPERATION) + while [OR (SHIFTDOWNP 'SHIFT) + (SHIFTDOWNP 'CTRL) + (SHIFTDOWNP 'META) + (KEYDOWNP 'MOVE) + (KEYDOWNP 'COPY) + (NOT (ZEROP (LOGAND LASTMOUSEBUTTONS 7] + do (* ; + "Poll the selection & display its current state") + [COND + ((ZEROP (LOGAND LASTMOUSEBUTTONS 7)) + (* ; + "No mouse buttons are down; don't try anything.") + (SETQ OLDX -32000) (* ; + "However, remember that pushing a mouse button is a change of status that we should notice.") ) - (NORMAL (* ; - "This is a normal selection; set the caret looks") - (replace (TEXTOBJ CARETLOOKS) of TEXTOBJ - with (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ OSEL))) - NIL))) - (AND SELFN (APPLY* SELFN TEXTOBJ GLOBALSEL SELOPERATION 'FINAL)) - (* ; - "Give a user exit routine control, perhaps for logging of selections.") - (for CARET inside (fetch (TEXTOBJ CARET) of TEXTOBJ) - do (OR (fetch TCUP of CARET) - (\EDIT.FLIPCARET CARET T)))) - (AND OSEL (fetch (SELECTION SET) of OSEL) - (fetch (SELECTION SELOBJ) of OSEL) - (SETQ SELFINALFN (IMAGEOBJPROP (fetch (SELECTION SELOBJ) of OSEL) - 'WHENOPERATEDONFN)) - (APPLY* SELFINALFN (fetch (SELECTION SELOBJ) of OSEL) - (WINDOWPROP W 'DSP) - 'SELECTED OSEL (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ]) + ((KEYDOWNP 'MOVE) (* ; + "the MOVE key is down; mark this selection for MOVE.") + (SETQ SELOPERATION 'MOVE)) + [(OR (SHIFTDOWNP 'SHIFT) + (KEYDOWNP 'COPY)) (* ; + "the SHIFT key is down; mark this selection for COPY or MOVE.") + (COND + ((SHIFTDOWNP 'CTRL) (* ; + "He's holding down both ctrl and shift -- do a move.") + (SETQ SELOPERATION 'MOVE)) + (T (* ; + "Just the SHIFT key. It's a COPY") + (SETQ SELOPERATION 'COPY] + ((SHIFTDOWNP 'META) (* ; + "He's holding the meta key down; note the fact.") + (SETQ SELOPERATION 'COPYLOOKS)) + ((SHIFTDOWNP 'CTRL) (* ; + "He's holding only the CTRL key -- mark the selection for deletion.") + (SETQ SELOPERATION 'DELETE)) + (T (* ; + "No key being held down; revert to normal selection.") + (SETQ SELOPERATION 'NORMAL] + (COND + [(AND (OR [NOT (IEQP OLDX (SETQ X (LASTMOUSEX DS] + [NOT (IEQP OLDY (SETQ Y (LASTMOUSEY DS] + (NEQ OSELOP SELOPERATION)) + (INSIDEP CLIPREGION X Y)) + + (* ;; "Only do selection if (1) the mouse is inside the window proper and (2) the mouse has moved, or the kind of selection has changed") + + (* ;; "Must precede the scroll-region test, so that we don't try to scroll while the mouse is inside the main window, even if the scroll bar overlaps the window (at left edge of screen, say)") + + (SETQ OLDX X) + (SETQ OLDY Y) + [COND + ((\TEDIT.MOUSESTATE LEFT) + (* ; + "Left button is character selection") + (SETQ SEL (TEDIT.SELECT X Y TEXTOBJ (fetch (TEXTOBJ + MOUSEREGION + ) + of TEXTOBJ) + NIL SELOPERATION W)) + (SETQ EXTENDFLG NIL)) + ((\TEDIT.MOUSESTATE MIDDLE) + (* ; "Middle button is word selection") + (SETQ SEL (TEDIT.SELECT X Y TEXTOBJ (fetch (TEXTOBJ + MOUSEREGION + ) + of TEXTOBJ) + T SELOPERATION W)) + (SETQ EXTENDFLG NIL)) + [(\TEDIT.MOUSESTATE RIGHT) + (* ; "RIght button extends selections") + (COND + ((NEQ SELOPERATION OSELOP) + + (* ;; "Things changed since the last selection. Grab the prior selection info, so that the extension is taken from the selection NOW being made, rather than the last existing old-type selection.") + + (\COPYSEL OSEL GLOBALSEL))) + (COND + ((fetch (SELECTION SET) of GLOBALSEL) + (AND TEDIT.EXTEND.PENDING.DELETE (EQ SELOPERATION + 'NORMAL) + (SETQ SELOPERATION 'PENDINGDEL) + (replace (TEXTOBJ BLUEPENDINGDELETE) of + TEXTOBJ + with T)) + (* ; + "If TeditBluePendingDelete flag is set, then simulate Laurel's blue-pending-delete feature.") + (SETQ SEL (TEDIT.EXTEND.SEL X Y GLOBALSEL TEXTOBJ + SELOPERATION W)) + (SETQ EXTENDFLG T] + (T (* ; + "The mouse buttons are up, leaving us with a pro-tem 'permanent' selection") + (\COPYSEL OSEL GLOBALSEL) + (* ; + "And SEL is NOT SET ANY LONGER, so it won't get copied into OSEL down below") + (AND SEL (replace (SELECTION SET) of SEL + with NIL] + [COND + ((AND SEL (fetch (SELECTION SET) of SEL) + SELFN) (* ; + "The selection was set, but there's a SELFN that has veto authority") + (COND + ((EQ (APPLY* SELFN TEXTOBJ SEL SELOPERATION 'TENTATIVE) + 'DON'T) (* ; + "The selfn vetoed this selection, so mark it un-set.") + (replace (SELECTION SET) of SEL with NIL] + (COND + ((\TEDIT.SEL.CHANGED? SEL OSEL OSELOP SELOPERATION) + (* ; + "Something interesting about the selection changed. We have to re-display its image.") + (COND + ((OR (EQ SELOPERATION 'NORMAL) + (EQ SELOPERATION 'PENDINGDEL)) + (* ; + "For a normal selection, set the 'window last selected in' for the TEXTOBJ") + (replace (TEXTOBJ SELWINDOW) of TEXTOBJ + with W))) + (SETQ OSEL (\TEDIT.REFRESH.SHOWSEL TEXTOBJ SEL OSEL OSELOP + SELOPERATION EXTENDFLG)) + (SETQ OSELOP SELOPERATION)) + ([AND OSEL (fetch (SELECTION SET) of OSEL) + (EQ (fetch (SELECTION SELKIND) of OSEL) + 'VOLATILE) + (OR (NOT SEL) + (NOT (fetch (SELECTION SET) of SEL] + + (* ;; "There is an old selection around, but it is VOLATILE -- i.e., it shouldn't last longer than something is pointing at it. Turn it off.") + + (\SHOWSEL OSEL NIL NIL) + (replace (SELECTION SET) of OSEL with NIL] + ((IN/SCROLL/BAR? W LASTMOUSEX LASTMOUSEY) + (* ; + "If he moves to the scroll bar, let him scroll without trouble") + (SCROLL.HANDLER W))) + (BLOCK) (* ; "Give other processes a chance") + (GETMOUSESTATE) (* ; "And get the new mouse info") + (TEDIT.CURSORMOVEDFN W)) + (\COPYSEL OSEL GLOBALSEL) + (COND + ((fetch (SELECTION SET) of OSEL) + (* ; + "Only if a selection REALLY got made should we do this....") + (SELECTQ SELOPERATION + (COPY (* ; + "A COPY selection -- set the copy flag, and see if this is a copy to a non-TEdit window") + (SETQ TEDIT.COPY.PENDING T) + (replace (SELECTION SET) of OSEL with NIL) + (* ; + "And turn off OSEL, to avoid spurious highlighting") + (\TEDIT.FOREIGN.COPY? GLOBALSEL) + (* ; + "Maybe copy into the SYSBUF, if the recipient isn't a TEdit window.") + ) + (COPYLOOKS (* ; "A COPYLOOKS selection") + (SETQ TEDIT.COPYLOOKS.PENDING T) + (* ; + "And turn off OSEL, to avoid spurious highlighting") + (replace (SELECTION SET) of OSEL with NIL)) + (MOVE (* ; + "A MOVE selection -- set the flag to signal the TEdit command loop,") + (SETQ TEDIT.MOVE.PENDING T) + (* ; + "And turn off OSEL, to avoid spurious highlighting") + (replace (SELECTION SET) of OSEL with NIL)) + (DELETE (SETQ TEDIT.DEL.PENDING T) + (replace (SELECTION SET) of OSEL with NIL) + (* ; + "And turn off OSEL, to avoid spurious highlighting") + ) + (NORMAL (* ; + "This is a normal selection; set the caret looks") + (replace (TEXTOBJ CARETLOOKS) of TEXTOBJ + with (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ OSEL))) + NIL))) + (AND SELFN (APPLY* SELFN TEXTOBJ GLOBALSEL SELOPERATION 'FINAL)) + (* ; + "Give a user exit routine control, perhaps for logging of selections.") + (for CARET inside (fetch (TEXTOBJ CARET) of TEXTOBJ) + do (OR (fetch TCUP of CARET) + (\EDIT.FLIPCARET CARET T)))) + (AND OSEL (fetch (SELECTION SET) of OSEL) + (fetch (SELECTION SELOBJ) of OSEL) + (SETQ SELFINALFN (IMAGEOBJPROP (fetch (SELECTION SELOBJ) of OSEL) + 'WHENOPERATEDONFN)) + (APPLY* SELFINALFN (fetch (SELECTION SELOBJ) of OSEL) + (WINDOWPROP W 'DSP) + 'SELECTED OSEL (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ])]) (\TEDIT.WINDOW.OPS [LAMBDA (TEXTOBJ WINDOWTOSPLIT) (* ; "Edited 30-May-91 23:33 by jds") @@ -1922,9 +1925,10 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat ]) (\TEDIT.SCROLLFN - [LAMBDA (W DX DY) (* ; "Edited 31-May-91 13:32 by jds") + [LAMBDA (W DX DY) (* ; "Edited 19-Sep-2021 23:10 by rmk:") (* Handle scrolling of the edit  window) + (TOTOPW W) (PROG* (WHEIGHT (TEXTOBJ (WINDOWPROP W 'TEXTOBJ)) (PRIORCR 0) SELWASON SHIFTEDSELWASON MOVESELWASON DELETESELWASON (WREG (DSPCLIPPINGREGION @@ -2826,25 +2830,25 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat (PUTPROPS TEDITWINDOW COPYRIGHT ("John Sybalsky & Xerox Corporation" 1983 1984 1985 1986 1987 1988 1989 1990 1991 1993 1994 1999 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (7165 91937 (TEDIT.CREATEW 7175 . 8311) (\TEDIT.CREATEW.FROM.REGION 8313 . 9297) ( -TEDIT.CURSORMOVEDFN 9299 . 19951) (TEDIT.CURSOROUTFN 19953 . 20488) (TEDIT.WINDOW.SETUP 20490 . 22299) - (TEDIT.MINIMAL.WINDOW.SETUP 22301 . 30090) (\TEDIT.ACTIVE.WINDOWP 30092 . 31073) ( -\TEDIT.BUTTONEVENTFN 31075 . 54913) (\TEDIT.WINDOW.OPS 54915 . 58718) (\TEDIT.EXPANDFN 58720 . 59123) -(\TEDIT.MAINW 59125 . 60414) (\TEDIT.PRIMARYW 60416 . 61628) (\TEDIT.COPYINSERTFN 61630 . 62601) ( -\TEDIT.NEWREGIONFN 62603 . 65070) (\TEDIT.SET.WINDOW.EXTENT 65072 . 71174) (\TEDIT.SHRINK.ICONCREATE -71176 . 73448) (\TEDIT.SHRINKFN 73450 . 74025) (\TEDIT.SPLITW 74027 . 80128) (\TEDIT.UNSPLITW 80130 . -85824) (\TEDIT.WINDOW.SETUP 85826 . 91546) (\SAFE.FIRST 91548 . 91935)) (93083 93990 (TEDITWINDOWP -93093 . 93988)) (94027 96523 (TEDIT.GETINPUT 94037 . 96020) (\TEDIT.MAKEFILENAME 96022 . 96521)) ( -96572 103023 (TEDIT.PROMPTPRINT 96582 . 99486) (TEDIT.PROMPTFLASH 99488 . 101443) ( -\TEDIT.PROMPT.PAGEFULLFN 101445 . 103021)) (103258 107320 (TEXTSTREAM.TITLE 103268 . 103889) ( -\TEDIT.ORIGINAL.WINDOW.TITLE 103891 . 105936) (\TEDIT.WINDOW.TITLE 105938 . 106608) ( -\TEXTSTREAM.FILENAME 106610 . 107318)) (107363 152087 (TEDIT.DEACTIVATE.WINDOW 107373 . 114522) ( -\TEDIT.REPAINTFN 114524 . 117381) (\TEDIT.RESHAPEFN 117383 . 123003) (\TEDIT.SCROLLFN 123005 . 152085) -) (152129 154178 (\TEDIT.PROCIDLEFN 152139 . 153488) (\TEDIT.PROCENTRYFN 153490 . 153783) ( -\TEDIT.PROCEXITFN 153785 . 154176)) (154257 165257 (\EDIT.DOWNCARET 154267 . 154948) (\EDIT.FLIPCARET -154950 . 156485) (TEDIT.FLASHCARET 156487 . 157601) (\EDIT.UPCARET 157603 . 158056) ( -TEDIT.NORMALIZECARET 158058 . 164009) (\SETCARET 164011 . 164931) (\TEDIT.CARET 164933 . 165255)) ( -165291 179046 (TEDIT.ADD.MENUITEM 165301 . 167216) (TEDIT.DEFAULT.MENUFN 167218 . 176485) ( -TEDIT.REMOVE.MENUITEM 176487 . 177488) (\TEDIT.CREATEMENU 177490 . 177943) (\TEDIT.MENU.WHENHELDFN -177945 . 178715) (\TEDIT.MENU.WHENSELECTEDFN 178717 . 179044))))) + (FILEMAP (NIL (7117 93041 (TEDIT.CREATEW 7127 . 8263) (\TEDIT.CREATEW.FROM.REGION 8265 . 9249) ( +TEDIT.CURSORMOVEDFN 9251 . 19903) (TEDIT.CURSOROUTFN 19905 . 20440) (TEDIT.WINDOW.SETUP 20442 . 22251) + (TEDIT.MINIMAL.WINDOW.SETUP 22253 . 30042) (\TEDIT.ACTIVE.WINDOWP 30044 . 31025) ( +\TEDIT.BUTTONEVENTFN 31027 . 56017) (\TEDIT.WINDOW.OPS 56019 . 59822) (\TEDIT.EXPANDFN 59824 . 60227) +(\TEDIT.MAINW 60229 . 61518) (\TEDIT.PRIMARYW 61520 . 62732) (\TEDIT.COPYINSERTFN 62734 . 63705) ( +\TEDIT.NEWREGIONFN 63707 . 66174) (\TEDIT.SET.WINDOW.EXTENT 66176 . 72278) (\TEDIT.SHRINK.ICONCREATE +72280 . 74552) (\TEDIT.SHRINKFN 74554 . 75129) (\TEDIT.SPLITW 75131 . 81232) (\TEDIT.UNSPLITW 81234 . +86928) (\TEDIT.WINDOW.SETUP 86930 . 92650) (\SAFE.FIRST 92652 . 93039)) (94187 95094 (TEDITWINDOWP +94197 . 95092)) (95131 97627 (TEDIT.GETINPUT 95141 . 97124) (\TEDIT.MAKEFILENAME 97126 . 97625)) ( +97676 104127 (TEDIT.PROMPTPRINT 97686 . 100590) (TEDIT.PROMPTFLASH 100592 . 102547) ( +\TEDIT.PROMPT.PAGEFULLFN 102549 . 104125)) (104362 108424 (TEXTSTREAM.TITLE 104372 . 104993) ( +\TEDIT.ORIGINAL.WINDOW.TITLE 104995 . 107040) (\TEDIT.WINDOW.TITLE 107042 . 107712) ( +\TEXTSTREAM.FILENAME 107714 . 108422)) (108467 153208 (TEDIT.DEACTIVATE.WINDOW 108477 . 115626) ( +\TEDIT.REPAINTFN 115628 . 118485) (\TEDIT.RESHAPEFN 118487 . 124107) (\TEDIT.SCROLLFN 124109 . 153206) +) (153250 155299 (\TEDIT.PROCIDLEFN 153260 . 154609) (\TEDIT.PROCENTRYFN 154611 . 154904) ( +\TEDIT.PROCEXITFN 154906 . 155297)) (155378 166378 (\EDIT.DOWNCARET 155388 . 156069) (\EDIT.FLIPCARET +156071 . 157606) (TEDIT.FLASHCARET 157608 . 158722) (\EDIT.UPCARET 158724 . 159177) ( +TEDIT.NORMALIZECARET 159179 . 165130) (\SETCARET 165132 . 166052) (\TEDIT.CARET 166054 . 166376)) ( +166412 180167 (TEDIT.ADD.MENUITEM 166422 . 168337) (TEDIT.DEFAULT.MENUFN 168339 . 177606) ( +TEDIT.REMOVE.MENUITEM 177608 . 178609) (\TEDIT.CREATEMENU 178611 . 179064) (\TEDIT.MENU.WHENHELDFN +179066 . 179836) (\TEDIT.MENU.WHENSELECTEDFN 179838 . 180165))))) STOP diff --git a/library/TEDITWINDOW.LCOM b/library/TEDITWINDOW.LCOM index 03de59c412285815e2c4cdab9f7248512d3beff5..59c632ab5c61ff70ac98543478b130e04278603c 100644 GIT binary patch delta 4837 zcmZu#-ESOM72ma$q;*khy4%QYO}H4^)HHVH&fNK0l{EV?>x?ryv)vhgr3NR$ripEm z(iC_>8sMplT0}AkAtWRc9(Vx>$3}?oVT5=osDeJx@Kl0OA9!*8g7CXDJ3F&;6Dg~E z&OP_s^Z7e>{L8zefB)_1_ZO?wobfl_n2{x!5?QHHT9ecpn~M`vnkG|2n{rJxYs!s( z&TOp)R?7}%{btW|oVH6YUm;WN1;-(I`PtdoDYAa?t&Mdu_6S9cO-+xz*tQ+3*|X|U zShy`Qg+*T~w;!hxp@ydDa`cPxbEnd4r^y>{ZhYhN)vsTRuX(;!&;Wal8a23vvblR@ z;%vZ~NMTxZ>SZ=HB%tiAj>rc-) zUZd_Lswg81zSV2H(N9l46Wu*IGueft?aq-lQ7Gw0%7UAL?YYtDO#Auc#}Ac8&OBbi zzsLB`{ssQKedNEJ2RC=hA1%F%-+x8!%uA!E*N#WunrVb5*Jk&Z8i%>qX7#W)aeJrq zfj1G;?@2dzN`FbTy*G=KuXq!&>Uj6Bweih^+dJjYzs}Fbe27dAQAdZU(giM=vHti6 z_kMW){`L_U2Hv~7HUIJNf9G`0{TasI*!=buH@WnF;mq2x{k7`8ckDht=N;n**N*OQ zc}G89duo4eeBXP@t9s)@Dz3*Wwny%59{ezIX55=tzw@=&|Ka%%~Zo(JM}mg z*saCKw{Ut-T583-*oA|=(eLh*8~s>as-8}xHhX3aZkEO`jeAqx=SIr-KQdDO@T(6$ zd~jzov*qT_!>{CXbO>(mzVA&>aJ{Afory1rHLXpqBP;ikTQ9};mj32VM*F8e#bQ^! zlccMfNc_l~=vx3cZ|^)@Pj*k^!sYnF=(zNmQwxdX)zanxRL-4EgpTihAzkI}m-bFX z+tO4=dh+Oa=|x?a$*S%83q5Pec3a*O(N#w5PJPbu8uKXrF3}~0_;#(WE%Ka0_&1lBKhj>vgRj2T{)jis=Y`PDB}^UZV(53P&)~5NklouGWyE ze*FM{2bOCIZz|6?4HIuj- z-?Y{*ztw&7>X$dJT_Y^oQIK0`No@CAXN9m_f|w)^bSXN|L_ZO!1qzi()9bDfMM9zR z?Q_;jQkt?xNyl5XFc!4p7DCyvf;y&wLBeLxb1)5%0A5l=mZZU*RL`x^X<3LVFF}kL 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 vW-*WyBxxNuG