Beispiel #1
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;
                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
}
Beispiel #2
0
const char *
ex_symname(fts_symbol_t s)
{
        if (!s)
            return (0);
        return (fts_symbol_name(s));
}
Beispiel #3
0
/*
 * 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);
}
Beispiel #4
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
}
Beispiel #5
0
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
}
Beispiel #6
0
const char *
ex_symname(fts_symbol_t s)
{
        return (fts_symbol_name(s));
}