aboutsummaryrefslogtreecommitdiff
path: root/split.c
diff options
context:
space:
mode:
Diffstat (limited to 'split.c')
-rw-r--r--split.c163
1 files changed, 52 insertions, 111 deletions
diff --git a/split.c b/split.c
index e3d57a1..08dcca2 100644
--- a/split.c
+++ b/split.c
@@ -1,5 +1,6 @@
#include <m_pd.h>
#include <string.h>
+#include <stdlib.h>
#include <math.h>
#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; j<strlen(s->s_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; j<strlen(s->s_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);