-- Blt.mesa -- Last changed by Doug Wyatt, September 15, 1980 5:17 PM DIRECTORY BitBltDefs USING [BBptr, BBTableSpace], Mopcodes, InlineDefs USING [HighHalf, LowHalf]; Blt: DEFINITIONS IMPORTS InlineDefs = { longPointers: BOOLEAN=TRUE; Grays: TYPE = ARRAY [0..4) OF CARDINAL; Handle: TYPE = POINTER TO Data; BBptr: TYPE = BitBltDefs.BBptr; Data: TYPE = RECORD [ bbt: BBptr, ycurr:LONG POINTER, grays: Grays, sdx,sdy: INTEGER, refs: PRIVATE CARDINAL_1, space: PRIVATE BitBltDefs.BBTableSpace ]; New: PROC[base: LONG POINTER, raster: CARDINAL] RETURNS[Handle]; Source: PROC[d: Handle, base: LONG POINTER, raster: CARDINAL] = INLINE { bbt: BBptr=d.bbt; IF longPointers THEN bbt.slbca_base ELSE { bh: CARDINAL=InlineDefs.HighHalf[base]; bl: POINTER=InlineDefs.LowHalf[base]; bbt.sbca_bl; IF bh#0 THEN { bbt.sourcealt_TRUE; IF bbt.unused=0 THEN bbt.unused_bh ELSE IF bbt.unused#bh THEN ERROR; }; }; bbt.sbmr_raster; }; SetX: PROC[d: Handle, xmin,xmax: CARDINAL] = INLINE { bbt: BBptr=d.bbt; IF xmin <= xmax THEN {bbt.dlx_xmin; bbt.dw_xmax-xmin;} ELSE {bbt.dlx_xmin; bbt.dw_0;}; }; SetY: PROC[d: Handle, ymin,ymax: CARDINAL] = INLINE { bbt: BBptr=d.bbt; IF ymin <= ymax THEN {bbt.dty_ymin; bbt.dh_ymax-ymin;} ELSE {bbt.dty_ymin; bbt.dh_0;}; }; SetBox: PROC[d: Handle, xmin,ymin,w,h: CARDINAL] = INLINE { bbt: BBptr=d.bbt; bbt.dlx_xmin; bbt.dty_ymin; bbt.dw_w; bbt.dh_h; }; Rect: PROC[d: Handle]; SetYCur: PUBLIC PROCEDURE [d:Handle,y:CARDINAL] = INLINE {bbt: BBptr=d.bbt; d.ycurr_bbt.dlbca + y*bbt.dbmr; RETURN; }; PutPixel: PUBLIC PROCEDURE [d:Handle,i:CARDINAL] = INLINE {bbt: BBptr=d.bbt; WLF[1,d.ycurr + i/16,FieldParam[0,FD[i MOD 16, 0]]]; RETURN; }; FD: TYPE = RECORD [pos, size: [0..17B]]; FieldParam: TYPE = RECORD [alpha: [0..377B], beta: FD]; RLF: PROCEDURE [p:LONG POINTER, f: FieldParam] RETURNS [UNSPECIFIED] = MACHINE CODE BEGIN Mopcodes.zRFSL; END; WLF: PROCEDURE [data: UNSPECIFIED, p:LONG POINTER, f: FieldParam] = MACHINE CODE BEGIN Mopcodes.zWFSL; END; Ref: PROC[d: Handle] RETURNS[Handle] = INLINE { d.refs_d.refs+1; RETURN[d] }; Free: PROC[dPtr: LONG POINTER TO Handle] = INLINE { d: Handle=dPtr^; dPtr^_NIL; IF (d.refs_d.refs-1)=0 THEN CFree[d] }; CFree: PRIVATE PROC[d: Handle]; BltImpl: PROGRAM; }.(670)\1737b2B39b10B47b3B115b3B