sys7.1-doc-wip/QuickDraw/Classic/GrafTypes.m.a
2019-07-27 22:37:48 +08:00

648 lines
19 KiB
Plaintext

;
; File: GrafTypes.m.a
;
; Contains: xxx put contents here (or delete the whole line) xxx
;
; Written by: xxx put name of writer here (or delete the whole line) xxx
;
; Copyright: © 1986-1990 by Apple Computer, Inc., all rights reserved.
;
; This file is used in these builds: BigBang
;
; Change History (most recent first):
;
; <16> 3/31/91 KON BAL, WRKSHT#csd: Remove symbols from QD build.
; <15> 3/11/91 JT Added new opcode for glyph state and a field in the picSave
; record for tracking this opcode during picture spooling. Code
; checked by KON. BRC numbers 82651 and 79185. Worksheet number
; KON-022. Also added an ALIGN statement to the UNLINK macro to
; squash the assembler warnings about code alignment.
; <14> 1/20/91 JT Removed the change to pnLocFixed since Peter was unhappy about
; it. This fix will have to wait for some future release.
; <13> 1/18/91 JT Expand pnLocFixed into a full fixed-point number in the
; QuickDraw globals area.
; <12> 10/10/90 JL Changed SysError,FixRatio, FixMul, and LongMul to MSysError,
; etc. because of conflict with Opword.
; <11> 8/26/90 PKE Deleted old names picSMgrChar, picSMgrSlop, QDSmgrSlop,
; QDSmgrCharExtra.
; <10> 8/23/90 PKE (per JT) Renamed picSMgrChar and picSMgrSlop to picQdChExtra and
; picQdRunSlop; renamed QDSmgrSlop and QDSmgrCharExtra to
; qdRunSlop and qdChExtra. Keep old names too until we can update
; all relevant sources.
; <9> 8/2/90 PKE Claim two previously unused longs in QDSpare area for Script Mgr
; charExtra and slop. The QDSpare area is called fontData in
; QuickEqu.a.
; <8> 7/23/90 gbm Fix ROM builds that use Classic QD
; <7> 7/20/90 gbm Remove duplicate definitions.
; <6> 7/11/90 gbm get rid of some asm warnings
; <5> 6/20/90 KON Add picVersion to PicSave record for OpenCPicture on B&W
; machines.
; <4> 5/30/90 JT Grabbed the first QDspare variable from the QuickDraw globals to
; hold the horizontal pen fraction. This is also known as the
; fontData storage in the newer QuickDraw equates.
; <3> 5/27/90 JT Copy the opLineLayout equate here from ColorEqu.a in the
; internal assembly folder.
; <2> 4/24/90 JT
; <1> 12/17/89 CCH Adding for the first time into BBS.
; <1.5> 12/5/89 KON PMVersion needs to be cleaned up for B&W and Color QD
; compatability
; <1.4> 12/4/89 KON Added relevant stuff from ColorEqu.a. Now DrawPicture32Patch.a
; includes this file.
; <1.3> 11/7/89 KON Added support for font name/ID binding
; <1.2> 6/6/89 BAL Fixed up trap macros for memoryMgr traps and made _stackAvail
; call _stackSpace.
; <1.1> 11/11/88 CCH Fixed Header.
; <1.0> 11/9/88 CCH Adding to EASE.
; <1.1> 5/18/88 MSH Changed inclides to use m.GRAPHTYPES to work under EASE.
; <1.0> 2/11/88 BBM Adding file for the first time into EASE…
; <A295> 10/29/86 bbm hacked for moveable toolbox dispatch table. THIS SHOULD BE
; MODIFIED ANYTIME THE START OF THE TOOLBOX TRAP TABLE MOVES.
; SHOULD BE DONE IN PARALLEL WITH HARDWARE EQUS.
;
; To Do:
;
;EASE$$$ READ ONLY COPY of file “graftypes.m.a”
; 1.5 KON 12/05/1989 PMVersion needs to be cleaned up for B&W and Color QD compatability
; 1.4 KON 12/04/1989 Added relevent stuff from ColorEqu.a. Now DrawPicture32Patch.a includes this file.
; 1.3 KON 11/07/1989 Added support for font name/ID binding
; 1.2 BAL 06/06/1989 Fixed up trap macros for memoryMgr traps and made _stackAvail call _stackSpace.
; 1.1 CCH 11/11/1988 Fixed Header.
; 1.0 CCH 11/ 9/1988 Adding to EASE.
; OLD REVISIONS BELOW
; 1.1 MSH 5/18/88 Changed inclides to use m.GRAPHTYPES to work under EASE.
; 1.0 BBM 2/11/88 Adding file for the first time into EASE…
; END EASE MODIFICATION HISTORY
;-----------------------------
; modification history
; <A295/29oct86> bbm hacked for moveable toolbox dispatch table. THIS SHOULD
; BE MODIFIED ANYTIME THE START OF THE TOOLBOX TRAP TABLE
; MOVES. SHOULD BE DONE IN PARALLEL WITH HARDWARE EQUS.
;-----------------------------------------------------------------
;
; --> GRAFTYPES.a
;
; QUICKDRAW TYPE DECLARATIONS, USED BY ALL GRAPHICS ROUTINES
;
BLANKS ON
STRING ASIS
IF &TYPE('Nil') = 'UNDEFINED' THEN
Nil: Equ 0
ENDIF
IF &TYPE('__IncludingQuickEqu__') = 'UNDEFINED' THEN
;-----------------------------------------------
;
; QuickDraw VERBS:
;
FRAME EQU 0
PAINT EQU 1
ERASE EQU 2
INVERT EQU 3
FILL EQU 4
;-----------------------------------------------
;
; QuickDraw transfer MODES:
;
srcCopy EQU 0
srcOr EQU 1
srcXor EQU 2
srcBic EQU 3
notSrcCopy EQU 4
notSrcOr EQU 5
notSrcXor EQU 6
notSrcBic EQU 7
patCopy EQU 8
patOr EQU 9
patXor EQU 10
patBic EQU 11
notPatCopy EQU 12
notPatOr EQU 13
notPatXor EQU 14
notPatBic EQU 15
;-----------------------------------------------
;
; QuickDraw Color Separation:
;
normalBit EQU 0 ;normal screen mapping
inverseBit EQU 1 ;inverse screen mapping
redBit EQU 4 ;RGB additive mapping
greenBit EQU 3 ;for photos from screen
blueBit EQU 2
cyanBit EQU 8 ;CMYBk subtractive mapping
magentaBit EQU 7 ;for ink jet printer
yellowBit EQU 6
blackBit EQU 5
blackColor EQU 33
whiteColor EQU 30
redColor EQU 205
greenColor EQU 341
blueColor EQU 409
cyanColor EQU 273
magentaColor EQU 137
yellowColor EQU 69
;-----------------------------------------------
;
; OFFSETS WITHIN A POINT:
;
V EQU 0 ;WORD
H EQU 2 ;WORD
;-----------------------------------------------
;
; OFFSETS WITHIN A RECT:
;
TOPLEFT EQU 0 ;POINT
BOTRIGHT EQU 4 ;POINT
TOP EQU 0 ;INTEGER
LEFT EQU 2 ;INTEGER
BOTTOM EQU 4 ;INTEGER
RIGHT EQU 6 ;INTEGER
;-----------------------------------------------
;
; OFFSETS WITHIN A BITMAP:
;
BASEADDR EQU 0 ;LONG
ROWBYTES EQU 4 ;WORD
BOUNDS EQU 6 ;RECT
;-----------------------------------------------
;
; OFFSETS WITHIN A CURSOR:
;
DATA EQU 0 ;16 WORDS
MASK EQU 32 ;16 WORDS
HOTSPOT EQU 64 ;POINT
;-----------------------------------------------
;
; OFFSETS WITHIN A POLYGON:
;
POLYSIZE EQU 0 ;WORD, TOTAL BYTES
POLYBBOX EQU 2 ;RECT
POLYPOINTS EQU 10 ;ARRAY[0..0] OF Point
;-----------------------------------------------
;
; OFFSETS WITHIN A REGION:
;
RGNSIZE EQU 0 ;WORD, TOTAL BYTES
RGNBBOX EQU 2 ;RECT
RGNDATA EQU 10 ;START OF RGN DATA
;-----------------------------------------------
;
; OFFSETS WITHIN A PICTURE:
;
PICSIZE EQU 0 ;WORD, TOTAL BYTES
PICFRAME EQU 2 ;RECT
PICDATA EQU 10 ;START OF BYTE CODES
;-----------------------------------------------
;
; OFFSETS WITHIN QDProcs RECORD:
;
textProc EQU 0 ;PROCPTR
lineProc EQU textProc+4 ;PROCPTR
rectProc EQU lineProc+4 ;PROCPTR
rRectProc EQU rectProc+4 ;PROCPTR
ovalProc EQU rRectProc+4 ;PROCPTR
arcProc EQU ovalProc+4 ;PROCPTR
polyProc EQU arcProc+4 ;PROCPTR
rgnProc EQU polyProc+4 ;PROCPTR
bitsProc EQU rgnProc+4 ;PROCPTR
commentProc EQU bitsProc+4 ;PROCPTR
txMeasProc EQU commentProc+4 ;PROCPTR
getPicProc EQU txMeasProc+4 ;PROCPTR
putPicProc EQU getPicProc+4 ;PROCPTR
;-----------------------------------------------
;
; OFFSETS WITHIN A GRAFPORT:
;
device EQU 0 ;WORD
portBits EQU device+2 ;BITMAP
portRect EQU portBits+14 ;RECT
visRgn EQU portRect+8 ;RGNPTR
clipRgn EQU visRgn+4 ;RGNPTR
bkPat EQU clipRgn+4 ;PATTERN
fillPat EQU bkPat+8 ;PATTERN
pnLoc EQU fillPat+8 ;POINT
pnSize EQU pnLoc+4 ;POINT
pnMode EQU pnSize+4 ;WORD
pnPat EQU pnMode+2 ;PATTERN
pnVis EQU pnPat+8 ;WORD
txFont EQU pnVis+2 ;WORD
txFace EQU txFont+2 ;WORD
txMode EQU txFace+2 ;WORD
txSize EQU txMode+2 ;WORD
spExtra EQU txSize+2 ;Fixed Point
fgColor EQU spExtra+4 ;LONG
bkColor EQU fgColor+4 ;LONG
colrBit EQU bkColor+4 ;WORD
patStretch EQU colrBit+2 ;WORD
picSave EQU patStretch+2 ;handle
rgnSave EQU picSave+4 ;handle
polySave EQU rgnSave+4 ;handle
grafProcs EQU polySave+4 ;Pointer
PORTREC EQU grafProcs+4 ;SIZE OF A GRAFPORT
PORTBOUNDS EQU PORTBITS+BOUNDS
ENDIF ; if not including quickequ
;-----------------------------------------------------
;
; OFFSETS IN A REGION STATE RECORD:
;
RGNPTR EQU 0 ;LONG
DATAPTR EQU RGNPTR+4 ;LONG
SCANBUF EQU DATAPTR+4 ;LONG
SCANSIZE EQU SCANBUF+4 ;WORD
THISV EQU SCANSIZE+2 ;WORD
NEXTV EQU THISV+2 ;WORD
MINH EQU NEXTV+2 ;WORD
MAXH EQU MINH+2 ;WORD
LEFTH EQU MAXH+2 ;WORD
RGNREC EQU LEFTH+2 ;SIZE OF A REGION RECORD
;-----------------------------------------------------
;
; Offsets in a PicSave record:
;
thePic EQU 0 ;PICHANDLE
picMax EQU thePic+4 ;LongInt
picIndex EQU picMax+4 ;LongInt
picClipRgn EQU picIndex+4 ;RgnHandle
picBkPat EQU picClipRgn+4 ;Pattern
picTxFont EQU picBkPat+8 ;WORD
picTxFace EQU picTxFont+2 ;Style
picTxMode EQU picTxFace+2 ;WORD
picTxSize EQU picTxMode+2 ;WORD
picSpExtra EQU picTxSize+2 ;Fixed Point
picTxNumer EQU picSpExtra+4 ;Point
picTxDenom EQU picTxNumer+4 ;Point
picTxLoc EQU picTxDenom+4 ;Point
picPnLoc EQU picTxLoc+4 ;Point
picPnSize EQU picPnLoc+4 ;Point
picPnMode EQU picPnSize+4 ;WORD
picPnPat EQU picPnMode+2 ;Pattern
picFillPat EQU picPnPat+8 ;Pattern
picTheRect EQU picFillPat+8 ;Rect
picOvSize EQU picTheRect+8 ;Point
picOrigin EQU picOvSize+4 ;Point
picFgColor EQU picOrigin+4 ;Long
picBkColor EQU picFgColor+4 ;Long
picQdChExtra EQU picBkColor+4 ;Fixed <3><10>
picQdRunSlop EQU picQdChExtra+4 ;Fixed <3><10>
picFontList EQU picQdRunSlop+4 ;Handle <3><10>
picVersion EQU picFontList+4 ;picture version (0-based)
picGlyphState EQU picVersion+2 ;Long, outline preferred, preserve glyph, fractional widths, scale disable flags <15>
picReserve1 EQU picGlyphState+4 ;Long
picSaveRec EQU picReserve1+4 ;total size in bytes
;------ START OF ADDITION FROM ColorEqu.a by KON ----------
pictVersion EQU 1 ;version number for pict
npicVersion EQU $2FF ;version number for npic
;-----------------------------------------------
;
; PICTURE OPCODES
;
opNOP EQU $0 ; nop opcode
opClip EQU $1 ; clip opcode
opBkPat EQU $2 ; background pattern opcode
opTxFont EQU $3 ; text font opcode
opTxFace EQU $4 ; text face opcode
opTxMode EQU $5 ; text mode opcode
opSpExtra EQU $6 ; space extra opcode
opPnSize EQU $7 ; pen size opcode
opPnMode EQU $8 ; pen mode opcode
opPnPat EQU $9 ; pen pattern opcode
opFillPat EQU $A ; fill pattern opcode
opOvSize EQU $B ; oval size opcode
opOrigin EQU $C ; origin opcode
opTxSize EQU $D ; text size opcode
opFgColor EQU $E ; foreground color opcode
opBkColor EQU $F ; background color opcode
opTxRatio EQU $10 ; text ratio opcode
opVersion EQU $11 ; version opcode
opBkPixPat EQU $12 ; color background pattern opcode
opPnPixPat EQU $13 ; color pen pattern opcode
opFillPixPat EQU $14 ; color fill pattern opcode
opPnLocHFrac EQU $15 ; fractional pen position opcode
opChExtra EQU $16 ; extra for each character
; opcode $17 unused
opIFore EQU $18 ; foreColor index opcode
opIBack EQU $19 ; backColor index opcode
opRGBFgCol EQU $1A ; RGB foreColor opcode
opRGBBkCol EQU $1B ; RGB backColor opcode
opHiliteMode EQU $1C ; hilite mode flag
opHiliteColor EQU $1D ; RGB hilite color
opDefHilite EQU $1E ; Use default hilite color
opOpColor EQU $1F ; RGB OpColor for arithmetic modes
opLine EQU $20 ; line opcode
opLineFrom EQU $21 ; line from opcode
opShortLine EQU $22 ; short line opcode
opShortLineFrom EQU $23 ; short line from opcode
opLongText EQU $28 ; long text opcode
opDHText EQU $29 ; dh text opcode
opDVText EQU $2A ; dv text opcode
opDHDVText EQU $2B ; dh,dv text opcode
opFontName EQU $2C ; font name/id binding
opLineLayout EQU $2D ; script manager line-layout state
opGlyphState EQU $2E ; TrueType glyph drawing state <15>
opBitsRect EQU $90 ; copybits, rect clipped opcode
opBitsRgn EQU $91 ; copybits, rgn clipped opcode
opPackBitsRect EQU $98 ; packed copybits, rect clipped opcode
opPackBitsRgn EQU $99 ; packed copybits, rgn clipped opcode
opShortComment EQU $A0 ; short comment opcode
opLongComment EQU $A1 ; long comment opcode
opEndPic EQU $FF ; end of picture opcode
ngHeaderOp EQU $0C00 ; NuGraf Header opcode
;-----------------------------------------------
;
; COLOR QUICKDRAW EQUATES
;
nurbMask EQU $7FFF ; mask top 2 bits of rowbytes
rbMask EQU $1FFF ; mask top 3 bits of rowbytes
PMFlag EQU $8000 ; flag to say it's a new pixMap
cPortFlag EQU $C000 ; isPixMap+isCPort
pixVersion EQU $0000 ; isPixMap
qdStackXtra EQU $0640 ; stack space left for interrupts <1.4> BAL
isPixMap EQU 15 ; for testing high bit of pRowbytes
isCPort EQU 14 ; indicates that "bitmap" belongs to port
;-----------------------------------------------
;
; COLOR QUICKDRAW OFFSETS
;
;-----------------------------------------------
;
; OFFSETS WITHIN A PIXELMAP
;
pBaseAddr EQU 0 ; [long]
pNewFlag EQU pBaseAddr+4 ; [1 bit] upper bit of rowbytes is flag
pRowBytes EQU pBaseAddr+4 ; [word]
pBounds EQU pRowBytes+2 ; [rect]
IF 0 THEN ; Seems pretty Scary Bruce
pmVersion EQU pBounds+8 ; [word] pixMap version number
ENDIF
IF (&TYPE('pmVersion') = 'UNDEFINED') THEN
pmVersion EQU $E ; [word] pixMap version number
ENDIF
packType EQU pmVersion+2 ; [word] defines packing format
packSize EQU packType+2 ; [long] size of pixel data
hRes EQU packSize+4 ; [fixed] h. resolution (ppi)
vRes EQU hRes+4 ; [fixed] v. resolution (ppi)
pixelType EQU vRes+4 ; [word] defines pixel type
pixelSize EQU pixelType+2 ; [word] # bits in pixel
cmpCount EQU pixelSize+2 ; [word] # components in pixel
cmpSize EQU cmpCount+2 ; [word] # bits per field
planeBytes EQU cmpSize+2 ; [long] offset to next plane
IF 0 THEN
pmTable EQU planeBytes+4 ; [long] color map
pmReserved EQU pmTable+4 ; [long] MUST BE 0
pmRec EQU pmReserved+4 ; size of pixelMap record
ENDIF
MACRO
UNLINK
.*--------------------------------------------------------------
.*
.* UNLINK A6, STRIP PARAMETERS, AND RETURN.
.*
.* FIRST PARAM IS NUMBER OF BYTES OF STACK BIAS.
.*
UNLK A6 ;RELEASE LOCAL VARIABLES
.*
IF &Eval(&Syslst[1])=0 THEN;NO PARAMETERS ?
RTS ;THEN JUST RTS
.*
ELSEIF &Eval(&Syslst[1])=4 THEN;4 BYTES ?
MOVE.L (SP)+, (SP) ;STRIP PARAMETERS
RTS ;RETURN
ELSE
RTD_ &Eval(&Syslst[1]) ;STRIP PARAMETERS AND RETURN
ENDIF
.* <16> dc.b &Syslst[2] ;PUT OUT THE STRING
.* <16> align 2 ; align for following function or procedure <15>
.*
ENDM
MACRO
RTD_ &parm1
IF &SETTING('MACHINE') <> 'MC68000' THEN
RTD #&parm1
ELSE
IF &Eval(&parm1) = 0 THEN
rts
ELSEIF &Eval(&parm1)=4 THEN;4 BYTES ?
move.l (SP)+, (SP) ;STRIP PARAMETERS
rts ;RETURN
ELSEIF &Eval(&parm1)<=8 THEN
move.l (sp), &parm1(sp)
addq #&parm1, sp
rts
ELSE
move.l (sp), &parm1(sp)
add.w #&parm1, sp
rts
ENDIF
ENDIF
ENDM
;----- END OF ADDITION from ColorEqu.a by KON -----------
IF &TYPE('__IncludingQuickEqu__') = 'UNDEFINED' THEN
;-----------------------------------------------------
;
; QuickDraw GLOBAL VARIABLES:
;
; 52(A5) CONTAINS A POINTER TO THEPORT.
; ALL OTHER GLOBAL VARIABLES ARE EXPRESSED RELATIVE TO THEPORT.
;
GRAFGLOBALS EQU 0 ;A5 OFFSET TO GLOBALPTR
;-----------------------------------------------------------
;
; QuickDraw PUBLIC GLOBAL VARIABLES:
;
thePort EQU 0 ;GrafPtr
white EQU thePort-8 ;Pattern
black EQU white-8 ;Pattern
gray EQU black-8 ;Pattern
ltGray EQU gray-8 ;Pattern
dkGray EQU ltGray-8 ;Pattern
arrow EQU dkGray-68 ;Cursor
screenBits EQU arrow-14 ;BitMap
randSeed EQU screenBits-4 ;LONGINT
;------------------------------------------------------------
;
; QuickDraw private global variables:
;
wideOpen EQU randSeed-4 ;RgnHandle
wideMaster EQU wideOpen-4 ;RgnPtr
wideData EQU wideMaster-10 ;Fake Region
rgnBuf EQU wideData-4 ;PointsHandle
rgnIndex EQU rgnBuf-2 ;INTEGER
rgnMax EQU rgnIndex-2 ;INTEGER
playPic EQU rgnMax-4 ;Long
QDSpare0 EQU playPic-2 ;unused word
thePoly EQU QDSpare0-4 ;POLYHANDLE
polyMax EQU thePoly-2 ;INTEGER
patAlign EQU polyMax-4 ;Point
fixTxWid EQU patAlign-4 ;Fixed Point
fontPtr EQU fixTxWid-4 ;long, ^FMOutput record
playIndex EQU fontPtr-4 ;long
pnLocFixed EQU playIndex-2 ;word, horizontal pen fraction <4>
qdRunSlop EQU pnLocFixed-4 ;fixed point, Script Mgr run slop <9><10>
qdChExtra EQU qdRunSlop-4 ;fixed point, Script Mgr char extra <9><10>
QDSpare8 EQU qdChExtra-2 ;unused word <9>
QDSpare9 EQU QDSpare8-2 ;unused word
QDSpareA EQU QDSpare9-2 ;unused word
QDSpareB EQU QDSpareA-2 ;unused word
QDSpareC EQU QDSpareB-2 ;unused word
QDSpareD EQU QDSpareC-2 ;unused word
lastGrafGlob EQU QDSpareD
grafSize EQU 4-lastGrafGlob ;total size in bytes
ENDIF ; IF not including quickequ
;----------------------------------------------
;
; Trap table equates used by QuickDraw:
;
IF onMac THEN
xToolTable EQU $C00 ; start addr on macplus
ELSE
xToolTable EQU $E00 ; start addr on aladin
ENDIF
JStdArc EQU xToolTable+(4*$BD)
JStdBits EQU xToolTable+(4*$EB)
JStdComment EQU xToolTable+(4*$F1)
JStdGetPic EQU xToolTable+(4*$EE)
JStdLine EQU xToolTable+(4*$90)
JStdOval EQU xToolTable+(4*$B6)
JStdPoly EQU xToolTable+(4*$C5)
JStdPutPic EQU xToolTable+(4*$F0)
JStdRect EQU xToolTable+(4*$A0)
JStdRgn EQU xToolTable+(4*$D1)
JStdRRect EQU xToolTable+(4*$AF)
JStdText EQU xToolTable+(4*$82)
JStdTxMeas EQU xToolTable+(4*$ED)
MACRO
_StackAvail
MOVE.L $400+4*$65,A0 ;get address of stack space routine
JSR (A0) ;get stack space into D0 and return
ENDM
;_______________________________________________________________________
;
; Equates for setting trap option bits
;
;_______________________________________________________________________
IF forROM THEN
immed EQU $200 ; execute immediately, bypass I/O queue
clear EQU $200 ;
async EQU $400 ; asynchronous, don't wait for completion
sys EQU $400 ;
autoPop EQU $400 ; set autopop bit
ENDIF
;----------------------------------------------
;
; Trap Macros used by QuickDraw:
;
MACRO
_MLongMul
DC.W ($A867)
ENDM
MACRO
_MFixMul
DC.W ($A868)
ENDM
MACRO
_MFixRatio
DC.W ($A869)
ENDM
IF forROM THEN
_NewHandle OPWORD $A122
_DisposHandle OPWORD $A023
_SetHandleSize OPWORD $A024
_GetHandleSize OPWORD $A025
_HLock OPWORD $A029
_HUnLock OPWORD $A02A
ENDIF
MACRO
_MSysError
DC.W ($A9C9)
ENDM
MACRO
_GetScrnBits
DC.W ($A833) ;new trap number
ENDM
MACRO
_SwapFont
MOVE.L $8E0,A0 ;get pointer to FMSwapFont
JSR (A0) ;call font manager
ENDM