From c406cbf2addacf475601350be0f237c92a50c1d7 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 17 Feb 2021 14:00:23 -0800 Subject: [PATCH] Added 2 lines in SCROLL.HANDLER in WINDOWSCROLL so that vertical and horizontal scrollbar windows are recognizable and recognizably related to their main windows. This allows WHEELSCROLL to provide better wheel-scrolling behavior --- sources/WINDOWSCROLL | 361 +++----------------------------------- sources/WINDOWSCROLL.LCOM | Bin 15468 -> 15321 bytes 2 files changed, 28 insertions(+), 333 deletions(-) diff --git a/sources/WINDOWSCROLL b/sources/WINDOWSCROLL index f874f61c..2be029a0 100644 --- a/sources/WINDOWSCROLL +++ b/sources/WINDOWSCROLL @@ -1,54 +1,4 @@ -(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") -(FILECREATED "16-Feb-94 12:36:43" {DSK}nilsson>mnw>WINDOWSCROLL.;1 54529 - - changes to%: (FNS SCROLLW SCROLLBYREPAINTFN ADJUSTOFFSETS CREATESCROLLINGW IN/SCROLL/BAR? - RELDSPXOFFSET RELDSPYOFFSET SCROLL.HANDLER \SCROLL.HANDLER.DOIT - \DECODE.EXTENT.USE \UPDATE.EXTENT.IMAGE EXTENDPASTHORIZBOUNDARIES - EXTENDPASTVERTBOUNDARIES FILLWITHBACKGROUND UPDATE/SCROLL/REG WTODSX WTODSY - WXOFFSET WYOFFSET BITMAPSCROLLFN SCROLLBITMAP REDISPLAYBITMAP - ULREDISPLAYBITMAP EXTENDEXTENT WIDTHIFWINDOW HEIGHTIFWINDOW) - (VARS WINDOWSCROLLCOMS) - - previous date%: "29-Sep-93 14:57:22" {DSK}export>lispcore>sources>WINDOWSCROLL.;1) - - -(* ; " -Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights reserved. -") - -(PRETTYCOMPRINT WINDOWSCROLLCOMS) - -(RPAQQ WINDOWSCROLLCOMS - [ (* ; "Scrolling stuff") - (FNS SCROLLW SCROLLBYREPAINTFN ADJUSTOFFSETS CREATESCROLLINGW IN/SCROLL/BAR? RELDSPXOFFSET - RELDSPYOFFSET SCROLL.HANDLER \SCROLL.HANDLER.DOIT \DECODE.EXTENT.USE - \UPDATE.EXTENT.IMAGE EXTENDPASTHORIZBOUNDARIES EXTENDPASTVERTBOUNDARIES REDISPLAYW - FILLWITHBACKGROUND UPDATE/SCROLL/REG WTODSX WTODSY WXOFFSET WYOFFSET BITMAPSCROLLFN - SCROLLBITMAP REDISPLAYBITMAP ULREDISPLAYBITMAP EXTENDEXTENT WIDTHIFWINDOW HEIGHTIFWINDOW - ) - (* ; - "this function should be on LLDISPLAY but Ron has it checked out. Move it later - rrb.") - (FNS \DSPUNTRANSFORMREGION) - (CURSORS VertScrollCursor ScrollUpCursor ScrollDownCursor HorizScrollCursor ScrollLeftCursor - ScrollRightCursor VertThumbCursor HorizThumbCursor WAITINGCURSOR) - (GLOBALVARS \LastInWindow VertScrollCursor ScrollUpCursor ScrollDownCursor ScrollLeftCursor - ScrollRightCursor HorizScrollCursor) - (INITVARS (SCROLLBARWIDTH 24) - (SCROLLWAITTIME 100) - (SCROLLBARSHADE 32800) - (WAITBEFORESCROLLTIME 750) - (WAITBETWEENSCROLLTIME 100)) - (DECLARE%: DONTEVAL@LOAD DOCOPY (ADDVARS (GLOBALVARS SCROLLBARWIDTH SCROLLWAITTIME - SCROLLBARSHADE WAITBEFORESCROLLTIME - WAITBETWEENSCROLLTIME WAITINGCURSOR]) - - - -(* ; "Scrolling stuff") - -(DEFINEQ - -(SCROLLW +(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED "17-Feb-2021 13:49:06"  {DSK}kaplan>Local>medley3.5>git-medley>sources>WINDOWSCROLL.;2 54471 changes to%: (FNS SCROLL.HANDLER) previous date%: "16-Feb-94 12:36:43" {DSK}kaplan>Local>medley3.5>git-medley>sources>WINDOWSCROLL.;1) (* ; " Copyright (c) 1986, 1990, 1993, 1994, 2021 by Venue & Xerox Corporation. ") (PRETTYCOMPRINT WINDOWSCROLLCOMS) (RPAQQ WINDOWSCROLLCOMS [ (* ; "Scrolling stuff") (FNS SCROLLW SCROLLBYREPAINTFN ADJUSTOFFSETS CREATESCROLLINGW IN/SCROLL/BAR? RELDSPXOFFSET RELDSPYOFFSET SCROLL.HANDLER \SCROLL.HANDLER.DOIT \DECODE.EXTENT.USE \UPDATE.EXTENT.IMAGE EXTENDPASTHORIZBOUNDARIES EXTENDPASTVERTBOUNDARIES REDISPLAYW FILLWITHBACKGROUND UPDATE/SCROLL/REG WTODSX WTODSY WXOFFSET WYOFFSET BITMAPSCROLLFN SCROLLBITMAP REDISPLAYBITMAP ULREDISPLAYBITMAP EXTENDEXTENT WIDTHIFWINDOW HEIGHTIFWINDOW ) (* ;  "this function should be on LLDISPLAY but Ron has it checked out. Move it later - rrb.") (FNS \DSPUNTRANSFORMREGION) (CURSORS VertScrollCursor ScrollUpCursor ScrollDownCursor HorizScrollCursor ScrollLeftCursor ScrollRightCursor VertThumbCursor HorizThumbCursor WAITINGCURSOR) (GLOBALVARS \LastInWindow VertScrollCursor ScrollUpCursor ScrollDownCursor ScrollLeftCursor ScrollRightCursor HorizScrollCursor) (INITVARS (SCROLLBARWIDTH 24) (SCROLLWAITTIME 100) (SCROLLBARSHADE 32800) (WAITBEFORESCROLLTIME 750) (WAITBETWEENSCROLLTIME 100)) (DECLARE%: DONTEVAL@LOAD DOCOPY (ADDVARS (GLOBALVARS SCROLLBARWIDTH SCROLLWAITTIME SCROLLBARSHADE WAITBEFORESCROLLTIME WAITBETWEENSCROLLTIME WAITINGCURSOR]) (* ; "Scrolling stuff") (DEFINEQ (SCROLLW [LAMBDA (WINDOW DX DY CONTINUOUSFLG) (* ; "Edited 16-Feb-94 11:58 by nilsson") (* ;; "scrolls a window by DX in the X direction and DY in the Y direction. If CONTINUOUSFLG is non-NIL, this is part of a continuous scroll so that the window scrolling function can decide for example to scroll a constant smount.") @@ -56,9 +6,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (\CHECKCARET WINDOW) (APPLY* (OR (fetch SCROLLFN of WINDOW) (FUNCTION SCROLLBYREPAINTFN)) - WINDOW DX DY CONTINUOUSFLG]) - -(SCROLLBYREPAINTFN + WINDOW DX DY CONTINUOUSFLG]) (SCROLLBYREPAINTFN [LAMBDA (WINDOW XDELTA YDELTA CONTINUOUSFLG) (* ; "Edited 16-Feb-94 12:26 by nilsson") (* ;; "standard scrolling function that scrolls by blting existing bits and then calling the windows repaintfn to repaint the newly exposed bits.") @@ -263,23 +211,17 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (IMIN (IMINUS YDELTA) ONSHEIGHT] T))) - (RETURN]) - -(ADJUSTOFFSETS + (RETURN]) (ADJUSTOFFSETS [LAMBDA (WINDOW XDELTA YDELTA) (* ; "Edited 16-Feb-94 12:27 by nilsson") (PROG [(DSP (WINDOWPROP WINDOW 'DSP] (* ;  "determine the change in offsets caused by the scroll. and redisplay the graph.") (WYOFFSET YDELTA DSP) (WXOFFSET XDELTA DSP) - (RETURN]) - -(CREATESCROLLINGW + (RETURN]) (CREATESCROLLINGW [LAMBDA (TITLE BORDER) (* ; "Edited 16-Feb-94 12:27 by nilsson") (WINDOWPROP (CREATEW NIL TITLE BORDER) 'SCROLLFN - (FUNCTION SCROLLBYREPAINTFN]) - -(IN/SCROLL/BAR? + (FUNCTION SCROLLBYREPAINTFN]) (IN/SCROLL/BAR? [LAMBDA (WINDOW X Y) (* ; "Edited 16-Feb-94 12:27 by nilsson") (* ;  "is X, Y in the scroll bar for WINDOW?") @@ -325,165 +267,15 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (T (\DECODE.EXTENT.USE EXTENTUSE))) 'LIMIT] (T (EXTENDPASTHORIZBOUNDARIES (DSPCLIPPINGREGION NIL WINDOW) - EXTENT]) - -(RELDSPXOFFSET + EXTENT]) (RELDSPXOFFSET [LAMBDA (DX DISPLAYSTREAM) (* ; "Edited 16-Feb-94 12:28 by nilsson") (* ; "relative offsetting function.") (DSPXOFFSET (IPLUS DX (DSPXOFFSET NIL DISPLAYSTREAM)) - DISPLAYSTREAM]) - -(RELDSPYOFFSET + DISPLAYSTREAM]) (RELDSPYOFFSET [LAMBDA (DY DISPLAYSTREAM) (* ; "Edited 16-Feb-94 12:28 by nilsson") (* ; "relative offsetting function.") (DSPYOFFSET (IPLUS DY (DSPYOFFSET NIL DISPLAYSTREAM)) - DISPLAYSTREAM]) - -(SCROLL.HANDLER - [LAMBDA (WINDOW) (* ; "Edited 16-Feb-94 12:29 by nilsson") - - (* ;; "cursor has moved into scroll region. region of a window that has a scrollfn and has been IN/SCROLL/BAR? Handle interaction to determine type of scroll, if any, desired.") - (* ; - "returns non-NIL if scrolling was applicable.") - (PROG (SCROLLREG SCROLLW BUTTON DIRECTION SCROLLCURSOR LEFTCURSOR RIGHTCURSOR MIDDLECURSOR - TIMEDOWN CONTINUOUSSCROLL? TIMEIN TIMEINTIMER) - (* ; - "create a window as the easiest thing to do. Fairly inefficient.") - - (* ;; "if the main window is not open, it was probably closed before we got control here. Don't do anything.") - - (OR (OPENWP WINDOW) - (RETURN)) - (GETMOUSESTATE) - (COND - ((AND (INSIDE? (SETQ SCROLLREG (fetch (WINDOW VERTSCROLLREG) of WINDOW)) - LASTMOUSEX LASTMOUSEY) - (PROGN (DISMISS SCROLLWAITTIME) - (GETMOUSESTATE) - (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY))) - [COND - ((SETQ SCROLLW (fetch (WINDOW VERTSCROLLWINDOW) of WINDOW)) - (* ; - "if there is one already, reopen it.") - (OPENW SCROLLW)) - ((SETQ SCROLLW (replace (WINDOW VERTSCROLLWINDOW) of WINDOW - with (CREATEW SCROLLREG NIL 2] - (SETQ DIRECTION 'VERT) - (SETQ SCROLLCURSOR VertScrollCursor) - (SETQ LEFTCURSOR ScrollUpCursor) - (SETQ RIGHTCURSOR ScrollDownCursor) - (SETQ MIDDLECURSOR VertThumbCursor)) - ((AND (INSIDE? (SETQ SCROLLREG (fetch (WINDOW HORIZSCROLLREG) of WINDOW)) - LASTMOUSEX LASTMOUSEY) - (PROGN (DISMISS SCROLLWAITTIME) - (GETMOUSESTATE) - (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY))) - [COND - ((SETQ SCROLLW (fetch (WINDOW HORIZSCROLLWINDOW) of WINDOW)) - (* ; - "if there is one already, reopen it.") - (OPENW SCROLLW)) - ((SETQ SCROLLW (replace (WINDOW HORIZSCROLLWINDOW) of WINDOW - with (CREATEW SCROLLREG NIL 2] - (SETQ DIRECTION 'HORIZ) - (SETQ SCROLLCURSOR HorizScrollCursor) - (SETQ LEFTCURSOR ScrollLeftCursor) - (SETQ MIDDLECURSOR HorizThumbCursor) - (SETQ RIGHTCURSOR ScrollRightCursor)) - (T (* ; "moved out quickly") - (RETURN NIL))) - (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW) - - (* ;; "set up the timer for when to bring the window to the top. This gives the user a chance to notice that the scroll bar has come up and get out of it if it was unintentional.") - - (SETQ TIMEIN (SETUPTIMER 1200)) - (RETURN (RESETFORM (CURSOR SCROLLCURSOR) - (PROG NIL - LP (GETMOUSESTATE) - (COND - ((NOT (OPENWP WINDOW)) (* ; - "the user closed the window, quit.") - (CLOSEW SCROLLW) - (SETQ \LastInWindow NIL) - (RETURN T))) - (COND - ((AND TIMEIN (TIMEREXPIRED? TIMEIN)) - - (* ;; "after a little while, bring the window to the top. This avoids bringing it up if nothing is happening.") - - (SETQ TIMEIN NIL) - (TOTOPW WINDOW))) - (COND - ((NOT (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY)) - (* ; - "if cursor is no longer in scroll region quit.") - (CLOSEW SCROLLW) - - (* ;; "if the mouse is in the window, set last in window so window will get control again. If it is outside, don't set it so that the cursoroutfn for WINDOW will get called.") - - (AND (INSIDE? (WINDOWPROP WINDOW 'REGION) - LASTMOUSEX LASTMOUSEY) - (SETQ \LastInWindow NIL)) - (RETURN T))) (* ; - "bring the scroll window to the top so that it will be visible.") - (TOTOPW SCROLLW) - [COND - [(LASTMOUSESTATE UP) (* ; - "no buttons down; if there was one down, take action; otherwise, wait for one to go down.") - (COND - (BUTTON (COND - (CONTINUOUSSCROLL? - (* ; - "were continuously scrolling, stop it.") - (SETQ CONTINUOUSSCROLL? NIL)) - (T (\SCROLL.HANDLER.DOIT WINDOW BUTTON DIRECTION - SCROLLREG LASTMOUSEX LASTMOUSEY) - (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION - WINDOW))) - (CURSOR SCROLLCURSOR) - (SETQ BUTTON) (* ; - "if a button went up, reset the timedown for scrolling.") - (SETQ TIMEDOWN) - (SETQ CONTINUOUSSCROLL? NIL)) - (T (BLOCK] - [(LASTMOUSESTATE (OR LEFT RIGHT)) - (COND - ((AND (LASTMOUSESTATE LEFT) - (NEQ BUTTON 'LEFT)) - (* ; "LEFT button just when down.") - (SETQ BUTTON 'LEFT) - (SETQ TIMEDOWN (CLOCK 0)) - (CURSOR LEFTCURSOR)) - ((AND (LASTMOUSESTATE RIGHT) - (NEQ BUTTON 'RIGHT)) - (* ; "RIGHT button just when down.") - (SETQ BUTTON 'RIGHT) - (SETQ TIMEDOWN (CLOCK 0)) - (CURSOR RIGHTCURSOR)) - ((AND CONTINUOUSSCROLL? (\CLOCKGREATERP TIMEDOWN - WAITBETWEENSCROLLTIME)) - (* ; - "button is still down, keep scrolling.") - (* ; - "note time before calling scroll fn so time to display is included in the wait time.") - (SETQ TIMEDOWN (\CLOCK0 TIMEDOWN)) - (\SCROLL.HANDLER.DOIT WINDOW BUTTON DIRECTION SCROLLREG - LASTMOUSEX LASTMOUSEY T) - (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW)) - ((\CLOCKGREATERP TIMEDOWN WAITBEFORESCROLLTIME) - (* ; - "has enough time past to start continuous scroll?") - (SETQ CONTINUOUSSCROLL? T] - ((LASTMOUSESTATE MIDDLE) - (COND - ((NEQ BUTTON 'MIDDLE) (* ; "MIDDLE button just when down.") - (SETQ BUTTON 'MIDDLE) (* ; - "don't keep track of time down for middle buttons.") - (CURSOR MIDDLECURSOR)) - (T NIL] - (GO LP]) - -(\SCROLL.HANDLER.DOIT + DISPLAYSTREAM]) (SCROLL.HANDLER [LAMBDA (WINDOW) (* ; "Edited 17-Feb-2021 13:48 by rmk:") (* ;  "Edited 16-Feb-94 12:29 by nilsson") (* ;; "cursor has moved into scroll region. region of a window that has a scrollfn and has been IN/SCROLL/BAR? Handle interaction to determine type of scroll, if any, desired.") (* ;  "returns non-NIL if scrolling was applicable.") (PROG (SCROLLREG SCROLLW BUTTON DIRECTION SCROLLCURSOR LEFTCURSOR RIGHTCURSOR MIDDLECURSOR TIMEDOWN CONTINUOUSSCROLL? TIMEIN TIMEINTIMER) (* ;  "create a window as the easiest thing to do. Fairly inefficient.") (* ;; "if the main window is not open, it was probably closed before we got control here. Don't do anything.") (OR (OPENWP WINDOW) (RETURN)) (GETMOUSESTATE) (COND ((AND (INSIDE? (SETQ SCROLLREG (fetch (WINDOW VERTSCROLLREG) of WINDOW)) LASTMOUSEX LASTMOUSEY) (PROGN (DISMISS SCROLLWAITTIME) (GETMOUSESTATE) (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY))) [COND ((SETQ SCROLLW (fetch (WINDOW VERTSCROLLWINDOW) of WINDOW)) (* ;  "if there is one already, reopen it.") (OPENW SCROLLW)) ((SETQ SCROLLW (replace (WINDOW VERTSCROLLWINDOW) of WINDOW with (CREATEW SCROLLREG NIL 2))) (* ;;  "RMK: So that the scroll bar is recognizable and connected (unreferenced) to its scrollee window") (WINDOWPROP SCROLLW 'VERTICALSCROLLBARFOR (LOC WINDOW] (SETQ DIRECTION 'VERT) (SETQ SCROLLCURSOR VertScrollCursor) (SETQ LEFTCURSOR ScrollUpCursor) (SETQ RIGHTCURSOR ScrollDownCursor) (SETQ MIDDLECURSOR VertThumbCursor)) ((AND (INSIDE? (SETQ SCROLLREG (fetch (WINDOW HORIZSCROLLREG) of WINDOW)) LASTMOUSEX LASTMOUSEY) (PROGN (DISMISS SCROLLWAITTIME) (GETMOUSESTATE) (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY))) [COND ((SETQ SCROLLW (fetch (WINDOW HORIZSCROLLWINDOW) of WINDOW)) (* ;  "if there is one already, reopen it.") (OPENW SCROLLW)) ((SETQ SCROLLW (replace (WINDOW HORIZSCROLLWINDOW) of WINDOW with (CREATEW SCROLLREG NIL 2))) (WINDOWPROP SCROLLW 'HORIZONTALSCROLLBARFOR (LOC WINDOW] (SETQ DIRECTION 'HORIZ) (SETQ SCROLLCURSOR HorizScrollCursor) (SETQ LEFTCURSOR ScrollLeftCursor) (SETQ MIDDLECURSOR HorizThumbCursor) (SETQ RIGHTCURSOR ScrollRightCursor)) (T (* ; "moved out quickly") (RETURN NIL))) (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW) (* ;; "set up the timer for when to bring the window to the top. This gives the user a chance to notice that the scroll bar has come up and get out of it if it was unintentional.") (SETQ TIMEIN (SETUPTIMER 1200)) (RETURN (RESETFORM (CURSOR SCROLLCURSOR) (PROG NIL LP (GETMOUSESTATE) (COND ((NOT (OPENWP WINDOW)) (* ;  "the user closed the window, quit.") (CLOSEW SCROLLW) (SETQ \LastInWindow NIL) (RETURN T))) (COND ((AND TIMEIN (TIMEREXPIRED? TIMEIN)) (* ;; "after a little while, bring the window to the top. This avoids bringing it up if nothing is happening.") (SETQ TIMEIN NIL) (TOTOPW WINDOW))) (COND ((NOT (INSIDE? SCROLLREG LASTMOUSEX LASTMOUSEY)) (* ;  "if cursor is no longer in scroll region quit.") (CLOSEW SCROLLW) (* ;; "if the mouse is in the window, set last in window so window will get control again. If it is outside, don't set it so that the cursoroutfn for WINDOW will get called.") (AND (INSIDE? (WINDOWPROP WINDOW 'REGION) LASTMOUSEX LASTMOUSEY) (SETQ \LastInWindow NIL)) (RETURN T))) (* ;  "bring the scroll window to the top so that it will be visible.") (TOTOPW SCROLLW) [COND [(LASTMOUSESTATE UP) (* ;  "no buttons down; if there was one down, take action; otherwise, wait for one to go down.") (COND (BUTTON (COND (CONTINUOUSSCROLL? (* ;  "were continuously scrolling, stop it.") (SETQ CONTINUOUSSCROLL? NIL)) (T (\SCROLL.HANDLER.DOIT WINDOW BUTTON DIRECTION SCROLLREG LASTMOUSEX LASTMOUSEY) (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW))) (CURSOR SCROLLCURSOR) (SETQ BUTTON) (* ;  "if a button went up, reset the timedown for scrolling.") (SETQ TIMEDOWN) (SETQ CONTINUOUSSCROLL? NIL)) (T (BLOCK] [(LASTMOUSESTATE (OR LEFT RIGHT)) (COND ((AND (LASTMOUSESTATE LEFT) (NEQ BUTTON 'LEFT)) (* ; "LEFT button just when down.") (SETQ BUTTON 'LEFT) (SETQ TIMEDOWN (CLOCK 0)) (CURSOR LEFTCURSOR)) ((AND (LASTMOUSESTATE RIGHT) (NEQ BUTTON 'RIGHT)) (* ; "RIGHT button just when down.") (SETQ BUTTON 'RIGHT) (SETQ TIMEDOWN (CLOCK 0)) (CURSOR RIGHTCURSOR)) ((AND CONTINUOUSSCROLL? (\CLOCKGREATERP TIMEDOWN WAITBETWEENSCROLLTIME)) (* ;  "button is still down, keep scrolling.") (* ;  "note time before calling scroll fn so time to display is included in the wait time.") (SETQ TIMEDOWN (\CLOCK0 TIMEDOWN)) (\SCROLL.HANDLER.DOIT WINDOW BUTTON DIRECTION SCROLLREG LASTMOUSEX LASTMOUSEY T) (\UPDATE.EXTENT.IMAGE SCROLLW DIRECTION WINDOW)) ((\CLOCKGREATERP TIMEDOWN WAITBEFORESCROLLTIME) (* ;  "has enough time past to start continuous scroll?") (SETQ CONTINUOUSSCROLL? T] ((LASTMOUSESTATE MIDDLE) (COND ((NEQ BUTTON 'MIDDLE) (* ; "MIDDLE button just when down.") (SETQ BUTTON 'MIDDLE) (* ;  "don't keep track of time down for middle buttons.") (CURSOR MIDDLECURSOR)) (T NIL] (GO LP]) (\SCROLL.HANDLER.DOIT [LAMBDA (WINDOW BUTTON DIRECTION SCROLLREGION XPOS YPOS CONTINUOUS?) (* ; "Edited 16-Feb-94 12:29 by nilsson") @@ -548,9 +340,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (IPLUS 4 SIZEOFORIGIN]) (SHOULDNT))) (T 0)) - CONTINUOUS?]) - -(\DECODE.EXTENT.USE + CONTINUOUS?]) (\DECODE.EXTENT.USE [LAMBDA (EXTENTUSE) (* ; "Edited 16-Feb-94 12:30 by nilsson") (* ;;; "decodes an indicator of how the extent should be used to limit scrolling.") @@ -560,9 +350,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r ((LIMIT T + - +-) EXTENTUSE) (-+ '+-) - T]) - -(\UPDATE.EXTENT.IMAGE + T]) (\UPDATE.EXTENT.IMAGE [LAMBDA (SCROLLBARW DIRECTION SCROLLINGW) (* ; "Edited 16-Feb-94 12:32 by nilsson") (* ;  "paints the appropriate grey region in the scrolling bar window.") @@ -634,40 +422,30 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r 'TEXTURE 'REPLACE (OR (TEXTUREP SCROLLBARSHADE) - 32800]) - -(EXTENDPASTHORIZBOUNDARIES + 32800]) (EXTENDPASTHORIZBOUNDARIES [LAMBDA (VIEW EXTENT) (* ; "Edited 16-Feb-94 12:32 by nilsson") (* ;  "does VIEW entirely cover the hoizontal dimensions of EXTENT?") (OR (IGREATERP (fetch (REGION LEFT) of VIEW) (fetch (REGION LEFT) of EXTENT)) (IGREATERP (fetch (REGION RIGHT) of EXTENT) - (fetch (REGION RIGHT) of VIEW]) - -(EXTENDPASTVERTBOUNDARIES + (fetch (REGION RIGHT) of VIEW]) (EXTENDPASTVERTBOUNDARIES [LAMBDA (VIEW EXTENT) (* ; "Edited 16-Feb-94 12:33 by nilsson") (* ;  "does VIEW entirely cover the vertical dimensions of EXTENT?") (OR (IGREATERP (fetch (REGION BOTTOM) of VIEW) (fetch (REGION BOTTOM) of EXTENT)) (IGREATERP (fetch (REGION TOP) of EXTENT) - (fetch (REGION TOP) of VIEW]) - -(REDISPLAYW + (fetch (REGION TOP) of VIEW]) (REDISPLAYW [LAMBDA (WINDOW REGION ALWAYSFLG) (WINDOWOP 'REDISPLAYFN (fetch (WINDOW SCREEN) of WINDOW) - WINDOW REGION ALWAYSFLG]) - -(FILLWITHBACKGROUND + WINDOW REGION ALWAYSFLG]) (FILLWITHBACKGROUND [LAMBDA (WIN REG) (* ; "Edited 16-Feb-94 12:33 by nilsson") (* ;  "fills a window with its background. This is the default window repainting function.") (DSPFILL REG (DSPTEXTURE NIL WIN) 'REPLACE - (WINDOWPROP WIN 'DSP]) - -(UPDATE/SCROLL/REG + (WINDOWPROP WIN 'DSP]) (UPDATE/SCROLL/REG [LAMBDA (WINDOW) (* ; "Edited 16-Feb-94 12:34 by nilsson") (* ;  "updates the scroll region field of the WINDOW") @@ -706,23 +484,17 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r of IMAGEREG) SCROLLBARWIDTH)) WIDTH _ (fetch (REGION WIDTH) of IMAGEREG) - HEIGHT _ SCROLLBARWIDTH]) - -(WTODSX + HEIGHT _ SCROLLBARWIDTH]) (WTODSX [LAMBDA (WX WINDOW) (* ; "Edited 16-Feb-94 12:34 by nilsson") (* ;; "converts from the window natural coordinates which have 0,0 at lower left corner of the window and the displaystreams coordinates.") - (IPLUS WX (fetch (REGION LEFT) of (DSPCLIPPINGREGION NIL (fetch DSP of WINDOW]) - -(WTODSY + (IPLUS WX (fetch (REGION LEFT) of (DSPCLIPPINGREGION NIL (fetch DSP of WINDOW]) (WTODSY [LAMBDA (WY WINDOW) (* ; "Edited 16-Feb-94 12:34 by nilsson") (* ;; "converts from the window natural coordinates which have 0,0 at lower left corner of the window and the displaystreams coordinates.") - (IPLUS WY (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL (fetch DSP of WINDOW]) - -(WXOFFSET + (IPLUS WY (fetch (REGION BOTTOM) of (DSPCLIPPINGREGION NIL (fetch DSP of WINDOW]) (WXOFFSET [LAMBDA (DX WINDOW) (* ; "Edited 16-Feb-94 12:26 by nilsson") (* ;; "offsets a displaystream by a given delta but leaves its clipping region where it was. Used for offsetting display streams under window.") @@ -738,9 +510,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (add (fetch (REGION LEFT) of CR) (IMINUS DX)) (* ;  "recall DSPCLIPPINGREGION to update dependent fields in DS.") - (DSPCLIPPINGREGION CR DS))))]) - -(WYOFFSET + (DSPCLIPPINGREGION CR DS))))]) (WYOFFSET [LAMBDA (DY WINDOW) (* ; "Edited 16-Feb-94 12:26 by nilsson") (* ;; "offsets a displaystream by a given delta but leaves its clipping region where it was. Used for offsetting display streams under window.") @@ -756,15 +526,11 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (add (fetch (REGION BOTTOM) of CR) (IMINUS DY)) (* ;  "recall DSPCLIPPINGREGION to update dependent fields in DS.") - (DSPCLIPPINGREGION CR DS))))]) - -(BITMAPSCROLLFN + (DSPCLIPPINGREGION CR DS))))]) (BITMAPSCROLLFN [LAMBDA (WINDOW XDELTA YDELTA) (* ; "Edited 16-Feb-94 12:34 by nilsson") (* ; "scrolls a bitmap under a window") (SCROLLBITMAP (WINDOWPROP WINDOW 'BITMAP) - WINDOW XDELTA YDELTA]) - -(SCROLLBITMAP + WINDOW XDELTA YDELTA]) (SCROLLBITMAP [LAMBDA (BITMAP WINDOW XDELTA YDELTA) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;  "scrolls a bitmap under a window.") @@ -785,9 +551,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (IDIFFERENCE (fetch (REGION WIDTH) of REGION) (fetch (BITMAP BITMAPWIDTH) of BITMAP))) DSP) (* ; "stuff new image over old") - (BITBLT BITMAP 0 0 DSP]) - -(REDISPLAYBITMAP + (BITBLT BITMAP 0 0 DSP]) (REDISPLAYBITMAP [LAMBDA (BITMAP WINDOW) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;; "blts a bitmap into a window so that the lower left corner of the bitmap is in the lower left corner of the window.") @@ -798,9 +562,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r WREGION) (SETQ WREGION (DSPCLIPPINGREGION NIL DSP)) (RETURN (BITBLT BITMAP 0 0 DSP (fetch (REGION LEFT) of WREGION) - (fetch (REGION BOTTOM) of WREGION]) - -(ULREDISPLAYBITMAP + (fetch (REGION BOTTOM) of WREGION]) (ULREDISPLAYBITMAP [LAMBDA (BITMAP WNEW) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;; "blts a bitmap into a window so that the upper left corner of the bitmap is in the upper left corner of the window.") @@ -813,24 +575,18 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (RETURN (BITBLT BITMAP 0 0 DSP (fetch (REGION LEFT) of REGION) (IDIFFERENCE (IPLUS (fetch (REGION BOTTOM) of REGION) (fetch (REGION HEIGHT) of REGION)) - (fetch BITMAPHEIGHT of BITMAP]) - -(EXTENDEXTENT + (fetch BITMAPHEIGHT of BITMAP]) (EXTENDEXTENT [LAMBDA (WINDOW INCLUDEREGION) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;  "destructively changes the EXTENT region of a WINDOW to include INCLUDEREGION") (PROG [(EXTENT (WINDOWPROP WINDOW 'EXTENT] (RETURN (COND (EXTENT (EXTENDREGION EXTENT INCLUDEREGION)) - (T (WINDOWPROP WINDOW 'EXTENT (create REGION using INCLUDEREGION]) - -(WIDTHIFWINDOW + (T (WINDOWPROP WINDOW 'EXTENT (create REGION using INCLUDEREGION]) (WIDTHIFWINDOW [LAMBDA (INTERIORWIDTH BORDER) (* ; "Edited 16-Feb-94 12:35 by nilsson") (* ;  "returns the exterior width of a window with interior dimension INTERIORWIDTH") - (IPLUS INTERIORWIDTH (ITIMES 2 (OR BORDER WBorder]) - -(HEIGHTIFWINDOW + (IPLUS INTERIORWIDTH (ITIMES 2 (OR BORDER WBorder]) (HEIGHTIFWINDOW [LAMBDA (INTERIORHEIGHT TITLEFLG BORDER SCREEN) (* ; "Edited 16-Feb-94 12:36 by nilsson") (* ;  "returns the exterior height of a window which has interior height dimension INTERIORHEIGHT") @@ -839,16 +595,7 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r [TITLEFLG (IMINUS (DSPLINEFEED NIL (fetch (SCREEN SCTITLEDS) of SCREEN] (T 0)) - (ITIMES 2 (OR BORDER WBorder]) -) - - - -(* ; "this function should be on LLDISPLAY but Ron has it checked out. Move it later - rrb.") - -(DEFINEQ - -(\DSPUNTRANSFORMREGION + (ITIMES 2 (OR BORDER WBorder]) ) (* ; "this function should be on LLDISPLAY but Ron has it checked out. Move it later - rrb.") (DEFINEQ (\DSPUNTRANSFORMREGION [LAMBDA (REGION DISPLAYDATA) (* rmk%: "30-AUG-83 13:19") (* translates a region from  destination coordinates into display @@ -858,56 +605,4 @@ Copyright (c) 1986, 1990, 1993, 1994 by Venue & Xerox Corporation. All rights r (\DSPUNTRANSFORMY (fetch (REGION BOTTOM) of REGION) DISPLAYDATA) (fetch (REGION WIDTH) of REGION) - (fetch (REGION HEIGHT) of REGION]) -) -(RPAQ VertScrollCursor (CURSORCREATE (QUOTE #*(16 16)@A@@@CH@@CH@@GL@@GL@@ON@@CH@@CH@@CH@@CH@@ON@@GL@@GL@@CH@@CH@@A@@ -) (QUOTE NIL) 7 15)) -(RPAQ ScrollUpCursor (CURSORCREATE (QUOTE #*(16 16)@A@@@CH@@CH@@GL@@GL@@ON@@ON@AOO@AOO@@CH@@CH@@CH@@CH@@CH@@CH@@CH@ -) (QUOTE NIL) 7 15)) -(RPAQ ScrollDownCursor (CURSORCREATE (QUOTE #*(16 16)@CH@@CH@@CH@@CH@@CH@@CH@@CH@AOO@AOO@@ON@@ON@@GL@@GL@@CH@@CH@@A@@ -) (QUOTE NIL) 7 15)) -(RPAQ HorizScrollCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@HB@AHC@CHCHGHCLOOONOOONGHCLCHCHAHC@@HB@ -) (QUOTE NIL) 7 5)) -(RPAQ ScrollLeftCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@@H@@CH@@OH@COH@OOOOOOOOCOH@@OH@@CH@@@H@ -) (QUOTE NIL) 8 5)) -(RPAQ ScrollRightCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@A@@@AL@@AO@@AOLOOOOOOOO@AOL@AO@@AL@@A@@ -) (QUOTE NIL) 7 5)) -(RPAQ VertThumbCursor (CURSORCREATE (QUOTE #*(16 16)@@@@OH@@@@@@OO@@@@@@OON@@@@@OOOH@@@@OON@@@@@OO@@@@@@OH@@@@@@@@@@ -) (QUOTE NIL) 6 8)) -(RPAQ HorizThumbCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@B@@@B@@@JH@@JH@@JH@BJJ@BJJ@BJJ@JJJHJJJHJJJHJJJHJJJH -) (QUOTE NIL) 6 6)) -(RPAQ WAITINGCURSOR (CURSORCREATE (QUOTE #*(16 16)OOONL@@FF@ALCMGHAOO@@ON@@FL@@CH@@BH@@FL@@MF@AIC@CGMHFGNLOOONOOON -) (QUOTE NIL) 7 8)) -(DECLARE%: DOEVAL@COMPILE DONTCOPY - -(GLOBALVARS \LastInWindow VertScrollCursor ScrollUpCursor ScrollDownCursor ScrollLeftCursor - ScrollRightCursor HorizScrollCursor) -) - -(RPAQ? SCROLLBARWIDTH 24) - -(RPAQ? SCROLLWAITTIME 100) - -(RPAQ? SCROLLBARSHADE 32800) - -(RPAQ? WAITBEFORESCROLLTIME 750) - -(RPAQ? WAITBETWEENSCROLLTIME 100) -(DECLARE%: DONTEVAL@LOAD DOCOPY - -(ADDTOVAR GLOBALVARS SCROLLBARWIDTH SCROLLWAITTIME SCROLLBARSHADE WAITBEFORESCROLLTIME - WAITBETWEENSCROLLTIME WAITINGCURSOR) -) -(PUTPROPS WINDOWSCROLL COPYRIGHT ("Venue & Xerox Corporation" 1986 1990 1993 1994)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (2653 51801 (SCROLLW 2663 . 3186) (SCROLLBYREPAINTFN 3188 . 16871) (ADJUSTOFFSETS 16873 - . 17264) (CREATESCROLLINGW 17266 . 17497) (IN/SCROLL/BAR? 17499 . 20160) (RELDSPXOFFSET 20162 . 20473 -) (RELDSPYOFFSET 20475 . 20786) (SCROLL.HANDLER 20788 . 30242) (\SCROLL.HANDLER.DOIT 30244 . 34675) ( -\DECODE.EXTENT.USE 34677 . 35019) (\UPDATE.EXTENT.IMAGE 35021 . 40034) (EXTENDPASTHORIZBOUNDARIES -40036 . 40575) (EXTENDPASTVERTBOUNDARIES 40577 . 41115) (REDISPLAYW 41117 . 41274) (FILLWITHBACKGROUND - 41276 . 41672) (UPDATE/SCROLL/REG 41674 . 44559) (WTODSX 44561 . 44927) (WTODSY 44929 . 45297) ( -WXOFFSET 45299 . 46264) (WYOFFSET 46266 . 47235) (BITMAPSCROLLFN 47237 . 47550) (SCROLLBITMAP 47552 . -48907) (REDISPLAYBITMAP 48909 . 49506) (ULREDISPLAYBITMAP 49508 . 50280) (EXTENDEXTENT 50282 . 50813) -(WIDTHIFWINDOW 50815 . 51170) (HEIGHTIFWINDOW 51172 . 51799)) (51904 52636 (\DSPUNTRANSFORMREGION -51914 . 52634))))) -STOP + (fetch (REGION HEIGHT) of REGION]) ) (RPAQ VertScrollCursor (CURSORCREATE (QUOTE #*(16 16)@A@@@CH@@CH@@GL@@GL@@ON@@CH@@CH@@CH@@CH@@ON@@GL@@GL@@CH@@CH@@A@@ ) (QUOTE NIL) 7 15)) (RPAQ ScrollUpCursor (CURSORCREATE (QUOTE #*(16 16)@A@@@CH@@CH@@GL@@GL@@ON@@ON@AOO@AOO@@CH@@CH@@CH@@CH@@CH@@CH@@CH@ ) (QUOTE NIL) 7 15)) (RPAQ ScrollDownCursor (CURSORCREATE (QUOTE #*(16 16)@CH@@CH@@CH@@CH@@CH@@CH@@CH@AOO@AOO@@ON@@ON@@GL@@GL@@CH@@CH@@A@@ ) (QUOTE NIL) 7 15)) (RPAQ HorizScrollCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@HB@AHC@CHCHGHCLOOONOOONGHCLCHCHAHC@@HB@ ) (QUOTE NIL) 7 5)) (RPAQ ScrollLeftCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@@H@@CH@@OH@COH@OOOOOOOOCOH@@OH@@CH@@@H@ ) (QUOTE NIL) 8 5)) (RPAQ ScrollRightCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@@@@@@@@@@@@@A@@@AL@@AO@@AOLOOOOOOOO@AOL@AO@@AL@@A@@ ) (QUOTE NIL) 7 5)) (RPAQ VertThumbCursor (CURSORCREATE (QUOTE #*(16 16)@@@@OH@@@@@@OO@@@@@@OON@@@@@OOOH@@@@OON@@@@@OO@@@@@@OH@@@@@@@@@@ ) (QUOTE NIL) 6 8)) (RPAQ HorizThumbCursor (CURSORCREATE (QUOTE #*(16 16)@@@@@@@@@@@@@B@@@B@@@JH@@JH@@JH@BJJ@BJJ@BJJ@JJJHJJJHJJJHJJJHJJJH ) (QUOTE NIL) 6 6)) (RPAQ WAITINGCURSOR (CURSORCREATE (QUOTE #*(16 16)OOONL@@FF@ALCMGHAOO@@ON@@FL@@CH@@BH@@FL@@MF@AIC@CGMHFGNLOOONOOON ) (QUOTE NIL) 7 8)) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS \LastInWindow VertScrollCursor ScrollUpCursor ScrollDownCursor ScrollLeftCursor ScrollRightCursor HorizScrollCursor) ) (RPAQ? SCROLLBARWIDTH 24) (RPAQ? SCROLLWAITTIME 100) (RPAQ? SCROLLBARSHADE 32800) (RPAQ? WAITBEFORESCROLLTIME 750) (RPAQ? WAITBETWEENSCROLLTIME 100) (DECLARE%: DONTEVAL@LOAD DOCOPY (ADDTOVAR GLOBALVARS SCROLLBARWIDTH SCROLLWAITTIME SCROLLBARSHADE WAITBEFORESCROLLTIME WAITBETWEENSCROLLTIME WAITINGCURSOR) ) (PUTPROPS WINDOWSCROLL COPYRIGHT ("Venue & Xerox Corporation" 1986 1990 1993 1994 2021)) (DECLARE%: DONTCOPY (FILEMAP (NIL (2131 51738 (SCROLLW 2141 . 2664) (SCROLLBYREPAINTFN 2666 . 16349) (ADJUSTOFFSETS 16351 . 16742) (CREATESCROLLINGW 16744 . 16975) (IN/SCROLL/BAR? 16977 . 19638) (RELDSPXOFFSET 19640 . 19951 ) (RELDSPYOFFSET 19953 . 20264) (SCROLL.HANDLER 20266 . 30179) (\SCROLL.HANDLER.DOIT 30181 . 34612) ( \DECODE.EXTENT.USE 34614 . 34956) (\UPDATE.EXTENT.IMAGE 34958 . 39971) (EXTENDPASTHORIZBOUNDARIES 39973 . 40512) (EXTENDPASTVERTBOUNDARIES 40514 . 41052) (REDISPLAYW 41054 . 41211) (FILLWITHBACKGROUND 41213 . 41609) (UPDATE/SCROLL/REG 41611 . 44496) (WTODSX 44498 . 44864) (WTODSY 44866 . 45234) ( WXOFFSET 45236 . 46201) (WYOFFSET 46203 . 47172) (BITMAPSCROLLFN 47174 . 47487) (SCROLLBITMAP 47489 . 48844) (REDISPLAYBITMAP 48846 . 49443) (ULREDISPLAYBITMAP 49445 . 50217) (EXTENDEXTENT 50219 . 50750) (WIDTHIFWINDOW 50752 . 51107) (HEIGHTIFWINDOW 51109 . 51736)) (51841 52573 (\DSPUNTRANSFORMREGION 51851 . 52571))))) STOP \ No newline at end of file diff --git a/sources/WINDOWSCROLL.LCOM b/sources/WINDOWSCROLL.LCOM index d279a7f5426d4e8f6c034e20a3b1cb876d41165b..3ea83382a93f7bb06657a633abe78d94d6dcecbb 100644 GIT binary patch delta 1315 zcmbVLzi-n}5N;_T5JUn|k+y(1j4CxlBER=+CpIWFBo49a*p=-xO;xE%Q`1Jcb>yU! z7NJN;upl9jCq|eUDOKloLrl#41uP8w2k;U*4gDboJXm-4?tS-tclUli`M&X{IE<3< zyuBF5EJlEc#EB9syj>V=mzuWMOh2kNoa$Oyb!$~8y=pHx_9jX2>E(JW9(d`dyYAKO zX1c6sIlXLV4P8|ecW?|C5aXGKN0C_;P)cHvL@)!9MbECetBty2FF|dky0&aL$0Z0a z7BX5+l?|x3*MKQ@>j5nY`E|zubCVWp0pj|M6Nv-^OVt*|iZFj4U?lNaB7})WCi03Z zXAL=H$vI$7(o0!A&6!ir?)F8u|4TLS9G65rS^^sVdcefr}6h~60dOaX8CzoTbjuR>6! zvODyAd*IDc;IUz5Pamu7)_i@WY9Gga9pb(mnBZ6r^l4cu0}%z7E?L1MO&j_&jUZ6< zERZA*rXop(Y|2(i>txUv3-iSpRWU6f0uTQFrQtEc@sKSUrfvYiDVWdF+fyvHS-*;} zwsDd`un1+qBngUUDmnQcV9de;*(&NKQ#LKSCx8(LImIk0rU^()9b_Up-GD6;$Pu=P zPj%TMmXheMTN#r5A_9B)ND-d%-;bhpiid)3D08}IWz=9#?q`gAM}xo~*GdPyw?7G)BZOMcb*4TGoVauQ+WlJ> NsVa4krQKZ14S#02*6=Iys{zy03Z_YU@6-@b2u ziWT9T-bm2OfQT;3x+Fd5t(_eN$<4~l;L4AKWD-STQVIK{5(de*AH_Z?i4Xo<-6uuh zi742;SkPp^qE3h|N<7@?N4Lh|`2hqY;CR~~g#H~sl2F|p&H_uN5)Xsk#2)~^K#{Ct zRhP6op$)1fujv8>WX1hOP!4f;F1(a=v|5`C#dq0yqir2;CXZM3n>r4P}$^l!AuyvN*H zdIlS(xlPlvt5-9cMhh}010nqte;sg5!@Sb;%trQL5en_9OX2P3YmQBeFpmA7f@n86 zOqjjSV@;s`SkMToh%T!-#yoIYJ~xBWu;SkyNAcvi)U3`=t1AbeEeGl6Ibr3mD7A9@ zmUa1qCAMBd_nDr#&7E-N;~926e+s5fzB?VxcK>`ov(FFhi$nWw=gjp_rcajceKb3H z{D1mi?)37b^mXp5bHB}5`R=p3@3O9+;-}7fcbZ;Y?J3#SKb8taR>8Syv^qc}6{xA} zu0aiNyEQ8W!!TU4+m=Z^AVhtb&#fU9YTGV#Tp*$d*J_qi+Y$k5IK7Zx-Io-|zP$q& zNnp09SvM{L(p0!&c($`m4eGJ3U z9blr)`vovoj@*4LYG74qmTi|!m9*G?3#hEjyRlO>JeJuX OH^2C>Smau!#k~RRG(9E&