(FILECREATED "20-Nov-84 13:44:59" {AZTEC}<TRILLIUM>BIRTHDAY84>RERELEASE>PRIMITIVE-ITEMTYPES.;3 59755  

      changes to:  (FNS DISPLAY.PRINT.REGION)

      previous date: "19-Nov-84 16:38:58" {AZTEC}<TRILLIUM>BIRTHDAY84>RERELEASE>PRIMITIVE-ITEMTYPES.;2
)


(* Copyright (c) 1984 by Xerox Corporation)

(PRETTYCOMPRINT PRIMITIVE-ITEMTYPESCOMS)

(RPAQQ PRIMITIVE-ITEMTYPESCOMS ((ITEMTYPES ARROW ARROW.TWO.HEADS BORDER BUTTON.SENSOR CIRCLE ELLIPSE 
					   FLASHING.SENSITIVE.REGION IMPLICATION 
					   IMPLICATION.CHANGE.FRAME INDICATOR INHIBITOR INIT.CELL 
					   INITIALIZATION INVERTING.SENSITIVE.REGION LIGHT LIGHT.BAR 
					   NUMERIC.CHECKER OPEN.WINDOW.SENSOR PICTURE 
					   POSITION.INDICATOR POSITION.SENSOR PRINT.REGION 
					   SENSITIVE.REGION SHADED.REGION SIMPLE.PROPOGATOR 
					   SLIDE.SENSOR STRAIGHT.LINE TIMEOUT)
	(P (COMPILE.INTERNAL.FNS.IF.NECESSARY))))
(READ.ITEMTYPE ARROW 5)
(\TYPE ITEM.TYPE NAME ARROW COMMENT  "An arrow between two locations" KIND ARTWORK PARAMETERS  ((\TYPE
 PARAMETER NAME TAIL TYPE  (POSITION) DEFAULT  (100 . 100) COMMENT  "The tail of the arrow")  (\TYPE 
PARAMETER NAME HEAD TYPE  (POSITION) DEFAULT  (200 . 200) COMMENT  "The head of the arrow")  (\TYPE 
PARAMETER NAME HEAD.ANGLE TYPE  (INTEGER) DEFAULT 20 COMMENT  "Angle between safter and edges of head"
)  (\TYPE PARAMETER NAME HEAD.LENGTH TYPE  (INTEGER) DEFAULT 20 COMMENT  
"Length of the edge of the head")  (\TYPE PARAMETER NAME WIDTH TYPE  (INTEGER) DEFAULT 2 COMMENT  
"Widths of the lines")) OTHER  (FNS  ((ANALYZE ANALYZE.ARROW)  (BOUNDING.BOX BOUNDING.BOX.ARROW)  (
SHOW SHOW.ARROW)  (RESET RESET.ARROW)  (NIL ARROW.HEAD.POSITIONS))) CLASSES  (ARTWORK))
(DEFINEQ

(ANALYZE.ARROW
(LAMBDA (ITEM) (* HaKo "17-Aug-84 13:18") (* DAHJr "16-MAR-83 13:24") (PROG ((TAIL (GET.PARAMQ ITEM 
TAIL ARROW)) (HEAD (GET.PARAMQ ITEM HEAD ARROW)) (HEAD.ANGLE (GET.PARAMQ ITEM HEAD.ANGLE ARROW)) (
HEAD.LENGTH (GET.PARAMQ ITEM HEAD.LENGTH ARROW))) (SET.FIELDQ ITEM HEADS (ARROW.HEAD.POSITIONS TAIL 
HEAD HEAD.ANGLE HEAD.LENGTH)))))

(BOUNDING.BOX.ARROW
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:16") (* DAHJr "10-NOV-83 20:44") (PROG ((TAIL (GET.PARAMQ ITEM 
TAIL ARROW)) (HEAD (GET.PARAMQ ITEM HEAD)) (HEADS (GET.FIELDQ ITEM HEADS)) LEFT BOTTOM RIGHT TOP) (
SETQ LEFT (MIN (fetch (POSITION XCOORD) of TAIL) (fetch (POSITION XCOORD) of HEAD) (fetch (POSITION 
XCOORD) of (CAR HEADS)) (fetch (POSITION XCOORD) of (CDR HEADS)))) (SETQ BOTTOM (MIN (fetch (POSITION 
YCOORD) of TAIL) (fetch (POSITION YCOORD) of HEAD) (fetch (POSITION YCOORD) of (CAR HEADS)) (fetch (
POSITION YCOORD) of (CDR HEADS)))) (SETQ RIGHT (MAX (fetch (POSITION XCOORD) of TAIL) (fetch (POSITION
 XCOORD) of HEAD) (fetch (POSITION XCOORD) of (CAR HEADS)) (fetch (POSITION XCOORD) of (CDR HEADS)))) 
(SETQ TOP (MAX (fetch (POSITION YCOORD) of TAIL) (fetch (POSITION YCOORD) of HEAD) (fetch (POSITION 
YCOORD) of (CAR HEADS)) (fetch (POSITION YCOORD) of (CDR HEADS)))) (RETURN (create REGION LEFT ← LEFT 
BOTTOM ← BOTTOM WIDTH ← (MAX (IDIFFERENCE RIGHT LEFT) 4) HEIGHT ← (MAX (IDIFFERENCE TOP BOTTOM) 4)))))
)

(SHOW.ARROW
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:18") (DECLARE (GLOBALVARS CURRENT.DSP)) (PROG ((TAIL (GET.PARAMQ 
ITEM TAIL ARROW)) (HEAD (GET.PARAMQ ITEM HEAD ARROW)) (HEAD.ANGLE (GET.PARAMQ ITEM HEAD.ANGLE ARROW)) 
(HEAD.LENGTH (GET.PARAMQ ITEM HEAD.LENGTH ARROW)) (WIDTH (GET.PARAMQ ITEM WIDTH ARROW)) (HEADS (
GET.FIELDQ ITEM HEADS))) (MOVETO (fetch (POSITION XCOORD) of TAIL) (fetch (POSITION YCOORD) of TAIL) 
CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of HEAD) (fetch (POSITION YCOORD) of HEAD) WIDTH NIL 
CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of (CAR HEADS)) (fetch (POSITION YCOORD) of (CAR HEADS))
 WIDTH NIL CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of (CDR HEADS)) (fetch (POSITION YCOORD) of (
CDR HEADS)) WIDTH NIL CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of HEAD) (fetch (POSITION YCOORD) 
of HEAD) WIDTH NIL CURRENT.DSP))))

(RESET.ARROW
(LAMBDA (ITEM) (* DAHJr "16-MAR-83 13:24") (SET.FIELDQ ITEM HEADS NIL)))

(ARROW.HEAD.POSITIONS
(LAMBDA (TAIL.POSITION HEAD.POSITION HEAD.ANGLE HEAD.LENGTH) (* edited: "16-MAR-83 11:56") (PROG (X0 
Y0 X1 Y1 DX DY COS.THETA LL SIN.THETA COS.RHO SIN.RHO XP1 YP1 XP2 YP2) (SETQ X0 (fetch (POSITION 
XCOORD) of TAIL.POSITION)) (SETQ Y0 (fetch (POSITION YCOORD) of TAIL.POSITION)) (SETQ X1 (fetch (
POSITION XCOORD) of HEAD.POSITION)) (SETQ Y1 (fetch (POSITION YCOORD) of HEAD.POSITION)) (SETQ DX (
IDIFFERENCE X1 X0)) (SETQ DY (IDIFFERENCE Y1 Y0)) (SETQ LL (SQRT (PLUS (TIMES DX DX) (TIMES DY DY)))) 
(SETQ COS.RHO (QUOTIENT DX LL)) (SETQ SIN.RHO (QUOTIENT DY LL)) (SETQ COS.THETA (COS HEAD.ANGLE)) (
SETQ SIN.THETA (SIN HEAD.ANGLE)) (SETQ XP1 (TIMES HEAD.LENGTH (DIFFERENCE (TIMES COS.RHO COS.THETA) (
TIMES SIN.RHO SIN.THETA)))) (SETQ YP1 (TIMES HEAD.LENGTH (PLUS (TIMES SIN.RHO COS.THETA) (TIMES 
SIN.THETA COS.RHO)))) (SETQ XP2 (TIMES HEAD.LENGTH (PLUS (TIMES COS.RHO COS.THETA) (TIMES SIN.RHO 
SIN.THETA)))) (SETQ YP2 (TIMES HEAD.LENGTH (DIFFERENCE (TIMES SIN.RHO COS.THETA) (TIMES SIN.THETA 
COS.RHO)))) (RETURN (CONS (create POSITION XCOORD ← (IDIFFERENCE X1 (FIX XP1)) YCOORD ← (IDIFFERENCE 
Y1 (FIX YP1))) (create POSITION XCOORD ← (IDIFFERENCE X1 (FIX XP2)) YCOORD ← (IDIFFERENCE Y1 (FIX YP2)
)))))))
)
(READ.ITEMTYPE ARROW.TWO.HEADS 5)
(\TYPE ITEM.TYPE NAME ARROW.TWO.HEADS COMMENT  "An arrow between two locations" KIND ARTWORK 
PARAMETERS  ((\TYPE PARAMETER NAME TAIL TYPE  (POSITION) DEFAULT  (100 . 100) COMMENT  
"The tail of the arrow")  (\TYPE PARAMETER NAME HEAD TYPE  (POSITION) DEFAULT  (200 . 200) COMMENT  
"The head of the arrow")  (\TYPE PARAMETER NAME HEAD.ANGLE TYPE  (INTEGER) DEFAULT 20 COMMENT  
"Angle between shaft and edges of head")  (\TYPE PARAMETER NAME HEAD.LENGTH TYPE  (INTEGER) DEFAULT 20
 COMMENT  "Length of the edge of the head")  (\TYPE PARAMETER NAME TAIL.ANGLE TYPE  (INTEGER) DEFAULT 
20 COMMENT  "Angle between shaft and edges of tail head")  (\TYPE PARAMETER NAME TAIL.LENGTH TYPE  (
INTEGER) DEFAULT 20 COMMENT  "Length of the edge of the tail head")  (\TYPE PARAMETER NAME WIDTH TYPE 
 (INTEGER) DEFAULT 2 COMMENT  "Widths of the lines")) OTHER  (FNS  ((ANALYZE ANALYZE.ARROW.TWO.HEADS) 
 (BOUNDING.BOX BOUNDING.BOX.ARROW.TWO.HEADS)  (SHOW SHOW.ARROW.TWO.HEADS)  (RESET 
RESET.ARROW.TWO.HEADS))) CLASSES  (ARTWORK))
(DEFINEQ

(ANALYZE.ARROW.TWO.HEADS
(LAMBDA (ITEM) (* HaKo "17-Aug-84 13:20") (PROG ((TAIL (GET.PARAMQ ITEM TAIL ARROW.TWO.HEADS)) (HEAD (
GET.PARAMQ ITEM HEAD ARROW.TWO.HEADS)) (HEAD.ANGLE (GET.PARAMQ ITEM HEAD.ANGLE ARROW.TWO.HEADS)) (
HEAD.LENGTH (GET.PARAMQ ITEM HEAD.LENGTH ARROW.TWO.HEADS)) (TAIL.ANGLE (GET.PARAMQ ITEM TAIL.ANGLE 
ARROW.TWO.HEADS)) (TAIL.LENGTH (GET.PARAMQ ITEM TAIL.LENGTH ARROW.TWO.HEADS))) (SET.FIELDQ ITEM HEADS 
(ARROW.HEAD.POSITIONS TAIL HEAD HEAD.ANGLE HEAD.LENGTH)) (SET.FIELDQ ITEM TAIL.HEADS (
ARROW.HEAD.POSITIONS HEAD TAIL TAIL.ANGLE TAIL.LENGTH)))))

(BOUNDING.BOX.ARROW.TWO.HEADS
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:24") (* DAHJr "10-NOV-83 21:09") (PROG ((TAIL (GET.PARAMQ ITEM 
TAIL ARROW.TWO.HEADS)) (HEAD (GET.PARAMQ ITEM HEAD ARROW.TWO.HEADS)) (HEADS (GET.FIELDQ ITEM HEADS)) (
TAIL.HEADS (GET.FIELDQ ITEM TAIL.HEADS)) LEFT BOTTOM RIGHT TOP) (SETQ LEFT (MIN (fetch (POSITION 
XCOORD) of TAIL) (fetch (POSITION XCOORD) of HEAD) (fetch (POSITION XCOORD) of (CAR HEADS)) (fetch (
POSITION XCOORD) of (CDR HEADS)) (fetch (POSITION XCOORD) of (CAR TAIL.HEADS)) (fetch (POSITION XCOORD
) of (CDR TAIL.HEADS)))) (SETQ BOTTOM (MIN (fetch (POSITION YCOORD) of TAIL) (fetch (POSITION YCOORD) 
of HEAD) (fetch (POSITION YCOORD) of (CAR HEADS)) (fetch (POSITION YCOORD) of (CDR HEADS)) (fetch (
POSITION YCOORD) of (CAR TAIL.HEADS)) (fetch (POSITION YCOORD) of (CDR TAIL.HEADS)))) (SETQ RIGHT (MAX
 (fetch (POSITION XCOORD) of TAIL) (fetch (POSITION XCOORD) of HEAD) (fetch (POSITION XCOORD) of (CAR 
HEADS)) (fetch (POSITION XCOORD) of (CDR HEADS)) (fetch (POSITION XCOORD) of (CAR TAIL.HEADS)) (fetch 
(POSITION XCOORD) of (CDR TAIL.HEADS)))) (SETQ TOP (MAX (fetch (POSITION YCOORD) of TAIL) (fetch (
POSITION YCOORD) of HEAD) (fetch (POSITION YCOORD) of (CAR HEADS)) (fetch (POSITION YCOORD) of (CDR 
HEADS)) (fetch (POSITION YCOORD) of (CAR TAIL.HEADS)) (fetch (POSITION YCOORD) of (CDR TAIL.HEADS)))) 
(RETURN (create REGION LEFT ← LEFT BOTTOM ← BOTTOM WIDTH ← (MAX (IDIFFERENCE RIGHT LEFT) 4) HEIGHT ← (
MAX (IDIFFERENCE TOP BOTTOM) 4))))))

(SHOW.ARROW.TWO.HEADS
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:27") (DECLARE (GLOBALVARS CURRENT.DSP)) (PROG ((TAIL (GET.PARAMQ 
ITEM TAIL ARROW.TWO.HEADS)) (HEAD (GET.PARAMQ ITEM HEAD ARROW.TWO.HEADS)) (HEAD.ANGLE (GET.PARAMQ ITEM
 HEAD.ANGLE ARROW.TWO.HEADS)) (HEAD.LENGTH (GET.PARAMQ ITEM HEAD.LENGTH ARROW.TWO.HEADS)) (WIDTH (
GET.PARAMQ ITEM WIDTH ARROW.TWO.HEADS)) (HEADS (GET.FIELDQ ITEM HEADS)) (TAIL.HEADS (GET.FIELDQ ITEM 
TAIL.HEADS))) (MOVETO (fetch (POSITION XCOORD) of TAIL) (fetch (POSITION YCOORD) of TAIL) CURRENT.DSP)
 (DRAWTO (fetch (POSITION XCOORD) of (CAR TAIL.HEADS)) (fetch (POSITION YCOORD) of (CAR TAIL.HEADS)) 
WIDTH NIL CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of (CDR TAIL.HEADS)) (fetch (POSITION YCOORD) 
of (CDR TAIL.HEADS)) WIDTH NIL CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of TAIL) (fetch (POSITION
 YCOORD) of TAIL) WIDTH NIL CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of HEAD) (fetch (POSITION 
YCOORD) of HEAD) WIDTH NIL CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of (CAR HEADS)) (fetch (
POSITION YCOORD) of (CAR HEADS)) WIDTH NIL CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of (CDR HEADS
)) (fetch (POSITION YCOORD) of (CDR HEADS)) WIDTH NIL CURRENT.DSP) (DRAWTO (fetch (POSITION XCOORD) of
 HEAD) (fetch (POSITION YCOORD) of HEAD) WIDTH NIL CURRENT.DSP))))

(RESET.ARROW.TWO.HEADS
(LAMBDA (ITEM) (* DAHJr "16-MAR-83 13:40") (SET.FIELDQ ITEM HEADS NIL ARROW.TWO.HEADS) (SET.FIELDQ 
ITEM TAIL.HEADS NIL)))
)
(READ.ITEMTYPE BORDER 5)
(\TYPE ITEM.TYPE NAME BORDER COMMENT  "A border with color at the edge" KIND ARTWORK PARAMETERS  ((
\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 50 50) COMMENT  
"The outside area of the border")  (\TYPE PARAMETER NAME THICKNESS TYPE  (INTEGER) DEFAULT 10 COMMENT 
 "The number of points in the colored edge")  (\TYPE PARAMETER NAME OPERATION TYPE  (ONEOF  (REPLACE 
PAINT INVERT ERASE)) DEFAULT PAINT COMMENT  "The operation for BITBLT")  (\TYPE PARAMETER NAME COLOR 
TYPE  (SHADE) DEFAULT 33345 COMMENT  "The color of the edge")) OTHER  (FNS  ((SHOW SHOW.BORDER))) 
CLASSES  (ARTWORK))
(DEFINEQ

(SHOW.BORDER
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:29") (* rao: "22-JUN-82 16:12") (DECLARE (GLOBALVARS CURRENT.DSP)
) (PROG ((THICKNESS (GET.PARAMQ ITEM THICKNESS BORDER)) (COLOR (GET.PARAMQ ITEM COLOR BORDER)) (
OPERATION (GET.PARAMQ ITEM OPERATION BORDER)) (REGION (GET.PARAMQ ITEM PLACEMENT BORDER)) L1 R1 L2 R2 
B1 T1 B2 T2) (SETQ L1 (fetch (REGION LEFT) of REGION)) (SETQ R1 (IPLUS L1 THICKNESS)) (SETQ R2 (IPLUS 
L1 (fetch (REGION WIDTH) of REGION))) (SETQ L2 (IDIFFERENCE R2 THICKNESS)) (SETQ B1 (fetch (REGION 
BOTTOM) of REGION)) (SETQ T1 (IPLUS B1 THICKNESS)) (SETQ T2 (IPLUS B1 (fetch (REGION HEIGHT) of REGION
))) (SETQ B2 (IDIFFERENCE T2 THICKNESS)) (COND ((AND (ILESSP R1 L2) (ILESSP T1 B2)) (BITBLT NIL NIL 
NIL CURRENT.DSP L1 B1 THICKNESS (IDIFFERENCE T2 B1) (QUOTE TEXTURE) OPERATION COLOR) (BITBLT NIL NIL 
NIL CURRENT.DSP L2 B1 THICKNESS (IDIFFERENCE T2 B1) (QUOTE TEXTURE) OPERATION COLOR) (BITBLT NIL NIL 
NIL CURRENT.DSP R1 B1 (IDIFFERENCE L2 R1) THICKNESS (QUOTE TEXTURE) OPERATION COLOR) (BITBLT NIL NIL 
NIL CURRENT.DSP R1 B2 (IDIFFERENCE L2 R1) THICKNESS (QUOTE TEXTURE) OPERATION COLOR)) (T (BITBLT NIL 
NIL NIL CURRENT.DSP L1 B1 (IDIFFERENCE R2 L1) (IDIFFERENCE T2 B1) (QUOTE TEXTURE) OPERATION COLOR)))))
)
)
(READ.ITEMTYPE BUTTON.SENSOR 5)
(\TYPE ITEM.TYPE NAME BUTTON.SENSOR COMMENT  "A sensor which acts if the screen is touched anywhere" 
KIND SENSOR PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (170 . 170) COMMENT
  "Placement for identification only" GRID.TYPE  (LOCATION))  (\TYPE PARAMETER NAME ACTION.FORM TYPE  
(FORM) DEFAULT  (ACTION.PRINT  "This action is brought to you by a BUTTON.SENSOR") COMMENT  
"The action to be taken if the screen is touched anywhere")) OTHER  (FNS  ((BOUNDING.BOX 
BOUNDING.BOX.BUTTON.SENSOR)  (SENSE SENSE.BUTTON.SENSOR))) CLASSES  (BUTTON SENSOR)  (QUOTE CLASSES)  
(BUTTON))
(DEFINEQ

(BOUNDING.BOX.BUTTON.SENSOR
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:30") (* edited: "15-JUN-82 12:15") (PROG ((LOCATION (GET.PARAMQ 
ITEM PLACEMENT BUTTON.SENSOR))) (RETURN (BOUNDING.BOX.FOR.SEGMENTS (fetch (LOCATION X) of LOCATION) (
fetch (LOCATION Y) of LOCATION) 1 1)))))

(SENSE.BUTTON.SENSOR
(LAMBDA (ITEM TOUCH XCOORD YCOORD) (* HaKo " 7-Aug-84 16:15") (* edited: "15-JUN-82 12:15") (COND (
TOUCH (BEGIN.EVENT ITEM) (TRILLIUM.EVAL (GET.PARAMQ ITEM ACTION.FORM BUTTON.SENSOR)) (END.EVENT)))))
)
(READ.ITEMTYPE CIRCLE 5)
(\TYPE ITEM.TYPE NAME CIRCLE COMMENT  "A circle" KIND ARTWORK PARAMETERS  ((\TYPE PARAMETER NAME 
PLACEMENT TYPE  (POSITION) DEFAULT  (100 . 100) COMMENT  "The center of the circle")  (\TYPE PARAMETER
 NAME RADIUS TYPE  (INTEGER) DEFAULT 50 COMMENT  "The radius of the circle")  (\TYPE PARAMETER NAME 
BRUSH.SHAPE TYPE  (ONEOF  (ROUND SQUARE HORIZONTAL VERTICAL)) DEFAULT ROUND COMMENT  
"The brush shpae for drawing")  (\TYPE PARAMETER NAME BRUSH.SIZE TYPE  (INTEGER) DEFAULT 10 COMMENT  
"The brush size for drawing")) OTHER  (FNS  ((BOUNDING.BOX BOUNDING.BOX.CIRCLE)  (SHOW SHOW.CIRCLE))) 
CLASSES  (ARTWORK))
(DEFINEQ

(BOUNDING.BOX.CIRCLE
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:32") (* edited: " 9-JUN-82 10:16") (PROG ((POS (GET.PARAMQ ITEM 
PLACEMENT CIRCLE)) (RADIUS (GET.PARAMQ ITEM RADIUS CIRCLE)) (BRUSH.SIZE (GET.PARAMQ ITEM BRUSH.SIZE 
CIRCLE)) X Y) (SETQ X (fetch (POSITION XCOORD) of POS)) (SETQ Y (fetch (POSITION YCOORD) of POS)) (
RETURN (LIST (IDIFFERENCE X (IPLUS RADIUS (IQUOTIENT BRUSH.SIZE 2))) (IDIFFERENCE Y (IPLUS RADIUS (
IQUOTIENT BRUSH.SIZE 2))) (IPLUS BRUSH.SIZE (ITIMES RADIUS 2)) (IPLUS BRUSH.SIZE (ITIMES RADIUS 2)))))
))

(SHOW.CIRCLE
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:39") (* edited: " 9-JUN-82 10:19") (DECLARE (GLOBALVARS 
CURRENT.DSP)) (PROG ((POS (GET.PARAMQ ITEM PLACEMENT CIRCLE)) (RADIUS (GET.PARAMQ ITEM RADIUS CIRCLE))
 (BRUSH.SIZE (GET.PARAMQ ITEM BRUSH.SIZE CIRCLE)) (BRUSH.SHAPE (GET.PARAMQ ITEM BRUSH.SHAPE CIRCLE))) 
(DRAWCIRCLE (fetch (POSITION XCOORD) of POS) (fetch (POSITION YCOORD) of POS) RADIUS (LIST BRUSH.SHAPE
 BRUSH.SIZE) NIL CURRENT.DSP))))
)
(READ.ITEMTYPE ELLIPSE 5)
(\TYPE ITEM.TYPE NAME ELLIPSE COMMENT  "An ellipse" KIND ARTWORK PARAMETERS  ((\TYPE PARAMETER NAME 
PLACEMENT TYPE  (POSITION) DEFAULT  (100 . 100) COMMENT  "The centre of the ellipse")  (\TYPE 
PARAMETER NAME MINOR.AXIS TYPE  (INTEGER) DEFAULT 25 COMMENT  "The minor axis of the ellipse")  (\TYPE
 PARAMETER NAME MAJOR.AXIS TYPE  (INTEGER) DEFAULT 50 COMMENT  "The major axis of the ellipse")  (
\TYPE PARAMETER NAME ORIENTATION TYPE  (INTEGER) DEFAULT 0 COMMENT  "The orientation of the ellipse") 
 (\TYPE PARAMETER NAME BRUSH.SHAPE TYPE  (ONEOF  (ROUND SQUARE HORIZONTAL VERTICAL)) DEFAULT ROUND 
COMMENT  "The brush shpae for drawing")  (\TYPE PARAMETER NAME BRUSH.SIZE TYPE  (INTEGER) DEFAULT 10 
COMMENT  "The brush size for drawing")) OTHER  (FNS  ((BOUNDING.BOX BOUNDING.BOX.ELLIPSE)  (SHOW 
SHOW.ELLIPSE))) CLASSES  (ARTWORK))
(DEFINEQ

(BOUNDING.BOX.ELLIPSE
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:44") (* edited: "10-JUN-82 15:01") (PROG ((POS (GET.PARAMQ ITEM 
PLACEMENT ELLIPSE)) (AXIS (MAX (GET.PARAMQ ITEM MAJOR.AXIS ELLIPSE) (GET.PARAMQ ITEM MINOR.AXIS 
ELLIPSE))) (ORIENTATION (GET.PARAMQ ITEM ORIENTATION ELLIPSE)) (BRUSH.SIZE (GET.PARAMQ ITEM BRUSH.SIZE
 ELLIPSE))) (RETURN (create REGION LEFT ← (IDIFFERENCE (fetch (POSITION XCOORD) of POS) (IPLUS AXIS (
IQUOTIENT BRUSH.SIZE 2))) BOTTOM ← (IDIFFERENCE (fetch (POSITION YCOORD) of POS) (IPLUS AXIS (
IQUOTIENT BRUSH.SIZE 2))) WIDTH ← (IPLUS BRUSH.SIZE (ITIMES AXIS 2)) HEIGHT ← (IPLUS BRUSH.SIZE (
ITIMES AXIS 2)))))))

(SHOW.ELLIPSE
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 13:47") (* edited: "10-JUN-82 14:53") (DECLARE (GLOBALVARS 
CURRENT.DSP)) (PROG ((POS (GET.PARAMQ ITEM PLACEMENT ELLIPSE)) (MAJOR.AXIS (GET.PARAMQ ITEM MAJOR.AXIS
 ELLIPSE)) (MINOR.AXIS (GET.PARAMQ ITEM MINOR.AXIS ELLIPSE)) (ORIENTATION (GET.PARAMQ ITEM ORIENTATION
 ELLIPSE)) (BRUSH.SIZE (GET.PARAMQ ITEM BRUSH.SIZE ELLIPSE)) (BRUSH.SHAPE (GET.PARAMQ ITEM BRUSH.SHAPE
 ELLIPSE))) (DRAWELLIPSE (fetch (POSITION XCOORD) of POS) (fetch (POSITION YCOORD) of POS) MINOR.AXIS 
MAJOR.AXIS ORIENTATION (LIST BRUSH.SHAPE BRUSH.SIZE) NIL CURRENT.DSP))))
)
(READ.ITEMTYPE FLASHING.SENSITIVE.REGION 5)
(\TYPE ITEM.TYPE NAME FLASHING.SENSITIVE.REGION COMMENT  
"A sensor, which goes black on depression, takes action, goes white again on release" KIND SENSOR 
PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) COMMENT  
"An area sensitive to touch")  (\TYPE PARAMETER NAME ACTION.FORM TYPE  (FORM) DEFAULT  (ACTION.PRINT  
"This action is brought to you by a FLASHING.SENSITIVE.REGION") COMMENT  
"The action to be taken as the sensitive region is touched")) OTHER  (FNS  ((SENSE 
SENSE.FLASHING.SENSITIVE.REGION))) CLASSES  (SENSOR))
(DEFINEQ

(SENSE.FLASHING.SENSITIVE.REGION
(LAMBDA (ITEM TOUCH XCOORD YCOORD) (* HaKo " 7-Aug-84 16:41") (* TRB "12-JAN-84 17:09") (COND (TOUCH (
PROG (BOX ACTION (REGION (GET.PARAMQ ITEM PLACEMENT))) (COND ((INSIDEP REGION XCOORD YCOORD) (
BEGIN.EVENT ITEM) (SETQ BOX (BIGGER.BOX REGION)) (SETQ ACTION (GET.PARAMQ ITEM ACTION.FORM)) (FLIP.BOX
 BOX) (WAITNOBUG) (FLIP.BOX BOX) (TRILLIUM.EVAL ACTION) (END.EVENT) (RETURN T))))))))
)
(READ.ITEMTYPE IMPLICATION 5)
(\TYPE ITEM.TYPE NAME IMPLICATION COMMENT  
"Means by which a change in one cell can cause changes in others" KIND IMPLICATION PARAMETERS  ((\TYPE
 PARAMETER NAME NAME TYPE  (CONSTANT) DEFAULT  "Un-named implication" COMMENT  "The item's name")  (
\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (170 . 170) COMMENT  
"A place on the screen so that it can be referenced" GRID.TYPE  (LOCATION))  (\TYPE PARAMETER NAME 
CELL TYPE  (CELL) DEFAULT CELL.1 COMMENT  "The cell which triggers this implication")  (\TYPE 
PARAMETER NAME ACTION.FORM TYPE  (FORM) DEFAULT  (ACTION.PRINT  
"This action is brought to you by an implication") COMMENT  "The action to be taken")) OTHER  (FNS  ((
BOUNDING.BOX BOUNDING.BOX.IMPLICATION)  (IMPLY IMPLY.IMPLICATION))) CLASSES  (IMPLICATION))
(DEFINEQ

(BOUNDING.BOX.IMPLICATION
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:02") (* DAHJr " 5-DEC-83 21:12") (PROG ((POSITION (GET.PARAMQ 
ITEM PLACEMENT))) (RETURN (BOUNDING.BOX.FOR.SEGMENTS (fetch (POSITION XCOORD) of POSITION) (fetch (
POSITION YCOORD) of POSITION) 1 1)))))

(IMPLY.IMPLICATION
(LAMBDA (IMPLICATION OLD.VALUE NEW.VALUE DONT.TRACE) (* HaKo "17-Aug-84 13:45") (* edited: 
"25-MAY-82 16:50") (DECLARE (GLOBALVARS TRILLIUM.TRACE)) (AND TRILLIUM.TRACE (NOT DONT.TRACE) (
TRILLIUM.PRINTOUT ON TRILLIUM.TRACE T "Activate implication: " (GET.PARAMQ IMPLICATION ACTION.FORM))) 
(TRILLIUM.EVAL (GET.PARAMQ IMPLICATION ACTION.FORM IMPLICATION))))
)
(READ.ITEMTYPE IMPLICATION.CHANGE.FRAME 5)
(\TYPE ITEM.TYPE NAME IMPLICATION.CHANGE.FRAME COMMENT  "An implication that performs a frame change" 
KIND IMPLICATION PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (170 . 170) 
COMMENT  "The location of this item" GRID.TYPE  (LOCATION))  (\TYPE PARAMETER NAME CELL TYPE  (LIST  (
CELL)) DEFAULT  (CELL.1) COMMENT  "The cells upon which to trigger the implication")  (\TYPE PARAMETER
 NAME CONDITION.EXPRESSION TYPE  (FORM) DEFAULT T COMMENT  
"The condition to determine whether or not to do the frame change: if it's value is non-NIL, the frame change takes place"
)  (\TYPE PARAMETER NAME STACK.OPERATION TYPE  (ONEOF  (NO.CHANGE PUSH POP)) DEFAULT PUSH COMMENT  
"How to change the stack of frames")  (\TYPE PARAMETER NAME INITIALIZATION TYPE  (ONEOF  (INITIALIZE 
DO.NOT.INITIALIZE)) DEFAULT INITIALIZE COMMENT  "Whether or not to do initialization of the frame")  (
\TYPE PARAMETER NAME FRAME TYPE  (FRAME) DEFAULT BEGIN COMMENT  "The frame to push to")) OTHER  (FNS  
((BOUNDING.BOX BOUNDING.BOX.IMPLICATION.CHANGE.FRAME)  (IMPLY IMPLY.IMPLICATION.CHANGE.FRAME))) 
CLASSES  (IMPLICATION))
(DEFINEQ

(BOUNDING.BOX.IMPLICATION.CHANGE.FRAME
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:04") (* edited: "27-JAN-83 16:20") (PROG ((LOCATION (GET.PARAMQ 
ITEM PLACEMENT IMPLICATION.CHANGE.FRAME))) (RETURN (BOUNDING.BOX.FOR.SEGMENTS (fetch (LOCATION X) of 
LOCATION) (fetch (LOCATION Y) of LOCATION) 1 1)))))

(IMPLY.IMPLICATION.CHANGE.FRAME
(LAMBDA (IMPLICATION OLD.VALUE NEW.VALUE DONT.TRACE) (* HaKo "17-Aug-84 13:17") (* TRB 
"11-JAN-84 20:41") (DECLARE (GLOBALVARS CURRENT.FRAME CURRENT.INTERFACE EVENT.MODE TRILLIUM.TRACE)) (
PROG ((CONDITION.EXPRESSION (GET.PARAMQ IMPLICATION CONDITION.EXPRESSION IMPLICATION.CHANGE.FRAME)) (
STACK.OPERATION (GET.PARAMQ IMPLICATION STACK.OPERATION IMPLICATION.CHANGE.FRAME)) (FRAME (GET.PARAMQ 
IMPLICATION FRAME IMPLICATION.CHANGE.FRAME)) (INITIALIZATION (GET.PARAMQ IMPLICATION INITIALIZATION 
IMPLICATION.CHANGE.FRAME)) (CELL.VALUES (for CELL in (GET.PARAMQ IMPLICATION CELL 
IMPLICATION.CHANGE.FRAME) collect (CONS CELL (GET.CURRENT.VALUE CELL))))) (AND TRILLIUM.TRACE (NOT 
DONT.TRACE) (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE T "Activate implication: " CONDITION.EXPRESSION)) (
SELECTQ EVENT.MODE (PLAYBACK (COND ((EVALA CONDITION.EXPRESSION CELL.VALUES) (START.FRAME (FIND.FRAME 
CURRENT.INTERFACE FRAME) INITIALIZATION) (ACTIVATE.INITIALIZATIONS CURRENT.FRAME)))) (COND ((EVALA 
CONDITION.EXPRESSION CELL.VALUES) (EVAL (BUILD.STACK.OPERATION STACK.OPERATION FRAME INITIALIZATION)))
)))))
)
(READ.ITEMTYPE INDICATOR 5)
(\TYPE ITEM.TYPE NAME INDICATOR COMMENT  "A bitmap which gets INVERTed into the frame" KIND DISPLAYER 
PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (100 . 100) COMMENT  
"The lower left corner of the bitmap")  (\TYPE PARAMETER NAME BITMAP TYPE  (BITMAP.NAME) DEFAULT 
SIMPLE.BUTTON.BITMAP COMMENT  "The bitmap")  (\TYPE PARAMETER NAME ON-COLOR TYPE  (COLOR.NAME) DEFAULT
 BLACK COMMENT  "The color of the indicator when on")  (\TYPE PARAMETER NAME OFF-COLOR TYPE  (
COLOR.NAME) DEFAULT WHITE COMMENT  "The color of the indicator when off")  (\TYPE PARAMETER NAME CELL 
TYPE  (CELL) DEFAULT CELL.1 COMMENT  "The cell whose value the light displays")  (\TYPE PARAMETER NAME
 CONDITION.OPERATION TYPE  (ONEOF  (= < > <= >= NOT.EQUAL)) DEFAULT = COMMENT  
"The operation to use to compare CELL with the REFERENCE.VALUE ")  (\TYPE PARAMETER NAME 
REFERENCE.VALUE TYPE  (CONSTANT) DEFAULT VALUE.1 COMMENT  "The value to compare with the cell's value"
)) OTHER  (FNS  ((BOUNDING.BOX BOUNDING.BOX.INDICATOR)  (SHOW SHOW.INDICATOR)  (DISPLAY 
DISPLAY.INDICATOR)  (RESET RESET.INDICATOR))) CLASSES  (DISPLAYER))
(DEFINEQ

(BOUNDING.BOX.INDICATOR
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:15") (* edited: "30-MAR-82 15:05") (PROG ((POS (GET.PARAMQ ITEM 
PLACEMENT INDICATOR)) (BITMAP (GET.PARAMQ ITEM BITMAP INDICATOR))) (OR (BITMAPP BITMAP) (SETQ BITMAP (
FIND.BITMAP BITMAP))) (RETURN (create REGION LEFT ← (fetch (POSITION XCOORD) of POS) BOTTOM ← (fetch (
POSITION YCOORD) of POS) WIDTH ← (fetch (BITMAP BITMAPWIDTH) of BITMAP) HEIGHT ← (fetch (BITMAP 
BITMAPHEIGHT) of BITMAP))))))

(SHOW.INDICATOR
(LAMBDA (ITEM) (* edited: "30-MAR-82 15:24") (SET.FIELDQ ITEM ON/OFF (QUOTE OFF) INDICATOR)))

(DISPLAY.INDICATOR
(LAMBDA (ITEM FRAME) (* edited: "15-Aug-84 14:13") (* DAHJr "10-MAR-83 12:55") (PROG ((POSITION (
GET.PARAMQ ITEM PLACEMENT INDICATOR)) (BITMAP (GET.PARAMQ ITEM BITMAP)) (CONDITION.OPERATION (
GET.PARAMQ ITEM CONDITION.OPERATION)) (REFERENCE.VALUE (GET.PARAMQ ITEM REFERENCE.VALUE)) (
CURRENT.VALUE (GET.CURRENT.VALUE (GET.PARAMQ ITEM CELL))) (ON-COLOR (GET.PARAMQ ITEM ON-COLOR)) (
OFF-COLOR (GET.PARAMQ ITEM OFF-COLOR)) T1 T2) (OR (BITMAPP BITMAP) (SETQ BITMAP (FIND.BITMAP BITMAP)))
 (SETQ T1 (COND ((EQ CONDITION.OPERATION (QUOTE NOT.EQUAL)) (NOT (EQP CURRENT.VALUE REFERENCE.VALUE)))
 (T (APPLY (SELECTQ CONDITION.OPERATION (= (QUOTE EQP)) (< (QUOTE LESSP)) (> (QUOTE GREATERP)) (<= (
QUOTE LEQ)) (>= (QUOTE GEQ)) (TRILLIUM.REPORT.ERROR (REPORT.TRILLIUM.ERROR 
"Unrecoginized CONDITION.OPERATION" CONDITION.OPERATION ITEM "Displaying an item"))) (LIST 
CURRENT.VALUE REFERENCE.VALUE))))) (SETQ T2 (EQ (GET.FIELDQ ITEM ON/OFF) (QUOTE ON))) (COND ((AND T1 (
NOT T2)) (* TURN IT ON) (SET.FIELDQ ITEM ON/OFF (QUOTE ON)) (COND ((AND (EQ ON-COLOR (QUOTE BLACK)) (
EQ OFF-COLOR (QUOTE WHITE))) (* FLIP IT) (SHOW.COLORED.BITMAP BITMAP POSITION NIL (QUOTE INPUT) (QUOTE
 INVERT) NIL (QUOTE BLACK) (QUOTE WHITE))) (T (* SET IT ON) (SHOW.COLORED.BITMAP BITMAP POSITION NIL (
QUOTE INPUT) (QUOTE PAINT) NIL ON-COLOR (QUOTE CLEAR))))) ((AND T2 (NOT T1)) (* TURN IT OFF) (
SET.FIELDQ ITEM ON/OFF (QUOTE OFF)) (COND ((AND (EQ ON-COLOR (QUOTE BLACK)) (EQ OFF-COLOR (QUOTE WHITE
))) (* FLIP IT) (SHOW.COLORED.BITMAP BITMAP POSITION NIL (QUOTE INPUT) (QUOTE INVERT) NIL (QUOTE BLACK
) (QUOTE WHITE))) (T (* SET IT OFF) (SHOW.COLORED.BITMAP BITMAP POSITION NIL (QUOTE INPUT) (QUOTE 
PAINT) NIL OFF-COLOR (QUOTE CLEAR)))))))))

(RESET.INDICATOR
(LAMBDA (ITEM) (* edited: "22-MAR-83 19:24") (SET.FIELDQ ITEM ON/OFF NIL INDICATOR)))
)
(READ.ITEMTYPE INHIBITOR 5)
(\TYPE ITEM.TYPE NAME INHIBITOR COMMENT  "Means for inhibiting the changing of a cell's value" KIND 
INHIBITOR PARAMETERS  ((\TYPE PARAMETER NAME NAME TYPE  (CONSTANT) DEFAULT  "Un-named inhibitor" 
COMMENT  "The item's name")  (\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (170 . 170) 
COMMENT  "A place on the screen so that it can be referenced" GRID.TYPE  (LOCATION))  (\TYPE PARAMETER
 NAME CELL TYPE  (CELL) DEFAULT CELL.1 COMMENT  "The cell which triggers this implication")  (\TYPE 
PARAMETER NAME ACTION.FORM TYPE  (FORM) DEFAULT  (ACTION.PRINT  
"This action is brought to you by an IMPLICATION") COMMENT  "The action to be taken")) OTHER  (FNS  ((
BOUNDING.BOX BOUNDING.BOX.INHIBITOR)  (INHIBIT INHIBIT.INHIBITOR))) CLASSES  (INHIBITOR))
(DEFINEQ

(BOUNDING.BOX.INHIBITOR
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:19") (* DAHJr " 5-DEC-83 21:11") (PROG ((POSITION (GET.PARAMQ 
ITEM PLACEMENT INHIBITOR))) (RETURN (BOUNDING.BOX.FOR.SEGMENTS (fetch (POSITION XCOORD) of POSITION) (
fetch (POSITION YCOORD) of POSITION) 1 1)))))

(INHIBIT.INHIBITOR
(LAMBDA (INHIBITOR OLD.VALUE NEW.VALUE DONT.TRACE) (* HaKo "17-Aug-84 13:45") (* edited: 
"25-MAY-82 16:49") (DECLARE (GLOBALVARS TRILLIUM.TRACE)) (PROG (RESULT (ACTION (GET.PARAMQ INHIBITOR 
ACTION.FORM INHIBITOR))) (AND TRILLIUM.TRACE (NOT DONT.TRACE) (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE T 
"Activate inhibitor: " ACTION)) (SETQ RESULT (TRILLIUM.EVAL ACTION)) (AND TRILLIUM.TRACE (NOT 
DONT.TRACE) (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE SAME.LINE "; result: " (COND (RESULT "inhibit") (T 
"OK")))) (RETURN RESULT))))
)
(READ.ITEMTYPE INIT.CELL 5)
(\TYPE ITEM.TYPE NAME INIT.CELL COMMENT  "An action to be done on entering the frame" KIND 
INITIALIZATION PARAMETERS  ((\TYPE PARAMETER NAME NAME TYPE  (CONSTANT) DEFAULT  
"Un-named initialization" COMMENT  "The item's name")  (\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION
) DEFAULT  (170 . 170) COMMENT  "A position on the screen for reference" GRID.TYPE  (LOCATION))  (
\TYPE PARAMETER NAME CELL TYPE  (CELL) DEFAULT CELL.1 COMMENT  "The cell to be initialized")  (\TYPE 
PARAMETER NAME VALUE TYPE  (CONSTANT) DEFAULT VALUE.1 COMMENT  "The initial value")) OTHER  (FNS  ((
BOUNDING.BOX BOUNDING.BOX.INIT.CELL)  (INITIALIZE INITIALIZE.INIT.CELL))) CLASSES  (INITIALIZATION))
(DEFINEQ

(BOUNDING.BOX.INIT.CELL
(LAMBDA (ITEM) (* edited: " 6-May-84 14:34") (BOUNDING.BOX.INITIALIZATION ITEM)))

(INITIALIZE.INIT.CELL
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:22") (* DAHJr "10-OCT-83 10:43") (SET.CURRENT.VALUE (GET.PARAMQ 
ITEM CELL) (GET.PARAMQ ITEM VALUE))))
)
(READ.ITEMTYPE INITIALIZATION 5)
(\TYPE ITEM.TYPE NAME INITIALIZATION COMMENT  "An action to be done on entering the frame" KIND 
INITIALIZATION PARAMETERS  ((\TYPE PARAMETER NAME NAME TYPE  (CONSTANT) DEFAULT  
"Un-named initialization" COMMENT  "The item's name")  (\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION
) DEFAULT  (170 . 170) COMMENT  "A position on the screen for reference" GRID.TYPE  (LOCATION))  (
\TYPE PARAMETER NAME ACTION.FORM TYPE  (FORM) DEFAULT  (ACTION.PRINT  
"This action is brought to you by an INITIALIZATION") COMMENT  "The initializing action")) OTHER  (FNS
  ((BOUNDING.BOX BOUNDING.BOX.INITIALIZATION)  (INITIALIZE INITIALIZE.INITIALIZATION))) CLASSES  (
INITIALIZATION))
(DEFINEQ

(BOUNDING.BOX.INITIALIZATION
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:23") (* DAHJr " 5-DEC-83 21:10") (PROG ((POSITION (GET.PARAMQ 
ITEM PLACEMENT INITIALIZATION))) (RETURN (BOUNDING.BOX.FOR.SEGMENTS (fetch (POSITION XCOORD) of 
POSITION) (fetch (POSITION YCOORD) of POSITION) 1 1)))))

(INITIALIZE.INITIALIZATION
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:23") (* edited: "26-MAY-82 17:22") (TRILLIUM.EVAL (GET.PARAMQ 
ITEM ACTION.FORM INITIALIZATION))))
)
(READ.ITEMTYPE INVERTING.SENSITIVE.REGION 5)
(\TYPE ITEM.TYPE NAME INVERTING.SENSITIVE.REGION COMMENT  
"A sensor, which goes inverts on depression, takes action, and waits for release" KIND SENSOR 
PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) COMMENT  
"An area sensitive to touch")  (\TYPE PARAMETER NAME ACTION.FORM TYPE  (FORM) DEFAULT  (ACTION.PRINT  
"This action is brought to you by an INVERTING.SENSITIVE.REGION") COMMENT  
"The action to be taken as the sensitive region is touched")) OTHER  (FNS  ((SENSE 
SENSE.INVERTING.SENSITIVE.REGION))) CLASSES  (SENSOR))
(DEFINEQ

(SENSE.INVERTING.SENSITIVE.REGION
(LAMBDA (ITEM TOUCH XCOORD YCOORD) (* HaKo " 7-Aug-84 16:41") (* edited: "31-MAR-82 10:21") (COND (
TOUCH (PROG (BOX ACTION (REGION (GET.PARAMQ ITEM PLACEMENT INVERTING.SENSITIVE.REGION))) (COND ((
INSIDEP REGION XCOORD YCOORD) (BEGIN.EVENT ITEM) (SETQ BOX (BIGGER.BOX REGION)) (SETQ ACTION (
GET.PARAMQ ITEM ACTION.FORM INVERTING.SENSITIVE.REGION)) (FLIP.BOX BOX) (TRILLIUM.EVAL ACTION) (
WAITNOBUG) (END.EVENT) (RETURN T))))))))
)
(READ.ITEMTYPE LIGHT 5)
(\TYPE ITEM.TYPE NAME LIGHT COMMENT  "A light: black when value of cell is the reference.value" KIND 
DISPLAYER PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) COMMENT
  "The region which will be black when the light is on")  (\TYPE PARAMETER NAME CELL TYPE  (CELL) 
DEFAULT CELL.1 COMMENT  "The cell whose value the light displays")  (\TYPE PARAMETER NAME 
REFERENCE.VALUE TYPE  (CONSTANT) DEFAULT VALUE.1 COMMENT  "The value to compare with the cell's value"
)) OTHER  (FNS  ((SHOW SHOW.LIGHT)  (DISPLAY DISPLAY.LIGHT))) CLASSES  (DISPLAYER))
(DEFINEQ

(SHOW.LIGHT
(LAMBDA (ITEM) (* edited: "30-MAR-82 15:24") (SET.FIELDQ ITEM ON/OFF (QUOTE OFF) INDICATOR)))

(DISPLAY.LIGHT
(LAMBDA (ITEM FRAME) (* HaKo " 6-Aug-84 14:28") (* edited: "15-JUN-82 12:45") (PROG ((REGION (
GET.PARAMQ ITEM PLACEMENT LIGHT)) (REFERENCE.VALUE (GET.PARAMQ ITEM REFERENCE.VALUE LIGHT)) (
CURRENT.VALUE (GET.CURRENT.VALUE (GET.PARAMQ ITEM CELL LIGHT))) T1 T2) (SETQ T1 (EQUAL REFERENCE.VALUE
 CURRENT.VALUE)) (SETQ T2 (EQ (GET.FIELDQ ITEM ON/OFF) (QUOTE ON))) (COND ((OR (AND T1 (NOT T2)) (AND 
(NOT T1) T2)) (SET.FIELDQ ITEM ON/OFF (COND (T2 (QUOTE OFF)) (T (QUOTE ON)))) (FLIP.BOX (BIGGER.BOX (
BOUNDING.BOX ITEM))))))))
)
(READ.ITEMTYPE LIGHT.BAR 5)
(\TYPE ITEM.TYPE NAME LIGHT.BAR COMMENT  "A bar of gray which varies in length on the value of a cell"
 KIND DISPLAYER PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) 
COMMENT  "The region which the bar fills")  (\TYPE PARAMETER NAME CELL TYPE  (CELL) DEFAULT CELL.1 
COMMENT  "The cell whose value the light/bar indicates")  (\TYPE PARAMETER NAME MINIMUM.VALUE TYPE  (
INTEGER) DEFAULT 1 COMMENT  "The minimum value to be indicated")  (\TYPE PARAMETER NAME MAXIMUM.VALUE 
TYPE  (INTEGER) DEFAULT 10 COMMENT  "The maximum value to be indicated")  (\TYPE PARAMETER NAME 
DIRECTION TYPE  (ONEOF  (LEFT RIGHT BOTTOM TOP)) DEFAULT LEFT COMMENT  
"The side of the rectangle corresponding to the minimum value")  (\TYPE PARAMETER NAME SOURCE TYPE  (
ONEOF  (INPUT INVERT MERGE TEXTURE)) DEFAULT INPUT COMMENT  "Source for BITBLT")  (\TYPE PARAMETER 
NAME OPERATION TYPE  (ONEOF  (REPLACE PAINT INVERT ERASE)) DEFAULT REPLACE COMMENT  
"Operation for BITBLT")  (\TYPE PARAMETER NAME TEXTURE TYPE  (SHADE) DEFAULT 65535 COMMENT  
"Texture for BITBLT")) OTHER  (FNS  ((SHOW SHOW.LIGHT.BAR)  (DISPLAY DISPLAY.LIGHT.BAR))) CLASSES  (
DISPLAYER))
(DEFINEQ

(SHOW.LIGHT.BAR
(LAMBDA (ITEM) (* edited: "14-MAY-82 11:44") NIL))

(DISPLAY.LIGHT.BAR
(LAMBDA (ITEM FRAME) (* HaKo " 6-Aug-84 14:33") (* DAHJr "10-Apr-84 19:49") (DECLARE (GLOBALVARS 
CURRENT.DSP WHITESHADE)) (PROG ((REGION (GET.PARAMQ ITEM PLACEMENT LIGHT.BAR)) (CURRENT.VALUE (
GET.CURRENT.VALUE (GET.PARAMQ ITEM CELL LIGHT.BAR))) (MAX (GET.PARAMQ ITEM MAXIMUM.VALUE LIGHT.BAR)) (
MIN (GET.PARAMQ ITEM MINIMUM.VALUE LIGHT.BAR)) (DIRECTION (GET.PARAMQ ITEM DIRECTION LIGHT.BAR)) (
OPERATION (GET.PARAMQ ITEM OPERATION LIGHT.BAR)) (TEXTURE (GET.PARAMQ ITEM TEXTURE LIGHT.BAR)) LENGTH)
 (COND ((NUMBERP CURRENT.VALUE)) (T (TROUBLE.WITH.TRILLIUM "Non-numeric value" CURRENT.VALUE))) (SETQ 
CURRENT.VALUE (MIN MAX (MAX MIN CURRENT.VALUE))) (BITBLT NIL 0 0 CURRENT.DSP (fetch (REGION LEFT) of 
REGION) (fetch (REGION BOTTOM) of REGION) (fetch (REGION WIDTH) of REGION) (fetch (REGION HEIGHT) of 
REGION) (QUOTE TEXTURE) (QUOTE REPLACE) WHITESHADE) (SELECTQ DIRECTION (LEFT (SETQ LENGTH (IQUOTIENT (
ITIMES (fetch (REGION WIDTH) of REGION) (IDIFFERENCE CURRENT.VALUE MIN)) (IDIFFERENCE MAX MIN))) (
BITBLT NIL 0 0 CURRENT.DSP (fetch (REGION LEFT) of REGION) (fetch (REGION BOTTOM) of REGION) LENGTH (
fetch (REGION HEIGHT) of REGION) (QUOTE TEXTURE) OPERATION TEXTURE)) (RIGHT (SETQ LENGTH (IQUOTIENT (
ITIMES (fetch (REGION WIDTH) of REGION) (IDIFFERENCE CURRENT.VALUE MIN)) (IDIFFERENCE MAX MIN))) (
BITBLT NIL 0 0 CURRENT.DSP (ADD1 (IDIFFERENCE (fetch (REGION RIGHT) of REGION) LENGTH)) (fetch (REGION
 BOTTOM) of REGION) LENGTH (fetch (REGION HEIGHT) of REGION) (QUOTE TEXTURE) OPERATION TEXTURE)) (
BOTTOM (SETQ LENGTH (IQUOTIENT (ITIMES (fetch (REGION HEIGHT) of REGION) (IDIFFERENCE CURRENT.VALUE 
MIN)) (IDIFFERENCE MAX MIN))) (BITBLT NIL 0 0 CURRENT.DSP (fetch (REGION LEFT) of REGION) (fetch (
REGION BOTTOM) of REGION) (fetch (REGION WIDTH) of REGION) LENGTH (QUOTE TEXTURE) OPERATION TEXTURE)) 
(TOP (SETQ LENGTH (IQUOTIENT (ITIMES (fetch (REGION HEIGHT) of REGION) (IDIFFERENCE CURRENT.VALUE MIN)
) (IDIFFERENCE MAX MIN))) (BITBLT NIL 0 0 CURRENT.DSP (fetch (REGION LEFT) of REGION) (ADD1 (
IDIFFERENCE (fetch (REGION TOP) of REGION) LENGTH)) (fetch (REGION WIDTH) of REGION) LENGTH (QUOTE 
TEXTURE) OPERATION TEXTURE)) (TROUBLE.WITH.TRILLIUM "Unrecognized DIRECTION" DIRECTION)))))
)
(READ.ITEMTYPE NUMERIC.CHECKER 5)
(\TYPE ITEM.TYPE NAME NUMERIC.CHECKER COMMENT  "A numeric inhibitor" KIND INHIBITOR PARAMETERS  ((
\TYPE PARAMETER NAME NAME TYPE  (CONSTANT) DEFAULT  "Un-named inhibitor" COMMENT  "The item's name")  
(\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (170 . 170) COMMENT  
"A place on the screen so that it can be referenced" GRID.TYPE  (LOCATION))  (\TYPE PARAMETER NAME 
CELL TYPE  (CELL) DEFAULT CELL.1 COMMENT  "The cell which triggers this implication")  (\TYPE 
PARAMETER NAME CONDITION TYPE  (ONEOF  (EQUAL NOT.EQUAL GREATER.THAN GREATER.THAN.OR.EQUAL LESS.THAN 
LESS.THAN.OR.EQUAL)) DEFAULT EQUAL COMMENT  "The condition under which to inhibit")  (\TYPE PARAMETER 
NAME REFERENCE.VALUE TYPE  (CONSTANT) DEFAULT 0 COMMENT  "The value against which to compare")  (\TYPE
 PARAMETER NAME INHIBIT.ACTION TYPE  (FORM) DEFAULT NIL COMMENT  
"A form to EVAL if the inhibitor fires")) OTHER  (FNS  ((BOUNDING.BOX BOUNDING.BOX.NUMERIC.CHECKER)  (
INHIBIT INHIBIT.NUMERIC.CHECKER))) CLASSES  (INHIBITOR))
(DEFINEQ

(BOUNDING.BOX.NUMERIC.CHECKER
(LAMBDA (ITEM) (* edited: " 6-May-84 14:33") (BOUNDING.BOX.INHIBITOR ITEM)))

(INHIBIT.NUMERIC.CHECKER
(LAMBDA (INHIBITOR OLD.VALUE NEW.VALUE DONT.TRACE) (* HaKo "17-Aug-84 13:45") (* DAHJr 
"10-OCT-83 11:58") (DECLARE (GLOBALVARS TRILLIUM.TRACE)) (PROG ((CELL (GET.PARAMQ INHIBITOR CELL 
NUMERIC.CHECKER)) (CONDITION (GET.PARAMQ INHIBITOR CONDITION NUMERIC.CHECKER)) (REFERENCE.VALUE (
GET.PARAMQ INHIBITOR REFERENCE.VALUE NUMERIC.CHECKER)) (INHIBIT.ACTION (GET.PARAMQ INHIBITOR 
INHIBIT.ACTION NUMERIC.CHECKER)) RESULT) (SETQ RESULT (SELECTQ CONDITION (EQUAL (EQP NEW.VALUE 
REFERENCE.VALUE)) (NOT.EQUAL (NOT (EQP NEW.VALUE REFERENCE.VALUE))) (GREATER.THAN (GREATERP NEW.VALUE 
REFERENCE.VALUE)) (GREATER.THAN.OR.EQUAL (NOT (LESSP NEW.VALUE REFERENCE.VALUE))) (LESS.THAN (LESSP 
NEW.VALUE REFERENCE.VALUE)) (LESS.THAN.OR.EQUAL (NOT (GREATERP NEW.VALUE REFERENCE.VALUE))) (SHOULDNT)
)) (AND TRILLIUM.TRACE (NOT DONT.TRACE) (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE T "Test if " CELL " is " 
CONDITION " to " REFERENCE.VALUE "; result: " (COND (RESULT "inhibit") (T "OK")))) (COND (RESULT (
TRILLIUM.EVAL INHIBIT.ACTION " EVALing an INHIBIT.ACTION on a NUMERIC.CHECKER"))) (RETURN RESULT))))
)
(READ.ITEMTYPE OPEN.WINDOW.SENSOR 5)
(\TYPE ITEM.TYPE NAME OPEN.WINDOW.SENSOR COMMENT  
"A sensor, which goes black on depression, takes action, goes white again on release" KIND SENSOR 
PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) COMMENT  
"An area sensitive to touch")  (\TYPE PARAMETER NAME FRAME TYPE  (FRAME) DEFAULT NIL COMMENT  
"First frame in new window")  (\TYPE PARAMETER NAME WINDOW.REGION TYPE  (REGION) DEFAULT  (100 100 100
 100) COMMENT  "Area for new window")) OTHER  (FNS  ((SENSE SENSE.OPEN.WINDOW.SENSOR))) CLASSES  (
SENSOR))
(DEFINEQ

(SENSE.OPEN.WINDOW.SENSOR
(LAMBDA (ITEM TOUCH XCOORD YCOORD) (* HaKo " 7-Aug-84 16:45") (DECLARE (GLOBALVARS CURRENT.INTERFACE 
CURRENT.INTERFACE.WINDOW)) (COND (TOUCH (PROG (BOX FRAME WINDOW.REGION (REGION (GET.PARAMQ ITEM 
PLACEMENT OPEN.WINDOW.SENSOR))) (COND ((INSIDEP REGION XCOORD YCOORD) (BEGIN.EVENT ITEM) (SETQ BOX (
BIGGER.BOX REGION)) (SETQ FRAME (GET.PARAMQ ITEM FRAME OPEN.WINDOW.SENSOR)) (SETQ WINDOW.REGION (
GET.PARAMQ ITEM WINDOW.REGION OPEN.WINDOW.SENSOR)) (FLIP.BOX BOX) (WAITNOBUG) (FLIP.BOX BOX) (
INTERFACE.WINDOW.CREATE CURRENT.INTERFACE WINDOW.REGION FRAME (WINDOWPROP CURRENT.INTERFACE.WINDOW (
QUOTE MACHINE.STATE))) (END.EVENT) (RETURN T))))))))
)
(READ.ITEMTYPE PICTURE 5)
(\TYPE ITEM.TYPE NAME PICTURE COMMENT  "A bitmap to be added to the screen as artwork" KIND ARTWORK 
PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (100 . 100) COMMENT  
"The lower left corner of the bitmap")  (\TYPE PARAMETER NAME BITMAP TYPE  (BITMAP.NAME) DEFAULT 
EXAMPLE.BITMAP COMMENT  "The bits")  (\TYPE PARAMETER NAME SOURCE TYPE  (ONEOF  (INPUT INVERT MERGE 
TEXTURE)) DEFAULT INPUT COMMENT  "Source for BITBLT")  (\TYPE PARAMETER NAME OPERATION TYPE  (ONEOF  (
REPLACE PAINT INVERT ERASE)) DEFAULT REPLACE COMMENT  "Operation for BITBLT")  (\TYPE PARAMETER NAME 
TEXTURE TYPE  (SHADE) DEFAULT 65535 COMMENT  "Texture for BITBLT")  (\TYPE PARAMETER NAME FIGURE-COLOR
 TYPE  (COLOR.NAME) DEFAULT BLACK COMMENT  "The color corresponding to the figure")  (\TYPE PARAMETER 
NAME GROUND-COLOR TYPE  (COLOR.NAME) DEFAULT WHITE COMMENT  "The color corresponding to ground")) 
OTHER  (FNS  ((BOUNDING.BOX BOUNDING.BOX.PICTURE)  (SHOW SHOW.PICTURE))) CLASSES  (ARTWORK))
(DEFINEQ

(BOUNDING.BOX.PICTURE
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:42") (* DAHJr " 9-MAR-82 11:12") (PROG ((POS (GET.PARAMQ ITEM 
PLACEMENT PICTURE)) (BITMAP (GET.PARAMQ ITEM BITMAP PICTURE))) (OR (BITMAPP BITMAP) (SETQ BITMAP (
FIND.BITMAP BITMAP))) (RETURN (create REGION LEFT ← (fetch (POSITION XCOORD) of POS) BOTTOM ← (fetch (
POSITION YCOORD) of POS) WIDTH ← (fetch (BITMAP BITMAPWIDTH) of BITMAP) HEIGHT ← (fetch (BITMAP 
BITMAPHEIGHT) of BITMAP))))))

(SHOW.PICTURE
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:44") (* DAHJr " 5-JAN-84 19:33") (PROG ((POSITION (GET.PARAMQ 
ITEM PLACEMENT PICTURE)) (BITMAP (GET.PARAMQ ITEM BITMAP PICTURE)) (SOURCE (GET.PARAMQ ITEM SOURCE 
PICTURE)) (OPERATION (GET.PARAMQ ITEM OPERATION PICTURE)) (TEXTURE (GET.PARAMQ ITEM TEXTURE PICTURE)) 
(FIGURE-COLOR (GET.PARAMQ ITEM FIGURE-COLOR PICTURE)) (GROUND-COLOR (GET.PARAMQ ITEM GROUND-COLOR 
PICTURE))) (OR (BITMAPP BITMAP) (SETQ BITMAP (FIND.BITMAP BITMAP))) (SHOW.COLORED.BITMAP BITMAP (fetch
 (POSITION XCOORD) of POSITION) (fetch (POSITION YCOORD) of POSITION) SOURCE OPERATION TEXTURE 
FIGURE-COLOR GROUND-COLOR))))
)
(READ.ITEMTYPE POSITION.INDICATOR 5)
(\TYPE ITEM.TYPE NAME POSITION.INDICATOR COMMENT  "A bitmap which gets INVERTed into the frame" KIND 
DISPLAYER PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (100 . 100) COMMENT  
"The origin of the coordinate system")  (\TYPE PARAMETER NAME CELL TYPE  (CELL) DEFAULT CELL.1 COMMENT
  "The cell indicating the position of the indicator")  (\TYPE PARAMETER NAME BITMAP TYPE  (
BITMAP.NAME) DEFAULT SIMPLE.BUTTON.BITMAP COMMENT  "The bitmap")) OTHER  (FNS  ((BOUNDING.BOX 
BOUNDING.BOX.POSITION.INDICATOR)  (SHOW SHOW.POSITION.INDICATOR)  (DISPLAY DISPLAY.POSITION.INDICATOR)
  (RESET RESET.POSITION.INDICATOR))) CLASSES  (DISPLAYER))
(DEFINEQ

(BOUNDING.BOX.POSITION.INDICATOR
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 14:45") (* DAHJr "13-Apr-84 10:08") (PROG ((POS (GET.PARAMQ ITEM 
PLACEMENT POSITION.INDICATOR)) (BITMAP (GET.PARAMQ ITEM BITMAP POSITION.INDICATOR))) (OR (BITMAPP 
BITMAP) (SETQ BITMAP (FIND.BITMAP BITMAP))) (RETURN (create REGION LEFT ← (fetch (POSITION XCOORD) of 
POS) BOTTOM ← (fetch (POSITION YCOORD) of POS) WIDTH ← (fetch (BITMAP BITMAPWIDTH) of BITMAP) HEIGHT ←
 (fetch (BITMAP BITMAPHEIGHT) of BITMAP))))))

(SHOW.POSITION.INDICATOR
(LAMBDA (ITEM) (* DAHJr "13-Apr-84 19:21") (SET.FIELDQ ITEM OLD.VALUE NIL)))

(DISPLAY.POSITION.INDICATOR
(LAMBDA (ITEM FRAME) (* HaKo " 6-Aug-84 14:49") (* DAHJr "13-Apr-84 19:25") (PROG ((BITMAP (GET.PARAMQ
 ITEM BITMAP POSITION.INDICATOR)) (POSITION (GET.PARAMQ ITEM PLACEMENT POSITION.INDICATOR)) (OLD.VALUE
 (GET.FIELDQ ITEM OLD.VALUE POSITION.INDICATOR)) (NEW.VALUE (GET.CURRENT.VALUE (GET.PARAMQ ITEM CELL 
POSITION.INDICATOR)))) (OR (BITMAPP BITMAP) (SETQ BITMAP (FIND.BITMAP BITMAP))) (COND ((NULL OLD.VALUE
)) ((POSITIONP OLD.VALUE) (SHOW.COLORED.BITMAP BITMAP (IPLUS (fetch (POSITION XCOORD) of OLD.VALUE) (
fetch (POSITION XCOORD) of POSITION)) (IPLUS (fetch (POSITION YCOORD) of OLD.VALUE) (fetch (POSITION 
YCOORD) of POSITION)) (QUOTE INPUT) (QUOTE INVERT) NIL (QUOTE BLACK) (QUOTE WHITE))) (T (
TROUBLE.WITH.TRILLIUM "Value not a position" OLD.VALUE))) (COND ((POSITIONP NEW.VALUE) (
SHOW.COLORED.BITMAP BITMAP (IPLUS (fetch (POSITION XCOORD) of NEW.VALUE) (fetch (POSITION XCOORD) of 
POSITION)) (IPLUS (fetch (POSITION YCOORD) of NEW.VALUE) (fetch (POSITION YCOORD) of POSITION)) (QUOTE
 INPUT) (QUOTE INVERT) NIL (QUOTE BLACK) (QUOTE WHITE)) (SET.FIELDQ ITEM OLD.VALUE NEW.VALUE)) (T (
TROUBLE.WITH.TRILLIUM "Value not a position" NEW.VALUE))))))

(RESET.POSITION.INDICATOR
(LAMBDA (ITEM) (* DAHJr "13-Apr-84 19:21") (SET.FIELDQ ITEM OLD.VALUE NIL)))
)
(READ.ITEMTYPE POSITION.SENSOR 5)
(\TYPE ITEM.TYPE NAME POSITION.SENSOR COMMENT  "A sensor which shows nothing but does take action" 
KIND SENSOR PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) 
COMMENT  "Boundary of sensible positions")  (\TYPE PARAMETER NAME ORIGIN TYPE  (POSITION) DEFAULT  (50
 . 50) COMMENT  "Origin of co-ordinate system for positions")  (\TYPE PARAMETER NAME CLOSENESS TYPE  (
INTEGER) DEFAULT 10 COMMENT  "Distance to old position before position is detected")  (\TYPE PARAMETER
 NAME WHEN.SENSED TYPE  (ONEOF  (GOING.DOWN GOING.UP WHEN.DOWN WHEN.UP ALWAYS UNTIL.RELEASED)) DEFAULT
 UNTIL.RELEASED COMMENT  "Condition of mouse for sensing")  (\TYPE PARAMETER NAME CELL TYPE  (CELL) 
DEFAULT CELL1 COMMENT  "Cell for holding the position")) OTHER  (FNS  ((SENSE SENSE.POSITION.SENSOR)))
 CLASSES  (SENSOR))
(DEFINEQ

(SENSE.POSITION.SENSOR
(LAMBDA (ITEM TOUCH XCOORD YCOORD) (* HaKo " 7-Aug-84 16:58") (* DAHJr "13-Apr-84 18:51") (DECLARE (
GLOBALVARS CURRENT.DSP LASTMOUSEBUTTONS)) (PROG ((PLACEMENT (GET.PARAMQ ITEM PLACEMENT POSITION.SENSOR
)) ORIGIN CELL WHEN.SENSED CLOSENESS WITHIN.RANGE OLD.VALUE NEWX NEWY RETVAL) (COND ((INSIDEP 
PLACEMENT XCOORD YCOORD) (BEGIN.EVENT ITEM) (SETQ ORIGIN (GET.PARAMQ ITEM ORIGIN POSITION.SENSOR)) (
SETQ CELL (GET.PARAMQ ITEM CELL POSITION.SENSOR)) (SETQ WHEN.SENSED (GET.PARAMQ ITEM WHEN.SENSED 
POSITION.SENSOR)) (SETQ CLOSENESS (GET.PARAMQ ITEM CLOSENESS POSITION.SENSOR)) (SETQ NEWX (IDIFFERENCE
 XCOORD (fetch (POSITION XCOORD) of ORIGIN))) (SETQ NEWY (IDIFFERENCE YCOORD (fetch (POSITION YCOORD) 
of ORIGIN))) (COND ((ZEROP CLOSENESS) (SETQ WITHIN.RANGE T)) ((POSITIONP (SETQ OLD.VALUE (
GET.CURRENT.VALUE CELL))) (SETQ WITHIN.RANGE (NOT (ILESSP CLOSENESS (MAX (ABS (IDIFFERENCE NEWX (fetch
 (POSITION XCOORD) of OLD.VALUE))) (ABS (IDIFFERENCE NEWY (fetch (POSITION YCOORD) of OLD.VALUE)))))))
) (T (TROUBLE.WITH.TRILLIUM "Old value not a position" OLD.VALUE) (SETQ WITHIN.RANGE T))) (SELECTQ 
WHEN.SENSED (GOING.DOWN (COND ((AND TOUCH WITHIN.RANGE) (CHANGE.CURRENT.VALUE CELL (NEW.POSITION NEWX 
NEWY)) (WAITNOBUG))) (SETQ RETVAL TOUCH)) (GOING.UP (COND ((AND TOUCH WITHIN.RANGE) (WAITNOBUG) (SETQ 
XCOORD (LASTMOUSEX CURRENT.DSP)) (SETQ YCOORD (LASTMOUSEY CURRENT.DSP)) (COND ((INSIDEP PLACEMENT 
XCOORD YCOORD) (CHANGE.CURRENT.VALUE CELL (NEW.POSITION (IDIFFERENCE XCOORD (fetch (POSITION XCOORD) 
of ORIGIN)) (IDIFFERENCE YCOORD (fetch (POSITION YCOORD) of ORIGIN)))))) (SETQ RETVAL T)))) (WHEN.DOWN
 (COND ((AND TOUCH WITHIN.RANGE) (CHANGE.CURRENT.VALUE CELL (NEW.POSITION NEWX NEWY)) (SETQ RETVAL T))
)) (WHEN.UP (COND ((AND WITHIN.RANGE (NOT TOUCH)) (CHANGE.CURRENT.VALUE CELL (NEW.POSITION NEWX NEWY))
 (SETQ RETVAL T)))) (ALWAYS (COND (WITHIN.RANGE (CHANGE.CURRENT.VALUE CELL (NEW.POSITION NEWX NEWY)) (
SETQ RETVAL T)))) (UNTIL.RELEASED (COND (WITHIN.RANGE (until (MOUSESTATE UP) do (SETQ XCOORD (
LASTMOUSEX CURRENT.DSP)) (SETQ YCOORD (LASTMOUSEY CURRENT.DSP)) (COND ((INSIDEP PLACEMENT XCOORD 
YCOORD) (CHANGE.CURRENT.VALUE CELL (NEW.POSITION (IDIFFERENCE XCOORD (fetch (POSITION XCOORD) of 
ORIGIN)) (IDIFFERENCE YCOORD (fetch (POSITION YCOORD) of ORIGIN))))))) (SETQ RETVAL T)))) (
TROUBLE.WITH.TRILLIUM "Unrecognized WHEN.SENSED value")) (END.EVENT) (RETURN RETVAL))))))
)
(READ.ITEMTYPE PRINT.REGION 5)
(\TYPE ITEM.TYPE NAME PRINT.REGION COMMENT  "A region through which to view a cell" KIND DISPLAYER 
PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (10 10 80 20) COMMENT  
"The boundaries of the viewing area")  (\TYPE PARAMETER NAME CELL TYPE  (CELL) DEFAULT CELL.1 COMMENT 
 "The cell to be printed")  (\TYPE PARAMETER NAME XALIGNMENT TYPE  (ONEOF  (LEFT CENTER RIGHT)) 
DEFAULT CENTER COMMENT  "Horizontal alignment")  (\TYPE PARAMETER NAME YALIGNMENT TYPE  (ONEOF  (TOP 
CENTER BOTTOM)) DEFAULT CENTER COMMENT  "Vertical alignment")  (\TYPE PARAMETER NAME FONT TYPE  (FONT)
 DEFAULT NIL COMMENT  "The font to print the value in")  (\TYPE PARAMETER NAME MARGIN TYPE  (INTEGER) 
DEFAULT 2 COMMENT  "The thickness of a margin in the region")  (\TYPE PARAMETER NAME BACKGROUND TYPE  
(SHADE) DEFAULT 42405 COMMENT  "The shade of a fresh print region")  (\TYPE PARAMETER NAME SOURCE TYPE
  (ONEOF  (INPUT INVERT)) DEFAULT INPUT COMMENT  "How the print is combined with the texture")  (\TYPE
 PARAMETER NAME OPERATION TYPE  (ONEOF  (REPLACE PAINT INVERT ERASE)) DEFAULT REPLACE COMMENT  
"How the print is combined with the
background")) OTHER  (FNS  ((SHOW SHOW.PRINT.REGION)  (DISPLAY DISPLAY.PRINT.REGION))) CLASSES  (
DISPLAYER))
(DEFINEQ

(SHOW.PRINT.REGION
(LAMBDA (ITEM) (* rao: "22-JUN-82 15:30") NIL))

(DISPLAY.PRINT.REGION
  [LAMBDA (ITEM)                                             (* edited: "20-Nov-84 11:13")
                                                             (* DAHJr " 7-OCT-83 11:25")
    (DECLARE (GLOBALVARS ANALYZE.LOT.DSP CURRENT.DSP))
    (PROG ((CELL (GET.PARAMQ ITEM CELL PRINT.REGION))
	   (REGION (GET.PARAMQ ITEM PLACEMENT PRINT.REGION))
	   (X.ALIGNMENT (GET.PARAMQ ITEM XALIGNMENT PRINT.REGION))
	   (Y.ALIGNMENT (GET.PARAMQ ITEM YALIGNMENT PRINT.REGION))
	   (SOURCE (GET.PARAMQ ITEM SOURCE PRINT.REGION))
	   (OPERATION (GET.PARAMQ ITEM OPERATION PRINT.REGION))
	   (TEXTURE (GET.PARAMQ ITEM TEXTURE PRINT.REGION))
	   (BACKGROUND (GET.PARAMQ ITEM BACKGROUND PRINT.REGION))
	   (FONT (GET.PARAMQ ITEM FONT PRINT.REGION))
	   (MARGIN (GET.PARAMQ ITEM MARGIN PRINT.REGION))
	   DSP OLD.CLIPPING.REGION CBOX LEFT BOTTOM WIDTH HEIGHT BOX LIST.OF.LINES XCOORD YCOORD 
	   TEXT.WIDTH FONT.HEIGHT FONT.DESCENT OLD.SOURCE OLD.OPERATION OLD.FONT TX TY)
          (SETQ DSP CURRENT.DSP)
          (SETQ OLD.CLIPPING.REGION (DSPCLIPPINGREGION NIL DSP))
          (SETQ CBOX (INTERSECTREGIONS REGION OLD.CLIPPING.REGION))
          (COND
	    (CBOX (DSPFILL CBOX BACKGROUND (QUOTE REPLACE)
			   DSP)
		  (SETQ LEFT (IPLUS MARGIN (fetch (REGION LEFT) of REGION)))
		  (SETQ BOTTOM (IPLUS MARGIN (fetch (REGION BOTTOM) of REGION)))
		  (SETQ WIDTH (IDIFFERENCE (fetch (REGION WIDTH) of REGION)
					   (LSH MARGIN 1)))
		  (SETQ HEIGHT (IDIFFERENCE (fetch (REGION HEIGHT) of REGION)
					    (LSH MARGIN 1)))
		  (SETQ BOX (create REGION
				    LEFT ← LEFT
				    BOTTOM ← BOTTOM
				    WIDTH ← WIDTH
				    HEIGHT ← HEIGHT))
		  (OR (LISTP (SETQ LIST.OF.LINES (GET.CURRENT.VALUE CELL)))
		      (SETQ LIST.OF.LINES (LIST LIST.OF.LINES)))
		  (OR FONT (SETQ FONT (DSPFONT NIL CURRENT.DSP)))
		  (SETQ FONT.HEIGHT (FONTPROP FONT (QUOTE HEIGHT)))
		  (SETQ FONT.DESCENT (FONTPROP FONT (QUOTE DESCENT)))
		  (DSPCLIPPINGREGION BOX DSP)
		  (SETQ XCOORD (SELECTQ X.ALIGNMENT
					(LEFT LEFT)
					(CENTER (IPLUS LEFT (RSH WIDTH 1)))
					(RIGHT (IPLUS LEFT WIDTH))
					(SHOULDNT)))
		  (SETQ YCOORD (SELECTQ Y.ALIGNMENT
					(BOTTOM BOTTOM)
					(CENTER (IPLUS BOTTOM (RSH (IDIFFERENCE HEIGHT FONT.HEIGHT)
								   1)))
					(TOP (IPLUS BOTTOM (IDIFFERENCE HEIGHT FONT.HEIGHT)))
					(SHOULDNT)))
		  (SETQ TY (SELECTQ Y.ALIGNMENT
				    (BOTTOM (IPLUS YCOORD (ITIMES FONT.HEIGHT (SUB1 (LENGTH 
										    LIST.OF.LINES)))
						   FONT.DESCENT))
				    (CENTER (IPLUS YCOORD (RSH (ITIMES FONT.HEIGHT
								       (SUB1 (LENGTH LIST.OF.LINES)))
							       1)
						   FONT.DESCENT))
				    (TOP YCOORD)
				    (SHOULDNT)))
		  (SETQ OLD.FONT (DSPFONT FONT DSP))
		  (SETQ OLD.SOURCE (DSPSOURCETYPE SOURCE CURRENT.DSP))
		  (SETQ OLD.OPERATION (DSPOPERATION OPERATION CURRENT.DSP))
		  (for LINE in LIST.OF.LINES
		     do (SETQ TEXT.WIDTH (STRINGWIDTH LINE FONT))
			(SETQ TX (SELECTQ X.ALIGNMENT
					  (LEFT XCOORD)
					  (CENTER (IDIFFERENCE XCOORD (RSH TEXT.WIDTH 1)))
					  (RIGHT (IDIFFERENCE XCOORD TEXT.WIDTH))
					  (SHOULDNT)))
			(DSPXPOSITION TX DSP)
			(DSPYPOSITION TY DSP)
			(PRIN1 LINE DSP)
			(SETQ TY (IDIFFERENCE TY FONT.HEIGHT)))
		  (DSPCLIPPINGREGION OLD.CLIPPING.REGION CURRENT.DSP)
		  (DSPFONT OLD.FONT CURRENT.DSP)
		  (DSPSOURCETYPE OLD.SOURCE CURRENT.DSP)
		  (DSPOPERATION OLD.OPERATION CURRENT.DSP])
)
(READ.ITEMTYPE SENSITIVE.REGION 5)
(\TYPE ITEM.TYPE NAME SENSITIVE.REGION COMMENT  "A sensor which shows nothing but does take action" 
KIND SENSOR PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) 
COMMENT  "An area sensitive to touch")  (\TYPE PARAMETER NAME ACTION.FORM TYPE  (FORM) DEFAULT  (
ACTION.PRINT  "This action brought to you by a SENSITIVE.REGION") COMMENT  
"The action to be taken as the sensitive region is touched")) OTHER  (FNS  ((SENSE 
SENSE.SENSITIVE.REGION))) CLASSES  (SENSOR))
(DEFINEQ

(SENSE.SENSITIVE.REGION
(LAMBDA (ITEM TOUCH XCOORD YCOORD) (* HaKo " 7-Aug-84 17:01") (* edited: "31-MAR-82 10:21") (COND ((
AND TOUCH (INSIDEP (GET.PARAMQ ITEM PLACEMENT SENSITIVE.REGION) XCOORD YCOORD)) (BEGIN.EVENT ITEM) (
TRILLIUM.EVAL (GET.PARAMQ ITEM ACTION.FORM SENSITIVE.REGION)) (WAITNOBUG) (END.EVENT) T))))
)
(READ.ITEMTYPE SHADED.REGION 5)
(\TYPE ITEM.TYPE NAME SHADED.REGION COMMENT  "A bitmap to be added to the screen as artwork" KIND 
ARTWORK PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) COMMENT  
"The region to be shaded")  (\TYPE PARAMETER NAME OPERATION TYPE  (ONEOF  (REPLACE PAINT INVERT ERASE)
) DEFAULT REPLACE COMMENT  "Operation for BITBLT")  (\TYPE PARAMETER NAME TEXTURE TYPE  (SHADE) 
DEFAULT 65535 COMMENT  "Texture for BITBLT")) OTHER  (FNS  ((SHOW SHOW.SHADED.REGION))) CLASSES  (
ARTWORK))
(DEFINEQ

(SHOW.SHADED.REGION
(LAMBDA (SHADED.REGION) (* HaKo "17-Aug-84 13:21") (* edited: "17-Jun-84 16:51") (DECLARE (GLOBALVARS 
CURRENT.DSP)) (PROG ((REGION (GET.PARAMQ SHADED.REGION PLACEMENT SHADED.REGION)) (OPERATION (
GET.PARAMQ SHADED.REGION OPERATION SHADED.REGION)) (TEXTURE (GET.PARAMQ SHADED.REGION TEXTURE 
SHADED.REGION))) (BITBLT NIL 0 0 CURRENT.DSP (fetch (REGION LEFT) of REGION) (fetch (REGION BOTTOM) of
 REGION) (fetch (REGION WIDTH) of REGION) (fetch (REGION HEIGHT) of REGION) (QUOTE TEXTURE) OPERATION 
TEXTURE))))
)
(READ.ITEMTYPE SIMPLE.PROPOGATOR 5)
(\TYPE ITEM.TYPE NAME SIMPLE.PROPOGATOR COMMENT  
"Means by which a change in one cell can cause changes in others" KIND IMPLICATION PARAMETERS  ((\TYPE
 PARAMETER NAME NAME TYPE  (CONSTANT) DEFAULT  "Un-named implication" COMMENT  "The item's name")  (
\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (170 . 170) COMMENT  
"A place on the screen so that it can be referenced" GRID.TYPE  (LOCATION))  (\TYPE PARAMETER NAME 
CELL TYPE  (CELL) DEFAULT CELL.1 COMMENT  "The cell which triggers this implication")  (\TYPE 
PARAMETER NAME TO.CELL TYPE  (CELL) DEFAULT CELL.2 COMMENT  
"The cell to which the new value should go")  (\TYPE PARAMETER NAME EXPRESSION TYPE  (FORM) DEFAULT 
NEW.VALUE COMMENT  "An expression in terms of NEW.VALUE for computing the value to propogate")) OTHER 
 (FNS  ((BOUNDING.BOX BOUNDING.BOX.SIMPLE.PROPOGATOR)  (IMPLY IMPLY.SIMPLE.PROPOGATOR))) CLASSES  (
IMPLICATION))
(DEFINEQ

(BOUNDING.BOX.SIMPLE.PROPOGATOR
(LAMBDA (ITEM) (* edited: " 6-May-84 14:32") (BOUNDING.BOX.IMPLICATION ITEM)))

(IMPLY.SIMPLE.PROPOGATOR
(LAMBDA (IMPLICATION OLD.VALUE NEW.VALUE DONT.TRACE) (* HaKo "17-Aug-84 13:45") (* DAHJr 
"10-OCT-83 11:51") (DECLARE (GLOBALVARS TRILLIUM.TRACE)) (PROG ((CELL (GET.PARAMQ IMPLICATION CELL 
SIMPLE.PROPOGATOR)) (TO.CELL (GET.PARAMQ IMPLICATION TO.CELL SIMPLE.PROPOGATOR)) (EXPRESSION (
GET.PARAMQ IMPLICATION EXPRESSION SIMPLE.PROPOGATOR)) VALUE) (SETQ VALUE (TRILLIUM.EVAL EXPRESSION)) (
CHANGE.CURRENT.VALUE TO.CELL VALUE) (AND TRILLIUM.TRACE (NOT DONT.TRACE) (TRILLIUM.PRINTOUT ON 
TRILLIUM.TRACE T "Propagate " NEW.VALUE " in " CELL " via " EXPRESSION " to " VALUE " in " TO.CELL))))
)
)
(READ.ITEMTYPE SLIDE.SENSOR 5)
(\TYPE ITEM.TYPE NAME SLIDE.SENSOR COMMENT  "A sensor which shows nothing but does take action" KIND 
SENSOR PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (REGION) DEFAULT  (100 100 30 30) COMMENT  
"An area sensitive to touch")  (\TYPE PARAMETER NAME MAX.VALUE TYPE  (INTEGER) DEFAULT 100 COMMENT  
"The max value of the slider")  (\TYPE PARAMETER NAME MIN.VALUE TYPE  (INTEGER) DEFAULT 0 COMMENT  
"The min value of the slider")  (\TYPE PARAMETER NAME CELL TYPE  (CELL) DEFAULT CELL.1 COMMENT  
"An area sensitive to touch")) OTHER  (FNS  ((SENSE SENSE.SLIDE.SENSOR))) CLASSES  (SENSOR))
(DEFINEQ

(SENSE.SLIDE.SENSOR
(LAMBDA (ITEM TOUCH XCOORD YCOORD) (* HaKo " 7-Aug-84 17:07") (* DAHJr "10-Apr-84 19:35") (DECLARE (
GLOBALVARS CURRENT.INTERFACE.WINDOW LASTMOUSEBUTTONS)) (COND (TOUCH (PROG ((PLACEMENT (GET.PARAMQ ITEM
 PLACEMENT SLIDE.SENSOR)) BOTTOM HEIGHT MAX.VALUE MIN.VALUE CELL NEW.VALUE) (COND ((INSIDEP PLACEMENT 
XCOORD YCOORD) (BEGIN.EVENT ITEM) (SETQ BOTTOM (fetch (REGION BOTTOM) of PLACEMENT)) (SETQ HEIGHT (
fetch (REGION HEIGHT) of PLACEMENT)) (SETQ MAX.VALUE (GET.PARAMQ ITEM MAX.VALUE SLIDE.SENSOR)) (SETQ 
MIN.VALUE (GET.PARAMQ ITEM MIN.VALUE SLIDE.SENSOR)) (SETQ CELL (GET.PARAMQ ITEM CELL SLIDE.SENSOR)) (
until (MOUSESTATE UP) do (SETQ NEW.VALUE (IPLUS MIN.VALUE (IQUOTIENT (ITIMES (IDIFFERENCE (LASTMOUSEY 
CURRENT.INTERFACE.WINDOW) BOTTOM) (IDIFFERENCE MAX.VALUE MIN.VALUE)) HEIGHT))) (CHANGE.CURRENT.VALUE 
CELL (MIN MAX.VALUE (MAX MIN.VALUE NEW.VALUE)))) (END.EVENT) (RETURN T))))))))
)
(READ.ITEMTYPE STRAIGHT.LINE 5)
(\TYPE ITEM.TYPE NAME STRAIGHT.LINE COMMENT  "A straight line between screen locations" KIND ARTWORK 
PARAMETERS  ((\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION2) DEFAULT  (100 100 200 200 NIL) COMMENT 
 "The endpoints of the line")  (\TYPE PARAMETER NAME WIDTH TYPE  (INTEGER) DEFAULT 4 COMMENT  
"The width of the line in screen points")) OTHER  (FNS  ((BOUNDING.BOX BOUNDING.BOX.STRAIGHT.LINE)  (
SHOW SHOW.STRAIGHT.LINE))) CLASSES  (ARTWORK))
(DEFINEQ

(BOUNDING.BOX.STRAIGHT.LINE
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 15:09") (* DAHJr "15-JAN-83 16:47") (PROG ((POS2 (GET.PARAMQ ITEM 
PLACEMENT STRAIGHT.LINE)) X1 Y1 X2 Y2) (SETQ X1 (fetch (POSITION2 XCOORD1) of POS2)) (SETQ Y1 (fetch (
POSITION2 YCOORD1) of POS2)) (SETQ X2 (fetch (POSITION2 XCOORD2) of POS2)) (SETQ Y2 (fetch (POSITION2 
YCOORD2) of POS2)) (RETURN (create REGION LEFT ← (MIN X1 X2) BOTTOM ← (MIN Y1 Y2) WIDTH ← (ABS (
IDIFFERENCE X1 X2)) HEIGHT ← (ABS (IDIFFERENCE Y1 Y2)))))))

(SHOW.STRAIGHT.LINE
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 15:11") (* edited: " 8-MAR-82 17:40") (DECLARE (GLOBALVARS 
CURRENT.DSP)) (PROG ((POS2 (GET.PARAMQ ITEM PLACEMENT STRAIGHT.LINE)) (WIDTH (GET.PARAMQ ITEM WIDTH 
STRAIGHT.LINE))) (MOVETO (fetch (POSITION2 XCOORD1) of POS2) (fetch (POSITION2 YCOORD1) of POS2) 
CURRENT.DSP) (DRAWTO (fetch (POSITION2 XCOORD2) of POS2) (fetch (POSITION2 YCOORD2) of POS2) WIDTH NIL
 CURRENT.DSP))))
)
(READ.ITEMTYPE TIMEOUT 5)
(\TYPE ITEM.TYPE NAME TIMEOUT COMMENT  "A sensor which takes action if CELL > BASE + DELAY" KIND 
SENSOR PARAMETERS  ((\TYPE PARAMETER NAME NAME TYPE  (CONSTANT) DEFAULT  "Un-named timeout" COMMENT  
"The item's name")  (\TYPE PARAMETER NAME PLACEMENT TYPE  (POSITION) DEFAULT  (170 . 170) COMMENT  
"A location for identification purposes" GRID.TYPE  (LOCATION))  (\TYPE PARAMETER NAME BASE TYPE  (
CELL) DEFAULT CELL.1 COMMENT  "A cell which is the reference time")  (\TYPE PARAMETER NAME DELAY TYPE 
 (INTEGER) DEFAULT 10000 COMMENT  "The time (in milliseconds) before the action should be taken")  (
\TYPE PARAMETER NAME ACTION.FORM TYPE  (FORM) DEFAULT  (ACTION.PRINT  
"This action is brought to you by a TIMEOUT") COMMENT  "The action to be taken on timeout")) OTHER  (
FNS  ((BOUNDING.BOX BOUNDING.BOX.TIMEOUT)  (SENSE SENSE.TIMEOUT))) CLASSES  (SENSOR))
(DEFINEQ

(BOUNDING.BOX.TIMEOUT
(LAMBDA (ITEM) (* HaKo " 6-Aug-84 15:12") (* DAHJr "17-APR-83 14:05") (PROG ((LOCATION (GET.PARAMQ 
ITEM PLACEMENT TIMEOUT))) (RETURN (BOUNDING.BOX.FOR.SEGMENTS (fetch (LOCATION X) of LOCATION) (fetch (
LOCATION Y) of LOCATION) 8 1)))))

(SENSE.TIMEOUT
(LAMBDA (ITEM TOUCH XCOORD YCOORD) (* HaKo " 7-Aug-84 17:10") (PROG ((BASE (GET.PARAMQ ITEM BASE 
TIMEOUT)) (DELAY (GET.PARAMQ ITEM DELAY TIMEOUT)) (ACTION (GET.PARAMQ ITEM ACTION.FORM TIMEOUT))) (
COND ((IGREATERP (CELL.VALUE CLOCK) (IPLUS DELAY (GET.CURRENT.VALUE BASE))) (BEGIN.EVENT ITEM) (
TRILLIUM.EVAL ACTION) (END.EVENT) (RETURN T))))))
)
(COMPILE.INTERNAL.FNS.IF.NECESSARY)
(PUTPROPS PRIMITIVE-ITEMTYPES COPYRIGHT ("Xerox Corporation" 1984))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1681 5286 (ANALYZE.ARROW 1691 . 2043) (BOUNDING.BOX.ARROW 2045 . 3089) (SHOW.ARROW 3091
 . 3955) (RESET.ARROW 3957 . 4046) (ARROW.HEAD.POSITIONS 4048 . 5284)) (6341 9896 (
ANALYZE.ARROW.TWO.HEADS 6351 . 6930) (BOUNDING.BOX.ARROW.TWO.HEADS 6932 . 8426) (SHOW.ARROW.TWO.HEADS 
8428 . 9743) (RESET.ARROW.TWO.HEADS 9745 . 9894)) (10529 11780 (SHOW.BORDER 10539 . 11778)) (12417 
12932 (BOUNDING.BOX.BUTTON.SENSOR 12427 . 12703) (SENSE.BUTTON.SENSOR 12705 . 12930)) (13571 14570 (
BOUNDING.BOX.CIRCLE 13581 . 14114) (SHOW.CIRCLE 14116 . 14568)) (15434 16687 (BOUNDING.BOX.ELLIPSE 
15444 . 16087) (SHOW.ELLIPSE 16089 . 16685)) (17299 17734 (SENSE.FLASHING.SENSITIVE.REGION 17309 . 
17732)) (18547 19209 (BOUNDING.BOX.IMPLICATION 18557 . 18825) (IMPLY.IMPLICATION 18827 . 19207)) (
20375 21814 (BOUNDING.BOX.IMPLICATION.CHANGE.FRAME 20385 . 20683) (IMPLY.IMPLICATION.CHANGE.FRAME 
20685 . 21812)) (22971 25404 (BOUNDING.BOX.INDICATOR 22981 . 23443) (SHOW.INDICATOR 23445 . 23558) (
DISPLAY.INDICATOR 23560 . 25294) (RESET.INDICATOR 25296 . 25402)) (26194 27024 (BOUNDING.BOX.INHIBITOR
 26204 . 26480) (INHIBIT.INHIBITOR 26482 . 27022)) (27733 28021 (BOUNDING.BOX.INIT.CELL 27743 . 27852)
 (INITIALIZE.INIT.CELL 27854 . 28019)) (28726 29192 (BOUNDING.BOX.INITIALIZATION 28736 . 29022) (
INITIALIZE.INITIALIZATION 29024 . 29190)) (29805 30285 (SENSE.INVERTING.SENSITIVE.REGION 29815 . 30283
)) (30892 31556 (SHOW.LIGHT 30902 . 31011) (DISPLAY.LIGHT 31013 . 31554)) (32757 35068 (SHOW.LIGHT.BAR
 32767 . 32837) (DISPLAY.LIGHT.BAR 32839 . 35066)) (36114 37350 (BOUNDING.BOX.NUMERIC.CHECKER 36124 . 
36234) (INHIBIT.NUMERIC.CHECKER 36236 . 37348)) (37939 38627 (SENSE.OPEN.WINDOW.SENSOR 37949 . 38625))
 (39650 40766 (BOUNDING.BOX.PICTURE 39660 . 40114) (SHOW.PICTURE 40116 . 40764)) (41462 43369 (
BOUNDING.BOX.POSITION.INDICATOR 41472 . 41959) (SHOW.POSITION.INDICATOR 41961 . 42066) (
DISPLAY.POSITION.INDICATOR 42068 . 43259) (RESET.POSITION.INDICATOR 43261 . 43367)) (44238 46669 (
SENSE.POSITION.SENSOR 44248 . 46667)) (47953 51467 (SHOW.PRINT.REGION 47963 . 48033) (
DISPLAY.PRINT.REGION 48035 . 51465)) (52005 52338 (SENSE.SENSITIVE.REGION 52015 . 52336)) (52882 53427
 (SHOW.SHADED.REGION 52892 . 53425)) (54371 55116 (BOUNDING.BOX.SIMPLE.PROPOGATOR 54381 . 54495) (
IMPLY.SIMPLE.PROPOGATOR 54497 . 55114)) (55743 56673 (SENSE.SLIDE.SENSOR 55753 . 56671)) (57155 58100 
(BOUNDING.BOX.STRAIGHT.LINE 57165 . 57660) (SHOW.STRAIGHT.LINE 57662 . 58098)) (58990 59629 (
BOUNDING.BOX.TIMEOUT 59000 . 59262) (SENSE.TIMEOUT 59264 . 59627)))))
STOP