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/dollarg.c | 220 +++++++++++++++++++++++++------------------------- 1 file changed, 110 insertions(+), 110 deletions(-) (limited to 'src/iemlib2/dollarg.c') diff --git a/src/iemlib2/dollarg.c b/src/iemlib2/dollarg.c index 3e90053..c21d29e 100644 --- a/src/iemlib2/dollarg.c +++ b/src/iemlib2/dollarg.c @@ -1,110 +1,110 @@ -/* 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 */ - -#include "m_pd.h" -#include "g_canvas.h" -#include "iemlib.h" -#include -#include -#include -#include - -EXTERN void canvas_getargs(int *argcp, t_atom **argvp); - -/* ------------------------- dollarg ---------------------------- */ -/* --- dollar-arguments, output the initial-arguments and the --- */ -/* ------- number of them of the parent abstraction-patch ------- */ - -static t_class *dollarg_class; - -typedef struct _dollarg -{ - t_object x_obj; - void *x_outlet_ac; - t_atom *x_at; - int x_ac; -} t_dollarg; - -static void dollarg_float(t_dollarg *x, t_floatarg f) -{ - int i = (int)f; - - if(!i) - { - outlet_float(x->x_outlet_ac, x->x_ac); - if(x->x_ac) - outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac, x->x_at); - } - else if(i > 0) - { - if(i <= x->x_ac) - { - outlet_float(x->x_outlet_ac, i); - if(IS_A_FLOAT(x->x_at, i-1)) - outlet_float(x->x_obj.ob_outlet, atom_getfloatarg(i-1, x->x_ac, x->x_at)); - else if(IS_A_SYMBOL(x->x_at, i-1)) - outlet_symbol(x->x_obj.ob_outlet, atom_getsymbolarg(i-1, x->x_ac, x->x_at)); - } - else - outlet_float(x->x_outlet_ac, 0); - } - else - { - int j = x->x_ac + i; - - if(j >= 0) - { - outlet_float(x->x_outlet_ac, j+1); - if(IS_A_FLOAT(x->x_at, j)) - outlet_float(x->x_obj.ob_outlet, atom_getfloatarg(j, x->x_ac, x->x_at)); - else if(IS_A_SYMBOL(x->x_at, j)) - outlet_symbol(x->x_obj.ob_outlet, atom_getsymbolarg(j, x->x_ac, x->x_at)); - } - else - outlet_float(x->x_outlet_ac, 0); - } -} - -static void dollarg_bang(t_dollarg *x) -{ - dollarg_float(x, 0.0f); -} - -static void dollarg_free(t_dollarg *x) -{ - if(x->x_ac) - freebytes(x->x_at, x->x_ac * sizeof(t_atom)); -} - -static void *dollarg_new(void) -{ - t_dollarg *x = (t_dollarg *)pd_new(dollarg_class); - t_glist *glist=(t_glist *)canvas_getcurrent(); - t_canvas *canvas=glist_getcanvas(glist); - int pargc; - t_atom *pargv, *at; - - canvas_setcurrent(canvas); - canvas_getargs(&pargc, &pargv); - canvas_unsetcurrent(canvas); - x->x_at = (t_atom *)getbytes(pargc*sizeof(t_atom)); - x->x_ac = pargc; - at = x->x_at; - while(pargc--) - *at++ = *pargv++; - outlet_new(&x->x_obj, &s_list); - x->x_outlet_ac = outlet_new(&x->x_obj, &s_float); - return (x); -} - -void dollarg_setup(void) -{ - dollarg_class = class_new(gensym("dollarg"), (t_newmethod)dollarg_new, - (t_method)dollarg_free, sizeof(t_dollarg), 0, 0); - class_addcreator((t_newmethod)dollarg_new, gensym("$n"), 0); - class_addbang(dollarg_class, (t_method)dollarg_bang); - class_addfloat(dollarg_class, (t_method)dollarg_float); - class_sethelpsymbol(dollarg_class, gensym("iemhelp/help-dollarg")); -} +/* 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 */ + +#include "m_pd.h" +#include "g_canvas.h" +#include "iemlib.h" +#include +#include +#include +#include + +EXTERN void canvas_getargs(int *argcp, t_atom **argvp); + +/* ------------------------- dollarg ---------------------------- */ +/* --- dollar-arguments, output the initial-arguments and the --- */ +/* ------- number of them of the parent abstraction-patch ------- */ + +static t_class *dollarg_class; + +typedef struct _dollarg +{ + t_object x_obj; + void *x_outlet_ac; + t_atom *x_at; + int x_ac; +} t_dollarg; + +static void dollarg_float(t_dollarg *x, t_floatarg f) +{ + int i = (int)f; + + if(!i) + { + outlet_float(x->x_outlet_ac, x->x_ac); + if(x->x_ac) + outlet_list(x->x_obj.ob_outlet, &s_list, x->x_ac, x->x_at); + } + else if(i > 0) + { + if(i <= x->x_ac) + { + outlet_float(x->x_outlet_ac, i); + if(IS_A_FLOAT(x->x_at, i-1)) + outlet_float(x->x_obj.ob_outlet, atom_getfloatarg(i-1, x->x_ac, x->x_at)); + else if(IS_A_SYMBOL(x->x_at, i-1)) + outlet_symbol(x->x_obj.ob_outlet, atom_getsymbolarg(i-1, x->x_ac, x->x_at)); + } + else + outlet_float(x->x_outlet_ac, 0); + } + else + { + int j = x->x_ac + i; + + if(j >= 0) + { + outlet_float(x->x_outlet_ac, j+1); + if(IS_A_FLOAT(x->x_at, j)) + outlet_float(x->x_obj.ob_outlet, atom_getfloatarg(j, x->x_ac, x->x_at)); + else if(IS_A_SYMBOL(x->x_at, j)) + outlet_symbol(x->x_obj.ob_outlet, atom_getsymbolarg(j, x->x_ac, x->x_at)); + } + else + outlet_float(x->x_outlet_ac, 0); + } +} + +static void dollarg_bang(t_dollarg *x) +{ + dollarg_float(x, 0.0f); +} + +static void dollarg_free(t_dollarg *x) +{ + if(x->x_ac) + freebytes(x->x_at, x->x_ac * sizeof(t_atom)); +} + +static void *dollarg_new(void) +{ + t_dollarg *x = (t_dollarg *)pd_new(dollarg_class); + t_glist *glist=(t_glist *)canvas_getcurrent(); + t_canvas *canvas=glist_getcanvas(glist); + int pargc; + t_atom *pargv, *at; + + canvas_setcurrent(canvas); + canvas_getargs(&pargc, &pargv); + canvas_unsetcurrent(canvas); + x->x_at = (t_atom *)getbytes(pargc*sizeof(t_atom)); + x->x_ac = pargc; + at = x->x_at; + while(pargc--) + *at++ = *pargv++; + outlet_new(&x->x_obj, &s_list); + x->x_outlet_ac = outlet_new(&x->x_obj, &s_float); + return (x); +} + +void dollarg_setup(void) +{ + dollarg_class = class_new(gensym("dollarg"), (t_newmethod)dollarg_new, + (t_method)dollarg_free, sizeof(t_dollarg), 0, 0); + class_addcreator((t_newmethod)dollarg_new, gensym("$n"), 0); + class_addbang(dollarg_class, (t_method)dollarg_bang); + class_addfloat(dollarg_class, (t_method)dollarg_float); + class_sethelpsymbol(dollarg_class, gensym("iemhelp/help-dollarg")); +} -- cgit v1.2.1