;Set your editor's TAB width to 3

;====================== SAMP.LIB LVO LABELS ===========================

	XDEF	_LVOOpenSampWrite,_LVOWriteWaves,_LVOWriteNames,_LVOWriteMHDR
	XDEF	_LVOWriteSampChunk,_LVOWriteSampData,_LVOCloseSamp
	XDEF	_LVOOpenSampRead,_LVOLoadPlaymap,_LVOMixPlaymap,_LVOReadWaves
	XDEF	_LVOMakeTransTable,_LVOSAMPErrorMsg

_LVOOpenSampWrite		equ	-30
_LVOWriteWaves			equ	-36
_LVOWriteNames			equ	-42
_LVOWriteMHDR			equ	-48
_LVOWriteSampChunk	equ	-54
_LVOWriteSampData		equ	-60
_LVOCloseSamp			equ	-66
_LVOOpenSampRead		equ	-72
_LVOLoadPlaymap		equ	-78
_LVOMixPlaymap			equ	-84
_LVOReadWaves			equ	-90
_LVOMakeTransTable	equ	-96
_LVOSAMPErrorMsg		equ	-102
_LVOCusMakeTransTable	equ	-108
_LVORemoveTTable		equ	-114
_LVOFreeTTables		equ	-120
_LVOFindTNode			equ	-126

;======================== SAMP.LIB ERROR CODES ===========================
; As returned by OpenSampRead, OpenSampWrite, and ReadWaves.

SUCCESS		equ	0	;Operation successful
LIBINUSE		equ	1	;Some other task is using samp.library
NOOPENFILE	equ	2	;Cannot open the file
NOTSAMP		equ	3	;Not a SAMP file
BADSAMP		equ	4	;Bad SAMP file
NOSUPPORT	equ	5	;SAMP file not supported
OUTOFRANGE	equ	6	;Too few waves in the file
OUTOFMEM		equ	7	;No mem to load the next wave
NOMOREWAVES	equ	8	;No more waves in the file
USERABORT	equ	9	;Application Abort


;====================== The SAMP file MHDR chunk ========================
;MHDR size is dependant upon the size of the imbedded playMap.

;MHDR:
;NumOfWaves		dc.b	0		;The number of waves in this file
;Format			dc.b	0		;# of ORIGINAL significant bits from 8-28
;Flags			dc.b	0		;Various bits indicate various functions
;PlayMode		dc.b	0		;determines play MODE of the playMap
;NumOfChans		dc.b	4		;# of bytes in playMap for each midi note
;Pad				dc.b	0
;PlayMap			ds.b	128*4	;a map of which wave numbers to use for
									;each of 128 possible Midi Notes. Default to 4
									;bytes per midi note (i.e. numOfChans = 4)

MHDR_NumOfWaves	equ	0
MHDR_Format			equ	1
MHDR_Flags			equ	2
MHDR_PlayMode		equ	3
MHDR_NumOfChans	equ	4
MHDR_Pad				equ	5
MHDR_PlayMap		equ	6

;PlayMode
INDEPENDENT		equ	0
MULTI				equ	1
STEREO			equ	2
PAN				equ	3

;Flags
CONTINUED_FILE equ 	0
STEREO_FILE		equ	1

;====================== The SAMP file BODY chunk ======================
; Every wave has an 80 byte waveHeader, followed by its data. The waveHeader
; structure is as follows:

;waveHeader:
;WaveSize			dc.l	0
;MidiSampNum		dc.w	0	;for midi
;LoopType			dc.b	0	;for midi
;InsType				dc.b	0
;Period				dc.l	0
;Rate					dc.l	0
;LoopStart			dc.l	0
;LoopEnd				dc.l	0
;RootNote			dc.b	0
;VelStart			dc.b	0
;VelTable			ds.w	16
;ATAKsize			dc.l	0
;RLSEsize			dc.l	0
;FATKsize			dc.l	0
;FRLSsize			dc.l	0
;USERsize			dc.l	0
;USERtype			dc.w	0

sizeofwaveHeader	equ	80
wh_WaveSize		equ	0
wh_MidiSampNum	equ	4
wh_loopType		equ	6
wh_InsType		equ	7
wh_Period		equ	8
wh_Rate			equ	12
wh_LoopStart	equ	16
wh_LoopEnd		equ	20
wh_RootNote		equ	24
wh_VelStart		equ	25
wh_VelTable		equ	26
wh_ATAKsize		equ	58
wh_RLSEsize		equ	62
wh_FATKsize		equ	66
wh_FRLSsize		equ	70
wh_USERsize		equ	74
wh_USERtype		equ	78

SPECIFIC		equ	0
VOLMOD		equ	1
PERMOD		equ	2
LOOPING		equ	3

;================ SAMPlib SampleHeader64 structure =============
; Used by the lib to load SAMP files

;SampleHeader64:
;OneShotAddr		dc.l	0
;Flags				dc.b	0
;VelStart			dc.b	0
;VelTable			ds.w	16
;OneShotEnd			dc.l	0		;loop start, as well
;TransTable			dc.l	0		;points to ORIGINAL_PITCH
;RootNote			dc.w	0
;LoopLength			dc.l	0		;in words, bit 31 cannot be set
;AttackRate			dc.b	0		;0 - 255
;AttackInc			dc.b	0		;1 - 64
;DecayRate			dc.b	0		;1 - 255
;DecayDec			dc.b	0		;1 - 64
;SusLevel			dc.b	0		;0 - 64
;ReleaseRate		dc.b	0		;1 - 255
;ReleaseDec			dc.b	0		;1 - 64
;ClipNote			dc.b	0
;WaveSize			dc.l	0		;in bytes

sizeofSampleHeader64	equ	64
sh_OneShotAddr		equ	0
sh_Flags				equ	4
sh_VelStart			equ	5
sh_VelTable			equ	6
sh_OneShotEnd		equ	38
sh_TransTable		equ	42
sh_RootNote			equ	46
sh_LoopLength		equ	48
sh_AttackRate		equ	52
sh_AttackInc		equ	53
sh_DecayRate		equ	54
sh_DecayDec			equ	55
sh_SusLevel			equ	56
sh_ReleaseRate		equ	57
sh_ReleaseDec		equ	58
sh_ClipNote			equ	59
sh_WaveSize			equ	60

;====================== For the Transpose table ====================
; For playback of the wave

;TransposeNode:
;Next			dc.l	0	;next TransposeNode in TList
;Prev			dc.l	0	;previous TransposeNode in TList
;Period		dc.l	0	;in NANOSECONDS
;Orig			dc.l	0	;address of ORIGINAL_PITCH
;TSize		dc.l	0	;total size of node plus table
;pad			dc.b	0
;Hosts		dc.b	0	;# of waves using this table

sizeofTNode	equ	26	;counting mandatory appended ORIGINAL_PITCH period entry
tn_Next		equ	0
tn_Prev		equ	4
tn_Period	equ	8
tn_Orig		equ	12
tn_TSize		equ	16
tn_Hosts		equ	21


;=================== the library's SAMPInfo structure ================

;SAMPInfo:
;FileHandle		dc.l	0
;IFFTypeID		dc.b	'FORM'	;could be CAT or LIST
;FileSize		dc.l	0
;SAMP				dc.b	'SAMP'
;MHDR				dc.b	'MHDR'
;MHDRSize		dc.l	0
;NumOfWaves		dc.b	0
;Format			dc.b	0
;Flags			dc.b	0
;PlayMode		dc.b	0
;NumOfChans		dc.b	0
;Pad				dc.b	0
;PlayMap			ds.b	128*NumOfChans
;ANNOChunk		dc.l	0
;BODYChunk		dc.l	0
;NAMEChunk		dc.l	0
;AUTHChunk		dc.l	0
;COPYChunk		dc.l	0
;ATAK				dc.l	0
;RLSE				dc.l	0
;FATK				dc.l	0
;FRLS				dc.l	0
;USER				dc.l	0
;EXTRA			dc.l	0
;SeekPos			dc.l	0
;MemType			dc.l	0
;MaxChars		dc.w	0
;LowPer			dc.w	0
;HighPer			dc.w	0

sizeofSAMPInfo	equ	600
si_Handle		equ	0
si_TypeID		equ	4
si_FileSize		equ	8
si_SAMP			equ	12
si_MHDR			equ	16
si_MHDRSize		equ	20
si_NumOfWaves	equ	24
si_Format		equ	25
si_Flags			equ	26
si_PlayMode		equ	27
si_NumOfChans	equ	28
si_Pad			equ	29
si_PlayMap		equ	30
si_ANNOChunk	equ	542
si_BODYChunk	equ	546
si_NAMEChunk	equ	550
si_AUTHChunk	equ	554
si_COPYChunk	equ	558
si_ATAK			equ	562
si_RLSE			equ	566
si_FATK			equ	570
si_FRLS			equ	574
si_USER			equ	578
si_EXTRA			equ	582
si_SeekPos		equ	586
si_MemType		equ	590
si_MaxChars		equ	594
si_LowPer		equ	596
si_HighPer		equ	598

;======================== Instrument types =========================
; You can construct the InsType field by OR'ing the family with the
; class. For example,
;
;	InsType = STRING | VIOLA_BOW

;Instrument Families
STRING		equ	$10
WOODWIND		equ	$20
KEYBOARD		equ	$30
GUITAR		equ	$40
VOICE			equ	$50
DRUM1			equ	$60
DRUM2			equ	$70
PERCUSSION1 equ	$80
BRASS1		equ	$90
BRASS2		equ	$A0
CYMBAL		equ	$B0
EFFECT1		equ	$C0
EFFECT2		equ	$D0
SYNTH			equ	$E0

; Instrument Classes

; For the STRING family, the high nibble is as follows:

VIOLIN_BOW	equ	$1
VIOLIN_PLUCK equ	$2
VIOLIN_GLIS	equ	$3
VIOLIN_TREM	equ	$4
VIOLA_BOW	equ	$5
VIOLA_PLUCK	equ	$6
VIOLA_GLIS	equ	$7
VIOLA_TREM	equ	$8
CELLO_BOW	equ	$9
CELLO_PLUCK	equ	$A
CELLO_GLIS	equ	$B
CELLO_TREM	equ	$C
BASS_BOW		equ	$D
BASS_PLUCK	equ	$E
BASS_TREM	equ	$F

;For the BRASS1 family, the high nibble is as follows:

BARITONE_SAX	equ	$1
BARI_GROWL		equ	$2
TENOR_SAX		equ	$3
TENOR_GROWL		equ	$4
ALTO_SAX			equ	$5
ALTO_GROWL		equ	$6
SOPRANO_SAX		equ	$7
SOPRANO_GROWL	equ	$8
TRUMPET			equ	$9
MUTED_TRUMPET	equ	$A
TRUMPET_DROP	equ	$B
TROMBONE			equ	$C
TROMBONE_SLIDE equ	$D
TROMBONE_MUTE	equ	$E

;For the BRASS2 family, the high nibble is as follows:

FRENCH_HORN	equ	$1
TUBA			equ	$2
FLUGAL_HORN	equ	$3
ENGLISH_HORN equ	$4

;For the WOODWIND family, the high nibble is as follows:

CLARINET			equ	$1
FLUTE				equ	$2
PAN_FLUTE		equ	$3
OBOE				equ	$4
PICCOLO			equ	$5
RECORDER			equ	$6
BASSOON			equ	$7
BASS_CLARINET	equ	$8
HARMONICA		equ	$9

;For the KEYBOARD family, the high nibble is as follows:

GRAND_PIANO		equ	$1
ELEC_PIANO		equ	$2
HONKYTONK		equ	$3
TOY_PIANO		equ	$4
HARPSICHORD		equ	$5
CLAVINET			equ	$6
PIPE_ORGAN		equ	$7
HAMMOND_B3		equ	$8
FARFISA_ORGAN	equ	$9
HARP				equ	$A

;For the DRUM1 family, the high nibble is as follows:

KICK			equ	$1
SNARE			equ	$2
TOM			equ	$3
TIMBALES		equ	$4
CONGA_HIT	equ	$5
CONGA_SLAP	equ	$6
BRUSH_SNARE	equ	$7
ELEC_SNARE	equ	$8
ELEC_KICK	equ	$9
ELEC_TOM		equ	$A
RIMSHOT		equ	$B
CROSS_STICK equ	$C
BONGO			equ	$D
STEEL_DRUM	equ	$E
DOUBLE_TOM	equ	$F

;For the DRUM2 family, the high nibble is as follows:

TIMPANI		equ	$1
TIMPANI_ROLL equ	$2
LOG_DRUM		equ	$3

;For the PERCUSSION1 family, the high nibble is as follows:

BLOCK			equ	$1
COWBELL		equ	$2
TRIANGLE		equ	$3
TAMBOURINE	equ	$4
WHISTLE		equ	$5
MARACAS		equ	$6
BELL			equ	$7
VIBES			equ	$8
MARIMBA		equ	$9
XYLOPHONE	equ	$A
TUBULAR_BELLS equ	$B
GLOCKENSPEIL equ	$C

;For the CYMBAL family, the high nibble is as follows:

CLOSED_HIHAT equ	$1
OPEN_HIHAT	equ	$2
STEP_HIHAT	equ	$3
RIDE			equ	$4
BELL_CYMBAL	equ	$5
CRASH			equ	$6
CHOKE_CRASH	equ	$7
GONG			equ	$8
BELL_TREE	equ	$9
CYMBAL_ROLL	equ	$A

;For the GUITAR family, the high nibble is as follows:

ELECTRIC		equ	$1
MUTED_ELEC	equ	$2
DISTORTED	equ	$3
ACOUSTIC		equ	$4
STRING_12	equ	$5
NYLON_STRING equ	$6
POWER_CHORD	equ	$7
HARMONICS	equ	$8
CHORD_STRUM	equ	$9
BANJO			equ	$A
ELEC_BASS	equ	$B
SLAPPED_BASS equ	$C
POPPED_BASS	equ	$D
SITAR			equ	$E
MANDOLIN		equ	$F

;For the VOICE family, the high nibble is as follows:

MALE_AHH		equ	$1
FEMALE_AHH	equ	$2
MALE_OOO		equ	$3
FEMALE_OOO	equ	$4
FEMALE		equ	$5
BREATHY		equ	$6
LAUGH			equ	$7
WHISTLER		equ	$8

;For the EFFECTS1 family, the high nibble is as follows:

EXPLOSION		equ	$1
GUNSHOT			equ	$2
CREAKING_DOOR	equ	$3
DOOR_SLAM		equ	$4
DOOR_CLOSE		equ	$5
SPACEGUN			equ	$6
JET_ENGINE		equ	$7
PROPELLER		equ	$8
HELOCOPTER		equ	$9
BROKEN_GLASS	equ	$A
THUNDER			equ	$B
RAIN				equ	$C
BIRDS				equ	$D
JUNGLE_NOISES	equ	$E
FOOTSTEP			equ	$F

;For the EFFECTS2 family, the high nibble is as follows:

MACHINE_GUN		equ	$1
TELEPHONE		equ	$2
DOG_BARK			equ	$3
DOG_GROWL		equ	$4
BOAT_WHISTLE	equ	$5
OCEAN				equ	$6
WIND				equ	$7
CROWD_BOOS		equ	$8
APPLAUSE			equ	$9
ROARING_CROWDS equ	$A
SCREAM			equ	$B
SWORD_CLASH		equ	$C
AVALANCE			equ	$D
BOUNCING_BALL	equ	$E
BALL_ON_BAT		equ	$F	/* OR CLUB */

;For the SYNTH family, the high nibble is as follows:

SYNTH_STRINGS	equ	$1
SQUARE_WAVE		equ	$2
SAWTOOTH_WAVE	equ	$3
TRI_WAVE			equ	$4
SINE_WAVE		equ	$5
NOISE				equ	$6
