(FILECREATED " 8-Mar-85 11:12:24" {ERIS}<LISPCORE>LIBRARY>DANDELIONUFO4096.;6 20068  

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

      previous date: "21-Feb-85 16:26:40" {ERIS}<LISPCORE>LIBRARY>DANDELIONUFO4096.;5)


(* 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 " 8-Mar-85 11:10")
                                                             (* 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))
    (if (NEQ \MACHINETYPE \DANDELION)
	then (ERROR "Can't run Dandelion color on a" (MACHINETYPE)))
    (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 10886 (\DANDELIONROTATECOLORMAP.4096 4757 . 5585) (\DANDELION\STARTCOLOR.4096 5587 . 7492) (
\DANDELION\STOPCOLOR.4096 7494 . 8134) (\DANDELIONCOLORLEVEL.4096 8136 . 8736) (
\DANDELION\CONVERTCOLORMAPENTRY.4096 8738 . 9424) (\DANDELION\SENDCOLORMAPENTRY.4096 9426 . 9839) (
\DANDELION\SETSCREENCOLORMAP.4096 9841 . 10279) (\RochesterWritePage.4096 10281 . 10884)) (10887 11340
 (\DDLCOLOR.LOCKFNS 10897 . 11150) (\DDLCOLOR.LOCKPAGES 11152 . 11338)) (11341 12417 (
\DANDELION\INITCOLORS.4096 11351 . 12029) (\DANDELION\WRITELUT.4096 12031 . 12415)) (12538 13013 (
\REMOVE.PERIODIC.INTERRUPT 12548 . 12775) (\INSTALL.PERIODIC.INTERRUPT 12777 . 13011)) (13014 15167 (
PCCOLORSCROLL 13024 . 13277) (PCCOLORSCROLLH 13279 . 13588) (PCROTATELUT 13590 . 13898) (PCWRITELUT 
13900 . 14067) (PCWRITECOLOR 14069 . 14229) (PCWRITEPIXEL 14231 . 14522) (PCREADPIXEL 14524 . 14804) (
PCSENDCOLORMAPENTRY 14806 . 15165)) (15168 18608 (\BITMAPPAGES 15178 . 15438) (\BitmapWords 15440 . 
15663) (\DIRTYPAGEP 15665 . 15832) (\MAKECLEANPAGE 15834 . 16040) (\MAKEDIRTYPAGE 16042 . 16244) (
\UFO4096COLOR.EVENTFN 16246 . 18606)))))
STOP