From af45b385f1678aa2876aba27cbde6d2e6248a0c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Fri, 28 Jan 2011 12:56:52 +0000 Subject: refactored code and prevent crash when a certain ID cannot be found svn path=/trunk/externals/iem/mediasettings/; revision=14835 --- midisettings.c | 145 ++++++++++++++++++++++++++++----------------------------- 1 file 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; ioutdevices=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; ix_params.num_indev; i++) { + SETSYMBOL(atoms+0, type); + for(i=0; ix_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; ix_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; ix_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; ix_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; ix_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; ix_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; ix_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; ix_params.num_indev ); SETFLOAT(argv+1*MIDIDIALOG_INDEVS+1*MIDIDIALOG_OUTDEVS+1,(t_float)x->x_params.num_outdev); } - - startpost("mididialog: "); - for(i=0; is_thing) typedmess(s_pdsym->s_thing, gensym("midi-dialog"), -- cgit v1.2.1