aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--logpost-help.pd21
-rw-r--r--logpost.c74
2 files changed, 51 insertions, 44 deletions
diff --git a/logpost-help.pd b/logpost-help.pd
index 3634ac6..98585c0 100644
--- a/logpost-help.pd
+++ b/logpost-help.pd
@@ -1,14 +1,33 @@
#N canvas 545 156 450 300 10;
#X obj 46 81 logpost;
#X obj 49 38 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
--1 -1 3800 1;
+-1 -1 0 1;
#X msg 47 120 symbol hello;
#X obj 48 171 logpost 2 testing;
#X msg 61 143 hello;
#X text 22 7 post at different levels;
#X obj 85 62 hradio 15 1 0 5 empty empty empty 0 -8 0 10 -262144 -1
-1 0;
+#X obj 224 137 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 2000 1;
+#X obj 221 157 logpost 3;
+#X obj 113 234 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 2800 1;
+#X obj 110 252 logpost 3 loasdf 23 sdkjh;
+#X obj 257 233 hradio 15 1 0 5 empty empty empty 0 -8 0 10 -262144
+-1 -1 0;
+#X obj 234 37 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 1200 1;
+#X obj 231 57 logpost farg;
+#X obj 234 77 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+-1 -1 3500 1;
+#X obj 231 97 logpost three 2 asdf;
#X connect 1 0 0 0;
#X connect 2 0 3 0;
#X connect 4 0 3 0;
#X connect 6 0 0 1;
+#X connect 7 0 8 0;
+#X connect 9 0 10 0;
+#X connect 11 0 10 1;
+#X connect 12 0 13 0;
+#X connect 14 0 15 0;
diff --git a/logpost.c b/logpost.c
index e4f31d9..a66d5b0 100644
--- a/logpost.c
+++ b/logpost.c
@@ -1,8 +1,6 @@
#include "m_pd.h"
-#include <string.h>
-/* -------------------------- logpost ------------------------------ */
static t_class *logpost_class;
typedef struct _logpost
@@ -12,6 +10,22 @@ typedef struct _logpost
t_symbol* tag;
} t_logpost;
+static t_symbol* args2symbol(int argc, t_atom *argv)
+{
+ t_symbol* s;
+ char* buf;
+ int bufsize;
+ t_binbuf *bb = binbuf_new();
+ binbuf_add(bb, argc, argv);
+ binbuf_gettext(bb, &buf, &bufsize);
+ buf = resizebytes(buf, bufsize, bufsize+1);
+ buf[bufsize] = 0;
+ s = gensym(buf);
+ freebytes(buf, bufsize+1);
+ binbuf_free(bb);
+ return s;
+}
+
static void logpost_bang(t_logpost *x)
{
logpost(x, (const int)x->level, "%s%sbang",
@@ -30,55 +44,30 @@ static void logpost_float(t_logpost *x, t_float f)
x->tag->s_name, (*x->tag->s_name ? ": " : ""), f);
}
-static void logpost_list(t_logpost *x, t_symbol *s, int argc, t_atom *argv)
-{
- int i;
- if (argc && argv->a_type != A_SYMBOL) startpost("%s:", x->tag->s_name);
- else startpost("%s%s%s", x->tag->s_name,
- (*x->tag->s_name ? ": " : ""),
- (argc > 1 ? s_list.s_name : (argc == 1 ? s_symbol.s_name :
- s_bang.s_name)));
- postatom(argc, argv);
- endpost();
-}
-
static void logpost_anything(t_logpost *x, t_symbol *s, int argc, t_atom *argv)
{
- int i;
- startpost("%s%s%s", x->tag->s_name, (*x->tag->s_name ? ": " : ""),
- s->s_name);
- postatom(argc, argv);
- endpost();
+ t_symbol* output = args2symbol(argc, argv);
+ logpost(x, (const int)x->level, "%s%s%s %s",
+ x->tag->s_name, (*x->tag->s_name ? ": " : ""),
+ s->s_name, output->s_name);
}
static void *logpost_new(t_symbol *sel, int argc, t_atom *argv)
{
t_logpost *x = (t_logpost *)pd_new(logpost_class);
- if (argc == 0)
- x->tag = &s_;
- else if (argc == 1)
- {
- t_symbol *s = atom_getsymbolarg(0, argc, argv);
- if (s != &s_) // we have a symbol
- x->tag = s;
- else // we have a float
- {
- x->level = atom_getfloatarg(0, argc, argv);
- }
- }
- else
+ x->tag = &s_;
+ x->level = 2;
+ t_symbol *sym = atom_getsymbolarg(0, argc, argv);
+ if (sym != &s_) // oops, we have a symbol, use default
+ logpost(x, 3, "[logpost] got '%s' instead of a float for the first argument",
+ sym->s_name);
+ else // we have a float
+ x->level = atom_getfloatarg(0, argc, argv);
+ if (argc > 1)
{
- int bufsize;
- char *buf;
- t_binbuf *bb = binbuf_new();
- binbuf_add(bb, argc, argv);
- binbuf_gettext(bb, &buf, &bufsize);
- buf = resizebytes(buf, bufsize, bufsize+1);
- buf[bufsize] = 0;
- x->tag = gensym(buf);
- freebytes(buf, bufsize+1);
- binbuf_free(bb);
+ argc--; argv++; // lose the level arg
+ x->tag = args2symbol(argc, argv);
}
floatinlet_new(&x->x_obj, &x->level);
return (x);
@@ -95,6 +84,5 @@ void logpost_setup(void)
class_addbang(logpost_class, logpost_bang);
class_addfloat(logpost_class, logpost_float);
class_addpointer(logpost_class, logpost_pointer);
- class_addlist(logpost_class, logpost_list);
class_addanything(logpost_class, logpost_anything);
}