[SCM] pd-zexy/master: New upstream version 2.2.7

umlaeute at users.alioth.debian.org umlaeute at users.alioth.debian.org
Sun Jan 21 22:21:53 UTC 2018


The following commit has been merged in the master branch:
commit 3ffc2280f6e78f885af003544351cd45ac79eddc
Author: IOhannes m zmölnig <zmoelnig at umlautS.umlaeute.mur.at>
Date:   Sun Jan 21 23:03:28 2018 +0100

    New upstream version 2.2.7

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 8470021..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-# git ls-files --others --exclude-from=.git/info/exclude
-# Lines that start with '#' are comments.
-# For a project mostly in C, the following would be a good set of
-# exclude patterns (uncomment them if you want to use them):
-*.[oa]
-*~
-*.pd_linux
-*.pd_darwin
-*.dll
diff --git a/configure.ac b/configure.ac
index fef1c90..dc65de7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ([2.60])
 
-AC_INIT([zexy], [2.2.6], [zmoelnig at iem.at], [zexy], [https://git.iem.at/pd/zexy])
+AC_INIT([zexy], [2.2.7], [zmoelnig at iem.at], [zexy], [https://git.iem.at/pd/zexy])
 AM_INIT_AUTOMAKE([1.10 foreign])
 m4_ifdef([LT_INIT], 
 	[LT_INIT([disable-static win32-dll])],
@@ -171,10 +171,14 @@ AC_ERROR([m_pd.h is desperately needed!
         "--with-pd=</path/to/pd/>"])
 fi
 
-AC_SUBST(CFLAGS)
-AC_SUBST(CPPFLAGS)
-AC_SUBST(DEFS)
-AC_SUBST(ARCH_FLAG)
+AC_SUBST([VALGRIND_CHECK_RULES])
+m4_ifdef([AX_VALGRIND_CHECK], [AX_VALGRIND_CHECK])
+
+AC_SUBST([VERBOSE])
+AC_SUBST([CFLAGS])
+AC_SUBST([CPPFLAGS])
+AC_SUBST([DEFS])
+AC_SUBST([ARCH_FLAG])
 AC_SUBST([LIBTOOL_DEPS])
 AC_SUBST([EXTRA_LTFLAGS])
 
diff --git a/reference/multireceive-help.pd b/reference/multireceive-help.pd
new file mode 100644
index 0000000..8940eb4
--- /dev/null
+++ b/reference/multireceive-help.pd
@@ -0,0 +1,23 @@
+#N canvas 275 127 834 332 10;
+#X floatatom 389 174 5 0 0 0 - - -, f 5;
+#X obj 153 186 print x;
+#X text 51 32 [multireceive]: combine multiple receives;
+#X obj 389 202 s \$0-a;
+#X msg 442 171 set foo bar;
+#X obj 442 202 s \$0-c;
+#X msg 153 120 set foo bar;
+#X obj 153 164 multireceive \$0-a foo \$0-c;
+#X floatatom 549 154 5 0 0 0 - - -, f 5;
+#X obj 549 202 s foo;
+#X msg 549 173 foo \$1;
+#X obj 602 202 s bar;
+#X msg 602 173 bar-\$1;
+#X floatatom 602 154 5 0 0 0 - - -, f 5;
+#X connect 0 0 3 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 0;
+#X connect 7 0 1 0;
+#X connect 8 0 10 0;
+#X connect 10 0 9 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
diff --git a/src/0x260x260x7e.c b/src/0x260x260x7e.c
index 88e4896..492ef75 100644
--- a/src/0x260x260x7e.c
+++ b/src/0x260x260x7e.c
@@ -23,7 +23,7 @@
 /* ------------------------ logical~ ----------------------------- */
 
 /* ----------------------------- andand_tilde ----------------------------- */
-static t_class *andand_tilde_class, *scalarandand_tilde_class;
+static t_class *andand_tilde_class=NULL, *scalarandand_tilde_class=NULL;
 
 typedef struct _andand_tilde {
   t_object x_obj;
@@ -289,7 +289,7 @@ void setup_0x260x260x7e(void)
                                  (t_newmethod)andand_tilde_new, 0,
                                  sizeof(t_andand_tilde), 0, A_GIMME, 0);
   class_addmethod(andand_tilde_class, (t_method)andand_tilde_dsp,
-                  gensym("dsp"), 0);
+                  gensym("dsp"), A_CANT, 0);
   CLASS_MAINSIGNALIN(andand_tilde_class, t_andand_tilde, x_f);
   class_addmethod  (andand_tilde_class, (t_method)andand_tilde_help,
                     gensym("help"), A_NULL);
@@ -300,7 +300,7 @@ void setup_0x260x260x7e(void)
                                        sizeof(t_scalarandand_tilde), 0, 0);
   CLASS_MAINSIGNALIN(scalarandand_tilde_class, t_scalarandand_tilde, x_f);
   class_addmethod(scalarandand_tilde_class, (t_method)scalarandand_tilde_dsp,
-                  gensym("dsp"),
+                  gensym("dsp"), A_CANT,
                   0);
   class_addmethod  (scalarandand_tilde_class, (t_method)andand_tilde_help,
                     gensym("help"), A_NULL);
diff --git a/src/0x2e.c b/src/0x2e.c
index 83f4abc..8cf2eea 100644
--- a/src/0x2e.c
+++ b/src/0x2e.c
@@ -20,8 +20,8 @@
 
 #include "zexy.h"
 
-static t_class *scalmul_class;
-static t_class *scalmul_scal_class;
+static t_class *scalmul_class=NULL;
+static t_class *scalmul_scal_class=NULL;
 
 typedef struct _scalmul {
   t_object x_obj;
diff --git a/src/0x3c0x7e.c b/src/0x3c0x7e.c
index c710dd7..30aefac 100644
--- a/src/0x3c0x7e.c
+++ b/src/0x3c0x7e.c
@@ -1,5 +1,5 @@
 /*
- * <~: signal comparision
+ * <~: signal comparison
  *
  * (c) 1999-2011 IOhannes m zmölnig, forum::für::umläute, institute of electronic music and acoustics (iem)
  *
@@ -23,7 +23,7 @@
 
 
 /* ----------------------------- lt_tilde ----------------------------- */
-static t_class *lt_tilde_class, *scalarlt_tilde_class;
+static t_class *lt_tilde_class=NULL, *scalarlt_tilde_class=NULL;
 
 typedef struct _lt_tilde {
   t_object x_obj;
@@ -243,7 +243,8 @@ void setup_0x3c0x7e(void)
 {
   lt_tilde_class = class_new(gensym("<~"), (t_newmethod)lt_tilde_new, 0,
                              sizeof(t_lt_tilde), 0, A_GIMME, 0);
-  class_addmethod(lt_tilde_class, (t_method)lt_tilde_dsp, gensym("dsp"), 0);
+  class_addmethod(lt_tilde_class, (t_method)lt_tilde_dsp, gensym("dsp"),
+                  A_CANT, 0);
   CLASS_MAINSIGNALIN(lt_tilde_class, t_lt_tilde, x_f);
   class_addmethod  (lt_tilde_class, (t_method)lt_tilde_help, gensym("help"),
                     A_NULL);
@@ -254,7 +255,7 @@ void setup_0x3c0x7e(void)
   CLASS_MAINSIGNALIN(scalarlt_tilde_class, t_scalarlt_tilde, x_f);
   class_addmethod(scalarlt_tilde_class, (t_method)scalarlt_tilde_dsp,
                   gensym("dsp"),
-                  0);
+                  A_CANT, 0);
   class_addmethod  (scalarlt_tilde_class, (t_method)lt_tilde_help,
                     gensym("help"), A_NULL);
   class_sethelpsymbol(scalarlt_tilde_class, gensym("zigbinops"));
diff --git a/src/0x3d0x3d0x7e.c b/src/0x3d0x3d0x7e.c
index 7c0c014..a74e8ff 100644
--- a/src/0x3d0x3d0x7e.c
+++ b/src/0x3d0x3d0x7e.c
@@ -20,7 +20,7 @@
 #include "zexySIMD.h"
 
 /* ----------------------------- eq_tilde ----------------------------- */
-static t_class *eq_tilde_class, *scalareq_tilde_class;
+static t_class *eq_tilde_class=NULL, *scalareq_tilde_class=NULL;
 
 typedef struct _eq_tilde {
   t_object x_obj;
@@ -242,7 +242,8 @@ void setup_0x3d0x3d0x7e(void)
 {
   eq_tilde_class = class_new(gensym("==~"), (t_newmethod)eq_tilde_new, 0,
                              sizeof(t_eq_tilde), 0, A_GIMME, 0);
-  class_addmethod(eq_tilde_class, (t_method)eq_tilde_dsp, gensym("dsp"), 0);
+  class_addmethod(eq_tilde_class, (t_method)eq_tilde_dsp, gensym("dsp"),
+                    A_CANT, 0);
   CLASS_MAINSIGNALIN(eq_tilde_class, t_eq_tilde, x_f);
   class_addmethod  (eq_tilde_class, (t_method)eq_tilde_help, gensym("help"),
                     A_NULL);
@@ -253,7 +254,7 @@ void setup_0x3d0x3d0x7e(void)
   CLASS_MAINSIGNALIN(scalareq_tilde_class, t_scalareq_tilde, x_f);
   class_addmethod(scalareq_tilde_class, (t_method)scalareq_tilde_dsp,
                   gensym("dsp"),
-                  0);
+                  A_CANT, 0);
   class_addmethod  (scalareq_tilde_class, (t_method)eq_tilde_help,
                     gensym("help"), A_NULL);
   class_sethelpsymbol(scalareq_tilde_class, gensym("zigbinops"));
diff --git a/src/0x3e0x7e.c b/src/0x3e0x7e.c
index 9c91e1d..78850b8 100644
--- a/src/0x3e0x7e.c
+++ b/src/0x3e0x7e.c
@@ -1,5 +1,5 @@
 /*
- * >~: signal comparision
+ * >~: signal comparison
  *
  * (c) 1999-2011 IOhannes m zmölnig, forum::für::umläute, institute of electronic music and acoustics (iem)
  *
@@ -23,7 +23,7 @@
 /* ------------------------ relational~ ----------------------------- */
 
 /* ----------------------------- gt_tilde ----------------------------- */
-static t_class *gt_tilde_class, *scalargt_tilde_class;
+static t_class *gt_tilde_class=NULL, *scalargt_tilde_class=NULL;
 
 typedef struct _gt_tilde {
   t_object x_obj;
@@ -246,7 +246,8 @@ void setup_0x3e0x7e(void)
 {
   gt_tilde_class = class_new(gensym(">~"), (t_newmethod)gt_tilde_new, 0,
                              sizeof(t_gt_tilde), 0, A_GIMME, 0);
-  class_addmethod(gt_tilde_class, (t_method)gt_tilde_dsp, gensym("dsp"), 0);
+  class_addmethod(gt_tilde_class, (t_method)gt_tilde_dsp, gensym("dsp"),
+                  A_CANT, 0);
   CLASS_MAINSIGNALIN(gt_tilde_class, t_gt_tilde, x_f);
   class_addmethod  (gt_tilde_class, (t_method)gt_tilde_help, gensym("help"),
                     A_NULL);
@@ -257,7 +258,7 @@ void setup_0x3e0x7e(void)
   CLASS_MAINSIGNALIN(scalargt_tilde_class, t_scalargt_tilde, x_f);
   class_addmethod(scalargt_tilde_class, (t_method)scalargt_tilde_dsp,
                   gensym("dsp"),
-                  0);
+                  A_CANT, 0);
   class_addmethod  (scalargt_tilde_class, (t_method)gt_tilde_help,
                     gensym("help"), A_NULL);
   class_sethelpsymbol(scalargt_tilde_class, gensym("zigbinops"));
diff --git a/src/0x7c0x7c0x7e.c b/src/0x7c0x7c0x7e.c
index b1cd497..e9f6553 100644
--- a/src/0x7c0x7c0x7e.c
+++ b/src/0x7c0x7c0x7e.c
@@ -20,7 +20,7 @@
 #include "zexySIMD.h"
 
 /* ----------------------------- oror_tilde ----------------------------- */
-static t_class *oror_tilde_class, *scalaroror_tilde_class;
+static t_class *oror_tilde_class=NULL, *scalaroror_tilde_class=NULL;
 
 typedef struct _oror_tilde {
   t_object x_obj;
@@ -262,7 +262,7 @@ void setup_0x7c0x7c0x7e(void)
   oror_tilde_class = class_new(gensym("||~"), (t_newmethod)oror_tilde_new, 0,
                                sizeof(t_oror_tilde), 0, A_GIMME, 0);
   class_addmethod(oror_tilde_class, (t_method)oror_tilde_dsp, gensym("dsp"),
-                  0);
+                  A_CANT, 0);
   CLASS_MAINSIGNALIN(oror_tilde_class, t_oror_tilde, x_f);
   class_addmethod  (oror_tilde_class, (t_method)oror_tilde_help,
                     gensym("help"), A_NULL);
@@ -273,7 +273,7 @@ void setup_0x7c0x7c0x7e(void)
   CLASS_MAINSIGNALIN(scalaroror_tilde_class, t_scalaroror_tilde, x_f);
   class_addmethod(scalaroror_tilde_class, (t_method)scalaroror_tilde_dsp,
                   gensym("dsp"),
-                  0);
+                  A_CANT, 0);
   class_addmethod  (scalaroror_tilde_class, (t_method)oror_tilde_help,
                     gensym("help"), A_NULL);
   class_sethelpsymbol(scalaroror_tilde_class, gensym("zigbinops"));
diff --git a/src/a2l.c b/src/a2l.c
index 0f9b904..48ed8ae 100644
--- a/src/a2l.c
+++ b/src/a2l.c
@@ -20,7 +20,7 @@
 #include "zexy.h"
 #include <string.h>
 
-static t_class *a2l_class;
+static t_class *a2l_class=NULL;
 
 typedef struct _a2l {
   t_object x_obj;
@@ -74,26 +74,29 @@ static void *a2l_new(void)
   outlet_new(&x->x_obj, 0);
   return (x);
 }
-
-void a2l_setup(void)
+static t_class* zclass_setup(const char*name)
 {
-
-  a2l_class = class_new(gensym("a2l"), (t_newmethod)a2l_new,
+  t_class *c = class_new(gensym(name), (t_newmethod)a2l_new,
                         0, sizeof(t_a2l), 0, 0);
-  class_addcreator((t_newmethod)a2l_new, gensym("any2list"), 0);
-
-
-  class_addbang    (a2l_class, a2l_bang);
-  class_addfloat   (a2l_class, a2l_float);
-  class_addsymbol  (a2l_class, a2l_symbol);
-  class_addpointer (a2l_class, a2l_pointer);
-  class_addlist    (a2l_class, a2l_list);
-  class_addanything(a2l_class, a2l_anything);
-
+  class_addbang    (c, a2l_bang);
+  class_addfloat   (c, a2l_float);
+  class_addsymbol  (c, a2l_symbol);
+  class_addpointer (c, a2l_pointer);
+  class_addlist    (c, a2l_list);
+  class_addanything(c, a2l_anything);
+  return c;
+}
+static void dosetup()
+{
   zexy_register("any2list");
+  a2l_class=zclass_setup("any2list");
+  zclass_setup("a2l");
 }
-
 void any2list_setup(void)
 {
-  a2l_setup();
+  dosetup();
+}
+void a2l_setup(void)
+{
+  dosetup();
 }
diff --git a/src/absgn~.c b/src/absgn~.c
index 94eb3ec..79305ae 100644
--- a/src/absgn~.c
+++ b/src/absgn~.c
@@ -27,7 +27,7 @@ typedef struct _absgn {
 
 /* ------------------------ sigABSGN~ ----------------------------- */
 
-static t_class *sigABSGN_class;
+static t_class *sigABSGN_class=NULL;
 
 static t_int *sigABSGN_perform(t_int *w)
 {
@@ -135,9 +135,10 @@ static void *sigABSGN_new(void)
 void absgn_tilde_setup(void)
 {
   sigABSGN_class = class_new(gensym("absgn~"), (t_newmethod)sigABSGN_new, 0,
-                             sizeof(t_absgn), 0, A_DEFFLOAT, 0);
+                             sizeof(t_absgn), 0, A_NULL);
   CLASS_MAINSIGNALIN(sigABSGN_class, t_absgn, x_f);
-  class_addmethod(sigABSGN_class, (t_method)sigABSGN_dsp, gensym("dsp"), 0);
+  class_addmethod(sigABSGN_class, (t_method)sigABSGN_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(sigABSGN_class, (t_method)sigABSGN_helper, gensym("help"),
                   0);
diff --git a/src/abs~.c b/src/abs~.c
index 69122a9..c3d8b53 100644
--- a/src/abs~.c
+++ b/src/abs~.c
@@ -28,7 +28,7 @@ typedef struct _abs {
 
 /* ------------------------ sigABS~ ----------------------------- */
 
-static t_class *sigABS_class;
+static t_class *sigABS_class=NULL;
 
 static t_int *sigABS_perform(t_int *w)
 {
@@ -153,9 +153,10 @@ static void *sigABS_new(void)
 void abs_tilde_setup(void)
 {
   sigABS_class = class_new(gensym("abs~"), (t_newmethod)sigABS_new, 0,
-                           sizeof(t_abs), 0, A_DEFFLOAT, 0);
+                           sizeof(t_abs), 0, A_NULL);
   CLASS_MAINSIGNALIN(sigABS_class, t_abs, x_f);
-  class_addmethod(sigABS_class, (t_method)sigABS_dsp, gensym("dsp"), 0);
+  class_addmethod(sigABS_class, (t_method)sigABS_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(sigABS_class, (t_method)sigABS_helper, gensym("help"), 0);
   class_sethelpsymbol(sigABS_class, gensym("zigbinops"));
diff --git a/src/atof.c b/src/atof.c
index 8311d83..35360ee 100644
--- a/src/atof.c
+++ b/src/atof.c
@@ -21,7 +21,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-static t_class *atof_class;
+static t_class *atof_class=NULL;
 
 typedef struct _atof {
   t_object x_obj;
@@ -81,7 +81,7 @@ void atof_setup(void)
 {
   atof_class = class_new(gensym("atof"), (t_newmethod)atof_new,
                          (t_method)atof_free,
-                         sizeof(t_atof), 0, A_DEFFLOAT, 0);
+                         sizeof(t_atof), 0, A_NULL);
 
   class_addbang(atof_class, (t_method)atof_bang);
   class_addfloat(atof_class, (t_method)atof_float);
diff --git a/src/atoi.c b/src/atoi.c
index 17e6b99..6dd3d61 100644
--- a/src/atoi.c
+++ b/src/atoi.c
@@ -21,7 +21,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-static t_class *atoi_class;
+static t_class *atoi_class=NULL;
 
 typedef struct _atoi {
   t_object x_obj;
@@ -99,7 +99,7 @@ void atoi_setup(void)
 {
   atoi_class = class_new(gensym("atoi"), (t_newmethod)atoi_new,
                          (t_method)atoi_free,
-                         sizeof(t_atoi), 0, A_DEFFLOAT, 0);
+                         sizeof(t_atoi), 0, A_NULL);
 
   class_addbang(atoi_class, (t_method)atoi_bang);
   class_addfloat(atoi_class, (t_method)atoi_float);
diff --git a/src/avg~.c b/src/avg~.c
index 3e68c4c..52097d6 100644
--- a/src/avg~.c
+++ b/src/avg~.c
@@ -23,7 +23,7 @@
 
 /* tilde object to take absolute value. */
 
-static t_class *avg_class;
+static t_class *avg_class=NULL;
 
 typedef struct _avg {
   t_object x_obj;
@@ -74,9 +74,10 @@ static void avg_help(void)
 void avg_tilde_setup(void)
 {
   avg_class = class_new(gensym("avg~"), (t_newmethod)avg_new, 0,
-                        sizeof(t_avg), 0, A_DEFFLOAT, 0);
+                        sizeof(t_avg), 0, A_NULL);
   class_addmethod(avg_class, nullfn, gensym("signal"), 0);
-  class_addmethod(avg_class, (t_method)avg_dsp, gensym("dsp"), 0);
+  class_addmethod(avg_class, (t_method)avg_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(avg_class, (t_method)avg_help, gensym("help"), 0);
   zexy_register("avg~");
diff --git a/src/blockmirror~.c b/src/blockmirror~.c
index c62c436..9e9d9a3 100644
--- a/src/blockmirror~.c
+++ b/src/blockmirror~.c
@@ -26,7 +26,7 @@
    {x[0], x[1], ... x[n-1]} --> {x[n-1], x[n-2], ... x[0]}
 */
 
-static t_class *blockmirror_class;
+static t_class *blockmirror_class=NULL;
 
 typedef struct _blockmirror {
   t_object x_obj;
@@ -112,7 +112,7 @@ void blockmirror_tilde_setup(void)
                                 sizeof(t_blockmirror), 0, A_NULL);
   class_addmethod(blockmirror_class, nullfn, gensym("signal"), 0);
   class_addmethod(blockmirror_class, (t_method)blockmirror_dsp,
-                  gensym("dsp"), 0);
+                  gensym("dsp"), A_CANT, 0);
 
   class_addfloat(blockmirror_class, blockmirror_float);
 
diff --git a/src/blockshuffle~.c b/src/blockshuffle~.c
index 36dbff7..4deb852 100644
--- a/src/blockshuffle~.c
+++ b/src/blockshuffle~.c
@@ -26,7 +26,7 @@
    {x[0], x[1], ... x[n-1]} --> {x[n-1], x[n-2], ... x[0]}
 */
 
-static t_class *blockshuffle_class;
+static t_class *blockshuffle_class=NULL;
 
 typedef struct _blockshuffle {
   t_object x_obj;
@@ -91,11 +91,11 @@ static t_int *blockshuffle_perform(t_int *w)
   t_sample *in = (t_sample *)(w[2]);
   t_sample *out = (t_sample *)(w[3]);
   int n = (int)(w[4]);
-  int i=0;
   t_sample *temp=x->blockbuf;
   t_int    *idx =x->indices;
 
   if(idx) {
+    int i=0;
     for(i=0; i<n; i++) {
       temp[i]=in[idx[i]];
     }
@@ -159,7 +159,7 @@ void blockshuffle_tilde_setup(void)
                                  sizeof(t_blockshuffle), 0, A_NULL);
   class_addmethod(blockshuffle_class, nullfn, gensym("signal"), 0);
   class_addmethod(blockshuffle_class, (t_method)blockshuffle_dsp,
-                  gensym("dsp"), 0);
+                  gensym("dsp"), A_CANT, 0);
 
   class_addlist(blockshuffle_class, blockshuffle_list);
 
diff --git a/src/blockswap~.c b/src/blockswap~.c
index 9363858..ded8576 100644
--- a/src/blockswap~.c
+++ b/src/blockswap~.c
@@ -25,7 +25,7 @@
    {x[0], x[1], ... x[n-1]} --> {x[n-1], x[n-2], ... x[0]}
 */
 
-static t_class *blockswap_class;
+static t_class *blockswap_class=NULL;
 
 typedef struct _blockswap {
   t_object x_obj;
@@ -111,7 +111,7 @@ void blockswap_tilde_setup(void)
                               sizeof(t_blockswap), 0, A_NULL);
   class_addmethod(blockswap_class, nullfn, gensym("signal"), 0);
   class_addmethod(blockswap_class, (t_method)blockswap_dsp, gensym("dsp"),
-                  0);
+                  A_CANT, 0);
 
   class_addfloat(blockswap_class, blockswap_float);
 
diff --git a/src/date.c b/src/date.c
index a749d57..377fdde 100644
--- a/src/date.c
+++ b/src/date.c
@@ -61,7 +61,7 @@
 
 /* ----------------------- date --------------------- */
 
-static t_class *date_class;
+static t_class *date_class=NULL;
 
 typedef struct _date {
   t_object x_obj;
@@ -79,10 +79,10 @@ typedef struct _date {
 static void *date_new(t_symbol* UNUSED(s), int argc, t_atom *argv)
 {
   t_date *x = (t_date *)pd_new(date_class);
-  char buf[5];
 
   x->GMT=0;
   if (argc) {
+    char buf[5];
     atom_string(argv, buf, 5);
     if (buf[0]=='G' && buf[1]=='M' && buf[2]=='T') {
       x->GMT = 1;
diff --git a/src/demultiplex.c b/src/demultiplex.c
index ea6cd4a..598ce50 100644
--- a/src/demultiplex.c
+++ b/src/demultiplex.c
@@ -26,7 +26,7 @@
   a demultiplexer
 */
 
-static t_class *demux_class;
+static t_class *demux_class=NULL;
 
 typedef struct _demux {
   t_object x_obj;
@@ -34,17 +34,19 @@ typedef struct _demux {
   int n_out;
   t_outlet **out, *selected;
 
-
+  t_float findex;
 } t_demux;
 
-static void demux_select(t_demux *x, t_float f)
+static void demux_select(t_demux *x)
 {
+  t_float f = x->findex;
   int n = ( (f<0) || (f>x->n_out) ) ? 0 : f;
   x->selected = x->out[n];
 }
 
 static void demux_list(t_demux *x, t_symbol *s, int argc, t_atom *argv)
 {
+  demux_select(x);
   switch (argc) {
   case 0:
     outlet_bang(x->selected);
@@ -70,6 +72,7 @@ static void demux_list(t_demux *x, t_symbol *s, int argc, t_atom *argv)
 }
 static void demux_any(t_demux *x, t_symbol *s, int argc, t_atom *argv)
 {
+  demux_select(x);
   outlet_anything(x->selected, s, argc, argv);
 }
 
@@ -80,7 +83,8 @@ static void *demux_new(t_symbol* UNUSED(s), int argc, t_atom* UNUSED(argv))
 
   x->n_out = n - 1;
 
-  inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("select"));
+  x->findex = 0;
+  floatinlet_new(&x->x_obj, &x->findex);
   x->out = (t_outlet **)getbytes(n * sizeof(t_outlet *));
 
   for (n=0; n<=x->n_out; n++) {
@@ -91,23 +95,25 @@ static void *demux_new(t_symbol* UNUSED(s), int argc, t_atom* UNUSED(argv))
 
   return (x);
 }
-
-void demultiplex_setup(void)
+static t_class* zclass_setup(const char*name)
+{
+  t_class*c = class_new(gensym(name), (t_newmethod)demux_new,
+                          0, sizeof(t_demux), 0, A_GIMME, 0);
+  class_addanything (c, demux_any);
+  class_addlist     (c, demux_list);
+  return c;
+}
+static void dosetup()
 {
-  demux_class = class_new(gensym("demultiplex"), (t_newmethod)demux_new,
-                          0, sizeof(t_demux), 0, A_GIMME,  0);
-  class_addcreator((t_newmethod)demux_new, gensym("demux"), A_GIMME, 0);
-
-  class_addanything (demux_class, demux_any);
-  class_addlist     (demux_class, demux_list);
-
-  class_addmethod   (demux_class, (t_method)demux_select, gensym("select"),
-                     A_DEFFLOAT, 0);
-
   zexy_register("demultiplex");
+  demux_class=zclass_setup("demultiplex");
+  zclass_setup("demux");
+}
+void demultiplex_setup(void)
+{
+  dosetup();
 }
 void demux_setup(void)
 {
-  demultiplex_setup();
+  dosetup();
 }
-
diff --git a/src/demultiplex~.c b/src/demultiplex~.c
index fbc58e2..9c574ef 100644
--- a/src/demultiplex~.c
+++ b/src/demultiplex~.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *demux_class;
+static t_class *demux_tilde_class=NULL;
 
 typedef struct _demux {
   t_object x_obj;
@@ -92,7 +92,7 @@ static void demux_free(t_demux *x)
 
 static void *demux_new(t_symbol* UNUSED(s), int argc, t_atom* UNUSED(argv))
 {
-  t_demux *x = (t_demux *)pd_new(demux_class);
+  t_demux *x = (t_demux *)pd_new(demux_tilde_class);
   int i;
 
   if (!argc) {
@@ -113,25 +113,28 @@ static void *demux_new(t_symbol* UNUSED(s), int argc, t_atom* UNUSED(argv))
 
   return (x);
 }
-
-void demultiplex_tilde_setup(void)
+static t_class* zclass_setup(const char*name)
+{
+  t_class *c = class_new(gensym(name), (t_newmethod)demux_new,
+                         (t_method)demux_free, sizeof(t_demux), 0, A_GIMME, 0);
+  class_addfloat(c, demux_output);
+  class_addmethod(c, (t_method)demux_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(c, nullfn, gensym("signal"), 0);
+
+  class_addmethod(c, (t_method)demux_helper, gensym("help"), 0);
+  return c;
+}
+static void dosetup()
 {
-  demux_class = class_new(gensym("demultiplex~"), (t_newmethod)demux_new,
-                          (t_method)demux_free, sizeof(t_demux), 0, A_GIMME, 0);
-  class_addcreator((t_newmethod)demux_new, gensym("demux~"), A_GIMME, 0);
-
-  class_addfloat(demux_class, demux_output);
-  class_addmethod(demux_class, (t_method)demux_dsp, gensym("dsp"), 0);
-  class_addmethod(demux_class, nullfn, gensym("signal"), 0);
-
-  class_addmethod(demux_class, (t_method)demux_helper, gensym("help"), 0);
-
   zexy_register("demultiplex~");
+  demux_tilde_class=zclass_setup("demultiplex~");
+  zclass_setup("demux~");
+}
+void demultiplex_tilde_setup(void)
+{
+  dosetup();
 }
 void demux_tilde_setup(void)
 {
-  demultiplex_tilde_setup();
+  dosetup();
 }
-
-
-
diff --git a/src/dfreq~.c b/src/dfreq~.c
index ee2adf8..15b0f33 100644
--- a/src/dfreq~.c
+++ b/src/dfreq~.c
@@ -26,7 +26,7 @@
 
 /* datendefinition */
 
-static t_class *dfreq_class;
+static t_class *dfreq_class=NULL;
 
 typedef struct _dfreq {
   t_object x_obj;
@@ -110,7 +110,8 @@ void dfreq_tilde_setup(void)
   dfreq_class = class_new(gensym("dfreq~"), (t_newmethod)dfreq_new, 0,
                           sizeof(t_dfreq), 0, A_NULL);
   class_addmethod(dfreq_class, nullfn, gensym("signal"), 0);
-  class_addmethod(dfreq_class, (t_method)dfreq_dsp, gensym("dsp"), 0);
+  class_addmethod(dfreq_class, (t_method)dfreq_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(dfreq_class, (t_method)dfreq_tilde_helper, gensym("help"),
                   0);
diff --git a/src/dirac~.c b/src/dirac~.c
index c00ab9d..5e4361e 100644
--- a/src/dirac~.c
+++ b/src/dirac~.c
@@ -37,7 +37,7 @@
 /* ------------------------ dirac~ ----------------------------- */
 
 
-static t_class *dirac_class;
+static t_class *dirac_class=NULL;
 
 typedef struct _dirac {
   t_object x_obj;
@@ -151,7 +151,8 @@ void dirac_tilde_setup(void)
                           sizeof(t_dirac), 0, A_DEFFLOAT, 0);
   class_addfloat(dirac_class, dirac_float);
   class_addbang(dirac_class, dirac_bang);
-  class_addmethod(dirac_class, (t_method)dirac_dsp, gensym("dsp"), 0);
+  class_addmethod(dirac_class, (t_method)dirac_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(dirac_class, (t_method)dirac_helper, gensym("help"), 0);
   zexy_register("dirac~");
diff --git a/src/doublepole~.c b/src/doublepole~.c
index a06e861..6666135 100644
--- a/src/doublepole~.c
+++ b/src/doublepole~.c
@@ -116,7 +116,7 @@ void doublepole_tilde_setup(void)
                                   0, sizeof(t_sigdoublepole), 0, A_GIMME, 0);
   CLASS_MAINSIGNALIN(sigdoublepole_class, t_sigdoublepole, x_f);
   class_addmethod(sigdoublepole_class, (t_method)sigdoublepole_dsp,
-                  gensym("dsp"), 0);
+                  gensym("dsp"), A_CANT, 0);
   class_addlist(sigdoublepole_class, sigdoublepole_list);
   class_addmethod(sigdoublepole_class, (t_method)sigdoublepole_set,
                   gensym("set"),
diff --git a/src/drip.c b/src/drip.c
index 59e504c..b173451 100644
--- a/src/drip.c
+++ b/src/drip.c
@@ -28,7 +28,7 @@ you can adjust the drop-speed in [ms]
 
 #include "zexy.h"
 
-static t_class *drip_class;
+static t_class *drip_class=NULL;
 
 typedef struct _drip {
   t_object x_obj;
@@ -200,10 +200,8 @@ static void *drip_new(t_symbol* UNUSED(s), int argc, t_atom *argv)
 void drip_setup(void)
 {
   drip_class = class_new(gensym("drip"), (t_newmethod)drip_new,
-                         (t_method)drip_free, sizeof(t_drip), 0 ,A_GIMME, 0);
-
-  class_addcreator((t_newmethod)drip_new, gensym("unfold"), A_GIMME, 0);
-  /* for historical reasons */
+                         (t_method)drip_free,
+                         sizeof(t_drip), 0, A_GIMME, 0);
 
   class_addbang    (drip_class, drip_bang);
   class_addlist    (drip_class, drip_list);
diff --git a/src/envrms~.c b/src/envrms~.c
index 1c1db80..5fe1510 100644
--- a/src/envrms~.c
+++ b/src/envrms~.c
@@ -26,7 +26,7 @@
 #define MAXOVERLAP 10
 #define MAXVSTAKEN 64
 
-t_class *sigenvrms_class;
+t_class *sigenvrms_class=NULL;
 
 typedef struct sigenvrms {
   t_object x_obj; 	    	    /* header */
@@ -156,7 +156,7 @@ void envrms_tilde_setup(void)
                               (t_method)sigenvrms_ff, sizeof(t_sigenvrms), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
   class_addmethod(sigenvrms_class, nullfn, gensym("signal"), 0);
   class_addmethod(sigenvrms_class, (t_method)sigenvrms_dsp, gensym("dsp"),
-                  0);
+                  A_CANT, 0);
 
   class_addmethod(sigenvrms_class, (t_method)sigenvrms_help, gensym("help"),
                   0);
diff --git a/src/fifop.c b/src/fifop.c
index 36b9b76..87d0506 100644
--- a/src/fifop.c
+++ b/src/fifop.c
@@ -31,7 +31,7 @@
  * high priority means low numeric value
  */
 
-static t_class *fifop_class;
+static t_class *fifop_class=NULL;
 
 typedef struct _fifop_list {
   int                 argc;
@@ -103,7 +103,6 @@ static t_fifop_prioritylist*fifop_genprioritylist(t_fifop*x,
 
 static int add2fifo(t_fifop_prioritylist*fifoprio, int argc, t_atom *argv)
 {
-  t_fifop_list*fifo=0;
   t_fifop_list*entry=0;
 
   if(fifoprio==0) {
@@ -127,7 +126,7 @@ static int add2fifo(t_fifop_prioritylist*fifoprio, int argc, t_atom *argv)
   /* insert entry into fifo */
   if(fifoprio->fifo_end) {
     /* append to the end of the fifo */
-    fifo=fifoprio->fifo_end;
+    t_fifop_list*fifo=fifoprio->fifo_end;
 
     /* add new entry to end of fifo */
     fifo->next=entry;
diff --git a/src/freadln.c b/src/freadln.c
index af91114..819d692 100644
--- a/src/freadln.c
+++ b/src/freadln.c
@@ -42,7 +42,7 @@
  * into the RAM of your system
  */
 
-static t_class *freadln_class;
+static t_class *freadln_class=NULL;
 
 typedef struct freadln {
   t_object x_ob;
@@ -154,8 +154,8 @@ static int enlarge_cstr_if_required(const char **c_str, int *len,
 
 static int cstr_char_pos(const char *c_str, const char c)
 {
-  int cnt=1;
   if (c_str) {
+    int cnt=1;
     do {
       if (*c_str==c) {
         return cnt;
@@ -179,7 +179,6 @@ static void freadln_readline (t_freadln *x)
   t_binbuf *bbuf;
   t_atom *abuf;
   int abuf_length;
-  int rewind_after;
 
   if (!x->x_file) {
     pd_error(x, "no file opened for reading");
@@ -212,7 +211,7 @@ static void freadln_readline (t_freadln *x)
            !(items_read < x->x_textbuf_length));
 
   if (linebreak_pos-1  < items_read - strlen(x->linebreak_chr)) {
-    rewind_after=items_read-linebreak_pos;
+    int rewind_after=items_read-linebreak_pos;
     fseek(x->x_file,-(long)(rewind_after),SEEK_CUR);
   }
   if (linebreak_pos==-1) {
diff --git a/src/fwriteln.c b/src/fwriteln.c
index e630929..6678e68 100644
--- a/src/fwriteln.c
+++ b/src/fwriteln.c
@@ -38,7 +38,7 @@
  * iemmatrix
  */
 
-static t_class *fwriteln_class;
+static t_class *fwriteln_class=NULL;
 
 typedef struct fwriteln {
   t_object x_ob;
@@ -107,9 +107,9 @@ static void fwriteln_open (t_fwriteln *x, t_symbol *s, t_symbol*type)
 static void fwriteln_write (t_fwriteln *x, t_symbol *s, int argc,
                             t_atom *argv)
 {
-  int length=0;
   char *text=x->x_textbuf;
   if (x->x_file) {
+    int length=0;
     if ((s!=gensym("list"))||(argv->a_type==A_SYMBOL)) {
       snprintf(text,MAXPDSTRING,"%s ", s->s_name);
       text[MAXPDSTRING-1]=0;
diff --git a/src/glue.c b/src/glue.c
index e3a2ee7..fcc8858 100644
--- a/src/glue.c
+++ b/src/glue.c
@@ -20,7 +20,7 @@
 #include "zexy.h"
 #include <string.h>
 
-static t_class *glue_class;
+static t_class *glue_class=NULL;
 
 typedef struct _zglue {
   t_object x_obj;
diff --git a/src/index.c b/src/index.c
index 9848945..56a6b7e 100644
--- a/src/index.c
+++ b/src/index.c
@@ -42,7 +42,7 @@
 
 /* ----------------------- index --------------------- */
 
-static t_class *index_class;
+static t_class *index_class=NULL;
 
 typedef struct _index {
   t_object x_obj;
@@ -143,9 +143,9 @@ static void index_add(t_index *x, t_symbol *s, t_float f)
                            || newentry>=x->maxentries)) {
       /* do some resizing */
       int maxentries=(newentry>x->maxentries)?newentry:(x->maxentries*2);
-      int i;
       t_symbol**buf=(t_symbol **)getbytes(sizeof(t_symbol *) * maxentries);
       if(buf!=0) {
+        int i;
         memcpy(buf, x->names, sizeof(t_symbol *) * x->maxentries);
         for(i=x->maxentries; i<maxentries; i++) {
           buf[i]=0;
diff --git a/src/length.c b/src/length.c
index 3a745d5..da57e0f 100644
--- a/src/length.c
+++ b/src/length.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *length_class;
+static t_class *length_class=NULL;
 typedef struct _length {
   t_object x_obj;
 } t_length;
@@ -45,7 +45,7 @@ static void *length_new(void)
 void length_setup(void)
 {
   length_class = class_new(gensym("length"), (t_newmethod)length_new, 0,
-                           sizeof(t_length), 0, A_DEFFLOAT, 0);
+                           sizeof(t_length), 0, A_NULL);
 
   class_addlist(length_class, (t_method)length_list);
   class_addanything(length_class, (t_method)length_any);
diff --git a/src/lifop.c b/src/lifop.c
index 8dd0963..6ffde5a 100644
--- a/src/lifop.c
+++ b/src/lifop.c
@@ -32,7 +32,7 @@
  * high priority means low numeric value
  */
 
-static t_class *lifop_class;
+static t_class *lifop_class=NULL;
 
 typedef struct _lifop_list {
   int                 argc;
diff --git a/src/limiter~.c b/src/limiter~.c
index b6c8523..f713d8b 100644
--- a/src/limiter~.c
+++ b/src/limiter~.c
@@ -89,7 +89,7 @@ static void init_sinc(void)
 /* ------------------------------------------------------------------------------------ */
 /* first define the structs... */
 
-static t_class *limiter_class;
+static t_class *limiter_class=NULL;
 
 typedef struct _limctl {
   /* variables changed by user */
@@ -774,7 +774,8 @@ void limiter_tilde_setup(void)
                             sizeof(t_limiter), 0, A_GIMME, 0);
 
   class_addmethod(limiter_class, nullfn,					gensym("signal"), 0);
-  class_addmethod(limiter_class, (t_method)limiter_dsp,	gensym("dsp"), 0);
+  class_addmethod(limiter_class, (t_method)limiter_dsp,	gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(limiter_class, (t_method)limiter_tilde_helper,
                   gensym("help"), 0);
diff --git a/src/list2int.c b/src/list2int.c
index 82e2df7..da0a707 100644
--- a/src/list2int.c
+++ b/src/list2int.c
@@ -20,7 +20,7 @@
 #include "zexy.h"
 #include <string.h>
 
-static t_class *list2int_class;
+static t_class *list2int_class=NULL;
 
 static void list2int_any(t_mypdlist *x, t_symbol *s, int argc,
                          t_atom *argv)
@@ -75,22 +75,30 @@ static void mypdlist_free(t_mypdlist *x)
 {
   freebytes(x->x_list, x->x_n * sizeof(t_atom));
 }
-
-void list2int_setup(void)
+static t_class* zclass_setup(const char*name)
+{
+  t_class *c = class_new(gensym(name),
+                         (t_newmethod)list2int_new, (t_method)mypdlist_free,
+                         sizeof(t_mypdlist), 0, A_GIMME, 0);
+  class_addanything(c, list2int_any);
+  class_addlist(c, list2int_any);
+  class_addbang(c, list2int_bang);
+  class_addfloat(c, list2int_float);
+  class_addsymbol(c, list2int_symbol);
+  class_addpointer(c, list2int_pointer);
+  return c;
+}
+static void dosetup()
 {
-  list2int_class = class_new(gensym("list2int"), (t_newmethod)list2int_new,
-                             (t_method)mypdlist_free, sizeof(t_mypdlist), 0, A_GIMME, 0);
-  class_addcreator((t_newmethod)list2int_new, gensym("l2i"), A_GIMME, 0);
-  class_addanything(list2int_class, list2int_any);
-  class_addlist(list2int_class, list2int_any);
-  class_addbang(list2int_class, list2int_bang);
-  class_addfloat(list2int_class, list2int_float);
-  class_addsymbol(list2int_class, list2int_symbol);
-  class_addpointer(list2int_class, list2int_pointer);
   zexy_register("list2int");
+  list2int_class=zclass_setup("list2int");
+  zclass_setup("l2i");
+}
+void list2int_setup(void)
+{
+  dosetup();
 }
-
 void l2i_setup(void)
 {
-  list2int_setup();
+  dosetup();
 }
diff --git a/src/list2lists.c b/src/list2lists.c
index f027983..0bbcbea 100644
--- a/src/list2lists.c
+++ b/src/list2lists.c
@@ -29,7 +29,7 @@
 # define DEBUGFUN(x)
 #endif
 
-static t_class *list2lists_class;
+static t_class *list2lists_class=NULL;
 
 typedef struct _list2lists {
   t_object       x_obj;
diff --git a/src/list2symbol.c b/src/list2symbol.c
index 03d0ac2..37ff4c9 100644
--- a/src/list2symbol.c
+++ b/src/list2symbol.c
@@ -23,7 +23,7 @@
 
 /* ------------------------- list2symbol ------------------------------- */
 
-static t_class *list2symbol_class;
+static t_class *list2symbol_class=NULL;
 
 typedef struct _list2symbol {
   t_object x_obj;
@@ -34,11 +34,6 @@ typedef struct _list2symbol {
   t_outlet*x_outlet;
 } t_list2symbol;
 
-static void list2symbol_connector(t_list2symbol *x, t_symbol *s)
-{
-  x->connector = s;
-}
-
 static void list2symbol_bang(t_list2symbol *x)
 {
   t_atom *argv=x->ap;
@@ -150,18 +145,10 @@ static void *list2symbol_new(t_symbol *s, int argc, t_atom *argv)
   t_list2symbol *x = (t_list2symbol *)pd_new(list2symbol_class);
 
   x->x_outlet=outlet_new(&x->x_obj, 0);
-  x->x_inlet2=inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("symbol"),
-                        gensym(""));
-
-#if 0
-  /* old behaviour: the argument list is used as the list-to-be-converted */
-  x->connector = gensym(" ");
-  list2symbol_anything(x, 0, argc, argv);
-#else
-  /* new behaviour: set the delimiter with the argument */
-  list2symbol_connector(x, (argc)?atom_getsymbol(argv):gensym(" "));
-#endif
+  x->x_inlet2=symbolinlet_new(&x->x_obj, &x->connector);
 
+  /* set the delimiter with the argument */
+  x->connector = (argc)?atom_getsymbol(argv):gensym(" ");
 
   return (x);
 }
@@ -176,24 +163,28 @@ static void list2symbol_free(t_list2symbol *x)
   inlet_free(x->x_inlet2);
 }
 
-
-void list2symbol_setup(void)
+static t_class* zclass_setup(const char*name)
 {
-  list2symbol_class = class_new(gensym("list2symbol"),
+  t_class*c = class_new(gensym(name),
                                 (t_newmethod)list2symbol_new,
                                 (t_method)list2symbol_free, sizeof(t_list2symbol), 0,
                                 A_GIMME, 0);
-
-  class_addcreator((t_newmethod)list2symbol_new, gensym("l2s"), A_GIMME, 0);
-  class_addbang    (list2symbol_class, list2symbol_bang);
-  class_addlist    (list2symbol_class, list2symbol_list);
-  class_addanything(list2symbol_class, list2symbol_anything);
-  class_addmethod  (list2symbol_class, (t_method)list2symbol_connector,
-                    gensym(""), A_SYMBOL, 0);
-
+  class_addbang    (c, list2symbol_bang);
+  class_addlist    (c, list2symbol_list);
+  class_addanything(c, list2symbol_anything);
+  return c;
+}
+static void dosetup()
+{
   zexy_register("list2symbol");
+  list2symbol_class=zclass_setup("list2symbol");
+  zclass_setup("l2s");
+}
+void list2symbol_setup(void)
+{
+  dosetup();
 }
 void l2s_setup(void)
 {
-  list2symbol_setup();
+  dosetup();
 }
diff --git a/src/lister.c b/src/lister.c
index 4b7084b..a313bb8 100644
--- a/src/lister.c
+++ b/src/lister.c
@@ -26,7 +26,7 @@
 #define LIST_NGETBYTE 100 /* bigger that this we use alloc, not alloca */
 
 
-static t_class *mypdlist_class;
+static t_class *lister_class = NULL;
 
 #ifdef HAVE_ALLOCA_H
 # define ATOMS_ALLOCA(x, n) ((x) = (t_atom *)((n) < LIST_NGETBYTE ?  \
@@ -89,7 +89,7 @@ static void mypdlist_free(t_mypdlist *x)
 
 static void *mypdlist_new(t_symbol *s, int argc, t_atom *argv)
 {
-  t_mypdlist *x = (t_mypdlist *)pd_new(mypdlist_class);
+  t_mypdlist *x = (t_mypdlist *)pd_new(lister_class);
 
   outlet_new(&x->x_obj, 0);
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("list"), gensym("lst2"));
@@ -110,24 +110,28 @@ static void mypdlist_help(t_mypdlist*x)
   post("\n"HEARTSYMBOL " lister\t\t:: basic list storage (use pd>=0.39 for real [list] objects)");
 }
 
-void lister_setup(void)
-{
-  mypdlist_class = class_new(gensym("lister"), (t_newmethod)mypdlist_new,
-                             (t_method)mypdlist_free, sizeof(t_mypdlist), 0, A_GIMME, 0);
-  /* i don't know how to get this work with name=="list" !!! */
-
-  class_addcreator((t_newmethod)mypdlist_new, gensym("l"), A_GIMME, 0);
-
-  class_addbang    (mypdlist_class, mypdlist_bang);
-  class_addlist    (mypdlist_class, mypdlist_list);
-  class_addmethod  (mypdlist_class, (t_method)mypdlist_secondlist,
+static t_class* zclass_setup(const char*name) {
+  t_class *c = class_new(gensym(name), (t_newmethod)mypdlist_new,
+                         (t_method)mypdlist_free, sizeof(t_mypdlist), 0, A_GIMME, 0);
+  class_addbang    (c, mypdlist_bang);
+  class_addlist    (c, mypdlist_list);
+  class_addmethod  (c, (t_method)mypdlist_secondlist,
                     gensym("lst2"), A_GIMME, 0);
-
-  class_addmethod(mypdlist_class, (t_method)mypdlist_help, gensym("help"),
+  class_addmethod(c, (t_method)mypdlist_help, gensym("help"),
                   A_NULL);
+  return c;
+}
+static void dosetup()
+{
   zexy_register("lister");
+  lister_class = zclass_setup("lister");
+  zclass_setup("l");
+}
+void lister_setup(void)
+{
+  dosetup();
 }
 void l_setup(void)
 {
-  lister_setup();
+  dosetup();
 }
diff --git a/src/listfind.c b/src/listfind.c
index fe0df1d..ab30b2f 100644
--- a/src/listfind.c
+++ b/src/listfind.c
@@ -29,7 +29,7 @@
 # define DEBUGFUN(x)
 #endif
 
-static t_class *listfind_class;
+static t_class *listfind_class=NULL;
 
 
 typedef struct _listfind {
diff --git a/src/liststorage.c b/src/liststorage.c
index 7139cee..c67abf1 100644
--- a/src/liststorage.c
+++ b/src/liststorage.c
@@ -62,7 +62,7 @@ typedef struct _liststorage {
   t_msglist**x_slots;
 } t_liststorage;
 
-static t_class *liststorage_class;
+static t_class *liststorage_class=NULL;
 
 
 /* ************************************************************************ */
@@ -237,13 +237,11 @@ static void liststorage_bang(t_liststorage *x)
 static void liststorage_add(t_liststorage *x, t_symbol *s, int ac,
                             t_atom *av)
 {
-  t_msglist*list=NULL;
   int slot=_liststorage_checkslot(x,
                                   "attempting to add data to invalid slot", 1);
   if(slot<0) {
     return;
   }
-  list=_liststorage_getslot(x, slot);
   x->x_slots[slot]=_liststorage_add2slot(x->x_slots[slot], ac, av);
 }
 
@@ -271,7 +269,7 @@ static void liststorage_clearall(t_liststorage *x)
 static void liststorage_insert(t_liststorage *x, t_floatarg f)
 {
   int current=x->x_currentslot;
-  int slot=-1;
+  int slot;
   int i=0;
 
   x->x_currentslot=f;
diff --git a/src/longload.c b/src/longload.c
index 0e914e7..ead04f1 100644
--- a/src/longload.c
+++ b/src/longload.c
@@ -28,7 +28,7 @@
 #endif
 
 
-static t_class *longload_class;
+static t_class *longload_class=NULL;
 
 typedef struct _longload {
   t_object x_obj;
diff --git a/src/lpt.c b/src/lpt.c
index ae87cfb..d0939ac 100644
--- a/src/lpt.c
+++ b/src/lpt.c
@@ -104,7 +104,7 @@ static int sys_inb(int port)
 
 
 static int count_iopl = 0;
-static t_class *lpt_class;
+static t_class *lpt_class=NULL;
 
 typedef struct _lpt {
   t_object x_obj;
@@ -165,7 +165,8 @@ static void lpt_bang(t_lpt *x)
 static void *lpt_new(t_symbol *s, int argc, t_atom *argv)
 {
   t_lpt *x = (t_lpt *)pd_new(lpt_class);
-  char*devname=atom_getsymbol(argv)->s_name;
+  char*devname=0;
+
   if(s==gensym("lp")) {
     error("lpt: the use of 'lp' has been deprecated; use 'lpt' instead");
   }
@@ -183,12 +184,15 @@ static void *lpt_new(t_symbol *s, int argc, t_atom *argv)
     switch ((int)((argc)?atom_getfloat(argv):0)) {
     case 0:
       x->port = BASE0;
+      devname="lpt0";
       break;
     case 1:
       x->port = BASE1;
+      devname="lpt1";
       break;
     case 2:
       x->port = BASE2;
+      devname="lpt2";
       break;
     default:
       error("lpt : only lpt0, lpt1 and lpt2 are accessible");
@@ -196,10 +200,8 @@ static void *lpt_new(t_symbol *s, int argc, t_atom *argv)
       return (x);
     }
   } else {
-    /* SYMBOL might be a file or a hex port-number;
-       we ignore the file (device) case by now;
-       LATER think about this
-    */
+    /* SYMBOL might be a file or a hex port-number */
+    devname=atom_getsymbol(argv)->s_name;
     x->device=-1;
     x->port=strtol(devname, 0, 16);
     if(0==x->port) {
@@ -308,7 +310,7 @@ void lpt_setup(void)
   lpt_class = class_new(gensym("lpt"),
                         (t_newmethod)lpt_new, (t_method)lpt_free,
                         sizeof(t_lpt), 0, A_GIMME, 0);
-  class_addcreator((t_newmethod)lpt_new, gensym("lp"), A_GIMME, 0);
+  //class_addcreator((t_newmethod)lpt_new, gensym("lp"), A_GIMME, 0);
 
   class_addfloat(lpt_class, (t_method)lpt_float);
   class_addmethod(lpt_class, (t_method)lpt_control, gensym("control"),
diff --git a/src/makesource.sh b/src/makesource.sh
index f4e4629..327435f 100755
--- a/src/makesource.sh
+++ b/src/makesource.sh
@@ -3,11 +3,6 @@
 ZEXY_H=z_zexy.h
 ZEXY_C=z_zexy.c
 
-
-GREP=grep
-AWK=awk
-SED=sed
-
 #################################
 ## functions
 
diff --git a/src/makesymbol.c b/src/makesymbol.c
index b92eb53..80d3bef 100644
--- a/src/makesymbol.c
+++ b/src/makesymbol.c
@@ -47,7 +47,7 @@
 
 /* ----------------------- makesymbol --------------------- */
 
-static t_class *makesymbol_class;
+static t_class *makesymbol_class=NULL;
 
 typedef struct _makesymbol {
   t_object x_obj;
diff --git a/src/matchbox.c b/src/matchbox.c
index 07899d9..3f04efc 100644
--- a/src/matchbox.c
+++ b/src/matchbox.c
@@ -47,7 +47,7 @@
 
 /* match the atoms of 2 lists */
 
-static t_class *matchbox_class;
+static t_class *matchbox_class=NULL;
 
 
 typedef struct _listlist {
diff --git a/src/mavg.c b/src/mavg.c
index 943dbb6..ba16881 100644
--- a/src/mavg.c
+++ b/src/mavg.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *mavg_class;
+static t_class *mavg_class=NULL;
 
 typedef struct _mavg {
   t_object x_obj;
@@ -32,21 +32,24 @@ typedef struct _mavg {
 
 static void mavg_resize(t_mavg *x, t_float f)
 {
-  int i;
+  int i = (int)f;
   t_float *dumbuf;
 
-  f = (int)f;
-  if ((f<1) || (f == x->size)) {
+  if ((i<1) || (i == x->size)) {
     return;
   }
 
-  freebytes(x->buf, sizeof(t_float)*x->size);
-  x->n_inv = 1.0/f;
-  x->size = f;
-  x->buf = getbytes(sizeof(t_float)*x->size);
+  dumbuf = getbytes(sizeof(t_float)*i);
+  if(!dumbuf) {
+    pd_error(x, "unable to allocate memory for %d elements", i);
+    return;
+  }
+  if(x->buf)
+    freebytes(x->buf, sizeof(t_float)*x->size);
+  x->buf = x->wp = dumbuf;
+  x->size = i;
+  x->n_inv = 1.0/(t_float)i;
 
-  dumbuf = x->wp = x->buf;
-  i = x->size;
   while(i--) {
     *dumbuf++ = x->avg;
   }
@@ -58,6 +61,8 @@ static void mavg_set(t_mavg *x, t_symbol* UNUSED(s), int argc,
   int i = x->size;
   t_float *dummy = x->buf;
   t_float f=(argc)?atom_getfloat(argv):x->avg;
+  if(!x->buf)
+    return;
 
   while (i--) {
     *dummy++=f;
@@ -71,6 +76,8 @@ static void mavg_float(t_mavg *x, t_float f)
   int i = x->size;
   t_float dummy = 0;
   t_float *dumb = x->buf;
+  if(!x->buf)
+    return;
 
   *x->wp++ = f;
   if (x->wp == x->buf + x->size) {
@@ -94,15 +101,12 @@ static void *mavg_new(t_floatarg f)
 
   outlet_new(&x->x_obj, gensym("float"));
   inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym(""));
+  x->size = 0;
+  x->buf = x->wp = NULL;
+  x->n_inv = 0.;
+  x->avg = 0.;
 
-  x->buf = x->wp = (t_float *)getbytes(sizeof(t_float) * i);
-  x->size = i;
-  x->n_inv = 1.0f/(t_float)i;
-
-  dumbuf = x->buf;
-  while (i--) {
-    *dumbuf++=0;
-  }
+  mavg_resize(x, i);
 
   return (x);
 }
diff --git a/src/minmax.c b/src/minmax.c
index 4dfb6f9..e463442 100644
--- a/src/minmax.c
+++ b/src/minmax.c
@@ -20,7 +20,7 @@
 
 #include "zexy.h"
 
-static t_class *minmax_class;
+static t_class *minmax_class=NULL;
 
 typedef struct _minmax {
   t_object x_obj;
@@ -79,7 +79,7 @@ static void minmax_help(void)
 void minmax_setup(void)
 {
   minmax_class = class_new(gensym("minmax"), (t_newmethod)minmax_new, 0,
-                           sizeof(t_minmax), 0, A_DEFFLOAT, 0);
+                           sizeof(t_minmax), 0, A_NULL);
 
   class_addlist(minmax_class, (t_method)minmax_list);
   class_addbang(minmax_class, (t_method)minmax_bang);
diff --git a/src/msgfile.c b/src/msgfile.c
index 9fa3604..1b32877 100644
--- a/src/msgfile.c
+++ b/src/msgfile.c
@@ -81,7 +81,7 @@ typedef struct _msgfile {
 
 } t_msgfile;
 
-static t_class *msgfile_class;
+static t_class *msgfile_class=NULL;
 
 
 
@@ -94,7 +94,23 @@ static void msgfile_end(t_msgfile *x);
 static void msgfile_goto(t_msgfile *x, t_float f);
 
 /* ************************************************************************ */
-/* help functions                                                           */
+/* helper functions                                                           */
+
+static int is_float(t_atom*a)
+{
+  return (a && A_FLOAT == a->a_type);
+}
+
+static int node_count(t_msgfile *x)
+{
+  t_msglist *dummy = x->start;
+  unsigned int counter = 0;
+  while (dummy && dummy->next) {
+    counter++;
+    dummy = dummy->next;
+  }
+  return counter;
+}
 
 static int node_wherearewe(t_msgfile *x)
 {
@@ -271,14 +287,7 @@ static void delete_region(t_msgfile *x, int start, int stop)
   int newwhere, oldwhere = node_wherearewe(x);
 
   /* get the number of lists in the buffer */
-  t_msglist *dummy = x->start;
-  int counter = 0;
-
-  /* go to the end of the buffer */
-  while (dummy && dummy->next) {
-    counter++;
-    dummy = dummy->next;
-  }
+  int counter = node_count(x);
 
   if ((stop > counter) || (stop == -1)) {
     stop = counter;
@@ -427,10 +436,25 @@ static void msgfile_clear(t_msgfile *x)
   }
 }
 
+static int atom2rangeint(t_atom*a, int range) {
+  t_float f = atom_getfloat(a);
+  if (f>range)
+    return range;
+  if (f<-range)
+    return -range;
+  return (unsigned int)f;
+}
 static void msgfile_delete(t_msgfile *x, t_symbol *s, int ac, t_atom *av)
 {
+  int count = node_count(x);
+  int pos = atom2rangeint(av+0, count);
+  if (!is_float(av)) {
+    pd_error(x, "[msgfile] illegal deletion index %s", atom_getsymbol(av)->s_name);
+    return;
+  }
+  if (count<1)
+    return;
   if (ac==1) {
-    int pos = atom_getfloat(av);
     int oldwhere = node_wherearewe(x);
 
     if (pos<0) {
@@ -443,8 +467,12 @@ static void msgfile_delete(t_msgfile *x, t_symbol *s, int ac, t_atom *av)
     delete_currentnode(x);
     msgfile_goto(x, oldwhere);
   } else if (ac==2) {
-    int pos1 = atom_getfloat(av++);
-    int pos2 = atom_getfloat(av);
+    int pos1 = pos;
+    int pos2 = atom2rangeint(av+1, count);
+    if (!is_float(av+1)) {
+      pd_error(x, "[msgfile] illegal deletion range %s", atom_getsymbol(av+1)->s_name);
+      return;
+    }
 
     if ((pos1 < pos2) || (pos2 == -1)) {
       if (pos2+1) {
@@ -663,8 +691,8 @@ static void msgfile_where(t_msgfile *x)
 static void msgfile_sort(t_msgfile *x, t_symbol *s0, t_symbol*s1,
                          t_symbol*r)
 {
-  post("sorting not implemented yet: '%s', '%s' -> '%s'", s0->s_name,
-       s1->s_name, r->s_name);
+  pd_error(x, "sorting not implemented yet: '%s', '%s' -> '%s'", s0->s_name,
+           s1->s_name, r->s_name);
 
 
 #if 0
@@ -820,7 +848,6 @@ static void msgfile_read2(t_msgfile *x, t_symbol *filename,
       pd_error(x, "msgfile: read error (headroom %d too small!)",
                MSGFILE_HEADROOM);
       goto read_error;
-      break;
     }
     if (*bufptr == separator) {
       *cbb = ' ';
diff --git a/src/multiline~.c b/src/multiline~.c
index c2f1707..4e11e24 100644
--- a/src/multiline~.c
+++ b/src/multiline~.c
@@ -38,7 +38,7 @@
 
 /* --------------------------- multiline~ ---------------------------------- */
 
-static t_class *mline_class;
+static t_class *mline_class=NULL;
 
 typedef struct _mline {
   t_object x_obj;
@@ -296,7 +296,8 @@ void multiline_tilde_setup(void)
                           (t_method)mline_free,
                           sizeof(t_mline), 0, A_GIMME, 0);
 
-  class_addmethod(mline_class, (t_method)mline_dsp, gensym("dsp"), 0);
+  class_addmethod(mline_class, (t_method)mline_dsp, gensym("dsp"),
+                  A_CANT, 0);
   class_addmethod(mline_class, nullfn, gensym("signal"), 0);
 
   class_addmethod(mline_class, (t_method)mline_list, gensym(""), A_GIMME, 0);
diff --git a/src/multiplex.c b/src/multiplex.c
index 24faeea..603ccf2 100644
--- a/src/multiplex.c
+++ b/src/multiplex.c
@@ -43,15 +43,15 @@
   a multiplexer
 */
 
-static t_class *mux_class;
-static t_class *muxproxy_class;
+static t_class *mux_class=NULL;
+static t_class *muxproxy_class=NULL;
 
 typedef struct _mux {
   t_object x_obj;
   struct _muxproxy  **x_proxy;
 
   int i_count;
-  int i_selected;
+  float f_selected;
   t_inlet **in;
 } t_mux;
 
@@ -62,16 +62,11 @@ typedef struct _muxproxy {
   int id;
 } t_muxproxy;
 
-static void mux_select(t_mux *x, t_float f)
-{
-  x->i_selected=f;
-}
-
 static void mux_anything(t_muxproxy *y, t_symbol *s, int argc,
                          t_atom *argv)
 {
   t_mux*x=y->p_master;
-  if(y->id==x->i_selected) {
+  if(y->id==(int)x->f_selected) {
     outlet_anything(x->x_obj.ob_outlet, s, argc, argv);
   }
 }
@@ -81,7 +76,7 @@ static void *mux_new(t_symbol *s, int argc, t_atom *argv)
   int n = (argc < 2)?2:argc;
   t_mux *x = (t_mux *)pd_new(mux_class);
 
-  x->i_selected=0;
+  x->f_selected=0;
   x->i_count = n;
   x->in = (t_inlet **)getbytes(x->i_count * sizeof(t_inlet *));
   x->x_proxy = (t_muxproxy**)getbytes(x->i_count * sizeof(t_muxproxy*));
@@ -93,7 +88,7 @@ static void *mux_new(t_symbol *s, int argc, t_atom *argv)
     x->in[n] = inlet_new ((t_object*)x, (t_pd*)x->x_proxy[n], 0,0);
   }
 
-  inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym(""));
+  floatinlet_new(&x->x_obj, &x->f_selected);
 
   outlet_new(&x->x_obj, 0);
   return (x);
@@ -124,27 +119,27 @@ static void mux_free(t_mux*x)
 
   /* pd_free(&y->p_pd); */
 }
-
-void multiplex_setup(void)
+static t_class* zclass_setup(const char*name)
 {
-  mux_class = class_new(gensym("multiplex"), (t_newmethod)mux_new,
-                        (t_method)mux_free, sizeof(t_mux), CLASS_NOINLET, A_GIMME,  0);
-  class_addcreator((t_newmethod)mux_new, gensym("mux"), A_GIMME, 0);
-
-  class_addmethod   (mux_class, (t_method)mux_select, gensym(""), A_DEFFLOAT,
-                     0);
-
+  t_class*c = class_new(gensym(name), (t_newmethod)mux_new,
+                        (t_method)mux_free, sizeof(t_mux), CLASS_NOINLET, A_GIMME, 0);
+  return c;
+}
+static void dosetup()
+{
+  zexy_register("multiplex");
+  mux_class=zclass_setup("multiplex");
+  zclass_setup("mux");
   muxproxy_class = class_new(0, 0, 0,
                              sizeof(t_muxproxy),
                              CLASS_PD | CLASS_NOINLET, 0);
   class_addanything(muxproxy_class, mux_anything);
-
-
-  zexy_register("multiplex");
 }
-
+void multiplex_setup(void)
+{
+  dosetup();
+}
 void mux_setup(void)
 {
-  multiplex_setup();
+  dosetup();
 }
-
diff --git a/src/multiplex~.c b/src/multiplex~.c
index b384492..f1ec114 100644
--- a/src/multiplex~.c
+++ b/src/multiplex~.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *mux_tilde_class;
+static t_class *mux_tilde_class=NULL;
 
 typedef struct _mux {
   t_object x_obj;
@@ -106,25 +106,34 @@ static void *mux_tilde_new(t_symbol* UNUSED(s), int argc,
 
   return (x);
 }
-
-void multiplex_tilde_setup(void)
+static t_class* zclass_setup(const char*name)
 {
-  mux_tilde_class = class_new(gensym("multiplex~"),
-                              (t_newmethod)mux_tilde_new, (t_method)mux_tilde_free, sizeof(t_mux), 0,
-                              A_GIMME, 0);
-  class_addcreator((t_newmethod)mux_tilde_new, gensym("mux~"), A_GIMME, 0);
+  t_class*c =  class_new(gensym(name),
+                         (t_newmethod)mux_tilde_new, (t_method)mux_tilde_free,
+                         sizeof(t_mux), 0, A_GIMME, 0);
+
+  /* ouch, that hurts... */
+  class_addfloat(c, mux_tilde_input);
 
-  class_addfloat(mux_tilde_class, mux_tilde_input);
-  class_addmethod(mux_tilde_class, (t_method)mux_tilde_dsp, gensym("dsp"),
-                  0);
-  class_addmethod(mux_tilde_class, nullfn, gensym("signal"), 0);
+  class_addmethod(c, (t_method)mux_tilde_dsp, gensym("dsp"),
+                  A_CANT, 0);
+  class_addmethod(c, nullfn, gensym("signal"), 0);
 
-  class_addmethod(mux_tilde_class, (t_method)mux_tilde_helper,
+  class_addmethod(c, (t_method)mux_tilde_helper,
                   gensym("help"), 0);
+  return c;
+}
+static void dosetup()
+{
   zexy_register("multiplex~");
+  mux_tilde_class=zclass_setup("multiplex~");
+  zclass_setup("mux~");
+}
+void multiplex_tilde_setup(void)
+{
+  dosetup();
 }
 void mux_tilde_setup(void)
 {
-  multiplex_tilde_setup();
+  dosetup();
 }
-
diff --git a/src/multireceive.c b/src/multireceive.c
index 77c4707..b6bbce3 100644
--- a/src/multireceive.c
+++ b/src/multireceive.c
@@ -21,6 +21,12 @@
 
 #include "zexy.h"
 
+#ifdef _WIN32
+# include <sys/timeb.h>
+#else
+# include <sys/time.h>
+#endif
+
 /* -------------------------- multireceive ------------------------------ */
 
 static t_class *multireceive_class=NULL;
@@ -43,6 +49,26 @@ typedef struct _multireceive {
   t_outlet *x_out;
 } t_multireceive;
 
+
+static unsigned long long unique(void) {
+  unsigned long long uid = 0;
+#ifdef _WIN32
+  struct _timeb tb;
+  _ftime(&tb);
+  uid=(((unsigned long long)tb.time)<<(4*sizeof(uid))) | (unsigned long long)(tb.millitm);
+#else
+  struct timeval tv;
+  struct timezone tz;
+
+  gettimeofday(&tv, 0);
+
+  /* First get the seconds right */
+  uid=((unsigned long)tv.tv_sec)<<(4*sizeof(uid)) | tv.tv_usec;
+#endif
+  return uid;
+}
+
+
 static void multireceive_any(t_multireceive_proxy *x, t_symbol*s, int argc,
                              t_atom*argv)
 {
@@ -133,6 +159,9 @@ static void *multireceive_new(t_symbol *s, int argc, t_atom *argv)
 
 void multireceive_setup(void)
 {
+  char uniqsym[MAXPDSTRING];
+  unsigned long long uid=unique();
+
   multireceive_class = class_new(gensym("multireceive"),
                                  (t_newmethod)multireceive_new,
                                  (t_method)multireceive_free,
@@ -148,9 +177,10 @@ void multireceive_setup(void)
                   (t_method)multireceive_add,
                   gensym("add"),
                   A_SYMBOL, 0);
-
+  snprintf(uniqsym, MAXPDSTRING-2, "multireceive proxy %0llx", uid);
+  uniqsym[MAXPDSTRING-1]=0;
   multireceive_proxy_class = class_new(
-                               gensym("multireceive proxy "__DATE__""__TIME__""),
+                               gensym(uniqsym),
                                0, 0,
                                sizeof(t_multireceive_proxy),
                                CLASS_PD | CLASS_NOINLET, 0);
diff --git a/src/niagara.c b/src/niagara.c
index ccedb42..2e00fe0 100644
--- a/src/niagara.c
+++ b/src/niagara.c
@@ -28,7 +28,7 @@
   nowadays you can do this with [list split] (though this cannot handle negative indices)
 */
 
-static t_class *niagara_class;
+static t_class *niagara_class=NULL;
 
 typedef struct _niagara {
   t_object x_obj;
@@ -61,7 +61,7 @@ static void niagara_any(t_niagara *x, t_symbol *s, int argc, t_atom *argv)
 {
   int n_l, n_r;
   t_atom *ap_l, *ap_r;
-  t_symbol *s_r, *s_l;
+  t_symbol *s_l;
   int dumrock = x->rock;
   int rock = ((dumrock < 0.f)?(argc+dumrock):dumrock-1);
 
@@ -73,7 +73,7 @@ static void niagara_any(t_niagara *x, t_symbol *s, int argc, t_atom *argv)
   ap_r = &argv[n_l];
 
   if (n_r) {
-    s_r = 0;
+    t_symbol *s_r = 0;
     if (ap_r->a_type == A_FLOAT) {
       s_r = gensym("list");
     } else {
@@ -106,7 +106,8 @@ static void *niagara_new(t_floatarg f)
 void niagara_setup(void)
 {
   niagara_class = class_new(gensym("niagara"), (t_newmethod)niagara_new,
-                            0, sizeof(t_niagara), 0, A_DEFFLOAT,  0);
+                            0, sizeof(t_niagara), 0,
+                            A_DEFFLOAT, A_NULL);
 
   class_addlist    (niagara_class, niagara_list);
   class_addanything(niagara_class, niagara_any);
diff --git a/src/noish~.c b/src/noish~.c
index feae156..e55fd30 100644
--- a/src/noish~.c
+++ b/src/noish~.c
@@ -68,7 +68,7 @@ static void set_noisseed(t_nois *x, t_floatarg seed)
 
 /* ------------------------ noish~ ----------------------------- */
 
-static t_class *noish_class;
+static t_class *noish_class=NULL;
 
 static t_int *noish_perform(t_int *w)
 {
@@ -173,10 +173,12 @@ static void *noish_new(t_floatarg f)
 void noish_tilde_setup(void)
 {
   noish_class = class_new(gensym("noish~"), (t_newmethod)noish_new, 0,
-                          sizeof(t_nois), 0, A_DEFFLOAT, 0);
+                          sizeof(t_nois), 0,
+                          A_DEFFLOAT, A_NULL);
 
   class_addfloat(noish_class, set_freq);
-  class_addmethod(noish_class, (t_method)noish_dsp, gensym("dsp"), 0);
+  class_addmethod(noish_class, (t_method)noish_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(noish_class, (t_method)set_noisseed, gensym("seed"),
                   A_FLOAT, 0);
diff --git a/src/noisi~.c b/src/noisi~.c
index 8158c59..f30f7b3 100644
--- a/src/noisi~.c
+++ b/src/noisi~.c
@@ -69,7 +69,7 @@ static void set_noisseed(t_nois *x, t_floatarg seed)
 
 /* ------------------------ noisi~ ----------------------------- */
 
-static t_class *noisi_class;
+static t_class *noisi_class=NULL;
 
 static inline t_sample int2sample(int i)
 {
@@ -177,10 +177,12 @@ static void *noisi_new(t_floatarg f)
 void noisi_tilde_setup(void)
 {
   noisi_class = class_new(gensym("noisi~"), (t_newmethod)noisi_new, 0,
-                          sizeof(t_nois), 0, A_DEFFLOAT, 0);
+                          sizeof(t_nois), 0,
+                          A_DEFFLOAT, A_NULL);
 
   class_addfloat(noisi_class, set_noisfreq);
-  class_addmethod(noisi_class, (t_method)noisi_dsp, gensym("dsp"), 0);
+  class_addmethod(noisi_class, (t_method)noisi_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(noisi_class, (t_method)set_noisseed, gensym("seed"),
                   A_FLOAT, 0);
diff --git a/src/operating_system.c b/src/operating_system.c
index cd25f90..c5265e2 100644
--- a/src/operating_system.c
+++ b/src/operating_system.c
@@ -25,7 +25,7 @@
 MESSAGE OPERATING_SYSTEM: simple and easy
 */
 
-static t_class *operating_system_class;
+static t_class *operating_system_class=NULL;
 
 typedef struct _operating_system {
   t_object x_obj;
@@ -64,7 +64,8 @@ void operating_system_setup(void)
 {
   operating_system_class = class_new(gensym("operating_system"),
                                      (t_newmethod)operating_system_new,
-                                     0, sizeof(t_operating_system), 0, A_NULL);
+                                     0, sizeof(t_operating_system), 0,
+                                     A_NULL);
 
   class_addbang  (operating_system_class, operating_system_bang);
   class_addmethod(operating_system_class, (t_method)operating_system_help,
diff --git a/src/pack.c b/src/pack.c
index b07f6a8..3ea3237 100644
--- a/src/pack.c
+++ b/src/pack.c
@@ -30,8 +30,8 @@
 
 /* ------------------------- zexy/pack ------------------------------- */
 
-static t_class *zpack_class;
-static t_class *zpackproxy_class;
+static t_class *zpack_class=NULL;
+static t_class *zpackproxy_class=NULL;
 
 typedef struct _zpack {
   t_object x_obj;
diff --git a/src/packel.c b/src/packel.c
index 5329908..2da3d8f 100644
--- a/src/packel.c
+++ b/src/packel.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *packel_class;
+static t_class *packel_class=NULL;
 
 typedef struct _packel {
   t_object x_obj;
diff --git a/src/pack~.c b/src/pack~.c
index 5ec6085..15ac791 100644
--- a/src/pack~.c
+++ b/src/pack~.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *sigpack_class;
+static t_class *sigpack_class=NULL;
 
 typedef struct _sigpack {
   t_object x_obj;
@@ -94,9 +94,11 @@ void pack_tilde_setup(void)
 {
   sigpack_class = class_new(gensym("pack~"), (t_newmethod)sigpack_new,
                             (t_method)sigpack_free,
-                            sizeof(t_sigpack), 0, A_DEFFLOAT, 0);
+                            sizeof(t_sigpack), 0,
+                            A_NULL);
   class_addmethod(sigpack_class, nullfn, gensym("signal"), 0);
-  class_addmethod(sigpack_class, (t_method)sigpack_dsp, gensym("dsp"), 0);
+  class_addmethod(sigpack_class, (t_method)sigpack_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(sigpack_class, (t_method)sigpack_help, gensym("help"), 0);
 
diff --git a/src/pdf~.c b/src/pdf~.c
index b3a950b..17abcbf 100644
--- a/src/pdf~.c
+++ b/src/pdf~.c
@@ -21,7 +21,7 @@
 
 /* ------------------------ pdf~ ----------------------------- */
 
-static t_class *pdf_class;
+static t_class *pdf_class=NULL;
 
 typedef struct _pdf {
   t_object x_obj;
@@ -137,7 +137,8 @@ void pdf_tilde_setup(void)
                         sizeof(t_pdf), 0, A_DEFFLOAT, 0);
 
   class_addmethod(pdf_class, nullfn, gensym("signal"), 0);
-  class_addmethod(pdf_class, (t_method)pdf_dsp, gensym("dsp"), 0);
+  class_addmethod(pdf_class, (t_method)pdf_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(pdf_class, (t_method)pdf_bang, gensym("bang"), 0);
   class_addmethod(pdf_class, (t_method)clear_pdfbuf, gensym("clear"), 0);
diff --git a/src/prime.c b/src/prime.c
index 81a77f4..41ad2a6 100644
--- a/src/prime.c
+++ b/src/prime.c
@@ -20,7 +20,7 @@
 #include "zexy.h"
 
 
-static t_class *prime_class;
+static t_class *prime_class=NULL;
 
 typedef struct _prime {
   t_object  x_obj;
diff --git a/src/quantize~.c b/src/quantize~.c
index 47c27ef..e6dce22 100644
--- a/src/quantize~.c
+++ b/src/quantize~.c
@@ -28,7 +28,7 @@
 
 /* ------------------------ quantize~ ----------------------------- */
 
-static t_class *quantize_class;
+static t_class *quantize_class=NULL;
 
 typedef struct _quantize {
   t_object x_obj;
@@ -110,7 +110,8 @@ void quantize_tilde_setup(void)
                              0,
                              sizeof(t_quantize), 0, A_DEFFLOAT, 0);
   class_addmethod(quantize_class, nullfn, gensym("signal"), 0);
-  class_addmethod(quantize_class, (t_method)quantize_dsp, gensym("dsp"), 0);
+  class_addmethod(quantize_class, (t_method)quantize_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addfloat(quantize_class, quantize_float);
   class_addmethod(quantize_class, (t_method)quantize_8bit, gensym("8bit"),
diff --git a/src/rawprint.c b/src/rawprint.c
index e36495b..8d2b5b2 100644
--- a/src/rawprint.c
+++ b/src/rawprint.c
@@ -30,7 +30,7 @@
 # endif
 #endif
 
-static t_class *rawprint_class;
+static t_class *rawprint_class=NULL;
 
 typedef struct _rawprint {
   t_object  x_obj;
diff --git a/src/regex.c b/src/regex.c
index 8c32b37..a749f78 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -34,7 +34,7 @@
 
 /* match a regular expression against a string */
 
-static t_class *regex_class;
+static t_class *regex_class=NULL;
 
 typedef struct _regex {
   t_object x_obj;
@@ -76,11 +76,11 @@ static char*regex_l2s(int *reslen, t_symbol*s, int argc, t_atom*argv)
   i=argc;
   ap=argv;
   while(i--) {
-    char buffer[MAXPDSTRING];
     int len=0;
     if(A_SYMBOL==ap->a_type) {
       len=strlen(ap->a_w.w_symbol->s_name);
     } else {
+      char buffer[MAXPDSTRING];
       atom_string(ap, buffer, MAXPDSTRING);
       len=strlen(buffer);
     }
diff --git a/src/relay.c b/src/relay.c
index 246e1f2..e0bc4ad 100644
--- a/src/relay.c
+++ b/src/relay.c
@@ -38,7 +38,7 @@
 
 /* -------------------------- relay ------------------------------ */
 
-static t_class *relay_class;
+static t_class *relay_class=NULL;
 
 typedef struct _relayelement {
   t_word e_w;
@@ -56,9 +56,9 @@ typedef struct _relay {
 static void relay_anything(t_relay *x, t_symbol *sel, int argc,
                            t_atom *argv)
 {
-  t_relayelement *e;
-  int nelement;
   if (x->x_type == A_SYMBOL) {
+    int nelement;
+    t_relayelement *e;
     for (nelement = x->x_nelement, e = x->x_vec; nelement--; e++) {
       if (e->e_w.w_symbol == sel) {
         outlet_anything(e->e_outlet, sel, argc, argv);
diff --git a/src/repack.c b/src/repack.c
index 51ceb14..6816005 100644
--- a/src/repack.c
+++ b/src/repack.c
@@ -29,7 +29,7 @@
 the second inlet lets you change the default package size
 */
 
-static t_class *repack_class;
+static t_class *repack_class=NULL;
 
 typedef struct _repack {
   t_object x_obj;
diff --git a/src/repeat.c b/src/repeat.c
index dfd07b1..b253dc2 100644
--- a/src/repeat.c
+++ b/src/repeat.c
@@ -21,7 +21,7 @@
 
 /* ------------------------- repeat ------------------------------- */
 
-static t_class *repeat_class;
+static t_class *repeat_class=NULL;
 
 typedef struct _repeat {
   t_object x_obj;
diff --git a/src/route~.c b/src/route~.c
index aa073ba..98b68a3 100644
--- a/src/route~.c
+++ b/src/route~.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *route_tilde_class;
+static t_class *route_tilde_class=NULL;
 typedef struct _route_tilde {
   t_object x_obj;
 
diff --git a/src/sfplay.c b/src/sfplay.c
index a577605..b4865e8 100644
--- a/src/sfplay.c
+++ b/src/sfplay.c
@@ -81,7 +81,7 @@ ritsch at iem.kug.ac.at */
 # define BINREADMODE "r"
 #endif
 
-static t_class *sfplay_class;
+static t_class *sfplay_class=NULL;
 
 typedef struct _sfplay {
   t_object x_obj;
@@ -596,7 +596,7 @@ static void sfplay_dsp(t_sfplay *x, t_signal **sp)
 
 
 /* create sfplay with args <channels> <skip> */
-static void *sfplay_new(t_floatarg chan,t_floatarg skip)
+static void *sfplay_new(t_floatarg chan, t_floatarg skip)
 {
   t_sfplay *x = (t_sfplay *)pd_new(sfplay_class);
   t_int c = chan;
@@ -666,9 +666,11 @@ void sfplay_setup(void)
 {
   sfplay_class = class_new(gensym("sfplay"), (t_newmethod)sfplay_new,
                            (t_method)sfplay_free,
-                           sizeof(t_sfplay), 0, A_DEFFLOAT, A_DEFFLOAT,0);
+                           sizeof(t_sfplay), 0,
+                           A_DEFFLOAT, A_DEFFLOAT, A_NULL);
   class_addmethod(sfplay_class, nullfn, gensym("signal"), 0);
-  class_addmethod(sfplay_class, (t_method)sfplay_dsp, gensym("dsp"), 0);
+  class_addmethod(sfplay_class, (t_method)sfplay_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(sfplay_class, (t_method)sfplay_helper, gensym("help"),
                   A_NULL);
diff --git a/src/sfrecord.c b/src/sfrecord.c
index 0256281..c9e4148 100644
--- a/src/sfrecord.c
+++ b/src/sfrecord.c
@@ -53,7 +53,7 @@ zmoelnig at iem.kug.ac.at
 # define BINWRITEMODE "w"
 #endif
 
-static t_class *sfrecord_class;
+static t_class *sfrecord_class=NULL;
 
 typedef struct _sfrecord {
   t_object x_obj;
@@ -610,9 +610,11 @@ void sfrecord_setup(void)
 {
   sfrecord_class = class_new(gensym("sfrecord"), (t_newmethod)sfrecord_new,
                              (t_method)sfrecord_free,
-                             sizeof(t_sfrecord), 0, A_DEFFLOAT, A_DEFFLOAT,0);
+                             sizeof(t_sfrecord), 0,
+                             A_DEFFLOAT, A_NULL);
   class_addmethod(sfrecord_class, nullfn, gensym("signal"), 0);
-  class_addmethod(sfrecord_class, (t_method)sfrecord_dsp, gensym("dsp"), 0);
+  class_addmethod(sfrecord_class, (t_method)sfrecord_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   /* method open with filename */
   class_addmethod(sfrecord_class, (t_method)sfrecord_open, gensym("open"),
diff --git a/src/sgn~.c b/src/sgn~.c
index 5dda84e..8d570a8 100644
--- a/src/sgn~.c
+++ b/src/sgn~.c
@@ -26,7 +26,7 @@ typedef struct _sgnTilde {
 
 /* ------------------------ sgn~ ----------------------------- */
 
-static t_class *sgnTilde_class;
+static t_class *sgnTilde_class=NULL;
 
 static t_int *sgnTilde_perform(t_int *w)
 {
@@ -198,9 +198,10 @@ static void *sgnTilde_new(void)
 void sgn_tilde_setup(void)
 {
   sgnTilde_class = class_new(gensym("sgn~"), (t_newmethod)sgnTilde_new, 0,
-                             sizeof(t_sgnTilde), 0, A_DEFFLOAT, 0);
+                             sizeof(t_sgnTilde), 0, A_NULL);
   class_addmethod(sgnTilde_class, nullfn, gensym("signal"), 0);
-  class_addmethod(sgnTilde_class, (t_method)sgnTilde_dsp, gensym("dsp"), 0);
+  class_addmethod(sgnTilde_class, (t_method)sgnTilde_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(sgnTilde_class, (t_method)sgnTilde_helper, gensym("help"),
                   0);
diff --git a/src/sigzero~.c b/src/sigzero~.c
index 1364382..da0e5ef 100644
--- a/src/sigzero~.c
+++ b/src/sigzero~.c
@@ -26,7 +26,7 @@
 #include "zexy.h"
 
 
-static t_class *sigzero_class;
+static t_class *sigzero_class=NULL;
 
 typedef struct _sigzero {
   t_object x_obj;
@@ -55,9 +55,9 @@ static t_int *sigzero_perform(t_int *w)
   t_sigzero *x = (t_sigzero *)w[2];
   int n = (int)w[3];
 
-  int non_zero = 0;
 
   if (x->activate) {
+    int non_zero = 0;
     while (n--) {
       if (*in++ != 0.) {
         non_zero = 1;
@@ -104,7 +104,8 @@ void sigzero_tilde_setup(void)
   class_addmethod(sigzero_class, (t_method)sigzero_off, gensym("off"), 0);
 
   class_addmethod(sigzero_class, nullfn, gensym("signal"), 0);
-  class_addmethod(sigzero_class, (t_method)sigzero_dsp, gensym("dsp"), 0);
+  class_addmethod(sigzero_class, (t_method)sigzero_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(sigzero_class, (t_method)sigzero_tilde_helper,
                   gensym("help"), 0);
diff --git a/src/sleepgrain.c b/src/sleepgrain.c
index 8fe75ce..84838a8 100644
--- a/src/sleepgrain.c
+++ b/src/sleepgrain.c
@@ -24,7 +24,7 @@ EXTERN int* get_sys_sleepgrain(void ) ;
 /* ------------------------- sleepgrain ------------------------------- */
 
 
-static t_class *sleepgrain_class;
+static t_class *sleepgrain_class=NULL;
 
 typedef struct _sleepgrain {
   t_object x_obj;
diff --git a/src/sort.c b/src/sort.c
index e0574a7..072f10e 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -25,7 +25,7 @@
   SHELL SORT: simple and easy
 */
 
-static t_class *sort_class;
+static t_class *sort_class=NULL;
 
 typedef struct _sort {
   t_object x_obj;
diff --git a/src/step~.c b/src/step~.c
index 6fed675..8addf9e 100644
--- a/src/step~.c
+++ b/src/step~.c
@@ -33,7 +33,7 @@
 
 /* ------------------------ step~ ----------------------------- */
 
-static t_class *step_class;
+static t_class *step_class=NULL;
 
 typedef struct _step {
   t_object x_obj;
@@ -138,7 +138,8 @@ void step_tilde_setup(void)
   class_addbang(step_class, step_bang);
   class_addmethod(step_class, (t_method)step_setlength, gensym("ft1"),
                   A_FLOAT, 0);
-  class_addmethod(step_class, (t_method)step_dsp, gensym("dsp"), 0);
+  class_addmethod(step_class, (t_method)step_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addmethod(step_class, (t_method)step_helper, gensym("help"), 0);
 
diff --git a/src/strcmp.c b/src/strcmp.c
index 69fe953..7a1b116 100644
--- a/src/strcmp.c
+++ b/src/strcmp.c
@@ -25,8 +25,8 @@
 
 /* compare 2 lists ( == for lists) */
 
-static t_class *strcmp_class;
-static t_class *strcmp_proxy_class;
+static t_class *strcmp_class=NULL;
+static t_class *strcmp_proxy_class=NULL;
 
 
 typedef struct _strcmp {
diff --git a/src/sum.c b/src/sum.c
index 419b9d0..8f38d08 100644
--- a/src/sum.c
+++ b/src/sum.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *sum_class;
+static t_class *sum_class=NULL;
 
 typedef struct _sum {
   t_object x_obj;
@@ -53,7 +53,7 @@ static void sum_help(void)
 void sum_setup(void)
 {
   sum_class = class_new(gensym("sum"), (t_newmethod)sum_new, 0,
-                        sizeof(t_sum), 0, A_DEFFLOAT, 0);
+                        sizeof(t_sum), 0, A_NULL);
 
   class_addlist(sum_class, (t_method)sum_list);
   class_addmethod(sum_class, (t_method)sum_help, gensym("help"), 0);
diff --git a/src/swap~.c b/src/swap~.c
index c82b383..7f6ec35 100644
--- a/src/swap~.c
+++ b/src/swap~.c
@@ -30,7 +30,7 @@
 #define FLOAT2SHORT 32768.
 #define SHORT2FLOAT 1./32768.
 
-static t_class *swap_class;
+static t_class *swap_class=NULL;
 
 typedef struct _swap {
   t_object x_obj;
@@ -96,7 +96,8 @@ void swap_tilde_setup(void)
   swap_class = class_new(gensym("swap~"), (t_newmethod)swap_new, 0,
                          sizeof(t_swap), 0, A_NULL);
   class_addmethod(swap_class, nullfn, gensym("signal"), 0);
-  class_addmethod(swap_class, (t_method)swap_dsp, gensym("dsp"), 0);
+  class_addmethod(swap_class, (t_method)swap_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addfloat(swap_class, swap_float);
   class_addbang(swap_class, swap_bang);
diff --git a/src/symbol2list.c b/src/symbol2list.c
index 935b2be..637e30d 100644
--- a/src/symbol2list.c
+++ b/src/symbol2list.c
@@ -23,7 +23,7 @@
 
 /* ------------------------- symbol2list ------------------------------- */
 
-static t_class *symbol2list_class;
+static t_class *symbol2list_class = NULL;
 
 typedef struct _symbol2list {
   t_object x_obj;
@@ -166,24 +166,31 @@ static void symbol2list_help(t_symbol2list*x)
 {
   post("\n"HEARTSYMBOL " symbol2list\t:: split a symbol into a list of atoms");
 }
-
-void symbol2list_setup(void)
+static t_class* zclass_setup(const char*name)
 {
-  symbol2list_class = class_new(gensym("symbol2list"),
-                                (t_newmethod)symbol2list_new,
-                                (t_method)symbol2list_free, sizeof(t_symbol2list), 0, A_GIMME, 0);
-
-  class_addcreator((t_newmethod)symbol2list_new, gensym("s2l"), A_GIMME, 0);
-  class_addsymbol (symbol2list_class, symbol2list_symbol);
-  class_addbang   (symbol2list_class, symbol2list_bang);
-  class_addmethod  (symbol2list_class, (t_method)symbol2list_delimiter,
+  t_class*c = class_new(gensym(name),
+                        (t_newmethod)symbol2list_new,
+                        (t_method)symbol2list_free,
+                        sizeof(t_symbol2list), 0, A_GIMME, 0);
+  class_addsymbol (c, symbol2list_symbol);
+  class_addbang   (c, symbol2list_bang);
+  class_addmethod  (c, (t_method)symbol2list_delimiter,
                     gensym(""), A_SYMBOL, 0);
-  class_addmethod(symbol2list_class, (t_method)symbol2list_help,
+  class_addmethod(c, (t_method)symbol2list_help,
                   gensym("help"), A_NULL);
-
+  return c;
+}
+static void dosetup()
+{
   zexy_register("symbol2list");
+  symbol2list_class=zclass_setup("symbol2list");
+  zclass_setup("s2l");
+}
+void symbol2list_setup(void)
+{
+  dosetup();
 }
 void s2l_setup(void)
 {
-  symbol2list_setup();
+  dosetup();
 }
diff --git a/src/tabdump.c b/src/tabdump.c
index 03ef061..d724bae 100644
--- a/src/tabdump.c
+++ b/src/tabdump.c
@@ -21,7 +21,7 @@
 
 /* =================== tabdump ====================== */
 
-static t_class *tabdump_class;
+static t_class *tabdump_class=NULL;
 
 typedef struct _tabdump {
   t_object x_obj;
diff --git a/src/tabminmax.c b/src/tabminmax.c
index 89d8026..620d9e1 100644
--- a/src/tabminmax.c
+++ b/src/tabminmax.c
@@ -22,7 +22,7 @@
 
 /* =================== tabminmax ====================== */
 
-static t_class *tabminmax_class;
+static t_class *tabminmax_class=NULL;
 
 typedef struct _tabminmax {
   t_object x_obj;
diff --git a/src/tabread4~~.c b/src/tabread4~~.c
index 96d2003..d3d9e4c 100644
--- a/src/tabread4~~.c
+++ b/src/tabread4~~.c
@@ -23,7 +23,7 @@
 /******************** tabread4~~ ***********************/
 
 
-static t_class *tabread4_tilde_class;
+static t_class *tabread4_tilde_class=NULL;
 
 typedef struct _tabread4_tilde {
   t_object x_obj;
@@ -134,7 +134,7 @@ void tabread4_tilde_tilde_setup(void)
                                    sizeof(t_tabread4_tilde), 0, A_DEFSYM, 0);
   CLASS_MAINSIGNALIN(tabread4_tilde_class, t_tabread4_tilde, x_f);
   class_addmethod(tabread4_tilde_class, (t_method)tabread4_tilde_dsp,
-                  gensym("dsp"), 0);
+                  gensym("dsp"), A_CANT, 0);
   class_addmethod(tabread4_tilde_class, (t_method)tabread4_tilde_set,
                   gensym("set"), A_SYMBOL, 0);
 
diff --git a/src/tabset.c b/src/tabset.c
index 70b87a0..9897dc9 100644
--- a/src/tabset.c
+++ b/src/tabset.c
@@ -24,7 +24,7 @@
 
 /* =================== tabset ====================== */
 
-static t_class *tabset_class;
+static t_class *tabset_class=NULL;
 
 typedef struct _tabset {
   t_object x_obj;
diff --git a/src/tavg~.c b/src/tavg~.c
index 6d5ef51..3590ba0 100644
--- a/src/tavg~.c
+++ b/src/tavg~.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *tavg_class;
+static t_class *tavg_class=NULL;
 
 typedef struct _tavg {
   t_object x_obj;
@@ -76,9 +76,10 @@ static void tavg_help(void)
 void tavg_tilde_setup(void)
 {
   tavg_class = class_new(gensym("tavg~"), (t_newmethod)tavg_new, 0,
-                         sizeof(t_tavgtilde), 0, A_DEFFLOAT, 0);
+                         sizeof(t_tavgtilde), 0, A_NULL);
   class_addmethod(tavg_class, nullfn, gensym("signal"), 0);
-  class_addmethod(tavg_class, (t_method)tavg_dsp, gensym("dsp"), 0);
+  class_addmethod(tavg_class, (t_method)tavg_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addbang(tavg_class, tavg_bang);
 
diff --git a/src/time.c b/src/time.c
index 71317ab..772247b 100644
--- a/src/time.c
+++ b/src/time.c
@@ -43,7 +43,7 @@
 
 /* ----------------------- time --------------------- */
 
-static t_class *time_class;
+static t_class *time_class=NULL;
 
 typedef struct _time {
   t_object x_obj;
@@ -59,10 +59,10 @@ typedef struct _time {
 static void *time_new(t_symbol* UNUSED(s), int argc, t_atom *argv)
 {
   t_time *x = (t_time *)pd_new(time_class);
-  char buf[5];
 
   x->GMT=0;
   if (argc) {
+    char buf[5];
     atom_string(argv, buf, 5);
     if (buf[0]=='G' && buf[1]=='M' && buf[2]=='T') {
       x->GMT = 1;
diff --git a/src/unpack.c b/src/unpack.c
index 7998616..0c19d74 100644
--- a/src/unpack.c
+++ b/src/unpack.c
@@ -32,7 +32,7 @@
 
 /* like pack, but does no type-checking */
 
-static t_class *zunpack_class;
+static t_class *zunpack_class=NULL;
 
 typedef struct _zunpack {
   t_object x_obj;
diff --git a/src/unpack~.c b/src/unpack~.c
index 091f9d3..472fb34 100644
--- a/src/unpack~.c
+++ b/src/unpack~.c
@@ -19,7 +19,7 @@
 
 #include "zexy.h"
 
-static t_class *sigunpack_class;
+static t_class *sigunpack_class=NULL;
 
 typedef struct _sigunpack {
   t_object x_obj;
@@ -130,7 +130,7 @@ void unpack_tilde_setup(void)
                               0,
                               sizeof(t_sigunpack), 0, A_DEFFLOAT, 0);
   class_addmethod(sigunpack_class, (t_method)sigunpack_dsp, gensym("dsp"),
-                  0);
+                  A_CANT, 0);
   class_addfloat(sigunpack_class, (t_method)sigunpack_float);
   class_addlist (sigunpack_class, (t_method)sigunpack_list);
 
diff --git a/src/urn.c b/src/urn.c
index a7dc2f0..97cb0f2 100644
--- a/src/urn.c
+++ b/src/urn.c
@@ -21,7 +21,7 @@
 
 /* ------------------------- urn ------------------------------- */
 
-static t_class *urn_class;
+static t_class *urn_class=NULL;
 
 typedef struct _urn {
   t_object x_obj;
diff --git a/src/wrap.c b/src/wrap.c
index f410fe3..77cb398 100644
--- a/src/wrap.c
+++ b/src/wrap.c
@@ -18,7 +18,7 @@
  */
 #include "zexy.h"
 
-static t_class *wrap_class;
+static t_class *wrap_class=NULL;
 
 typedef struct _wrap {
   t_object  x_obj;
diff --git a/src/zexy.c b/src/zexy.c
index e55f04d..1c17a3b 100644
--- a/src/zexy.c
+++ b/src/zexy.c
@@ -38,7 +38,7 @@ typedef struct zexy {
   t_object t_ob;
 } t_zexy;
 
-t_class *zexy_class;
+t_class *zexy_class=NULL;
 
 static void zexy_help(void)
 {
diff --git a/src/z~.c b/src/z~.c
index 240bac6..324fb0e 100644
--- a/src/z~.c
+++ b/src/z~.c
@@ -29,7 +29,7 @@
 
 /* ----------------------------------------------------- */
 
-static t_class *zNdelay_class;
+static t_class *zNdelay_class=NULL;
 
 typedef struct _zNdelay {
   t_object x_obj;
@@ -151,7 +151,8 @@ void z_tilde_setup(void)
                             (t_method)zNdelay_free,
                             sizeof(t_zNdelay), 0, A_GIMME, 0);
   class_addmethod(zNdelay_class, nullfn, gensym("signal"), 0);
-  class_addmethod(zNdelay_class, (t_method)zNdelay_dsp, gensym("dsp"), 0);
+  class_addmethod(zNdelay_class, (t_method)zNdelay_dsp, gensym("dsp"),
+                  A_CANT, 0);
 
   class_addfloat(zNdelay_class, zdel_float);
   class_addmethod(zNdelay_class, (t_method)zdel_float, gensym("ft1"),
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4010f0a..5ead1cd 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,32 +1,68 @@
 AUTOMAKE_OPTIONS = foreign
 
-TESTS_ENVIRONMENT = RUNTESTS_NOLOG=yes TESTDIR=$(srcdir)
-
-TESTS=runtests.sh
-
-clean-local:
-	-rm -f runtests.txt
+ at VALGRIND_CHECK_RULES@
 
 EXTRA_DIST = \
 	README.txt \
+	run1.sh \
+	run1.pd \
 	runtests.sh \
 	runtests.bat \
 	runtests_nogui.pd \
 	runtests.pd \
-	testunit.pd
+	testunit.pd \
+	$(nada)
 
 EXTRA_DIST += \
-	msgfile/CR.txt \
 	msgfile/msgfile.txt \
+	msgfile/CR.txt \
 	testtests/README.txt \
+	$(TESTS)
+
+TEST_EXTENSIONS = .pd
+PD_LOG_COMPILER = $(srcdir)/run1.sh
+#AM_PD_LOG_FLAGS = -v
+
+AM_TESTS_ENVIRONMENT = SRCDIR=$(top_srcdir)
+AM_TESTS_ENVIRONMENT+= BUILDDIR=$(top_builddir)
+AM_TESTS_ENVIRONMENT+= LIBDIR=$(top_builddir)/src/.libs
+AM_TESTS_ENVIRONMENT+= TESTDIR=$(srcdir)
+AM_TESTS_ENVIRONMENT+= VALGRIND='$(VALGRIND)'
+
+
+
+.PHONY: update
+update: Makefile.am
+	sed -e '0,/@TESTS@/!{0,/@TESTS@/!{/@TESTS@/{N;q}}}' -i $<
+	find */ -type f -name "*.pd" | sort | sed -e 's|^|	|' -e 's|$$| \\|' >> $<
+	echo '	$$(nada)' >> $<
+
+XFAIL_TESTS = \
+	testtests/fail_noresult.pd \
+	testtests/fail.pd \
+	testtests/fail_wait0.pd \
+	testtests/fail_wait10.pd \
+	$(nada)
+
+TESTS =
+if LIBRARY
+TESTS += \
+	eq~/dualnoise.pd \
+	eq~/singlenoise.pd \
+	gt~/dualnoise.pd \
+	lt~/dualnoise.pd \
+	$(nada)
+endif LIBRARY
+
+# everything below the line with @TESTS@ is autogenerated
+# DO NOT EDIT!!! instead run 'make Makefile.am'
+#### @TESTS@ ####
+TESTS += \
 	absgn~/abs.pd \
 	absgn~/sgn.pd \
 	abs~/simple.pd \
 	and~/dualnoise.pd \
 	and~/singlenoise.pd \
-	eq~/dualnoise.pd \
-	eq~/singlenoise.pd \
-	gt~/dualnoise.pd \
 	gt~/singlenoise.pd \
 	help-msg/0x260x260x7e.pd \
 	help-msg/0x2e.pd \
@@ -103,7 +139,6 @@ EXTRA_DIST += \
 	list2lists/negativelength.pd \
 	lister/inline2.pd \
 	lister/inline.pd \
-	lt~/dualnoise.pd \
 	lt~/singlenoise.pd \
 	msgfile/add2.pd \
 	msgfile/empty_at_end.pd \
@@ -114,6 +149,7 @@ EXTRA_DIST += \
 	msgfile/reentrant.pd \
 	or~/dualnoise.pd \
 	or~/singlenoise.pd \
+	relay/floatfloat.pd \
 	repeat/noargs.pd \
 	s2l/numsymbols.pd \
 	sgn~/simple.pd \
@@ -123,4 +159,5 @@ EXTRA_DIST += \
 	testtests/fail_wait10.pd \
 	testtests/pass.pd \
 	testtests/pass_wait0.pd \
-	testtests/pass_wait10.pd
+	testtests/pass_wait10.pd \
+	$(nada)
diff --git a/tests/relay/floatfloat.pd b/tests/relay/floatfloat.pd
new file mode 100644
index 0000000..3abc4a7
--- /dev/null
+++ b/tests/relay/floatfloat.pd
@@ -0,0 +1,23 @@
+#N canvas 181 112 569 329 10;
+#X obj 91 107 inlet bang;
+#X obj 91 290 outlet result;
+#X obj 91 128 t b b b;
+#X obj 91 260 i;
+#X msg 107 233 1;
+#X msg 139 233 0;
+#X msg 107 159 1;
+#X obj 107 184 relay 1;
+#X obj 107 206 select 1;
+#X text 38 51 Pd's implicit float->list coercion on the inlet results
+in NULL-selectors \, wich eventually crashes Pd when passed to the
+outlet...;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 1 6 0;
+#X connect 2 2 5 0;
+#X connect 3 0 1 0;
+#X connect 4 0 3 1;
+#X connect 5 0 3 1;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 4 0;
diff --git a/tests/run1.pd b/tests/run1.pd
new file mode 100644
index 0000000..773035b
--- /dev/null
+++ b/tests/run1.pd
@@ -0,0 +1,12 @@
+#N canvas 359 534 538 390 10;
+#X obj 182 84 r test;
+#X obj 182 106 symbol;
+#X msg 259 171 \; pd dsp 1;
+#X obj 182 197 testunit;
+#X obj 182 128 t s b;
+#X msg 182 227 \; pd quit;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 4 1 2 0;
diff --git a/tests/run1.sh b/tests/run1.sh
new file mode 100755
index 0000000..8051182
--- /dev/null
+++ b/tests/run1.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+PD=${PD:=pd}
+LIBDIR=${LIBDIR:=../src/.libs/}
+SRCDIR=${SRCDIR:=../}
+TESTDIR=${TESTDIR:=.}
+
+PD=$(which ${PD})
+TEST=$1
+
+if [ "x${PD}" = "x" ]; then
+ exit 77
+fi
+
+LIBFLAGS="-path ${LIBDIR}:${SRCDIR}/abs:. -lib ${LIBDIR}/zexy"
+TMPFILE=$(mktemp)
+
+${VALGRIND} ${PD} \
+	-noprefs -nostdpath \
+	-oss -nosound -nrt \
+	-nogui -batch -verbose \
+	${LIBFLAGS} \
+	-open ${TESTDIR}/run1.pd \
+	-send "test ${TEST%.pd}" 2>&1 \
+	| tee "${TMPFILE}"
+
+
+egrep "^regression-test: ${TEST%.pd}: OK" "${TMPFILE}" >/dev/null
+SUCCESS=$?
+
+rm "${TMPFILE}"
+
+exit ${SUCCESS}
diff --git a/tests/runtests.sh b/tests/runtests.sh
index cac1184..6740834 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -128,7 +128,9 @@ if [ "x${RUNTESTS_NOLOG}" != "x" ]; then
   RUNTESTS_FINAL_LOG=
 fi
 if [ "x${RUNTESTS_FINAL_LOG}" = "x" ]; then
- :
+ if [ ${SUCCESS} -ne 0 ]; then
+   cat "${RUNTESTS_LOG}"
+ fi
 else
  cat ${RUNTESTS_LOG} >> ${RUNTESTS_FINAL_LOG}
 fi
diff --git a/tests/testunit.pd b/tests/testunit.pd
index bc723a7..c58a501 100644
--- a/tests/testunit.pd
+++ b/tests/testunit.pd
@@ -1,10 +1,10 @@
-#N canvas 578 118 585 499 10;
-#N canvas 456 161 474 559 run-test 0;
-#X obj 71 136 symbol;
-#X obj 71 104 inlet test-to-run;
-#X obj 71 514 outlet result;
-#X obj 71 440 pack 0 s;
-#X msg 113 136 bang;
+#N canvas 580 113 585 499 10;
+#N canvas 460 151 515 549 run-test 0;
+#X obj 131 186 symbol;
+#X obj 64 104 inlet test-to-run;
+#X obj 131 514 outlet result;
+#X obj 131 440 pack 0 s;
+#X msg 173 186 bang;
 #N canvas 396 344 450 300 print 0;
 #X obj 101 247 print regression-test;
 #X obj 101 204 pack s s;
@@ -27,10 +27,10 @@
 #X connect 8 0 9 0;
 #X connect 9 0 2 0;
 #X connect 9 1 1 1;
-#X restore 96 491 pd print result;
-#X obj 71 252 t f b;
-#X text 99 217 start regression test;
-#X text 105 251 regression test finished;
+#X restore 156 491 pd print result;
+#X obj 131 302 t f b;
+#X text 159 267 start regression test;
+#X text 165 301 regression test finished;
 #N canvas 318 184 905 641 get 0;
 #X obj 105 488 outlet;
 #X obj 105 26 inlet reset;
@@ -80,14 +80,14 @@ triggers it's own destruction (stack corruption);
 #X connect 20 1 22 1;
 #X connect 21 0 22 0;
 #X connect 22 0 0 0;
-#X restore 71 232 pd get result;
+#X restore 131 282 pd get result;
 #X text 64 17 the test MUST return a result!;
 #X text 77 64 cons: the regression test suite will block until the
 test returns a result (potentially infinitely long)!;
 #X text 77 33 pros: the test need not be finished in zero-time (good
 for testing signal-objects or timed objects);
-#X obj 71 470 t l l;
-#N canvas 4 49 625 330 create/destroy 0;
+#X obj 131 470 t l l;
+#N canvas 8 48 625 330 create/destroy 0;
 #X obj 148 53 inlet;
 #X obj 449 48 inlet clear;
 #X obj 148 129 pack s \$0;
@@ -107,8 +107,8 @@ for testing signal-objects or timed objects);
 #X connect 5 1 3 0;
 #X connect 6 0 7 0;
 #X connect 8 0 2 0;
-#X restore 146 324 pd create/destroy testpatch;
-#N canvas 0 0 450 300 restartaudio 0;
+#X restore 206 374 pd create/destroy testpatch;
+#N canvas 0 50 450 300 restartaudio 0;
 #X obj 113 77 inlet;
 #X obj 113 99 t b;
 #X msg 113 121 dsp 0 \, dsp 1;
@@ -116,13 +116,15 @@ for testing signal-objects or timed objects);
 #X connect 0 0 1 0;
 #X connect 1 0 2 0;
 #X connect 2 0 3 0;
-#X restore 141 186 pd restartaudio;
-#X obj 71 214 t b;
-#X obj 71 186 t b b;
-#X obj 71 164 t b s s s;
-#X obj 142 165 print starting;
+#X restore 201 236 pd restartaudio;
+#X obj 131 264 t b;
+#X obj 131 236 t b b;
+#X obj 131 214 t b s s s;
+#X obj 202 215 print starting;
+#X obj 64 126 route bang;
+#X obj 64 148 t b;
 #X connect 0 0 18 0;
-#X connect 1 0 0 0;
+#X connect 1 0 20 0;
 #X connect 3 0 13 0;
 #X connect 4 0 0 0;
 #X connect 6 0 3 0;
@@ -137,6 +139,9 @@ for testing signal-objects or timed objects);
 #X connect 18 1 14 0;
 #X connect 18 2 3 1;
 #X connect 18 3 19 0;
+#X connect 20 0 21 0;
+#X connect 20 1 0 0;
+#X connect 21 0 14 1;
 #X restore 94 218 pd run-test;
 #X obj 94 243 outlet;
 #X obj 94 191 inlet;
@@ -150,6 +155,6 @@ for testing signal-objects or timed objects);
 #X text 64 92 if no result is returned immediately \, the test is considered
 to be FAILED!;
 #X text 63 131 note: we could have this be using "0" as the WAIT result
-\, an no-result as KO \; for legacy reasons we don't;
+\, and no-result as KO \; for legacy reasons we don't;
 #X connect 0 0 1 0;
 #X connect 2 0 0 0;

-- 
pd-zexy packaging



More information about the pkg-multimedia-commits mailing list