MSSndCard * ms_snd_card_manager_get_card(MSSndCardManager *m, const char *id){
	MSList *elem;
	for (elem=m->cards;elem!=NULL;elem=elem->next){
		MSSndCard *card=(MSSndCard*)elem->data;
		if (id==NULL) return card;
		if (strcmp(ms_snd_card_get_string_id(card),id)==0)	return card;
	}
	if (id!=NULL) ms_warning("no card with id %s",id);
	return NULL;
}
bool myAudioStream::init_card()
{
    QSettings settings("Shadowrun Comlink","MetaLink");
    QString card_id;
    if (settings.contains("Audio playback card")) {
        card_id = settings.value("Audio playback card").toString();
    } else {
        const MSList *list = ms_snd_card_manager_get_list(ms_snd_card_manager_get());
        QStringList cards;
        while (list != NULL) {
            cards << ms_snd_card_get_string_id((MSSndCard*)list->data);
            list = list->next;
        }
        if (cards.isEmpty()) {
            QMessageBox::information(0, QObject::tr("No cards detected!"), QObject::tr("No cards detected!"));
            return false;
        }

        bool ok;
        card_id = QInputDialog::getItem(0, QObject::tr("Select playback card"),
                                                QObject::tr("Select playback card"),
                                                cards, 0, false, &ok);
        if (!ok) {
            return false;
        }
        settings.setValue("Audio playback card",card_id);
    }

    playcard = ms_snd_card_manager_get_card(ms_snd_card_manager_get(), card_id.toStdString().c_str());
    if (playcard==NULL){
        ms_error("No playback card found.");
        return false;
    } else {
        ms_message("Got card: %s", ms_snd_card_get_string_id(playcard));
    }

    return true;
}
void ms_snd_card_manager_add_card(MSSndCardManager *m, MSSndCard *c){
	ms_message("Card '%s' added",ms_snd_card_get_string_id(c));
	m->cards=ms_list_append(m->cards,c);
}