(FILECREATED "21-Feb-85 16:26:40" {ERIS}<LISPCORE>LIBRARY>DANDELIONUFO4096.;5 19948  

      changes to:  (FNS \DANDELION\STARTCOLOR.4096)

      previous date: "11-Feb-85 15:50:57" {ERIS}<LISPCORE>LIBRARY>DANDELIONUFO4096.;3)


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

(PRETTYCOMPRINT DANDELIONUFO4096COMS)

(RPAQQ DANDELIONUFO4096COMS [(COMS (* drivers for UFO systems Dandelion BusMaster display with 12 bit 
				      colormap)
				   (FNS \DANDELIONUFO4096INITCOLOR)
				   (FNS \DANDELIONUFO4096.UPDATEDAEMON 
					\DANDELIONUFO4096\EXTRACTCOLORINTENSITY)
				   (FNS \DANDELIONROTATECOLORMAP.4096 \DANDELION\STARTCOLOR.4096 
					\DANDELION\STOPCOLOR.4096 \DANDELIONCOLORLEVEL.4096 
					\DANDELION\CONVERTCOLORMAPENTRY.4096 
					\DANDELION\SENDCOLORMAPENTRY.4096 
					\DANDELION\SETSCREENCOLORMAP.4096 \RochesterWritePage.4096)
				   (FNS \DDLCOLOR.LOCKFNS \DDLCOLOR.LOCKPAGES)
				   (FNS \DANDELION\INITCOLORS.4096 \DANDELION\WRITELUT.4096)
				   (VARS \PCColorMapRedBase \PCColorMapGreenBase \PCColorMapBlueBase)
				   (FNS \REMOVE.PERIODIC.INTERRUPT \INSTALL.PERIODIC.INTERRUPT)
				   (FNS PCCOLORSCROLL PCCOLORSCROLLH PCROTATELUT PCWRITELUT 
					PCWRITECOLOR PCWRITEPIXEL PCREADPIXEL PCSENDCOLORMAPENTRY)
				   (FNS \BITMAPPAGES \BitmapWords \DIRTYPAGEP \MAKECLEANPAGE 
					\MAKEDIRTYPAGE \UFO4096COLOR.EVENTFN)
				   (MACROS \DIRTYPAGEP)
				   (CONSTANTS DDLPIXELSPERPAGE DDLPIXELSPERWORD \VMAP.NOTDIRTY 
					      \RochesterDisplayBase 
					      \RochesterDisplayOffsetRegister.4096 
					      \RochesterBUSADDRHI \RochesterBUSADDRLO 
					      \RochesterPIXELSPERPAGE)
				   (PROP ARGNAMES \BUSBLTOUTNYBBLES)
				   (FILES BUSMASTER)
				   (VARS \DDLCOLOR.LOCKEDFNS \DDLCOLOR.LOCKEDVARS)
				   (P (\DDLCOLOR.LOCKFNS)))
			     (DECLARE: DONTEVAL@COMPILE DOCOPY (P (\DANDELIONUFO4096INITCOLOR)
								  (\CREATEDISPLAY
								    (QUOTE DANDELIONUFO4096DISPLAY)
								    \DANDELIONUFO4096WSOPS 
								    \DANDELIONUFO4096WSDATA
								    (FUNCTION \UFO4096COLOR.EVENTFN])



(* drivers for UFO systems Dandelion BusMaster display with 12 bit colormap)

(DEFINEQ

(\DANDELIONUFO4096INITCOLOR
  [LAMBDA NIL                                                (* hdj " 5-Feb-85 12:26")
    (DECLARE (GLOBALVARS \DANDELIONUFO4096WSOPS \DANDELIONUFO4096WSDATA))
    (SETQ \DANDELIONUFO4096WSOPS (create WSOPS
					 WSCHANGEBACKGROUND ←(FUNCTION COLORBACKGROUND)
					 WSCHANGEBACKGROUNDBORDER ←(FUNCTION NILL)
					 WSDISPLAYHEIGHT ←(FUNCTION NILL)
					 STARTCOLOR ←(FUNCTION \DANDELION\STARTCOLOR.4096)
					 STOPCOLOR ←(FUNCTION \DANDELION\STOPCOLOR.4096)
					 SETSCREENCOLORMAP ←(FUNCTION 
					   \DANDELION\SETSCREENCOLORMAP.4096)
					 COLORLEVEL ←(FUNCTION \DANDELIONCOLORLEVEL.4096)
					 ROTATECOLORMAP ←(FUNCTION \DANDELIONROTATECOLORMAP.4096)))
    (SETQ \DANDELIONUFO4096WSDATA
      (create WSDATA
	      WSREGION ←(create REGION
				LEFT ← 0
				BOTTOM ← 0
				WIDTH ← 640
				HEIGHT ← 400])
)
(DEFINEQ

(\DANDELIONUFO4096.UPDATEDAEMON
  [LAMBDA NIL                                                (* hdj " 4-Feb-85 18:08")

          (* * 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 (QUOTE \DANDELIONUFO4096.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.4096 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 (QUOTE \DANDELIONUFO4096.UPDATEDAEMON)))])

(\DANDELIONUFO4096\EXTRACTCOLORINTENSITY
  [LAMBDA (COLORLEVEL)                                       (* hdj "31-Jan-85 22:51")

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


    (LRSH COLORLEVEL 4])
)
(DEFINEQ

(\DANDELIONROTATECOLORMAP.4096
  [LAMBDA (DISPLAY COLORMAP STARTCOLOR THRUCOLOR)            (* hdj " 4-Feb-85 15:08")
                                                             (* 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.4096 DISPLAY COLOR# 
										   COLORMAP])

(\DANDELION\STARTCOLOR.4096
  [LAMBDA (DISPLAY COLORMAP PTRTOBITS BITSPP)                (* hdj "21-Feb-85 16:25")
                                                             (* 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.4096 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 
							     \DANDELIONUFO4096.UPDATEDAEMON)
    (SETQ \DDLCOLOR.LASTMOVEDPAGE 0)
    (SETQ \PERIODIC.INTERRUPT.FREQUENCY 10)                  (* do update every 10 / 77 of a sec)
    (\INSTALL.PERIODIC.INTERRUPT (FUNCTION \DANDELIONUFO4096.UPDATEDAEMON))
    (replace (DISPLAYSTATE RUNNING?) of (fetch (FDEV DEVICEINFO) of DISPLAY) with T])

(\DANDELION\STOPCOLOR.4096
  [LAMBDA (DISPLAY)                                          (* hdj " 5-Feb-85 12:32")
                                                             (* 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 (QUOTE \DDLCOLOR.UPDATEDAEMON))
	     (replace (DISPLAYSTATE RUNNING?) of (fetch (FDEV DEVICEINFO) of DISPLAY) with NIL])

(\DANDELIONCOLORLEVEL.4096
  [LAMBDA (DISPLAY COLORMAP COLOR# PRIMARYCOLOR NEWLEVEL)    (* hdj " 4-Feb-85 15:10")
                                                             (* 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.4096 DISPLAY COLOR# COLORMAP)))
          (RETURN RETVAL])

(\DANDELION\CONVERTCOLORMAPENTRY.4096
  [LAMBDA (DISPLAY COLOR# COLORMAP)                          (* hdj " 4-Feb-85 15:11")
                                                             (* converts between an internal colormap entry and the 
							     format desired by the pc bus.)
    (LIST (\DANDELIONUFO4096\EXTRACTCOLORINTENSITY (COLORLEVEL COLORMAP COLOR# (QUOTE RED)
							       NIL DISPLAY))
	  (\DANDELIONUFO4096\EXTRACTCOLORINTENSITY (COLORLEVEL COLORMAP COLOR# (QUOTE GREEN)
							       NIL DISPLAY))
	  (\DANDELIONUFO4096\EXTRACTCOLORINTENSITY (COLORLEVEL COLORMAP COLOR# (QUOTE BLUE)
							       NIL DISPLAY])

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

(\DANDELION\SETSCREENCOLORMAP.4096
  [LAMBDA (DISPLAY COLORMAP)                                 (* hdj " 4-Feb-85 15:16")
                                                             (* 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.4096 DISPLAY I COLORMAP])

(\RochesterWritePage.4096
  [LAMBDA (AbsCurrPage CurrPageInBitMap)                     (* hdj "24-Jan-85 13:19")
    (BUS.WRITE2 \RochesterDisplayOffsetRegister.4096 (UNFOLD CurrPageInBitMap 64))
                                                             (* ((1024 pixels / page) / (16 pixels / offset)) = 64 
							     offsets / page)

          (* * "add 50 pages to skip 80 scan lines that Xerox display doesn't look at")


    (\BUSBLTOUTNYBBLES (create POINTER
			       PAGE# ← AbsCurrPage)
		       \RochesterBUSADDRHI \RochesterBUSADDRLO \RochesterPIXELSPERPAGE])
)
(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

(\DANDELION\INITCOLORS.4096
  [LAMBDA (DISPLAY)                                          (* hdj " 4-Feb-85 15:16")
    (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 128 8)
    (PCWRITECOLOR 192 0)
    (PCWRITECOLOR 193 0])

(\DANDELION\WRITELUT.4096
  [LAMBDA (DISPLAY COLOR# RGBTRIPLE)                         (* hdj " 4-Feb-85 15:18")
    (BUS.WRITE (IPLUS \PCColorMapRedBase COLOR#)
	       (CAR RGBTRIPLE))
    (BUS.WRITE (IPLUS \PCColorMapGreenBase COLOR#)
	       (CADR RGBTRIPLE))
    (BUS.WRITE (IPLUS \PCColorMapBlueBase COLOR#)
	       (CADDR RGBTRIPLE])
)

(RPAQQ \PCColorMapRedBase 917568)

(RPAQQ \PCColorMapGreenBase 917584)

(RPAQQ \PCColorMapBlueBase 917600)
(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])
)
(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])

(\UFO4096COLOR.EVENTFN
  [LAMBDA (DISPLAY 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 DISPLAY))
	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.4096 PAGE (IDIFFERENCE PAGE 
									ColorScreenBitMapBasePage))
			      (\MAKEDIRTYPAGE PAGE)))
		      (BEFORESAVEVM (\REMOVE.PERIODIC.INTERRUPT (FUNCTION 
								  \DANDELIONUFO4096.UPDATEDAEMON))
                                                             (* disable interrupt to avoid race condition)
				    (for PAGE from ColorScreenBitMapBasePage to 
									 ColorScreenBitMapEndPage
				       do (\RochesterWritePage.4096 PAGE (IDIFFERENCE PAGE 
									ColorScreenBitMapBasePage))
					  (\MAKEDIRTYPAGE PAGE)))
		      [AFTERSAVEVM                           (* this was 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 (FUNCTION \DANDELIONUFO4096.UPDATEDAEMON)))
		      NIL])
)
(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 \RochesterDisplayBase 917504)

(RPAQQ \RochesterDisplayOffsetRegister.4096 917696)

(RPAQQ \RochesterBUSADDRHI 8)

(RPAQQ \RochesterBUSADDRLO 0)

(RPAQQ \RochesterPIXELSPERPAGE 1024)

(CONSTANTS DDLPIXELSPERPAGE DDLPIXELSPERWORD \VMAP.NOTDIRTY \RochesterDisplayBase 
	   \RochesterDisplayOffsetRegister.4096 \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 
(\DANDELIONUFO4096INITCOLOR)
(\CREATEDISPLAY (QUOTE DANDELIONUFO4096DISPLAY)
		\DANDELIONUFO4096WSOPS \DANDELIONUFO4096WSDATA (FUNCTION \UFO4096COLOR.EVENTFN))
)
(PUTPROPS DANDELIONUFO4096 COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (2137 3051 (\DANDELIONUFO4096INITCOLOR 2147 . 3049)) (3052 4746 (
\DANDELIONUFO4096.UPDATEDAEMON 3062 . 4494) (\DANDELIONUFO4096\EXTRACTCOLORINTENSITY 4496 . 4744)) (
4747 10766 (\DANDELIONROTATECOLORMAP.4096 4757 . 5585) (\DANDELION\STARTCOLOR.4096 5587 . 7372) (
\DANDELION\STOPCOLOR.4096 7374 . 8014) (\DANDELIONCOLORLEVEL.4096 8016 . 8616) (
\DANDELION\CONVERTCOLORMAPENTRY.4096 8618 . 9304) (\DANDELION\SENDCOLORMAPENTRY.4096 9306 . 9719) (
\DANDELION\SETSCREENCOLORMAP.4096 9721 . 10159) (\RochesterWritePage.4096 10161 . 10764)) (10767 11220
 (\DDLCOLOR.LOCKFNS 10777 . 11030) (\DDLCOLOR.LOCKPAGES 11032 . 11218)) (11221 12297 (
\DANDELION\INITCOLORS.4096 11231 . 11909) (\DANDELION\WRITELUT.4096 11911 . 12295)) (12418 12893 (
\REMOVE.PERIODIC.INTERRUPT 12428 . 12655) (\INSTALL.PERIODIC.INTERRUPT 12657 . 12891)) (12894 15047 (
PCCOLORSCROLL 12904 . 13157) (PCCOLORSCROLLH 13159 . 13468) (PCROTATELUT 13470 . 13778) (PCWRITELUT 
13780 . 13947) (PCWRITECOLOR 13949 . 14109) (PCWRITEPIXEL 14111 . 14402) (PCREADPIXEL 14404 . 14684) (
PCSENDCOLORMAPENTRY 14686 . 15045)) (15048 18488 (\BITMAPPAGES 15058 . 15318) (\BitmapWords 15320 . 
15543) (\DIRTYPAGEP 15545 . 15712) (\MAKECLEANPAGE 15714 . 15920) (\MAKEDIRTYPAGE 15922 . 16124) (
\UFO4096COLOR.EVENTFN 16126 . 18486)))))
STOP