home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-05-23 | 24.9 KB | 1,053 lines |
- Include "equ.h"
- Include "impequ.h"
-
- SECTION GIF,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,gifp
-
-
- **************************************
- * Is it really a GIF file? *
- **************************************
- check: move.l table,a0
- move.l buff1(a0),a1
- move.l (a1),a1
- move.l (a1),d0
- and.l #$ffffff00,d0
- move.b #' ',d0
- cmp.l #'GIF ',d0
- bne never
- bra right
-
-
- ***********************************
- *** ***
- ***********************************
- gifp: 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
-
- clr.l gcmap
- clr.l gcmapsize
- clr.l picture
- clr.l prefix
- clr.l suffix
- clr.l outcode
-
- 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 getscrdes
- bsr getpicdes
-
- 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 putcolor
- move.l picptr,picptr2
- 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 getscrdes
- bsr getpicdes
-
- 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 ;.5 point line
- clr.b object+ob_LType ;no line style
- move.b #1,object+ob_LColor ;line color = black
- clr.b object+ob_FType ;no fill
- move.b #1,object+ob_FColor ;fill color = black
- 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
-
- clr.l d0
- clr.l d1
- 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 ;save start of amiga palette data
-
- bsr putcolor
- move.l picptr,picptr2
- 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)
-
-
- ***********************************
- *** ***
- ***********************************
- getscrdes:
- lea pic,a0
- move.w #pc_Sizeof-1,d0
- gpi1: clr.b (a0)+
- dbra d0,gpi1
-
- move.l table,a1
- move.l piclength,d0
- clr.w d1
- clr.w d2
- move.l m_alloc(a1),a1
- jsr (a1)
- beq errrts
- move.l a0,picture
-
- move.l #16384,d0
- clr.l d1
- clr.l d2
- move.l table,a1
- move.l m_alloc(a1),a1
- jsr (a1)
- beq errrts
- move.l a0,prefix
-
- move.l #16384,d0
- clr.l d1
- clr.l d2
- move.l table,a1
- move.l m_alloc(a1),a1
- jsr (a1)
- beq errrts
- move.l a0,suffix
-
- move.l #4100,d0
- clr.l d1
- clr.l d2
- move.l table,a1
- move.l m_alloc(a1),a1
- jsr (a1)
- beq errrts
- move.l a0,outcode
-
- move.l picture,a0
- move.l (a0),a0 ;read the file into memory
- move.l piclength,d0
- move.l table,a1
- move.l f_getr(a1),a1
- jsr (a1)
- beq errrts
-
- move.l picture,a0
- move.l (a0),a0
-
- add.l #10,a0 ;skip the signature and the screen res
- move.b (a0)+,d0
- btst #7,d0 ;check for a global color map
- beq gpi2
-
- move.b d0,d1
- and.b #112,d1 ;get bits 6,5,4 into d0
- lsr.b #4,d1
- addq.b #1,d1
- move.b d1,gbitcres ;bits of color resolution (global)
-
- and.w #7,d0 ;get bits 2,1,0 into d0
- addq.b #1,d0
- move.b d0,gbpp ;bits per pixel (global)
- move.w d0,pic+pc_BitPln
-
- move.b (a0)+,d0 ;get the background color
- move.b d0,gbgcolor
- addq.l #1,a0 ;point a0 to the color map
-
- clr.l d1 ;calculate the number of bytes in cmap
- move.b gbpp,d1
- subq.b #1,d1
- moveq.l #2,d0
- lsl.l d1,d0
- move.w d0,gnumcolors
- move.w d0,pic+pc_Palet
- mulu #3,d0
- move.l d0,gcmapsize
- move.l a0,gcmap ;a0 = start of global color map
-
- add.l d0,a0 ;move file pointer past gcm
-
- gpi2: move.l a0,pptr ;save it
-
- lea pic,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)
-
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- getpicdes:
- move.l gcmap,d0
- move.l d0,lcmap ;default if there is no local cmap
- move.l gcmapsize,d1
- move.l d1,lcmapsize
- move.b gbpp,d2
- move.b d2,lbpp
- move.b gbgcolor,d3
- move.b d3,lbgcolor
- move.b gbitcres,d4
- move.b d4,lbitcres
-
- bsr skipextenders
-
- move.l pptr,a0
- addq.l #5,a0 ;skip the comma, left and top edge
-
- move.b (a0)+,tempw+1 ;intel format
- move.b (a0)+,tempw
- move.w tempw,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.b (a0)+,tempw+1
- move.b (a0)+,tempw
- move.w tempw,d0
- move.w d0,pic+pc_H
-
- move.b (a0)+,d0
- bclr #0,flag ;clear the image interlace flag
- btst #6,d0
- beq gp1
- bset #0,flag ;the image is stored as interlace
-
- gp1: btst #7,d0 ;do I use the global or local cmap
- beq gp2 ;use the global cmap stuff
-
- and.w #7,d0 ;mask off pixel value (lower 3 bits)
- addq.b #1,d0
- move.b d0,lbpp ;store the bits per pixel
- move.w d0,pic+pc_BitPln
-
- clr.l d1 ;calculate the # of bytes in the lcmap
- move.b d0,d1
- subq.b #1,d1
- moveq.l #2,d0
- lsl.l d1,d0
- move.w d0,lnumcolors
- move.w d0,pic+pc_Palet
- mulu #3,d0
- move.l d0,lcmapsize
- move.l a0,lcmap ;a0 = start of the local color map
-
- add.l d0,a0 ;move a0 past the cmap stuff
-
- move.b #PC_PALET,pic+pc_Type
-
- gp2: move.l a0,pptr
- rts
-
- ***********************************
- *** ***
- ***********************************
- skipextenders:
- clr.l d0
- move.l pptr,a0
- cmp.b #'!',(a0) ;is a gif extender present?
- bne se3 ;no
- addq.l #2,a0 ;skip the ! and the function code
-
- se1: move.b (a0)+,d0 ;get the length of the extention
- beq se2 ;when 0 - it is the end
- add.l d0,a0 ;skip data
- bra se1
-
- se2: move.l a0,pptr
- se3: rts
-
-
- ***********************************************************
- *** ***
- ***********************************************************
- putcolor:
- move.w pic+pc_Palet,d3
-
- move.l picptr,a0
- move.l lcmap,a1
- bra pc4
-
- pc1: move.b (a1)+,d0 ;red
- and.w #$ff,d0
- mulu #65535,d0
- divu #240,d0
- move.w d0,(a0)
-
- move.b (a1)+,d0 ;green
- and.w #$ff,d0
- mulu #65535,d0
- divu #240,d0
- move.w d0,2(a0)
-
- move.b (a1)+,d0 ;blue
- and.w #$ff,d0
- mulu #65535,d0
- divu #240,d0
- move.w d0,4(a0)
-
- move.w (a0)+,d0
- move.w (a0)+,d1
- move.w (a0)+,d2
- mulu #19661,d0
- mulu #38666,d1
- mulu #7209,d2
- add.l d1,d0
- add.l d2,d0
- swap d0
- cmp.w #$8000,d0
- bcc pc2
- moveq #1,d0
- bra pc3
- pc2: moveq #0,d0
- pc3: move.w d0,(a0)+ ;calculate on screen color (B or W)
-
- pc4: dbf d3,pc1
- move.l a0,picptr ;set a0 to start of amiga bitmap
- rts
-
-
- ***********************************
- *** ***
- ***********************************
- putpic:
- ; 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 #$ff,(a0)+
- ;pp2: dbf d0,pp1
- ; dbf d1,pp1
-
- move.l picptr,apos1 ;for cpystr stuff
- move.l picptr,apos2 ;
- move.w #7,bitcount ; "
- move.w #0,plncnt ; "
- move.w pic+pc_W,d0 ; "
- subq.w #1,d0 ; "
- move.w d0,pixcount ; "
- clr.l d0 ; "
- move.w pic+pc_Width,d0 ; "
- mulu pic+pc_H,d0 ; "
- move.l d0,plnlen ; "
-
- move.l pptr,a0
- clr.w d0
- move.b (a0)+,d0 ;get smallest code length
- move.w d0,codelength ;initial code length is codelength bits
- move.l a0,pptr
-
- clr.l d0
- move.b lbpp,d0
- move.l #1,d1
- lsl.l d0,d1
- subq.l #1,d1
- move.l d1,bitmask
-
- clr.w pass ;for interlaced gif pictures
- clr.w hcount
-
- bsr setuplzwdata ;sets up picture to have only LZW data
-
- move.l outcode,a0
- move.l (a0),-(sp)
- move.l suffix,a0
- move.l (a0),-(sp)
- move.l prefix,a0
- move.l (a0),-(sp)
- move.l bitmask,-(sp)
- move.w codelength,d0
- move.l d0,-(sp)
- move.l picture,a0
- move.l (a0),-(sp) ;pointer to LZW data
- move.l picptr,-(sp) ;pointer to amiga bitmap
- bsr doGIF
- add.l #28,sp ;clean up stack
-
- bra purgepic
-
- ********************************
- *** ***
- ********************************
- readcode:
- movem.l d3-d5/a2-a3,-(a7)
- movea.l 24(a7),a3
- move.l 28(a7),d5
- movea.l 36(a7),a2
- move.l (a3),d1
- lsr.l #3,d1
- moveq #0,d3
- move.b 1(a2,d1.l),d3
- moveq #0,d4
- not.b d4
- and.l d4,d3
- asl.l #8,d3
- moveq #0,d0
- move.b 0(a2,d1.l),d0
- and.l d4,d0
- add.l d3,d0
- cmp.l #8,d5
- bcs.b rc1
-
- moveq #0,d3
- move.b 2(a2,d1.l),d3
- and.l d4,d3
- swap d3
- clr.w d3
- add.l d3,d0
-
- rc1: move.l (a3),d1
- add.l d5,(a3)
- and.l #7,d1
- lsr.l d1,d0
- and.l 32(a7),d0
- movem.l (a7)+,d3-d5/a2-a3
- rts
-
- ********************************
- *** ***
- ********************************
- doGIF:
- link a5,#$ffc0
- movem.l d2-d7/a2-a3,-(a7)
- movea.l 32(a5),a3
- move.l 16(a5),d7
- moveq #1,d0
- move.l d0,d1
- asl.l d7,d1
- move.l d1,d2
- addq.l #1,d2
- move.l d1,d3
- addq.l #2,d3
- move.l d7,d4
- addq.l #1,d4
- move.l d1,44(a7)
- move.l d4,d1
- move.l d1,32(a7)
- move.l d0,d1
- asl.l d4,d1
- move.l d1,d7
- move.l d7,d0
- subq.l #1,d0
- moveq #0,d1
- move.l d1,-36(a5)
- move.l d1,d6
- movea.l 12(a5),a2
- move.l a2,-(a7)
- move.l d0,-(a7)
- move.l d4,-(a7)
- pea -36(a5)
- move.l d0,-28(a5)
- move.l d2,56(a7)
- move.l d3,-24(a5)
- move.l d3,52(a7)
- bsr.w readcode
- lea 16(a7),a7
- move.l d0,d5
- moveq #1,d0
- move.l d0,-40(a5)
- bra.w dg7
-
- dg0: cmp.l 44(a7),d5
- bne.b dg1
-
- move.l 32(a7),d4
- moveq #1,d0
- move.l d0,d1
- asl.l d4,d1
- move.l d1,d7
- move.l d7,d0
- subq.l #1,d0
- move.l 36(a7),-24(a5)
- move.l a2,-(a7)
- move.l d0,-(a7)
- move.l d4,-(a7)
- pea -36(a5)
- move.l d0,-28(a5)
- bsr.w readcode
- move.l d0,d5
- move.l d5,d0
- and.l 20(a5),d0
- move.l d0,(a7)
- move.l d0,-48(a5)
- bsr addtopix2
- lea 16(a7),a7
- bra.w dg6
-
- dg1: move.l d5,d7
- cmp.l -24(a5),d7
- bcs.b dg2
- move.l -44(a5),d7
- moveq #1,d6
- move.l -48(a5),(a3)
-
- dg2: move.l d6,d0
- asl.l #2,d0
- movea.l a3,a2
- adda.l d0,a2
- bra.b dg3
-
- dg21: addq.l #1,d6
- move.l d7,d0
- asl.l #2,d0
- movea.l 28(a5),a0
- move.l 0(a0,d0.l),(a2)+
- movea.l 24(a5),a0
- move.l 0(a0,d0.l),d7
-
- dg3: cmp.l 20(a5),d7
- bhi.b dg21
-
- and.l 20(a5),d7
- move.l d7,-48(a5)
- move.l d7,(a2)
- move.l d6,d0
- asl.l #2,d0
- movea.l a3,a2
- adda.l d0,a2
- bra.b dg5
-
- dg4: move.l (a2),-(a7)
- bsr addtopix2
- addq.w #4,a7
- subq.l #4,a2
-
- dg5: cmpa.l a3,a2
- bcc.b dg4
-
- moveq #0,d6
- move.l -24(a5),d0
- move.l d0,d1
- asl.l #2,d1
- movea.l 24(a5),a0
- move.l -44(a5),0(a0,d1.l)
- movea.l 28(a5),a0
- move.l d7,0(a0,d1.l)
- addq.l #1,-24(a5)
- move.l -32(a5),d7
- move.l -24(a5),d0
- cmp.l d7,d0
- bcs.b dg6
-
- moveq #12,d0
- cmp.l d0,d4
- bcc.b dg6
-
- addq.l #1,d4
- add.l d7,d7
- moveq #1,d0
- move.l d0,d1
- asl.l d4,d1
- subq.l #1,d1
- move.l d1,-28(a5)
-
- dg6: move.l d5,-44(a5)
- movea.l 12(a5),a2
- move.l a2,-(a7)
- move.l -28(a5),-(a7)
- move.l d4,-(a7)
- pea -36(a5)
- bsr.w readcode
- lea 16(a7),a7
- move.l d0,d5
- addq.l #1,-40(a5)
-
- dg7: move.l d7,-32(a5)
- cmp.l 40(a7),d5
- bne.w dg0
-
- move.l -40(a5),d0
- movem.l (a7)+,d2-d7/a2-a3
- unlk a5
- rts
-
- **********************************
- ** **
- **********************************
- setuplzwdata:
- move.l pptr,a0
- move.l picture,a1
- move.l (a1),a1
-
- set0: clr.w d0
- clr.w d1
- move.b (a0)+,d0 ;get length of block
- move.b d0,d1
- bra set2
- set1: move.b (a0)+,(a1)+ ;copy block
- set2: dbf d0,set1
- dbf d1,set0 ;not a real dbf - it will branch back
- rts ;if the length of the block is not 0
-
- **********************************
- ** **
- **********************************
- addtopix2:
- move.l 4(sp),d0 ;get the code off the stack into d0
- movem.l d0-d7/a0-a6,-(sp)
-
- cp0: move.l apos2,a2 ;restore place in amiga bitmap - plane x
- move.l apos1,a1 ;restore place in amiga bitmap - plane 1
- move.l plnlen,d7 ;d7 = amiga bitplane length in bytes
- move.w bitcount,d5 ;restore bit place in a2
- move.w plncnt,d1 ;restore plane counter
- move.w pixcount,d6 ;restore pixel counter
- moveq #0,d3 ;d1 = bit position in gif data
-
- cp1: btst d3,d0 ;is the data bit on or off
- beq cp3 ;off
- bset d5,(a2)
- bra cp4
- cp3: bclr d5,(a2)
-
- cp4: add.l d7,a2 ;go to next bitplane
- addq.w #1,d1 ;update bitplane counter
-
- cmp.w pic+pc_BitPln,d1
- bcs cp7
-
- moveq #0,d1 ;reset bitplane counter
- move.l a1,a2 ;reset a2 to first bitplane
-
- cp5: dbf d5,cp6 ;update amiga bit pos
- addq.l #1,a1 ;move to next amiga bitmap byte
- addq.l #1,a2
- moveq #7,d5 ;reset d5 to top of byte
-
- cp6: dbf d6,cp7 ;update pixel width counter
-
- btst #0,flag ;is this an interlaced image?
- beq cp64 ;no
-
- move.l picptr2,a1
-
- cmp.w #0,pass ;pass 1
- bne cp61
- clr.l d4 ;move ahead 8 rows
- move.w pic+pc_Width,d4
- lsl.l #3,d4
- add.l d4,a1
- move.l a1,picptr2
- move.l a1,a2
- add.w #8,hcount
-
- move.w hcount,d4 ;am I done with this pass?
- cmp.w pic+pc_H,d4
- bcs cp65 ;no
-
- addq.w #1,pass ;go to next pass
- move.l picptr,a1 ;move to the fifth row
- clr.l d4
- move.w pic+pc_Width,d4
- lsl.w #2,d4
- add.l d4,a1
- move.l a1,picptr2
- move.l a1,a2
- move.w #5,hcount
- bra cp65
-
- cp61: cmp.w #1,pass ;pass 2
- bne cp62
- clr.l d4
- move.w pic+pc_Width,d4 ;move ahead 8 rows
- lsl.l #3,d4
- add.l d4,a1
- move.l a1,picptr2
- move.l a1,a2
- add.w #8,hcount
-
- move.w hcount,d4 ;am I done with this pass?
- cmp.w pic+pc_H,d4
- bcs cp65 ;no
-
- addq.w #1,pass ;next pass please
- move.l picptr,a1 ;move to the third row
- clr.l d4
- move.w pic+pc_Width,d4
- lsl.l #1,d4
- add.l d4,a1
- move.l a1,picptr2
- move.l a1,a2
- move.w #3,hcount
- bra cp65
-
- cp62: cmp.w #2,pass ;pass 3
- bne cp63
- clr.l d4
- move.w pic+pc_Width,d4 ;move ahead 4 rows
- lsl.l #2,d4
- add.l d4,a1
- move.l a1,picptr2
- move.l a1,a2
- add.w #4,hcount
-
- move.w hcount,d4 ;am I done with this pass?
- cmp.w pic+pc_H,d4
- bcs cp65 ;no
-
- addq.w #1,pass ;next pass please
- move.l picptr,a1 ;move to the second row
- clr.l d4
- move.w pic+pc_Width,d4
- add.l d4,a1
- move.l a1,picptr2
- move.l a1,a2
- move.w #2,hcount
- bra cp65
-
- cp63: clr.l d4 ;pass 4
- move.w pic+pc_Width,d4 ;move ahead 2 rows
- lsl.l #1,d4
- add.l d4,a1
- move.l a1,picptr2
- move.l a1,a2
- bra cp65
-
- cp64: move.l picptr2,a1
- add.w pic+pc_Width,a1
- move.l a1,picptr2
- move.l a1,a2
-
- cp65: move.w #7,d5
- move.w pic+pc_W,d6
- subq.w #1,d6
-
- cp7: addq.w #1,d3 ;update gif bit counter
- cmp.w pic+pc_BitPln,d3
- bcs cp1
-
- cp81: move.l a2,apos2 ;save place in amiga bitmap - plane x
- move.l a1,apos1 ;save place in amiga bitmap - plane 1
- move.w d5,bitcount ;save bit place in a2
- move.w d1,plncnt ;save plane counter
- move.w d6,pixcount ;save pixel counter
-
- movem.l (sp)+,d0-d7/a0-a6
- 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
- move.l table,a0 ;clean up and exit
- move.l spclnum(a0),a0
- cmp.w #1,(a0)
- beq abortobj
- bra abortpic
-
- rrts: rts
-
-
- ***********************************
- *** ***
- ***********************************
- purgepic:
- tst.l picture
- beq pu1
- move.l picture,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pu1: tst.l prefix
- beq pu2
- move.l prefix,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pu2: tst.l suffix
- beq pu3
- move.l suffix,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pu3: tst.l outcode
- beq pu4
- move.l outcode,a0
- move.l table,a1
- move.l m_delete(a1),a1
- jsr (a1)
-
- pu4: 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 GIF,DATA,PUBLIC
-
- special:
- dc.w 2
- dc.l spcl1,spcl2
-
- name: dc.b "GIF v2.0.2",0
-
- spcl1: dc.b "Picture Window",0
- spcl2: dc.b "Object",0
-
-
- ***************************************************************
- ***************************************************************
- SECTION GIF,BSS,PUBLIC
- temp: ds.l 1
- temp2: ds.l 1
- flag: ds.l 1
- savesp: ds.l 1
- picptr: ds.l 1
- picptr2: ds.l 1
- pptr: ds.l 1
- pic: ds.w pc_Sizeof/2
- object: ds.w ob_SizeOf/2
-
- picture: ds.l 1
- piclength: ds.l 1
- gcmap: ds.l 1
- gcmapsize: ds.l 1
- lcmap: ds.l 1
- lcmapsize: ds.l 1
- gbitcres: ds.b 1
- gbpp: ds.b 1
- gbgcolor: ds.b 1
- lbitcres: ds.b 1
- lbpp: ds.b 1
- lbgcolor: ds.b 1
- gnumcolors: ds.w 1
- lnumcolors: ds.w 1
- tempw: ds.w 1
- bitcount: ds.w 1
- plncnt: ds.w 1
- pixcount: ds.w 1
- apos1: ds.l 1
- apos2: ds.l 1
- codelength: ds.w 1
- plnlen: ds.l 1
- pass: ds.w 1
- hcount: ds.w 1
- bitmask: ds.l 1
- prefix: ds.l 1
- suffix: ds.l 1
- outcode: ds.l 1
-
-
- ***************************** CHANGES ****************************************
- ;
- ; version 2.0.2 (uploaded 11/07/90)
- ;
- ; - added new LZW decompression code from code written in C
- ; on the mac for an increase in the decompression speed
- ; (readcode & doGIF)
- ;
- ;
- ; version 2.0.1
- ;
- ; - changed linked list table to a static 4096 entry table
- ;
- ;
- ; version 2.0.0 (uploaded 11/02/90)
- ;
- ; - initial release
-