diff options
author | IOhannes m zmölnig <zmoelnig@users.sourceforge.net> | 2005-06-02 18:25:00 +0000 |
---|---|---|
committer | IOhannes m zmölnig <zmoelnig@users.sourceforge.net> | 2005-06-02 18:25:00 +0000 |
commit | 0c9b89b1018eb7760708ee5b080cd96846861328 (patch) | |
tree | f43a2b20292bba90931fe84e67aca8fb0013a984 /src/iemlib2/dollarg.c | |
parent | d56ec9d039c904e9230137254ff2fe281320eed9 (diff) |
updated to release-1.16
svn path=/trunk/externals/iemlib/; revision=3102
Diffstat (limited to 'src/iemlib2/dollarg.c')
-rw-r--r-- | src/iemlib2/dollarg.c | 223 |
1 files changed, 110 insertions, 113 deletions
diff --git a/src/iemlib2/dollarg.c b/src/iemlib2/dollarg.c index 253c0ff..3e90053 100644 --- a/src/iemlib2/dollarg.c +++ b/src/iemlib2/dollarg.c @@ -1,113 +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 - 2003 */ - -#ifdef NT -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif - -#include "m_pd.h" -#include "g_canvas.h" -#include "iemlib.h" -#include <stdlib.h> -#include <string.h> -#include <stdio.h> -#include <math.h> - -EXTERN void canvas_getargs(int *argcp, t_atom **argvp); - -/* ------------------------ dollarg ---------------------------- */ - -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 <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+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"));
+}
|