A filter can be used to specify the events accepted by an application (see MidiSetFilter and MidiGetFilter). For an event to be accepted, the corresponding bits of its port, type and channel must be set to 1 in the filter.
![]()
typedef struct TFilter *FilterPtr;
typedef struct TFilter
{
char port[32]; // 256 bits : 1 = port accepted, 0 = port rejected
char evType[32]; // 256 bits : 1 = type accepted, 0 = type rejected
char channel[2]; // 16 bits : 1 = channel accepted, 0 = channel rejected
char unused[2]; // 16 bits
} TFilter;
![]()
Macros for accessing filter bits.
#define AcceptBit(a,n) ( ((char*) (a))[(n)>>3] |= (1<<((n)&7)) ) #define RejectBit(a,n) ( ((char*) (a))[(n)>>3] &= ~(1<<((n)&7)) ) #define InvertBit(a,n) ( ((char*) (a))[(n)>>3] ^= (1<<((n)&7)) ) #define IsAcceptedBit(a,n) ( ((char*) (a))[(n)>>3] & (1<<((n)&7)) )