aboutsummaryrefslogtreecommitdiff
path: root/sys_gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys_gui.c')
-rw-r--r--sys_gui.c39
1 files changed, 34 insertions, 5 deletions
diff --git a/sys_gui.c b/sys_gui.c
index 570e1ea..578e3f5 100644
--- a/sys_gui.c
+++ b/sys_gui.c
@@ -10,12 +10,27 @@ 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)
@@ -33,6 +48,7 @@ static void sys_gui_anything(t_sys_gui *x, t_symbol *s, int argc, t_atom *argv)
}
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)
@@ -47,20 +63,27 @@ static void sys_gui_list(t_sys_gui *x, t_symbol *s, int argc, t_atom *argv)
strncat(x->send_buffer, buf, MAXPDSTRING - strlen(x->send_buffer));
strncat(x->send_buffer, " ", MAXPDSTRING - strlen(x->send_buffer));
}
- strncat(x->send_buffer, " ;\n", 3);
+ 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);
- outlet_new(&x->x_obj, &s_anything);
x->send_buffer = (char *)getbytes(MAXPDSTRING);
return(x);
@@ -68,11 +91,17 @@ static void *sys_gui_new(t_symbol *s)
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);
+ 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);
}