From 592afcf950b33b468ea472228eef9c1b12d73477 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 11 Mar 2011 05:51:51 +0000 Subject: made logpost also use args2symbol() svn path=/trunk/externals/log/; revision=15027 --- logpost-help.pd | 21 +++++++++++++++- logpost.c | 74 ++++++++++++++++++++++++--------------------------------- 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 -/* -------------------------- 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); } -- cgit v1.2.1