mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-27 10:29:32 +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.
119 lines
3.7 KiB
Plaintext
119 lines
3.7 KiB
Plaintext
;EASE$$$ READ ONLY COPY of file ÒPUTRGN.aÓ
|
|
;¥1.4 BAL 05/29/1989 Blasting in 32-Bit QuickDraw version 1.0 Final
|
|
; File PutRgn.a
|
|
;
|
|
; Copyright Apple Computer, Inc. 1981-1986
|
|
; All Rights Reserved
|
|
|
|
|
|
BLANKS ON
|
|
STRING ASIS
|
|
|
|
|
|
;------------------------------------------------
|
|
;
|
|
; MODIFICATION HISTORY
|
|
;
|
|
; 26Sep86 EHB Fixed putRgn of rectangular region bug
|
|
;
|
|
PUTRGN PROC EXPORT
|
|
IMPORT SetHSize
|
|
;----------------------------------------------------------------
|
|
;
|
|
; PROCEDURE PutRgn(Rgn: RgnHandle; bufHandle: Handle; VAR index,size: INTEGER);
|
|
;
|
|
; Expands a region out to an array of inversion points.
|
|
;
|
|
|
|
|
|
;------------------------------------------------
|
|
;
|
|
; A6 OFFSETS OF PARAMETERS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 16 ;TOTAL SIZE OF PARAMETERS
|
|
RGNHANDLE EQU PARAMSIZE+8-4 ;LONG,RGNHANDLE
|
|
BUFHANDLE EQU RGNHANDLE-4 ;LONG, HANDLE
|
|
INDEX EQU BUFHANDLE-4 ;LONG, VAR
|
|
SIZE EQU INDEX-4 ;LONG, VAR
|
|
|
|
|
|
LINK A6,#0 ;NO LOCAL VARS
|
|
MOVEM.L D7/A2-A4,-(SP) ;SAVE REGS
|
|
|
|
;-------------------------------------------------------
|
|
;
|
|
; EXPAND BUF TO FIT WORST CASE BYTESNEEDED = RGNSIZE * 2
|
|
;
|
|
MOVE.L BUFHANDLE(A6),A4 ;GET BUFHANDLE
|
|
MOVE.L RGNHANDLE(A6),A3 ;GET RGNHANDLE
|
|
MOVE.L INDEX(A6),A2 ;POINT TO CURRENT INDEX
|
|
MOVE.L (A3),A0 ;DE-REFERENCE RGN
|
|
moveq #0,d7 ;clearout high end <BAL 28Apr89>
|
|
MOVE (A0),D7 ;GET RGNSIZE
|
|
ADD.l D7,D7 ;TIMES 2 <BAL 28Apr89>
|
|
moveq #0,d0 ;clearout high end <BAL 28Apr89>
|
|
move (A2),d0 ;get current index as a long <BAL 28Apr89>
|
|
ADD.l d0,D7 ;ADD CURRENT INDEX <BAL 28Apr89>
|
|
cmp.l #65536-256,d7 ;are we about to overflow? <BAL 28Apr89>
|
|
blt.s @sizeOK ;no, don't worry; be happy <BAL 28Apr89>
|
|
move #-147,qdErr ;indicate rgnTooBigErr <BAL 28Apr89>
|
|
bra GOHOME ;skip this line <BAL 28Apr89>
|
|
|
|
@sizeOK MOVE.L SIZE(A6),A1 ;POINT TO SIZE
|
|
CMP (A1),D7 ;IS REQUIRED > CURRENT SIZE ?
|
|
bls.s NOGROW ;NO, CONTINUE <BAL 28Apr89>
|
|
|
|
ADD #256,D7 ;GROW IN CHUNKS
|
|
MOVE D7,(A1) ;UPDATE CURRENT SIZE
|
|
MOVE.L A4,-(SP) ;PUSH BUFHANDLE
|
|
MOVE D7,-(SP) ;PUSH NEW SIZE
|
|
bsr.l SetHSize ;MAKE ROOM IN BUF
|
|
MOVE.L (A3),A0 ;RE-DEREFERENCE RGNHANDLE
|
|
MOVE.L INDEX(A6),A2 ;GET ADDR OF INDEX AGAIN
|
|
|
|
NOGROW MOVE.L (A4),A1 ;DE-REFERENCE BUFHANDLE
|
|
moveq #0,d0 ;clear out high end <BAL 28Apr89>
|
|
move.w (a2),d0 ;get index as a long <BAL 28Apr89>
|
|
add.l d0,A1 ;ADD INDEX TO BUFPTR <BAL 28Apr89>
|
|
CMP #10,RGNSIZE(A0) ;IS REGION RECTANGULAR ?
|
|
BNE.S NOTRECT ;NO, CONTINUE
|
|
|
|
; PUT RECT AS INVERSION POINTS: TOPLEFT, TOPRIGHT, BOTLEFT, BOTRIGHT
|
|
|
|
ADD #2,A0 ;YES, POINT TO BBOX TOPLEFT
|
|
MOVE.L (A0),(A1)+ ;COPY TOPLEFT <EHB 26Sep86>
|
|
MOVE (A0)+,(A1)+ ;COPY TOP <EHB 26Sep86>
|
|
MOVE (A0)+,D0 ;GET LEFT <EHB 26Sep86>
|
|
MOVE.L (A0),D1 ;GET BOTRIGHT <EHB 26Sep86>
|
|
MOVE D1,(A1)+ ;COPY RIGHT <EHB 26Sep86>
|
|
MOVE (A0),(A1)+ ;COPY BOT <EHB 26Sep86>
|
|
MOVE D0,(A1)+ ;COPY LEFT <EHB 26Sep86>
|
|
MOVE.L D1,(A1)+ ;COPY BOTRIGHT <EHB 26Sep86>
|
|
BRA.S DONE ;UPDATE INDEX AND QUIT
|
|
|
|
NOTRECT LEA RGNDATA(A0),A0 ;POINT TO TOP VERT IN RGN
|
|
NXTVERT MOVE.L (A0)+,D7 ;GET VERT AND HORIZ COORDS
|
|
NXTHOR MOVE.L D7,(A1)+ ;PUT LEFT POINT TO DST
|
|
MOVE (A0)+,D7 ;GET HORIZ COORD
|
|
MOVE.L D7,(A1)+ ;PUT RIGHT POINT TO DST
|
|
MOVE (A0)+,D7 ;GET NEXT HORIZ COORD
|
|
CMP #32767,D7 ;END OF SCAN FLAG ?
|
|
BNE NXTHOR ;NO, GO FOR MORE
|
|
CMP #32767,(A0) ;END OF REGION ?
|
|
BNE NXTVERT ;NO, LOOP FOR MORE
|
|
|
|
DONE SUB.L (A4),A1 ;CALC DSTPTR - DSTSTART
|
|
MOVE A1,(A2) ;UPDATE VAR INDEX
|
|
GOHOME MOVEM.L (SP)+,D7/A2-A4 ;RESTORE REGISTERS
|
|
UNLINK PARAMSIZE,'PUTRGN '
|
|
|
|
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|