Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3320
Modified Files: Tag: desiredata builtins.c Log Message: [any] clone, still has a few minor bugs to sort out
Index: builtins.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/builtins.c,v retrieving revision 1.1.2.64 retrieving revision 1.1.2.65 diff -C2 -d -r1.1.2.64 -r1.1.2.65 *** builtins.c 4 Sep 2007 12:09:42 -0000 1.1.2.64 --- builtins.c 5 Sep 2007 00:07:25 -0000 1.1.2.65 *************** *** 1069,1072 **** --- 1069,1115 ---- }
+ /*---- Any ----*/ + static t_class *any_class; + struct t_any : t_object {t_binbuf *alist;}; + + static void *any_new(t_symbol *s,int argc, t_atom *argv) { + t_any *x = (t_any *)pd_new(any_class); + x->alist = binbuf_new(); + if (argc) { + if (argv[0].a_type == A_FLOAT) {alist_list(x->alist, 0, argc, argv);} + if (argv[0].a_type == A_SYMBOL) {alist_anything(x->alist, argv[0].a_symbol, argc-1, argv+1);} + } + outlet_new(x, &s_anything); + inlet_new(x,x->alist, 0, 0); + return x; + } + + static void any_anything(t_any *x, t_symbol *s, int argc, t_atom *argv) { + t_atom *outv; int outc = x->alist->n+argc+1; ATOMS_ALLOCA(outv, outc); + if (argv[0].a_type == A_FLOAT) { + alist_list(x->alist, 0, argc, argv); outlet_anything(x->outlet, &s_float, argc, argv); + } + if (argv[0].a_type == A_SYMBOL) { + alist_anything(x->alist, s, argc, argv); outlet_anything(x->outlet, s, argc, argv); + } + } + + static void any_bang(t_any *x) { + t_atom *outv; int outc = x->alist->n; + ATOMS_ALLOCA(outv, outc); + alist_toatoms(x->alist, outv); + if (!binbuf_getnatom(x->alist)) {outlet_bang(x->outlet);return;} + if (outv[0].a_type == A_FLOAT) {outlet_float(x->outlet, outv[0].a_float);} + if (outv[0].a_type == A_SYMBOL) {outlet_anything(x->outlet, outv[0].a_symbol, outc-1, outv+1);} + ATOMS_FREEA(outv, outc); + } + + static void any_setup() { + post("DesireData iemlib2 [any] clone"); + t_class *c = any_class = class_new2("any",any_new,0,sizeof(t_any),0,"*"); + class_addanything(c, any_anything); + class_addbang(c, any_bang); + } + /* MSW and OSX don't appear to have single-precision ANSI math */ #if defined(MSW) || defined(__APPLE__) *************** *** 2954,2958 **** macro_setup(); display_setup(); ! any2_setup(); clipboard_setup(); delay_setup(); --- 2997,3001 ---- macro_setup(); display_setup(); ! any_setup(); clipboard_setup(); delay_setup();