home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-06-21 | 38.6 KB | 1,570 lines |
- Include "equ.h"
- Include "impequ.h"
-
- CR equ $d
- LF equ $a
-
- ;modes used to copy the data in PICT code $98 group
- SRCCOPY equ $0
- SRCOR equ $1
- SRCXOR equ $2
- SRCBIC equ $3
- NOTSRCCOPY equ $4
- NOTSRCOR equ $5
- NOTSRCXOR equ $6
- NOTSRCBIC equ $7
-
-
- SECTION maceps,CODE,PUBLIC
- *******************************************
- *** ***
- *******************************************
- dumbentry:
- clr.l d0
- rts
-
- dc.l "IMPO"
- dc.w 201
- dc.l 0
-
- table: dc.l 0
- dc.l name,special,check,eps
-
-
- *******************************************************
- * check file for Encapsulated PostScript in Data Fork *
- *******************************************************
- check: move.l table,a0
- move.l buff1(a0),a1
- move.l (a1),a1
- add.w #128,a1
- lea epsfhdr,a2
- chk1: cmp.b (a2)+,(a1)+
- bne never
- tst.b (a2)
- bne chk1
- moveq #2,d0
- rrts: rts
-
-
- *********************************
- * *
- *********************************
- eps: clr.l ehandle ;zero pointers to malloc'ed mem used later
- clr.l rhandle
- move.w #7,abit
-
- bsr geteps
- beq rrts
-
- move.b #teps,object+ob_Type
- clr.b object+ob_Flag
- clr.w object+ob_Slant
- clr.w object+ob_Twist
- move.w #50,object+ob_LWidth
- clr.b object+ob_LType
- move.b #1,object+ob_LColor
- clr.b object+ob_FType
- move.b #1,object+ob_FColor
- clr.b object+ob_LBegin
- clr.b object+ob_LEnd
- move.w #900,object+ob_HStandOff
- move.w #900,object+ob_VStandOff
-
- clr.l object+ob_Left
- clr.l object+ob_Top
- move.l eright,d0
- sub.l eleft,d0
- bpl eps1
- neg.l d0
- eps1: move.l etop,d1
- sub.l ebottom,d1
- bpl eps2
- neg.l d1
- eps2: mulu #100,d0
- mulu #100,d1
- move.l d0,object+ob_Right
- move.l d1,object+ob_Bottom
-
- move.l table,a0
- move.l o_open(a0),a0
- jsr (a0)
-
- move.l table,a1
- move.l o_obj(a1),a1
- lea object,a0
- jsr (a1)
- beq abortobj
-
- move.l elength,d0 ;alloc mem for eps obj
- add.l #eps_Sizeof,d0
- add.l #16,d0
- move.l table,a0
- move.l o_malloc(a0),a0
- jsr (a0)
- beq abortobj
-
- move.l table,a1 ;save an index to the eps obj
- move.l copybuf(a1),a1
- move.l (a1),a1
- move.l a0,d0
- sub.l (a1),d0
- move.l d0,eobj
-
- move.w #3,eps_Type(a0)
- move.l object+ob_Right,eps_Width(a0)
- move.l object+ob_Bottom,eps_Height(a0)
- clr.l eps_PicPtr(a0)
- clr.l eps_PlyPtr(a0)
- move.l elength,d0
- add.l #16,d0
- move.l d0,eps_DataLen(a0)
-
- lea eps_Sizeof(a0),a0
- move.l eleft,(a0)+
- move.l ebottom,(a0)+
- move.l eright,(a0)+
- move.l etop,(a0)+
-
- move.l ehandle,a1
- move.l (a1),a1
- move.l elength,d0
- move.l d0,d1
- swap d1
- bra ce2
- ce1: move.b (a1)+,(a0)+
- ce2: dbf d0,ce1
- dbf d1,ce1
-
- move.l ehandle,a0 ;free the mem for the eps read (data fork)
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- move.l table,a0 ;did they want the PICT stuff?
- move.l spclnum(a0),a0
- cmp.w #1,(a0)
- beq eps3 ;no, do NOT show picture - so exit
-
- *********************************************
- ;check for PICT resource and if found use it
- *********************************************
-
- bsr getpict ;get the PICT data
- beq eps3 ;if no PICT data found do not use it
-
- lea pic,a0
- clr.l pc_ID(a0)
- clr.l pc_ID+4(a0)
- clr.l pc_Version(a0)
- move.w #-1,pc_SFreq(a0)
- move.w #-1,pc_SAngle(a0)
- clr.w pc_SSpot(a0)
- clr.l pc_SMap(a0)
- clr.l pc_SMap+4(a0)
- move.w #72,pc_XDpi(a0)
- move.w #72,pc_YDpi(a0)
-
- move.w pc_W(a0),d0
- add.w #15,d0
- lsr.w #3,d0
- bclr #0,d0
- move.w d0,pc_Width(a0)
-
- clr.l pc_DPtr(a0)
- clr.w pc_DScale(a0)
- move.w pc_Palet(a0),d0
- mulu #pl_Sizeof,d0
- add.l #pc_Sizeof,d0
- move.l d0,pc_Ptr(a0) ;bitmap data begins n-bytes from object
-
- move.w pc_Width(a0),d0 ;alloc mem for bitmap obj
- mulu pc_BitPln(a0),d0
- mulu pc_H(a0),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
-
- move.l table,a1 ;link pic to eps obj
- move.l copybuf(a1),a1
- move.l (a1),a1
- move.l (a1),a1
- add.l eobj,a1
- move.l #1,eps_PicPtr(a1)
-
- lea pic,a1 ;copy pic obj data into allocated struct
- move.w #pc_Sizeof/2-1,d0
- pic1: move.w (a1)+,(a0)+
- dbf d0,pic1
-
- cmp.b #1,vers ;is this a version 1 PICT?
- beq pic2 ;yes
-
- move.l a0,palptr ;pointer to PgS color pal data
- move.l picture,a0 ;pointer to start of file color pal data
- bsr putpal
- move.l palptr,a0
- move.w pic+pc_Palet,d0
- mulu #pl_Sizeof,d0
- add.l d0,a0
-
- pic2: move.l a0,picptr ;save pointer to bitmap data start
- move.l a0,picptrsave
-
- clr.l d0
- move.w pic+pc_Width,d0 ;set amiga bitmap to all white ($00)
- mulu pic+pc_H,d0
- move.l d0,planesize ;save for later
- mulu pic+pc_BitPln,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 sp,spsave ;save the stack pointer incase of error in putpic
- move.l picture,a0
- bsr putpic ;get the picture data and put it into the pic obj
-
- move.l rhandle,d0 ;free mem required for rsrc fork (getpict)
- beq eps3
- move.l d0,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- eps3: move.l table,a0
- move.l o_close(a0),a0
- jmp (a0)
-
-
- ***********************************
- *** ***
- ***********************************
- abortobj:
- move.l ehandle,d0
- beq ab1
- move.l d0,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- ab1: move.l rhandle,d0
- beq ab2
- move.l d0,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- ab2: move.l table,a0
- move.l o_abort(a0),a0
- jmp (a0)
-
-
- ***********************************
- *** ***
- ***********************************
- rtok: moveq #1,d0
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- rtf0: move.l ehandle,d0
- beq rtf1
- move.l d0,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- rtf1: move.l rhandle,d0
- beq rtfail
- move.l d0,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- rtfail: moveq #0,d0
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- geteps: move.l table,a0
- move.l f_openr(a0),a0
- jsr (a0)
- beq rrts
-
- move.l table,a1
- move.l buff1(a1),a0
- move.l (a0),a0
- move.l #128,d0
- move.l f_getr(a1),a1
- jsr (a1)
-
- move.l table,a1
- move.l buff1(a1),a0
- move.l (a0),a0
- add.w #83,a0
- move.b (a0)+,elength
- move.b (a0)+,elength+1
- move.b (a0)+,elength+2
- move.b (a0)+,elength+3
-
- move.l table,a1
- move.l m_alloc(a1),a1
- move.l elength,d0
- clr.w d1
- clr.w d2
- jsr (a1)
- beq rtfail
-
- move.l a0,ehandle
-
- move.l table,a1
- move.l f_getr(a1),a1
- move.l (a0),a0
- move.l elength,d0
- jsr (a1)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jsr (a0)
-
- move.l ehandle,a0
- move.l (a0),a0
- move.l elength,d0
-
- move.l #0,eleft
- move.l #0,etop
- move.l #72,eright
- move.l #72,ebottom
- bra geps9
- geps6: lea bbstr,a1
- geps7: cmp.b (a0)+,(a1)+
- bne geps9
- subq.l #1,d0
- tst.b (a1)
- bne geps7
- bra geps10
-
- geps9: subq.l #1,d0
- bcc geps6
- bra geps11
- *
- * got a match
- *
- geps10: bsr getnum
- move.l d0,eleft
- bsr getnum
- move.l d0,ebottom
- bsr getnum
- move.l d0,eright
- bsr getnum
- move.l d0,etop
-
- geps11: bsr putzero
- beq rrts
-
- move.l elength,d0
- btst #0,d0
- beq even
- bsr putzero
- beq rrts
-
- even:
- ; rts
-
- *
- *
- *
- move.l ehandle,a0
- move.l (a0),a0
- move.l elength,d0
- bra gclr3
- gclr1: lea ccstr,a1
- gclr2: cmp.b (a0)+,(a1)+
- bne gclr3
- subq.l #1,d0
- tst.b (a1)
- bne gclr2
- bra gclr4
-
- gclr3: subq.l #1,d0
- bcc gclr1
- bra rtok
- *
- * got a match
- *
- gclr4: bsr getclr
- move.w d0,color+cl_Cyan
- bsr getclr
- move.w d0,color+cl_Magenta
- bsr getclr
- move.w d0,color+cl_Yellow
- bsr getclr
- move.w d0,color+cl_Black
- clr.w color+cl_Map
- clr.w color+cl_Type
- gclr5: move.b (a0)+,d0
- cmp.b #"(",d0
- beq gclr6
- cmp.b #" ",d0
- beq gclr5
- bra rtok
-
- gclr6: lea color+cl_Name,a1
- lea color+cl_Name+23,a2
- gclr7: move.b (a0)+,d0
- beq rtok
- cmp.b #")",d0
- beq gclr8
- cmp.b #CR,d0
- beq rtok
- cmp.b #LF,d0
- beq rtok
- move.b d0,(a1)+
- cmp.l a2,a1
- bcs gclr7
- subq.l #1,a1
- bra gclr7
-
- gclr8: clr.b (a1)
-
- move.l ehandle,a1
- sub.l (a1),a0
- move.l a0,-(sp)
-
- lea color,a0
- move.l table,a1
- move.l newcolor(a1),a1
- jsr (a1)
-
- move.l ehandle,a0
- move.l (a0),a0
- add.l (sp)+,a0
-
- gclr9: move.b (a0)+,d0
- beq rtok
- cmp.b #CR,d0
- beq gclr9
- cmp.b #LF,d0
- beq gclr9
- cmp.b #" ",d0
- beq gclr9
- cmp.b #"%",d0
- bne rtok
- cmp.b #"%",(a0)+
- bne rtok
- cmp.b #"+",(a0)+
- beq gclr4
- bra rtok
- *
- *
- *
-
-
- putzero:
- move.l #1,d0
- move.l ehandle,a0
- move.l table,a1
- move.l m_grow(a1),a1
- jsr (a1)
- beq rtf0
-
- move.l ehandle,a0
- move.l (a0),a0
- add.l elength,a0
- clr.b (a0)
- addq.l #1,elength
- moveq #1,d0
- rts
-
-
- getnum: move.b (a0),d1
- moveq #0,d0
- moveq #1,d2
- cmp.b #"-",d1
- beq gtnm2
- cmp.b #"0",d1
- bcs gtnm0
- cmp.b #"9",d1
- bls gtnm1
- gtnm0: addq.l #1,a0
- bra getnum
- gtnm1: moveq #0,d0
- moveq #0,d2
- gtnm2: move.b (a0)+,d1
- beq gtnm9
- cmp.b #"-",d1
- bne gtnm3
- moveq #1,d2
- bra gtnm2
- gtnm3: cmp.b #" ",d1
- beq gtnm9
- cmp.b #CR,d1
- beq gtnm9
- cmp.b #LF,d1
- beq gtnm9
- cmp.b #".",d1
- beq gtnm10
- sub.b #"0",d1
- bcs gtnm9
- cmp.b #9,d1
- bhi gtnm9
- move.l d0,-(sp)
- lsl.l #2,d0
- add.l (sp)+,d0
- lsl.l #1,d0
- and.l #$ff,d1
- add.l d1,d0
- bra gtnm2
- gtnm9: tst.w d2
- beq rrts
- neg.l d0
- rts
-
- gtnm10: move.b (a0)+,d1
- beq gtnm9
- sub.b #"0",d1
- bcs gtnm9
- cmp.w #9,d1
- bhi gtnm9
- bra gtnm10
-
-
-
- getclr: moveq #0,d0
- move.w #10000,d1
- gtcl1: move.b (a0)+,d2
- cmp.b #" ",d2
- beq gtcl1
- bra gtcl3
-
- gtcl2: move.b (a0)+,d2
- gtcl3: cmp.b #".",d2
- beq gtcl5
- cmp.b #" ",d2
- beq gtcl10
- sub.b #"0",d2
- bcs gtcl10
- cmp.b #9,d2
- bhi gtcl10
- and.w #$ff,d2
- cmp.w #10000,d1
- beq gtcl4
- *
- * decimal portion
- *
- mulu d1,d2
- add.w d2,d0
- and.l #$ffff,d1
- divu #10,d1
- bra gtcl2
- *
- * integer portion (should ONLY be a 0 or a 1)
- *
- gtcl4: cmp.b #2,d2
- bcc gtcl10
- mulu d1,d2
- move.w d2,d0
- bra gtcl2
- *
- * decimal point
- *
- gtcl5: cmp.w #10000,d1
- bne gtcl10
- move.w #1000,d1
- bra gtcl2
- *
- * return number 0-10000
- *
- gtcl10: cmp.w #10000,d0
- bcs rrts
- move.w #10000,d0
- rts
-
- *******************************************
- *** ***
- *******************************************
- getpict:
- move.l table,a0 ;open the file for reading
- move.l f_openr(a0),a0
- jsr (a0)
- beq gp10
-
- move.l table,a1 ;read the Mac file header into buff1
- move.l buff1(a1),a0
- move.l (a0),a0
- move.l #128,d0
- move.l f_getr(a1),a1
- jsr (a1)
- beq gpe1 ;if error, close file and rts w/ failure
-
- move.l table,a1 ;get the length of the RSRC fork
- move.l buff1(a1),a0
- move.l (a0),a0
- add.l #87,a0
- move.b (a0)+,rlength
- move.b (a0)+,rlength+1
- move.b (a0)+,rlength+2
- move.b (a0)+,rlength+3
- tst.l rlength ;is there a rsrc fork?
- bne gp1 ;yes, so...
-
- gpe1: move.l table,a0 ;close file if there is no RSRC fork
- move.l f_closer(a0),a0
- jsr (a0)
- moveq #0,d0 ;signal failure
- rts ;and return
-
- gp1: move.l table,a1 ;alloc the mem for the rsrc fork read
- move.l m_alloc(a1),a1
- move.l rlength,d0
- clr.w d1
- clr.w d2
- jsr (a1)
- beq gpe1 ;if I didn't get the memory...
-
- move.l a0,rhandle
-
- move.l elength,d0 ;skip to where the rsrc stuff starts
- and.l #$ffffff80,d0
- add.l #128,d0
- move.l table,a0
- move.l f_skip(a0),a0
- jsr (a0)
-
- move.l rhandle,a0 ;read in the RSRC fork
- move.l (a0),a0
- move.l rlength,d0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- bne gp2 ;if the read goes well...
-
- gpe2: move.l table,a1 ;else, free the mem
- move.l m_delete(a1),a1
- move.l rhandle,a0
- jsr (a1)
- bra gpe1 ;close the file and exit w/ failure
-
- gp2: move.l table,a0
- move.l f_closer(a0),a0
- jsr (a0)
-
- ;seek the PICT rsrc data
- ;and set picture to point to it
-
- clr.l d1
- move.l rhandle,a0
- move.l (a0),a0
- move.l (a0),q ;q = offset to start of rsrc data
- move.l 4(a0),d0 ;y = offset to the rsrc map
- move.l d0,y
- move.b 24(a0,d0.l),d1 ;z = offset to the type list
- lsl.w #8,d1
- move.b 25(a0,d0.l),d1
- move.l d1,z
- add.l d1,d0
- move.b 0(a0,d0.l),d2 ;w = number of items in the ref list
- lsl.w #8,d2
- move.b 1(a0,d0.l),d2
- move.w d2,w
-
- move.l d0,s ;s = y+z
- addq.l #2,d0
-
- ;loop until I hit a PICT rsrc
- gp3: move.b 0(a0,d0.l),d3 ;d3 = type of rsrc
- lsl.l #8,d3
- move.b 1(a0,d0.l),d3
- lsl.l #8,d3
- move.b 2(a0,d0.l),d3
- lsl.l #8,d3
- move.b 3(a0,d0.l),d3
-
- cmp.l #'PICT',d3
- beq gp4
- addq.l #8,d0
- dbf d2,gp3
- bra gpe2 ;error - no PICT rsrc found so...
-
- gp4: move.b 6(a0,d0.l),d1
- lsl.w #8,d1
- move.b 7(a0,d0.l),d1
-
- move.l s,d0
- add.l d1,d0
- move.b 5(a0,d0.l),d1
- lsl.l #8,d1
- move.b 6(a0,d0.l),d1
- lsl.l #8,d1
- move.b 7(a0,d0.l),d1
- and.l #$00ffffff,d1
- move.l q,d0
- add.l d1,d0
- move.l d0,d2
- add.l #14,d2
- move.l d2,pictoffset ;= offset from rhandle to PICT data
- lea 0(a0,d0.l),a1
- add.l #14,a1
- move.l a1,picture ;= address of the PICT data in rhandle
-
- move.b 6(a0,d0.l),d1
- lsl.w #8,d1
- move.b 7(a0,d0.l),d1
-
- move.b 8(a0,d0.l),d2
- lsl.w #8,d2
- move.b 9(a0,d0.l),d2
-
- move.b 10(a0,d0.l),d3
- lsl.w #8,d3
- move.b 11(a0,d0.l),d3
-
- move.b 12(a0,d0.l),d4
- lsl.w #8,d4
- move.b 13(a0,d0.l),d4
-
- sub.w d1,d3
- sub.w d2,d4
- move.w d4,pic+pc_W
- move.w d3,pic+pc_H
-
- move.l picture,a0
- gp5: cmp.b #$11,(a0)+ ;look for the version code ($11)
- bne gp5
- move.b (a0)+,vers ;store the PICT version #
-
- cmp.b #1,vers
- beq gp6
- add.l #1,a0 ;if vers==2 skip the next byte
- gp6: bsr getcode ;this will get the PICT code into d0
- cmp.w #$98,d0
- beq gp9
- bsr skipcode
- bra gp6
-
- gp9: move.w #1,d0 ;default to 1 bit-per-pixel
- move.w #PC_BW,pic+pc_Type ;default to a BW PICT
- clr.w pic+pc_Palet ;default to no palette
- cmp.b #1,vers ;is it a version 1 PICT?
- beq gp90 ;yes, only 1 bpp
-
- move.w #PC_PALET,pic+pc_Type
-
- move.b 28(a0),d0 ;get the bits-per-pixel for this image
- lsl.w #8,d0
- move.b 29(a0),d0
- move.b 52(a0),d1 ;get the number of palette entries
- lsl.w #8,d1
- move.b 53(a0),d1
- move.w d1,pic+pc_Palet
-
- gp90: move.w d0,pic+pc_BitPln
-
- sub.l #1,a0 ;rewind to start of $98 code
- cmp.b #1,vers
- beq gp91
- sub.l #1,a0
- gp91: move.l a0,picture
- moveq #1,d0 ;signal PICT is OK
- gp10: rts
-
-
- *******************************************
- *** ***
- *******************************************
- getcode:
- clr.w d0 ;clear space for next command
- cmp.b #1,vers ;is this a version 1 PICT
- bne gc2 ;nope
- move.b (a0)+,d0 ;if yes, get q 1 byte code
- bra gc3
- gc2: move.l a0,d0 ;check for word-align in version 2 PICT
- btst #0,d0
- beq gc21 ;yes it is aligned
- add.l #1,a0 ;if not, align it
- gc21: move.w (a0)+,d0 ;else, get a 2 byte code
- gc3: rts
-
-
- *******************************************
- *** ***
- *******************************************
- skipcode:
- lea codetable,a1
-
- sc1: tst.w (a1) ;end of table?
- beq sc4 ;yes
- cmp.w (a1),d0 ;look for the code contained in d0
- beq sc2
- add.l #4,a1
- bra sc1
-
- sc2: move.w 2(a1),d1
- cmp.w #$ffff,d1 ;-1 signals the len is in the next word
- bne sc3
- move.b (a0)+,d1 ;get the length from the data (word)
- lsl.w #8,d1
- move.b (a0)+,d1
- sub.w #2,d1
-
- sc3: cmp.w #$fffe,d1 ;-2 signals the len is in the next long
- beq sc6
-
- add.w d1,a0 ;skip the data for this code
- rts
-
- sc4: cmp.w #$7fff,d0 ;is it greater than $7fff?
- bcc sc5 ;yes
- lsr.w #8,d0
- and.l #$000000ff,d0
- moveq #1,d1
- lsl.l d1,d0
- add.w d1,a0
- rts
-
- sc5: cmp.w #$80ff,d0 ;$8000-$80ff is 0 length
- bcc sc6
- rts
-
- sc6: move.b (a0)+,d1 ;get the length from the data (long)
- lsl.l #8,d1
- move.b (a0)+,d1
- lsl.l #8,d1
- move.b (a0)+,d1
- lsl.l #8,d1
- move.b (a0)+,d1
- subq #4,d1
- add.l d1,a0
- rts
-
-
- *******************************************
- *** ***
- *******************************************
- putpal:
- move.l palptr,a1
- add.l #56,a0 ;point to start of palette data
- move.w pic+pc_Palet,d0
-
- ptpl1: move.b (a0)+,d1 ;get the color number
- lsl.w #8,d1
- move.b (a0)+,d1
- mulu #pl_Sizeof,d1 ;claculate its pos in PgS obj palette
-
- move.b (a0)+,0(a1,d1.w) ;red
- move.b (a0)+,1(a1,d1.w)
- move.w 0(a1,d1.w),d2
-
- move.b (a0)+,2(a1,d1.w) ;green
- move.b (a0)+,3(a1,d1.w)
- move.w 2(a1,d1.w),d3
-
- move.b (a0)+,4(a1,d1.w) ;blue
- move.b (a0)+,5(a1,d1.w)
- move.w 4(a1,d1.w),d4
-
- mulu #19661,d2
- mulu #38666,d3
- mulu #7209,d4
- add.l d3,d2
- add.l d4,d2
- swap d2
- cmp.w #$8000,d2
- bcc ge1
- moveq #1,d2
- bra ge2
- ge1: moveq #0,d2
- ge2: move.w d2,6(a1,d1.w) ;screen color
-
- dbf d0,ptpl1
- rts
-
-
- *******************************************
- *** ***
- *******************************************
- putpic:
- bsr getcode
-
- cmp.w #$98,d0
- bne ptpc1
-
- move.b (a0)+,rowbytes
- move.b (a0)+,rowbytes+1
- move.w rowbytes,d0
- bclr #15,d0 ;clear the high bit of word
- move.w d0,rowbytes
-
- move.b (a0)+,bby1
- move.b (a0)+,bby1+1
-
- move.b (a0)+,bbx1
- move.b (a0)+,bbx1+1
-
- move.b (a0)+,bby2
- move.b (a0)+,bby2+1
-
- move.b (a0)+,bbx2
- move.b (a0)+,bbx2+1
-
- cmp.b #1,vers
- beq pp10
-
- ;version 2 stuff goes here
- add.l #16,a0 ;skip the next 8 words
-
- move.b (a0)+,pixeltype
- move.b (a0)+,pixeltype+1
-
- move.b (a0)+,bpp
- move.b (a0)+,bpp+1
-
- add.l #22,a0 ;skip the next 10 words
-
- clr.l d0
- move.b (a0)+,d0 ;the number of colors in the color table
- lsl.l #8,d0
- move.b (a0)+,d0
- addq #1,d0
- lsl.l #3,d0 ;mulu by 8
- add.l d0,a0 ;skip it
-
- pp10: move.b (a0)+,srcy1
- move.b (a0)+,srcy1+1
-
- move.b (a0)+,srcx1
- move.b (a0)+,srcx1+1
-
- move.b (a0)+,srcy2
- move.b (a0)+,srcy2+1
-
- move.b (a0)+,srcx2
- move.b (a0)+,srcx2+1
-
- move.b (a0)+,desty1
- move.b (a0)+,desty1+1
-
- move.b (a0)+,destx1
- move.b (a0)+,destx1+1
-
- move.b (a0)+,desty2
- move.b (a0)+,desty2+1
-
- move.b (a0)+,destx2
- move.b (a0)+,destx2+1
-
- move.b (a0)+,copymode ;get the mode of byte copy used
- move.b (a0)+,copymode+1
-
- move.w bby2,d1 ;calc number of rows in this code group
- sub.w bby1,d1
- move.w d1,numrows
-
- move.l picptrsave,a1
- clr.l d0
- move.w pic+pc_Width,d0 ;calc bitmap addr of starting dest row
- mulu desty1,d0
- add.l d0,a1
- move.w destx1,d0 ;get the starting x value
- addq.w #7,d0
- lsr.w #3,d0
- add.w d0,a1
- move.l a1,picptr ;store it away for pckcomp
-
- cmp.b #1,vers
- bne pp12
- bsr pckcompv1 ;decompress the data and put it vers 1
- bra putpic ;time to get the next code
- pp12: bsr pckcompv2 ;decompress the data and put it vers 2
- bra putpic ;time to get the next code
-
- ptpc1: cmp.w #$ff,d0 ;end of PICT data
- beq ptpc2 ;so exit
- bsr skipcode
- bra putpic ;get the next code
-
- ptpc2: rts
-
- **********************************
- ** **
- **********************************
- pckcompv1:
- clr.l d6
- clr.l d0
-
- move.w numrows,d5 ;d5 = bitmap height in this group
- move.w rowbytes,d6 ;get the # of bytes in this row in this group
- 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
- clr.l d1
- move.b (a0)+,d1 ;throw away packed byte count at start of line
-
- pk2: clr.l d1
- move.b (a0)+,d1 ;d1 = one byte code
- cmp.b #128,d1
- beq 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 (a1),d3
- bsr domode ;convert d2 and d3 according to the copy mode
- move.b d3,(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)+,d2
- move.b (a1),d3
- bsr domode ;convert d2 and d3 according to the copy mode
- move.b d3,(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
-
- **********************************
- ** **
- **********************************
- pckcompv2:
- clr.l d6
- clr.l d0
-
- move.w numrows,d5 ;d5 = bitmap height in this group
- move.w rowbytes,d6 ;get the # of bytes in this row in this group
- move.w d6,d0 ;d0 = save d6
- bra p2k8
-
- p2k1: move.w d0,d6 ;reset d6 to number of bytes in row
- move.l picptr,a1 ;a1 = adress in amiga bitmap
- clr.l d1
- move.b (a0)+,d1 ;throw away packed byte count at start of line
-
- p2k2: clr.l d1
- move.b (a0)+,d1 ;d1 = one byte code
- cmp.b #128,d1
- beq p2k2 ;code 128 = do nothing, so get next byte
-
- btst #7,d1 ;check the high bit
- beq o2p2 ;if 0 copy the next d1+1 bytes as is
-
- o2p1: 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
- o2p12: move.b (a1),d3
- bsr domode ;convert d2 and d3 according to the copy mode
- bsr copyone
- dbf d1,o2p12
- bra p2k6
-
- o2p2: sub.b d1,d6 ;decrement row byte count
- subq.w #1,d6
-
- o2p22: move.b (a0)+,d2
- move.b (a1),d3
- bsr domode ;convert d2 and d3 according to the copy mode
- bsr copyone
- dbf d1,o2p22
-
- p2k6: tst.w d6 ;are we done with a row yet
- bne p2k2 ;no - keep going
-
- move.l a1,d6
- btst #0,d6 ;did we end on an odd address
- beq p2k7
- move.b #0,(a1)+
-
- p2k7: move.l picptr,a1
- move.w pic+pc_Width,d4
- add.w d4,a1
- move.l a1,picptr
- move.w #7,abit
-
- p2k8: dbf d5,p2k1
- rts
-
- **********************************
- ** **
- **********************************
- domode:
- cmp.w #SRCCOPY,copymode
- bne dm1
- move.b d2,d3 ;copy the value exactly
- rts
-
- dm1: cmp.w #SRCOR,copymode ;or d2 bits with d3 bits
- bne dm2
- or.b d2,d3
- rts
-
- dm2: cmp.w #SRCXOR,copymode ;xor d2 bits with d3 bits
- bne dm3
- eor.b d2,d3
- rts
-
- dm3: cmp.w #SRCBIC,copymode ;erase d2 bits from d3 bits
- bne dm4
- not.b d2
- and.b d2,d3
- rts
-
- dm4: cmp.w #NOTSRCCOPY,copymode ;copy the opposite of d2 bits to d3
- bne dm5
- not.b d2
- move.b d2,d3
- rts
-
- dm5: cmp.w #NOTSRCOR,copymode ;or not d2 bits with d3 bits
- bne dm6
- not.b d2
- or.b d2,d3
- rts
-
- dm6: cmp.w #NOTSRCXOR,copymode ;xor not d2 bits with d3 bits
- bne dm7
- not.b d2
- eor.b d2,d3
- rts
-
- dm7: cmp.w #NOTSRCBIC,copymode ;copy only the same bits in d2 to d3
- bne dm8
- and.b d2,d3
- rts
-
- dm8: move.b d2,d3 ;default to SRCCOPY
- rts
-
- **********************************
- ** **
- **********************************
- copyone:
- movem.l d0-d2,-(a7)
-
- move.w bpp,d0
- subq.w #1,d0
- move.w #0,d1
- move.l a1,a2
- move.w abit,d2
-
- cp0: btst d1,d3
- bne cp1
- bclr d2,(a2)
- bra cp2
- cp1: bset d2,(a2)
- cp2: dbf d0,cp3 ;decrement source bitplane counter
- move.l a1,a2 ;reset dest to plane one
- move.w bpp,d0 ;reset source bitplane counter
- subq.w #1,d0
-
- dbf d2,cp4 ;decrement amiga bitplane bit pointer
- move.w #7,d2 ;reset to high bit
- add.l #1,a1 ;move dest to next byte
- move.l a1,a2 ;reset dest to plane one
- bra cp4
-
- cp3: add.l planesize,a2 ;move to next dest bitplane
- cp4: ;dbf d1,cp0 ;decrement source bit pointer
- addq.w #1,d1
- cmp.w bpp,d1
- bcs cp0
-
- cp10: move.w d2,abit
- movem.l (a7)+,d0-d2
- rts
-
- *******************************************************************
- *** called when the import routine choosen finds something ***
- *** wrong with the file loaded. ***
- *******************************************************************
- notcorrect:
- rts
-
- never: moveq #0,d0
- rts
-
- maybe: moveq #1,d0
- rts
-
- correct:
- moveq #2,d0
- rts
-
-
- *******************************************
- *** ***
- *******************************************
- SECTION maceps,DATA,PUBLIC
-
- special:
- dc.w 2
- dc.l spcl1,spcl2
-
- codetable: dc.w $0001,$ffff
- dc.w $0002,8
- dc.w $0003,2
- dc.w $0004,1
- dc.w $0005,2
- dc.w $0006,4
- dc.w $0007,4
- dc.w $0008,2
- dc.w $0009,8
- dc.w $000a,8
- dc.w $000b,4
- dc.w $000c,4
- dc.w $000d,2
- dc.w $000e,4
- dc.w $000f,4
-
- dc.w $0010,8
- dc.w $0011,1
- dc.w $0012,0 ;?
- dc.w $0013,0 ;?
- dc.w $0014,0 ;?
- dc.w $0015,2
- dc.w $0016,2
- dc.w $0017,0
- dc.w $0018,0
- dc.w $0019,0
- dc.w $001a,0 ;?
- dc.w $001b,0 ;?
- dc.w $001c,0
- dc.w $001d,0 ;?
- dc.w $001e,8
- dc.w $001f,4
-
- dc.w $0020,8
- dc.w $0021,4
- dc.w $0022,6
- dc.w $0023,2
- dc.w $0024,$ffff
- dc.w $0025,$ffff
- dc.w $0026,$ffff
- dc.w $0027,$ffff
- dc.w $0028,0 ;? 5+text
- dc.w $0029,$ffff
- dc.w $002a,0 ;? 2+text
- dc.w $002b,0 ;? 3+text
- dc.w $002c,$ffff
- dc.w $002d,$ffff
- dc.w $002e,$ffff
- dc.w $002f,$ffff
-
- dc.w $0030,8
- dc.w $0031,8
- dc.w $0032,8
- dc.w $0033,8
- dc.w $0034,8
- dc.w $0035,8
- dc.w $0036,8
- dc.w $0037,8
- dc.w $0038,0
- dc.w $0039,0
- dc.w $003a,0
- dc.w $003b,0
- dc.w $003c,0
- dc.w $003d,0
- dc.w $003e,0
- dc.w $003f,0
-
- dc.w $0040,8
- dc.w $0041,8
- dc.w $0042,8
- dc.w $0043,8
- dc.w $0044,8
- dc.w $0045,8
- dc.w $0046,8
- dc.w $0047,8
- dc.w $0048,0
- dc.w $0049,0
- dc.w $004a,0
- dc.w $004b,0
- dc.w $004c,0
- dc.w $004d,0
- dc.w $004e,0
- dc.w $004f,0
-
- dc.w $0050,8
- dc.w $0051,8
- dc.w $0052,8
- dc.w $0053,8
- dc.w $0054,8
- dc.w $0055,8
- dc.w $0056,8
- dc.w $0057,8
- dc.w $0058,0
- dc.w $0059,0
- dc.w $005a,0
- dc.w $005b,0
- dc.w $005c,0
- dc.w $005d,0
- dc.w $005e,0
- dc.w $005f,0
-
- dc.w $0060,12
- dc.w $0061,12
- dc.w $0062,12
- dc.w $0063,12
- dc.w $0064,12
- dc.w $0065,12
- dc.w $0066,12
- dc.w $0067,12
- dc.w $0068,4
- dc.w $0069,4
- dc.w $006a,4
- dc.w $006b,4
- dc.w $006c,4
- dc.w $006d,4
- dc.w $006e,4
- dc.w $006f,4
-
- dc.w $0070,0 ;poly
- dc.w $0071,0 ;poly
- dc.w $0072,0 ;poly
- dc.w $0073,0 ;poly
- dc.w $0074,0 ;poly
- dc.w $0075,0 ;poly
- dc.w $0076,0 ;poly
- dc.w $0077,0 ;poly
- dc.w $0078,0
- dc.w $0079,0
- dc.w $007a,0
- dc.w $007b,0
- dc.w $007c,0
- dc.w $007d,0
- dc.w $007e,0
- dc.w $007f,0
-
- dc.w $0080,0 ;region
- dc.w $0081,0 ;region
- dc.w $0082,0 ;region
- dc.w $0083,0 ;region
- dc.w $0084,0 ;region
- dc.w $0085,0 ;region
- dc.w $0086,0 ;region
- dc.w $0087,0 ;region
- dc.w $0088,0
- dc.w $0089,0
- dc.w $008a,0
- dc.w $008b,0
- dc.w $008c,0
- dc.w $008d,0
- dc.w $008e,0
- dc.w $008f,0
-
- dc.w $0090,0 ;?
- dc.w $0091,0 ;?
- dc.w $0092,$ffff
- dc.w $0093,$ffff
- dc.w $0094,$ffff
- dc.w $0095,$ffff
- dc.w $0096,$ffff
- dc.w $0097,$ffff
- dc.w $0098,0 ;? - need not worry about this one
- dc.w $0099,0 ;?
- dc.w $009a,$ffff
- dc.w $009b,$ffff
- dc.w $009c,$ffff
- dc.w $009d,$ffff
- dc.w $009e,$ffff
- dc.w $009f,$ffff
-
- dc.w $00a0,2
- dc.w $00a1,0 ;? 2+2+text
- dc.w $00a2,$ffff
- dc.w $00a3,$ffff
- dc.w $00a4,$ffff
- dc.w $00a5,$ffff
- dc.w $00a6,$ffff
- dc.w $00a7,$ffff
- dc.w $00a8,$ffff
- dc.w $00a9,$ffff
- dc.w $00aa,$ffff
- dc.w $00ab,$ffff
- dc.w $00ac,$ffff
- dc.w $00ad,$ffff
- dc.w $00ae,$ffff
- dc.w $00af,$ffff
-
- dc.w $00b0,0
- dc.w $00b1,0
- dc.w $00b2,0
- dc.w $00b3,0
- dc.w $00b4,0
- dc.w $00b5,0
- dc.w $00b6,0
- dc.w $00b7,0
- dc.w $00b8,0
- dc.w $00b9,0
- dc.w $00ba,0
- dc.w $00bb,0
- dc.w $00bc,0
- dc.w $00bd,0
- dc.w $00be,0
- dc.w $00bf,0
-
- dc.w $00c0,0
- dc.w $00c1,0
- dc.w $00c2,0
- dc.w $00c3,0
- dc.w $00c4,0
- dc.w $00c5,0
- dc.w $00c6,0
- dc.w $00c7,0
- dc.w $00c8,0
- dc.w $00c9,0
- dc.w $00ca,0
- dc.w $00cb,0
- dc.w $00cc,0
- dc.w $00cd,0
- dc.w $00ce,0
- dc.w $00cf,0
-
- dc.w $00d0,$fffe
- dc.w $00d1,$fffe
- dc.w $00d2,$fffe
- dc.w $00d3,$fffe
- dc.w $00d4,$fffe
- dc.w $00d5,$fffe
- dc.w $00d6,$fffe
- dc.w $00d7,$fffe
- dc.w $00d8,$fffe
- dc.w $00d9,$fffe
- dc.w $00da,$fffe
- dc.w $00db,$fffe
- dc.w $00dc,$fffe
- dc.w $00dd,$fffe
- dc.w $00de,$fffe
- dc.w $00df,$fffe
-
- dc.w $00f0,$fffe
- dc.w $00f1,$fffe
- dc.w $00f2,$fffe
- dc.w $00f3,$fffe
- dc.w $00f4,$fffe
- dc.w $00f5,$fffe
- dc.w $00f6,$fffe
- dc.w $00f7,$fffe
- dc.w $00f8,$fffe
- dc.w $00f9,$fffe
- dc.w $00fa,$fffe
- dc.w $00fb,$fffe
- dc.w $00fc,$fffe
- dc.w $00fd,$fffe
- dc.w $00fe,$fffe
- dc.w $00ff,2
-
- dc.w 0,0
-
-
- version: dc.b 0,"$VER: "
- name: dc.b "Mac EPSF v2.1.2",0
-
- spcl1: dc.b "Show pic",0
- spcl2: dc.b "Do not show pic",0
-
- bbstr: dc.b "%%BoundingBox:",0
- ccstr: dc.b "%%CMYKCustomColor:",0
- epsfhdr: dc.b "%!PS-Adobe",0
-
- vers: dc.b 0
-
-
- ******************************************************
- ******************************************************
- SECTION maceps,BSS,PUBLIC
-
- data: ds.w 1
- object: ds.w ob_SizeOf/2
- color: ds.w cl_Sizeof/2
- pic: ds.w pc_Sizeof/2
-
- array: ds.w 3
-
- eleft: ds.l 1
- etop: ds.l 1
- eright: ds.l 1
- ebottom: ds.l 1
-
- ehandle: ds.l 1
- elength: ds.l 1
- rhandle: ds.l 1
- rlength: ds.l 1
-
- picture: ds.l 1
- pictoffset: ds.l 1
- picptr: ds.l 1
- picptrsave: ds.l 1
- palptr: ds.l 1
- spsave: ds.l 1
- eobj: ds.l 1
- q: ds.l 1
- y: ds.l 1
- z: ds.l 1
- s: ds.l 1
- planesize: ds.l 1
- w: ds.w 1
- rowbytes: ds.w 1
- numrows: ds.w 1
- bbx1: ds.w 1
- bby1: ds.w 1
- bbx2: ds.w 1
- bby2: ds.w 1
- srcx1: ds.w 1
- srcy1: ds.w 1
- srcx2: ds.w 1
- srcy2: ds.w 1
- destx1: ds.w 1
- desty1: ds.w 1
- destx2: ds.w 1
- desty2: ds.w 1
- copymode: ds.w 1
- pixeltype: ds.w 1
- bpp: ds.w 1
- abit: ds.w 1
-
-
- ;***************************** Changes **************************
- ;
- ; version 2.1.2
- ;
- ; - added a "version" string
- ;
- ; - adding support for PICT headers
-