** questo programma serve a testare ArchiveList()
**
** richiede il nome di un archivio completo di path ed estensione

	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_cliarc

	STRUCT	sd_buf1,LEN_DATSTRING
	STRUCT	sd_buf2,LEN_DATSTRING
	STRUCT	sd_date,dat_SIZEOF

	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	lea	sd_buf1(a5),a0
	move.l	a0,sd_date+dat_StrDate(a5) 
	lea	sd_buf2(a5),a0
	move.l	a0,sd_date+dat_StrTime(a5) 
	DOSBASE
	jsr	_LVOOutput(a6)
	move.l	d0,d2
	jsr	_LVOInput(a6)
	LHABASE
	move.l	d7,d1
	move.l	sd_cliarc(a5),a0
	suba.l	a1,a1
	jsr	_LVOArchiveListBegin(a6)
	move.l	d0,d7
	beq.s	done

loop	EXEBASE
	moveq	#0,d0
	moveq	#0,d1
	jsr	_LVOSetSignal(a6)
	andi.w	#SIGBREAKF_CTRL_C,d0
	bne.s	noerr

	LHABASE
	move.l	d7,d0
	jsr	_LVOArchiveList(a6)
	tst.l	d0
	bne.s	done

	DOSBASE
	movea.l	d7,a0
	move.l	aa_comment(a0),-(sp)
	move.l	sd_date+dat_StrTime(a5),-(sp)
	move.l	sd_date+dat_StrDate(a5),-(sp)
	move.l	aa_compressed(a0),-(sp)
	move.l	aa_size(a0),-(sp)
	move.l	aa_name(a0),-(sp)
	lea	sd_date+dat_Stamp(a5),a1
	lea	aa_date(a0),a0
	move.l	a1,d1
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0),(a1)
	jsr	_LVODateToStr(a6)
	lea	fmt(pc),a0
	move.l	sp,d2
	move.l	a0,d1
	jsr	_LVOPrintf(a6)
	lea	BYTESPERLONG*6(sp),sp
	bra.s	loop

done	DOSBASE
	jsr	_LVOIoErr(a6)
	cmpi.l	#ERROR_NO_MORE_ENTRIES,d0
	beq.s	noerr
	move.l	d0,d1
	move.l	sd_cliarc(a5),d2
	jsr	_LVOPrintFault(a6)
noerr	LHABASE
	move.l	d7,d0
	jsr	_LVOArchiveListEnd(a6)

	moveq	#RETURN_OK,d0
	rts

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

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

templat	DC.B	"ARC/A",EOS

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

fmt	DC.B	"%-45s %-7ld %-7ld %s %s %s",LF,EOS


	EVEN
	END
