; midi/midi.i

	ifnd	MIDI_MIDI_I
MIDI_MIDI_I set 1

	ifnd	EXEC_LISTS_I
	include "exec/lists.i"
	endc

MIDINAME macro
	 dc.b	 'midi.library',0
	 endm

MIDIVERSION equ 1

    STRUCTURE	MSource,LN_SIZE
	APTR	ms_Image
	STRUCT	ms_RPList,MLH_SIZE
	APTR	ms_UserData
	LABEL	sizeof_MSource

; Node Types for MSource nodes
NT_MSOURCE	equ  $20
NT_PERMMSOURCE	equ  $21

    STRUCTURE	MDest,LN_SIZE
	APTR	md_Image
	STRUCT	md_RPList,MLH_SIZE
	APTR	md_DestPort
	APTR	md_UserData
	LABEL	sizeof_MDest

; Node Types for MDest nodes
NT_MDEST	equ  $22
NT_PERMMDEST	equ  $23

    STRUCTURE	RIMatch,0
	UBYTE	rim_count
	STRUCT	rim_match,3
	LABEL	sizeof_RIMatch

    STRUCTURE	MRouteInfo,0
	UWORD	ri_MsgFlags
	UWORD	ri_ChanFlags
	BYTE	ri_ChanOffset
	BYTE	ri_NoteOffset
	STRUCT	ri_SysExMatch,sizeof_RIMatch
	STRUCT	ri_CtrlMatch,sizeof_RIMatch
	LABEL	sizeof_MRouteInfo

; Midi Msg Type Flags for RouteInfo and returned by MidiMsgType

MMF_CHAN       equ  $00ff
MMF_NOTEOFF    equ  $0001
MMF_NOTEON     equ  $0002
MMF_POLYPRESS  equ  $0004
MMF_CTRL       equ  $0008
MMF_PROG       equ  $0010
MMF_CHANPRESS  equ  $0020
MMF_PITCHBEND  equ  $0040
MMF_MODE       equ  $0080

MMF_SYSCOM     equ  $0100
MMF_SYSRT      equ  $0200
MMF_SYSEX      equ  $0400

    STRUCTURE	MRoutePtr,MLN_SIZE
	APTR	rp_Route
	LABEL	sizeof_MRoutePtr

    STRUCTURE	MRoute,0
	APTR	mr_Source
	APTR	mr_Dest
	STRUCT	mr_SRoutePtr,sizeof_MRoutePtr
	STRUCT	mr_DRoutePtr,sizeof_MRoutePtr
	STRUCT	mr_RouteInfo,sizeof_MRouteInfo
	LABEL	sizeof_MRoute


; MIDI message defines - based on IMA MIDI Spec 1.0 except where noted

; Status Bytes

   ; Channel Voice Messages (1sssnnnn)
MS_NOTEOFF    equ $80
MS_NOTEON     equ $90
MS_POLYPRESS  equ $A0
MS_CTRL       equ $B0
MS_MODE       equ $B0
MS_PROG       equ $C0
MS_CHANPRESS  equ $D0
MS_PITCHBEND  equ $E0

   ; System Common Messages
MS_SYSEX      equ $F0
MS_SONGPOS    equ $F2
MS_SONGSELECT equ $F3
MS_TUNEREQ    equ $F6
MS_EOX	      equ $F7

   ; System Real Time Messages
MS_CLOCK      equ $F8
MS_START      equ $FA
MS_CONTINUE   equ $FB
MS_STOP       equ $FC
MS_ACTVSENSE  equ $FE
MS_RESET      equ $FF


; Standard Controllers (from MMA - 8-86)

   ; proportional MSB - 0-31, LSB - 32-63
MC_MODWHEEL  equ 1
MC_BREATH    equ 2
MC_FOOT      equ 4
MC_PORTATIME equ 5
MC_DATAENTRY equ 6
MC_VOLUME    equ 7
MC_BALANCE   equ 8
MC_PAN	     equ 10

   ; switches/pedals - either on(7F) or off(00)
MC_SUSTAIN   equ 64
MC_PORTA     equ 65
MC_SUSTENUTO equ 66
MC_SOFTPEDAL equ 67
MC_HOLD2     equ 69
MC_DATAINCR  equ 96
MC_DATADECR  equ 97

; Channel Modes

MM_LOCAL   equ 122
MM_ALLOFF  equ 123
MM_OMNIOFF equ 124
MM_OMNION  equ 125
MM_MONO    equ 126
MM_POLY    equ 127


; Sys/Ex ID numbers (from MMA as described in IMA bulletin)

MID_SCI      equ $01
MID_BIGBRIAR equ $02
MID_OCTAVEPLATEAU equ $03
MID_MOOG     equ $04
MID_PASSPORT equ $05
MID_LEXICON  equ $06

MID_OBERHEIM equ $10
MID_PAIA     equ $11
MID_SIMMONS  equ $12
MID_FAIRLIGHT equ $14

MID_BONTEMPI equ $20
MID_SIEL     equ $21
MID_SYNTHAXE equ $23

MID_KAWAI    equ $40
MID_ROLAND   equ $41
MID_KORG     equ $42
MID_YAMAHA   equ $43

; special Sys/Ex ID numbers: Non-Commercial, Non-Real Time, Real Time
MID_NC	equ $7d
MID_NRT equ $7e
MID_RT	equ $7f

	endc
