home *** CD-ROM | disk | FTP | other *** search
- INCLUDE "exec/types.i"
- INCLUDE "graphics/gfx.i"
- INCLUDE "graphics/rastport.i"
-
- csect str.o,0,0,1,2
-
- XDEF _stretch
-
- UPPER_SIDE EQU 3
- LOWER_SIDE EQU 4
- HORIZ_ONLY EQU 6
-
- RASTPORT EQU 48
- X_COORD EQU 52
- Y_COORD EQU 56
- WIDTH EQU 60
- HEIGHT EQU 64
- MODE EQU 68
-
- INNER_WIDTH EQU 76
- INNER_HEIGHT EQU 80
-
- _stretch MOVEM.L D2-D7/A2-A6,-(A7)
- MOVEA.L RASTPORT(A7),A0
- MOVEA.L rp_BitMap(A0),A0
- MOVE.W bm_BytesPerRow(A0),D7
- MOVE.L HEIGHT(A7),D6
- MOVE.W D6,D2
- SUBQ.W #1,D2
- MOVE.W D2,D4
- CMPI.L #HORIZ_ONLY,MODE(A7)
- BNE upper_side
- horiz_only MOVE.W D2,D3
- SUBQ.W #1,D3
- MOVEQ #-2,D0
- MOVEQ #-2,D1
- BRA counters_set
- upper_side MOVE.L HEIGHT(A7),D6
- ASR.W #1,D6
- CMPI.L #LOWER_SIDE,MODE(A7)
- BEQ lower_side
- CMPI.L #UPPER_SIDE,MODE(A7)
- BNE exit
- SUBQ.W #1,D6
- MOVEQ #-1,D0
- MOVEQ #-2,D1
- BRA sides
- lower_side MOVEQ #1,D4
- MOVEQ #1,D0
- MOVEQ #2,D1
- sides MOVE.W D6,D2
- MOVE.W D2,D3
- counters_set MOVE.W D4,D5
- SUBQ.W #1,D5
- MOVE.L Y_COORD(A7),D6
- ADD.W D6,D2
- ADD.W D6,D3
- ADD.W D6,D4
- ADD.W D6,D5
- MOVE.L WIDTH(A7),D6
- ADD.L X_COORD(A7),D6
- SUBQ.L #1,D6
- MOVEA.W D6,A6
- ASR.L #3,D6
- MULS.W D7,D2
- ADD.L D6,D2
- MULS.W D7,D3
- ADD.L D6,D3
- MOVE.W A6,D6
- ANDI.W #7,D6
- MOVEA.W #7,A6
- SUBA.W D6,A6
- MOVE.W A6,D6
- SWAP D6
- MOVEA.L D6,A6
- MOVE.L WIDTH(A7),D6
- ASL.L #1,D6
- ADD.L X_COORD(A7),D6
- SUBQ.L #1,D6
- MOVEA.W D6,A6
- ASR.L #3,D6
- MULS.W D7,D4
- ADD.L D6,D4
- MULS.W D7,D5
- ADD.L D6,D5
- MULS.W D7,D0
- MULS.W D7,D1
- MOVE.L WIDTH(A7),D6
- ASR.L #3,D6
- ADD.L D6,D0
- ASL.L #1,D6
- ADD.L D6,D1
- MOVEQ #0,D7
- MOVE.B bm_Depth(A0),D7
- SUBQ.B #1,D7
- ASL.B #2,D7
- plane_loop MOVEA.L bm_Planes(A0,D7.W),A1
- MOVEA.L A1,A2
- ADDA.L D2,A2
- MOVEA.L A1,A3
- ADDA.L D3,A3
- MOVEA.L A1,A4
- ADDA.L D4,A4
- MOVEA.L A1,A5
- ADDA.L D5,A5
- MOVEM.L D2-D5,-(A7)
- MOVE.L INNER_HEIGHT(A7),D3
- ASR.B #1,D3
- SUBQ.B #1,D3
- line_loop MOVE.L INNER_WIDTH(A7),D2
- SUBQ.W #1,D2
- MOVE.L A6,D4
- ANDI.B #7,D4
- MOVEQ #7,D5
- SUB.B D4,D5
- SWAP D4
- pixel_loop BTST.B D4,(A2)
- BEQ reset_bit_1
- BSET.B D5,(A4)
- ADDQ.B #1,D5
- BSET.B D5,(A4)
- BRA bit_set_1
- reset_bit_1 BCLR.B D5,(A4)
- ADDQ.B #1,D5
- BCLR.B D5,(A4)
- bit_set_1 SUBQ.B #1,D5
- BTST.B D4,(A3)
- BEQ reset_bit_2
- BSET.B D5,(A5)
- ADDQ.B #1,D5
- BSET.B D5,(A5)
- BRA bit_set_2
- reset_bit_2 BCLR.B D5,(A5)
- ADDQ.B #1,D5
- BCLR.B D5,(A5)
- bit_set_2 ADDQ.B #1,D4
- ANDI.B #7,D4
- BNE no_next_source
- SUBA.L #1,A2
- SUBA.L #1,A3
- no_next_source ADDQ.B #1,D5
- ANDI.B #7,D5
- BNE no_next_dest
- SUBA.L #1,A4
- SUBA.L #1,A5
- no_next_dest DBRA D2,pixel_loop
- ADDA.L D0,A2
- ADDA.L D0,A3
- ADDA.L D1,A4
- ADDA.L D1,A5
- DBRA D3,line_loop
- MOVEM.L (A7)+,D2-D5
- SUBQ.B #4,D7
- BPL plane_loop
- exit MOVEM.L (A7)+,D2-D7/A2-A6
- RTS
-
- END
-