(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