	include "exec/types.i"
	include "exec/initializers.i"
	include "libraries/dos.i"
	include "exec/resident.i"
	include "streplay_lib.i"

call	MACRO
	xref	_LVO\1
	jsr	_LVO\1(a6)
	ENDM

	section "node",CODE
	moveq	#20,d0
	rts

ROMTag:
	dc.w	RTC_MATCHWORD
	dc.l	ROMTag
	dc.l	EndCode
	dc.b	RTF_AUTOINIT
	dc.b	33
	dc.b	NT_LIBRARY
	dc.b	0
	dc.l	libname,ids
	dc.l	Init
libname:	dc.b	"streplay.library",0
ids:	dc.b	"STReplay.Library V33.8 Kludged 2.10.89 by Olli, dem Größten",13,10,0
	even
Init:	dc.l	strb_SIZEOF
	dc.l	functab,datatab,.InitLib
functab:
	dc.l	.OpenLib,.CloseLib,.ExpungeLib,.ExtFuncLib,
	dc.l	.LoadModule,.UnLoadModule,.IsModule
	dc.l	.Start,.Stop,.IsPlaying
	dc.l	-1
datatab:
	INITBYTE	LN_TYPE,NT_LIBRARY
	INITLONG	LN_NAME,libname
	INITBYTE	LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED
	INITWORD	LIB_VERSION,33
	INITWORD	LIB_REVISION,8
	INITLONG	LIB_IDSTRING,ids
	dc.l	0

.InitLib:
	move.l	d0,a1
	move.l	a0,strb_SegList(a1)
	clr.l	strb_Module(a1)
	clr.w	strb_Running(a1)
	rts

freemodule:
	move.l	strb_Module(a6),d0
	beq.s	ret
	move.l	a6,-(sp)
	move.l	d0,a1
	move.l	strb_Len(a6),d0
	move.l	4,a6
	call	FreeMem
	move.l	(sp)+,a6
	clr.l	strb_Module(a6)
	rts
.OpenLib:
	addq.w	#1,LIB_OPENCNT(a6)
	bclr	#LIBB_DELEXP,LIB_FLAGS(a6)
	move.l	a6,d0
ret:	rts
.CloseLib:
	moveq	#0,d0
	subq.w	#1,LIB_OPENCNT(a6)
	bne.s	ret
	btst	#LIBB_DELEXP,LIB_FLAGS(a6)
	beq.s	ret

.ExpungeLib
	tst.w	LIB_OPENCNT(a6)
	beq.s	remit
	bset	#LIBB_DELEXP,LIB_FLAGS(a6)
	moveq	#0,d0
	rts
remit:
	bsr	.Stop
	bsr	freemodule
	movem.l a5/d7,-(sp)
	move.l	a6,a5
	move.l	4,a6
	move.l	a5,a1
	call	Remove
	move.l	strb_SegList(a5),d7
	move.l	a5,a1
	moveq	#0,d0
	move.w	LIB_NEGSIZE(a5),d0
	sub.l	d0,a1
	add.w	LIB_POSSIZE(a5),d0
	call	FreeMem
	move.l	d7,d0
	movem.l (sp)+,a5/d7
	rts

.ExtFuncLib:
	moveq	#0,d0
	rts

;
;
;

.IsPlaying:
	move.w	strb_Running(a6),d0
	ext.l	d0
	rts

.IsModule
	move.l	strb_Module(a6),d0
	rts

.LoadModule:
	movem.l d2-d5/a5-a6,-(sp)
	move.l	a0,d3
	bsr	.Stop
	bsr	freemodule
	move.l	a6,a5
	move.l	4,a6
	lea	dosname(pc),a1
	moveq	#0,d0
	call	OpenLibrary
	move.l	d0,d4
	move.l	d0,a6
	move.l	d3,d1
	move.l	#1005,d2
	call	Open
	move.l	d0,d5
	bne.s	fileopen
	moveq	#-1,d0
lret:
	movem.l (sp)+,d2-d5/a5-a6
	rts
fileopen:
	move.l	d5,d1
	moveq	#0,d2
	move.l	#OFFSET_END,d3
	call	Seek
	move.l	d5,d1
	moveq	#0,d2
	move.l	#OFFSET_BEGINNING,d3
	call	Seek
	move.l	d0,strb_Len(a5)
	moveq	#2,d1		; ja,ja; manscher lehrnst nie
	move.l	4,a6
	call	AllocMem
	move.l	d4,a6
	move.l	d0,strb_Module(a5)
	bne.s	allocok
	move.l	d5,d1
	call	Close
	moveq	#-2,d0
	bra.s	lret
allocok:
	move.l	strb_Len(a5),d3
	move.l	d5,d1
	move.l	d0,d2
	call	Read
	move.l	d5,d1
	call	Close
	moveq	#0,d0
	bra.s	lret

.UnLoadModule:
	bsr.s	.Stop
	bra	freemodule

.Start
	tst.l	strb_Module(a6)
	beq.s	retu
	tst.w	strb_Running(a6)
	bne.s	retu
	move.w	#'RZ',strb_Running(a6)
	xref	mt_start
	jmp	mt_start
retu:	rts

.Stop
	tst.l	strb_Module(a6)
	beq.s	retu
	tst.w	strb_Running(a6)
	beq.s	retu
	clr.w	strb_Running(a6)
	jmp	mt_brems
	xref	mt_brems

dosname:
	dc.b	"dos.library",0
	even
EndCode:
	END
