(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED " 4-Sep-87 12:22:04" |{MCS:MCS:STANFORD}<LANE>REGION.;1| 13780
changes to%: (VARS REGIONCOMS))
(* "
Copyright (c) 1984, 1985, 1986, 1987 by Stanford University. All rights reserved.
")
(PRETTYCOMPRINT REGIONCOMS)
(RPAQQ REGIONCOMS ((FNS REGION.INIT ACTIVATEREGIONS DEACTIVATEREGIONS)
(MACROS ADDREGIONEVENT)
(FNS REGIONEVENTFN REGIONINFN REGIONMOVEDFN REGIONOUTFN REGIONREPAINTFN)
(INITVARS DISABLEFLG)
(GLOBALVARS DISABLEFLG)
(RECORDS REGIONEVENT)))
(DEFINEQ
(REGION.INIT
[LAMBDA (WINDOW REGIONEVENTLST SAVE?) (* cdl "25-Jun-85 09:34")
(PROG ((REGIONEVENT (create REGIONEVENT
REGIONREPAINTFN ← (WINDOWPROP WINDOW 'REPAINTFN (FUNCTION
REGIONREPAINTFN))
REGIONOUTFN ← (WINDOWPROP WINDOW 'CURSOROUTFN (FUNCTION REGIONOUTFN))
REGIONINFN ← (WINDOWPROP WINDOW 'CURSORINFN (FUNCTION REGIONINFN))
REGIONMOVEDFN ← (WINDOWPROP WINDOW 'CURSORMOVEDFN
(FUNCTION REGIONMOVEDFN))
REGIONBUTTONFN ← (WINDOWPROP WINDOW 'BUTTONEVENTFN
(FUNCTION REGIONEVENTFN))
REGIONFLAGS ← SAVE?)))
(if SAVE?
then (push REGIONEVENTLST REGIONEVENT))
(if REGIONEVENTLST
then (WINDOWPROP WINDOW 'REGIONEVENTLST REGIONEVENTLST))
(RETURN WINDOW])
(ACTIVATEREGIONS
[LAMBDA (FLAGS WINDOW) (* cdl "25-Jun-85 09:24")
(for REGIONEVENT in (WINDOWPROP WINDOW 'REGIONEVENTLST)
when [with REGIONEVENT REGIONEVENT (AND (NOT ACTIVEREGION)
(OR (EQ FLAGS T)
(for FLAG inside FLAGS
thereis (EQMEMB FLAG REGIONFLAGS]
do (with REGIONEVENT REGIONEVENT (SETQ ACTIVEREGION T])
(DEACTIVATEREGIONS
[LAMBDA (FLAGS WINDOW) (* cdl "25-Jun-85 09:23")
(for REGIONEVENT in (WINDOWPROP WINDOW 'REGIONEVENTLST)
when [with REGIONEVENT REGIONEVENT (AND ACTIVEREGION (OR (EQ FLAGS T)
(for FLAG inside FLAGS
thereis (EQMEMB FLAG REGIONFLAGS]
do (with REGIONEVENT REGIONEVENT (SETQ ACTIVEREGION NIL])
)
(DECLARE%: EVAL@COMPILE
(PUTPROPS ADDREGIONEVENT MACRO ((REGIONEVENT WINDOW)
(WINDOWADDPROP WINDOW 'REGIONEVENTLST REGIONEVENT)))
)
(DEFINEQ
(REGIONEVENTFN
[LAMBDA (DS) (* cdl "28-Oct-85 10:02")
(* Applies button function based on position of cursor in the displaystream)
(if (OR (NOT DISABLEFLG)
(EQMEMB DS DISABLEFLG))
then (PROG ((REGIONEVENTLST (WINDOWPROP DS 'REGIONEVENTLST))
(POSITION (CURSORPOSITION NIL DS)))
(if (NULL (bind FLG for REGIONEVENT in REGIONEVENTLST
when (with REGIONEVENT REGIONEVENT (AND ACTIVEREGION (REGIONP
EVENTREGION
)
(INSIDEP EVENTREGION POSITION
)))
do (with REGIONEVENT REGIONEVENT
(if REGIONBUTTONFN
then (APPLY* REGIONBUTTONFN DS POSITION EVENTREGION
REGIONEVENT)))
(SETQ FLG T) yield FLG))
then (bind (REGION ← (WINDOWPROP DS 'REGION)) for REGIONEVENT in
REGIONEVENTLST
when [with REGIONEVENT REGIONEVENT (AND ACTIVEREGION
(NOT (REGIONP EVENTREGION]
do (with REGIONEVENT REGIONEVENT
(if REGIONBUTTONFN
then (APPLY* REGIONBUTTONFN DS POSITION REGION
REGIONEVENT])
(REGIONINFN
[LAMBDA (DS) (* cdl "28-Oct-85 10:04")
(* Applies cursor in function based on position of cursor in the displaystream)
(if (OR (NOT DISABLEFLG)
(EQMEMB DS DISABLEFLG))
then (PROG ((POSITION (CURSORPOSITION NIL DS))
(REGIONEVENTLST (WINDOWPROP DS 'REGIONEVENTLST))
LASTREGIONS)
(if (NULL (bind FLG for REGIONEVENT in REGIONEVENTLST
when (with REGIONEVENT REGIONEVENT (AND ACTIVEREGION (REGIONP
EVENTREGION
)
(INSIDEP EVENTREGION POSITION
)))
do (with REGIONEVENT REGIONEVENT
(if REGIONINFN
then (APPLY* REGIONINFN DS EVENTREGION REGIONEVENT))
(push LASTREGIONS EVENTREGION))
(SETQ FLG T) yield FLG))
then [bind (REGION ← (WINDOWPROP DS 'REGION)) for REGIONEVENT in
REGIONEVENTLST
when [with REGIONEVENT REGIONEVENT (AND ACTIVEREGION
(NOT (REGIONP EVENTREGION]
do (with REGIONEVENT REGIONEVENT
(if REGIONINFN
then (APPLY* REGIONINFN DS REGION REGIONEVENT]
else (WINDOWPROP DS 'LASTEVENTREGIONS LASTREGIONS])
(REGIONMOVEDFN
[LAMBDA (DS) (* cdl "28-Oct-85 10:01")
(* Applies cursor moved function based on position of cursor in the
displaystream)
(if (OR (NULL DISABLEFLG)
(EQMEMB DS DISABLEFLG))
then (PROG ((REGIONEVENTLST (WINDOWPROP DS 'REGIONEVENTLST))
(LASTREGIONS (WINDOWPROP DS 'LASTEVENTREGIONS NIL))
(POSITION (CURSORPOSITION NIL DS))
INFLG OUTFLG MOVEDFLG)
[for REGIONEVENT in REGIONEVENTLST
do (with REGIONEVENT REGIONEVENT
(if (AND (REGIONP EVENTREGION)
(INSIDEP EVENTREGION POSITION))
then (if (FMEMB EVENTREGION LASTREGIONS)
then (if (AND ACTIVEREGION REGIONMOVEDFN)
then (APPLY* REGIONMOVEDFN DS POSITION
EVENTREGION REGIONEVENT))
(SETQ MOVEDFLG T)
else (if (AND ACTIVEREGION REGIONINFN)
then (APPLY* REGIONINFN DS EVENTREGION REGIONEVENT
))
(SETQ INFLG T))
(WINDOWADDPROP DS 'LASTEVENTREGIONS EVENTREGION)
elseif (FMEMB EVENTREGION LASTREGIONS)
then (if (AND ACTIVEREGION REGIONOUTFN)
then (APPLY* REGIONOUTFN DS EVENTREGION REGIONEVENT))
(SETQ OUTFLG T]
(bind (REGION ← (WINDOWPROP DS 'REGION)) for REGIONEVENT in REGIONEVENTLST
when [with REGIONEVENT REGIONEVENT (AND ACTIVEREGION (NOT (REGIONP EVENTREGION]
do (with REGIONEVENT REGIONEVENT (if (AND INFLG (NOT OUTFLG)
REGIONOUTFN)
then (APPLY* REGIONOUTFN DS REGION
REGIONEVENT)
elseif (AND OUTFLG (NOT INFLG)
REGIONINFN)
then (APPLY* REGIONINFN DS REGION
REGIONEVENT)
elseif (AND (NOT INFLG)
(NOT OUTFLG)
(NOT MOVEDFLG)
REGIONMOVEDFN)
then (APPLY* REGIONMOVEDFN DS POSITION
REGION REGIONEVENT])
(REGIONOUTFN
[LAMBDA (DS) (* cdl "28-Oct-85 09:59")
(* Applies cursor out function based on position of cursor in the displaystream)
(if (OR (NULL DISABLEFLG)
(EQMEMB DS DISABLEFLG))
then (PROG ((REGIONEVENTLST (WINDOWPROP DS 'REGIONEVENTLST))
(LASTREGIONS (WINDOWPROP DS 'LASTEVENTREGIONS NIL)))
(if LASTREGIONS
then [for REGIONEVENT in REGIONEVENTLST
when (with REGIONEVENT REGIONEVENT (AND ACTIVEREGION (REGIONP
EVENTREGION
)
(FMEMB EVENTREGION LASTREGIONS
)))
do (with REGIONEVENT REGIONEVENT
(if REGIONOUTFN
then (APPLY* REGIONOUTFN DS EVENTREGION REGIONEVENT]
else (bind (REGION ← (WINDOWPROP DS 'REGION)) for REGIONEVENT in REGIONEVENTLST
when [with REGIONEVENT REGIONEVENT (AND ACTIVEREGION (NOT (REGIONP
EVENTREGION]
do (with REGIONEVENT REGIONEVENT (if REGIONOUTFN
then (APPLY* REGIONOUTFN DS REGION
REGIONEVENT])
(REGIONREPAINTFN
[LAMBDA (DS) (* cdl "28-Oct-85 10:01")
(* Applies the various region repaint fns to the regions in windows region list)
(bind (REGION ← (WINDOWPROP DS 'REGION)) for REGIONEVENT in (WINDOWPROP DS 'REGIONEVENTLST)
do (with REGIONEVENT REGIONEVENT (if REGIONREPAINTFN
then (APPLY* REGIONREPAINTFN DS
(if (REGIONP EVENTREGION)
then EVENTREGION
else REGION)
REGIONEVENT])
)
(RPAQ? DISABLEFLG NIL)
(DECLARE%: DOEVAL@COMPILE DONTCOPY
(GLOBALVARS DISABLEFLG)
)
(DECLARE%: EVAL@COMPILE
(RECORD REGIONEVENT (EVENTREGION REGIONBUTTONFN REGIONMOVEDFN REGIONINFN REGIONOUTFN REGIONREPAINTFN
ACTIVEREGION REGIONFLAGS REGIONUSERDATA)
ACTIVEREGION ← T)
)
(PUTPROPS REGION COPYRIGHT ("Stanford University" 1984 1985 1986 1987))
(DECLARE%: DONTCOPY
(FILEMAP (NIL (647 2917 (REGION.INIT 657 . 1802) (ACTIVATEREGIONS 1804 . 2370) (DEACTIVATEREGIONS 2372
. 2915)) (3083 13356 (REGIONEVENTFN 3093 . 5153) (REGIONINFN 5155 . 7250) (REGIONMOVEDFN 7252 . 10684
) (REGIONOUTFN 10686 . 12558) (REGIONREPAINTFN 12560 . 13354)))))
STOP