** questo programma serve a testare ArcCompatibility()
**
** per    abilitare un flag scriverne il numero
** per disabilitare un flag scriverne il numero negativo
**
** e' possibile specificare piu' flag in una volta

	INCDIR	"include:"
	INCLUDE	"exec/types.i"
	INCLUDE	"exec/strings.i"

	INCLUDE	"exec/exec_lib.i"
	INCLUDE	"dos/dos_lib.i"

	INCLUDE	"dos/dosextens.i"
	INCLUDE	"dos/datetime.i"

	INCLUDE	"arc.i"
	INCLUDE	"arc_lib.i"
	INCLUDE	"lha_lib.i"
	INCLUDE	"lzx_lib.i"
	INCLUDE	"zip_lib.i"
	INCLUDE	"opts.i"

NULL	EQU	0

**********************************************************************

	STRUCTURE STATIC_DATA,0
	APTR	sd_dosbase
	APTR	sd_exebase
	APTR	sd_lhabase

	APTR	sd_dosargs
	LABEL	sd_cliargs
	APTR	sd_clinum
	APTR	sd_clinegzero

	ALIGNLONG
	LABEL	sd_SIZE

DOSBASE	MACRO
	movea.l	(a5),a6				; = sd_dosbase(a5),
	ENDM
EXEBASE	MACRO
	movea.l	sd_exebase(a5),a6
	ENDM
LHABASE	MACRO
	movea.l	sd_lhabase(a5),a6
	ENDM

**********************************************************************
**  CLI ONLY EASYSTART  **********************************************
**********************************************************************

easysta	movea.l	4.w,a6
	suba.l	a1,a1
	jsr	_LVOFindTask(a6)
	movea.l	d0,a2
	tst.l	pr_CLI(a2)
	bne.s	easycli
	lea	pr_MsgPort(a2),a0
	jsr	_LVOWaitPort(a6)
	lea	pr_MsgPort(a2),a0
	jsr	_LVOGetMsg(a6)
	movea.l	d0,a1
	jmp	_LVOReplyMsg(a6)

****************************************
**  OPEN DOS AND ALLOCATE STATIC DATA

easyold	moveq	#ERROR_INVALID_RESIDENT_LIBRARY,d0
	move.l	d0,pr_Result2(a2)
	rts

easycli	lea	dosname(pc),a1
	moveq	#37,d0				; kick 2.0+
	jsr	_LVOOpenLibrary(a6)
	move.l	d0,d2
	beq.s	easyold

	moveq	#NULL,d1
	moveq	#(sd_SIZE/BYTESPERLONG)-1,d0
easystk	move.l	d1,-(sp)
	dbf	d0,easystk
	movem.l	d2/a6,(sp)			; sd_dosbase(a5) sd_exebase(a5)
	movea.l	sp,a5
	movea.l	d2,a6

****************************************
**  PARSE COMMAND LINE AND RUN MAIN

	lea	templat(pc),a0
	lea	sd_cliargs(a5),a1
	move.l	a0,d1
	move.l	a1,d2
	moveq	#NULL,d3
	jsr	_LVOReadArgs(a6)
	move.l	d0,sd_dosargs(a5)
	beq.s	easyerr

	EXEBASE
	lea	libname(pc),a1
	moveq	#ARCVERS,d0			; lha.library
	jsr	_LVOOpenLibrary(a6)
	moveq	#RETURN_FAIL,d2
	move.l	d0,sd_lhabase(a5)
	beq.s	easylha
	movea.l	d0,a6
	bsr.s	main
	EXEBASE
	movea.l	sd_lhabase(a5),a1
	jsr	_LVOCloseLibrary(a6)
	move.l	d0,d2

easylha	DOSBASE
	move.l	sd_dosargs(a5),d1
	jsr	_LVOFreeArgs(a6)

****************************************
**  CLOSE DOS AND FREE STATIC DATA

easyend	movea.l	a6,a1
	movea.l	sd_exebase(a5),a6
	jsr	_LVOCloseLibrary(a6)
	adda.l	#sd_SIZE,sp
	move.l	d2,d0
	rts

easyerr	jsr	_LVOIoErr(a6)
	move.l	d0,d1
	moveq	#NULL,d2
	jsr	_LVOPrintFault(a6)
	moveq	#RETURN_ERROR,d2
	bra.s	easyend

**********************************************************************
**  MAIN PROGRAM  ****************************************************
**********************************************************************
**
** INPUT:   a6=lhabase
** OUTPUT:  d0=result
** SCRATCH: d0-d2/d7/a0-a1/a6
**

main	movea.l	sd_clinum(a5),a0
	moveq	#0,d0
	moveq	#0,d1
loop	move.l	(a0)+,d2
	beq.s	setzero
	movea.l	d2,a1
	move.l	(a1)+,d2
	blt.s	unset
	bset	d2,d0
	bset	d2,d1
	bra.s	loop
unset	neg.l	d2
	bset	d2,d0
	bra.s	loop
setzero	tst.l	sd_clinegzero(a5)
	beq.s	setcomp
	ori.w	#1<<0,d0
	andi.w	#~(1<<0),d1

setcomp	jsr	_LVOArcCompatibility(a6)
	move.l	d0,d2
	moveq	#0,d1
	moveq	#0,d0
	jsr	_LVOArcCompatibility(a6)

	DOSBASE
	lea	fmt(pc),a0
	move.l	d0,-(sp)
	move.l	a0,d1
	move.l	d2,-(sp)
	move.l	sp,d2
	jsr	_LVOPrintf(a6)
	addq.l	#BYTESPERLONG*2,sp

	moveq	#RETURN_OK,d0
	rts

**********************************************************************
**  STRING CONSTANTS  ************************************************
**********************************************************************

	DC.B	"$","VER: "
	DC.B	"GetArcCompatibility() 37.",(ARCVERS+"0"),"0 (29.08.97) "
	DC.B	"by Nik Soggia",EOS

templat	DC.B	"NUM/N/M,-0/S",EOS

dosname	DOSNAME
libname	;	dummy
	IFEQ	ARCTYPE-1
	LHANAME
	ENDC
	IFEQ	ARCTYPE-2
	LZXNAME
	ENDC
	IFEQ	ARCTYPE-3
	ZIPNAME
	ENDC

fmt	DC.B	"old: 0x%08lx",LF
	DC.B	"new: 0x%08lx",LF,EOS

	EVEN
	END
