;TestProgramm für "tracker.library"

; Testet TRK_OpenLibrary, TRK_OpenStdLibrary und TRK_CloseLibrary

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

_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
	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
	CALLDOS Open
	move.l	d0,Output
;---------------------------------------------------------------------------
;Haupt-Testteil

OPEN:	MACRO	;Name, Text, Version, sichern in
	lea	\2,a0
	lea	\1,a1
	move.l	#\3,d0
	bsr	Open
	move.l	d0,\4
	ENDM
OPENSTD: MACRO	;Kennung ohne STDLIB_, Text, Version, sichern in
	lea	\2,a0
	move.l	#STDLIB_\1,d1
	move.l	#\3,d0
	bsr	OpenStd
	move.l	d0,\4
	ENDM
CLOSE:	MACRO	;wo gesichert
	move.l	\1,a1
	bsr	Close
	ENDM

main:	OPEN	UtilityName,UtilityText,0,d0
	OPENSTD ASL,AslText,36,d6
	OPENSTD DISKFONT,DFText,34,d5
	CLOSE	d6
	OPEN	FantasyName,FantasyText,33,d0
	OPENSTD DISKFONT,DFText,40,d0
	CLOSE	d5

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

;ggf. Window schließen
	tst.l	WBenchMsg
	beq	ende_trk
	move.l	Output,d1
	move.l	#GoodBye,d2
	move.l	#GoodByeLen,d3	;jetzt sind die Speicher-Pointer uninteressant
	CALLDOS Write
	move.l	#150,d1
	CALL	Delay
	move.l	Output,d1
	CALL	Close
;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
;---------------------------------------------------------------------------
;Unterroutine: TRK_OpenStdLibrary testen
;Parameter: d0 = gewünschte Version
;	    a0 = Text-Label mit dem Library-Base-Namen
;	    d1 = Kenn-Nummer der Library
;Ergebnis: die LibraryBase / 0 bei Fehler

OpenStd: movem.l d0/a0,-(sp)
	move.l	d1,-(sp)
	move.l	sp,d3
	move.l	Output,d1
	move.l	#OpenStdText,d2
	CALLDOS VFPrintf
	move.l	(sp)+,d1
	move.l	(sp)+,d0
	CALLTRK TRK_OpenStdLibrary
	bra	PostOpen
;---------------------------------------------------------------------------
;Unterroutine: TRK_OpenLibrary testen
;Parameter: d0 = gewünschte Version
;	    a0 = Text-Label mit dem Library-Base-Namen
;	    a1 = Name der Library
;Ergebnis: die LibraryBase / 0 bei Fehler

Open:	movem.l d0/a0,-(sp)
	move.l	a1,-(sp)
	move.l	sp,d3
	move.l	Output,d1
	move.l	#OpenText,d2
	CALLDOS VFPrintf
	move.l	(sp)+,a1
	move.l	(sp)+,d0
	CALLTRK TRK_OpenLibrary
PostOpen:
	move.l	Output,d1
	move.l	(sp),d2
	move.l	d0,(sp)
	move.l	sp,d3
	CALLDOS VFPrintf
	move.l	(sp)+,d0
	rts
;---------------------------------------------------------------------------
;Unterroutine: TRK_CloseLibrary testen
;Parameter: a1 = LibraryBase
;Ergebnis: -

Close:	move.l	a1,d0
	bne	1$
	rts
1$:	movem.l a1,-(sp)        ;Register sichern
	CALLTRK TRK_CloseLibrary
	move.l	Output,d1
	move.l	#CloseText,d2
	move.l	sp,d3
	CALLDOS VFPrintf
	add.w	#4,sp
	rts
;---------------------------------------------------------------------------

WBenchMsg:	dc.l	0

TrName: TRACKERNAME

OpenStdText:	dc.b "OpenStdLibrary(%ld,%ld) : ",0
OpenText:	dc.b "OpenLibrary(",34,"%s",34,",%ld) : ",0
CloseText:	dc.b "CloseLibrary($%06lx) done",10,0
WdName: 	dc.b "CON:////OpenLibrary-Test für tracker.library",0
GoodBye:	dc.b 10,"Bye - closing soon !"
GoodByeLen:	equ  *-GoodBye
UtilityName:	dc.b "utility.library",0
UtilityText:	dc.b "_UtilityBase=$%06lx",10,0
AslText:	dc.b "_AslBase=$%06lx",10,0
DFText: 	dc.b "_DiskfontBase=$%06lx",10,0
FantasyName:	dc.b "fantasy.library",0
FantasyText:	dc.b "_FantasyBase=$%06lx",10,0

	END
