; This is the module that needs to be assembled and linked with a C application
; that uses the dissidents' samp.library
;
; All values passed to the samp.library routines MUST be 32 bit quantities!

		SECTION	SampInt,CODE

		XREF		_SAMPBase	;C application opens samp.library and stores
									;the base at this variable

		INCLUDE	"SAMP.i"		;needs the assembly INCLUDE file

	XDEF	_OpenSampRead,__OpenSampRead
_OpenSampRead:
		movea.l	_SAMPBase,a6
__OpenSampRead:
		move.l	4(sp),d1
      movea.l  8(sp),a0
		jsr		_LVOOpenSampRead(a6)
		move.l	d1,_SAMPError
		rts

	XDEF	_CloseSamp,__CloseSamp
_CloseSamp:
		movea.l	_SAMPBase,a6
__CloseSamp:
		jmp		_LVOCloseSamp(a6)

	XDEF	_ReadWaves,__ReadWaves
_ReadWaves:
		movea.l	_SAMPBase,a6
__ReadWaves:
		movem.l	d6/d7/a2/a3,-(sp)
		movem.l	20(sp),d6/d7/a2/a3
		jsr		_LVOReadWaves(a6)
		move.l	d1,_SAMPError
		movem.l	(sp)+,d6/d7/a2/a3
		rts

	XDEF	_LoadPlaymap,__LoadPlaymap
_LoadPlaymap:
		movea.l	_SAMPBase,a6
__LoadPlaymap:
		movem.l	d6/d7,-(sp)
		movem.l	12(sp),d0/d1
		movem.l	20(sp),d6/d7
		movea.l	28(sp),a0
		jsr		_LVOLoadPlaymap(a6)
		movem.l	(sp)+,d6/d7
		rts

	XDEF	_MixPlaymap,__MixPlaymap
_MixPlaymap:
		movea.l	_SAMPBase,a6
__MixPlaymap:
		movem.l	d6/d7,-(sp)
		movem.l	12(sp),d0/d1
		movem.l	20(sp),d6/d7
		movea.l	28(sp),a0
		jsr		_LVOMixPlaymap(a6)
		movem.l	(sp)+,d6/d7
		rts

	XDEF	_MakeTransTable,__MakeTransTable
_MakeTransTable:
		movea.l	_SAMPBase,a6
__MakeTransTable:
		movem.l	d5/d6/d7/a2,-(sp)
		movem.l	20(sp),d5/d6/d7/a2
		jsr		_LVOMakeTransTable(a6)
		movem.l	(sp)+,d5/d6/d7/a2
		rts

	XDEF	_OpenSampWrite,__OpenSampWrite
_OpenSampWrite:
		movea.l	_SAMPBase,a6
__OpenSampWrite:
		move.l	4(sp),d1
		jsr		_LVOOpenSampWrite(a6)
		move.l	d1,_SAMPError
		rts

	XDEF	_WriteMHDR,__WriteMHDR
_WriteMHDR:
		movea.l	_SAMPBase,a6
__WriteMHDR:
		move.l	4(sp),d0
		movea.l	8(sp),a0
		jmp		_LVOWriteMHDR(a6)

	XDEF	_WriteSampChunk,__WriteSampChunk
_WriteSampChunk:
		movea.l	_SAMPBase,a6
__WriteSampChunk:
		movem.l	4(sp),d0/d1/a0
		jmp		_LVOWriteSampChunk(a6)

	XDEF	_WriteSampData,__WriteSampData
_WriteSampData:
		movea.l	_SAMPBase,a6
__WriteSampData:
		move.l	d3,-(sp)
		movem.l	8(sp),d3/a0
		jsr		_LVOWriteSampData(a6)
		move.l	(sp)+,d3
		rts

	XDEF	_WriteNames,__WriteNames
_WriteNames:
		movea.l	_SAMPBase,a6
__WriteNames:
		movem.l	4(sp),d0/a0
		jmp		_LVOWriteNames(a6)

	XDEF	_WriteWaves,__WriteWaves
_WriteWaves:
		movea.l	_SAMPBase,a6
__WriteWaves:
		movem.l	4(sp),d0/d1/a0/a1
		jmp		_LVOWriteWaves(a6)

	XDEF	_SAMPErrorMsg,__SAMPErrorMsg
_SAMPErrorMsg:
		movea.l	_SAMPBase,a6
__SAMPErrorMsg:
		move.l	4(sp),d1
		jmp		_LVOSAMPErrorMsg(a6)

		SECTION	SampDat,DATA

	XDEF	_SAMPError
_SAMPError	dc.l	0
