Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4655
Modified Files: Tag: desiredata builtins.c Log Message: new object class [unpost]
Index: builtins.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/builtins.c,v retrieving revision 1.1.2.21 retrieving revision 1.1.2.22 diff -C2 -d -r1.1.2.21 -r1.1.2.22 *** builtins.c 28 Jun 2007 22:56:53 -0000 1.1.2.21 --- builtins.c 30 Jun 2007 02:22:29 -0000 1.1.2.22 *************** *** 2887,2893 ****
static t_class *timer_class; ! struct t_timer : t_object { ! double settime; ! }; static void timer_bang(t_timer *x) { x->settime = clock_getsystime(); --- 2887,2891 ----
static t_class *timer_class; ! struct t_timer : t_object {double settime;}; static void timer_bang(t_timer *x) { x->settime = clock_getsystime(); *************** *** 3076,3079 **** --- 3074,3126 ---- }
+ static t_class *unpost_class; + struct t_unpost : t_object { + t_outlet *o0,*o1; + char buf[MAXPDSTRING]; + }; + static t_unpost *current_unpost; + + void *unpost_new (t_symbol *s) { + t_unpost *x = (t_unpost *)pd_new(unpost_class); + x->o0 = outlet_new(x,&s_symbol); + x->o1 = outlet_new(x,&s_symbol); + return x; + } + extern t_printhook sys_printhook; + void unpost_printhook (const char *s) { + char *b = current_unpost->buf; + size_t n = strlen(b); + snprintf(b+n,MAXPDSTRING-n,"%s",s); + b[MAXPDSTRING-1]=0; + char *p; + for (;;) { + p = strchr(b+n,'\n'); + if (!p) break; + fprintf(stderr,"pos=%d len=%d\n",b-current_unpost->buf,p-b); + fprintf(stderr,"data=%.*s\n",p-b,b); + t_symbol *s = gensym2(b,p-b); + fprintf(stderr," sym=%.*s\n",s->s_name); + outlet_symbol(current_unpost->o1,s); + b=p+1; + } + char *q = strdup(b); /* well i could use memmove, but i'm not supposed to use strcpy because of overlap */ + strcpy(current_unpost->buf,q); + free(q); + } + void unpost_anything (t_unpost *x, t_symbol *s, int argc, t_atom *argv) { + t_printhook backup1 = sys_printhook; + t_unpost *backup2 = current_unpost; + sys_printhook = unpost_printhook; + current_unpost = x; + x->buf[0] = 0; + outlet_anything(x->o0,s,argc,argv); + sys_printhook = backup1; + current_unpost = backup2; + } + + static void unpost_setup() { + unpost_class = class_new2("unpost",unpost_new,0,sizeof(t_unpost),0,""); + class_addanything(unpost_class, unpost_anything); + }
void builtins_setup() { *************** *** 3152,3154 **** --- 3199,3202 ---- arithmetic_setup(); midi_setup(); + unpost_setup(); }