; Testbeispiel 2 für B2-Midi-Playerroutinen
; (Songdaten direkt im Programm eingebunden)
;    (c) 8/1991 by
;   Jörg Schließer
;  Rotenwaldstr. 20
; D-7000 Stuttgart 1



; Amiga-Os-Library-Offsets

	; Exec-Library
Forbid		=	-132
FindTask	=	-294
GetMsg		=	-372
ReplyMsg	=	-378
WaitPort	=	-384



; Einsprungadressen, die von den B2-Midi-Playerroutinen übernommen werden

	xref _loadb2score,_freeb2score,_playb2score,_stopb2score
	xref _initb2score,_freeb2insts



; Nachfolgendes Programm ist ein Beispiel zur Nutzung der Playerroutinen
; von B2-Midi unter Verwendung der Optionen für einen eingebundenen Song.
;
; Es wird ein Song mit dem Namen 'The_Song', der sich beim Assemblieren
; in 'ram:' befindet in das Programm mit eingebunden. Da der Song ein
; B2-Midi-Full-Inst-Score-File sein soll, ist keine Angabe eines
; Instrumentenverzeichnisses beim Initialisieren des Songs nötig.
; Das Programm soll nur den Aufruf der Playerroutinen demonstieren,
; das Laden und Abspielen beliebiger Songs und das Einfügen der Routinen 
; in andere Programme kann analog zum unten aufgeführten Beispiel oder
; aber auch anders (z.Bsp. in C) erfolgen.
;
; Die exakten Aufrufparameter mit Erklärungen und die möglichen
; Rückgabeparameter können Sie dem Source der Playerroutinen selbst
; entnehmen oder der Beschreibung 'Routines.doc'
;
; Wenn ein Song von einem Programm nachgeladen werden sollte,
; würden die Aufrufe der Playerroutinen 'loadb2score' anstelle von
; 'initb2score' und 'freeb2score' anstelle von 'freeb2insts' sein.


	section testprog2,code


beginn:
	move.l	sp,startsp
	move.l	4,a6
	suba.l	a1,a1
	jsr	FindTask(a6)	;Ermitteln, ob Programm vom CLI
	move.l	d0,a4
	tst.l	$ac(a4)		;oder von der Workbench gestartet wurde
	bne	clistart
	lea	$5c(a4),a0
	jsr	Waitport(a6)
	lea	$5c(a4),a0
	jsr	GetMsg(a6)
	move.l	d0,startmessage
clistart:

	lea	song,a0		;Zeiger auf Scoredata
	move.l	#endsong,d0
	sub.l	a0,d0		;Länge des Songs
	moveq	#0,d1		;kein Instrumentenverzeichnis
	jsr	_initb2score	;Song initialisieren

	lea	song,a0		;Zeiger auf Scoredata
	move.l	#endsong,d0
	sub.l	a0,d0		;Länge des Songs
	jsr	_playb2score	;Abspiel des Scores starten


waiting:
	cmp.b	#$39,$bfec01	;Auf Druck der CTRL-Taste warten
	bne	waiting		;(Ist auf diese Art, nach den Richtlinien
				;für die Amigaprogrammierung TOTAL illegal!)

	jsr	_stopb2score	;Abspiel des Scores stoppen

	lea	song,a0		;Zeiger auf Scoredata
	move.l	#endsong,d0
	sub.l	a0,d0		;Länge des Songs
	jsr	_freeb2insts	;Instrumente aus Chip-Ram freigeben

droptest:
	tst.l	startmessage
	beq	endeplayer
	move.l	startmessage,a1
	jsr	ReplyMsg(a6)
	jsr	Forbid(a6)
endeplayer:
	moveq	#0,d0
	move.l	startsp,sp
	rts


; Variablen, Zwischenspeicher, Handles

startsp:	dc.l	0
startmessage:	dc.l	0

song:
		incbin "ram:The_Song"
endsong:	

 END

