;TestProgramm für "tracker.library"

; Testet TRK_InfoName

	NOLIST
	INCLUDE "exec/LVO.i"
	INCLUDE "exec/memory.i"
	INCLUDE "dos/LVO.i"
	INCLUDE "dos/dos.i"
	INCLUDE "dos/datetime.i"
	INCLUDE "dos/dosextens.i"
	INCLUDE "libraries/tracker.i"
	LIST

Print:	MACRO
	move.l	Output,d1
	move.l	#\1,d2
	CALLDOS VFPrintf
	ENDM

_TrackerBase:	EQUR a5
_DOSBase:	EQUR a4
Output: 	EQUR d7

; WB-Message ?
	sub.l	a1,a1		;a1=0->eigener Task
	CALLEXEC FindTask	;Wo darf man denn nachschauen ?
	move.l	d0,a0
	tst.l	pr_CLI(a0)      ;von CLI oder WB aus gestartet ?
	bne	fromCLI
;von WB aus:
	lea	pr_MsgPort(a0),a0
	move.l	a0,-(sp)
	CALLEXEC WaitPort	;auf Start-Message warten
	move.l	(sp)+,a0
	CALLEXEC GetMsg ;muß nachher beantwortet werden
	move.l	d0,WBenchMsg

fromCLI:
; Tracker-Library öffnen
	OPENLIB TrName,3
	tst.l	d0
	beq	ende_all
	move.l	d0,_TrackerBase
	TRK_OPENSTDLIB DOS,36
	tst.l	d0
	beq	ende_trk
	move.l	d0,_DOSBase

	tst.l	WBenchMsg
	bne	fromWB
;von CLI aus -> Ausgaben ins CLI-Fenster
	CALLDOS Output
	move.l	d0,Output
	bra	main
;von WB aus gestartet -> eigenes Window nötig
fromWB: move.l	#WdName,d1
	move.l	#MODE_OLDFILE,d2
	CALLTRK TRK_Open
	move.l	d0,Output
;---------------------------------------------------------------------------
;Haupt-Testteil

INFO:	MACRO
	move.l	#\1,d1
	bsr	Info
	ENDM

main:	INFO	Name_1
	INFO	Name_2
	move.l	d0,d6
	INFO	Name_3
	move.l	d0,d5
	move.l	d6,d1
	beq	1$
	bsr	Free
1$:	INFO	Name_4
	move.l	d5,d1
	beq	2$
	bsr	Free
2$:	INFO	Name_5

;---------------------------------------------------------------------------

ende_main:
;ggf. End-Botschaft und Verzögerung
	tst.l	WBenchMsg
	beq	ende_trk
	move.l	Output,d1
	move.l	#GoodBye,d2
	moveq	#GoodByeLen,d3
	CALLDOS Write
	move.l	#150,d1
	CALL	Delay
;Library schließen
ende_trk:
	CLOSELIB _TrackerBase
ende_all:
	tst.l	WBenchMsg	;war da was ?
	beq	toCLI		;na dann halt nicht
;Message zur WB zurück
	move.l	WBenchMsg,a1
	CALLEXEC ReplyMsg
toCLI:	moveq	#0,d0
	rts

;---------------------------------------------------------------------------
; Unterprogramm: Namen untersuchen lassen
; Parameter: d1 = Adresse des Filenamens
; Ergebnis: die Info-Data-Struktur

Info:	move.l	sp,a3
	move.l	d1,-(sp)
	CALLTRK TRK_InfoName
	tst.l	d0
	bne	1$
	move.l	sp,d3
	Print	not_existant
	move.l	a3,sp
	moveq	#0,d0
	rts
1$:	move.l	(sp),d1
	move.l	d0,(sp)
;den ganzen Krimskrams ausgeben:
	move.l	d0,a0
	move.l	id_InUse(a0),-(sp)              ;10. Parameter
	move.l	id_VolumeNode(a0),-(sp)         ;9. Parameter
	lea	DType,a1
	move.l	id_DiskType(a0),(a1)
	move.l	a1,-(sp)                        ;8. Parameter
	move.l	id_BytesPerBlock(a0),-(sp)      ;7. Parameter
	move.l	id_NumBlocksUsed(a0),-(sp)      ;6. Parameter
	move.l	id_NumBlocks(a0),-(sp)          ;5. Parameter
	move.l	id_DiskState(a0),d0
	cmp.l	#ID_NO_DISK_PRESENT,d0
	bne	4$
	pea	DS_NO_DISK_PRESENT		;4. Parameter
	bra	5$
4$:	cmp.l	#ID_WRITE_PROTECTED,d0
	bne	6$
	pea	DS_WRITE_PROTECTED		;4. Parameter
	bra	5$
6$:	cmp.l	#ID_VALIDATING,d0
	bne	7$
	pea	DS_VALIDATING			;4. Parameter
	bra	5$
7$:	cmp.l	#ID_VALIDATED,d0
	bne	8$
	pea	DS_VALIDATED			;4. Parameter
	bra	5$
8$:	pea	unknown 			;4. Parameter
5$:	move.l	id_UnitNumber(a0),-(sp)         ;3. Parameter
	move.l	id_NumSoftErrors(a0),-(sp)      ;2. Parameter
	move.l	d1,-(sp)                        ;1. Parameter: Name
	move.l	sp,d3
	Print	existant
	move.l	-4(a3),d0
	move.l	a3,sp
	rts
;---------------------------------------------------------------------------
;Unterroutine: TRK_FreeFIB testen
;Parameter: d1 = Adresse des Speicherbereichs
;Ergebnis: -

Free:	movem.l d1-d3,-(sp)     ;Register sichern
	move.l	d1,a1
	CALLTRK TRK_FreeMem
	move.l	sp,d3
	movem.l (sp)+,d1-d3     ;Register zurück
	rts
;---------------------------------------------------------------------------
WBenchMsg:	dc.l	0
DType:		dc.l	0,0

TrName: TRACKERNAME

WdName: 	dc.b "CON:0/0/640/200/Info-Test für tracker.library",0
GoodBye:	dc.b 10,"Bye - closing soon !",0
GoodByeLen:	equ *-GoodBye
Name_1: 	dc.b "SYS:",0
Name_2: 	dc.b "S:Startup-Sequence",0
Name_3: 	dc.b "DF1:",0
Name_4: 	dc.b "ENV:",0
Name_5: 	dc.b "RAM:",0
not_existant:	dc.b "Datei/Pfad %s kann nicht untersucht werden !"
CrLf:		dc.b 10,0
FreeText:	dc.b "InfoData at $%06lx freed",10,0
existant:	dc.b "Datei/Pfad %s untersucht",10
		dc.b "NumSoftErrors = %ld",10
		dc.b "UnitNumber    = %ld",10
		dc.b "DiskState     = %s",10
		dc.b "NumBlocks     = %ld",10
		dc.b "NumBlocksUsed = %ld",10
		dc.b "BytesPerBlock = %ld",10
		dc.b "DiskType      = %s",10
		dc.b "VolumeNode    = $%06lx",10
		dc.b "InUse         = %ld",10,0
DS_WRITE_PROTECTED: dc.b "write protected",0
DS_VALIDATING:	dc.b "validating",0
DS_VALIDATED:	dc.b "validated",0
DS_NO_DISK_PRESENT: dc.b "no_disk_present",0
unknown:	dc.b "unknown",0

	END
