mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 01:29:20 +00:00
4325cdcc78
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
229 lines
5.9 KiB
Plaintext
229 lines
5.9 KiB
Plaintext
;
|
|
; File: Arcs.a
|
|
;
|
|
; Copyright: © 1981-1992 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <SM2> 6/10/92 stb <sm 6/9/92>stb Note that StdArc has the fix from QDciPatchROM.a
|
|
; <¥1.4> 5/29/89 BAL Blasting in 32-Bit QuickDraw version 1.0 Final
|
|
; <¥1.3> 4/12/89 BAL Blasting in 32-Bit QuickDraw 1.0B1
|
|
; 1/8/89 BAL Vectorized CheckPic
|
|
; 9/5/86 EHB Added FillCArc
|
|
; 8/16/86 EHB In FillArc, call SetFillPat for color patterns
|
|
;
|
|
;
|
|
|
|
|
|
|
|
BLANKS ON
|
|
STRING ASIS
|
|
|
|
;-----------------------------------------------------------
|
|
;
|
|
;
|
|
; * ***** *** ***
|
|
; * * * * * * * *
|
|
; * * * * * *
|
|
; * * ***** * ***
|
|
; ***** * * * *
|
|
; * * * * * * * *
|
|
; * * * * *** ***
|
|
;
|
|
; Procedures for drawing Arcs:
|
|
;
|
|
|
|
StdArc PROC EXPORT
|
|
IMPORT PutPicVerb,PutPicWord,PutPicRect
|
|
IMPORT PushVerb,DrawArc,StdDevLoop
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdArc(verb: GrafVerb; r: Rect; startAngle,arcAngle: INTEGER);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
; contains fix as seen in QDciPatchROM.a <sm 6/9/92>stb
|
|
|
|
PARAMSIZE EQU 10
|
|
VERB EQU PARAMSIZE+8-2 ;GRAFVERB
|
|
RECT EQU VERB-4 ;LONG, ADDR OF RECT
|
|
STARTANG EQU RECT-2 ;WORD
|
|
ARCANG EQU STARTANG-2 ;WORD
|
|
|
|
OVWD EQU -2 ;WORD
|
|
OVHT EQU OVWD-2 ;WORD
|
|
VARSIZE EQU OVHT ;TOTAL BYTES OF LOCALS
|
|
|
|
|
|
LINK A6,#VARSIZE ;ALLOCATE STACK FRAME
|
|
MOVEM.L D4/D7/A3-A4,-(SP) ;SAVE REGS
|
|
MOVE.B VERB(A6),D7 ;GET VERB
|
|
_CheckPic ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B D7,-(SP)
|
|
bsr.l PutPicVerb ;PUT ADDIONAL PARAMS TO THEPIC
|
|
MOVEQ #$60,D0 ;PUT ARCNOUN IN HI NIBBLE
|
|
ADD D7,D0 ;PUT VERB IN LO NIBBLE
|
|
MOVE.B D0,-(SP) ;PUSH OPCODE
|
|
MOVE.L RECT(A6),-(SP) ;PUSH ADDR OF RECT
|
|
bsr.l PutPicRect ;PUT OPCODE AND RECTANGLE
|
|
MOVE STARTANG(A6),-(SP)
|
|
bsr.l PutPicWord ;PUT STARTANGLE
|
|
MOVE ARCANG(A6),-(SP)
|
|
bsr.l PutPicWord ;PUT ARCANGLE
|
|
|
|
; CALL STANDARD LOOP TO DRAW TO ALL DEVICES
|
|
|
|
NOTPIC PEA StdDraw ;PUSH ADDRESS OF DRAW ROUTINE
|
|
PEA GetRect ;PUSH ADDRESS OF RECT ROUTINE
|
|
_StdDevLoop ;DRAW TO ALL DEVICES
|
|
|
|
MOVEM.L (SP)+,D4/D7/A3-A4 ;RESTORE REGS
|
|
UNLINK PARAMSIZE,'STDARC '
|
|
|
|
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE GetRect(VAR theRect: rect);
|
|
;
|
|
; RETURN THE OBJECT'S RECTANGLE
|
|
;
|
|
GetRect MOVE.L (SP)+,D0 ;GET RETURN ADDRESS
|
|
MOVE.L (SP)+,A1 ;GET DST RECT
|
|
MOVE.L RECT(A6),A0 ;GET SRC RECT
|
|
MOVE.L (A0)+,(A1)+ ;SET TOPLEFT
|
|
MOVE.L (A0),(A1) ;SET BOTRIGHT
|
|
MOVE.L D0,A0 ;GET RETURN ADDRESS
|
|
JMP (A0) ;AND RETURN
|
|
|
|
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdDraw;
|
|
;
|
|
; DRAW THE OBJECT
|
|
;
|
|
StdDraw MOVE.L RECT(A6),A0 ;POINT TO RECT
|
|
MOVE RIGHT(A0),D0
|
|
SUB LEFT(A0),D0
|
|
MOVE D0,OVWD(A6) ;OVWD := R.RIGHT - R.LEFT
|
|
MOVE BOTTOM(A0),D0
|
|
SUB TOP(A0),D0
|
|
MOVE D0,OVHT(A6) ;OVHT := R.BOTTOM - R.TOP
|
|
|
|
MOVE.L A0,-(SP) ;PUSH ADDR OF RECT
|
|
CLR.B -(SP) ;PUSH HOLLOW = FALSE
|
|
TST.B D7 ;IS VERB FRAME ?
|
|
BNE.S DOIT ;NO, CONTINUE
|
|
;
|
|
; Currently, FrameArc does not put inversion points to theRgn.
|
|
; If this changes, add test and call to PutArc here.
|
|
;
|
|
MOVE.B #1,(SP) ;REPLACE, PUSH HOLLOW = TRUE
|
|
DOIT MOVE.L OVHT(A6),-(SP) ;PUSH OVWD,OVHT
|
|
_PushVerb ;PUSH MODE AND PATTERN
|
|
MOVE STARTANG(A6),-(SP) ;PUSH STARTANGLE
|
|
MOVE ARCANG(A6),-(SP) ;PUSH ARCANGLE
|
|
|
|
; DrawArc(r,hollow,ovWd,ovHt,mode,pat,startAng,arcAng);
|
|
|
|
_DrawArc
|
|
RTS
|
|
|
|
|
|
|
|
FrameArc PROC EXPORT
|
|
EXPORT CallArc,PaintArc,EraseArc,InvertArc,FillArc,FillCArc
|
|
IMPORT SETFILLPAT
|
|
;-----------------------------------------------------
|
|
;
|
|
; PROCEDURE FrameArc(* r: Rect; startAngle,arcAngle: INTEGER *);
|
|
;
|
|
MOVEQ #FRAME,D0 ;VERB = FRAME
|
|
BRA.S CallArc ;SHARE COMMON CODE
|
|
|
|
|
|
;-----------------------------------------------------
|
|
;
|
|
; PROCEDURE PaintArc(* r: Rect; startAngle,arcAngle: INTEGER *);
|
|
;
|
|
PaintArc
|
|
MOVEQ #PAINT,D0 ;VERB = PAINT
|
|
BRA.S CallArc ;SHARE COMMON CODE
|
|
|
|
|
|
;--------------------------------------------------------
|
|
;
|
|
; PROCEDURE EraseArc(* r: Rect; startAngle,arcAngle: INTEGER *);
|
|
;
|
|
EraseArc
|
|
MOVEQ #ERASE,D0 ;VERB = ERASE
|
|
BRA.S CallArc ;SHARE COMMON CODE
|
|
|
|
|
|
;--------------------------------------------------------
|
|
;
|
|
; PROCEDURE InvertArc(* r: Rect; startAngle,arcAngle: INTEGER *);
|
|
;
|
|
InvertArc
|
|
MOVEQ #INVERT,D0 ;VERB = INVERT
|
|
BRA.S CallArc ;SHARE COMMON CODE
|
|
|
|
|
|
;--------------------------------------------------------
|
|
;
|
|
; PROCEDURE FillArc(* r: Rect; startAngle,arcAngle: INTEGER; pat: Pattern *);
|
|
;
|
|
FillArc MOVEQ #0,D0 ;FLAG = FillArc
|
|
BRA.S SHARE ; => USE COMMON CODE
|
|
|
|
|
|
;----------------------------------------------------------
|
|
;
|
|
; PROCEDURE FillCArc(r: Rect; startAngle,arcAngle: INTEGER; PPH: PixPatHandle);
|
|
;
|
|
FillCArc
|
|
MOVEQ #1,D0 ;FLAG = FillCArc
|
|
|
|
SHARE MOVE.L (SP)+,A0 ;POP RETURN ADDR
|
|
MOVE.L (SP)+,A1 ;POP ADDR OF PATTERN
|
|
MOVE.L A0,-(SP) ;PUT RETURN ADDR BACK
|
|
MOVE.L A1,-(SP) ;PUT ADDR OF PATTERN BACK
|
|
_SETFILLPAT ;FILLPAT := PAT
|
|
MOVEQ #FILL,D0 ;VERB = FILL
|
|
; BRA.S CallArc ;SHARE COMMON CODE
|
|
|
|
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE CallArc(r: Rect; startAngle,arcAngle: INTEGER);
|
|
;
|
|
; code shared by FrameArc, PaintArc, EraseArc, InvertArc, and FillArc.
|
|
; enter with verb in D0.
|
|
;
|
|
CallArc MOVE.L (SP)+,A0 ;POP RETURN ADDR
|
|
MOVE.L (SP)+,D1 ;POP BOTH ANGLES
|
|
MOVE.L (SP)+,A1 ;POP ADDR OF RECT
|
|
MOVE.B D0,-(SP) ;PUSH VERB
|
|
MOVE.L A1,-(SP) ;PUSH ADDR OF RECT
|
|
MOVE.L D1,-(SP) ;PUSH BOTH ANGLES
|
|
MOVE.L A0,-(SP) ;PUSH RETURN ADDR
|
|
MOVE.L GRAFGLOBALS(A5),A0 ;POINT TO LISAGRAF GLOBALS
|
|
MOVE.L THEPORT(A0),A0 ;GET CURRENT GRAFPORT
|
|
MOVE.L GRAFPROCS(A0),D0 ;IS GRAFPROCS NIL ?
|
|
MOVE.L JSTDARC,A0 ;get piece of trap table
|
|
BEQ.S USESTD ;YES, USE STD PROC
|
|
MOVE.L D0,A0
|
|
MOVE.L ARCPROC(A0),A0 ;NO, GET PROC PTR
|
|
USESTD JMP (A0) ;GO TO IT
|
|
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|