(FILECREATED " 1-Mar-85 16:47:24" {ERIS}<LISPCORE>LIBRARY>DANDELIONUFO.;7 19391  

      changes to:  (FNS \DANDELIONUFO.UPDATEDAEMON \RochesterWritePage \DANDELION\STARTCOLOR)
		   (VARS \RochesterDisplayOffsetRegister)

      previous date: "21-Feb-85 16:25:40" {ERIS}<LISPCORE>LIBRARY>DANDELIONUFO.;6)


(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT DANDELIONUFOCOMS)

(RPAQQ DANDELIONUFOCOMS ((COMS (* driver for UFO systems Dandelion BusMaster color card with 6 bit 
				  colormap)
			       (FNS \DANDELIONUFOINITCOLOR)
			       (FNS \DANDELIONUFO\EXTRACTCOLORINTENSITY \DANDELION\STARTCOLOR 
				    \DANDELION\STOPCOLOR \DANDELION\SETSCREENCOLORMAP 
				    \DANDELIONCOLORLEVEL \DANDELION\CONVERTCOLORMAPENTRY 
				    \DANDELION\WRITELUT \DANDELION\SENDCOLORMAPENTRY 
				    \DANDELIONROTATECOLORMAP)
			       (FNS \DDLCOLOR.LOCKFNS \DDLCOLOR.LOCKPAGES)
			       (FNS \REMOVE.PERIODIC.INTERRUPT \INSTALL.PERIODIC.INTERRUPT)
			       (FNS PCCOLORSCROLL PCCOLORSCROLLH PCROTATELUT PCWRITELUT PCWRITECOLOR 
				    PCWRITEPIXEL PCREADPIXEL PCSENDCOLORMAPENTRY \RochesterWritePage)
			       (FNS \BITMAPPAGES \BitmapWords \DIRTYPAGEP \MAKECLEANPAGE 
				    \MAKEDIRTYPAGE \DANDELIONUFO.UPDATEDAEMON \UFOCOLOR.EVENTFN 
				    \DANDELION\INITCOLORS)
			       (MACROS \DIRTYPAGEP)
			       (CONSTANTS DDLPIXELSPERPAGE DDLPIXELSPERWORD \VMAP.NOTDIRTY 
					  \PCColorMapBase \RochesterDisplayBase 
					  \RochesterDisplayOffsetRegister 
					  \RochesterDisplayOffsetRegisterLo \RochesterBUSADDRHI 
					  \RochesterBUSADDRLO \RochesterPIXELSPERPAGE)
			       (PROP ARGNAMES \BUSBLTOUTNYBBLES)
			       (FILES BUSMASTER)
			       (VARS \DDLCOLOR.LOCKEDFNS \DDLCOLOR.LOCKEDVARS)
			       (P (\DDLCOLOR.LOCKFNS)))
			 (DECLARE: DONTEVAL@COMPILE DOCOPY (P (\DANDELIONUFOINITCOLOR)
							      (\CREATEDISPLAY (QUOTE 
									      DANDELIONUFODISPLAY)
									      \DANDELIONUFOWSOPS 
									      \DANDELIONUFOWSDATA
									      (FUNCTION 
										\UFOCOLOR.EVENTFN)))))
)



(* driver for UFO systems Dandelion BusMaster color card with 6 bit colormap)

(DEFINEQ

(\DANDELIONUFOINITCOLOR
  [LAMBDA NIL                                                (* hdj " 5-Feb-85 11:46")
    (DECLARE (GLOBALVARS \DANDELIONUFOWSOPS \DANDELIONUFOWSDATA))
    (SETQ \DANDELIONUFOWSOPS (create WSOPS
				     WSCHANGEBACKGROUND ←(FUNCTION COLORBACKGROUND)
				     WSCHANGEBACKGROUNDBORDER ←(FUNCTION NILL)
				     WSDISPLAYHEIGHT ←(FUNCTION NILL)
				     STARTCOLOR ←(FUNCTION \DANDELION\STARTCOLOR)
				     STOPCOLOR ←(FUNCTION \DANDELION\STOPCOLOR)
				     SETSCREENCOLORMAP ←(FUNCTION \DANDELION\SETSCREENCOLORMAP)
				     COLORLEVEL ←(FUNCTION \DANDELIONCOLORLEVEL)
				     ROTATECOLORMAP ←(FUNCTION \DANDELIONROTATECOLORMAP)))
    (SETQ \DANDELIONUFOWSDATA
      (create WSDATA
	      WSREGION ←(create REGION
				LEFT ← 0
				BOTTOM ← 0
				WIDTH ← 640
				HEIGHT ← 400])
)
(DEFINEQ

(\DANDELIONUFO\EXTRACTCOLORINTENSITY
  [LAMBDA (COLORLEVEL)

          (* * picks the two most significant bits out of a color level)


    (LRSH COLORLEVEL 6])

(\DANDELION\STARTCOLOR
  (LAMBDA (DISPLAY COLORMAP PTRTOBITS BITSPP)                (* hdj "21-Feb-85 16:24")
                                                             (* turns on the color display with a given colormap and
							     pointer to the screen bitmap.)
    (DECLARE (GLOBALVARS ColorScreenBitMap ColorScreenBitMapBase ColorScreenBitMapEnd 
			 ColorScreenBitMapEndPage ColorScreenBitMapBasePage ColorScreenBitMapPages 
			 \DDLCOLOR.MOVELIMIT \DDLCOLOR.LASTMOVEDPAGE \PERIODIC.INTERRUPT.FREQUENCY))
    (COND
      ((NEQ BITSPP 4)
	(ERROR "Color only comes in 4 bits per pixel on this machine." BITSPP)))
    (SCREENCOLORMAP COLORMAP)
    (\DANDELION\INITCOLORS DISPLAY)
    (SETQ ColorScreenBitMapBase (fetch (BITMAP BITMAPBASE) of ColorScreenBitMap))
    (SETQ ColorScreenBitMapEnd (\ADDBASE ColorScreenBitMapBase (\BitmapWords ColorScreenBitMap)))
    (SETQ ColorScreenBitMapEndPage (fetch (POINTER PAGE#) of ColorScreenBitMapEnd))
    (SETQ ColorScreenBitMapBasePage (fetch (POINTER PAGE#) of ColorScreenBitMapBase))
    (SETQ ColorScreenBitMapPages (\BITMAPPAGES ColorScreenBitMap))
    (\TEMPLOCKPAGES ColorScreenBitMapBase ColorScreenBitMapPages)
    (SETQ \DDLCOLOR.MOVELIMIT 20)                            (* move no more than 20 pages per go-round of 
							     \DDLCOLOR.UPDATEDAEMON)
    (SETQ \DDLCOLOR.LASTMOVEDPAGE 0)
    (SETQ \PERIODIC.INTERRUPT.FREQUENCY 10)                  (* do update every 10 / 77 of a sec)
    (\INSTALL.PERIODIC.INTERRUPT (FUNCTION \DANDELIONUFO.UPDATEDAEMON))
    (replace (DISPLAYSTATE RUNNING?) of (fetch (FDEV DEVICEINFO) of DISPLAY) with T)))

(\DANDELION\STOPCOLOR
  [LAMBDA (DISPLAY)                                          (* hdj " 5-Feb-85 12:04")
                                                             (* turns the color display off unlocks the colormap and
							     clobbers it.)
    (if (COLORMAPP \SystemColorMap)
	then (\UNLOCKPAGES \SystemColorMap 1)                (* should turn color map to black 
							     (SCREENCOLORMAP BLACKMAP))
	     (\REMOVE.PERIODIC.INTERRUPT (FUNCTION \DANDELIONUFO.UPDATEDAEMON)))
    (replace (DISPLAYSTATE RUNNING?) of (fetch (FDEV DEVICEINFO) of DISPLAY) with NIL])

(\DANDELION\SETSCREENCOLORMAP
  [LAMBDA (DISPLAY COLORMAP)                                 (* hdj " 4-Feb-85 10:08")
                                                             (* machine dependent part of setting the colormap.
							     This is always called from code that is 
							     UNINTERRUPTABLY)
    (for I from 0 to 15 do (\DANDELION\SENDCOLORMAPENTRY DISPLAY I COLORMAP])

(\DANDELIONCOLORLEVEL
  [LAMBDA (DISPLAY COLORMAP COLOR# PRIMARYCOLOR NEWLEVEL)    (* hdj " 4-Feb-85 09:54")
                                                             (* returns the value of the intensity for color gun 
							     PRIMARYCOLOR {RED, GREEN or BLUE} in COLOR#)
    (PROG (RETVAL)
          (SETQ COLOR# (COLORNUMBERP COLOR#))
          (SETQ RETVAL (\GENERICCOLORLEVEL COLORMAP COLOR# PRIMARYCOLOR NEWLEVEL))
          (COND
	    (NEWLEVEL (\DANDELION\SENDCOLORMAPENTRY DISPLAY COLOR# COLORMAP)))
          (RETURN RETVAL])

(\DANDELION\CONVERTCOLORMAPENTRY
  [LAMBDA (DISPLAY COLOR# COLORMAP)                          (* hdj " 4-Feb-85 10:02")
                                                             (* converts between an internal colormap entry and the 
							     format desired by the pc bus.)
    (LOGXOR 63 (LOGOR 128 (LLSH (\DANDELIONUFO\EXTRACTCOLORINTENSITY (COLORLEVEL COLORMAP COLOR#
										 (QUOTE BLUE)
										 NIL DISPLAY))
				4)
		      (LLSH (\DANDELIONUFO\EXTRACTCOLORINTENSITY (COLORLEVEL COLORMAP COLOR#
									     (QUOTE GREEN)
									     NIL DISPLAY))
			    2)
		      (\DANDELIONUFO\EXTRACTCOLORINTENSITY (COLORLEVEL COLORMAP COLOR# (QUOTE RED)
								       NIL DISPLAY])

(\DANDELION\WRITELUT
  [LAMBDA (DISPLAY A D)                                      (* hdj " 5-Feb-85 15:09")
    (BUS.WRITE (IPLUS \PCColorMapBase A)
	       D])

(\DANDELION\SENDCOLORMAPENTRY
  [LAMBDA (DISPLAY COLOR# COLORMAP)                          (* hdj " 4-Feb-85 10:02")
                                                             (* sends the Ith entry of the colormap COLORMAP to the 
							     extension bus.)
    (\DANDELION\WRITELUT DISPLAY COLOR# (\DANDELION\CONVERTCOLORMAPENTRY DISPLAY COLOR# COLORMAP])

(\DANDELIONROTATECOLORMAP
  [LAMBDA (DISPLAY COLORMAP STARTCOLOR THRUCOLOR)            (* hdj " 4-Feb-85 10:55")
                                                             (* rotates the colors STARTCOLOR through THRUCOLOR in 
							     the color map)
    (OR (COLORMAPP COLORMAP)
	(SETQ COLORMAP (SCREENCOLORMAP)))
    (SETQ STARTCOLOR (COLORNUMBERP (OR STARTCOLOR 0)))
    (SETQ THRUCOLOR (COLORNUMBERP (OR THRUCOLOR 15)))
    [COND
      ((IGREATERP STARTCOLOR THRUCOLOR)
	(SETQ STARTCOLOR (PROG1 THRUCOLOR (SETQ THRUCOLOR STARTCOLOR]
    (\GENERICROTATECOLORMAP COLORMAP STARTCOLOR THRUCOLOR)
    (for COLOR# from STARTCOLOR to THRUCOLOR do (\DANDELION\SENDCOLORMAPENTRY DISPLAY COLOR# COLORMAP]
)
)
(DEFINEQ

(\DDLCOLOR.LOCKFNS
  [LAMBDA NIL                                                (* hdj "24-Jan-85 13:28")
    (for FN in \DDLCOLOR.LOCKEDFNS do (\LOCKFN FN))
    (for VAR in \DDLCOLOR.LOCKEDVARS do (\LOCKVAR VAR])

(\DDLCOLOR.LOCKPAGES
  [LAMBDA NIL                                                (* hdj "16-Nov-84 16:10")
    (\TEMPLOCKPAGES ColorScreenBitMapBase ColorScreenBitMapPages])
)
(DEFINEQ

(\REMOVE.PERIODIC.INTERRUPT
  [LAMBDA (INTERRUPT)
    (DECLARE (GLOBALVARS \PERIODIC.INTERRUPT))               (* hdj "31-Oct-84 17:08")
    (PROG1 \PERIODIC.INTERRUPT (SETQ \PERIODIC.INTERRUPT NIL])

(\INSTALL.PERIODIC.INTERRUPT
  [LAMBDA (INTERRUPT)
    (DECLARE (GLOBALVARS \PERIODIC.INTERRUPT))               (* hdj "31-Oct-84 17:08")
    (PROG1 \PERIODIC.INTERRUPT (SETQ \PERIODIC.INTERRUPT INTERRUPT])
)
(DEFINEQ

(PCCOLORSCROLL
  [LAMBDA (N)                                                (* edited: "12-Jul-84 16:24")
    (OR N (SETQ N 50))
    (for I from 0 to 39
       do (DISMISS N)
	  (PCWRITECOLOR 2 (LOGAND 255 I])

(PCCOLORSCROLLH
  [LAMBDA (N)                                                (* edited: "12-Jul-84 16:26")
    (for I from 400 to 0 by -1
       do (DISMISS N)
	  (PCWRITECOLOR 2 (LOGAND 255 (ITIMES I 39)))
	  (PCWRITECOLOR 3 (LRSH (ITIMES I 39)
				8])

(PCROTATELUT
  [LAMBDA NIL                                                (* hdj "30-Oct-84 12:55")
    (PROG (TEMP)
          (SETQ TEMP (BUS.READ 917521))
          [for I from 1 to 14 do (PCWRITELUT I (PCREAD (IPLUS 917521 I]
          (PCWRITELUT 15 TEMP])

(PCWRITELUT
  [LAMBDA (A D)                                              (* hdj "24-Jan-85 12:19")
    (BUS.WRITE (IPLUS \PCColorMapBase A)
	       D])

(PCWRITECOLOR
  [LAMBDA (A D)                                              (* hdj "30-Oct-84 12:38")
    (BUS.WRITE (IPLUS 917504 A)
	       D])

(PCWRITEPIXEL
  [LAMBDA (X Y VALUE)                                        (* hdj "31-Jan-85 22:54")
    (LET [(ADDR (IPLUS X (ITIMES 640 Y]
      (BUS.WRITE 917697 (LRSH ADDR 12))
      (BUS.WRITE (IPLUS 524288 (LOGAND 4095 ADDR))
		 VALUE)
      VALUE])

(PCREADPIXEL
  [LAMBDA (X Y)                                              (* hdj "31-Jan-85 22:54")
    (LET [(ADDR (IPLUS X (ITIMES Y 640]
      (BUS.WRITE 917697 (LRSH ADDR 12))
      (LOGAND 15 (BUS.READ (IPLUS 524288 (LOGAND 4095 ADDR])

(PCSENDCOLORMAPENTRY
  [LAMBDA (COLOR# COLORMAP)                                  (* hdj "24-Jan-85 12:37")
                                                             (* sends the Ith entry of the colormap COLORMAP to the 
							     extension bus.)
    (\DANDELION\WRITELUT COLOR# (\DANDELION\CONVERTCOLORMAPENTRY COLOR# COLORMAP])

(\RochesterWritePage
  (LAMBDA (AbsCurrPage CurrPageInBitMap)                     (* kbr: " 1-Mar-85 16:29")
    (BUS.WRITE2 \RochesterDisplayOffsetRegister (UNFOLD CurrPageInBitMap 64))
                                                             (* ((1024 pixels / page) / (16 pixels / offset)) = 64 
							     offsets / page)
    (\BUSBLTOUTNYBBLES (create POINTER
			       PAGE# ← AbsCurrPage)
		       \RochesterBUSADDRHI \RochesterBUSADDRLO \RochesterPIXELSPERPAGE)))
)
(DEFINEQ

(\BITMAPPAGES
  [LAMBDA (BITMAP)                                           (* hdj "23-Oct-84 11:47")
    (FOLDHI (ITIMES (fetch (BITMAP BITMAPRASTERWIDTH) of BITMAP)
		    (fetch (BITMAP BITMAPHEIGHT) of BITMAP))
	    WORDSPERPAGE])

(\BitmapWords
  [LAMBDA (BM)                                               (* hdj "23-Oct-84 15:56")
    (ITIMES (fetch (BITMAP BITMAPRASTERWIDTH) of BM)
	    (fetch (BITMAP BITMAPHEIGHT) of BM])

(\DIRTYPAGEP
  [LAMBDA (VPAGE)                                            (* hdj "19-Oct-84 12:31")
    (fetch (VMEMFLAGS DIRTY) of (\READFLAGS VPAGE])

(\MAKECLEANPAGE
  [LAMBDA (VPAGE)                                            (* hdj "18-Oct-84 18:26")
    (\WRITEMAP VPAGE (\READRP VPAGE)
	       (LOGAND \VMAP.NOTDIRTY (\READFLAGS VPAGE])

(\MAKEDIRTYPAGE
  [LAMBDA (VPAGE)                                            (* hdj "18-Oct-84 18:27")
    (\WRITEMAP VPAGE (\READRP VPAGE)
	       (LOGOR \VMAP.DIRTY (\READFLAGS VPAGE])

(\DANDELIONUFO.UPDATEDAEMON
  (LAMBDA NIL                                                (* hdj " 5-Feb-85 12:05")

          (* * Runs under periodic interrupt; flushes changed pages in local copy of PC framebuffer out to PC)


    (DECLARE (GLOBALVARS \DDLCOLOR.LASTMOVEDPAGE \DDLCOLOR.MOVELIMIT))
    (if \INTERRUPTABLE
	then (UNINTERRUPTABLY
                 (\REMOVE.PERIODIC.INTERRUPT (FUNCTION \DANDELIONUFO.UPDATEDAEMON))
		 (PROG ((PagesMoved 0)
			(CurrPage (IREMAINDER (ADD1 \DDLCOLOR.LASTMOVEDPAGE)
					      ColorScreenBitMapPages))
			(StoppingPage \DDLCOLOR.LASTMOVEDPAGE)
			(LastMovedPage \DDLCOLOR.LASTMOVEDPAGE)
			AbsCurrPage)
		       (repeatuntil (OR (EQ PagesMoved \DDLCOLOR.MOVELIMIT)
					(EQ CurrPage StoppingPage))
			  do (SETQ AbsCurrPage (IPLUS ColorScreenBitMapBasePage CurrPage))
			     (if (\DIRTYPAGEP AbsCurrPage)
				 then (\RochesterWritePage AbsCurrPage CurrPage)
				      (\MAKECLEANPAGE AbsCurrPage)
				      (SETQ PagesMoved (ADD1 PagesMoved))
				      (SETQ LastMovedPage CurrPage))
			     (SETQ CurrPage (ADD1 CurrPage))
			     (if (EQ CurrPage ColorScreenBitMapPages)
				 then (SETQ CurrPage 0)))
		       (SETQ \DDLCOLOR.LASTMOVEDPAGE LastMovedPage))
		 (\INSTALL.PERIODIC.INTERRUPT (FUNCTION \DANDELIONUFO.UPDATEDAEMON))))))

(\UFOCOLOR.EVENTFN
  [LAMBDA (DEVICE EVENT)                                     (* hdj " 5-Feb-85 16:47")

          (* * if we are about to SYSOUT, MAKESYS, SAVEVM or LOGOUT we flush all local framebuffer pages to PC and mark all 
	  pages dirty so they get written out to vmem file. We turn off the update agent for the interim to avoid creating a 
	  race condition)



          (* * we only want to do it if the display is turned on, and not merely extant)


    (if (fetch (DISPLAYSTATE RUNNING?) of (fetch (FDEV DEVICEINFO) of DEVICE))
	then (SELECTQ EVENT
		      ((BEFORELOGOUT BEFORESYSOUT BEFOREMAKESYS)
                                                             (* turn off display since we may awake on different 
							     machine)
                                                             (* will disable interrupt and thus avoid race 
							     condition)
			(COLORDISPLAY NIL)
			(for PAGE from ColorScreenBitMapBasePage to ColorScreenBitMapEndPage
			   do (\RochesterWritePage PAGE (IDIFFERENCE PAGE ColorScreenBitMapBasePage))
			      (\MAKEDIRTYPAGE PAGE)))
		      (BEFORESAVEVM (\REMOVE.PERIODIC.INTERRUPT (QUOTE \DDLCOLOR.UPDATEDAEMON))
                                                             (* disable interrupt to avoid race condition)
				    (for PAGE from ColorScreenBitMapBasePage to 
									 ColorScreenBitMapEndPage
				       do (\RochesterWritePage PAGE (IDIFFERENCE PAGE 
									ColorScreenBitMapBasePage))
					  (\MAKEDIRTYPAGE PAGE)))
		      [AFTERSAVEVM                           (* lifted from \DisplayEventFn -
							     not sure it makes sense here)
				   (COND
				     (\SystemColorMap        (* colordisplay was on. turn it off.
							     User may have moved to machine without color display)
						      (SETQ LastSystemColorMap \SystemColorMap)
						      (SETQ \SystemColorMap NIL)
						      (SETQ \COLORCURSORBM NIL]
		      ((AFTERDOSYSOUT AFTERDOSAVEVM AFTERDOMAKESYS)
                                                             (* enable interrupt)
			(\INSTALL.PERIODIC.INTERRUPT (QUOTE \DDLCOLOR.UPDATEDAEMON)))
		      NIL])

(\DANDELION\INITCOLORS
  [LAMBDA (DISPLAY)                                          (* hdj " 5-Feb-85 11:58")
    (PCWRITECOLOR 1 0)
    (PCWRITECOLOR 1 0)
    (PCWRITECOLOR 1 16)
    (PCWRITECOLOR 0 24)
    (PCWRITECOLOR 0 10)
    (PCWRITECOLOR 0 25)
    (PCWRITECOLOR 0 43)
    (PCWRITECOLOR 0 227)
    (PCWRITECOLOR 0 39)
    (PCWRITECOLOR 0 0)
    (PCWRITECOLOR 0 0)
    (PCWRITECOLOR 0 0)
    (PCWRITECOLOR 0 0)
    (PCWRITECOLOR 0 0)
    (PCWRITECOLOR 1 63)
    (PCWRITECOLOR 2 1)
    (PCWRITECOLOR 3 0)
    (PCWRITECOLOR 32 8)
    (PCWRITECOLOR 48 0)
    (PCWRITECOLOR 49 0])
)
(DECLARE: EVAL@COMPILE 

(PUTPROPS \DIRTYPAGEP DMACRO ((VPAGE)
			      (fetch (VMEMFLAGS DIRTY)
				     of
				     (\READFLAGS VPAGE))))
)
(DECLARE: EVAL@COMPILE 

(RPAQQ DDLPIXELSPERPAGE 1024)

(RPAQQ DDLPIXELSPERWORD 4)

(RPAQQ \VMAP.NOTDIRTY -4097)

(RPAQQ \PCColorMapBase 917520)

(RPAQQ \RochesterDisplayBase 917504)

(RPAQQ \RochesterDisplayOffsetRegister 917552)

(RPAQQ \RochesterDisplayOffsetRegisterLo 917553)

(RPAQQ \RochesterBUSADDRHI 8)

(RPAQQ \RochesterBUSADDRLO 0)

(RPAQQ \RochesterPIXELSPERPAGE 1024)

(CONSTANTS DDLPIXELSPERPAGE DDLPIXELSPERWORD \VMAP.NOTDIRTY \PCColorMapBase \RochesterDisplayBase 
	   \RochesterDisplayOffsetRegister \RochesterDisplayOffsetRegisterLo \RochesterBUSADDRHI 
	   \RochesterBUSADDRLO \RochesterPIXELSPERPAGE)
)

(PUTPROPS \BUSBLTOUTNYBBLES ARGNAMES (VMADDR BUSADDRHI BUSADDRLO NWORDS))
(FILESLOAD BUSMASTER)

(RPAQQ \DDLCOLOR.LOCKEDFNS (\DDLCOLOR.UPDATEDAEMON \REMOVE.PERIODIC.INTERRUPT \RochesterWritePage 
						   \RochesterWritePage.4096 \MAKECLEANPAGE 
						   \INSTALL.PERIODIC.INTERRUPT BUS.WRITE2 BUS.WRITE 
						   BUS.WRITEHL))

(RPAQQ \DDLCOLOR.LOCKEDVARS (ColorScreenBitMapPages ColorScreenBitMapBasePage \DDLCOLOR.MOVELIMIT 
						    \DDLCOLOR.LASTMOVEDPAGE))
(\DDLCOLOR.LOCKFNS)
(DECLARE: DONTEVAL@COMPILE DOCOPY 
(\DANDELIONUFOINITCOLOR)
(\CREATEDISPLAY (QUOTE DANDELIONUFODISPLAY)
		\DANDELIONUFOWSOPS \DANDELIONUFOWSDATA (FUNCTION \UFOCOLOR.EVENTFN))
)
(PUTPROPS DANDELIONUFO COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (2133 3017 (\DANDELIONUFOINITCOLOR 2143 . 3015)) (3018 8769 (
\DANDELIONUFO\EXTRACTCOLORINTENSITY 3028 . 3204) (\DANDELION\STARTCOLOR 3206 . 4970) (
\DANDELION\STOPCOLOR 4972 . 5613) (\DANDELION\SETSCREENCOLORMAP 5615 . 6043) (\DANDELIONCOLORLEVEL 
6045 . 6635) (\DANDELION\CONVERTCOLORMAPENTRY 6637 . 7396) (\DANDELION\WRITELUT 7398 . 7574) (
\DANDELION\SENDCOLORMAPENTRY 7576 . 7960) (\DANDELIONROTATECOLORMAP 7962 . 8767)) (8770 9223 (
\DDLCOLOR.LOCKFNS 8780 . 9033) (\DDLCOLOR.LOCKPAGES 9035 . 9221)) (9224 9699 (
\REMOVE.PERIODIC.INTERRUPT 9234 . 9461) (\INSTALL.PERIODIC.INTERRUPT 9463 . 9697)) (9700 12355 (
PCCOLORSCROLL 9710 . 9963) (PCCOLORSCROLLH 9965 . 10274) (PCROTATELUT 10276 . 10584) (PCWRITELUT 10586
 . 10753) (PCWRITECOLOR 10755 . 10915) (PCWRITEPIXEL 10917 . 11208) (PCREADPIXEL 11210 . 11490) (
PCSENDCOLORMAPENTRY 11492 . 11851) (\RochesterWritePage 11853 . 12353)) (12356 17825 (\BITMAPPAGES 
12366 . 12626) (\BitmapWords 12628 . 12851) (\DIRTYPAGEP 12853 . 13020) (\MAKECLEANPAGE 13022 . 13228)
 (\MAKEDIRTYPAGE 13230 . 13432) (\DANDELIONUFO.UPDATEDAEMON 13434 . 14856) (\UFOCOLOR.EVENTFN 14858 . 
17151) (\DANDELION\INITCOLORS 17153 . 17823)))))
STOP