mac-rom/QuickDraw/DrawingVars.a

378 lines
15 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; File: DrawingVars.a
;
; Copyright: © 1988-1992 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <13> 6/10/92 SAH Brought back in saveStkLowPt local so that Stretch can save and
; restore it properly, rather than munging it (along with most of
; your stack) in low memory situations.
; <12> 10/2/91 DTY Conditionalise last change for TheFuture.
; <11> 10/1/91 KON Save and restore stklowPt (rather than just setting it to sp on
; exit) in stretch. This fixes a bug where someone turns off the
; stack sniffer and then calls stretch which turns it back on.
; <10> 11/12/90 KON Move input rectangles to the very bottom of the stack frame so
; they don't move other stack locations needed by ROM routines as
; in ci class machines. [smc]
; <9> 11/9/90 KON Add newSrcRect, newMaskRect, and newDstRect to Stretchbits stack
; frame. [smc]
; <8> 10/31/90 SMC Add stack frame labels used in fixes of alpha channel bugs.
; <7> 8/26/90 KON Add stack frame variables for 32-bit clean pointers to color
; table used by stretch.
; <6> 8/2/90 gbm change TEMPRECT to TEMPRECTANGLE to avoid conflicts
; <5> 7/20/90 gbm Change some identifiers to cease conflicting with interface
; files
; <4> 5/22/90 KON Add flag to stretch for mode translation and colorizing. Used
; by stretch and passed to makeScaleTbl. Also added RGBFrColor
; and RGBBgColor to stretch stackframe for colorizing at srcbuf.
; <3> 5/1/90 KON Add srcMergeCase and MaskMergeCase variables for stretch.
; <1+> 1/3/90 BAL Added variables (in place) for Indexed to Indexed dithering support.
; <¥1.4> 7/14/89 BAL For Aurora: Final CQD
; <1.3> 6/30/89 BAL Added some stack frame vars for future use
; <¥1.2> 5/29/89 BAL Blasting in 32-Bit QuickDraw version 1.0 Final
; <¥1.1> 4/12/89 BAL Blasting in 32-Bit QuickDraw 1.0B1
; 1/8/89 BAL Made destPixOffset a long for bfextu in bTransparent
; 11/5/88 BAL Added transfer direction (RUNBUMP) to SeekMask interface.
; 10/3/88 BAL Moved DstRow into the interface for SeekMask; (DstRow<0) ->
; seeking up. Reorganized variables to maintain long word
; alignment through out.
; 10/1/88 BAL Added RUNRTN, rtn to form n-bit run mask from 1-bit scan mask.
; 9/22/88 BAL Moved MINRECT, STACKFREE, and DSTSHIFT up into interface to
; SeekMask.
; 9/21/88 BAL Added RUNBUF, pointer to run encoded blit mask.
; 9/18/88 BAL Broken out from StretchBits, RgnBlt, BitBlt, SeekMask,
; PatExpand, DrawArc, DrawLine, DrawSlab, ColorMap.
;
; To Do:
;
;EASE$$$ READ ONLY COPY of file Òdrawingvars.aÓ
;¥1.4 BAL 07/14/1989 For Aurora: Final CQD
; 1.3 BAL 06/30/1989 Added some stack frame vars for future use
;¥1.2 BAL 05/29/1989 Blasting in 32-Bit QuickDraw version 1.0 Final
;¥1.1 BAL 04/12/1989 Blasting in 32-Bit QuickDraw 1.0B1
; File Drawing Vars.a
;
; Copyright Apple Computer, Inc. 1988
; All Rights Reserved
;
;------------------------------------------------------------------
;
; MODIFICATIONS
;
; 18Sep88 BAL Broken out from StretchBits, RgnBlt, BitBlt, SeekMask, PatExpand,
; DrawArc, DrawLine, DrawSlab, ColorMap.
; 21Sep88 BAL Added RUNBUF, pointer to run encoded blit mask.
; 22Sep88 BAL Moved MINRECT, STACKFREE, and DSTSHIFT up into interface to SeekMask.
; 01Oct88 BAL Added RUNRTN, rtn to form n-bit run mask from 1-bit scan mask.
; 03Oct88 BAL Moved DstRow into the interface for SeekMask; (DstRow<0) -> seeking up.
; Reorganized variables to maintain long word alignment through out.
; 05Nov88 BAL Added transfer direction (RUNBUMP) to SeekMask interface.
; 08Jan89 BAL Made destPixOffset a long for bfextu in bTransparent
;----------------------------------------------------
;
; STACKFRAME LINKED AND LOCALS INITIALIZED BY STRETCHBITS.
;
; A6 OFFSETS OF LOCAL VARIABLES AFTER LINK:
;
; STACK FRAME VARS USED BY SEEKMASK (CALLED BY STRETCHBITS, RGNBLT, DRAWARC, DRAWLINE)
; (NOT USED IN PATEXPAND)
RECTFLAG EQU -2 ;WORD
VERT EQU RECTFLAG-2 ;WORD
RGNBUFFER EQU VERT-4 ;LONG
RUNBUF EQU RGNBUFFER-4 ;LONG <BAL 21Sep88>
BUFLEFT EQU RUNBUF-2 ;WORD
BUFSIZE EQU BUFLEFT-2 ;WORD
EXRTN EQU BUFSIZE-4 ;LONG
RUNRTN EQU EXRTN-4 ;LONG
SEEKMASK EQU RUNRTN-4 ;LONG
DSTMASKBUF EQU SEEKMASK-4 ;LONG
DSTMASKALIGN EQU DSTMASKBUF-4 ;LONG
STATEA EQU DSTMASKALIGN-RGNREC ;RGN STATE RECORD
STATEB EQU STATEA-RGNREC ;RGN STATE RECORD
STATEC EQU STATEB-RGNREC ;RGN STATE RECORD
MINRECT EQU STATEC-8 ;RECT <BAL 21Sep88>
DSTSHIFT EQU MINRECT-2 ;WORD <BAL 21Sep88>
RUNBUMP EQU DSTSHIFT-2 ;WORD <BAL 05Nov88>
DSTROW EQU RUNBUMP-4 ;LONG <BAL 03Oct88>
GoShow EQU DSTROW-4 ;LONG Go home and show crsr <BAL 21Mar89>
STACKFREE EQU GoShow-4 ;LONG <BAL 21Sep88>
IF (&CurFile ­ 'SEEKMASK') THEN
; STACK FRAME VARS USED BY PATEXPAND, COLORMAP, DRAWSLAB
; (CALLED BY STRETCHBITS, RGNBLT, BITBLT, DRAWARC, DRAWLINE)
; SET UP FOR BITBLT FOR RGNBLT
EXPAT EQU STACKFREE-4 ;LONG YES
PATVMASK EQU EXPAT-2 ;WORD (must follow expat)
PATHMASK EQU PATVMASK-2 ;WORD (must follow PATVMASK)
PATROW EQU PATHMASK-2 ;WORD (must follow PATHMASK)
PATHPOS EQU PATROW-2 ;WORD YES
filler5 EQU PATHPOS-1 ;BYTE <8> YES
alphaMode EQU filler5-1 ;BYTE <8>
PATVPOS EQU alphaMode-4 ;LONG <8> YES <BAL 22Jan89>
LOCMODE EQU PATVPOS-2 ;WORD YES
LOCPAT EQU LOCMODE-4 ;LONG YES
FCOLOR EQU LOCPAT-4 ;LONG YES
BCOLOR EQU FCOLOR-4 ;LONG YES
useDither EQU BCOLOR-1 ;(was pixsrc) reclaimed 07Jul88 <BAL>
NEWPATTERN EQU useDither-1 ;BYTE YES
DSTPIX EQU NEWPATTERN-(PMREC+CTREC+20) ;PIXMAP+COLOR TABLE YES
alphaBack EQU DSTPIX-4 ;<8> NOTE THAT THESE
alphaMask EQU alphaBack-4 ;<8> OVERLAP WITH weight, pin
alphaFore EQU alphaMask-4 ;<8> AND notWeight BELOW
IF (&CurFile ­ 'PATEXPAND') THEN
; these shared stack frame vars are set up and used by the arithmetic drawing modes
; (used by STRETCHBITS, RGNBLT, BITBLT, DRAWARC, DRAWLINE, DRAWSLAB, COLORMAP)
weight EQU DSTPIX-6 ;RGB weight for averaging
pin EQU weight ;RGB used by max, min
notWeight EQU weight-6 ;RGB complement of weight (for average)
multiColor EQU notWeight-1 ;byte set if source contains nonblack/white colors
MMUsave EQU multiColor-1 ;byte MMU mode on entry to QD
FGnotBlack EQU MMUsave-1 ;byte / true if forecolor ­ black
BGnotWhite EQU FGnotBlack-1 ;byte \ true if backcolor ­ white (must follow FGBlack)
colorTable EQU BGnotWhite-4 ;long pointer to color table
invColor EQU colorTable-4 ;long pointer to inverse color table
invSize EQU invColor-2 ;word resolution of inverse color table
rtShift EQU invSize-2 ;Word used by average how far to shift
transColor EQU rtShift-4 ;long copy of backcolor for transparent
hilitColor EQU transColor-4 ;long hilite color pixels
slabLeft EQU hilitColor-4 ;long bit offset from bufleft to pen position
patHBitPos EQU slabLeft-4 ;long bit offset to pattern left
IF (&CurFile = 'DRAWARC') THEN
; STACK FRAME VARS USED ONLY BY DRAWARC
SAVESTK EQU patHBitPos-4 ;LONG
MODECASE EQU SAVESTK-4 ;LONG
DSTLEFT EQU MODECASE-4 ;LONG
TEMPRECTANGLE EQU DSTLEFT-8 ;RECT
FASTFLAG EQU TEMPRECTANGLE-2 ;BYTE
INNEROVAL EQU FASTFLAG-OVALSIZE ;OVAL RECORD (46)
CRSRFLAG EQU INNEROVAL-2 ;WORD
OUTEROVAL EQU CRSRFLAG-OVALSIZE ;OVAL RECORD (46)
SKIPTOP EQU OUTEROVAL-2 ;WORD
SKIPBOT EQU SKIPTOP-2 ;WORD
ARCFLAG EQU SKIPBOT-1 ;BYTE FLAG
SKIPFLAG EQU ARCFLAG-1 ;BYTE FLAG
STOPANGLE EQU SKIPFLAG-2 ;INTEGER
MIDVERT EQU STOPANGLE-2 ;INTEGER
MIDHORIZ EQU MIDVERT-2 ;INTEGER
WIDTH EQU MIDHORIZ-2 ;INTEGER
HEIGHT EQU WIDTH-2 ;INTEGER
SLOPE1 EQU HEIGHT-4 ;LONG, FIXED POINT
SLOPE2 EQU SLOPE1-4 ;LONG, FIXED POINT
LINE1 EQU SLOPE2-4 ;LONG, FIXED POINT
LINE2 EQU LINE1-4 ;LONG, FIXED POINT
FLAG1 EQU LINE2-2 ;WORD
FLAG2 EQU FLAG1-2 ;WORD
OUTERLEFT EQU FLAG2-2 ;WORD
OUTERRIGHT EQU OUTERLEFT-2 ;WORD
INNERLEFT EQU OUTERRIGHT-2 ;WORD
INNERRIGHT EQU INNERLEFT-2 ;WORD
REALBOUNDS EQU INNERRIGHT-4 ;LONG
VARSIZE EQU REALBOUNDS ;SIZE OF LOCAL VARIABLES
ELSEIF (&CurFile = 'DRAWLINE') THEN
; STACK FRAME VARS USED ONLY BY DRAWLINE
LINERECT EQU hilitColor-8 ;RECT
SAVESTK EQU LINERECT-4 ;LONG
MODECASE EQU SAVESTK-4 ;LONG
LEFTEDGE EQU MODECASE-4 ;LONG, FIXED POINT
RIGHTEDGE EQU LEFTEDGE-4 ;LONG, FIXED POINT
SLOPE EQU RIGHTEDGE-4 ;LONG, FIXED POINT
DSTLEFT EQU SLOPE-4 ;LONG
SAVEA5 EQU DSTLEFT-4 ;LONG
PORT EQU SAVEA5-4 ;LONG
FASTFLAG EQU PORT-2 ;BYTE
CRSRFLAG EQU FASTFLAG-2 ;WORD
BIGRGN EQU CRSRFLAG-4 ;LONG, RgnHandle
REALBOUNDS EQU BIGRGN-4 ;LONG
VARSIZE EQU REALBOUNDS ;SIZE OF LOCAL VARIABLES
ELSEIF (&CurFile = 'DRAWPOLY') THEN
; Stack frame variables used in accord with DrawArc
SAVESTK EQU hilitColor-4 ;LONG
MODECASE EQU SAVESTK-4 ;LONG
DSTLEFT EQU MODECASE-4 ;LONG
TEMPRECTANGLE EQU DSTLEFT-8 ;RECT
FASTFLAG EQU TEMPRECTANGLE-2 ;BYTE
CRSRFLAG EQU FASTFLAG-2 ;SHORT
REALBOUNDS EQU CRSRFLAG-4 ;LONG
; Stack frame variables used only in DrawPoly
FreeList Equ RealBounds-4
StackLimit Equ FreeList-4
ActiveList Equ StackLimit-4
OldStacker Equ ActiveList-4
VarSize Equ OldStacker
ELSEIF ( (&CurFile = 'STRETCH') | (&CurFile = 'RGNBLT') | (&CurFile = 'BITBLT') ) THEN
; MORE SHARED STACK FRAME VARS (STRETCHBITS, RGNBLT, BITBLT)
alignSrcPM EQU hilitColor-2 ;WORD
SRCPIX EQU alignSrcPM-(PMREC+CTREC+20) ;PIXMAP YES
alignMaskPM EQU SRCPIX-2 ;WORD
MASKPIX EQU alignMaskPM-(PMREC+CTREC+20) ;PIXMAP YES
SRCROW EQU MASKPIX-4 ;LONG YES
MASKROW EQU SRCROW-4 ;LONG YES
SRCSHIFT EQU MASKROW-2 ;WORD YES
MASKSHIFT EQU SRCSHIFT-2 ;WORD YES
INVERTFLAG EQU MASKSHIFT-4 ;LONG YES
SAVESTK EQU INVERTFLAG-4 ;LONG YES
SAVEA5 EQU SAVESTK-4 ;LONG YES
SRCBUF EQU SAVEA5-4 ;LONG
DSTBUF EQU SRCBUF-4 ;LONG
SCALEBUF EQU DSTBUF-4 ;LONG
dstBufBump EQU SCALEBUF-4 ;LONG <BAL 17Mar89>
scaleBufBump EQU dstBufBump-4 ;LONG <BAL 17Mar89>
SRCMASKBUF EQU scaleBufBump-4 ;LONG
filler1 EQU SRCMASKBUF-2 ;WORD
SRCLONGS EQU filler1-2 ;WORD
SRCMASKLONGS EQU SRCLONGS-2 ;WORD
DSTMASKLONGS EQU SRCMASKLONGS-2 ;WORD
DSTLONGS EQU DSTMASKLONGS-2 ;WORD
SCALELONGS EQU DSTLONGS-2 ;WORD
SRCADDR EQU SCALELONGS-4 ;LONG
MASKADDR EQU SRCADDR-4 ;LONG
DSTADDR EQU MASKADDR-4 ;LONG
SRCLIMIT EQU DSTADDR-4 ;LONG
NUMER EQU SRCLIMIT-4 ;POINT
DENOM EQU NUMER-4 ;POINT
MASKNUMER EQU DENOM-4 ;POINT
MASKDENOM EQU MASKNUMER-4 ;POINT
MODECASE EQU MASKDENOM-4 ;LONG
; STACK FRAME VARS USED BY STRETCHBITS ONLY
RATIOCASE EQU MODECASE-4 ;LONG
MASKCASE EQU RATIOCASE-4 ;LONG
HORIZFRACTION EQU MASKCASE-2 ;WORD
MASKFRACT EQU HORIZFRACTION-2 ;WORD
SCALECASE EQU MASKFRACT-4 ;LONG
SRCSCANS EQU SCALECASE-2 ;WORD
SRCPIXCNT EQU SRCSCANS-2 ;WORD
SRCALIGN EQU SRCPIXCNT-4 ;LONG
DSTALIGN EQU SRCALIGN-4 ;LONG
MASKALIGN EQU DSTALIGN-4 ;LONG
ScaleTbl EQU MASKALIGN-4 ;LONG
VERROR EQU ScaleTbl-2 ;WORD
CRSRFLAG EQU VERROR-2 ;WORD
REALBOUNDS EQU CRSRFLAG-4 ;LONG
; STACK FRAME VARS USED BY RGNBLT ONLY
FIRSTV EQU REALBOUNDS-2 ;WORD
LASTV EQU FIRSTV-2 ;WORD
VBUMP EQU LASTV-2 ;WORD, MUST BE ABOVE HBUMP
HBUMP EQU VBUMP-2 ;WORD
RGNADDR EQU HBUMP-4 ;LONG
filler2 EQU RGNADDR-2 ;WORD
SRCSIZE EQU filler2-2 ;WORD
SAVESTK2 EQU SRCSIZE-4 ;LONG
; STACK FRAME VARS USED BY BITBLT ONLY
SRCV EQU SAVESTK2-2 ;WORD
DSTV EQU SRCV-2 ;WORD
SRCBUMP EQU DSTV-2 ;WORD
HEIGHT EQU SRCBUMP-2 ;WORD
SRCRECT2 EQU HEIGHT-8 ;RECT
FIRSTMASK EQU SRCRECT2-4 ;LONG
LONGCNT EQU FIRSTMASK-2 ;WORD
; STACK FRAME VARS USED BY RGNBLT/BITBLT
doneMid EQU LONGCNT-1 ;Byte two flags used to control loop
endSwitch EQU doneMid-1 ;Byte three-way switch chooses from src, pat, bigpat
lastMask EQU endSwitch-4 ;Long mask for last long blitted on line
midCount EQU lastMask-2 ;Word # of pixels on line less mask longs - 1
pixInLong EQU midCount-2 ;Word # of pixels in a long - 1
patOffset EQU pixInLong-4 ;Long pattern horizontal initial offset
patPos EQU patOffset-2 ;Word pattern vertical offset
destPixCnt EQU patPos-2 ;word 1-based cnt of pixels to blit<02Mar89 BAL>
destPixOffset EQU destPixCnt-4 ;long destination pixel offset <08Jan89 BAL>
pixInLong1 EQU destPixOffset-2 ;Word same as pixInLong, 1 based (for transparent)
longBump EQU pixInLong1-2 ;Word 32 signed direction of blit (for transparent)
; MORE STACK FRAME VARS USED BY STRETCHBITS ONLY
stITabPtr EQU longBump-4 ;pointer to inverse table (not header) <17Jun88 BAL>
stITabInfo EQU stITabPtr-4 ;pointer to luminance table (not header)<17Mar89 BAL>
stSProc EQU stITabInfo-4 ;head of search proc list <17Jun88 BAL>
stTmpProc EQU stSProc-4 ;working copy of current searchproc <17Jun88 BAL>
stCLUTPtr EQU stTmpProc-4 ;ptr to dst clut for dither <28Jun88 BAL>
stITabRes EQU stCLUTPtr-2 ;inverse table resolution if direct <17Jun88 BAL>
ErrPhase EQU stITabRes-2 ;initial position in src long <07Sep88 BAL>
ErrBuf EQU ErrPhase-4 ;ptr to scan of error values <29Aug88 BAL>
ErrSrcBuf EQU ErrBuf-4 ;ptr to last position in src buf <07Sep88 BAL>
errDir EQU ErrSrcBuf-1 ;err diffusion direction flag <04Sep88 BAL>
useAverage EQU errDir-1 ;scaling quality flag <04Sep88 BAL>
ABufSize EQU useAverage-2 ;long cnt size of AvrgBuf <04Sep88 BAL>
AvrgBuf EQU ABufSize-4 ;ptr to scan of rgb accumulations <04Sep88 BAL>
StackHandle EQU AvrgBuf-4 ;MFTemp memory for alternate stack <09Apr89 BAL>
FastCase EQU StackHandle-1 ;no invert/copy/no stretch/no colorize<03Apr89 BAL>
realDepth EQU FastCase-1 ;byte preserving src depth before RGB conversion <1.5>
realSrcShift EQU realDepth-2 ;word preserving src shift before RGB conversion <1.5>
scaleBltA3 EQU realSrcShift-4 ;value reloaded into A3 by scaleBlt <1.3> BAL
RunBuf2 EQU scaleBltA3-4 ;used for reverse dither run mask <1.3> BAL
oldHiHeapMark EQU RunBuf2-4 ;used during stack swapping <1.3> BAL
srcMergeCase EQU oldHiHeapMark-4 ;routine for vertical src averaging <17Apr90 KON>
maskMergeCase EQU srcMergeCase-4 ;routine for vertical mask averaging<17Apr90 KON>
CombineMaskCase EQU maskMergeCase-4 ;routine to blend src and dst using mask <25Apr90 KON>
MaskError EQU CombineMaskCase-2 ;error for verical mask scaling <17Apr90 KON>
XLateFlag EQU MaskError-2 ;translation flags for mode and colorizing
RGBFrColor EQU XLateFlag-6 ;fg color for colorizing at srcbuf
RGBBgColor EQU RGBFrColor-6 ;bg color for colorizing at srcbuf
SrcPixPmTable EQU RGBBgColor-4 ;32-bit clean pointer to src color table <24AUG90 KON>
MaskPixPmTable EQU SrcPixPmTable-4 ;32-bit clean pointer to mask color table <24AUG90 KON>
newSrcRect EQU MaskPixPmTable-8 ;Rectangle <KON 12NOV90>
newMaskRect EQU newSrcRect-8 ;Rectangle <KON 12NOV90>
newDstRect EQU newMaskRect-8 ;Rectangle <KON 12NOV90>
saveStkLowPt EQU newDstRect-4 ;long value of stklowpt <KON 12NOV90>
stReserved1 EQU saveStkLowPt-4 ;long reserved for patches <17Apr90 KON>
VARSIZE EQU stReserved1 ;SIZE OF LOCAL VARIABLES
ENDIF ;[STRETCH | RGNBLT | BITBLT]
ENDIF ;(!PATEXPAND)
ENDIF ;(!SEEKMASK)