From c0d5ee6a61e22f89267a5a1e1ff04b87d79b6b25 Mon Sep 17 00:00:00 2001 From: jdl Date: Sat, 1 Mar 2003 18:37:24 +0000 Subject: reintroduced configure to this package ... svn path=/trunk/externals/cxc/; revision=445 --- split.c | 163 +++++++++++++++++++++------------------------------------------- 1 file changed, 52 insertions(+), 111 deletions(-) (limited to 'split.c') diff --git a/split.c b/split.c index e3d57a1..08dcca2 100644 --- a/split.c +++ b/split.c @@ -1,5 +1,6 @@ #include #include +#include #include #ifdef NT #pragma warning( disable : 4244 ) @@ -14,6 +15,9 @@ /* ------------------------ split ----------------------------- */ +// why have to do this? +void split_anything(); + static t_class *split_class; @@ -39,7 +43,7 @@ int split_string_isnum(char* s) while((tc = *s++) != '\0') { // tc= s; switch(tc) { - case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: + case 46: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // post("yo numba: %c", tc); break; default: @@ -50,117 +54,54 @@ int split_string_isnum(char* s) return 1; } -float split_string2float(char* s) -{ - // check for '.' ... - int isnum = 1, cnt = strlen(s) - 1; - char tc; - int iret = 0, itmp = 0; - double factor = 10.; - float fret; - while((tc = *s++) != '\0') { - // tc= s; - switch(tc) { - case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: - itmp = (int)pow(factor, (double)cnt); - // post("tempchar: %c, iret: %d, itmp: %d", tc, iret, itmp); - iret = iret + ((tc - 48) * itmp); - // post("tempchar: %c, iret: %d, cnt: %d", tc, iret, cnt); - break; - default: - break; - } - cnt--; - } - return (float)iret; -} - void split_anything(t_split *x,t_symbol* s,t_int argc,t_atom* argv) { - int i = argc; int j; - t_symbol* cur; - t_atom a_out[256]; - int c_out = 0; - t_atom* a = a_out; - // char *str; - char u[MAXPDSTRING]; - char v[MAXPDSTRING]; - // char *v; - u[0] = '\0'; - v[0] = '\0'; - int isnum = 1; - float tf; - - for(j=0; js_name); j++) { - u[0] = s->s_name[j]; - if(u[0] == x->x_splitter->s_name[0]) { - if(v[0] != '\0') { - // check if string is digits only - if(split_string_isnum(v)) { - split_string2float(v); - tf = split_string2float(v); - SETFLOAT(a, tf); - // tf = 0.0; - } - else { - SETSYMBOL(a, gensym(v)); - } - a++; c_out++; - // reset stuff - v[0] = '\0'; - isnum = 1; - } // v[0] != '\0' - } else { -/* if(!(48 <= u[0] <= 57)) { */ -/* isnum = 0; */ -/* } */ - strncat(v, u, 1); - } // char matches splitter - } - - // have to do this again here, damn. - if(split_string_isnum(v)) { - split_string2float(v); - tf = split_string2float(v); - SETFLOAT(a, tf); - tf = 0.0; - } - else { - SETSYMBOL(a, gensym(v)); - } - a++, c_out++; - - -/* #if 1 */ -/* // post("sym: %s",s->s_name); */ -/* SETSYMBOL(a,s); */ -/* a++; */ -/* c_out++; */ -/* #endif */ - -/* while (i--) { */ -/* switch( argv->a_type) { */ -/* case A_FLOAT: */ -/* // post("flo: %f",atom_getfloat(argv)); */ -/* SETFLOAT(a,atom_getfloat(argv)); */ -/* a++; */ -/* c_out++; */ -/* break; */ -/* case A_SYMBOL: */ -/* // post("sym: %s",atom_getsymbol(argv)->s_name); */ -/* SETSYMBOL(a,atom_getsymbol(argv)); */ -/* a++; */ -/* c_out++; */ -/* break; */ -/* default: */ -/* post("split.c: unknown type"); */ -/* } */ -/* argv++; */ -/* } */ - - outlet_list(x->x_obj.ob_outlet, &s_list, c_out, (t_atom*)&a_out); - // outlet_anything(x->x_obj.ob_outlet,gensym("list"),c_out,(t_atom*)&a_out); -/* //post("done"); */ + int i = argc; int j; + t_symbol* cur; + t_atom a_out[256]; + int c_out = 0; + t_atom* a = a_out; + // char *str; + char u[MAXPDSTRING]; + char v[MAXPDSTRING]; + // char *v; + u[0] = '\0'; + v[0] = '\0'; + int isnum = 1; + // float tf; + + for(j=0; js_name); j++) { + u[0] = s->s_name[j]; + if(u[0] == x->x_splitter->s_name[0]) { + if(v[0] != '\0') { // delimiter is first character + // check if string is digits only + if(split_string_isnum(v)) { + SETFLOAT(a, (float)atof(v)); + } + else { + SETSYMBOL(a, gensym(v)); + } + a++; c_out++; + // reset stuff + v[0] = '\0'; + isnum = 1; + } // v[0] != '\0' + } else { + strncat(v, u, 1); + } // char matches splitter + } + + // have to do this again here, damn. + if(split_string_isnum(v)) { + SETFLOAT(a, (float)atof(v)); + } + else { + SETSYMBOL(a, gensym(v)); + } + a++, c_out++; + + outlet_list(x->x_obj.ob_outlet, &s_list, c_out, (t_atom*)&a_out); + // outlet_anything(x->x_obj.ob_outlet,gensym("list"),c_out,(t_atom*)&a_out); } void split_list(t_split *x,t_symbol* s,t_int argc,t_atom* argv) @@ -226,7 +167,7 @@ void split_setup(void) { split_class = class_new(gensym("cxc.split"), (t_newmethod)split_new, 0, sizeof(t_split), 0,A_DEFSYM,NULL); - class_addlist(split_class, split_list); + // class_addlist(split_class, split_list); class_addanything(split_class,split_anything); class_addmethod(split_class, (t_method)split_set, gensym("set"), A_SYMBOL, 0); class_addsymbol(split_class, split_symbol); -- cgit v1.2.1