aboutsummaryrefslogtreecommitdiff
path: root/iemlib2/src/float24.c
diff options
context:
space:
mode:
authormusil <tmusil@users.sourceforge.net>2006-12-09 02:00:52 +0000
committermusil <tmusil@users.sourceforge.net>2006-12-09 02:00:52 +0000
commitd6b088044e161a27d49df537bbb6d998a8d0e50d (patch)
tree1a1b3a30e994767f4ef97b90194782258f2baa8a /iemlib2/src/float24.c
parent32dc0c0deb13ce57f099f616ddc427296970d8a5 (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.c81
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"));
+}