From 992bd94dddb021b297fcf28cb5248cc94f48aaf3 Mon Sep 17 00:00:00 2001 From: jdl Date: Tue, 2 Jul 2002 20:32:59 +0000 Subject: This commit was generated by cvs2svn to compensate for changes in r24, which included commits to RCS files with non-trunk default branches. svn path=/trunk/externals/cxc/; revision=25 --- ascseq.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 ascseq.c (limited to 'ascseq.c') diff --git a/ascseq.c b/ascseq.c new file mode 100644 index 0000000..1cdc6d5 --- /dev/null +++ b/ascseq.c @@ -0,0 +1,144 @@ +/* ascii-sequencer + input lists, strings, anythings, output every characters ascii code + jdl@xdv.org 2002 +*/ + +#include "m_pd.h" +#include +#include +#include + +#define MAXMSGLEN 1024 +#define LISTSEL "list" + +t_class *ascseq_class; + +typedef struct ascseq +{ + t_object x_obj; + t_clock *x_clock; + double x_targettime; + double x_prevtime; + t_float x_grain; + char x_bla[MAXMSGLEN]; + int x_toklen; + int x_tokcur; +} t_ascseq; + +static void ascseq_tick(t_ascseq *x) +{ + double timenow = clock_getsystime(); + double msectogo = - clock_gettimesince(x->x_targettime); + int chr; + // post("ascseq: timenow: %f",timenow); + if(x->x_tokcur >= x->x_toklen) { + clock_unset(x->x_clock); + x->x_tokcur = 0; + return; + } else { + chr = x->x_bla[x->x_tokcur]; + // post("tokcur: %c",chr); + x->x_tokcur++; + outlet_float(x->x_obj.ob_outlet, chr); + clock_delay(x->x_clock,x->x_grain); + } +} + +void ascseq_anything(t_ascseq *x,t_symbol* s,t_int argc,t_atom* argv) +{ + int i = argc; + int chr, cnt, len; + char tmp[MAXMSGLEN]; + double timenow = clock_getlogicaltime(); + + chr = 0; + cnt = 0; + len = 0; + x->x_bla[0] = '\0'; + + //symbol_string(s->s_name, tmp, 1024); + if(!strstr(s->s_name,LISTSEL)) { + strcat(x->x_bla,s->s_name); + // post("tmp: %s",x->x_bla); + } + + while (i--) { + atom_string(argv, tmp, 1024); + strcat(x->x_bla,tmp); + // post("ascseq.c: argsize: %d",cnt); + // post("ascseq.c: bla: %s",bla); + argv++; + } + x->x_prevtime = timenow; + x->x_targettime = clock_getsystimeafter(x->x_grain); + + x->x_toklen = strlen(x->x_bla); + ascseq_tick(x); + +/* for(cnt=0;cntx_bla[cnt]; */ +/* outlet_float(x->x_obj.ob_outlet, chr); */ +/* } */ +} + +void ascseq_float(t_ascseq *x, t_floatarg f) +{ + int chr, cnt, len; + double timenow = clock_getlogicaltime(); + + chr = 0; + cnt = 0; + len = 0; + x->x_bla[0] = '\0'; + + x->x_prevtime = timenow; + x->x_targettime = clock_getsystimeafter(x->x_grain); + + sprintf(x->x_bla,"%f",f); + x->x_toklen = strlen(x->x_bla); + + ascseq_tick(x); + +/* for(cnt=0;cntx_bla[cnt]; */ +/* outlet_float(x->x_obj.ob_outlet, chr); */ +/* // clock_delay(x->x_clock,1000.); */ + /* } */ +} + +static void ascseq_ft1(t_ascseq *x, t_floatarg g) +{ + if (g < 0) g = 0; + if (!g) g = 0; + x->x_grain = g; +} + +void ascseq_free(t_ascseq *x) +{ + clock_free(x->x_clock); + // post("ascseq_free"); +} + +void *ascseq_new(t_floatarg f) +{ + t_ascseq *x = (t_ascseq *)pd_new(ascseq_class); + ascseq_ft1(x,f); + x->x_clock = clock_new(x, (t_method)ascseq_tick); + x->x_targettime = x->x_prevtime = clock_getlogicaltime(); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1")); + outlet_new(&x->x_obj, &s_float); + return (void *)x; +} + +void ascseq_setup(void) +{ + // post("ascseq_setup"); + ascseq_class = class_new(gensym("ascseq"), (t_newmethod)ascseq_new, + (t_method)ascseq_free, sizeof(t_ascseq), 0, A_DEFFLOAT, 0); + class_addlist(ascseq_class, ascseq_anything); + class_addanything(ascseq_class,ascseq_anything); + class_addfloat(ascseq_class, ascseq_float); + class_addmethod(ascseq_class, (t_method)ascseq_ft1, gensym("ft1"), A_FLOAT, 0); +} -- cgit v1.2.1