diff options
Diffstat (limited to 'kalashnikov.c')
-rw-r--r-- | kalashnikov.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/kalashnikov.c b/kalashnikov.c new file mode 100644 index 0000000..f4ee3a1 --- /dev/null +++ b/kalashnikov.c @@ -0,0 +1,59 @@ +#include "ext13.h" +#include "m_pd.h" +/*#include "g_canvas.h"*/ +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif + +/* -------------------------- kalashnikov ------------------------------ */ +static t_class *kalashnikov_class; + +typedef struct _kalashnikov +{ + t_object x_obj; + t_float x_f; + t_outlet *x_out2; + t_outlet *x_out3; +} t_kalashnikov; + +static void *kalashnikov_new(t_floatarg f) +{ + t_kalashnikov *x = (t_kalashnikov *)pd_new(kalashnikov_class); + x->x_f = f; + outlet_new(&x->x_obj, &s_bang); + x->x_out3 = outlet_new(&x->x_obj, &s_float); + x->x_out2 = outlet_new(&x->x_obj, &s_bang); + floatinlet_new(&x->x_obj, &x->x_f); + return (x); +} + +static void kalashnikov_bang(t_kalashnikov *x) +{ + int count; + for (count=x->x_f;count>0;count--){ + outlet_bang(x->x_obj.ob_outlet); + outlet_float(x->x_out3, x->x_f-count); + } + outlet_bang(x->x_out2); +} + +static void kalashnikov_float(t_kalashnikov *x, t_float f) +{ + int count; + x->x_f=f; + for (count=f;count>0;count--){ + outlet_bang(x->x_obj.ob_outlet); + outlet_float(x->x_out3, f-count); + } + outlet_bang(x->x_out2); +} + +void kalashnikov_setup(void) +{ + kalashnikov_class = class_new(gensym("kalashnikov"), (t_newmethod)kalashnikov_new, 0, + sizeof(t_kalashnikov), 0, A_DEFFLOAT, 0); + class_addcreator((t_newmethod)kalashnikov_new, gensym("uzi"), A_DEFFLOAT, 0); + class_addbang(kalashnikov_class, kalashnikov_bang); + class_addfloat(kalashnikov_class, kalashnikov_float); +} |