diff options
author | musil <tmusil@users.sourceforge.net> | 2006-12-09 02:00:52 +0000 |
---|---|---|
committer | musil <tmusil@users.sourceforge.net> | 2006-12-09 02:00:52 +0000 |
commit | d6b088044e161a27d49df537bbb6d998a8d0e50d (patch) | |
tree | 1a1b3a30e994767f4ef97b90194782258f2baa8a /iemlib2/src/float24.c | |
parent | 32dc0c0deb13ce57f099f616ddc427296970d8a5 (diff) |
// class_sethelpsymbol();
changed help-*.pd to *-help.pd
chanded file structure to standard
1st step remove old
svn path=/trunk/externals/iemlib/; revision=6756
Diffstat (limited to 'iemlib2/src/float24.c')
-rw-r--r-- | iemlib2/src/float24.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/iemlib2/src/float24.c b/iemlib2/src/float24.c new file mode 100644 index 0000000..2095e14 --- /dev/null +++ b/iemlib2/src/float24.c @@ -0,0 +1,81 @@ +/* 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 - 2006 */ + +#include "m_pd.h" +#include "iemlib.h" +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <math.h> + +/* -------------------------- float24 ----------------------- */ +/* ----------- float-object with 24 bit accuracy ------------ */ +/* -- concaternate a list of float-arguments to one string -- */ +/* ----------- and convert it to a float-number ------------- */ + +typedef struct _float24 +{ + t_object x_obj; + t_float x_arg; +} t_float24; + +static t_class *float24_class; + +static float float24_calc_sum(int argc, t_atom *argv) +{ + int i; + char str[1000], buf[100]; + + str[0] = 0; + for(i=0; i<argc; i++) + { + if(IS_A_FLOAT(argv, i)) + { + sprintf(buf, "%g", (float)atom_getfloatarg(i, argc, argv)); + strcat(str, buf); + } + } + return(atof(str)); +} + +static void float24_bang(t_float24 *x) +{ + outlet_float(x->x_obj.ob_outlet, x->x_arg); +} + +static void float24_float(t_float24 *x, t_float f) +{ + x->x_arg = f; + float24_bang(x); +} + +static void float24_list(t_float24 *x, t_symbol *s, int argc, t_atom *argv) +{ + if(argc > 0) + x->x_arg = float24_calc_sum(argc, argv); + float24_bang(x); +} + +static void *float24_new(t_symbol *s, int argc, t_atom *argv) +{ + t_float24 *x = (t_float24 *)pd_new(float24_class); + + outlet_new(&x->x_obj, &s_float); + x->x_arg = 0.0f; + if(argc > 0) + x->x_arg = float24_calc_sum(argc, argv); + return (x); +} + +void float24_setup(void) +{ + float24_class = class_new(gensym("float24"), (t_newmethod)float24_new, 0, + sizeof(t_float24), 0, A_GIMME, 0); + class_addcreator((t_newmethod)float24_new, gensym("f24"), A_GIMME, 0); + class_addbang(float24_class, (t_method)float24_bang); + class_addfloat(float24_class, (t_method)float24_float); + class_addlist(float24_class, (t_method)float24_list); +// class_sethelpsymbol(float24_class, gensym("iemhelp/help-float24")); +} |