Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21853
Modified Files: Tag: desiredata kernel.c Log Message: added atom_ostream; removed some MAXPDSTRING; removed special atom stringifications for small buffer sizes
Index: kernel.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/kernel.c,v retrieving revision 1.1.2.59 retrieving revision 1.1.2.60 diff -C2 -d -r1.1.2.59 -r1.1.2.60 *** kernel.c 18 Jul 2007 04:50:35 -0000 1.1.2.59 --- kernel.c 18 Jul 2007 07:11:40 -0000 1.1.2.60 *************** *** 236,247 **** */
! static int should_quote(char *s) { ! return *s==';' || *s==',' || *s=='\' || (*s=='$' && isdigit(s[1])); }
void atom_init(t_atom *a, size_t n) { ! for (unsigned int i=0; i<n; i++) { a[i].a_type = A_FLOAT; ! a[i].a_w.w_float = 0.0; } } --- 236,275 ---- */
! static int should_quote(char *s) {return *s==';' || *s==',' || *s=='\' || (*s=='$' && isdigit(s[1]));} ! ! void atom_ostream(t_atom *a, ostream &buf) { ! switch(a->a_type) { ! case A_SEMI: buf << ";"; break; ! case A_COMMA: buf << ","; break; ! case A_POINTER: buf << "(pointer)"; break; ! case A_FLOAT: buf << a->a_float; break; ! case A_SYMBOL: { ! bool quote=0; ! for (char *sp = a->a_symbol->name; *sp; sp++) if (should_quote(sp)) quote = 1; ! if (quote) { ! for (char *sp = a->a_symbol->name; *sp; sp++) { ! if (should_quote(sp)) buf << '\'; ! buf << *sp; ! } ! } else buf << a->a_symbol->name; ! } break; ! case A_DOLLAR: buf << "$" << a->a_index; break; ! case A_DOLLSYM: buf << a->a_symbol->name; break; ! default: bug("atom_string"); ! } ! } ! ! /* this is not completely compatible with Miller's, as it won't do anything special for short bufsizes. */ ! void atom_string(t_atom *a, char *buf, unsigned int bufsize) { ! ostringstream b; ! atom_ostream(a,b); ! strncpy(buf,b.str().data(),bufsize); ! buf[bufsize-1]=0; }
void atom_init(t_atom *a, size_t n) { ! for (size_t i=0; i<n; i++) { a[i].a_type = A_FLOAT; ! a[i].a_float = 0.0; } } *************** *** 256,306 **** }
- void atom_string(t_atom *a, char *buf, unsigned int bufsize) { - switch(a->a_type) { - case A_SEMI: strcpy(buf, ";"); break; - case A_COMMA: strcpy(buf, ","); break; - case A_POINTER: strcpy(buf, "(pointer)"); break; - case A_FLOAT: { - char tbuf[30]; - sprintf(tbuf, "%g", a->a_float); - if (strlen(tbuf) < bufsize-1) strcpy(buf, tbuf); else strcpy(buf, a->a_float < 0 ? "-" : "+"); - } break; - case A_SYMBOL: { - char *sp; - unsigned int len=0; - int quote=0; - for (sp = a->a_symbol->name; *sp; sp++, len++) if (should_quote(sp)) quote = 1; - if (quote) { - char *bp = buf, *ep = buf + (bufsize-2); - sp = a->a_symbol->name; - while (bp < ep && *sp) { - if (should_quote(sp)) *bp++ = '\'; - *bp++ = *sp++; - } - if (*sp) *bp++ = '*'; - *bp = 0; - } else { - if (len < bufsize-1) { - strcpy(buf, a->a_symbol->name); - } else { - strncpy(buf, a->a_symbol->name, bufsize - 2); - strcpy(buf + (bufsize - 2), "*"); - } - } - } break; - case A_DOLLAR: sprintf(buf, "$%ld", a->a_index); break; - case A_DOLLSYM: strncpy(buf, a->a_symbol->name, bufsize); buf[bufsize-1] = 0; break; - default: bug("atom_string"); - } - } - - /* - void atom_string(t_atom *a, char *buf, unsigned int bufsize) { - ostringstream b; - atom_ostream(a,b,bufsize-1); - strcpy(buf,b.str().data()); - } - */ - /* in which the value has bit 0 set if the key object is not a zombie, and has bit 1 set if the object has been uploaded to the client */ --- 284,287 ----