;----------------------------------------------------------------------------
;unpack_fungus(void *source,long size)
;
unpack_fungus:
	MOVEA.L	4(A7),A0
	MOVE.L	8(A7),D0
	MOVEM.L	A0-A6/D0-D7,-(A7)
	BTST	#0,D0
	BNE	.L071D
	MOVEA.L	A0,A1		;a1 -> destination base
	ADDA.L	D0,A0		;a0 -> source end
	CMPI.L	#'GUS*',-(A0)
	BNE	.L071D
	CMPI.L	#'*FUN',-(A0)
	BNE	.L071D
	MOVEA.L	-(A0),A2	;a2 = original size
	ADDA.L	A1,A2		;a2 -> destination end
	MOVE.L	-(A0),D0
	MOVE.L	-(A0),D4
	MOVE.L	-(A0),D5
	MOVE.L	-(A0),D6
	MOVE.L	-(A0),D7
.L070E:
	ADD.L	D0,D0
	BNE.S	.L070F
	MOVE.L	D4,D0
	MOVE.L	D5,D4
	MOVE.L	D6,D5
	MOVE.L	D7,D6
	MOVE.L	-(A0),D7
	MOVE	#-1,CCR
	ADDX.L	D0,D0
.L070F:
	BCS	.L0716
	MOVEQ	#3,D1
	MOVEQ	#0,D3
	ADD.L	D0,D0
	BNE.S	.L0710
	MOVE.L	D4,D0
	MOVE.L	D5,D4
	MOVE.L	D6,D5
	MOVE.L	D7,D6
	MOVE.L	-(A0),D7
	MOVE	#-1,CCR
	ADDX.L	D0,D0
.L0710:
	BCS.S	.L0712
	MOVEQ	#1,D3
	MOVEQ	#8,D1
	BRA	.L071A
.L0711:
	MOVEQ	#8,D1
	MOVEQ	#8,D3
.L0712:
	BSR	L071E
	ADD.W	D2,D3
.L0713:
	MOVEQ	#7,D1
.L0714:
	ADD.L	D0,D0
	BNE.S	.L0715
	MOVE.L	D4,D0
	MOVE.L	D5,D4
	MOVE.L	D6,D5
	MOVE.L	D7,D6
	MOVE.L	-(A0),D7
	MOVE	#-1,CCR
	ADDX.L	D0,D0
.L0715:
	ADDX.W	D2,D2
	DBF	D1,.L0714
	MOVE.B	D2,-(A2)
	DBF	D3,.L0713
	BRA	.L071C
.L0716:
	MOVEQ	#0,D2
	ADD.L	D0,D0
	BNE.S	.L0717
	MOVE.L	D4,D0
	MOVE.L	D5,D4
	MOVE.L	D6,D5
	MOVE.L	D7,D6
	MOVE.L	-(A0),D7
	MOVE	#-1,CCR
	ADDX.L	D0,D0
.L0717:
	ADDX.W	D2,D2
	ADD.L	D0,D0
	BNE.S	.L0718
	MOVE.L	D4,D0
	MOVE.L	D5,D4
	MOVE.L	D6,D5
	MOVE.L	D7,D6
	MOVE.L	-(A0),D7
	MOVE	#-1,CCR
	ADDX.L	D0,D0
.L0718:
	ADDX.W	D2,D2
	CMP.B	#2,D2
	BLT.S	.L0719
	CMP.B	#3,D2
	BEQ.S	.L0711
	MOVEQ	#8,D1
	BSR	L071E
	MOVE.W	D2,D3
	MOVE.W	#$C,D1
	BRA	.L071A
.L0719:
	MOVEQ	#2,D3
	ADD.W	D2,D3
	MOVE.W	#9,D1
	ADD.W	D2,D1
.L071A:
	BSR	L071E
	LEA	1(A2,D2.W),A3
.L071B:
	MOVE.B	-(A3),-(A2)
	DBF	D3,.L071B
.L071C:
	CMPA.L	A2,A1
	BNE	.L070E
.L071D:
	MOVEM.L	(A7)+,A0-A6/D0-D7
	RTS
;
;
L071E:
	SUBQ.W	#1,D1
	CLR.W	D2
.L071F:
	ADD.L	D0,D0
	BNE.S	.L0720
	MOVE.L	D4,D0
	MOVE.L	D5,D4
	MOVE.L	D6,D5
	MOVE.L	D7,D6
	MOVE.L	-(A0),D7
	MOVE	#-1,CCR
	ADDX.L	D0,D0
.L0720:
	ADDX.W	D2,D2
	DBF	D1,.L071F
	RTS
;
;----------------------------------------------------------------------------
