aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2011-01-28 12:56:52 +0000
committerIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2011-01-28 12:56:52 +0000
commitaf45b385f1678aa2876aba27cbde6d2e6248a0c1 (patch)
tree3d77deac3cb5ad9b5ae12de3129e53925b1d2bd8
parent37d97fa7c95bcaf9e90644f201a12bc41c237730 (diff)
refactored code and prevent crash when a certain ID cannot be found
svn path=/trunk/externals/iem/mediasettings/; revision=14835
-rw-r--r--midisettings.c145
1 files changed, 70 insertions, 75 deletions
diff --git a/midisettings.c b/midisettings.c
index 466915b..83fd39a 100644
--- a/midisettings.c
+++ b/midisettings.c
@@ -239,6 +239,12 @@ static void ms_params_get(t_ms_params*parms) {
parms->indevices=ms_symkeys_add(parms->indevices, gensym(indevlist[i]), i, 0);
parms->num_indevices++;
}
+
+ parms->indevices=ms_symkeys_add(parms->indevices, gensym("test"), i++, 0);
+ parms->num_indevices++;
+ parms->indevices=ms_symkeys_add(parms->indevices, gensym("test"), i++, 0);
+ parms->num_indevices++;
+
for(i=0; i<outdevs; i++) {
parms->outdevices=ms_symkeys_add(parms->outdevices, gensym(outdevlist[i]), i, 0);
parms->num_outdevices++;
@@ -275,20 +281,17 @@ static void midisettings_params_init(t_midisettings*x) {
ms_params_get(&x->x_params);
}
-
-static void midisettings_listdevices(t_midisettings *x)
-{
- unsigned int i, count;
-
#define MS_ALSADEV_FORMAT "ALSA-%02d"
+static void midisettings_listdevices_devices(t_outlet *outlet,
+ t_symbol*type,
+ t_ms_symkeys*devices,
+ const unsigned int numdevs
+ ) {
+ unsigned int count=0, i=0;
t_atom atoms[MAXMIDIDEV+1];
-
- ms_params_get(&x->x_params);
-
- SETSYMBOL(atoms+0, gensym("in"));
- count=0;
- for(i=0; i<x->x_params.num_indev; i++) {
+ SETSYMBOL(atoms+0, type);
+ for(i=0; i<numdevs; i++) {
char dummy[MAXPDSTRING];
char*devname=NULL;
if(API_ALSA == sys_midiapi) {
@@ -296,80 +299,79 @@ static void midisettings_listdevices(t_midisettings *x)
dummy[MAXPDSTRING-1]=0;
devname=dummy;
} else {
- devname=ms_symkeys_getname(x->x_params.indevices, i)->s_name;
+ devname=ms_symkeys_getname(devices, i)->s_name;
}
if(devname) {
SETSYMBOL(atoms+count+1, gensym(devname));
count++;
}
}
- outlet_anything(x->x_info, gensym("device"), count+1, atoms);
-
+ outlet_anything(outlet, gensym("device"), count+1, atoms);
+}
- SETSYMBOL(atoms+0, gensym("out"));
- count=0;
- for(i=0; i<x->x_params.num_outdev; i++) {
- char dummy[MAXPDSTRING];
- char*devname=NULL;
- if(API_ALSA == sys_midiapi) {
- snprintf(dummy, MAXPDSTRING, MS_ALSADEV_FORMAT, i);
- dummy[MAXPDSTRING-1]=0;
- devname=dummy;
- } else {
- devname=ms_symkeys_getname(x->x_params.outdevices, i)->s_name;
- }
- if(devname) {
- SETSYMBOL(atoms+count+1, gensym(devname));
- count++;
- }
- }
- outlet_anything(x->x_info, gensym("device"), count+1, atoms);
-
- SETSYMBOL(atoms+0, gensym("in"));
+static void midisettings_listdevices_devicelist(t_outlet *outlet,
+ t_symbol*type,
+ t_ms_symkeys*devices,
+ const unsigned int numdevs,
+ const unsigned int maxdevs
+ ) {
+ unsigned int i=0;
+ t_atom atoms[MAXMIDIDEV+1];
+ SETSYMBOL(atoms+0, type);
if(API_ALSA == sys_midiapi) {
char dummy[MAXPDSTRING];
- unsigned int indevs=MAXMIDIINDEV;
- SETFLOAT (atoms+1, (t_float)indevs);
- outlet_anything(x->x_info, gensym("devicelist"), 2, atoms);
- for(i=0; i<indevs; i++) {
+ unsigned int iodevs=maxdevs;
+ SETFLOAT (atoms+1, iodevs);
+ outlet_anything(outlet, gensym("devicelist"), 2, atoms);
+ for(i=0; i<iodevs; i++) {
snprintf(dummy, MAXPDSTRING, MS_ALSADEV_FORMAT, i);
dummy[MAXPDSTRING-1]=0;
SETSYMBOL(atoms+1, gensym(dummy));
SETFLOAT (atoms+2, (t_float)i);
- outlet_anything(x->x_info, gensym("devicelist"), 3, atoms);
+ outlet_anything(outlet, gensym("devicelist"), 3, atoms);
}
} else {
- SETFLOAT (atoms+1, (t_float)x->x_params.num_indevices);
- outlet_anything(x->x_info, gensym("devicelist"), 2, atoms);
- for(i=0; i<x->x_params.num_indevices; i++) {
- SETSYMBOL(atoms+1, ms_symkeys_getname(x->x_params.indevices, i));
+ SETFLOAT (atoms+1, (t_float)numdevs);
+ outlet_anything(outlet, gensym("devicelist"), 2, atoms);
+ for(i=0; i<numdevs; i++) {
+ t_symbol*s=ms_symkeys_getname(devices, i);
+ if(NULL==s)continue;
+ SETSYMBOL(atoms+1, s);
SETFLOAT (atoms+2, (t_float)i);
- outlet_anything(x->x_info, gensym("devicelist"), 3, atoms);
+ outlet_anything(outlet, gensym("devicelist"), 3, atoms);
}
}
+}
- SETSYMBOL(atoms+0, gensym("out"));
- if(API_ALSA == sys_midiapi) {
- char dummy[MAXPDSTRING];
- unsigned int outdevs=MAXMIDIOUTDEV;
- SETFLOAT (atoms+1, outdevs);
- outlet_anything(x->x_info, gensym("devicelist"), 2, atoms);
- for(i=0; i<outdevs; i++) {
- snprintf(dummy, MAXPDSTRING, MS_ALSADEV_FORMAT, i);
- dummy[MAXPDSTRING-1]=0;
- SETSYMBOL(atoms+1, gensym(dummy));
- SETFLOAT (atoms+2, (t_float)i);
- outlet_anything(x->x_info, gensym("devicelist"), 3, atoms);
- }
- } else {
- SETFLOAT (atoms+1, (t_float)x->x_params.num_outdevices);
- outlet_anything(x->x_info, gensym("devicelist"), 2, atoms);
- for(i=0; i<x->x_params.num_outdevices; i++) {
- SETSYMBOL(atoms+1, ms_symkeys_getname(x->x_params.outdevices, i));
- SETFLOAT (atoms+2, (t_float)i);
- outlet_anything(x->x_info, gensym("devicelist"), 3, atoms);
- }
- }
+
+
+
+static void midisettings_listdevices(t_midisettings *x)
+{
+ midisettings_listdevices_devices(x->x_info,
+ gensym("in"),
+ x->x_params.indevices,
+ x->x_params.num_indev);
+
+
+ midisettings_listdevices_devices(x->x_info,
+ gensym("out"),
+ x->x_params.outdevices,
+ x->x_params.num_outdev);
+
+
+
+ midisettings_listdevices_devicelist(x->x_info,
+ gensym("in"),
+ x->x_params.indevices,
+ x->x_params.num_indevices,
+ MAXMIDIINDEV);
+
+ midisettings_listdevices_devicelist(x->x_info,
+ gensym("out"),
+ x->x_params.outdevices,
+ x->x_params.num_outdevices,
+ MAXMIDIOUTDEV);
}
static void midisettings_params_apply(t_midisettings*x) {
@@ -399,9 +401,9 @@ static void midisettings_params_apply(t_midisettings*x) {
t_atom argv [MIDIDIALOG_INDEVS+MIDIDIALOG_OUTDEVS+2];
int argc= MIDIDIALOG_INDEVS+MIDIDIALOG_OUTDEVS+2;
- int i=0;
+ unsigned int i=0;
- ms_params_print(&x->x_params);
+ ms_params_print(&x->x_params);
for(i=0; i<argc; i++) {
SETFLOAT(argv+i, (t_float)0);
@@ -433,13 +435,6 @@ static void midisettings_params_apply(t_midisettings*x) {
SETFLOAT(argv+1*MIDIDIALOG_INDEVS+1*MIDIDIALOG_OUTDEVS+0,(t_float)x->x_params.num_indev );
SETFLOAT(argv+1*MIDIDIALOG_INDEVS+1*MIDIDIALOG_OUTDEVS+1,(t_float)x->x_params.num_outdev);
}
-
- startpost("mididialog: ");
- for(i=0; i<argc; i++) {
- postatom(argv, argc);
-
- }
-endpost();
if (s_pdsym->s_thing) typedmess(s_pdsym->s_thing,
gensym("midi-dialog"),