From 486e5ff7ebf4ed0fe1089ac73643c8dbca9b838a Mon Sep 17 00:00:00 2001 From: musil Date: Fri, 8 Jul 2005 02:13:24 +0000 Subject: dos-return svn path=/trunk/externals/iemlib/; revision=3301 --- src/iemlib2/list2send.c | 500 ++++++++++++++++++++++++------------------------ 1 file changed, 250 insertions(+), 250 deletions(-) (limited to 'src/iemlib2/list2send.c') diff --git a/src/iemlib2/list2send.c b/src/iemlib2/list2send.c index ff871e8..b21bc5d 100644 --- a/src/iemlib2/list2send.c +++ b/src/iemlib2/list2send.c @@ -1,250 +1,250 @@ -/* For information on usage and redistribution, and for a DISCLAIMER OF ALL -* WARRANTIES, see the file, "LICENSE.txt," in this distribution. - -iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ - -#ifdef NT -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - -#include "m_pd.h" -#include "iemlib.h" -#include -#include -#include -#include - -/* ------------------------- list2send ----------------------------- */ -/* -- via an array of send labels, an incomming list with leading -- */ -/* -- float index will be sent to a receive object with the label -- */ -/* ------------ name of the index-th entry of the array ------------ */ - -static t_class *list2send_class; - -typedef struct _list2send -{ - t_object x_obj; - int x_max; - char *x_snd_able; - t_symbol **x_send_entries; - t_symbol *x_set; -} t_list2send; - -static void list2send_list(t_list2send *x, t_symbol *s, int ac, t_atom *av) -{ - if((ac >= 2) && (IS_A_FLOAT(av,0))) - { - int identifier_index = (int)atom_getintarg(0, ac, av); - - if(identifier_index < x->x_max) - { - if(x->x_snd_able[identifier_index]) - { - t_symbol *sender = x->x_send_entries[identifier_index]; - - if(sender->s_thing) - { - if(ac == 2) - { - if(IS_A_FLOAT(av, 1)) - pd_float(sender->s_thing, atom_getfloatarg(1, ac, av)); - else if(IS_A_SYMBOL(av, 1)) - pd_symbol(sender->s_thing, atom_getsymbolarg(1, ac, av)); - } - else - pd_list(sender->s_thing, &s_list, ac-1, av+1); - } - } - } - } -} - -static void list2send_set(t_list2send *x, t_symbol *s, int ac, t_atom *av) -{ - if((ac >= 2) && (IS_A_FLOAT(av,0))) - { - int identifier_index = (int)atom_getintarg(0, ac, av); - - if(identifier_index < x->x_max) - { - if(x->x_snd_able[identifier_index]) - { - t_symbol *sender = x->x_send_entries[identifier_index]; - - if(sender->s_thing) - typedmess(sender->s_thing, s, ac-1, av+1); - } - } - } -} - -static void list2send_all(t_list2send *x, t_symbol *s, int ac, t_atom *av) -{ - int i, n=x->x_max; - - if(ac == n) - { - for(i=n-1; i>=0; i--)/*change*/ - { - if(x->x_snd_able[i]) - { - t_symbol *sender = x->x_send_entries[i]; - - if(sender->s_thing) - { - if(IS_A_FLOAT(av, i)) - pd_float(sender->s_thing, atom_getfloatarg(i, ac, av)); - else if(IS_A_SYMBOL(av, i)) - pd_symbol(sender->s_thing, atom_getsymbolarg(i, ac, av)); - } - } - } - } -} - -static void list2send_set_all(t_list2send *x, t_symbol *s, int ac, t_atom *av) -{ - int i, n=x->x_max; - - if(ac == n) - { - for(i=n-1; i>=0; i--)/*change*/ - { - if(x->x_snd_able[i]) - { - t_symbol *sender = x->x_send_entries[i]; - - if(sender->s_thing) - typedmess(sender->s_thing, x->x_set, 1, av+i); - } - } - } -} - -static void list2send_from(t_list2send *x, t_symbol *s, int ac, t_atom *av) -{ - int n=x->x_max; - - if(ac >= 1) - { - int i, j, beg=(int)atom_getintarg(0, ac, av); - - if((beg + ac - 1) <= n) - { - for(i=ac-1,j=beg+ac-2; i>=1; i--,j--)/*change*/ - { - if(x->x_snd_able[j]) - { - t_symbol *sender = x->x_send_entries[j]; - - if(sender->s_thing) - { - if(IS_A_FLOAT(av, i)) - pd_float(sender->s_thing, atom_getfloatarg(i, ac, av)); - else if(IS_A_SYMBOL(av, i)) - pd_symbol(sender->s_thing, atom_getsymbolarg(i, ac, av)); - } - } - } - } - } -} - -static void list2send_set_from(t_list2send *x, t_symbol *s, int ac, t_atom *av) -{ - int n=x->x_max; - - if(ac >= 1) - { - int i, j, beg=(int)atom_getintarg(0, ac, av); - - if((beg + ac - 1) <= n) - { - for(i=ac-1,j=beg+ac-2; i>=1; i--,j--)/*change*/ - { - if(x->x_snd_able[j]) - { - t_symbol *sender = x->x_send_entries[j]; - - if(sender->s_thing) - typedmess(sender->s_thing, x->x_set, 1, av+i); - } - } - } - } -} - -static void list2send_add(t_list2send *x, t_symbol *s, int ac, t_atom *av) -{ - if((ac > 1) && (IS_A_FLOAT(av, 0))) - { - int identifier_index = (int)atom_getintarg(0, ac, av); - - if(identifier_index < x->x_max) - { - if(IS_A_SYMBOL(av, 1)) - { - x->x_send_entries[identifier_index] = atom_getsymbolarg(1, ac, av); - x->x_snd_able[identifier_index] = 1; - } - else if(IS_A_FLOAT(av, 1)) - { - char str[100]; - - sprintf(str, "%g", atom_getfloatarg(1, ac, av)); - x->x_send_entries[identifier_index] = gensym(str); - x->x_snd_able[identifier_index] = 1; - } - } - } -} - -static void list2send_clear(t_list2send *x) -{ - int i, n=x->x_max; - - for(i=0; ix_snd_able[i]) - x->x_snd_able[i] = 0; - } -} - -static void list2send_free(t_list2send *x) -{ - freebytes(x->x_snd_able, x->x_max * sizeof(char)); - freebytes(x->x_send_entries, x->x_max * sizeof(t_symbol *)); -} - -static void *list2send_new(t_float fmax) -{ - t_list2send *x = (t_list2send *)pd_new(list2send_class); - int i, max = (int)fmax; - t_atom *ap; - - if(max <= 0) - max = 80; - x->x_max = max; - x->x_snd_able = (char *)getbytes(max * sizeof(char)); - x->x_send_entries = (t_symbol **)getbytes(max * sizeof(t_symbol *)); - for(i=0; ix_snd_able[i] = 0; - x->x_set = gensym("set"); - return (x); -} - -void list2send_setup(void) -{ - list2send_class = class_new(gensym("list2send"), (t_newmethod)list2send_new, - (t_method)list2send_free, sizeof(t_list2send), 0, A_DEFFLOAT, 0); - class_addlist(list2send_class, list2send_list); - class_addmethod(list2send_class, (t_method)list2send_add, gensym("add"), A_GIMME, 0); - class_addmethod(list2send_class, (t_method)list2send_set, gensym("set"), A_GIMME, 0); - class_addmethod(list2send_class, (t_method)list2send_all, gensym("all"), A_GIMME, 0); - class_addmethod(list2send_class, (t_method)list2send_set_all, gensym("set_all"), A_GIMME, 0); - class_addmethod(list2send_class, (t_method)list2send_from, gensym("from"), A_GIMME, 0); - class_addmethod(list2send_class, (t_method)list2send_set_from, gensym("set_from"), A_GIMME, 0); - class_addmethod(list2send_class, (t_method)list2send_clear, gensym("clear"), 0); - class_sethelpsymbol(list2send_class, gensym("iemhelp/help-list2send")); -} +/* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. + +iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */ + +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif + +#include "m_pd.h" +#include "iemlib.h" +#include +#include +#include +#include + +/* ------------------------- list2send ----------------------------- */ +/* -- via an array of send labels, an incomming list with leading -- */ +/* -- float index will be sent to a receive object with the label -- */ +/* ------------ name of the index-th entry of the array ------------ */ + +static t_class *list2send_class; + +typedef struct _list2send +{ + t_object x_obj; + int x_max; + char *x_snd_able; + t_symbol **x_send_entries; + t_symbol *x_set; +} t_list2send; + +static void list2send_list(t_list2send *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac >= 2) && (IS_A_FLOAT(av,0))) + { + int identifier_index = (int)atom_getintarg(0, ac, av); + + if(identifier_index < x->x_max) + { + if(x->x_snd_able[identifier_index]) + { + t_symbol *sender = x->x_send_entries[identifier_index]; + + if(sender->s_thing) + { + if(ac == 2) + { + if(IS_A_FLOAT(av, 1)) + pd_float(sender->s_thing, atom_getfloatarg(1, ac, av)); + else if(IS_A_SYMBOL(av, 1)) + pd_symbol(sender->s_thing, atom_getsymbolarg(1, ac, av)); + } + else + pd_list(sender->s_thing, &s_list, ac-1, av+1); + } + } + } + } +} + +static void list2send_set(t_list2send *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac >= 2) && (IS_A_FLOAT(av,0))) + { + int identifier_index = (int)atom_getintarg(0, ac, av); + + if(identifier_index < x->x_max) + { + if(x->x_snd_able[identifier_index]) + { + t_symbol *sender = x->x_send_entries[identifier_index]; + + if(sender->s_thing) + typedmess(sender->s_thing, s, ac-1, av+1); + } + } + } +} + +static void list2send_all(t_list2send *x, t_symbol *s, int ac, t_atom *av) +{ + int i, n=x->x_max; + + if(ac == n) + { + for(i=n-1; i>=0; i--)/*change*/ + { + if(x->x_snd_able[i]) + { + t_symbol *sender = x->x_send_entries[i]; + + if(sender->s_thing) + { + if(IS_A_FLOAT(av, i)) + pd_float(sender->s_thing, atom_getfloatarg(i, ac, av)); + else if(IS_A_SYMBOL(av, i)) + pd_symbol(sender->s_thing, atom_getsymbolarg(i, ac, av)); + } + } + } + } +} + +static void list2send_set_all(t_list2send *x, t_symbol *s, int ac, t_atom *av) +{ + int i, n=x->x_max; + + if(ac == n) + { + for(i=n-1; i>=0; i--)/*change*/ + { + if(x->x_snd_able[i]) + { + t_symbol *sender = x->x_send_entries[i]; + + if(sender->s_thing) + typedmess(sender->s_thing, x->x_set, 1, av+i); + } + } + } +} + +static void list2send_from(t_list2send *x, t_symbol *s, int ac, t_atom *av) +{ + int n=x->x_max; + + if(ac >= 1) + { + int i, j, beg=(int)atom_getintarg(0, ac, av); + + if((beg + ac - 1) <= n) + { + for(i=ac-1,j=beg+ac-2; i>=1; i--,j--)/*change*/ + { + if(x->x_snd_able[j]) + { + t_symbol *sender = x->x_send_entries[j]; + + if(sender->s_thing) + { + if(IS_A_FLOAT(av, i)) + pd_float(sender->s_thing, atom_getfloatarg(i, ac, av)); + else if(IS_A_SYMBOL(av, i)) + pd_symbol(sender->s_thing, atom_getsymbolarg(i, ac, av)); + } + } + } + } + } +} + +static void list2send_set_from(t_list2send *x, t_symbol *s, int ac, t_atom *av) +{ + int n=x->x_max; + + if(ac >= 1) + { + int i, j, beg=(int)atom_getintarg(0, ac, av); + + if((beg + ac - 1) <= n) + { + for(i=ac-1,j=beg+ac-2; i>=1; i--,j--)/*change*/ + { + if(x->x_snd_able[j]) + { + t_symbol *sender = x->x_send_entries[j]; + + if(sender->s_thing) + typedmess(sender->s_thing, x->x_set, 1, av+i); + } + } + } + } +} + +static void list2send_add(t_list2send *x, t_symbol *s, int ac, t_atom *av) +{ + if((ac > 1) && (IS_A_FLOAT(av, 0))) + { + int identifier_index = (int)atom_getintarg(0, ac, av); + + if(identifier_index < x->x_max) + { + if(IS_A_SYMBOL(av, 1)) + { + x->x_send_entries[identifier_index] = atom_getsymbolarg(1, ac, av); + x->x_snd_able[identifier_index] = 1; + } + else if(IS_A_FLOAT(av, 1)) + { + char str[100]; + + sprintf(str, "%g", atom_getfloatarg(1, ac, av)); + x->x_send_entries[identifier_index] = gensym(str); + x->x_snd_able[identifier_index] = 1; + } + } + } +} + +static void list2send_clear(t_list2send *x) +{ + int i, n=x->x_max; + + for(i=0; ix_snd_able[i]) + x->x_snd_able[i] = 0; + } +} + +static void list2send_free(t_list2send *x) +{ + freebytes(x->x_snd_able, x->x_max * sizeof(char)); + freebytes(x->x_send_entries, x->x_max * sizeof(t_symbol *)); +} + +static void *list2send_new(t_float fmax) +{ + t_list2send *x = (t_list2send *)pd_new(list2send_class); + int i, max = (int)fmax; + t_atom *ap; + + if(max <= 0) + max = 80; + x->x_max = max; + x->x_snd_able = (char *)getbytes(max * sizeof(char)); + x->x_send_entries = (t_symbol **)getbytes(max * sizeof(t_symbol *)); + for(i=0; ix_snd_able[i] = 0; + x->x_set = gensym("set"); + return (x); +} + +void list2send_setup(void) +{ + list2send_class = class_new(gensym("list2send"), (t_newmethod)list2send_new, + (t_method)list2send_free, sizeof(t_list2send), 0, A_DEFFLOAT, 0); + class_addlist(list2send_class, list2send_list); + class_addmethod(list2send_class, (t_method)list2send_add, gensym("add"), A_GIMME, 0); + class_addmethod(list2send_class, (t_method)list2send_set, gensym("set"), A_GIMME, 0); + class_addmethod(list2send_class, (t_method)list2send_all, gensym("all"), A_GIMME, 0); + class_addmethod(list2send_class, (t_method)list2send_set_all, gensym("set_all"), A_GIMME, 0); + class_addmethod(list2send_class, (t_method)list2send_from, gensym("from"), A_GIMME, 0); + class_addmethod(list2send_class, (t_method)list2send_set_from, gensym("set_from"), A_GIMME, 0); + class_addmethod(list2send_class, (t_method)list2send_clear, gensym("clear"), 0); + class_sethelpsymbol(list2send_class, gensym("iemhelp/help-list2send")); +} -- cgit v1.2.1