/* _get_win_midi_driver_list: * System driver hook for listing the available MIDI drivers. This generates * the device list at runtime, to match whatever Windows devices are * available. */ _DRIVER_INFO *_get_win_midi_driver_list(void) { MIDI_DRIVER *driver; MIDIOUTCAPS caps; MIDIINCAPS caps_in; int num_drivers, i; if (!driver_list) { num_drivers = midiOutGetNumDevs(); /* include the MIDI mapper (id == -1) */ if (num_drivers) num_drivers++; driver_list = _create_driver_list(); /* MidiOut drivers */ for (i=0; i<num_drivers; i++) { driver = _AL_MALLOC(sizeof(MIDI_DRIVER)); memcpy(driver, &_midi_none, sizeof(MIDI_DRIVER)); if (i == 0) driver->id = MIDI_WIN32MAPPER; else driver->id = MIDI_WIN32(i-1); midiOutGetDevCaps(i-1, &caps, sizeof(caps)); driver->ascii_name = strdup(caps.szPname); driver->detect = midi_win32_detect; driver->init = midi_win32_init; driver->exit = midi_win32_exit; driver->set_mixer_volume = midi_win32_set_mixer_volume; driver->get_mixer_volume = midi_win32_get_mixer_volume; driver->raw_midi = midi_win32_raw_midi; _driver_list_append_driver(&driver_list, driver->id, driver, TRUE); } /* MidiIn drivers */ num_drivers = midiInGetNumDevs(); for (i=0; i<num_drivers; i++) { driver = _AL_MALLOC(sizeof(MIDI_DRIVER)); memcpy(driver, &_midi_none, sizeof(MIDI_DRIVER)); driver->id = MIDI_WIN32_IN(i); /* added MIDI_WIN32_IN to alwin.h */ midiInGetDevCaps(i, &caps_in, sizeof(caps_in)); driver->ascii_name = strdup(caps_in.szPname); driver->detect = midi_win32_in_detect; driver->init = midi_win32_in_init; driver->exit = midi_win32_in_exit; _driver_list_append_driver(&driver_list, driver->id, driver, TRUE); } /* cross-platform DIGital MIDi driver */ _driver_list_append_driver(&driver_list, MIDI_DIGMID, &midi_digmid, TRUE); } return driver_list; }
/* _unix_driver_lists_init: * Initialise driver lists. */ void _unix_driver_lists_init(void) { _unix_gfx_driver_list = _create_driver_list(); if (_unix_gfx_driver_list) _driver_list_append_list(&_unix_gfx_driver_list, _gfx_driver_list); }