From e887d8a1f1533f0972c2dca9915111ff9e751c70 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Thu, 20 Aug 2015 23:50:31 -0400 Subject: [PATCH] ported [append] revisions from Pd-Vanilla 0.46 --- pd/src/g_traversal.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/pd/src/g_traversal.c b/pd/src/g_traversal.c index dc8d7b173..c1a71eb39 100644 --- a/pd/src/g_traversal.c +++ b/pd/src/g_traversal.c @@ -1093,21 +1093,24 @@ typedef struct _append static void *append_new(t_symbol *why, int argc, t_atom *argv) { t_append *x = (t_append *)pd_new(append_class); - int i; + int varcount, i; + t_atom at, *varvec; t_appendvariable *sp; - int varcount; - x->x_templatesym = canvas_makebindsym(atom_getsymbolarg(0, argc, argv)); - if (argc) argc--, argv++; - varcount = argc ? argc : 1; /* have at least one variable */ + + x->x_templatesym = template_getbindsym(atom_getsymbolarg(0, argc, argv)); + if (argc < 2) + { + varcount = 1; + varvec = &at; + SETSYMBOL(&at, &s_); + } + else varcount = argc - 1, varvec = argv + 1; x->x_variables = (t_appendvariable *)getbytes(varcount * sizeof (*x->x_variables)); x->x_nin = varcount; - for (i = 0, sp = x->x_variables; i < argc; i++, sp++) + for (i = 0, sp = x->x_variables; i < varcount; i++, sp++) { - if (argc) - sp->gv_sym = atom_getsymbolarg(i, argc, argv); - else - sp->gv_sym = &s_; + sp->gv_sym = atom_getsymbolarg(i, varcount, varvec); sp->gv_f = 0; if (i) floatinlet_new(&x->x_obj, &sp->gv_f); } @@ -1122,11 +1125,10 @@ static void append_set(t_append *x, t_symbol *templatesym, t_symbol *field) if (x->x_nin != 1) { pd_error(x, "set: cannot set multiple fields."); - return; } else { - x->x_templatesym = canvas_makebindsym(templatesym); + x->x_templatesym = template_getbindsym(templatesym); x->x_variables->gv_sym = field; x->x_variables->gv_f = 0; } @@ -1136,13 +1138,20 @@ static void append_float(t_append *x, t_float f) { int nitems = x->x_nin, i; t_symbol *templatesym = x->x_templatesym; - t_template *template = template_findbyname(templatesym); + t_template *template; t_appendvariable *vp; t_gpointer *gp = &x->x_gp; t_gstub *gs = gp->gp_stub; t_word *vec; t_scalar *sc, *oldsc; t_glist *glist; + + if (!templatesym->s_name) + { + pd_error(x, "append: no template supplied"); + return; + } + template = template_findbyname(templatesym); if (!template) { pd_error(x, "append: couldn't find template %s", templatesym->s_name); -- GitLab