452
452
tX_store("%s<midi_connections>\n", indent);
453
strcat(indent, "\t");
455
snd_seq_addr_t my_addr;
456
my_addr.client=snd_seq_client_id(ALSASeqHandle);
459
snd_seq_query_subscribe_t *subs;
460
snd_seq_query_subscribe_alloca(&subs);
461
snd_seq_query_subscribe_set_root(subs, &my_addr);
462
snd_seq_query_subscribe_set_type(subs, SND_SEQ_QUERY_SUBS_WRITE);
463
snd_seq_query_subscribe_set_index(subs, 0);
454
if (ALSASeqHandle != NULL) {
455
strcat(indent, "\t");
456
snd_seq_addr_t my_addr;
457
my_addr.client=snd_seq_client_id(ALSASeqHandle);
460
snd_seq_query_subscribe_t *subs;
461
snd_seq_query_subscribe_alloca(&subs);
462
snd_seq_query_subscribe_set_root(subs, &my_addr);
463
snd_seq_query_subscribe_set_type(subs, SND_SEQ_QUERY_SUBS_WRITE);
464
snd_seq_query_subscribe_set_index(subs, 0);
465
while (snd_seq_query_port_subscribers(ALSASeqHandle, subs) >= 0) {
466
const snd_seq_addr_t *addr;
467
addr = snd_seq_query_subscribe_get_addr(subs);
469
tX_store("%s<link client=\"%i\" port=\"%i\"/>\n", indent, addr->client, addr->port);
470
snd_seq_query_subscribe_set_index(subs, snd_seq_query_subscribe_get_index(subs) + 1);
473
indent[strlen(indent)-1]=0;
466
while (snd_seq_query_port_subscribers(ALSASeqHandle, subs) >= 0) {
467
const snd_seq_addr_t *addr;
468
addr = snd_seq_query_subscribe_get_addr(subs);
470
tX_store("%s<link client=\"%i\" port=\"%i\"/>\n", indent, addr->client, addr->port);
471
snd_seq_query_subscribe_set_index(subs, snd_seq_query_subscribe_get_index(subs) + 1);
474
indent[strlen(indent)-1]=0;
474
477
tX_store("%s</midi_connections>\n", indent);
477
480
void tX_midiin::restore_connections(xmlNodePtr node)
479
482
snd_seq_addr_t my_addr;
480
my_addr.client=snd_seq_client_id(ALSASeqHandle);
483
if (xmlStrcmp(node->name, (xmlChar *) "midi_connections")==0) {
484
for (xmlNodePtr cur=node->xmlChildrenNode; cur != NULL; cur = cur->next) {
485
if (cur->type == XML_ELEMENT_NODE) {
486
if (xmlStrcmp(cur->name, (xmlChar *) "link")==0) {
491
buffer=(char *) xmlGetProp(cur, (xmlChar *) "client");
493
sscanf(buffer, "%i", &client);
496
buffer=(char *) xmlGetProp(cur, (xmlChar *) "port");
498
sscanf(buffer, "%i", &port);
501
if ((port>=0) && (client>=0)) {
502
snd_seq_addr_t sender_addr;
503
sender_addr.client=client;
504
sender_addr.port=port;
506
snd_seq_port_subscribe_t *subs;
507
snd_seq_port_subscribe_alloca(&subs);
508
snd_seq_port_subscribe_set_sender(subs, &sender_addr);
509
snd_seq_port_subscribe_set_dest(subs, &my_addr);
511
if (snd_seq_subscribe_port(ALSASeqHandle, subs) < 0) {
512
tX_error("tX_midiin::restore_connections() -> failed to connect to: %d:%d.", port, client);
484
if (ALSASeqHandle != NULL) {
485
my_addr.client=snd_seq_client_id(ALSASeqHandle);
488
if (xmlStrcmp(node->name, (xmlChar *) "midi_connections")==0) {
489
for (xmlNodePtr cur=node->xmlChildrenNode; cur != NULL; cur = cur->next) {
490
if (cur->type == XML_ELEMENT_NODE) {
491
if (xmlStrcmp(cur->name, (xmlChar *) "link")==0) {
496
buffer=(char *) xmlGetProp(cur, (xmlChar *) "client");
498
sscanf(buffer, "%i", &client);
501
buffer=(char *) xmlGetProp(cur, (xmlChar *) "port");
503
sscanf(buffer, "%i", &port);
506
if ((port>=0) && (client>=0)) {
507
snd_seq_addr_t sender_addr;
508
sender_addr.client=client;
509
sender_addr.port=port;
511
snd_seq_port_subscribe_t *subs;
512
snd_seq_port_subscribe_alloca(&subs);
513
snd_seq_port_subscribe_set_sender(subs, &sender_addr);
514
snd_seq_port_subscribe_set_dest(subs, &my_addr);
516
if (snd_seq_subscribe_port(ALSASeqHandle, subs) < 0) {
517
tX_error("tX_midiin::restore_connections() -> failed to connect to: %d:%d.", port, client);
520
tX_error("tX_midiin::restore_connections() -> invalid port: %d:%d.", port, client);
515
tX_error("tX_midiin::restore_connections() -> invalid port: %d:%d.", port, client);
524
tX_error("tX_midiin::restore_connections() -> invalid element: %s.", cur->name);
519
tX_error("tX_midiin::restore_connections() -> invalid element: %s.", cur->name);
529
tX_error("tX_midiin::restore_connections() -> invalid XML element.");
524
tX_error("tX_midiin::restore_connections() -> invalid XML element.");
532
tX_error("tX_midiin::restore_connections() -> Couldn't get ALSA sequencer handle - snd-seq module not loaded?.");