(FILECREATED "24-Aug-85 13:23:34" {ERIS}<LISPCORE>SOURCES>DOVEDISPLAYHACK.;4 4507 changes to: (VARS DOVEDISPLAYHACKCOMS) previous date: "23-Jul-85 00:04:28" {ERIS}<LISPCORE>SOURCES>DOVEDISPLAYHACK.;3) (* Copyright (c) 1985 by XEROX. All rights reserved.) (PRETTYCOMPRINT DOVEDISPLAYHACKCOMS) (RPAQQ DOVEDISPLAYHACKCOMS ((FNS \STARTDISPLAY \CreateScreenBitMap) (DECLARE: DONTEVAL@LOAD DOCOPY (P (\LOCKFN (FUNCTION \DoveDisplay.SetCursorPosition))))) ) (DEFINEQ (\STARTDISPLAY (LAMBDA NIL (* jwo: "23-Jul-85 00:04") (DECLARE (GLOBALVARS SCREENWIDTH SCREENHEIGHT)) (COND ((NEQ \MACHINETYPE \DAYBREAK) (SETQ ScreenBitMap (\CreateScreenBitMap SCREENWIDTH SCREENHEIGHT)))) (UNINTERRUPTABLY (SHOWDISPLAY (fetch BITMAPBASE of ScreenBitMap) (fetch BITMAPRASTERWIDTH of ScreenBitMap)) (CHANGETTYDEVICE (QUOTE LISPDISPLAY)) (SETQ \DisplayStarted T)) (COND ((AND (NEQ \KEYBOARD.BEFORETYPE \DAYBREAK) (EQ \MACHINETYPE \DAYBREAK)) (PROG (OLDWINDOWS) (SETQ OLDWINDOWS (COPY (OPENWINDOWS))) (for W in OLDWINDOWS do (PROG ((WREG (fetch (WINDOW REG) of W))) (* * This gook is designed to move open windows into reasonable positions on the Daybreak screen, from wherever they were on the LOADUP machine. The LOADUP process needs to be fixed to just leave around functions that initialize the screen and related things in a machine dependent (intelligent) way.) (MOVEW W (IQUOTIENT (ITIMES 4 (fetch (REGION LEFT) of WREG)) 5) (IQUOTIENT (ITIMES (fetch (REGION BOTTOM) of WREG) 3) 4)) (\CLOSEW1 W))) (SETQ ScreenBitMap (\CreateScreenBitMap (SETQ SCREENWIDTH (\DoveDisplay.ScreenWidth)) (SETQ SCREENHEIGHT (\DoveDisplay.ScreenHeight))) ) (CHANGEBACKGROUND) (for I in OLDWINDOWS do (\OPENW1 I))))) (SETQ WHOLESCREEN (SETQ WHOLEDISPLAY (create REGION LEFT ← 0 BOTTOM ← 0 WIDTH ← SCREENWIDTH HEIGHT ← SCREENHEIGHT))))) (\CreateScreenBitMap (LAMBDA (WIDTH HEIGHT) (* jwo: "22-Jul-85 23:51") (DECLARE (GLOBALVARS \MaxScreenPage)) (* creates and locks the pages for the display bit map. Returns a BITMAP descriptor for it. Uses the first words of the segment \DISPLAYREGION.) (* * ??? (COND ((OR (NEQ \MACHINETYPE \DAYBREAK) FLG) (FOLDHI (CEIL WIDTH (UNFOLD \DisplayWordAlign BITSPERWORD)) BITSPERWORD)) (T 52))) (PROG ((RASTERWIDTH (IQUOTIENT WIDTH BITSPERWORD)) MAXPAGE#) (* the display microcode needs to have the display fall on \DisplayWordAlign word boundaries.) (COND ((IGREATERP (SETQ MAXPAGE# (SUB1 (FOLDHI (ITIMES RASTERWIDTH HEIGHT) WORDSPERPAGE))) \MaxScreenPage) (* new screen size is larger, allocate more pages. All pages are locked. NOERROR is true in \NEWPAGE call in case pages are already there, e.g. DLBOOT allocated them.) (for I from (ADD1 \MaxScreenPage) to MAXPAGE# do (\NEWPAGE (\ADDBASE \DISPLAYREGION (UNFOLD I WORDSPERPAGE)) T T)) (SETQ \MaxScreenPage MAXPAGE#))) (RETURN (COND ((BITMAPP ScreenBitMap) (* reuse the same BITMAP ptr so that it will stay EQ to the one in user datastructures.) (replace BITMAPBASE of ScreenBitMap with \DISPLAYREGION) (replace BITMAPWIDTH of ScreenBitMap with WIDTH) (replace BITMAPRASTERWIDTH of ScreenBitMap with RASTERWIDTH) (replace BITMAPHEIGHT of ScreenBitMap with HEIGHT) ScreenBitMap) (T (create BITMAP BITMAPBASE ← \DISPLAYREGION BITMAPRASTERWIDTH ← RASTERWIDTH BITMAPWIDTH ← WIDTH BITMAPHEIGHT ← HEIGHT))))))) ) (DECLARE: DONTEVAL@LOAD DOCOPY (\LOCKFN (FUNCTION \DoveDisplay.SetCursorPosition)) ) (PUTPROPS DOVEDISPLAYHACK COPYRIGHT ("XEROX" 1985)) (DECLARE: DONTCOPY (FILEMAP (NIL (502 4347 (\STARTDISPLAY 512 . 2342) (\CreateScreenBitMap 2344 . 4345))))) STOP