183 lines
4.1 KiB
C
183 lines
4.1 KiB
C
/* MIDI.H
|
|
**
|
|
** Copyright (C) Microsoft, 1990, All Rights Reserved.
|
|
**
|
|
**
|
|
** Multimedia Control Panel MIDI Applet.
|
|
**
|
|
** Display a list of all installed MIDI devices, allow user to configure
|
|
** existing or install new ones.
|
|
**
|
|
*/
|
|
|
|
//---------------------------------------------------------------------------
|
|
#ifndef RC_INVOKED
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
#ifndef MIDI_DPF
|
|
#define MIDI_DPF AuxDebugEx
|
|
#endif
|
|
|
|
void PASCAL UpdateListBox(HWND hDlg);
|
|
|
|
#define MAX_ALIAS 80
|
|
#define NUM_CHANNEL 16
|
|
#define NUM_TABSTOPS 1
|
|
|
|
#define BITONE 1
|
|
|
|
// Common states
|
|
#define CHANGE_NONE 0
|
|
|
|
// Instrument states
|
|
#define CHANGE_ACTIVE 1
|
|
#define CHANGE_CHANNEL 2
|
|
|
|
// Driver states
|
|
#define CHANGE_REMOVE 4
|
|
#define CHANGE_ADD 8
|
|
|
|
#define IS_INSTRUMENT(hwnd, i) (!((LPINSTRUMENT)ListBox_GetItemData(hwnd, i))->fDevice)
|
|
|
|
typedef struct tag_Driver FAR * LPDRIVER;
|
|
|
|
#ifndef NUMELMS
|
|
#define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0]))
|
|
#endif
|
|
|
|
#define SetDlgData(h,lp) SetWindowLongPtr (h, DWLP_USER, (LONG_PTR)lp)
|
|
#define GetDlgData(h) (LPVOID)GetWindowLongPtr (h, DWLP_USER)
|
|
|
|
// lParam of PROPSHEETPAGE points to a struct like this.
|
|
// it is freed in ReleasePropSheet() function.
|
|
//
|
|
typedef struct _midi_ps_args {
|
|
LPFNMMEXTPROPSHEETCALLBACK lpfnMMExtPSCallback;
|
|
LPARAM lParam;
|
|
TCHAR szTitle[1];
|
|
} MPSARGS, * PMPSARGS;
|
|
|
|
// info for internal & external midi instruments
|
|
//
|
|
typedef struct _instrum * PINSTRUM;
|
|
typedef struct _instrum {
|
|
PINSTRUM piParent;
|
|
BOOL bExternal;
|
|
BOOL bActive;
|
|
BOOL fGSSynth;
|
|
UINT uID;
|
|
TCHAR szKey[MAX_ALIAS];
|
|
TCHAR szFriendly[MAX_ALIAS];
|
|
} INSTRUM;
|
|
|
|
// the the loaded array of all instruments, used to refresh
|
|
// lists of all instruments and the treeview's of instruments
|
|
// and how they are connected
|
|
//
|
|
typedef struct _midi_instrums {
|
|
HKEY hkMidi;
|
|
UINT nInstr;
|
|
BOOL bHasExternal;
|
|
PINSTRUM api[128];
|
|
} MCMIDI, * PMCMIDI;
|
|
|
|
//------------------ function prototypes ------------------------------------
|
|
|
|
// midi.c
|
|
//
|
|
INT_PTR CALLBACK MidiCplDlgProc (
|
|
HWND hWnd,
|
|
UINT uMsgId,
|
|
WPARAM wParam,
|
|
LPARAM lParam);
|
|
|
|
LONG WINAPI GetAlias (
|
|
HKEY hKey,
|
|
LPTSTR szSub,
|
|
LPTSTR pszAlias,
|
|
DWORD cbAlias,
|
|
BOOL *pbExtern,
|
|
BOOL *pbActive);
|
|
|
|
void WINAPI LoadInstruments (
|
|
PMCMIDI pmcm,
|
|
BOOL bDriverAsAlias);
|
|
|
|
void WINAPI FreeInstruments (
|
|
PMCMIDI pmcm);
|
|
|
|
PINSTRUM WINAPI FindInstrument (
|
|
PMCMIDI pmcm,
|
|
LPTSTR pszFriendly);
|
|
|
|
void WINAPI KickMapper (
|
|
HWND hWnd);
|
|
|
|
// iface.c
|
|
//
|
|
BOOL WINAPI InitIface (
|
|
HINSTANCE hInst,
|
|
DWORD dwReason,
|
|
LPVOID lpReserved);
|
|
|
|
// class.c
|
|
//
|
|
INT_PTR CALLBACK MidiClassDlgProc (
|
|
HWND hWnd,
|
|
UINT uMsgId,
|
|
WPARAM wParam,
|
|
LPARAM lParam);
|
|
|
|
INT_PTR CALLBACK MidiInstrumentDlgProc (
|
|
HWND hWnd,
|
|
UINT uMsgId,
|
|
WPARAM wParam,
|
|
LPARAM lParam);
|
|
|
|
INT_PTR MidiInstrumentsWizard (
|
|
HWND hWnd,
|
|
PMCMIDI pmcm, // optional
|
|
LPTSTR pszCmd);
|
|
|
|
//void LoadInstrumentsIntoTree (
|
|
// HWND hWnd,
|
|
// UINT uId,
|
|
// LPTSTR pszSelect,
|
|
// HKEY * phkMidi);
|
|
|
|
BOOL WINAPI RemoveInstrumentByKeyName (
|
|
LPCTSTR pszKey);
|
|
|
|
|
|
// containing struct for what would otherwise be global variables
|
|
// only one instance of this structure is used. (declared in main.c)
|
|
//
|
|
struct _globalstate {
|
|
int cRef;
|
|
|
|
BOOL fLoadedRegInfo;
|
|
TCHAR szPlayCmdLn[128];
|
|
TCHAR szOpenCmdLn[128];
|
|
TCHAR szNewCmdLn[128];
|
|
|
|
HWND hWndDeviceList;
|
|
HWND hWndInstrList;
|
|
//HWND hWndMainList;
|
|
|
|
BOOL fChangeInput;
|
|
BOOL fChangeOutput;
|
|
BOOL fInputPort;
|
|
DWORD dwReconfigFlags;
|
|
|
|
WORD wHelpMessage;
|
|
WORD wFill;
|
|
|
|
UINT nDrivers;
|
|
UINT nMaxDrivers;
|
|
//DRIVER aDrivers[16];
|
|
};
|
|
extern struct _globalstate gs;
|
|
|
|
#endif // ifndef RC_INVOKED
|