home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 2
/
crawlyvol2.bin
/
apps
/
dtp
/
pgsmodst
/
atariimp
/
img.s
< prev
next >
Wrap
Text File
|
1991-05-23
|
8KB
|
501 lines
Include "equ.h"
Include "impequ.h"
SECTION img,CODE,PUBLIC
***************************************************
*** ***
***************************************************
dumbentry:
clr.l d0
rts
dc.l "IMPP"
dc.w 200
dc.l 0
table: dc.l 0
dc.l name,special,check,img
*
* IMG bit image file format
*
* the first 32k of the image is in buff1
*
check: move.l table,a0
move.l buff1(a0),a1
move.l (a1),a1
cmp.w #1,(a1)+
bne never
cmp.w #8,(a1)
bne never
; move.l fname(a0),a1
;cimg2: move.b (a1)+,d0
; beq maybe
; cmp.b #'.',d0
; bne cimg2
; cmp.b #'I',(a1)+
; bne maybe
; cmp.b #'M',(a1)+
; bne maybe
; cmp.b #'G',(a1)
; bne maybe
moveq #2,d0 ;it's a match
irts: rts
*
*
*
***********************************************************
*** ***
***********************************************************
img: move.l table,a0
move.l spclnum(a0),a0
cmp.w #1,(a0)
beq imgobj
*
*
imgpic: bsr getpicinfo
move.l table,a0
move.l p_open(a0),a0
jsr (a0)
beq irts
move.l table,a4
move.l cwptr(a4),a4
move.l (a4),a4
move.l (a4),a4
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_Width(a4),d0
mulu pi_BitPln(a4),d0
mulu pi_H(a4),d0
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:
move.l table,a0
move.l p_abort(a0),a0
jsr (a0)
move.l table,a0
move.l f_closer(a0),a0
jmp (a0)
***********************************************************
*** ***
***********************************************************
imgobj: bsr getpicinfo
move.l table,a0
move.l o_open(a0),a0
jsr (a0)
beq irts
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
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.l #pc_Sizeof,pc_Ptr(a1)
move.w #pc_Sizeof/2-1,d0
oppic1: move.w (a1)+,(a0)+
dbf d0,oppic1
move.l a0,picptr
bsr putpic
*
* end of input file. close and flush buffer
*
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:
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:
move.l table,a0
move.l f_openr(a0),a0
jsr (a0)
beq irts
move.l table,a1
move.l buff1(a1),a0
move.l (a0),a0
move.l #16,d0
move.l f_getr(a1),a1
jsr (a1)
beq irts
move.l table,a0
move.l buff1(a0),a0
move.l (a0),a0
move.w 4(a0),pic+pc_BitPln
move.w 6(a0),ptrn
move.w 8(a0),pxw
move.w 10(a0),pxh
move.w 12(a0),d0
move.w d0,pic+pc_W
add.w #15,d0
lsr.w #3,d0
bclr #0,d0
move.w d0,pic+pc_Width
move.w 14(a0),dheight
move.w dheight,pic+pc_H
move.w #PC_BW,pic+pc_Type
move.w #-1,pic+pc_SFreq ;default frequency
move.w #-1,pic+pc_SAngle ;default angle
clr.w pic+pc_SSpot
clr.l pic+pc_SMap
clr.l pic+pc_SMap+4
clr.w pic+pc_Palet ;number of color pallet entries
move.l #25500,d0
divu pxw,d0
move.w d0,pic+pc_XDpi ;x dots per inch
move.l #25500,d0
divu pxh,d0
move.w d0,pic+pc_YDpi ;y dots per inch
rts
*
*
*
putpic: move.w pic+pc_Width,d0
mulu pic+pc_H,d0
move.l d0,plane
move.w pic+pc_W,d0
add.w #7,d0
lsr.w #3,d0
move.w d0,wide
imgp3: move.l picptr,tpptr
move.w pic+pc_BitPln,temp2 ;do for each bitplane
imgp4: move.w wide,temp3
move.l tpptr,a0
clr.w rlecnt ;current rle count
move.w #1,vrepcnt
imgp5: move.l a0,-(sp)
jsr getnext
move.l (sp)+,a0
move.b d0,(a0)+
subq.w #1,temp3 ;next byte in row
bne imgp5
clr.b (a0)+
clr.b (a0)+
move.l plane,d0
add.l d0,tpptr
subq.w #1,temp2
bne imgp4 ;next bitplane row
*
*
move.w vrepcnt,d7
subq.w #1,d7
move.l picptr,a4
bra unc9
unc1: move.l a4,a3
move.w pic+pc_BitPln,d6
bra unc5
unc2: move.l a3,a1
move.l a2,a0
move.w wide,d5
bra unc4
unc3: move.b (a1)+,(a0)+
unc4: dbf d5,unc3
add.l plane,a3
add.l plane,a2
unc5: dbf d6,unc2
unc9: move.l picptr,a2
add.w pic+pc_Width,a2 ;width
move.l a2,picptr
subq.w #1,pic+pc_H
beq irts
dbf d7,unc1
bra imgp3 ;next scan line
***********************************************************
*** ***
***********************************************************
*
*
* IMG getnext byte from run length encoded? picture
* (something strange like it)
*
* rlecmd - 0 replicate zeros
* rlecmd - 1 replicate ones
* rlecmd - 2 from file
*
getnext:
subq.w #1,rlecnt
bcc more
gn1: clr.w rlecmd ;uncompressed
move.l table,a0
move.l f_get(a0),a0
jsr (a0)
and.w #$ff,d0
cmp.b #$80,d0 ;bit string
beq gn3
cmp.b #0,d0 ;pattern
beq gn4
tst.b d0
bpl gn2 ;zero replicate
move.w #1,rlecmd ; ones replicate
gn2: and.b #$7f,d0
move.w d0,rlecnt
bra getnext
gn3: move.l table,a0
move.l f_get(a0),a0
jsr (a0)
and.w #$ff,d0
move.w d0,rlecnt
move.w #2,rlecmd ;bit string
bra getnext
gn4: move.l table,a0
move.l f_get(a0),a0
jsr (a0)
tst.b d0
beq gn5 ;vertical replication count
and.w #$ff,d0
mulu ptrn,d0
move.w d0,rlecnt
lea pattern,a2
move.w ptrn,d1
bra gn4b
gn4a: move.l a2,-(sp)
move.w d1,-(sp)
move.l table,a0
move.l f_get(a0),a0
jsr (a0)
move.w (sp)+,d1
move.l (sp)+,a2
move.b d0,(a2)+
gn4b: dbf d1,gn4a
move.w #3,rlecmd ;pattern string
bra getnext
gn5: move.l table,a0
move.l f_get(a0),a0
jsr (a0)
cmp.b #$ff,d0
bne getnext
move.l table,a0
move.l f_get(a0),a0
jsr (a0)
and.w #$ff,d0
move.b d0,vrepcnt+1
clr.w rlecnt
bra getnext
*
*
more: cmp.w #1,rlecmd ;will take care of that for us.
beq rep_1
bcs rep_0
cmp.w #3,rlecmd
beq reppat
move.l table,a0
move.l f_get(a0),a0
jmp (a0)
reppat: move.w ptrn,d1
lea pattern,a0
move.b (a0),d0
bra repp2
repp1: move.b 1(a0),(a0)+
repp2: subq.w #1,d1
bne repp1
move.b d0,(a0)
rts
rep_1: move.w #$ff,d0
rts
rep_0: moveq #0,d0
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)
*******************************************************************
*** called when the import routine choosen finds something ***
*** wrong with the file loaded. ***
*******************************************************************
notright:
rts
never: moveq #0,d0
rts
maybe: moveq #1,d0
rts
right: moveq #2,d0
rts
*************************************************************
*************************************************************
SECTION img,DATA,PUBLIC
special:
dc.w 2
dc.l spcl1,spcl2
name: dc.b "IMG Bit Image File v2.0.0",0
spcl1: dc.b "Picture Window",0
spcl2: dc.b "Object",0
SECTION img,BSS,PUBLIC
*
bitpln: ds.w 1
colors: ds.w 1
wide: ds.w 1
dheight: ds.w 1
nxtscn: ds.w 1
pxh: ds.w 1
pxw: ds.w 1
plane: ds.l 1
pptr: ds.l 1
tpptr: ds.l 1
rlecmd: ds.w 1
rlecnt: ds.w 1
ptrn: ds.w 1
pattern: ds.l 2
vrepcnt: ds.w 1
temp1: ds.w 1
temp2: ds.w 1
temp3: ds.w 1
object: ds.w ob_SizeOf/2
array: ds.w 3
pic: ds.w pc_Sizeof/2
count: ds.l 1
len: ds.l 1
fhandle: ds.w 1
picptr: ds.l 1
*