	AddLabl	L_Init
	cmp.l	#'APex',d1				;Check for AMOS Pro
	bne.s	.error
	move.l	#O_SizeOf,d0				;Get extension memory
	move.l	#$10001,d1				;Cleared memory
	move.l	a6,d5					;Save a6
	move.l	4.w,a6
	jsr	_LVOAllocMem(a6)
	move.l	d5,a6					;Restore a6
	move.l	d0,ExtAdr+ExtNb*16(a5)			;Move address to a
	beq.s	.error					;available place
	move.l	d0,a2

	lea	ResetToDefault(pc),a0			;Insert 'Default' routine
	move.l	a0,ExtAdr+ExtNb*16+4(a5)
	lea	ExtQuit(pc),a0				;Insert termination
	move.l	a0,ExtAdr+ExtNb*16+8(a5)
	lea	BkCheck(pc),a0				;Insert bank check
	move.l	a0,ExtAdr+ExtNb*16+12(a5)

	moveq.l	#0,d1
	Rbsr	L_P61Func
;	bsr	ResetToDefault				;Default once.
	move.w	#$0110,d1				;AMOS Pro version needed
	moveq	#ExtNb,d0				;Extension number
 	rts
.error	sub.l	a0,a0					;Error has occured.
	moveq.l	#-1,d0
	rts

ResetToDefault						;Default Routine.
;	movem.l	a3-a6/d6-d7,-(sp)
	Rbsr	L_P61Stop				;e.g Protracker Stop
;	movem.l	(sp)+,a3-a6/d6-d7
	rts

ExtQuit
	movem.l	a3-a6/d6-d7,-(sp)
	bsr	ResetToDefault				;Call the Default Routine
	dload	a2
	move.l	a6,d3
	move.l	4.w,a6
	move.l	a2,a1					;Free Extension memory.
	move.l	#O_SizeOf,d0
	jsr	_LVOFreeMem(a6)
	move.l	d3,a6
	movem.l	(sp)+,a3-a6/d6-d7
	rts

BkCheck	dload	a2
	tst.w	O_MusicEnabled(a2)
	beq.s	.skip
	move.l	O_MusicBank(a2),d0
	Rjsr	L_Bnk.GetAdr
	beq.s	.ptstop
	move.l	O_MusicAddress(a2),d0
	cmp.l	a0,d0
	beq.s	.skip
.ptstop	movem.l	a3-a6/d6-d7,-(sp)
	Rbsr	L_P61Stop
	movem.l	(sp)+,a3-a6/d6-d7
.skip	rts

	AddLabl						;Empty label.
