#include #include #include #include "g_canvas.h" #define DEBUG(x) static t_class *sys_gui_class; typedef struct _sys_gui { t_object x_obj; t_symbol* x_receive_symbol; t_outlet* x_outlet; char *send_buffer; } t_sys_gui; static void sys_gui_send_finished(t_sys_gui *x) { char message[MAXPDSTRING]; sprintf(message,"pdsend \"%s finished\";", x->x_receive_symbol->s_name ); sys_gui(message); } static void sys_gui_bang(t_sys_gui *x) { sys_gui(x->send_buffer); sys_gui_send_finished(x); } static void sys_gui_finished(t_sys_gui *x) { outlet_bang(x->x_outlet); } static void sys_gui_anything(t_sys_gui *x, t_symbol *s, int argc, t_atom *argv) { DEBUG(post("sys_gui_anything");); int i = 0; char buf[MAXPDSTRING]; snprintf(x->send_buffer, MAXPDSTRING, "%s ", s->s_name); for(i=0;isend_buffer, buf, MAXPDSTRING - strlen(x->send_buffer)); strncat(x->send_buffer, " ", MAXPDSTRING - strlen(x->send_buffer)); } strncat(x->send_buffer, " ;\n", 3); sys_gui(x->send_buffer); sys_gui_send_finished(x); } static void sys_gui_list(t_sys_gui *x, t_symbol *s, int argc, t_atom *argv) { DEBUG(post("sys_gui_list");); int i = 0; char buf[MAXPDSTRING]; for(i=0;isend_buffer, buf, MAXPDSTRING - strlen(x->send_buffer)); strncat(x->send_buffer, " ", MAXPDSTRING - strlen(x->send_buffer)); } strncat(x->send_buffer, " ;\n", MAXPDSTRING - strlen(x->send_buffer)); sys_gui(x->send_buffer); sys_gui_send_finished(x); } static void sys_gui_free(t_sys_gui *x) { pd_unbind(&x->x_obj.ob_pd, x->x_receive_symbol); freebytes(x->send_buffer,MAXPDSTRING); } static void *sys_gui_new(t_symbol *s) { t_sys_gui *x = (t_sys_gui *)pd_new(sys_gui_class); x->x_outlet = outlet_new(&x->x_obj, &s_anything); char buf[MAXPDSTRING]; sprintf(buf, "#%lx", (t_int)x); x->x_receive_symbol = gensym(buf); pd_bind(&x->x_obj.ob_pd, x->x_receive_symbol); x->send_buffer = (char *)getbytes(MAXPDSTRING); return(x); } void sys_gui_setup(void) { sys_gui_class = class_new( gensym("sys_gui"), (t_newmethod)sys_gui_new, (t_method)sys_gui_free, sizeof(t_sys_gui), 0, 0); class_addanything(sys_gui_class, (t_method)sys_gui_anything); class_addbang(sys_gui_class, (t_method)sys_gui_bang); class_addlist(sys_gui_class, (t_method)sys_gui_list); class_addmethod(sys_gui_class, (t_method)sys_gui_finished, gensym("finished"), 0); }