diff -ruN kaconnect-1.0.0/alsa_access.cpp kaconnect-1.0.0-alsa9/alsa_access.cpp --- kaconnect-1.0.0/alsa_access.cpp Fri Oct 26 17:44:31 2001 +++ kaconnect-1.0.0-alsa9/alsa_access.cpp Mon Oct 29 17:10:55 2001 @@ -5,9 +5,15 @@ AlsaHandle::AlsaHandle(QObject *parent, const char *name) : QObject(parent, name) { +#if SND_LIB_MAJOR == 0 && SND_LIB_MINOR < 6 // 0.5.x API if (!(snd_seq_open(&seq, SND_SEQ_OPEN) < 0)) { fprintf(stdout, "\nALSA sequencer successfully opened\n"); } +#else // 0.9.x API + if (!(snd_seq_open(&seq, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0)) { + fprintf(stdout, "\nALSA sequencer successfully opened\n"); + } +#endif } AlsaHandle::~AlsaHandle() { diff -ruN kaconnect-1.0.0/connector.cpp kaconnect-1.0.0-alsa9/connector.cpp --- kaconnect-1.0.0/connector.cpp Fri Oct 26 17:44:31 2001 +++ kaconnect-1.0.0-alsa9/connector.cpp Mon Oct 29 17:17:46 2001 @@ -92,14 +92,16 @@ emit isEqual(equal); } +#if SND_LIB_MAJOR == 0 && SND_LIB_MINOR < 6 // 0.5.x API + void ConnectorWidget::updateConnector(int n) { int l1, l2; snd_seq_query_subs_t subs; + memset(&subs, 0, sizeof(subs)); if (!r_portlist) return; - memset(&subs, 0, sizeof(subs)); for (l1 = 0; l1 < PORTLISTBOX_MAX_PORTS; l1++) { for (l2 = 0; l2 < PORTLISTBOX_MAX_PORTS; l2++) { connected[l1][l2] = false; @@ -110,7 +112,7 @@ subs.port = r_portlist->port(l1); subs.type = SND_SEQ_QUERY_SUBS_READ; subs.index = 0; - while (snd_seq_query_port_subscribers(seq, &subs)>=0) { + while (snd_seq_query_port_subscribers(seq, subs)>=0) { for (l2 = 0; l2 < w_portlist->count(); l2++) { connected[l1][l2] |= (subs.addr.client == w_portlist->client(l2)) @@ -151,3 +153,73 @@ updateConnector(0); } } + +#else // 0.9.x API + +void ConnectorWidget::updateConnector(int n) { + + int l1, l2, index; + snd_seq_query_subscribe_t *subs; + snd_seq_query_subscribe_alloca(&subs); + + if (!r_portlist) + return; + for (l1 = 0; l1 < PORTLISTBOX_MAX_PORTS; l1++) { + for (l2 = 0; l2 < PORTLISTBOX_MAX_PORTS; l2++) { + connected[l1][l2] = false; + } + } + for (l1 = 0; l1 < r_portlist->count(); l1++) { + snd_seq_query_subscribe_set_client(subs, r_portlist->client(l1)); + snd_seq_query_subscribe_set_port(subs, r_portlist->port(l1)); + snd_seq_query_subscribe_set_type(subs, SND_SEQ_QUERY_SUBS_READ); + snd_seq_query_subscribe_set_index(subs, 0); + index = 0; + while (snd_seq_query_port_subscribers(seq, subs)>=0) { + const snd_seq_addr_t &addr = *snd_seq_query_subscribe_get_addr(subs); + for (l2 = 0; l2 < w_portlist->count(); l2++) + connected[l1][l2] |= (addr.client == w_portlist->client(l2)) && + (addr.port == w_portlist->port(l2)); + snd_seq_query_subscribe_set_index(subs, ++index); + } + } + update(); +} + +void ConnectorWidget::subscribe() { + + snd_seq_port_subscribe_t *subs; + snd_seq_port_subscribe_alloca(&subs); + + if ((r_portlist->currentItem() >= 0) && (w_portlist->currentItem() >= 0)) { + snd_seq_addr_t addr; + addr.client = r_portlist->client(r_portlist->currentItem()); + addr.port = r_portlist->port(r_portlist->currentItem()); + snd_seq_port_subscribe_set_sender(subs, &addr); + addr.client = w_portlist->client(w_portlist->currentItem()); + addr.port = w_portlist->port(w_portlist->currentItem()); + snd_seq_port_subscribe_set_dest(subs, &addr); + snd_seq_subscribe_port(seq, subs); + updateConnector(0); + } +} + +void ConnectorWidget::unsubscribe() { + + snd_seq_port_subscribe_t *subs; + snd_seq_port_subscribe_alloca(&subs); + + if ((r_portlist->currentItem() >= 0) && (w_portlist->currentItem() >= 0)) { + snd_seq_addr_t addr; + addr.client = r_portlist->client(r_portlist->currentItem()); + addr.port = r_portlist->port(r_portlist->currentItem()); + snd_seq_port_subscribe_set_sender(subs, &addr); + addr.client = w_portlist->client(w_portlist->currentItem()); + addr.port = w_portlist->port(w_portlist->currentItem()); + snd_seq_port_subscribe_set_dest(subs, &addr); + snd_seq_unsubscribe_port(seq, subs); + updateConnector(0); + } +} + +#endif // API diff -ruN kaconnect-1.0.0/kaconnect.cpp kaconnect-1.0.0-alsa9/kaconnect.cpp --- kaconnect-1.0.0/kaconnect.cpp Fri Oct 26 17:48:02 2001 +++ kaconnect-1.0.0-alsa9/kaconnect.cpp Mon Oct 29 16:46:37 2001 @@ -76,12 +76,13 @@ w_ports_text->setFont(QFont("Arial", 16)); w_ports_text->setText("Writeable Ports:"); - snd_seq_port_subscribe_t subs; int portid; int alsaAnnounceFd = 0; if (!(portid = snd_seq_create_simple_port(seq_handle->seq, "kmidicontrol", SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE|SND_SEQ_PORT_CAP_NO_EXPORT, SND_SEQ_PORT_TYPE_APPLICATION) < 0)) { +#if SND_LIB_MAJOR == 0 && SND_LIB_MINOR < 6 // 0.5.x API + snd_seq_port_subscribe_t subs; memset(&subs, 0, sizeof(subs)); subs.sender.client = SND_SEQ_CLIENT_SYSTEM; subs.sender.port = SND_SEQ_PORT_SYSTEM_ANNOUNCE; @@ -89,6 +90,22 @@ subs.dest.port = portid; snd_seq_subscribe_port(seq_handle->seq, &subs); alsaAnnounceFd = snd_seq_file_descriptor(seq_handle->seq); +#else // 0.9.x API + snd_seq_port_subscribe_t *subs; + snd_seq_port_subscribe_alloca(&subs); + snd_seq_addr_t addr; + addr.client = SND_SEQ_CLIENT_SYSTEM; + addr.port = SND_SEQ_PORT_SYSTEM_ANNOUNCE; + snd_seq_port_subscribe_set_sender(subs, &addr); + addr.client = snd_seq_client_id(seq_handle->seq); + addr.port = portid; + snd_seq_port_subscribe_set_dest(subs, &addr); + snd_seq_subscribe_port(seq_handle->seq, subs); + + struct pollfd pfds; + snd_seq_poll_descriptors(seq_handle->seq, &pfds, 1, POLLIN); + alsaAnnounceFd = pfds.fd; +#endif } QSocketNotifier *alsaNotifier = new QSocketNotifier(alsaAnnounceFd, QSocketNotifier::Read); top->menuBar()->insertItem(i18n("&File"), filePopup); diff -ruN kaconnect-1.0.0/portlistbox.cpp kaconnect-1.0.0-alsa9/portlistbox.cpp --- kaconnect-1.0.0/portlistbox.cpp Fri Oct 26 17:44:31 2001 +++ kaconnect-1.0.0-alsa9/portlistbox.cpp Mon Oct 29 17:02:12 2001 @@ -10,9 +10,15 @@ } int PortListBox::check_permission(snd_seq_port_info_t *pinfo, char *group, int perm) { +#if SND_LIB_MAJOR == 0 && SND_LIB_MINOR < 6 // 0.5.x API if ((pinfo->capability & perm) == perm && ! (pinfo->capability & SND_SEQ_PORT_CAP_NO_EXPORT)) return 1; +#else + if ((snd_seq_port_info_get_capability(pinfo) & perm) == perm && + ! (snd_seq_port_info_get_capability(pinfo) & SND_SEQ_PORT_CAP_NO_EXPORT)) + return 1; +#endif return 0; } @@ -23,6 +29,7 @@ group = ""; +#if SND_LIB_MAJOR == 0 && SND_LIB_MINOR < 6 // 0.5.x API snd_seq_client_info_t cinfo; snd_seq_port_info_t pinfo; @@ -47,6 +54,27 @@ cinfo.name[0] = 0; cinfo.group[0] = 0; } +#else + snd_seq_client_info_t *cinfo; + snd_seq_port_info_t *pinfo; + + clear(); + snd_seq_client_info_alloca(&cinfo); + snd_seq_port_info_alloca(&pinfo); + snd_seq_client_info_set_client(cinfo, -1); + + while (snd_seq_query_next_client(seq, cinfo) >= 0) { + snd_seq_port_info_set_client(pinfo, snd_seq_client_info_get_client(cinfo)); + snd_seq_port_info_set_port(pinfo, -1); + while(snd_seq_query_next_port(seq, pinfo) >= 0) { + if (check_permission(pinfo, "", perm) && snd_seq_port_info_get_client(pinfo)) { + sprintf(s, "%d:%d %s", snd_seq_client_info_get_client(cinfo), + snd_seq_port_info_get_port(pinfo), snd_seq_client_info_get_name(cinfo)); + insertItem(s); + } + } + } +#endif } int PortListBox::client(int index) {