mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2025-01-14 21:29:53 +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.
2309 lines
72 KiB
Plaintext
2309 lines
72 KiB
Plaintext
;
|
|
; File: AllB&WQDPatch.a
|
|
;
|
|
; Contains: This linked patch gets loaded on all B&W machines.
|
|
;
|
|
; Written by: Konstanin Othmer
|
|
;
|
|
; Copyright: © 1990-1991 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <35> 6/4/92 KON For CubeE - Fix OpenCPicture on Classic machines (bug #1028642).
|
|
; Look at the picSize rather than the picIndex for aligning for
|
|
; PICT2. This was causing problems when the stdPutpic bottleneck
|
|
; proc is replaced by a 3rd party. These bottnecks must update
|
|
; picsize but don't update picIndex.
|
|
; <34> 2/3/92 KON Fix problem with GetForeColor trashing memory on classicQD
|
|
; machines.
|
|
; <33> 8/30/91 DTY Define onMac to keep GrafTypes.m.a happy. (ItÕs not a feature
|
|
; in BBSStartup any more which is why itÕs defined here.) Also
|
|
; define hasCQD to be false. (This is a patchfile for black and
|
|
; white machines, after allÉ)
|
|
; <32> 8/23/91 JSM Remove benign redefinition of TRUE and FALSE, which are now
|
|
; defined by the build script.
|
|
; <31> 7/10/91 JSM Remove obsolete SysVers conditionals, remove code that is never
|
|
; compiled.
|
|
; <30> 3/26/91 KON csd, WRKSHT#RBN-QD-017: Plus patch to stdRgn calls putpicOp
|
|
; which puts out a word if it's an OpenCPicture. The high part of
|
|
; D0 is garbage, so this causes problems. With this change
|
|
; putPicByte is called instead.
|
|
; <29> 3/20/91 KON gbm, WRKSHT#SAH-QD-057: Rectangle size in picture header in
|
|
; OpenCPicture was not calculated correctly.
|
|
; <28> 3/13/91 JT Added the glyph state opcode support to picture drawing drawing
|
|
; under old QuickDraw. This opcode records the state of the Font
|
|
; Manager and TrueType so text will be drawn the same on picture
|
|
; playback as it was during picture recording. Code checked by KON
|
|
; and BAL. BRC numbers 82651 and 79185. Worksheet number KON-022.
|
|
; <27> 2/28/91 KON csd: BRC# 83982 Patch StdRgn to patch PutRgn to handle
|
|
; rectangular regions correctly. This was causing the Finder to
|
|
; crash on the Plus.
|
|
; <26> 2/12/91 KON SMC: BRC# unknown: Close picture opcode ($FF) is not padded to
|
|
; even boundary when creating version 2 pictures on B&W machines.
|
|
; <25> 2/4/91 KON smc: BRC# 81599: Fix calcmask and seedfill so it always scans
|
|
; both up and down.
|
|
; <24> 2/1/91 KON smc: BRC# 81818, Fix round ovals saved in PICT2 for SE, Plus,
|
|
; Portable.
|
|
; <23> 1/25/91 KON DDG: BRC# 81516, When saving to a picture, StdBits assumes that
|
|
; the result will pack into 256 bytes or less. This is not a valid
|
|
; assumption, and for large BitMaps can cause the stack to
|
|
; overflow.
|
|
; <22> 1/16/91 KON Comefrom patch on FixRatio to fix problem with drawing arcs.
|
|
; [smc]
|
|
; <21> 12/14/90 csd & gbm: Change the jShowCursor patch to call the old version
|
|
; instead of jumping into ROM. This allows people who patch
|
|
; jShowCursor, like the Outbound, to work.
|
|
; <20> 11/25/90 gbm (with sab) Fix ROMBind addresses for PutPicLong and PutPicByte
|
|
; on Portable
|
|
; <19> 11/15/90 JSM <bbm> Move _OpenCPort patch from <5> to QuickDrawPatches.a,
|
|
; since it isn't installed on any B&W machines.
|
|
; <18> 11/8/90 KON Stretch chokes when horizonally scaling bitmaps with rowbytes >=
|
|
; $100. The problem is ratiocase assumes reg. D0 is cleared
|
|
; (except the low byte) which it ain't. [CEL]
|
|
; <17> 9/23/90 KON Patch stdbits and stdpoly on portable so Pict2 creation via
|
|
; OpenCpicture works right.
|
|
; <16> 9/21/90 KON Move StdBits patch from PatchSEROM.a, PatchPortableROM.a, and
|
|
; PatchPlusROM.a to this file and make it a linked patch. Added
|
|
; openCpicture stuff for stdbits and stdpoly.
|
|
; <15> 9/14/90 KON Added QDError, RGBForeColor, RGBBackColor, GetForeColor,
|
|
; GetBackColor calls to classic machines.
|
|
; <14> 8/24/90 PKE (per JT) Use new names picQdChExtra and picQdRunSlop instead of
|
|
; picSMgrChar and picSMgrSlop.
|
|
; <13> 8/16/90 dba use VisRgnChanged on II and IIci as well
|
|
; <12> 8/15/90 dba improve the implementation of VisRgnChanged
|
|
; <11> 8/10/90 gbm fix reference to JStdPutPic on the Plus
|
|
; <10> 7/16/90 dba fix ROM binds ROMStdLineRtn, ROMStdLineNotPic, and
|
|
; ROMShowCrsrEntry1 which were all wrong on the Plus
|
|
; <9> 6/27/90 KON Always clear the script manager state variables in the picture
|
|
; save record.
|
|
; <8> 6/27/90 KON Always clear the script manager state information in a picture
|
|
; save record.
|
|
; <7> 6/26/90 KON Fix show cursor so obscure, hide, show leaves cursor obscured.
|
|
; <6> 6/20/90 KON Add OpenCPicture call.
|
|
; <5> 5/30/90 JT Linked patches for OpenPort, OpenCPort, InitPort, SetPort, Line,
|
|
; LineTo, Move, and MoveTo all reset the horizontal pen fraction
|
|
; and fall into the original code.
|
|
; <4> 5/27/90 JT Clear the line layout variables in the picture state record.
|
|
; <3> 5/3/90 JT Set the SCRIPT_CHAR_EXTRA flag according to the system-wide
|
|
; version number and include the Script Manager equates so the
|
|
; various patch files will compile.
|
|
; <2> 4/4/90 KON Make it into a linked patch.
|
|
; 3/26/90 KON Created file, it's ptch 44.
|
|
;
|
|
|
|
|
|
INITFILE EQU 0 ;set to 1 for standalone install, 0 for ptchInstall
|
|
withFonts EQU 1 ;set to 1 to build with font name/ID binding
|
|
wholeErrors EQU 1
|
|
|
|
IF (&TYPE('SCRIPT_CHAR_EXTRA') = 'UNDEFINED') THEN ; <5> CEL
|
|
IF forROM THEN
|
|
SCRIPT_CHAR_EXTRA EQU 0
|
|
ELSE
|
|
SCRIPT_CHAR_EXTRA EQU 1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (&TYPE('hasPenFraction') = 'UNDEFINED') THEN
|
|
IF forROM THEN
|
|
hasPenFraction EQU 0
|
|
ELSE
|
|
hasPenFraction EQU 1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (&TYPE('hasGlyphState') = 'UNDEFINED') THEN
|
|
IF forROM THEN
|
|
hasGlyphState EQU 0
|
|
ELSE
|
|
hasGlyphState EQU 1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
if (&type('onMac') = 'UNDEFINED') then
|
|
if forROM then
|
|
onMac: equ 0
|
|
else
|
|
onMac: equ 1 ; Define as true for non-ROM because this is the way it used to be in
|
|
endif ; the System featurelist in BBSStartup.
|
|
endif
|
|
|
|
if (&type('hasCQD') = 'UNDEFINED') then
|
|
hasCQD: equ 0
|
|
endif
|
|
|
|
INCLUDE 'SysErr.a'
|
|
INCLUDE 'Traps.a'
|
|
INCLUDE 'QuickEqu.a'
|
|
INCLUDE 'SysEqu.a'
|
|
INCLUDE 'GrafTypes.m.a'
|
|
INCLUDE 'LinkedPatchMacros.a'
|
|
INCLUDE 'FixMath.a'
|
|
INCLUDE 'ToolEqu.a'
|
|
INCLUDE 'fontPrivate.a'
|
|
|
|
; Here's a couple of vectors used in a patch below
|
|
;
|
|
PStdPutPic_SE_Portable EQU $0E00+(4*$F0)
|
|
PStdPutPic_Plus EQU $0C00+(4*$F0)
|
|
|
|
;NOTE: $400000 is stripped from the actual rom address on SE and Plus and $900000 from Esprit
|
|
DPEntry ROMBind (Plus, $DAEC), (SE, $00018268), (Portable, $00025664)
|
|
GetVers ROMBind (Plus, $DDA2), (SE, $0001852E), (Portable, $000259C4)
|
|
;DPEntry+$FC
|
|
DPQuit ROMBind (Plus, $DBE8), (SE, $00018364), (Portable, $00025782)
|
|
;DPEntry+$120
|
|
DPGoHome ROMBind (Plus, $DC0C), (SE, $00018388), (Portable, $000257A6)
|
|
;GetVers+$24
|
|
OvalEnd ROMBind (Plus, $DDC6), (SE, $00018552), (Portable, $000259F0)
|
|
;GetVers+$44
|
|
XOrigin ROMBind (Plus, $DDE6), (SE, $00018572), (Portable, $00025A0E)
|
|
;GetVers+$C6
|
|
RomLNOK ROMBind (Plus, $DE68), (SE, $000185F4), (Portable, $00025B26)
|
|
;GetVers+$13C
|
|
RomTextOP ROMBind (Plus, $DEDE), (SE, $0001866A), (Portable, $00025B9C)
|
|
;GetVers+$180
|
|
RomRectOP ROMBind (Plus, $DF22), (SE, $000186AE), (Portable, $00025BEE)
|
|
;GetVers+$19A
|
|
RomRRectOP ROMBind (Plus, $DF3C), (SE, $000186C8), (Portable, $00025C16)
|
|
;GetVers+$1BC
|
|
RomOvalOP ROMBind (Plus, $DF5E), (SE, $000186EA), (Portable, $00025C46)
|
|
;GetVers+$1E0
|
|
RomArcOP ROMBind (Plus, $DF82), (SE, $0001870E), (Portable, $00025C78)
|
|
;GetVers+$1FA
|
|
RomPolyOP ROMBind (Plus, $DF9C), (SE, $00018728), (Portable, $00025CA6)
|
|
;GetVers+$22C
|
|
RomRgnOP ROMBind (Plus, $DFCE), (SE, $0001875A), (Portable, $00025CEA)
|
|
;GetVers+$326
|
|
RomBits ROMBind (Plus, $E0C8), (SE, $00018854), (Portable, $00025E58)
|
|
;GetVers+$33A
|
|
RomCommentOP ROMBind (Plus, $E0DC), (SE, $00018868), (Portable, $00025EEE)
|
|
;GetVers+$35E
|
|
RomLongCom ROMBind (Plus, $E100), (SE, $0001888C), (Portable, $00025F12)
|
|
;GetVers+$458
|
|
RomGetRect ROMBind (Plus, $E1FA), (SE, $00018986), (Portable, $00025FC8)
|
|
;GetVers+$4BC
|
|
RomKill1 ROMBind (Plus, $E25E), (SE, $000189EA), (Portable, $00026052)
|
|
;GetVers+$4C4
|
|
RomAbort ROMBind (Plus, $E266), (SE, $000189F2), (Portable, $0002605A)
|
|
;GetVers+$4CC
|
|
RomDone ROMBind (Plus, $E26E), (SE, $000189FA), (Portable, $00026062)
|
|
;DPEntry+$1EC
|
|
RomXClip ROMBind (Plus, $DCD8), (SE, $00018454), (Portable, $000258E0)
|
|
;DPEntry+$1F8
|
|
RomXClip2 ROMBind (Plus, $DCE4), (SE, $00018460), (Portable, $000258EC)
|
|
;DPEntry+$272
|
|
RomXPnSize ROMBind (Plus, $DD5E), (SE, $000184DA), (Portable, $00025974)
|
|
|
|
ROMPutPicData ROMBind (SE, $18A1A), (Plus, $0E28E), \
|
|
(Portable,$263FA) ;Trap=KillPicture
|
|
|
|
ROMDPutPicByte ROMBind (SE, $18A30), (Plus, $0E2A4), \
|
|
(Portable,$26410) ;Trap=KillPicture
|
|
|
|
|
|
ROMPutPicRgn ROMBind (Plus, $E32C), (SE, $00018AB8), (Portable, $00026498)
|
|
ROMCopyRgn ROMBind (Plus, $BDFE), (SE, $0001656E), (Portable, $00023654)
|
|
ROMEqualRgn ROMBind (Plus, $BFA0), (SE, $00016710), (Portable, $000237F6)
|
|
|
|
|
|
;xxx Fix Me: portable needs putPicByte address
|
|
|
|
ROMPutPicByte ROMBind (SE, $18A36), (Plus, $0E2AA), \
|
|
(Portable,$26416) ;Trap=KillPicture
|
|
|
|
ROMPutPicWord ROMBind (SE, $18A48), (Plus, $0E2BC), \
|
|
(Portable,$26428) ;Trap=KillPicture
|
|
|
|
ROMPutPicLong ROMBind (SE, $18A5A), (Plus, $0E2CE), \
|
|
(Portable,$2643A) ;Trap=KillPicture
|
|
|
|
;Open Picture + $34
|
|
OpenPictptchEntry ROMBind (Plus, $DA20), (SE, $0001819C), (Portable, $00025598)
|
|
;Open Picture + $B2
|
|
OpenPictDone ROMBind (Plus, $DA9E), (SE, $0001821A), (Portable, $00025616)
|
|
|
|
;Close Picture + $E
|
|
ClosePictptchEntry ROMBind (Plus, $DAB6), (SE, $00018232), (Portable, $0002562e)
|
|
ClosePictptchEntryNew ROMBind (Plus, $DABC), (SE, $00018238), (Portable, $00025634)
|
|
;Close Picture + $36
|
|
ClosePictGoHome ROMBind (Plus, $DADE), (SE, $0001825A), (Portable, $00025656)
|
|
|
|
; put data to picture routines
|
|
|
|
|
|
ROMStdBitsStart2 ROMBind (Plus, $CA06), (SE, $17182), (Portable, $24510)
|
|
ROMStdBitsOK ROMBind (Plus, $CA0A), (SE, $17186), (Portable, $24514)
|
|
ROMStdBitsNotPic ROMBind (Plus, $CA0C), (SE, $17188), (Portable, $24516)
|
|
|
|
|
|
|
|
ROMStdLineRtn ROMBind (Plus, $967C), (SE, $13DEC), (Portable, $20832)
|
|
ROMStdLineNotPic ROMBind (Plus, $96E8), (SE, $13E58), (Portable, $2089E)
|
|
|
|
ROMStdRectRtn ROMBind (Plus, $9E96), (SE, $14606), (Portable, $2104C)
|
|
ROMStdRectNotPic ROMBind (Plus, $9EA4), (SE, $14614), (Portable, $2105A)
|
|
|
|
ROMStdRRectRtn ROMBind (Plus, $ACA8), (SE, $15418), (Portable, $21E5E)
|
|
ROMStdRRectNotPic ROMBind (Plus, $ACB6), (SE, $15426), (Portable, $21E6C)
|
|
|
|
ROMStdOvalRtn ROMBind (Plus, $AD64), (SE, $154D4), (Portable, $21F1A)
|
|
ROMStdOvalNotPic ROMBind (Plus, $AD72), (SE, $154E2), (Portable, $21F28)
|
|
|
|
ROMStdArcRtn ROMBind (Plus, $AF70), (SE, $156E0), (Portable, $22126)
|
|
ROMStdArcNotPic ROMBind (Plus, $AF8E), (SE, $156FE), (Portable, $22144)
|
|
|
|
ROMStdRgnRtn ROMBind (Plus, $BC0E), (SE, $1637E), (Portable, $23464)
|
|
ROMStdRgnNotPic ROMBind (Plus, $BC20), (SE, $16390), (Portable, $23476)
|
|
|
|
ROMStdComment ROMBind (Plus, $D8D0), (SE, $1804C), (Portable, $2544E)
|
|
|
|
ROMShowCrsr ROMBind (Plus, $1CE6), (SE, $18E18), (Portable, $267F8)
|
|
|
|
ROMStdPolyRtn ROMBind (Portable, $22B50)
|
|
ROMStdPolyNotPic ROMBind (Portable, $22B60)
|
|
PortableStdBitsNotPict ROMBind (Portable, $24516)
|
|
PortableStdBitsRtn ROMBind (Portable, $243E8)
|
|
|
|
;
|
|
; Binds for CalcMask and SeedFill
|
|
;
|
|
ROMGoHome ROMBind (Plus, $CE7C), (SE, $175F8), (Portable, $24986)
|
|
ROMSeedFill ROMBind (Plus, $CDBC), (SE, $17538), (Portable, $248C6)
|
|
|
|
;
|
|
; the following Plus and SE binds were taken from QuickPolysClassicPatch.a
|
|
; and are used by that file only
|
|
;
|
|
|
|
ROMShowCursor ROMBIND (SE, $12A2E), (Plus, $82F8)
|
|
ROMShieldCursor ROMBIND (SE, $12A34), (Plus, $82FE)
|
|
ROMMaskTab ROMBIND (SE, $12B6E), (Plus, $8438)
|
|
ROMPatExpand ROMBIND (SE, $12BCE), (Plus, $8498)
|
|
ROMColorMap ROMBIND (SE, $12C96), (Plus, $8560)
|
|
ROMXorSlab ROMBIND (SE, $12D78), (Plus, $8642)
|
|
ROMDrawSlab ROMBIND (SE, $12DBC), (Plus, $8686)
|
|
ROMSlabMode ROMBIND (SE, $12E4C), (Plus, $8716)
|
|
ROMFastSlabMode ROMBIND (SE, $12EA6), (Plus, $8770)
|
|
ROMPushVerb ROMBIND (SE, $14650), (Plus, $9EE0)
|
|
ROMRSect ROMBIND (SE, $14880), (Plus, $A110)
|
|
ROMSeekMask ROMBIND (SE, $15DC4), (Plus, $B654)
|
|
ROMFrPoly ROMBIND (SE, $162D0), (Plus, $BB60)
|
|
ROMTrimRect ROMBIND (SE, $1692A), (Plus, $C1BA)
|
|
ROMInitRgn ROMBIND (SE, $16A36), (Plus, $C2C6)
|
|
ROMDrawRect ROMBIND (SE, $146C8), (Plus,$9F58)
|
|
;PutPicVerb Equ $418AD6 ;call routine in this file instead
|
|
;ROMPutPicRgn Equ $418AB8 ;already defined
|
|
|
|
;------------------
|
|
; GetPMData trap
|
|
;
|
|
INCLUDE 'GetPMData.a'
|
|
;
|
|
;------------------
|
|
|
|
;
|
|
; ----- Add GWorld calls. This needs to broken off into it's own file --------
|
|
;
|
|
include 'QDOffscreenEqu.a'
|
|
|
|
; put these in some romantic equate file when you are inspired
|
|
|
|
macro
|
|
_NewHandleCommaTemp
|
|
import NewHandleCommaTemp
|
|
jsr NewHandleCommaTemp
|
|
endm
|
|
|
|
macro
|
|
rtd_a0 ¶ms
|
|
if &eval(¶ms) = 0 then
|
|
rts
|
|
else
|
|
if &setting('MACHINE') <> 'MC68000' then
|
|
rtd #¶ms
|
|
else
|
|
if &eval(¶ms) = 4 then
|
|
move.l (sp)+,(sp)
|
|
rts
|
|
elseif &eval(¶ms) <= 8 then
|
|
move.l (sp)+,a0
|
|
addq #¶ms,sp
|
|
jmp (a0)
|
|
else
|
|
move.l (sp)+,a0
|
|
lea ¶ms(sp),sp
|
|
jmp (a0)
|
|
endif
|
|
endif
|
|
endif
|
|
endm
|
|
|
|
INCLUDE 'ClassicGWorld.a'
|
|
;
|
|
; --------------- End of ClassicGWorld stuff -----------------
|
|
;
|
|
;=========================================================================================
|
|
;=========================================================================================
|
|
;
|
|
; ComeFrom patch on FixRatio to see if from arc drawing
|
|
;
|
|
;=========================================================================================
|
|
;=========================================================================================
|
|
|
|
FromDrawArc ROMBind (Plus, $B17E), (SE, $158EE), (Portable, $22334)
|
|
|
|
newFixRatio ComeFromPatchProc _FixRatio, FromDrawArc, (Plus,SE,Portable)
|
|
IMPORT FromDrawArc
|
|
|
|
;------------------------------------------------
|
|
;
|
|
; A6 OFFSETS OF PARAMETERS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 20 ;TOTAL SIZE OF PARAMETERS
|
|
DSTRECT EQU PARAMSIZE+8-4 ;ADDR OF RECT
|
|
HOLLOW EQU DSTRECT-2 ;BOOLEAN
|
|
OVALWIDTH EQU HOLLOW-2 ;INTEGER
|
|
OVALHEIGHT EQU OVALWIDTH-2 ;INTEGER
|
|
MODE EQU OVALHEIGHT-2 ;INTEGER
|
|
PAT EQU MODE-4 ;LONG, ADDR OF PATTERN
|
|
STARTANGLE EQU PAT-2 ;INTEGER
|
|
ARCANGLE EQU STARTANGLE-2 ;INTEGER
|
|
|
|
;------------------------------------------------------
|
|
;
|
|
; OFFSETS IN AN OVAL STATE RECORD:
|
|
;
|
|
OVALTOP EQU 0 ;INTEGER
|
|
OVALBOT EQU OVALTOP+2 ;INTEGER
|
|
OVALY EQU OVALBOT+2 ;INTEGER
|
|
RSQYSQ EQU OVALY+2 ;LONGINT
|
|
SQUARE EQU RSQYSQ+4 ;64 BIT LONGFIX
|
|
ODDNUM EQU SQUARE+8 ;64 BIT LONGFIX
|
|
ODDBUMP EQU ODDNUM+8 ;64 BIT LONGFIX
|
|
LEFTEDGE EQU ODDBUMP+8 ;32 BIT FIXED POINT
|
|
RIGHTEDGE EQU LEFTEDGE+4 ;32 BIT FIXED POINT
|
|
ONEHALF EQU RIGHTEDGE+4 ;32 BIT FIXED POINT
|
|
OVALSIZE EQU ONEHALF+4 ;SIZE OF AN OVALREC
|
|
|
|
;-------------------------------------------------
|
|
;
|
|
; A6 OFFSETS OF LOCAL VARIABLES AFTER LINK:
|
|
;
|
|
EXPAT EQU -64 ;16 LONGS
|
|
MINRECT EQU EXPAT-8 ;RECT
|
|
STATEA EQU MINRECT-RGNREC ;RGN STATE RECORD
|
|
STATEB EQU STATEA-RGNREC ;RGN STATE RECORD
|
|
STATEC EQU STATEB-RGNREC ;RGN STATE RECORD
|
|
SAVESTK EQU STATEC-4 ;LONG
|
|
RECTFLAG EQU SAVESTK-2 ;WORD
|
|
MASKBUF EQU RECTFLAG-4 ;LONG
|
|
BUFLEFT EQU MASKBUF-2 ;WORD
|
|
BUFSIZE EQU BUFLEFT-2 ;WORD
|
|
MODECASE EQU BUFSIZE-4 ;LONG
|
|
DSTLEFT EQU MODECASE-4 ;LONG
|
|
SAVEA5 EQU DSTLEFT-4 ;LONG
|
|
PORT EQU SAVEA5-4 ;LONG
|
|
FASTFLAG EQU PORT-2 ;BYTE
|
|
EXTRARECT EQU FASTFLAG-8 ;RECT
|
|
INNEROVAL EQU EXTRARECT-OVALSIZE ;OVAL RECORD
|
|
OUTEROVAL EQU INNEROVAL-OVALSIZE ;OVAL RECORD
|
|
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
|
|
PATINDEX EQU INNERRIGHT-2 ;WORD
|
|
VARSIZE EQU PATINDEX ;SIZE OF LOCAL VARIABLES
|
|
|
|
|
|
MOVE.L DSTRECT(A6),A0 ;POINT TO DSTRECT
|
|
MOVE TOP(A0),A1
|
|
ADD BOTTOM(A0),A1
|
|
MOVE.L A1,D0
|
|
ASR.L #1,D0
|
|
MOVE D0,MIDVERT(A6) ;MID VERT := (DSTBOT+DSTTOP)/2
|
|
|
|
MOVE LEFT(A0),A1
|
|
ADD RIGHT(A0),A1
|
|
MOVE.L A1,D0
|
|
ASR.L #1,D0
|
|
MOVE D0,MIDHORIZ(A6) ;MID HORIZ := (DSTLEFT+DSTRIGHT)/2
|
|
|
|
jmpOld
|
|
|
|
ENDPROC
|
|
|
|
;---------------- This stuff taken from PatchSEROM and PatchPlusROM ---------
|
|
;___________________________________________________________________________
|
|
; Patch PMA361 18Jan88 AWC StdPoly from QuickPolysClassicPatch.a
|
|
;
|
|
; Fix File Date Patch# Fix Routine(s) Routine(s) Fixed
|
|
;AppleSystemPatch PatchSEROM.a 18Jan88 #PMA361 (StdPoly) (StdPoly)
|
|
;
|
|
; This patch speeds up polygons ENORMOUSLY (well, maybe just a fair bit).
|
|
; But wait -- there's more! You also get this non-explosive way of drawing polygons!
|
|
|
|
PatchPMA361 PROC EXPORT
|
|
INCLUDE 'QuickPolysClassicPatch.a'
|
|
|
|
;---------------- End of stuff taken from PatchSEROM and PatchPlusROM -------
|
|
|
|
VisRgnChanged PROC EXPORT ;<26MAR90 KON>
|
|
;-----------------------------------------------------------
|
|
;
|
|
; Procedure VisRgnChanged(thePort: GrafPort);
|
|
;
|
|
; This call will be needed for video windows so the mask plane
|
|
; for touchstone can be updated. Non-video QD simply returns.
|
|
;
|
|
rts
|
|
ENDPROC
|
|
|
|
StretchBits PROC EXPORT
|
|
IMPORT RgnBlt,RSect,ShieldCursor,ShowCursor
|
|
IMPORT InitRgn,SeekRgn,SetupStretch,ColorMap,XorSlab
|
|
;--------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StretchBits(srcBits,dstBits: BitMap;
|
|
; srcRect,dstRect: Rect;
|
|
; mode: INTEGER
|
|
; rgnA,rgnB,rgnC: RgnHandle);
|
|
;
|
|
; Transfer a rectangle of bits from srcBits to dstBits,
|
|
; stretching or compressing according to srcRect and dstRect.
|
|
; The transfer is clipped to the intersection of rgnA, rgnB, and rgnC.
|
|
;
|
|
;
|
|
; Restrictions:
|
|
;
|
|
; transfer mode 0..7 only.
|
|
; if numer <> denom, then src and dst bitmaps do not overlap.
|
|
;
|
|
;
|
|
; COPYRIGHT APPLE COMPUTER INC.
|
|
; DESIGNED AND WRITTEN BY BILL ATKINSON
|
|
;
|
|
|
|
|
|
;----------------------------------------------------
|
|
;
|
|
; A6 OFFSETS OF PARAMETERS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 30 ;TOTAL BYTES OF PARAMETERS
|
|
SRCBITS EQU PARAMSIZE+8-4 ;LONG, ADDR OF BITMAP
|
|
DSTBITS EQU SRCBITS-4 ;LONG, ADDR OF BITMAP
|
|
SRCRECT EQU DSTBITS-4 ;LONG, ADDR OF RECT
|
|
DSTRECT EQU SRCRECT-4 ;LONG, ADDR OF RECT
|
|
MODE EQU DSTRECT-2 ;WORD
|
|
RGNA EQU MODE-4 ;RGNHANDLE
|
|
RGNB EQU RGNA-4 ;RGNHANDLE
|
|
RGNC EQU RGNB-4 ;RGNHANDLE
|
|
|
|
|
|
;-------------------------------------------------
|
|
;
|
|
; A6 OFFSETS OF LOCAL VARIABLES AFTER LINK:
|
|
;
|
|
NUMER EQU -4 ;POINT
|
|
DENOM EQU NUMER-4 ;POINT
|
|
VERROR EQU DENOM-4 ;INTEGER
|
|
MINRECT EQU VERROR-8 ;RECT
|
|
SRCBUF EQU MINRECT-4 ;LONG
|
|
DSTBUF EQU SRCBUF-4 ;LONG
|
|
SRCLONGS EQU DSTBUF-2 ;WORD
|
|
DSTLONGS EQU SRCLONGS-2 ;WORD
|
|
STATEA EQU DSTLONGS-RGNREC ;RGN STATE RECORD
|
|
STATEB EQU STATEA-RGNREC ;RGN STATE RECORD
|
|
STATEC EQU STATEB-RGNREC ;RGN STATE RECORD
|
|
SAVESTK EQU STATEC-4 ;LONG
|
|
RECTFLAG EQU SAVESTK-2 ;WORD
|
|
MASKBUF EQU RECTFLAG-4 ;LONG
|
|
BUFLEFT EQU MASKBUF-2 ;WORD
|
|
BUFSIZE EQU BUFLEFT-2 ;WORD
|
|
SRCADDR EQU BUFSIZE-4 ;LONG
|
|
DSTADDR EQU SRCADDR-4 ;LONG
|
|
SRCROW EQU DSTADDR-4 ;LONG
|
|
DSTROW EQU SRCROW-4 ;LONG
|
|
SRCLIMIT EQU DSTROW-4 ;LONG
|
|
VERT EQU SRCLIMIT-2 ;WORD
|
|
MODECASE EQU VERT-4 ;LONG
|
|
PAT EQU MODECASE-4 ;LONG, ADDR OF PAT
|
|
RATIOCASE EQU PAT-4 ;LONG
|
|
HORIZFRACTION EQU RATIOCASE-2 ;WORD
|
|
VARSIZE EQU HORIZFRACTION ;SIZE OF LOCAL VARIABLES
|
|
|
|
LINK A6,#VARSIZE ;ALLOCATE LOCAL VARIABLES
|
|
MOVEM.L D0-D7/A1-A4,-(SP) ;SAVE REGS
|
|
MOVE.L SP,SAVESTK(A6) ;REMEMBER STACK FOR LATER
|
|
|
|
;----------------------------------------------------------------
|
|
;
|
|
; CALC NUMER AND DENOM BASED ON DSTRECT AND SRCRECT.
|
|
; IF NUMER = DENOM THEN JUST CALL RGNBLT.
|
|
;
|
|
MOVE.L DSTRECT(A6),A0 ;POINT TO DSTRECT
|
|
MOVE BOTTOM(A0),D0
|
|
SUB TOP(A0),D0 ;CALC DST HEIGHT
|
|
SWAP D0 ;PUT IN HI WORD
|
|
MOVE RIGHT(A0),D0
|
|
SUB LEFT(A0),D0 ;CALC DST WIDTH
|
|
|
|
MOVE.L SRCRECT(A6),A0 ;POINT TO SRCRECT
|
|
MOVE BOTTOM(A0),D1
|
|
SUB TOP(A0),D1 ;CALC SRC HEIGHT
|
|
SWAP D1 ;PUT IN HI WORD
|
|
MOVE RIGHT(A0),D1
|
|
SUB LEFT(A0),D1 ;CALC SRC WIDTH
|
|
CMP.L D0,D1 ;ARE BOTH RECTS SAME SIZE
|
|
BNE.S STRETCH ;NO, CAN'T USE RGNBLT
|
|
|
|
XRGNBLT
|
|
jmpROM ROMXRGNBLT ;back to the ROM
|
|
; MOVE.L SRCBITS(A6),-(SP) ;PUSH SRCBITS
|
|
; MOVE.L DSTBITS(A6),-(SP) ;PUSH DSTBITS
|
|
; MOVE.L SRCRECT(A6),-(SP) ;PUSH SRCRECT
|
|
; MOVE.L DSTRECT(A6),-(SP) ;PUSH DSTRECT
|
|
; MOVE MODE(A6),-(SP) ;PUSH MODE
|
|
; MOVE.L PAT(A6),-(SP) ;PAT ONLY USED FROM BELOW
|
|
; MOVE.L RGNA(A6),-(SP) ;PUSH RGNA
|
|
; MOVE.L RGNB(A6),-(SP) ;PUSH RGNB
|
|
; MOVE.L RGNC(A6),-(SP) ;PUSH RGNC
|
|
; JSR RGNBLT ;CALL RGNBLT
|
|
; BRA GOHOME ;AND QUIT
|
|
|
|
MiniHeadPatch
|
|
moveq #0,d0 ; <KON 6NOV90>
|
|
MyJumpLoc
|
|
jmp $40800000 ; <KON 6NOV90>
|
|
|
|
STRETCH MOVE.L D0,NUMER(A6) ;NUMER := DST SIZE
|
|
MOVE.L D1,DENOM(A6) ;DENOM := SRC SIZE
|
|
jsrROM ROMSetupStretch ;CALC CASEJUMP AND HORIZ FRACT <KON 6NOV90>
|
|
lea MyJumpLoc+2,a1 ; <KON 6NOV90>
|
|
move.l a0,(a1) ;Save address of routine <KON 6NOV90>
|
|
lea MiniHeadPatch,a0 ;Address of my head patch <KON 6NOV90>
|
|
jmpROM ROMBackToROM ; <KON 6NOV90>
|
|
; MOVE.L A0,RATIOCASE(A6) ;SAVE CASE JUMP FOR LATER
|
|
; MOVE D0,HORIZFRACTION(A6) ;SAVE FRACTION FOR LATER
|
|
|
|
|
|
ROMXRGNBLT ROMBind (Plus, $D09A), (SE, $17816), (Portable, $24BD4)
|
|
ROMSetupStretch ROMBind (Plus, $D52E), (SE, $17CAA), (Portable, $25068)
|
|
ROMBackToROM ROMBind (Plus, $D0D2), (SE, $1784E), (Portable, $24C0C)
|
|
|
|
ENDPROC
|
|
|
|
NewStdGetPic FUNC EXPORT
|
|
;------------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdGetPic(dataPtr: QDPtr; byteCount: INTEGER);
|
|
; Fix File Date Patch# Fix Routine(s) Routine(s) Fixed
|
|
;AppleSystemPatch DrawPicturePatch.a 01Jan1904 #??? (StdGetPic) (StdGetPic)
|
|
;
|
|
;
|
|
|
|
MOVE.L (SP)+,A0 ;POP RETURN ADDR
|
|
MOVE (SP)+,D1 ;POP BYTECOUNT
|
|
MOVE.L (SP)+,A1 ;POP DATAPTR
|
|
MOVE.L A0,-(SP) ;PUSH RETURN ADDR
|
|
MOVE.L GRAFGLOBALS(A5),A0 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L PLAYINDEX(A0),D0 ;GET PLAYINDEX
|
|
MOVE.L PLAYPIC(A0),A0 ;GET PLAY PICHANDLE
|
|
MOVE.L (A0),A0 ;DE-REFERENCE IT
|
|
ADD.L D0,A0 ;ADD PLAYINDEX
|
|
BRA.S START ;GO TO LOOP START
|
|
NXTBYTE MOVE.B (A0)+,(A1)+ ;COPY ONE BYTE
|
|
START DBRA D1,NXTBYTE ;LOOP FOR ALL BYTES
|
|
RTS ;AND RETURN
|
|
|
|
|
|
;----------------------------------
|
|
|
|
|
|
;
|
|
; procedure RGBForeColor (Color : RGBColor);
|
|
; procedure RGBBackColor (Color : RGBColor);
|
|
; procedure GetForeColor (VAR Color : RGBColor);
|
|
; procedure GetBackColor (VAR Color : RGBColor);
|
|
; <14Sept90 KON>
|
|
;
|
|
RGBForeColor PROC EXPORT
|
|
EXPORT RGBBackColor
|
|
IMPORT RGB2OLD
|
|
|
|
MOVEQ #FGCOLOR,D0 ; get offset to index field
|
|
|
|
SHARE MOVE.L 4(SP),A1 ; point at the RGB color
|
|
MOVE.L GRAFGLOBALS(A5),A0 ; get the QuickDraw globals pointer
|
|
MOVE.L THEPORT(A0),A0 ; point at the port
|
|
PEA 0(A0,D0) ; save pointer to the index field
|
|
JSR RGB2OLD ; else convert RGB to old color
|
|
|
|
DONE MOVE.L (SP)+,A0 ; get pointer to index field
|
|
MOVE.L D0,(A0) ; and set the index field
|
|
RTD_a0 4 ; all done
|
|
|
|
;
|
|
; procedure RGBBackColor (Color : RGBColor);
|
|
;
|
|
; This routine takes an RGB triple and sets the current Graf- or CGrafPort
|
|
; fields so that drawing will take place with the best match of the
|
|
; requested color, using the current GDevice's color matching rules. The
|
|
; appropriate fields are set depending on portType.
|
|
;
|
|
|
|
RGBBackColor
|
|
|
|
MOVEQ #BKCOLOR,D0 ; get offset to the index field
|
|
BRA.S SHARE ; => and use common code
|
|
ENDPROC
|
|
|
|
;
|
|
; PROCEDURE GetForeColor (VAR Color: RGBColor);
|
|
;
|
|
; Return the RGB components of the current foreground color
|
|
; Works for old and new ports.
|
|
|
|
|
|
GetForeColor PROC EXPORT
|
|
EXPORT GetBackColor
|
|
|
|
MOVEQ #FGCOLOR,D0 ; get offset to the index field
|
|
MOVEQ #RGBFgColor,D1 ; get offset to RGB field
|
|
|
|
SHARE MOVE.L 4(SP),A1 ; point at the RGB color
|
|
MOVE.L GRAFGLOBALS(A5),A0 ; get the QuickDraw globals pointer
|
|
MOVE.L THEPORT(A0),A0 ; point at the port
|
|
; USE CMYB BITS IN COLOR TO DERIVE PROPER RGB COMPONENTS
|
|
|
|
MOVE.L (A0,D0),D0 ; get planar color from port
|
|
LSR #1,D0 ; CHECK FOR WHITE (I CMYB rgbw)
|
|
BCS.S @BLACK ; =>NOT WHITE
|
|
OR #$00E0,D0 ; ELSE SET WHITE BITS (CMY = 111)
|
|
@BLACK LSR #5,D0 ; SHIFT ICMYÊINTO LOW NIBBLE
|
|
AND #$7,D0 ; CLEAR ALL BUT CMY
|
|
lea InLineQDColors,A0 ; GET DEFAULT COLORS
|
|
; LEA 2(A0,D0*8),A0 ; point to proper entry
|
|
lsl.w #3,d0 ;d0*8
|
|
lea 2(a0,d0),a0 ;point to entry
|
|
|
|
MOVE.L (A0)+,(A1)+ ; copy red, green
|
|
MOVE (A0)+,(A1)+ ; copy blue
|
|
|
|
; MOVE.L red(A0,D1),red(A1) ; copy red and green components from the port <34>
|
|
; MOVE.W blue(A0,D1),blue(A1) ; and blue too <34>
|
|
|
|
DONE MOVE.L (SP)+,A0 ; get the return address
|
|
ADDQ #4,SP ; get rid of the parameter
|
|
JMP (A0) ; and return
|
|
|
|
;
|
|
; On color machines this table resides in low memory pointed to by the QDColors global
|
|
; variable.
|
|
;
|
|
InLineQDColors
|
|
dc.w $0000, $0000, $0000, $0000 ;0 black
|
|
dc.w $0001, $FC00, $F37D, $052F ;1 yellow
|
|
dc.w $0002, $F2D7, $0856, $84EC ;2 magenta
|
|
dc.w $0003, $DD6B, $08C2, $06A2 ;3 red
|
|
dc.w $0004, $0241, $AB54, $EAFF ;4 cyan
|
|
dc.w $0005, $0000, $8000, $11B0 ;5 green
|
|
dc.w $0006, $0000, $0000, $D400 ;6 blue
|
|
dc.w $0007, $FFFF, $FFFF, $FFFF ;7 white
|
|
|
|
;
|
|
; PROCEDURE GetBackColor (VAR Color: RGBColor);
|
|
;
|
|
; Return the RGB components of the current background color
|
|
; Works for old and new ports.
|
|
;
|
|
|
|
GetBackColor
|
|
|
|
MOVEQ #BKCOLOR,D0 ; get offset to the index field
|
|
MOVEQ #RGBBkColor,D1 ; get offset to RGB field
|
|
BRA.S SHARE ; and use common code
|
|
|
|
ENDPROC
|
|
|
|
QDError PROC EXPORT
|
|
clr.w 4(a7)
|
|
rts
|
|
ENDPROC
|
|
|
|
OpenCPicture FUNC EXPORT
|
|
IMPORT HidePen,NewRgn,ClipRect,DPutPicOp,DPutPicByte,PUTPICWORD,PUTPICDATA
|
|
;------------------------------------------------------
|
|
;
|
|
; Offsets in parameter block passed to OpenCPicture
|
|
;
|
|
ppSrcRect EQU 0 ;Rect
|
|
ppHRes EQU ppSrcRect+8 ;Fixed
|
|
ppVRes EQU ppHRes+4 ;Fixed
|
|
ppVersion EQU ppVRes+4 ;Word (=0)
|
|
ppReserved EQU ppVersion+2 ;Word
|
|
ppReserved2 EQU ppReserved+2 ;Long
|
|
PicParamSize EQU ppReserved2+4 ;size of a PICT2 header record
|
|
|
|
|
|
;------------------------------------------------------
|
|
;
|
|
; New offsets in a PICT2 header record:
|
|
;
|
|
hdrVersion EQU 0 ;Word (=-2)
|
|
hdrReserved EQU hdrVersion+2 ;Word
|
|
hdrHRes EQU hdrReserved+2 ;Fixed
|
|
hdrVRes EQU hdrHRes+4 ;Fixed
|
|
hdrSrcRect EQU hdrVRes+4 ;Rect
|
|
hdrReserved2 EQU hdrSrcRect+8 ;Long
|
|
picHdrSize EQU hdrReserved2+4 ;size of a PICT2 header record
|
|
;------------------------------------------------------------------
|
|
|
|
;
|
|
; FUNCTION OpenCPicture(picParams: params): cPicHandle;
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 4
|
|
RESULT EQU PARAMSIZE+8 ;LONG, PICHANDLE
|
|
params EQU RESULT-4 ;ptr to input params
|
|
|
|
SAVEVERSION EQU -2 ;PICTURE VERSION NUMBER
|
|
picHdrRec EQU SAVEVERSION-picHdrSize ;PICT2 header record
|
|
defaultFrame EQU picHdrRec-8 ;pic frame to be recorded in picture
|
|
VARSIZE EQU defaultFrame ;TOTAL BYTES OF LOCALS
|
|
|
|
LINK A6,#VARSIZE ;MAKE STACK FRAME
|
|
MOVE #npicVersion,SAVEVERSION(A6) ;SAVE VERSION NUMBER
|
|
|
|
;copy input parameters into pict 2 header record and compute picFrame
|
|
|
|
move.l params(a6),a0 ;point to input parameters
|
|
move.l ppSrcRect(a0),picHdrRec+hdrSrcRect(a6)
|
|
move.l ppSrcRect+bottom(a0),picHdrRec+hdrSrcRect+bottom(a6)
|
|
move.l ppHRes(a0),picHdrRec+hdrHRes(a6)
|
|
move.l ppVRes(a0),picHdrRec+hdrVRes(a6)
|
|
move.w ppVersion(a0),d0 ;orginal version?
|
|
bne.s @newversion
|
|
move.w #-2,picHdrRec+hdrVersion(a6)
|
|
clr.w picHdrRec+hdrReserved(a6)
|
|
clr.l picHdrRec+hdrReserved2(a6)
|
|
bra.s @computePicFrame
|
|
|
|
@newversion ;fill out additional fields
|
|
move.w d0,picHdrRec+hdrVersion(a6)
|
|
move.w ppReserved(a0),picHdrRec+hdrReserved(a6)
|
|
move.l ppReserved2(a0),picHdrRec+hdrReserved2(a6)
|
|
|
|
@computePicFrame
|
|
|
|
move.l picHdrRec+hdrSrcRect+top(a6),d0 ;get topLeft in d0
|
|
move.l picHdrRec+hdrSrcRect+bottom(a6),d1 ;get botRight in d1
|
|
move.l d0,defaultFrame+top(a6) ;set default new height
|
|
move.l d1,defaultFrame+bottom(a6) ;set default new width
|
|
sub.w d0,d1 ;get width in d1.w
|
|
move.w d1,d2 ;save width in d2.w
|
|
swap d0
|
|
swap d1
|
|
sub.w d0,d1 ;get height in d1.w
|
|
moveq #72,d0
|
|
mulu.w d0,d1 ;d1.L = height*72
|
|
move.l d1,a0 ;save height*72 in a0
|
|
mulu.w d0,d2 ;d2.L = width*72
|
|
|
|
; swap d2 ;<29>
|
|
; moveq #0,d1 ;extend d1 to long in copy: don't trash high word <KON>
|
|
; move.w d2,d1 ;<29>
|
|
; clr.w d2 ;<29>
|
|
move.l picHdrRec+hdrHRes(a6),d0 ;<29>
|
|
beq.s @skip ;<29>
|
|
|
|
move.l a0,-(sp) ;save d1 (which has been moved to a0
|
|
subq #4,sp
|
|
move.l d2,-(sp) ;longint/fixed = longint
|
|
move.l d0,-(sp)
|
|
_FixDiv
|
|
move.l (sp)+,d2 ;longint result, only interested in bottom word portion
|
|
;<29> swap d2 ;get quotient (decimal part) in low word
|
|
move.l (sp)+,d1 ;restore d1
|
|
|
|
; divu.l d0,d1:d2 ;d2.w = (width*72)/vRes
|
|
|
|
move.l picHdrRec+hdrVRes(a6),d0
|
|
beq.s @skip
|
|
|
|
clr.l defaultFrame+top(a6) ;force topLeft to be 0,0
|
|
move.w d2,defaultFrame+right(a6) ;right = new width
|
|
|
|
; moveq #0,d2 ;<29>
|
|
; swap d1 ;<29>
|
|
; move.w d1,d2 ;<29>
|
|
; clr.w d1 ;<29>
|
|
|
|
subq #4,sp
|
|
move.l d1,-(sp) ;longint/fixed = longint
|
|
move.l d0,-(sp)
|
|
_FixDiv
|
|
move.l (sp)+,d1 ;longint result, only interested in low word <29>
|
|
;<29> swap d1 ;get quotient (decimal part) in low word
|
|
|
|
; divu.l d0,d2:d1 ;d1.w = (height*72)/vRes
|
|
move.w d1,defaultFrame+bottom(a6) ;bottom = new height
|
|
@skip
|
|
MOVEM.L D3/A3-A4,-(SP) ;SAVE REGS
|
|
CLR.L RESULT(A6) ;INIT FCN RESULT TO NIL
|
|
|
|
; Abort OpenPicture if heap doesn't have at least 1500 bytes. <16Jan89 KON>
|
|
|
|
MOVE.L #1500,D0 ;GET BYTE COUNT
|
|
_NewHandle ;AT LEAST 1000 BYTES IN THE HEAP ?
|
|
BNE DONE ;NO, RETURN NIL AND QUIT
|
|
_DisposHandle ;YES, Discard test handle
|
|
|
|
MOVE.L GRAFGLOBALS(A5),A4 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L THEPORT(A4),A3 ;GET CURRENT GRAFPORT
|
|
TST.L PICSAVE(A3) ;ARE WE ALREADY SAVING ?
|
|
BNE DONE ;YES, RETURN NIL AND QUIT
|
|
_HidePen ;NO, TURN OFF DRAWING
|
|
|
|
; ALLOCATE PICSAVE RECORD
|
|
|
|
MOVE.L #picSaveRec,D0 ;GET BYTE COUNT
|
|
_NewHandle ;ALLOCATE PICSAVE RECORD
|
|
MOVE.L A0,A4 ;GET RESULT HANDLE
|
|
MOVE.L A4,PICSAVE(A3) ;SAVE RESULT IN THEPORT
|
|
;
|
|
; ALLOCATE PICCLIPRGN (leave on stack for now)
|
|
;
|
|
CLR.L -(SP) ;MAKE ROOM FOR FCN RESULT
|
|
_NEWRGN ;ALLOCATE A NEW REGION
|
|
;
|
|
; ALLOCATE THEPIC PICHANDLE
|
|
;
|
|
MOVE.L #256,D0 ;BYTE COUNT = 256
|
|
_NewHandle ;ALLOCATE NEWHANDLE(256)
|
|
MOVE.L A0,A1 ;GET THEPIC HANDLE
|
|
MOVE.L A1,RESULT(A6) ;PUT HANDLE IN FCN RESULT
|
|
;
|
|
; NOW FILL THEPIC'S PICSIZE AND PICFRAME
|
|
;
|
|
MOVE.L (A4),A4 ;DE-REFERENCE PICSAVE HANDLE
|
|
MOVE.L A1,(A4)+ ;SAVE PICHANDLE IN THEPIC
|
|
MOVE.L (A1),A1 ;DE-REFERENCE PICHANDLE
|
|
MOVE #10,(A1)+ ;INSTALL PICSIZE = 10
|
|
lea defaultFrame(A6),A0 ;POINT TO PICFRAME
|
|
MOVE.L (A0)+,(A1)+ ;COPY RECT INTO PICTURE
|
|
MOVE.L (A0)+,(A1)+
|
|
;
|
|
; INIT STATE VARIABLES FOR PICTURE CAPTURE
|
|
;
|
|
MOVE.L #256,(A4)+ ;PICMAX := 256;
|
|
MOVE.L #10,(A4)+ ;PICINDEX := 10
|
|
MOVE.L (SP)+,(A4)+ ;INSTALL PICCLIPRGN
|
|
CLR.L (A4)+ ;PICBKPAT := WHITE
|
|
CLR.L (A4)+
|
|
CLR.L (A4)+ ;PICTXFONT = 0, PICTXFACE = []
|
|
MOVE #1,(A4)+ ;PICTXMODE := SRCCOPY
|
|
CLR (A4)+ ;PICTXSIZE := 0
|
|
CLR.L (A4)+ ;PICSPEXTRA := 0.0
|
|
MOVE.L #$00010001,D0 ;GET (1,1)
|
|
MOVE.L D0,(A4)+ ;PICTXNUMER := (1,1)
|
|
MOVE.L D0,(A4)+ ;PICTXDENOM := (1,1)
|
|
CLR.L (A4)+ ;PICTXLOC := (0,0)
|
|
CLR.L (A4)+ ;PICPNLOC := (0,0)
|
|
MOVE.L D0,(A4)+ ;PICPNSIZE := (1,1)
|
|
MOVE #8,(A4)+ ;PICPNMODE := PATCOPY
|
|
MOVEQ #-1,D0 ;GET SOME BLACK
|
|
MOVE.L D0,(A4)+ ;PICPNPAT := BLACK
|
|
MOVE.L D0,(A4)+
|
|
MOVE.L D0,(A4)+ ;PICFILLPAT := BLACK
|
|
MOVE.L D0,(A4)+
|
|
CLR.L (A4)+ ;PICTHERECT := (0,0,0,0)
|
|
CLR.L (A4)+
|
|
CLR.L (A4)+ ;PICOVSIZE := (0,0)
|
|
MOVE.L PORTRECT+TOPLEFT(A3),(A4)+ ;PICORIGIN := CURRENT ORIGIN
|
|
MOVE.L #blackColor,(A4)+ ;PICFGCOLOR := blackColor
|
|
MOVE.L #whiteColor,(A4)+ ;PICBKCOLOR := whiteColor
|
|
clr.l (a4)+ ;picQdChExtra := 0
|
|
clr.l (a4)+ ;picQdRunSlop := 0
|
|
|
|
;
|
|
; Allocate handle for fond id's we have seen so far
|
|
;
|
|
; Format of picFontList handle is:
|
|
; handle size [long]
|
|
; # of entries - 1 used [word]
|
|
; id1, id2, ... idn
|
|
|
|
FontListSize equ 50*2
|
|
|
|
doFontList
|
|
moveq #FontListSize+6,d0 ;initial size for 50 entries
|
|
_NewHandle
|
|
move.l picSave(a3),a1 ;get picSave handle
|
|
move.l (a1),a1
|
|
move.l a0,picFontList(a1) ;save picFontList handle in picSave record
|
|
beq.s @noHandle
|
|
|
|
move.l (a0),a0 ;point into fontList
|
|
moveq #FontListSize+6,d0 ;initial size for 50 entries
|
|
move.l d0,(a0)+
|
|
clr.l (a0) ; 1 entry, first entry = 0
|
|
|
|
@noHandle
|
|
|
|
; INIT GLYPH STATE TO INVALID
|
|
|
|
move.l #$80808080,picGlyphState(a1) ; set glyph state to invalid values
|
|
|
|
; PUT VERSION NUMBER TO PICTURE
|
|
|
|
move.w #1,picVersion(a1) ;picVersion := new picture (non-zer)
|
|
MOVEQ #opVersion,D0 ;GET VERSION OPCODE
|
|
JSR DPutPicOp ;PUT TO PICTURE
|
|
MOVE SAVEVERSION(A6),D0 ;GET VERSION NUMBER
|
|
|
|
; For new pictures, put version as word, followed by header
|
|
|
|
@NotPic MOVE D0,-(SP) ;ELSE PUSH VERSION
|
|
JSR PUTPICWORD ;AND PUT ENTIRE WORD FOR NEW PICTURES
|
|
|
|
; HEADER EXTENSION = [OP] [SIZE] [BBOX] [RESERVED]
|
|
|
|
MOVE #ngHeaderOp,D0 ;GET HEADER OPCODE
|
|
JSR DPutPicOp ;PUT TO PICTURE
|
|
|
|
pea picHdrRec(a6) ;PUSH POINTER TO DATA
|
|
MOVE #24,-(SP) ;PUSH SIZE OF DATA
|
|
JSR PUTPICDATA ;AND BLAST IT TO THE PICTURE
|
|
|
|
DONE MOVEM.L (SP)+,D3/A3-A4 ;RESTORE REGS
|
|
UNLINK PARAMSIZE,'OPENCPIC'
|
|
|
|
|
|
PutPicPat PROC EXPORT
|
|
IMPORT PutPicData
|
|
;------------------------------------------------------
|
|
;
|
|
; PROCEDURE PutPicPat(pat: Pattern);
|
|
;
|
|
MOVE.L (SP)+,A0 ;POP RETURN ADDR
|
|
MOVE #8,-(SP) ;PUSH BYTECOUNT = 8
|
|
MOVE.L A0,-(SP) ;PUSH RETURN ADDR
|
|
JMP PutPicData
|
|
|
|
PutPicVerb PROC EXPORT
|
|
IMPORT DPutPicByte,PutPicWord,PutPicLong,PutPicPat,DoPict2
|
|
;------------------------------------------------------
|
|
;
|
|
; PROCEDURE PutPicVerb(verb: GrafVerb);
|
|
;
|
|
; check additional picture params associated with
|
|
; this verb, and add those that have changed to thePic.
|
|
;
|
|
PARAMSIZE EQU 2
|
|
VERB EQU PARAMSIZE+8-2 ;BYTE
|
|
|
|
LINK A6,#0 ;NO LOCAL VARS
|
|
MOVEM.L D5-D7/A3-A4,-(SP) ;SAVE REGS
|
|
MOVE.L GRAFGLOBALS(A5),A4 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L THEPORT(A4),A3 ;POINT TO CURRENT PORT
|
|
MOVE.L PICSAVE(A3),A4 ;GET PICSAVE HANDLE
|
|
MOVE.L (A4),A4 ;DE-REFERENCE PICSAVE
|
|
MOVE.B VERB(A6),D7 ;GET VERB
|
|
CMP.B #PAINT,D7 ;CASE JUMP BASSED ON VERB
|
|
BLT FRAME1
|
|
BEQ PAINT1 ;YES CHECK PNMODE, PNPAT
|
|
CMP.B #INVERT,D7 ;IS VERB INVERT ?
|
|
BEQ DONE ;YES, NOTHING TO CHECK
|
|
BLT.S ERASE1
|
|
|
|
FILL1 MOVE.L FILLPAT(A3),D5 ;GET FILLPAT
|
|
MOVE.L FILLPAT+4(A3),D6
|
|
CMP.L PICFILLPAT(A4),D5 ;SAME AS PICFILLPAT ?
|
|
BNE.S @1 ;NO, PUT CHANGE TO THEPIC
|
|
CMP.L PICFILLPAT+4(A4),D6
|
|
BEQ DONE
|
|
@1 MOVE.L D5,PICFILLPAT(A4) ;UPDATE STATE VARIABLE
|
|
MOVE.L D6,PICFILLPAT+4(A4)
|
|
;
|
|
; Do alignement for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$0A,D0 ;PUSH FILLPAT OPCODE
|
|
JSR DPutPicByte ;ADD TO THEPIC
|
|
PEA FILLPAT(A3)
|
|
JSR PutPicPat ;PUT PATTERN DATA
|
|
BRA DONE ;AND QUIT
|
|
|
|
ERASE1 MOVE.L BKPAT(A3),D5 ;GET BKPAT
|
|
MOVE.L BKPAT+4(A3),D6
|
|
CMP.L PICBKPAT(A4),D5 ;SAME AS PICBKPAT ?
|
|
BNE.S NEWBK ;NO, PUT CHANGE TO THEPIC
|
|
CMP.L PICBKPAT+4(A4),D6
|
|
BEQ DONE
|
|
NEWBK MOVE.L D5,PICBKPAT(A4) ;UPDATE STATE VARIABLE
|
|
MOVE.L D6,PICBKPAT+4(A4)
|
|
;
|
|
; Do alignement for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$02,D0 ;BKPAT OPCODE
|
|
JSR DPutPicByte ;ADD TO THEPIC
|
|
PEA BKPAT(A3)
|
|
JSR PutPicPat ;PUT PATTERN DATA
|
|
BRA DONE ;AND QUIT
|
|
|
|
FRAME1 MOVE.L PNSIZE(A3),D6 ;GET PNSIZE
|
|
CMP.L PICPNSIZE(A4),D6 ;HAS IT CHANGED ?
|
|
BEQ.S PAINT1 ;NO, CONTINUE
|
|
;
|
|
; Do alignement for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$07,D0
|
|
JSR DPutPicByte ;YES, PUT PNSIZE OPCODE
|
|
MOVE.L D6,-(SP)
|
|
JSR PutPicLong ;PUT NEW PNSIZE
|
|
MOVE.L PICSAVE(A3),A4 ;GET PICSAVE HANDLE
|
|
MOVE.L (A4),A4 ;DE-REFERENCE PICSAVE
|
|
MOVE.L D6,PICPNSIZE(A4) ;AND UPDATE STATE VARIABLE
|
|
|
|
PAINT1 MOVE PNMODE(A3),D6 ;GET PNMODE
|
|
CMP PICPNMODE(A4),D6 ;HAS IT CHANGED ?
|
|
BEQ.S MODEOK ;NO, CONTINUE
|
|
;
|
|
; Do alignement for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$08,D0
|
|
JSR DPutPicByte ;YES, PUT PNMODE OPCODE
|
|
MOVE D6,-(SP)
|
|
JSR PutPicWord ;PUT NEW PNMODE
|
|
MOVE.L PICSAVE(A3),A4 ;GET PICSAVE HANDLE
|
|
MOVE.L (A4),A4 ;DE-REFERENCE PICSAVE
|
|
MOVE D6,PICPNMODE(A4) ;AND UPDATE STATE VARIABLE
|
|
|
|
MODEOK MOVE.L PNPAT(A3),D5 ;GET PNPAT
|
|
MOVE.L PNPAT+4(A3),D6
|
|
CMP.L PICPNPAT(A4),D5 ;SAME AS PICPNPAT ?
|
|
BNE.S @1 ;NO, PUT CHANGE TO THEPIC
|
|
CMP.L PICPNPAT+4(A4),D6
|
|
BEQ.S DONE
|
|
@1 MOVE.L D5,PICPNPAT(A4) ;UPDATE STATE VARIABLE
|
|
MOVE.L D6,PICPNPAT+4(A4)
|
|
;
|
|
; Do alignment for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$09,D0 ;PNPAT OPCODE
|
|
JSR DPutPicByte ;ADD TO THEPIC
|
|
PEA PNPAT(A3)
|
|
JSR PutPicPat ;PUT PATTERN DATA
|
|
|
|
DONE
|
|
;
|
|
; Do alignment for new pictures: align for next opcode
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEM.L (SP)+,D5-D7/A3-A4 ;RESTORE REGS
|
|
UNLINK PARAMSIZE,'PUTPICVERB'
|
|
ENDP
|
|
|
|
PutPicData PROC EXPORT
|
|
EXPORT DPutPicByte, PutPicByte, PutPicWord, PutPicLong
|
|
IMPORT ROMDPutPicByte, ROMPutPicByte, ROMPutPicWord, ROMPutPicLong
|
|
|
|
jmpROM ROMPutPicData
|
|
DPutPicByte
|
|
jmpROM ROMDPutPicByte
|
|
PutPicWord
|
|
jmpROM ROMPutPicWord
|
|
PutPicLong
|
|
jmpROM ROMPutPicLong
|
|
PutPicByte
|
|
jmpROM ROMPutPicByte
|
|
ENDPROC
|
|
|
|
DPutPicOp PROC EXPORT
|
|
EXPORT PutPicOp,PutPicOp2
|
|
IMPORT PutPicData,PutPicPad
|
|
;------------------------------------------------------
|
|
;
|
|
; PROCEDURE PutPicOp(data: word);
|
|
;
|
|
; Put a byte if PICT; Put a word if NPIC.
|
|
;
|
|
MOVE.L (SP)+,A0 ;POP RETURN ADDR
|
|
MOVE D0,-(SP) ;PUSH DATA WORD
|
|
MOVE.L A0,-(SP) ;PUSH RETURN ADDR
|
|
PutPicOp
|
|
JSR PutPicPad ;PAD TO WORD BOUNDARY
|
|
PutPicOp2
|
|
MOVE.L GRAFGLOBALS(A5),A0 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L THEPORT(A0),A0 ;GET CURRENT GRAFPORT
|
|
MOVE.L PICSAVE(A0),A0 ;GET PICSAVE HANDLE
|
|
MOVE.L (A0),A0 ;DE-REFERENCE PICSAVE
|
|
MOVEQ #2,D0 ;ASSUME IT'S A NEW PICTURE
|
|
LEA 4(SP),A1 ;GET ADDR OF DATA
|
|
tst.w PICVERSION(A0) ;IS IT AN OLD PICTURE?
|
|
BNE.S NEWPIC ;=>NO, TWO-BYTE OPCODES
|
|
MOVEQ #1,D0 ;ELSE ONE-BYTE OPCODES
|
|
ADDQ #1,A1 ;POINT TO DATA
|
|
NEWPIC MOVE.L A1,-(SP) ;PUSH ADDRESS OF DATA
|
|
MOVE D0,-(SP) ;PUSH BYTECOUNT
|
|
JSR PutPicData ;CALL PutPicData
|
|
MOVE.L (SP)+,A0 ;POP RETURN ADDR
|
|
TST.W (SP)+ ;STRIP PARAM
|
|
JMP (A0) ;AND RETURN
|
|
|
|
PutPicPad PROC EXPORT
|
|
IMPORT DPutPicByte
|
|
;------------------------------------------------------
|
|
;
|
|
; PROCEDURE PutPicPad;
|
|
;
|
|
; If picture is an NPIC and the current PicSize is odd, then put a 0 pad byte.
|
|
;
|
|
MOVE.L GRAFGLOBALS(A5),A0 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L THEPORT(A0),A0 ;GET CURRENT GRAFPORT
|
|
MOVE.L PICSAVE(A0),A0 ;GET PICSAVE HANDLE
|
|
MOVE.L (A0),A0 ;DE-REFERENCE PICSAVE
|
|
tst PICVERSION(A0) ;IS IT AN OLD PICTURE? <KON 12FEB90>
|
|
BEQ.S DONE ;=>YES, DON'T PAD
|
|
MOVE.L THEPIC(A0),A0 ;GET THEPIC HANDLE
|
|
MOVE.L (A0),A0 ;POINT AT THE PIC
|
|
MOVE PICSIZE(A0),D0 ;GET THE LOW WORD OF THE SIZE
|
|
BTST #0,D0 ;IS SIZE ODD?
|
|
BEQ.S DONE ;=>NO, JUST RETURN
|
|
MOVEQ #0,D0 ;GET A PAD BYTE IN D0
|
|
JSR DPutPicByte ;PUT THE BYTE TO THE PICTURE
|
|
DONE RTS ;AND RETURN
|
|
ENDPROC
|
|
|
|
;____________________________________________________________________________________
|
|
; PB399 StdBits Patch
|
|
;
|
|
; Fix File Date Patch# Fix Routine(s) Routine(s) Fixed
|
|
;AppleSystemPatch PatchPlusROM.a 21Feb88 PMAB399 StdBits StdBits
|
|
;
|
|
; An earlier patch fixed PackBits to work with scanlines longer than 127 bytes. Unfortunately,
|
|
; when pict recording, StdBits JSRs rather than traps to PackBits, so the earlier patch
|
|
; didn't help that much. This (big) patch fixes StdBits to trap to the new routine.
|
|
;
|
|
|
|
PatchStdBits PROC EXPORT
|
|
IMPORT CheckPic, DoPict2
|
|
IMPORT PutPicByte,PutPicWord,PutPicData
|
|
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdBits(VAR srcBits: BitMap;
|
|
; VAR srcRect: Rect;
|
|
; VAR dstRect: Rect;
|
|
; mode: INTEGER;
|
|
; maskRgn: RgnHandle);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 18
|
|
SRCBITS EQU PARAMSIZE+8-4 ;LONG, ADDR OF BITMAP
|
|
SRCRECT EQU SRCBITS-4 ;LONG, ADDR OF RECT
|
|
DSTRECT EQU SRCRECT-4 ;LONG, ADDR OF RECT
|
|
MODE EQU DSTRECT-2 ;WORD
|
|
MASKRGN EQU MODE-4 ;LONG, RGNHANDLE
|
|
|
|
MYBITS EQU -14 ;BITMAP
|
|
SRCPTR EQU MYBITS-4 ;LONG
|
|
DSTPTR EQU SRCPTR-4 ;LONG
|
|
PACKBUF EQU DSTPTR-4 ;POINTER TO PACKING BUFFER
|
|
SAVEDSP EQU PACKBUF-4 ;PRESERVE STACK POINTER
|
|
VARSIZE EQU SAVEDSP
|
|
|
|
|
|
LINK A6,#VARSIZE ;ALLOCATE STACK FRAME
|
|
MOVEM.L D3-D7/A2-A4,-(SP) ;SAVE REGS
|
|
JSR CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BGT.S @100 ;BRANCH IF PICSAVE
|
|
JMPROM ROMStdBitsNotPic ;continue in ROM
|
|
@100
|
|
MOVE.L SP,SAVEDSP(A6) ;PRESERVE STACK POINTER
|
|
MOVEQ #8,D6
|
|
;
|
|
; TRIM SRCBITS
|
|
;
|
|
MOVE.L SRCBITS(A6),A0 ;GET ADDR OF SRCBITS
|
|
LEA MYBITS(A6),A1 ;POINT TO MY COPY
|
|
MOVE.L BASEADDR(A0),A3 ;GET BASEADDR (CLOBBERS A3)
|
|
MOVE ROWBYTES(A0),D4 ;GET OLD ROWBYTES
|
|
MOVE.L BOUNDS+TOPLEFT(A0),BOUNDS+TOPLEFT(A1) ;COPY BOUNDS TOPLEFT
|
|
MOVE.L BOUNDS+BOTRIGHT(A0),BOUNDS+BOTRIGHT(A1) ;COPY BOUNDS BOTRIGHT
|
|
MOVE.L SRCRECT(A6),A0 ;POINT TO SRCRECT
|
|
MOVE TOP(A0),D0 ;GET SRCRECT.TOP
|
|
SUB BOUNDS+TOP(A1),D0 ;SKIPTOP:=SRCRECT.TOP-BOUNDS.TOP
|
|
BLE.S TOPOK ;CONTINUE IF SKIPTOP NEG
|
|
ADD D0,BOUNDS+TOP(A1) ;NEWTOP := SRCRECT TOP
|
|
MULU D4,D0 ;CALC VERT OFFSET
|
|
ADD.L D0,A3 ;ADJUST BASEADDR
|
|
|
|
TOPOK MOVE BOTTOM(A0),D0 ;GET SRCRECT.BOTTOM
|
|
CMP BOUNDS+BOTTOM(A1),D0 ;IS SRCRECT BOT < BOUNDS BOT ?
|
|
BGE.S BOTOK ;NO, CONTINUE
|
|
MOVE D0,BOUNDS+BOTTOM(A1) ;YES, TRIM BOUNDS BOTTOM
|
|
|
|
BOTOK MOVE LEFT(A0),D0 ;GET SRCRECT.LEFT
|
|
SUB BOUNDS+LEFT(A1),D0 ;CALC SKIPLEFT
|
|
BLE.S LEFTOK ;CONTINUE IF SKIPLEFT NEG
|
|
LSR #3,D0 ;DIV BY 8 FOR SKIP BYTES
|
|
ADD D0,A3 ;OFFSET BASEADDR HORIZ
|
|
LSL #3,D0 ;BYTES TIMES 8 FOR DOTS
|
|
ADD D0,BOUNDS+LEFT(A1) ;ADD DOTS TO BOUNDS.LEFT
|
|
|
|
LEFTOK MOVE RIGHT(A0),D0 ;GET SRCRECT.RIGHT
|
|
SUB BOUNDS+LEFT(A1),D0 ;CONVERT TO GLOBAL
|
|
ADD #7,D0 ;ROUND UP
|
|
LSR #3,D0 ;TO NEXT MULT OF 8
|
|
LSL #3,D0
|
|
ADD BOUNDS+LEFT(A1),D0 ;RETURN TO LOCAL
|
|
CMP BOUNDS+RIGHT(A1),D0 ;IS RESULT < BOUNDS.RIGHT ?
|
|
BGE.S RIGHTOK ;NO, CONTINUE
|
|
MOVE D0,BOUNDS+RIGHT(A1) ;YES, TRIM RIGHT
|
|
RIGHTOK
|
|
;
|
|
; CALC NEW ROWBYTES AFTER TRIMMING
|
|
;
|
|
MOVE BOUNDS+RIGHT(A1),D5 ;GET TRIMMED RIGHT
|
|
SUB BOUNDS+LEFT(A1),D5 ;CALC WIDTH
|
|
ADD #15,D5 ;ROUND UP
|
|
LSR #4,D5 ;DIV BY 16
|
|
BGT.S @200 ;continue if greater than 0
|
|
; MOVE.L SAVEDSP(A6),SP ;RESTORE STACK POINTER
|
|
JMPROM ROMStdBitsOK ;IGNORE IF NEWROW <= 0
|
|
@200
|
|
ADD D5,D5 ;DOUBLE FOR NEW ROWBYTES
|
|
MOVE D5,ROWBYTES(A1) ;COPY ROWBYTES
|
|
|
|
MOVE.B #$90,-(SP) ;PUSH OPCODE=BITSRECT
|
|
TST.L MASKRGN(A6) ;IS MASKRGN NIL ?
|
|
BEQ.S NOTRGN ;YES, CONTINUE
|
|
ADD.B #1,(SP) ;REPLACE OPCODE=BITSRGN (IE. $91)
|
|
NOTRGN CMP D6,D5 ;IS NEWROW < 8 ?
|
|
BLT.S NOPACK ;YES, DONT BITPACK
|
|
ADD.B #8,(SP) ;SET BIT 3 FOR BITPACK
|
|
NOPACK
|
|
jsr DoPict2 ;align for PICT2 <17Sept90 KON>
|
|
JSR PutPicByte ;PUT OPCODE TO THEPIC
|
|
|
|
PEA MYBITS+ROWBYTES(A6) ;PUSH ADDR OF ROWBYTYES,BOUNDS
|
|
MOVE #10,-(SP) ;PUSH BYTECOUNT = 10
|
|
JSR PutPicData ;PUT ROWBYTES,BOUNDS TO THEPIC
|
|
|
|
MOVE.L SRCRECT(A6),-(SP)
|
|
MOVE D6,-(SP)
|
|
JSR PutPicData ;PUT SRCRECT
|
|
MOVE.L DSTRECT(A6),-(SP)
|
|
MOVE D6,-(SP)
|
|
JSR PutPicData ;PUT DSTRECT
|
|
MOVE MODE(A6),-(SP)
|
|
JSR PutPicWord ;PUT MODE
|
|
|
|
TST.L MASKRGN(A6) ;IS MASKRGN NIL ?
|
|
BEQ.S NOMASK ;YES, SKIP IT
|
|
MOVE.L MASKRGN(A6),-(SP) ;NO, PUSH MASKRGN
|
|
JSRROM ROMPutPicRgn ;PUT MASKRGN TO THEPIC
|
|
NOMASK
|
|
;
|
|
; NOW PUT THE BITMAP DATA: IF NEWROW >= 8 THEN USE PACKBITS
|
|
;
|
|
LEA MYBITS(A6),A2 ;POINT TO (TRIMMED) BITMAP
|
|
MOVE BOUNDS+BOTTOM(A2),D7
|
|
SUB BOUNDS+TOP(A2),D7 ;HEIGHT := BOUNDS BOT - TOP
|
|
|
|
CMP D6,D5 ;IS NEWROW < 8 ?
|
|
BGE.S @PackIt ;No, use packing
|
|
; MOVE.L SAVEDSP(A6),SP ;RESTORE STACK POINTER
|
|
jmpROM ROMStdBitsStart2 ;continue in ROM
|
|
|
|
;----------------------------------------------------------------
|
|
;
|
|
; MAKE SURE THE STACK IS ON A LONGWORD BOUNDARY (FOR FAST BUFFERS)
|
|
;
|
|
@PackIt
|
|
MOVE.L SP,D1 ;GET THE STACK POINTER
|
|
AND.B #$FC,D1 ;FORCE LONG ALIGNMENT
|
|
MOVE.L D1,SP ;USE IT
|
|
|
|
;----------------------------------------------------------------
|
|
;
|
|
; ALLOCATE PACKBUF ON THE STACK
|
|
;
|
|
SUB D5,SP ;SET SIZE OF PACKBUF
|
|
SUB D5,SP ;TO 2*ROWBYTES FOR LONG ALIGNMENT
|
|
MOVE.L SP,PACKBUF(A6) ;POINT TO PACKBUF
|
|
|
|
;----------------------------------------------------------------
|
|
;
|
|
; ROWBYTES >= 8, WRITE THE PACKED BIT/PIXMAP TO THE PICTURE
|
|
;
|
|
; PACKED FORMAT = [BYTECOUNT][DATA] FOR EACH SCANLINE
|
|
;
|
|
; IF ROWBYTES > 250 THEN BYTECOUNT IS A WORD, ELSE IT IS A BYTE
|
|
;
|
|
BRA.S START1 ;GO TO LOOP START
|
|
MORE1 MOVE.L A3,SRCPTR(A6) ;SRCPTR := ^SCANLINE DATA
|
|
move.l PACKBUF(A6),A0
|
|
MOVE.L A0,DSTPTR(A6) ;DSTPTR := @PACKBUF
|
|
PEA SRCPTR(A6) ;PUSH VAR SRCPTR
|
|
PEA DSTPTR(A6) ;PUSH VAR DSTPTR
|
|
MOVE D5,-(SP) ;PUSH SRCBYTES = NEWROW
|
|
_PackBits ;PACK ROW INTO PACKBUF (here's the fix!) <PMA399/DAF>
|
|
MOVE.L DSTPTR(A6),D6 ;GET UPDATED DSTPTR
|
|
move.l PACKBUF(A6),A0 ;POINT TO PACKBUF
|
|
SUB.L A0,D6 ;CALC PACKED BYTECOUNT
|
|
CMP #250,D5 ;IS ROWBYTES > 250?
|
|
BGT.S @1 ;=>YES, PUT WORD
|
|
MOVE.B D6,-(SP) ;ELSE PUSH THE BYTE
|
|
JSR PUTPICBYTE ;AND PUT TO PICTURE
|
|
BRA.S @2 ;=>AND GO PUT DATA
|
|
@1 MOVE.W D6,-(SP) ;PUSH PACKED BYTECOUNT
|
|
JSR PUTPICWORD ;PUT THE WORD
|
|
@2 MOVE.L PACKBUF(A6),-(SP)
|
|
MOVE D6,-(SP)
|
|
JSR PutPicData ;PUT PACKED DATA TO THEPIC
|
|
ADD D4,A3 ;ADD OLDROW TO BITS PTR
|
|
START1 DBRA D7,MORE1 ;LOOP FOR HEIGHT ROWS
|
|
MOVE.L SAVEDSP(A6),SP ;RESTORE STACK POINTER
|
|
jmpROM ROMStdBitsOK ;and continue in ROM
|
|
|
|
|
|
PortablePatchStdPoly PROC EXPORT
|
|
IMPORT CheckPic
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdPoly(verb: GrafVerb; poly: PolyHandle);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AND LOCALS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 6
|
|
VERB EQU PARAMSIZE+8-2 ;GRAFVERB
|
|
POLY EQU VERB-4 ;LONG, PolyHandle
|
|
|
|
MINRECT EQU -8 ;RECT
|
|
VARSIZE EQU MINRECT ;TOTAL BYTES OF LOCALS
|
|
|
|
LINK A6,#VARSIZE ;ALLOCATE STACK FRAME
|
|
MOVEM.L D5-D7/A2-A4,-(SP) ;SAVE REGS
|
|
MOVE.B VERB(A6),D7 ;GET VERB
|
|
JSR CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B D7,-(SP)
|
|
peaROM ROMStdPolyRtn
|
|
jmp PutPicVerb ;PUT ADDIONAL PARAMS TO THEPIC
|
|
NotPic
|
|
jmpROM ROMStdPolyNotPic
|
|
ENDPROC
|
|
|
|
|
|
PatchStdRect PROC EXPORT
|
|
IMPORT CheckPic
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdRect(verb: GrafVerb; r: Rect);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 6
|
|
VERB EQU PARAMSIZE+8-2 ;GRAFVERB
|
|
RECT EQU VERB-4 ;LONG, ADDR OF RECT
|
|
|
|
LINK A6,#0 ;NO LOCALS
|
|
MOVEM.L D7/A3-A4,-(SP) ;SAVE REGS
|
|
MOVE.B VERB(A6),D7 ;GET VERB
|
|
jsr CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B D7,-(SP) ;PUSH VERB
|
|
peaROM ROMStdRectRtn
|
|
jmp PutPicVerb ;PUT ADDIONAL PARAMS TO THEPIC
|
|
NotPic
|
|
jmpROM ROMStdRectNotPic
|
|
|
|
ENDPROC
|
|
|
|
PatchStdLine PROC EXPORT
|
|
IMPORT CheckPic
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdLine(newPt: Point);
|
|
;
|
|
PARAMSIZE EQU 4
|
|
NEWPT EQU PARAMSIZE+8-4
|
|
|
|
LINK A6,#0 ;NO LOCAL VARS
|
|
MOVEM.L D5-D7/A3-A4,-(SP) ;SAVE REGS
|
|
jsr CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B #FRAME,-(SP) ;PUSH VERB
|
|
peaROM ROMStdLineRtn
|
|
jmp PutPicVerb ;CHECK pnSize, pnMode, pnPat
|
|
NotPic
|
|
jmpROM ROMStdLineNotPic
|
|
|
|
ENDPROC
|
|
|
|
PatchStdRRect PROC EXPORT
|
|
IMPORT CheckPic, DoPict2
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdRRect(verb: GrafVerb; r: Rect; ovWd,ovHt: INTEGER);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 10
|
|
VERB EQU PARAMSIZE+8-2 ;GRAFVERB
|
|
RECT EQU VERB-4 ;LONG, ADDR OF RECT
|
|
OVWD EQU RECT-2 ;WORD
|
|
OVHT EQU OVWD-2 ;WORD
|
|
|
|
LINK A6,#0 ;NO LOCALS
|
|
MOVEM.L D7/A3-A4,-(SP) ;SAVE REGS
|
|
MOVE.B VERB(A6),D7 ;GET VERB
|
|
jsr CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B D7,-(SP) ;PUSH VERB
|
|
jsr PutPicVerb
|
|
;
|
|
; CHECK FOR NEW OVAL SIZE
|
|
;
|
|
MOVE.L PICSAVE(A3),A0 ;GET PICSAVE HANDLE
|
|
MOVE.L (A0),A0 ;DE-REFERENCE PICSAVE
|
|
MOVE.L OVHT(A6),D0 ;GET OVWD AND OVHT
|
|
CMP.L PICOVSIZE(A0),D0 ;SAME AS CURRENT OVAL SIZE ?
|
|
BEQ.S OVALOK ;YES, CONTINUE
|
|
MOVE.L D0,PICOVSIZE(A0) ;NO, UPDATE STATE VARIABLE
|
|
MOVE.L D0,-(SP) ;PUSH OVSIZE FOR PutPicLong CALL
|
|
MOVEQ #$0B,D0
|
|
JSR DPutPicByte ;PUT OVSIZE OPCODE
|
|
JSR PutPicLong ;PUT NEW OVAL SIZE DATA
|
|
jsr DoPict2
|
|
OVALOK
|
|
jmpROM ROMStdRRectRtn
|
|
|
|
NotPic
|
|
jmpROM ROMStdRRectNotPic
|
|
ENDPROC
|
|
|
|
PatchStdOval PROC EXPORT
|
|
IMPORT CheckPic
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdOval(verb: GrafVerb; r: Rect);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 6
|
|
VERB EQU PARAMSIZE+8-2 ;GRAFVERB
|
|
RECT EQU VERB-4 ;LONG, ADDR OF RECT
|
|
|
|
OVWD EQU -2 ;WORD
|
|
OVHT EQU OVWD-2 ;WORD
|
|
VARSIZE EQU OVHT ;TOTAL BYTES OF LOCALS
|
|
|
|
|
|
LINK A6,#VARSIZE ;ALLOCATE STACK FRAME
|
|
MOVEM.L D7/A3-A4,-(SP) ;SAVE REGS
|
|
MOVE.B VERB(A6),D7 ;GET VERB
|
|
jsr CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B D7,-(SP) ;PUSH VERB
|
|
peaROM ROMStdOvalRtn
|
|
jmp PutPicVerb ;PUT ADDIONAL PARAMS TO THEPIC
|
|
NotPic
|
|
jmpROM ROMStdOvalNotPic
|
|
ENDPROC
|
|
|
|
PatchStdArc PROC EXPORT
|
|
IMPORT CheckPic
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdArc(verb: GrafVerb; r: Rect; startAngle,arcAngle: INTEGER);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
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
|
|
jsr CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B D7,-(SP) ;PUSH VERB
|
|
peaROM ROMStdArcRtn
|
|
jmp PutPicVerb ;PUT ADDIONAL PARAMS TO THEPIC
|
|
NotPic
|
|
jmpROM ROMStdArcNotPic
|
|
ENDPROC
|
|
|
|
PatchStdRgnSEPortable PROC EXPORT
|
|
IMPORT CheckPic
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdRgn(verb: GrafVerb; rgn: RgnHandle);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 6
|
|
VERB EQU PARAMSIZE+8-2 ;GRAFVERB
|
|
RGN EQU VERB-4 ;LONG, RGNHANDLE
|
|
|
|
LINK A6,#0 ;NO LOCALS
|
|
MOVEM.L D6-D7/A2-A4,-(SP) ;SAVE REGS
|
|
MOVE.B VERB(A6),D7 ;GET VERB
|
|
jsr CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B D7,-(SP) ;PUSH VERB
|
|
peaROM ROMStdRgnRtn
|
|
jmp PutPicVerb ;PUT ADDIONAL PARAMS TO THEPIC
|
|
NotPic
|
|
jmpROM ROMStdRgnNotPic
|
|
ENDPROC
|
|
;
|
|
; Patch StdRgn differently on the Plus because PutRgn, which is called by
|
|
; StdDraw has a bug in it only on the Plus ROM.
|
|
;
|
|
PatchStdRgnPlus PROC EXPORT
|
|
IMPORT CheckPic,MyPutRgn
|
|
ROMNotRgn ROMBind (Plus, $BC46)
|
|
ROMNotFr ROMBind (Plus, $BC4C)
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdRgn(verb: GrafVerb; rgn: RgnHandle);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 6
|
|
VERB EQU PARAMSIZE+8-2 ;GRAFVERB
|
|
RGN EQU VERB-4 ;LONG, RGNHANDLE
|
|
|
|
LINK A6,#0 ;NO LOCALS
|
|
MOVEM.L D6-D7/A2-A4,-(SP) ;SAVE REGS
|
|
MOVE.B VERB(A6),D7 ;GET VERB
|
|
jsr CHECKPIC ;SET UP A4,A3 AND CHECK PICSAVE
|
|
BLE.S NOTPIC ;BRANCH IF NOT PICSAVE
|
|
|
|
MOVE.B D7,-(SP) ;PUSH VERB
|
|
JSR PutPicVerb ;PUT ADDITONAL PARAMS TO THEPIC
|
|
MOVE #$80,D0 ;PUT RGNNOUN IN HI NIBBLE
|
|
ADD D7,D0 ;PUT VERB IN LO NIBBLE
|
|
JSR DPutPicByte ;PUT OPCODE TO THEPIC <30>
|
|
MOVE.L RGN(A6),-(SP) ;PUSH RGNHANDLE
|
|
JSRROM ROMPutPicRgn ;PUT REGION TO THEPIC
|
|
|
|
NOTPIC MOVE.L RGN(A6),-(SP) ;PUSH RGNHANDLE
|
|
jsrROM ROMPushVerb ;PUSH MODE AND PATTERN
|
|
TST.B D7 ;IS VERB FRAME ?
|
|
BNE.S NOTFR ;NO, CONTINUE
|
|
TST.L RGNSAVE(A3) ;YES, IS RGNSAVE TRUE ?
|
|
BEQ.S NOTRGN ;NO, CONTINUE
|
|
MOVE.L RGN(A6),-(SP) ;YES, PUSH RGNHANDLE
|
|
MOVE.L RGNBUF(A4),-(SP) ;PUSH RGNBUF
|
|
PEA RGNINDEX(A4) ;PUSH VAR RGNINDEX
|
|
PEA RGNMAX(A4) ;PUSH VAR RGNMAX
|
|
JSR MyPutRgn ;ADD INVERSION PTS TO THERGN
|
|
|
|
NOTRGN jmpROM ROMNotRgn
|
|
|
|
; JSR FrRgn ;FrRgn(rgn,pnMode,pnPat)
|
|
; BRA.S GOHOME
|
|
|
|
NOTFR jmpROM ROMNotFr
|
|
|
|
; JSR DrawRgn ;DrawRgn(rgn,mode,pat);
|
|
|
|
;GOHOME MOVEM.L (SP)+,D6-D7/A2-A4 ;RESTORE REGS
|
|
; UNLINK PARAMSIZE,'STDRGN '
|
|
ENDPROC
|
|
|
|
MyPutRgn PROC
|
|
IMPORT SETHSIZE
|
|
PlusPutRgnDone ROMBind (Plus, $C8BA)
|
|
PlusNotRect ROMBind (Plus, $C8A0)
|
|
PlusSetHSize ROMBind (Plus, $8798)
|
|
;----------------------------------------------------------------
|
|
;
|
|
; 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
|
|
MOVE (A0),D7 ;GET RGNSIZE
|
|
ADD D7,D7 ;TIMES 2
|
|
ADD (A2),D7 ;ADD CURRENT INDEX
|
|
MOVE.L SIZE(A6),A1 ;POINT TO SIZE
|
|
CMP (A1),D7 ;IS REQUIRED > CURRENT SIZE ?
|
|
BLE.S NOGROW ;NO, CONTINUE
|
|
|
|
ADD #256,D7 ;GROW IN CHUNKS
|
|
MOVE D7,(A1) ;UPDATE CURRENT SIZE
|
|
MOVE.L A4,-(SP) ;PUSH BUFHANDLE
|
|
MOVE D7,-(SP) ;PUSH NEW SIZE
|
|
jsrROM PlusSetHSize ;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
|
|
ADD (A2),A1 ;ADD INDEX TO BUFPTR
|
|
CMP #10,RGNSIZE(A0) ;IS REGION RECTANGULAR ?
|
|
BNE.S NOTRECT ;NO, CONTINUE
|
|
ADD #2,A0 ;YES, POINT TO BBOX TOPLEFT
|
|
;
|
|
; Here's the patch that was left out of the Plus ROM <28FEB90 KON>
|
|
;
|
|
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>
|
|
jmpROM PlusPutRgnDone ;Back to ROM
|
|
; BRA.S DONE ;UPDATE INDEX AND QUIT
|
|
|
|
NOTRECT
|
|
jmpROM PlusNotRect
|
|
; 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
|
|
|
|
PatchStdComment PROC EXPORT
|
|
IMPORT DoPict2
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE StdComment
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
peaROM ROMStdComment
|
|
jmp DoPict2
|
|
ENDPROC
|
|
|
|
DoPict2 PROC EXPORT
|
|
IMPORT DPutPicByte
|
|
;
|
|
; if we are recording a PICT2, align pixSize by padding with zeros
|
|
;
|
|
MOVE.L GRAFGLOBALS(A5),A0 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L THEPORT(A0),A0 ;GET CURRENT GRAFPORT
|
|
MOVE.L PICSAVE(A0),d0 ;GET PICSAVE HANDLE
|
|
beq.s @AllDone
|
|
move.l d0,a0
|
|
MOVE.L (A0),A0 ;DE-REFERENCE PICSAVE
|
|
tst PICVERSION(A0) ;IS IT AN OLD PICTURE?
|
|
BEQ.S @AllDone ;=>YES, DON'T PAD
|
|
MOVE.L THEPIC(A0),A0 ;GET THEPIC HANDLE <KON 6/4/92>
|
|
MOVE.L (A0),A0 ;POINT AT THE PIC <KON 6/4/92>
|
|
MOVE PICSIZE(A0),D0 ;GET THE LOW WORD OF THE SIZE <KON 6/4/92>
|
|
and.b #1,d0 ;odd?
|
|
beq.s @OneZero
|
|
moveq #0,d0
|
|
jsr DPutPicByte ;put d0=0 to picture
|
|
moveq #0,d0
|
|
@OneZero
|
|
jsr DPutPicByte ;should be odd aligned after this
|
|
@AllDone
|
|
rts ;return to called ROM routine
|
|
ENDPROC
|
|
|
|
CheckPic PROC EXPORT
|
|
IMPORT ROMEqualRgn,ROMCopyRgn
|
|
IMPORT DPutPicByte,PutPicLong
|
|
;---------------------------------------------------------------
|
|
;
|
|
; PROCEDURE CheckPic;
|
|
;
|
|
; PUT GRAFGLOBALS IN A4, THEPORT IN A3, AND CHECK PICSAVE.
|
|
; IF PICSAVE IS NIL, RETURN FLAGS LE.
|
|
;
|
|
; IF PICSAVE NOT NIL, RETURN FLAGS GT, AND
|
|
; CHECK FOR CHANGES IN FGCOLOR, BKCOLOR, ORIGIN, AND CLIPRGN.
|
|
;
|
|
;
|
|
MOVE.L D7,-(SP) ;SAVE REGS
|
|
MOVE.L GRAFGLOBALS(A5),A4 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L THEPORT(A4),A3 ;POINT TO CURRENT GRAFPORT
|
|
TST.L PICSAVE(A3) ;ARE WE SAVING FOR A PICTURE ?
|
|
BEQ DONE ;NO, QUIT
|
|
CMP #-1,PNVIS(A3) ;IS PEN HIDDEN MORE THAN ONE ?
|
|
BLT DONE ;YES, DON'T ADD TO THEPIC
|
|
|
|
MOVE.L PICSAVE(A3),A4 ;YES, GET PICSAVE HANDLE
|
|
MOVE.L (A4),A4 ;DE-REFERENCE PICSAVE
|
|
;
|
|
; CHECK FOR CHANGES IN FOREGROUND COLOR
|
|
;
|
|
MOVE.L FGCOLOR(A3),D7 ;GET FORGROUND COLOR
|
|
CMP.L PICFGCOLOR(A4),D7 ;HAS IT CHANGED ?
|
|
BEQ.S FGCOLOK ;NO, CONTINUE
|
|
;
|
|
; Do alignement for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$0E,D0
|
|
JSR DPutPicByte ;PUT FGCOLOR OPCODE
|
|
MOVE.L D7,-(SP)
|
|
JSR PutPicLong ;PUT FGCOLOR
|
|
MOVE.L PICSAVE(A3),A4 ;GET PICSAVE HANDLE
|
|
MOVE.L (A4),A4 ;DE-REFERENCE PICSAVE
|
|
MOVE.L D7,PICFGCOLOR(A4) ;UPDATE CURRENT STATE
|
|
FGCOLOK
|
|
;
|
|
; CHECK FOR CHANGES IN BACKGROUND COLOR
|
|
;
|
|
MOVE.L BKCOLOR(A3),D7 ;GET BACKGROUND COLOR
|
|
CMP.L PICBKCOLOR(A4),D7 ;HAS IT CHANGED ?
|
|
BEQ.S BKCOLOK ;NO, CONTINUE
|
|
;
|
|
; Do alignement for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$0F,D0
|
|
JSR DPutPicByte ;PUT BKCOLOR OPCODE
|
|
MOVE.L D7,-(SP)
|
|
JSR PutPicLong ;PUT BKCOLOR PARAM
|
|
MOVE.L PICSAVE(A3),A4 ;GET PICSAVE HANDLE
|
|
MOVE.L (A4),A4 ;DE-REFERENCE PICSAVE
|
|
MOVE.L D7,PICBKCOLOR(A4) ;UPDATE CURRENT STATE
|
|
BKCOLOK
|
|
;
|
|
; CHECK FOR ORIGIN CHANGES
|
|
;
|
|
MOVE.L PORTRECT+TOPLEFT(A3),D0 ;GET PORTRECT.TOPLEFT
|
|
CMP.L PICORIGIN(A4),D0 ;SAME AS PIC ORIGIN ?
|
|
BEQ.S ORIGNOK ;YES, CONTINUE
|
|
|
|
MOVE PORTRECT+LEFT(A3),D7 ;GET PORTRECT LEFT
|
|
SUB PICORIGIN+H(A4),D7 ;CALC DH
|
|
ADD D7,PICORIGIN+H(A4) ;UPDATE STATE VARIABLE
|
|
SWAP D7 ;PUT DH IN HI WORD
|
|
|
|
MOVE PORTRECT+TOP(A3),D7 ;GET PORTRECT TOP
|
|
SUB PICORIGIN+V(A4),D7 ;CALC DV
|
|
ADD D7,PICORIGIN+V(A4) ;UPDATE STATE VARIABLE
|
|
;
|
|
; Do alignement for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$0C,D0
|
|
JSR DPutPicByte ;PUT ORIGIN OPCODE TO THEPIC
|
|
MOVE.L D7,-(SP)
|
|
JSR PutPicLong ;PUT DH,DV TO THEPIC
|
|
MOVE.L PICSAVE(A3),A4 ;GET PICSAVE HANDLE
|
|
MOVE.L (A4),A4 ;DE-REFERENCE PICSAVE
|
|
;
|
|
; CHECK FOR CLIPRGN CHANGES
|
|
;
|
|
ORIGNOK CLR.B -(SP) ;MAKE ROOM FOR FCN VALUE
|
|
MOVE.L CLIPRGN(A3),-(SP) ;PUSH CLIPRGN
|
|
MOVE.L PICCLIPRGN(A4),-(SP) ;PUSH STATE VARIABLE
|
|
JSRROM ROMEqualRgn ;ARE THEY THE SAME ?
|
|
TST.B (SP)+ ;TEST RESULT
|
|
BNE.S CLIPOK ;QUIT IF SAME
|
|
|
|
MOVE.L CLIPRGN(A3),-(SP) ;SET UP FOR COPYRGN BELOW
|
|
MOVE.L PICCLIPRGN(A4),-(SP)
|
|
;
|
|
; Do alignement for new pictures
|
|
;
|
|
; tst.w picVersion(a4)
|
|
; beq.s @Pict1
|
|
jsr DoPict2 ;align for PICT2
|
|
;@Pict1
|
|
MOVEQ #$01,D0
|
|
JSR DPutPicByte ;PUT CLIPRGN PARAM OPCODE
|
|
MOVE.L CLIPRGN(A3),-(SP) ;PUSH CLIPRGN HANDLE
|
|
JSRROM ROMPutPicRgn ;PUT CLIPRGN TO THEPIC
|
|
|
|
JSRROM ROMCOPYRGN ;COPY CLIPRGN INTO PICCLIPRGN
|
|
|
|
CLIPOK
|
|
MOVE.L GRAFGLOBALS(A5),A4 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVEQ #1,D0 ;CLEAR ZERO FLAG
|
|
DONE MOVEM.L (SP)+,D7 ;MOVEM FOR CC, RESTORE REGS
|
|
RTS ;AND RETURN
|
|
|
|
|
|
;----------------------------------
|
|
PatchOpenPicture FUNC EXPORT
|
|
;------------------------------------------------------------------
|
|
;
|
|
; FUNCTION OpenPicture(picFrame: Rect): PicHandle;
|
|
;
|
|
; A6 OFFSETS OF PARAMS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 4
|
|
RESULT EQU PARAMSIZE+8 ;LONG, PICHANDLE
|
|
RECT EQU RESULT-4 ;LONG, ADDR OF RECT
|
|
|
|
LINK A6,#0 ;NO LOCALS
|
|
MOVEM.L A3-A4,-(SP) ;SAVE REGS
|
|
CLR.L RESULT(A6) ;INIT FCN RESULT TO NIL
|
|
MOVE.L GRAFGLOBALS(A5),A4 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L THEPORT(A4),A3 ;GET CURRENT GRAFPORT
|
|
TST.L PICSAVE(A3) ;ARE WE ALREADY SAVING ?
|
|
BNE DONE ;YES, RETURN NIL AND QUIT
|
|
_HidePen ;NO, TURN OFF DRAWING
|
|
;
|
|
; Abort OpenPicture if heap doesn't have at least 500 bytes.
|
|
;
|
|
MOVE.L #500,D0 ;GET BYTE COUNT
|
|
_NewHandle ;AT LEAST 500 BYTES IN THE HEAP ?
|
|
BNE DONE ;NO, RETURN NIL AND QUIT
|
|
_DisposHandle ;YES, Discard test handle
|
|
|
|
;
|
|
; ALLOCATE PICSAVE RECORD
|
|
;
|
|
MOVE.L #PICSAVEREC,D0 ;GET BYTE COUNT
|
|
_NewHandle ;ALLOCATE PICSAVE RECORD
|
|
MOVE.L A0,A4 ;GET RESULT HANDLE
|
|
MOVE.L A4,PICSAVE(A3) ;SAVE RESULT IN THEPORT
|
|
|
|
;
|
|
; Allocate handle for fond id's we have seen so far
|
|
;
|
|
; Format of picFontList handle is:
|
|
; handle size [long]
|
|
; # of entries - 1 used [word]
|
|
; id1, id2, ... idn
|
|
|
|
FontListSize equ 50*2
|
|
|
|
doFontList
|
|
moveq #FontListSize+6,d0 ;initial size for 50 entries
|
|
_NewHandle
|
|
move.l picSave(a3),a1 ;get picSave handle
|
|
move.l (a1),a1
|
|
move.l a0,picFontList(a1) ;save picFontList handle in picSave record
|
|
beq.s @noHandle
|
|
|
|
move.l (a0),a0 ;point into fontList
|
|
moveq #FontListSize+6,d0 ;initial size for 50 entries
|
|
move.l d0,(a0)+
|
|
clr.l (a0) ; 1 entry, first entry = 0
|
|
|
|
@noHandle
|
|
clr.w picVersion(a1) ;old picture
|
|
|
|
; Clear picQdRunSlop and picQdChExtra
|
|
|
|
clr.l picQdChExtra(a1) ; picQdChExtra := 0
|
|
clr.l picQdRunSlop(a1) ; picQdRunSlop := 0
|
|
|
|
; INIT GLYPH STATE TO INVALID
|
|
|
|
move.l #$80808080,picGlyphState(a1) ; set glyph state to invalid values
|
|
|
|
; Fall into original OpenPicture at the proper point.
|
|
|
|
jmpROM OpenPictptchEntry
|
|
Done jmpROM OpenPictDone
|
|
|
|
|
|
PatchClosePicture PROC EXPORT
|
|
;------------------------------------------------------------------
|
|
;
|
|
; PROCEDURE ClosePicture;
|
|
;
|
|
MOVEM.L D6-D7/A3,-(SP) ;SAVE REGS
|
|
MOVE.L GRAFGLOBALS(A5),A3 ;POINT TO QUICKDRAW GLOBALS
|
|
MOVE.L THEPORT(A3),A3 ;GET CURRENT GRAFPORT
|
|
MOVE.L PICSAVE(A3),D7 ;ARE WE SAVING A PICTURE ?
|
|
BEQ.S GOHOME ;NO, OOPS, EXIT
|
|
|
|
MOVE.L D7,A0 ;GET PICSAVE HANDLE <Nov02-89 KON>
|
|
MOVE.L (A0),A0 ;POINT TO PICSAVE RECORD <Nov02-89 KON>
|
|
move.l picFontList(a0),a0 ;get fontList handle <Nov02-89 KON>
|
|
_DisposHandle
|
|
; move picVersion(a0),d0
|
|
; bne.s @DoNewPicture
|
|
; jmpROM ClosePictptchEntry
|
|
;@DoNewPicture
|
|
|
|
MOVE #opEndPic,-(SP) ;YES, PUSH ENDPIC OPCODE
|
|
JSR PutPicOp ;PUT TO THEPIC
|
|
jmpROM ClosePictptchEntryNew
|
|
GoHome jmpROM ClosePictGoHome
|
|
ENDPROC
|
|
|
|
PatchOpenPort patchProc _OpenPort, (Plus,SE,Portable,II,IIci)
|
|
;-------------------------------------------------------------
|
|
;
|
|
; PROCEDURE OpenPort(port: GrafPtr);
|
|
;
|
|
move.l grafGlobals(a5),a0 ; load QuickDraw globals.
|
|
move.w #$8000,pnLocFixed(a0) ; reset pen fraction.
|
|
jmpOld ; join the original ROM code.
|
|
endproc
|
|
|
|
PatchInitPort patchProc _InitPort, (Plus,SE,Portable,II,IIci)
|
|
;-------------------------------------------------------------
|
|
;
|
|
; PROCEDURE InitPort(port: GrafPtr);
|
|
;
|
|
move.l grafGlobals(a5),a0 ; load QuickDraw globals.
|
|
move.w #$8000,pnLocFixed(a0) ; reset pen fraction.
|
|
jmpOld ; join the original ROM code.
|
|
endproc
|
|
|
|
PatchSetPort patchProc _SetPort, (Plus,SE,Portable,II,IIci)
|
|
;----------------------------------------------------------
|
|
;
|
|
; PROCEDURE SetPort(gp: GrafPtr);
|
|
;
|
|
move.l grafGlobals(a5),a0 ; load QuickDraw globals.
|
|
move.w #$8000,pnLocFixed(a0) ; reset pen fraction.
|
|
jmpOld ; join the original ROM code.
|
|
endproc
|
|
|
|
PatchLineTo patchProc _LineTo, (Plus,SE,Portable,II,IIci)
|
|
;----------------------------------------------------------
|
|
;
|
|
; PROCEDURE LineTo(h,v: INTEGER);
|
|
;
|
|
move.l grafGlobals(a5),a0 ; load QuickDraw globals.
|
|
move.w #$8000,pnLocFixed(a0) ; reset pen fraction.
|
|
jmpOld ; join the original ROM code.
|
|
endproc
|
|
|
|
PatchLine patchProc _Line, (Plus,SE,Portable,II,IIci)
|
|
;----------------------------------------------------------
|
|
;
|
|
; PROCEDURE Line(dh,dv: INTEGER);
|
|
;
|
|
move.l grafGlobals(a5),a0 ; load QuickDraw globals.
|
|
move.w #$8000,pnLocFixed(a0) ; reset pen fraction.
|
|
jmpOld ; join the original ROM code.
|
|
endproc
|
|
|
|
PatchMoveTo patchProc _MoveTo, (Plus,SE,Portable,II,IIci)
|
|
;----------------------------------------------------------
|
|
;
|
|
; PROCEDURE MoveTo(h,v: INTEGER);
|
|
;
|
|
move.l grafGlobals(a5),a0 ; load QuickDraw globals.
|
|
move.w #$8000,pnLocFixed(a0) ; reset pen fraction.
|
|
jmpOld ; join the original ROM code.
|
|
endproc
|
|
|
|
PatchMove patchProc _Move, (Plus,SE,Portable,II,IIci)
|
|
;----------------------------------------------------------
|
|
;
|
|
; PROCEDURE Move(dh,dv: INTEGER);
|
|
;
|
|
move.l grafGlobals(a5),a0 ; load QuickDraw globals.
|
|
move.w #$8000,pnLocFixed(a0) ; reset pen fraction.
|
|
jmpOld ; join the original ROM code.
|
|
endproc
|
|
|
|
PatchShowCursor PROC EXPORT
|
|
;----------------------------------------------------------
|
|
;
|
|
; PROCEDURE ShowCursor();
|
|
;
|
|
|
|
MOVE.B #1,CRSRBUSY ;MARK CHANGE IN PROGRESS
|
|
ADDQ #1,CRSRSTATE ;CURSOR HIDDEN ONE LESS DEEP
|
|
BLT.S DoneHide ;QUIT IF STILL HIDDEN
|
|
clr.b CrsrObscure ;unobscure if level goes +
|
|
subq #1,CrsrState ; setup for ROMÕs ADDQ #1 <21>
|
|
jmpOld ; call the ROM (or other patcher) <21>
|
|
DoneHide
|
|
jmpROM ROMShowCrsr
|
|
|
|
endproc
|
|
|
|
;=========================================================================================
|
|
;=========================================================================================
|
|
;
|
|
; Patch SeedFill and CalcMask to check both up and down on the first pass of filling
|
|
;
|
|
;=========================================================================================
|
|
;=========================================================================================
|
|
|
|
SeedFill PROC EXPORT
|
|
EXPORT CalcMask
|
|
|
|
;-------------------------------------------------------------------------
|
|
;
|
|
; PROCEDURE SeedFill(srcPtr,dstPtr: Ptr;
|
|
; srcRow,dstRow,height,words: INTEGER;
|
|
; seedH,seedV: INTEGER)
|
|
;
|
|
MOVE.L (SP)+,A0 ;pop return addr
|
|
MOVEQ #-1,D0 ;get a long of -1
|
|
MOVE.L D0,-(SP) ;push edge = all ones
|
|
BRA.S SHARE ;share common code
|
|
|
|
|
|
;-------------------------------------------------------------------------
|
|
;
|
|
; PROCEDURE CalcMask(srcPtr,dstPtr: Ptr;
|
|
; srcRow,dstRow,height,words: INTEGER);
|
|
;
|
|
CalcMask MOVE.L (SP)+,A0 ;pop return addr
|
|
MOVEQ #-1,D0 ;get a long of -1
|
|
MOVE.L D0,-(SP) ;push seed = (-1,-1)
|
|
CLR.L -(SP) ;push edge = zeros
|
|
SHARE MOVE.L A0,-(SP) ;restore return addr
|
|
|
|
|
|
|
|
;-------------------------------------------------------------------------
|
|
;
|
|
; LOCAL PROCEDURE MakeMask(srcPtr,dstPtr: Ptr;
|
|
; srcRow,dstRow,height,words: INTEGER;
|
|
; seedH,seedV: INTEGER;
|
|
; edge: LongInt);
|
|
;
|
|
; A6 OFFSETS OF PARAMS AND LOCALS AFTER LINK:
|
|
;
|
|
PARAMSIZE EQU 24
|
|
srcPtr EQU PARAMSIZE+8-4 ;long
|
|
dstPtr EQU srcPtr-4 ;long
|
|
srcRow EQU dstPtr-2 ;word
|
|
dstRow EQU srcRow-2 ;word
|
|
height EQU dstRow-2 ;word
|
|
words EQU height-2 ;word
|
|
seedH EQU words-2 ;word
|
|
seedV EQU seedH-2 ;word
|
|
edge EQU seedV-4 ;long
|
|
|
|
|
|
dstBump EQU -2 ;word
|
|
saveStk EQU dstBump-4 ;long
|
|
varSize EQU saveStk ;total locals
|
|
|
|
|
|
LINK A6,#varSize ;allocate stack frame
|
|
MOVEM.L D3-D7/A2-A4,-(SP) ;save regs
|
|
MOVE.L SP,saveStk(A6) ;save stack pointer
|
|
|
|
;
|
|
; prepare height and words for DBRA count. Quit if either <= 0.
|
|
;
|
|
MOVE words(A6),D5 ;get count of words
|
|
BLE GOHOME ;quit if words <= 0
|
|
SUB #1,D5 ;subtract 1 for DBRA count
|
|
SUB #1,height(A6) ;convert height to DBRA
|
|
BLT GOHOME ;quit if height <= 0
|
|
|
|
;
|
|
; init dst to all ones:
|
|
;
|
|
MOVE words(A6),D0 ;get # of words
|
|
ADD D0,D0 ;double for bytes
|
|
MOVE dstRow(A6),D1 ;get dstRow
|
|
SUB D0,D1 ;subtract bytes for dstBump
|
|
MOVE D1,dstBump(A6) ;save dstBump for later
|
|
MOVE.L dstPtr(A6),A2 ;point to dst
|
|
MOVEQ #-1,D0 ;get some black
|
|
MOVE height(A6),D3 ;init DBRA rowCount
|
|
BLACK1 MOVE D5,D2 ;init DBRA wordCount
|
|
BLACK2 MOVE D0,(A2)+ ;put a word of black
|
|
DBRA D2,BLACK2 ;loop all words in row
|
|
ADD D1,A2 ;bump to next row
|
|
DBRA D3,BLACK1 ;loop height rows
|
|
|
|
;
|
|
; clear one dst pixel at seedH,seedV
|
|
;
|
|
MOVE seedV(A6),D0 ;get seed vert coord
|
|
BLT.S NOSEED ;skip if neg (no seed)
|
|
MULU dstRow(A6),D0 ;mul times dst row
|
|
MOVE.L dstPtr(A6),A0 ;point to dst
|
|
ADD.L D0,A0 ;add vertical offset <EHB 28-Oct-85>
|
|
MOVE seedH(A6),D0 ;get seed horiz coord
|
|
MOVE D0,D1 ;copy seedH
|
|
ASR #3,D0 ;div by 8 for byte
|
|
NOT D1 ;invert bit number
|
|
BCLR D1,0(A0,D0) ;clear seed pixel
|
|
NOSEED
|
|
;
|
|
; allocate a scanline buffer of ones or zeros on the stack:
|
|
;
|
|
MOVE.L edge(A6),D6 ;get zero or all ones
|
|
MOVE D5,D1 ;get longCount
|
|
NEXTBUF MOVE D6,-(SP) ;write a word of ones or zeros
|
|
DBRA D1,NEXTBUF ;loop all words
|
|
|
|
MOVE.L srcPtr(A6),A0 ;point to top of src
|
|
MOVE.L dstPtr(A6),A2 ;point to top of dst
|
|
st d7 ;set dirty flag to force <KON 24JAN91>
|
|
; bra.s FirstPass ;search up and down <KON 24JAN91>
|
|
;NXTPASS SF D7 ;clear dirty flag
|
|
FirstPass
|
|
jmpROM ROMSeedFill
|
|
GoHome
|
|
jmpROM ROMGoHome
|
|
ENDPROC
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
INCLUDE 'DrawPicture32Patch.a'
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
ROMs Plus,SE,Portable
|
|
|
|
JShowCursor EQU $0804 ;this shouldn't be here
|
|
|
|
MakePatch CalcMask,$A838 ; CalcMask and SeedFill need to <KON 24JAN91>
|
|
MakePatch SeedFill,$A839 ; always scan up as well as down <KON 24JAN91>
|
|
MakePatch StretchBits, $AB27
|
|
MakePatch PatchShowCursor, JShowCursor
|
|
MakePatch PatchStdRect, $A8A0
|
|
MakePatch PatchStdLine, $A890
|
|
MakePatch PatchStdRRect, $A8AF
|
|
MakePatch PatchStdOval, $A8B6
|
|
MakePatch PatchStdArc, $A8BD
|
|
MakePatch PatchStdComment, $A8F1
|
|
|
|
MakePatch NewStdGetPic, $A8EE
|
|
MakePatch PatchOpenPicture, $A8F3
|
|
MakePatch PatchClosePicture, $A8F4
|
|
MakePatch GetPMData, $ABC4
|
|
MakePatch OpenCPicture, $AA20
|
|
MakePatch QDExtDispatcher, $AB1D
|
|
MakePatch VisRgnChanged, $A0A5, (Plus,SE,Portable,II,IIci)
|
|
|
|
MakePatch PatchStdBits, $A8EB ;used to be Plus, SE only
|
|
|
|
;
|
|
; RGBForeColor, RGBBackColor, GetForeColor, GetBackColor, and QDError
|
|
;
|
|
MakePatch RGBForeColor, $AA14
|
|
MakePatch RGBBackColor, $AA15
|
|
MakePatch GetForeColor, $AA19
|
|
MakePatch GetBackColor, $AA1A
|
|
MakePatch QDError, $AA40
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
ROMs Plus, SE
|
|
|
|
MakePatch PicItemPlusSE, $AB9A
|
|
MakePatch PatchStdPoly, $A8C5
|
|
MakePatch BitMapRgnptch, $A8D7
|
|
MakePatch PlusSEDrawPicture, $A8f6
|
|
|
|
ROMs Portable, SE
|
|
MakePatch PatchStdRgnSEPortable, $A8D1
|
|
|
|
ROMs Plus
|
|
MakePatch PatchStdRgnPlus, $A8D1
|
|
; ---------------------------------------------------------------------------
|
|
|
|
ROMs Portable
|
|
MakePatch PicItemPortable, $AB9A
|
|
MakePatch PortablePatchStdPoly, $A8C5
|
|
MakePatch PortableDrawPicture, $A8f6
|
|
|
|
; ---------------------------------------------------------------------------
|
|
|
|
END
|