From eee4c6f1906ab4bdc33b45fe9a701b107d2f2b73 Mon Sep 17 00:00:00 2001 From: Guenter Geiger Date: Thu, 24 Feb 2005 15:21:56 +0000 Subject: added getdir and threw out g_canvas from places where it is not needed svn path=/trunk/externals/ggee/; revision=2581 --- control/getdir.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 control/getdir.c (limited to 'control') diff --git a/control/getdir.c b/control/getdir.c new file mode 100644 index 0000000..5a13a48 --- /dev/null +++ b/control/getdir.c @@ -0,0 +1,55 @@ +/* (C) 2005 Guenter Geiger */ + +#include "m_pd.h" + +// HACK !!! +struct _glist +{ + t_object gl_obj; /* header in case we're a glist */ + t_gobj *gl_list; /* the actual data */ + struct _gstub *gl_stub; /* safe pointer handler */ + int gl_valid; /* incremented when pointers might be stale */ + struct _glist *gl_owner; /* parent glist, supercanvas, or 0 if none */ +}; +// END HACK !!! + + +typedef struct getdir +{ + t_object x_ob; + t_canvas * x_canvas; + t_outlet* x_outlet; + int x_level; +} t_getdir; + + +static void getdir_bang(t_getdir *x) +{ + int i = x->x_level; + t_canvas* last = x->x_canvas; + do { + i--; + last = last->gl_owner; + } while (last && i); + + outlet_symbol(x->x_outlet,canvas_getdir(last)); +} + +t_class *getdir_class; + +static void *getdir_new(t_floatarg level) +{ + t_getdir *x = (t_getdir *)pd_new(getdir_class); + x->x_canvas = canvas_getcurrent(); + x->x_outlet = outlet_new(&x->x_ob, &s_); + x->x_level = level; + return (void *)x; +} + +void getdir_setup(void) +{ + getdir_class = class_new(gensym("getdir"), (t_newmethod)getdir_new, 0, + sizeof(t_getdir), 0, A_DEFFLOAT,0); + class_addbang(getdir_class, getdir_bang); +} + -- cgit v1.2.1