[PD-cvs] pd/src desire.h, 1.1.2.49.2.31, 1.1.2.49.2.32 kernel.c, 1.1.2.62, 1.1.2.63
Mathieu Bouchard
matju at users.sourceforge.net
Wed Jul 18 22:23:17 CEST 2007
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv411
Modified Files:
Tag: desiredata
desire.h kernel.c
Log Message:
removed some MAXPDSTRING; added oprintf, which prints to a ostringstream&
Index: kernel.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/kernel.c,v
retrieving revision 1.1.2.62
retrieving revision 1.1.2.63
diff -C2 -d -r1.1.2.62 -r1.1.2.63
*** kernel.c 18 Jul 2007 16:16:07 -0000 1.1.2.62
--- kernel.c 18 Jul 2007 20:23:15 -0000 1.1.2.63
***************
*** 1718,1724 ****
}
- /* YOU WISH */
void oprintf(ostream &buf, const char *s, ...) {
! // lalalalalère...
}
--- 1718,1729 ----
}
void oprintf(ostream &buf, const char *s, ...) {
! char *b;
! va_list args;
! va_start(args,s);
! vasprintf(&b,s,args);
! va_end(args);
! buf << b;
! free(b);
}
***************
*** 1890,1894 ****
* buf holds the expanded $arg
*
! * if some error occured, "-1" is returned
*
* e.g. "$1-bla" with list "10 20 30"
--- 1895,1899 ----
* buf holds the expanded $arg
*
! * if some error occurred, "-1" is returned
*
* e.g. "$1-bla" with list "10 20 30"
***************
*** 1897,1906 ****
* return value = 1; (s+1=="-bla")
*/
! static int binbuf_expanddollsym(char *s, char *buf, t_atom dollar0, int ac, t_atom *av, int tonew) {
int argno=atol(s);
int arglen=0;
char*cs=s;
char c=*cs;
- *buf=0;
while (c && isdigit(c)) {
c=*cs++;
--- 1902,1910 ----
* return value = 1; (s+1=="-bla")
*/
! static int binbuf_expanddollsym(char *s, std::ostream &buf, t_atom dollar0, int ac, t_atom *av, int tonew) {
int argno=atol(s);
int arglen=0;
char*cs=s;
char c=*cs;
while (c && isdigit(c)) {
c=*cs++;
***************
*** 1908,1919 ****
}
/* invalid $-expansion (like "$bla") */
! if (cs==s) {sprintf(buf, "$"); return 0;}
if (argno < 0 || argno > ac) { /* undefined argument */
if(!tonew) return 0;
! sprintf(buf, "$%d", argno);
} else if (argno == 0) { /* $0 */
! atom_string(&dollar0, buf, MAXPDSTRING/2-1);
} else { /* fine! */
! atom_string(av+(argno-1), buf, MAXPDSTRING/2-1);
}
return arglen-1;
--- 1912,1923 ----
}
/* invalid $-expansion (like "$bla") */
! if (cs==s) {buf << "$"; return 0;}
if (argno < 0 || argno > ac) { /* undefined argument */
if(!tonew) return 0;
! buf << "$" << argno;
} else if (argno == 0) { /* $0 */
! atom_ostream(&dollar0, buf);
} else { /* fine! */
! atom_ostream(av+(argno-1), buf);
}
return arglen-1;
***************
*** 1922,1932 ****
/* LATER remove the dependence on the current canvas for $0; should be another argument. */
t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av, int tonew) {
! char buf[MAXPDSTRING];
! char buf2[MAXPDSTRING];
! char*str=s->name;
! int next=0, i=MAXPDSTRING;
t_atom dollarnull;
SETFLOAT(&dollarnull, canvas_getdollarzero());
- while(i--)buf2[i]=0;
/* JMZ: currently, a symbol is detected to be A_DOLLSYM if it starts with '$'
* the leading $ is stripped and the rest stored in "s". i would suggest to NOT strip the leading $
--- 1926,1934 ----
/* LATER remove the dependence on the current canvas for $0; should be another argument. */
t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av, int tonew) {
! ostringstream buf2;
! char *str=s->name;
! int next=0;
t_atom dollarnull;
SETFLOAT(&dollarnull, canvas_getdollarzero());
/* JMZ: currently, a symbol is detected to be A_DOLLSYM if it starts with '$'
* the leading $ is stripped and the rest stored in "s". i would suggest to NOT strip the leading $
***************
*** 1934,1958 ****
char *substr=strchr(str, '$');
if(!substr || substr-str >= MAXPDSTRING) return s;
! strncat(buf2, str, (substr-str));
str=substr+1;
! while((next=binbuf_expanddollsym(str, buf, dollarnull, ac, av, tonew))>=0) {
/* JMZ: i am not sure what this means, so i might have broken it. it seems like that if "tonew" is
! set and the $arg cannot be expanded (or the dollarsym is in reality a A_DOLLAR).
! 0 is returned from binbuf_realizedollsym; this happens when expanding in a message-box,
! but does not happen when the A_DOLLSYM is the name of a subpatch */
/* JMZ: this should mimick the original behaviour */
! if(!tonew && !next && !*buf) return 0;
! strncat(buf2, buf, MAXPDSTRING/2-1);
str+=next;
substr=strchr(str, '$');
if(substr) {
! strncat(buf2, str, (substr-str));
str=substr+1;
} else {
! strcat(buf2, str);
! return gensym(buf2);
}
}
! return gensym(buf2);
}
--- 1936,1963 ----
char *substr=strchr(str, '$');
if(!substr || substr-str >= MAXPDSTRING) return s;
! oprintf(buf2,"%.*s",substr-str,str);
str=substr+1;
! for (;;) {
! std::ostringstream buf;
! next=binbuf_expanddollsym(str, buf, dollarnull, ac, av, tonew);
! if (next<0) break;
/* JMZ: i am not sure what this means, so i might have broken it. it seems like that if "tonew" is
! set and the $arg cannot be expanded (or the dollarsym is in reality a A_DOLLAR).
! 0 is returned from binbuf_realizedollsym; this happens when expanding in a message-box,
! but does not happen when the A_DOLLSYM is the name of a subpatch */
/* JMZ: this should mimick the original behaviour */
! if(!tonew && !next && buf.str().size()==0) return 0;
! buf2 << buf;
str+=next;
substr=strchr(str, '$');
if(substr) {
! oprintf(buf2,"%.*s",substr-str,str);
str=substr+1;
} else {
! buf2 << str;
! return gensym(buf2.str().data());
}
}
! return gensym(buf2.str().data());
}
Index: desire.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/desire.h,v
retrieving revision 1.1.2.49.2.31
retrieving revision 1.1.2.49.2.32
diff -C2 -d -r1.1.2.49.2.31 -r1.1.2.49.2.32
*** desire.h 15 Jul 2007 05:37:09 -0000 1.1.2.49.2.31
--- desire.h 18 Jul 2007 20:23:15 -0000 1.1.2.49.2.32
***************
*** 325,331 ****
--- 325,333 ----
#ifdef PD_PLUSPLUS_FACE
+ #include<iostream>
template <class T> static T min(T a, T b) {return a<b?a:b;}
template <class T> static T max(T a, T b) {return a>b?a:b;}
template <class T> T clip(T a, T b, T c) {return min(max(a,b),c);}
+ void oprintf(std::ostream &buf, const char *s, ...);
#endif
More information about the Pd-cvs
mailing list