-- CGScreenImpl.mesa -- Last changed by Doug Wyatt, August 23, 1982 4:15 pm -- Last changed by Paul Rovner, December 14, 1983 3:31 pm DIRECTORY CGScreen USING [], Interminal USING [terminal], PrincOps USING [BBTableSpace, BBptr], PrincOpsUtils USING [AlignedBBTable, BITBLT], Terminal USING [BitmapState, GetBitBltTable, GetBWBitmapState, SetBWBitmapState, Virtual, Select]; CGScreenImpl: CEDAR PROGRAM IMPORTS PrincOpsUtils, Interminal, Terminal EXPORTS CGScreen = { terminal: Terminal.Virtual _ Interminal.terminal; screenbase: LONG POINTER _ NIL; screenraster,screenheight: CARDINAL _ 0; screenx,screeny: CARDINAL = 0; -- In Pilot, we own the whole screen Bits: PUBLIC PROC RETURNS[base: LONG POINTER, raster,height: CARDINAL] = { RETURN[screenbase,screenraster,screenheight]; }; Origin: PUBLIC PROC RETURNS[x,y: CARDINAL] = { RETURN[x: screenx, y: screeny] }; MouseToWorld: PUBLIC PROC[mx,my: INTEGER] RETURNS[wx,wy: INTEGER] = { RETURN[wx: mx-screenx, wy: (screenheight+screeny)-my]; }; InitScreen: PROC = TRUSTED { bbs: PrincOps.BBTableSpace; bb: PrincOps.BBptr _ PrincOpsUtils.AlignedBBTable[@bbs]; bpl,lines: CARDINAL; h: CARDINAL = 4; gray: ARRAY[0..h) OF CARDINAL _ [42104B,42104B,10421B,10421B]; oldState: Terminal.BitmapState _ Terminal.GetBWBitmapState[terminal]; [] _ Terminal.SetBWBitmapState[terminal, allocated]; bb^ _ Terminal.GetBitBltTable[terminal]; bpl _ bb.dstBpl; lines _ terminal.bwHeight; IF (bpl MOD 16)#0 OR bb.dst.bit#0 THEN ERROR; screenbase _ bb.dst.word; screenraster _ bpl/16; screenheight _ lines; bb.src _ [word: @gray, bit: 0]; bb.srcDesc.gray _ [yOffset: 0, widthMinusOne: 0, heightMinusOne: h-1]; bb.width _ bpl; bb.height _ lines; bb.flags _ [disjoint: TRUE, gray: TRUE]; PrincOpsUtils.BITBLT[bb]; -- make the screen gray [] _ Terminal.SetBWBitmapState[terminal, displayed]; Terminal.Select[terminal]; }; InitScreen[]; }. Κ!– "Mesa" style˜IprocštΟc†œΟk œ žœžœžœ(žœžœžœjžœžœžœ%žœNžœžœžœžœžœ%œΟnœžœžœžœžœžœžœžœ.ŸœžœžœžœžœžœŸ œžœžœžœžœžœžœ7Ÿ œžœžœižœžœžœžœžœ œ[žœžœžœžœžœσžœžœžœœ6œ5˜’—…—”»