home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 2
/
crawlyvol2.bin
/
apps
/
dtp
/
pgsmodst
/
atariimp
/
macpaint.s
< prev
next >
Wrap
Text File
|
1991-06-17
|
10KB
|
448 lines
Include "equ.h"
Include "impequ.h"
SECTION MACPAINT,CODE,PUBLIC
***************************************************
*** ***
***************************************************
dumbentry:
clr.l d0
rts
dc.l "IMPP" ; magik number for pic import
dc.w 200
dc.l 0
table: dc.l 0
dc.l name,special,check,macp
***************************************
** Is it really a MacPaint file? **
***************************************
check: move.l table,a0
move.l buff1(a0),a1
move.l (a1),a1
add.l #65,a1
lea test,a0
moveq #3,d0
ck0: cmp.b (a1)+,(a0)+
bne never
dbf d0,ck0
bra right
***************************************
** **
***************************************
macp: move.l sp,savesp
move.l table,a0
move.l flen(a0),a0
move.l (a0),piclength
move.l table,a0
move.l f_openr(a0),a0
jsr (a0)
beq rrts
move.l table,a0
move.l spclnum(a0),a0
cmp.w #1,(a0)
beq impobj
***************************************
** **
***************************************
imppic: move.l table,a0
move.l p_open(a0),a0
jsr (a0)
beq rrts
bsr getpicinfo
move.l table,a4
move.l cwptr(a4),a4 ;ptr to window handle
move.l (a4),a4 ;window handle
move.l (a4),a4 ;ptr to window structure
lea pic,a0
move.w pc_Type(a0),pi_Type(a4)
move.w pc_SFreq(a0),pi_SFreq(a4)
move.w pc_SAngle(a0),pi_SAngle(a4)
move.w pc_SSpot(a0),pi_SSpot(a4)
move.l pc_SMap(a0),pi_SMap(a4)
move.l pc_SMap+4(a0),pi_SMap+4(a4)
move.w pc_XDpi(a0),pi_XDpi(a4)
move.w pc_YDpi(a0),pi_YDpi(a4)
move.w pc_W(a0),pi_W(a4)
move.w pc_H(a0),pi_H(a4)
move.w pc_Width(a0),pi_Width(a4)
move.w pc_BitPln(a0),pi_BitPln(a4)
move.w pc_Palet(a0),pi_Palet(a4)
move.w pi_Palet(a4),d1
mulu #pl_Sizeof,d1
move.w pi_Width(a4),d0
mulu pi_BitPln(a4),d0
mulu pi_H(a4),d0
add.l d1,d0 ;size of bitmap +( 4 words * #colors)
clr.w d1
clr.w d2
move.l table,a0
move.l m_alloc(a0),a0
jsr (a0)
beq abortpic
move.l table,a3
move.l cwptr(a3),a3
move.l (a3),a3
move.l (a3),a3
move.l a0,pi_Ptr(a3)
move.l (a0),a4
move.l a4,picptr
bsr putpic
move.l table,a0
move.l p_close(a0),a0
jsr (a0)
move.l table,a0
move.l f_closer(a0),a0
jmp (a0)
abortpic:
bsr purgepic
move.l table,a0
move.l p_abort(a0),a0
jsr (a0)
abort0: move.l table,a0
move.l f_closer(a0),a0
jmp (a0)
***************************************
** **
***************************************
impobj: move.l table,a0
move.l o_open(a0),a0
jsr (a0)
beq abort0
bsr getpicinfo
move.b #tpic,object+ob_Type
clr.l object+ob_Left
clr.l object+ob_Top
move.w pic+pc_W,d1
move.l #7200,d0
bsr Mulu1632
move.w pic+pc_XDpi,d2
bsr Divu1648
move.l d0,object+ob_Right
move.w pic+pc_H,d1
move.l #7200,d0
bsr Mulu1632
move.w pic+pc_YDpi,d2
bsr Divu1648
move.l d0,object+ob_Bottom
clr.b object+ob_Flag
clr.w object+ob_Slant
clr.w object+ob_Twist
move.w #50,object+ob_LWidth ;1 point line
clr.b object+ob_LType ;no line
move.b #1,object+ob_LColor ;black line
clr.b object+ob_FType ;no fill
move.b #1,object+ob_FColor ;black fill
clr.b object+ob_LBegin
clr.b object+ob_LEnd
move.w #900,object+ob_HStandOff ;1/8 inch
move.w #900,object+ob_VStandOff ;1/8 inch
*
*
move.l table,a1
move.l o_obj(a1),a1
lea object,a0
jsr (a1)
beq abortobj
move.w pic+pc_Width,d0
mulu pic+pc_BitPln,d0
mulu pic+pc_H,d0
move.w pic+pc_Palet,d1
mulu #pl_Sizeof,d1
add.l d1,d0
add.l #pc_Sizeof,d0
move.l table,a0
move.l o_malloc(a0),a0
jsr (a0)
beq abortobj
lea pic,a1
clr.l pc_DPtr(a1)
clr.w pc_DScale(a1)
move.w pc_Palet(a1),d0
mulu #pl_Sizeof,d0
add.l #pc_Sizeof,d0
move.l d0,pc_Ptr(a1)
move.w #pc_Sizeof/2-1,d0
oppic1: move.w (a1)+,(a0)+
dbf d0,oppic1
move.l a0,picptr
bsr putpic
move.l table,a0
move.l o_close(a0),a0
jsr (a0)
move.l table,a0
move.l f_closer(a0),a0
jmp (a0)
abortobj:
bsr purgepic
move.l table,a0
move.l o_abort(a0),a0
jsr (a0)
move.l table,a0
move.l f_closer(a0),a0
jmp (a0)
*******************************************
*** ***
*******************************************
getpicinfo:
lea pic,a0
move.w #pc_Sizeof-1,d0
gpi1: clr.b (a0)+
dbra d0,gpi1
clr.l picture
move.l table,a1
move.l piclength,d0
clr.w d1
clr.w d2
move.l m_alloc(a1),a1
jsr (a1) ;allocate memory for the picture
move.l a0,picture
clr.l picoffset
move.l (a0),a0 ;read in the entire picture
move.l piclength,d0
move.l table,a1
move.l f_getr(a1),a1
jsr (a1)
beq errrts
gpi2: lea pic,a0
clr.l d0
move.b #PC_BW,d0
move.w d0,pc_Type(a0)
move.w #-1,pc_SFreq(a0)
move.w #-1,pc_SAngle(a0)
move.w #0,pc_SSpot(a0)
move.l #0,pc_SMap(a0)
move.l #0,pc_SMap+4(a0)
move.w #72,pc_XDpi(a0)
move.w #72,pc_YDpi(a0)
move.w #576,pc_W(a0) ;always this width
move.w #720,pc_H(a0) ;always this height
move.w #72,pc_Width(a0) ;bytes per row
move.w #1,pc_BitPln(a0)
move.w #0,pc_Palet(a0)
rts
*******************************************
*** ***
*******************************************
putpic:
clr.l picoffset
move.w pic+pc_Width,d0 ;set amiga bitmap to all white ($ff)
mulu pic+pc_BitPln,d0
mulu pic+pc_H,d0
move.l d0,d1
swap d1
move.l picptr,a0
bra pp2
pp1: move.b #$00,(a0)+
pp2: dbf d0,pp1
dbf d1,pp1
move.l picture,a0
move.l (a0),a0
add.l #640,a0 ;push a0 ahead to the pict data
bsr pckcomp
bra purgepic
**********************************
** **
**********************************
pckcomp:
clr.l d6
clr.l d0
move.w #720,d5 ;always 720 rows tall
move.w pic+pc_W,d6 ;d6 = number of bytes in row
add.w #7,d6
lsr.w #3,d6
move.w d6,d0 ;d0 = save d6
bra pk8
pk1: move.w d0,d6 ;reset d6 to number of bytes in row
move.l picptr,a1 ;a1 = adress in amiga bitmap
pk2: clr.l d1
move.b (a0)+,d1 ;d1 = one byte code
cmp.b #128,d1
beq.s pk2 ;code 128 = do nothing, so get next byte
btst #7,d1 ;check the high bit
beq op2 ;if 0 copy the next d1+1 bytes as is
op1: neg.b d1 ;else copy the next byte -d1+1 times
sub.b d1,d6 ;decrement row byte count
subq.w #1,d6
move.b (a0)+,d2 ;get the byte to copy
op12: move.b d2,(a1)+ ;copy the byte
dbf d1,op12 ;loop until done (d1=-1)
bra pk6
op2: sub.b d1,d6 ;decrement row byte count
subq.w #1,d6
op22: move.b (a0)+,(a1)+
dbf d1,op22
pk6: tst.w d6 ;are we done with a row yet
bne pk2 ;no - keep going
move.l a1,d6
btst #0,d6 ;did we end on an odd address
beq pk7
move.b #0,(a1)+
pk7: move.l picptr,a1
add.w pic+pc_Width,a1
move.l a1,picptr
pk8: dbf d5,pk1
rts
***********************************
*** ***
***********************************
Mulu1632:
move.l table,a0
move.l mulu1632(a0),a0
jmp (a0)
***********************************
*** ***
***********************************
Divu1648:
move.l table,a0
move.l divu1648(a0),a0
jmp (a0)
***********************************
*** ***
***********************************
errrts: bsr purgepic
move.l savesp,sp
rrts: rts
purgepic:
tst.l picture
beq rrts
move.l picture,a0
move.l table,a1
move.l m_delete(a1),a1
jsr (a1)
rts
*******************************************************************
*** called when the import routine choosen finds something ***
*** wrong with the file loaded. ***
*******************************************************************
never: clr.w d0
rts
maybe: move.w #1,d0
rts
right: move.w #2,d0
rts
*************************************************************
*************************************************************
SECTION MACPAINT,DATA,PUBLIC
special:
dc.w 2
dc.l spcl1,spcl2
vers: dc.b "$VER: "
name: dc.b "MacPaint v2.0.2",0
spcl1: dc.b "Picture Window",0
spcl2: dc.b "Object",0
test: dc.b "PNTG",0
SECTION MACPAINT,BSS,PUBLIC
temp: ds.l 1
temp2: ds.l 1
savesp: ds.l 1
picptr: ds.l 1
pptr: ds.l 1
pic: ds.w pc_Sizeof/2
object: ds.w ob_SizeOf/2
picture: ds.l 1
picoffset: ds.l 1
piclength: ds.l 1
****************************** CHANGES ************************************
;
; version 2.0.2
;
; - added a version string
;
;
; version 2.0.1
;
; - changed the default pc_SFreq and pc_SAngle from 0 to -1
;
; - now only checks the TYPE field for PNTG (not creator for MPNT)
;
;
; version 2.0.0
;
; - initial release (shipped with PgS v2.0)