diff --git a/pd/src/m_atom.c b/pd/src/m_atom.c index b38fa8d226ac88baee6b3e56e991c35661ef28aa..3c4f5be2e6ca5af73cba8ef78362b426052cb960 100644 --- a/pd/src/m_atom.c +++ b/pd/src/m_atom.c @@ -6,6 +6,8 @@ #include <stdio.h> #include <string.h> +#define DOLLARALL -0x7fffffff /* defined in m_binbuf.c, too. Consider merging */ + /* convenience routines for checking and getting values of atoms. There's no "pointer" version since there's nothing safe to return if there's an error. */ @@ -129,7 +131,7 @@ void atom_string(t_atom *a, char *buf, unsigned int bufsize) } break; case A_DOLLAR: - if(a->a_w.w_symbol == gensym("@")) + if(a->a_w.w_index == DOLLARALL) { /* JMZ: $@ expansion */ sprintf(buf, "$@"); diff --git a/pd/src/m_binbuf.c b/pd/src/m_binbuf.c index 9aa47d80644493814bd165e7d71aa3f3ce7426ea..1f815aa6a19f626cdb88030d1303d3b2202bf2a1 100644 --- a/pd/src/m_binbuf.c +++ b/pd/src/m_binbuf.c @@ -22,6 +22,8 @@ #include <string.h> #include <stdarg.h> +#define DOLLARALL -0x7fffffff /* sentinel value for "$@" dollar arg */ + /* escape characters for saving */ static char* strnescape(char *dest, const char *src, size_t outlen) { @@ -202,7 +204,7 @@ void binbuf_text(t_binbuf *x, char *text, size_t size) if(buf[2]==0) /* only expand A_DOLLAR $@ */ { ap->a_type = A_DOLLAR; - ap->a_w.w_symbol = gensym("@"); + ap->a_w.w_index = DOLLARALL; } else /* there is no A_DOLLSYM $@ */ { @@ -392,7 +394,7 @@ void binbuf_addbinbuf(t_binbuf *x, t_binbuf *y) break; case A_DOLLAR: //fprintf(stderr,"addbinbuf: dollar\n"); - if(ap->a_w.w_symbol==gensym("@")){ /* JMZ: $@ expansion */ + if(ap->a_w.w_index==DOLLARALL){ /* JMZ: $@ expansion */ SETSYMBOL(ap, gensym("$@")); } else { sprintf(tbuf, "$%d", ap->a_w.w_index); @@ -456,7 +458,7 @@ void binbuf_restore(t_binbuf *x, int argc, t_atom *argv) else if (!strcmp(str, "$@")) /* JMZ: $@ expansion */ { ap->a_type = A_DOLLAR; - ap->a_w.w_symbol = gensym("@"); + ap->a_w.w_index = DOLLARALL; } else if ((str2 = strchr(str, '$')) && str2[1] >= '0' && str2[1] <= '9') @@ -694,7 +696,7 @@ void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv) { //fprintf(stderr, "count %d\n", count); if (at[count].a_type == A_DOLLAR && - at[count].a_w.w_symbol==gensym("@")) + at[count].a_w.w_index==DOLLARALL) { //fprintf(stderr,"found @ count:%d ac:%d argc:%d ac+argc-1:%d\n", // count, ac, argc, ac+argc-1); @@ -765,6 +767,7 @@ void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv) if (!ac) break; if (at->a_type == A_DOLLAR) { + /* would it make sense to consider $@ here? */ if (at->a_w.w_index <= 0 || at->a_w.w_index > argc) { error("$%d: not enough arguments supplied", @@ -839,7 +842,7 @@ void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv) *msp = *at; break; case A_DOLLAR: - if (at->a_w.w_symbol==gensym("@")) + if (at->a_w.w_index==DOLLARALL) { /* JMZ: $@ expansion */ int i; //if(msp+argc >= ems)