1
0
Fork 0

Add experimental name support to configmidi for coremidi

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4016
This commit is contained in:
Peter Veenstra 2017-05-10 18:32:53 +00:00
parent f5c26251c7
commit 00ae500d59

View file

@ -15,6 +15,8 @@
*/
#include <CoreMIDI/MIDIServices.h>
#include <sstream>
#include <string>
class MidiHandler_coremidi : public MidiHandler {
private:
@ -30,9 +32,32 @@ public:
m_endpoint = 0;
OSStatus result;
Bitu numDests = MIDIGetNumberOfDestinations();
Bitu destId = 0;
if(conf && conf[0]) destId = atoi(conf);
Bitu destId = numDests;
if(conf && *conf) {
std::string strconf(conf);
std::istringstream configmidi(strconf);
configmidi >> destId;
if (configmidi.fail() && numDests) {
lowcase(strconf);
for(Bitu i = 0; i<numDests; i++) {
MIDIEndpointRef dummy = MIDIGetDestination(i);
if (!dummy) continue;
CFStringRef midiname = 0;
if (MIDIObjectGetStringProperty(dummy,kMIDIPropertyDisplayName,&midiname) == noErr) {
const char* s = CFStringGetCStringPtr(midiname,kCFStringEncodingMacRoman);
if (s) {
std::string devname(s);
lowcase(devname);
if (devname.find(strconf) != std::string::npos) {
destId = i;
break;
}
}
}
}
}
}
if (destId >= numDests) destId = 0;
if (destId < numDests)
{
m_endpoint = MIDIGetDestination(destId);
@ -104,11 +129,11 @@ public:
Bitu numDests = MIDIGetNumberOfDestinations();
for(Bitu i = 0; i < numDests; i++){
MIDIEndpointRef dest = MIDIGetDestination(i);
if(!dest) continue;
if (!dest) continue;
CFStringRef midiname = 0;
if(MIDIObjectGetStringProperty(dest, kMIDIPropertyDisplayName, &midiname) == noErr) {
const char * s = CFStringGetCStringPtr(midiname, kCFStringEncodingMacRoman);
if(s) base->WriteOut("%02d\t%s\n",i,s);
if (s) base->WriteOut("%02d\t%s\n",i,s);
}
//This is for EndPoints created by us.
//MIDIEndpointDispose(dest);