void ex_avg(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr) { /* SDY - look into this function */ #if 0 fts_symbol_t s; fts_integer_vector_t *tw = 0; if (argv->ex_type != ET_SYM) { post("expr: avg: need a table name\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } s = (fts_symbol_t ) argv->ex_ptr; tw = table_integer_vector_get_by_name(s); if (tw) { optr->ex_type = ET_INT; if (! fts_integer_vector_get_size(tw)) optr->ex_int = 0; else optr->ex_int = fts_integer_vector_get_sum(tw) / fts_integer_vector_get_size(tw); } else { optr->ex_type = ET_INT; optr->ex_int = 0; post("expr: avg: no such table %s\n", fts_symbol_name(s)); } #endif }
const char * ex_symname(fts_symbol_t s) { if (!s) return (0); return (fts_symbol_name(s)); }
/* * max_ex_tab -- evaluate this table access * eptr is the name of the table and arg is the index we * have to put the result in optr * return 1 on error and 0 otherwise * * Arguments: * the expr object * table * the argument * the result pointer */ int max_ex_tab(struct expr *expr, fts_symbol_t s, struct ex_ex *arg, struct ex_ex *optr) { #ifdef PD t_garray *garray; int size, indx; t_word *wvec; if (!s || !(garray = (t_garray *)pd_findbyclass(s, garray_class)) || !garray_getfloatwords(garray, &size, &wvec)) { optr->ex_type = ET_FLT; optr->ex_flt = 0; pd_error(expr, "no such table '%s'", s->s_name); return (1); } optr->ex_type = ET_FLT; switch (arg->ex_type) { case ET_INT: indx = arg->ex_int; break; case ET_FLT: /* strange interpolation code deleted here -msp */ indx = arg->ex_flt; break; default: /* do something with strings */ pd_error(expr, "expr: bad argument for table '%s'\n", fts_symbol_name(s)); indx = 0; } if (indx < 0) indx = 0; else if (indx >= size) indx = size - 1; optr->ex_flt = wvec[indx].w_float; #else /* MSP */ /* * table lookup not done for MSP yet */ post("max_ex_tab: not complete for MSP yet!"); optr->ex_type = ET_FLT; optr->ex_flt = 0; #endif return (0); }
void ex_Avg(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr) { /* SDY - look into this function */ #if 0 fts_symbol_t s; fts_integer_vector_t *tw = 0; if (argv->ex_type != ET_SYM) { post("expr: Avg: need a table name\n"); optr->ex_type = ET_INT; optr->ex_int = 0; } s = (fts_symbol_t ) (argv++)->ex_ptr; tw = table_integer_vector_get_by_name(s); if (! tw) { optr->ex_type = ET_INT; optr->ex_int = 0; post("expr: Avg: no such table %s\n", fts_symbol_name(s)); return; } if (argv->ex_type != ET_INT || argv[1].ex_type != ET_INT) { post("expr: Avg: boundries have to be fix values\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } optr->ex_type = ET_INT; if (argv[1].ex_int - argv->ex_int <= 0) optr->ex_int = 0; else optr->ex_int = (fts_integer_vector_get_sub_sum(tw, argv->ex_int, argv[1].ex_int) / (argv[1].ex_int - argv->ex_int)); #endif }
void ex_store(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr) { /* SDY - look into this function */ #if 0 fts_symbol_t s; fts_integer_vector_t *tw = 0; if (argv->ex_type != ET_SYM) { post("expr: store: need a table name\n"); } s = (fts_symbol_t ) (argv++)->ex_ptr; tw = table_integer_vector_get_by_name(s); if (! tw) { optr->ex_type = ET_INT; optr->ex_int = 0; post("expr: store: no such table %s\n", fts_symbol_name(s)); return; } if (argv->ex_type != ET_INT || argv[1].ex_type != ET_INT) { post("expr: store: arguments have to be integer\n"); optr->ex_type = ET_INT; optr->ex_int = 0; } fts_integer_vector_set_element(tw, argv->ex_int < 0 ? 0 : argv->ex_int % fts_integer_vector_get_size(tw), argv[1].ex_int); *optr = argv[1]; #endif }
const char * ex_symname(fts_symbol_t s) { return (fts_symbol_name(s)); }