Example #1
0
File: ref.c Project: Luckyncl/3rd
int sporth_ref(sporth_stack *stack, void *ud)
{
    plumber_data *pd = ud;
    char *str;
    switch(pd->mode) {
        case PLUMBER_CREATE: 
            plumber_add_ugen(pd, SPORTH_REF, NULL);
            if(sporth_check_args(stack, "s") != SPORTH_OK) {
                stack->error++;
                fprintf(stderr, "ref: Invalid arguments.");
                return PLUMBER_NOTOK;
            }
            sporth_stack_pop_string(stack);
            break;
        case PLUMBER_INIT: 
            str = sporth_stack_pop_string(stack);
            plumber_ftmap_delete(pd, 0);
            /* get reference of the *next* pipe in the plumbing */
            plumber_ftmap_add_userdata(pd, str, pd->next->ud);
            plumber_ftmap_delete(pd, 1);
            break;
        case PLUMBER_COMPUTE: 
            break;
        case PLUMBER_DESTROY: 
            break;
    }
    return PLUMBER_OK;
}
Example #2
0
File: p.c Project: aure/Sporth
int sporth_palias(sporth_stack *stack, void *ud)
{
    plumber_data *pd = ud;
    char *name;
    int id;
    SPFLOAT *foo;

    switch(pd->mode) {
        case PLUMBER_CREATE:
            plumber_add_ugen(pd, SPORTH_PALIAS, NULL);
            if(sporth_check_args(stack, "sf") != SPORTH_OK) {
                fprintf(stderr,"palias: Not enough arguments\n");
                stack->error++;
                return PLUMBER_NOTOK;
            }
            id = floor(sporth_stack_pop_float(stack));
            name = sporth_stack_pop_string(stack);
            foo = &pd->p[id];
            plumber_ftmap_delete(pd, 0);
            plumber_set_var(pd, name, foo);
            plumber_ftmap_delete(pd, 1);
            break;
        case PLUMBER_INIT:
            sporth_stack_pop_float(stack);
            sporth_stack_pop_string(stack);
            break;
        case PLUMBER_COMPUTE:
            sporth_stack_pop_float(stack);
            break;
        default:
            break;
    }

    return PLUMBER_OK;
}
Example #3
0
int sporth_talias(sporth_stack *stack, void *ud)
{
    plumber_data *pd = ud;

    char *ftname;
    char *varname;
    uint32_t index;
    SPFLOAT *var;
    sp_ftbl *ft;

    switch(pd->mode){
        case PLUMBER_CREATE:
            plumber_add_ugen(pd, SPORTH_TALIAS, NULL);
            if(sporth_check_args(stack, "sfs") != SPORTH_OK) {
               plumber_print(pd,"Init: incorrect arguments for talias\n");
                return PLUMBER_NOTOK;
            }
            ftname = sporth_stack_pop_string(stack);
            index = sporth_stack_pop_float(stack);
            varname = sporth_stack_pop_string(stack);

            if(plumber_ftmap_search(pd, ftname, &ft) == PLUMBER_NOTOK) {
                plumber_print(pd, "talias: could not find table '%s'\n", ftname);
                stack->error++;
                return PLUMBER_NOTOK;
            }
           
            var = &ft->tbl[index];

            plumber_ftmap_delete(pd, 0);
            plumber_ftmap_add_userdata(pd, varname, var);
            plumber_ftmap_delete(pd, 1);

            break;

        case PLUMBER_INIT:
            ftname = sporth_stack_pop_string(stack);
            index = sporth_stack_pop_float(stack);
            varname = sporth_stack_pop_string(stack);
            break;

        case PLUMBER_COMPUTE:
            sporth_stack_pop_float(stack);
            break;

        case PLUMBER_DESTROY:
            break;
    }
    return PLUMBER_OK;
}
Example #4
0
int main() 
{
    UserData ud;

    /* allocate and initialize */
    sp_create(&ud.sp);
    plumber_register(&ud.pd);
    plumber_init(&ud.pd);

    /* create an ftable with a size 1, which will be expanded with gen_vals */
    sp_ftbl_create(ud.sp, &ud.seq, 1);
    /* Gen_vals will create a table from a string of numbers */
    sp_gen_vals(ud.sp, ud.seq, "60 63 67 72");
    
    /* Sporth code to be parsed, using a ftable generated in c called 'seq' */
    char *str = 
        "0.1 dmetro "
        "0 'seq' tseq "
        "0.01 port mtof "
        "0.5 1 1 1 fm";

    /* Tell plumber that that we will take care of removing the following ftables */
    /* This is needed for persistant ftables that don't get cleaned for 
     * recompilation */
    plumber_ftmap_delete(&ud.pd, 0);
    /* add ftable to plumber and call it "seq" */
    plumber_ftmap_add(&ud.pd, "seq", ud.seq);
    /* Turn automatic deletion back "on" */
    plumber_ftmap_delete(&ud.pd, 1);

    /* make plumber know about the soundpipe instance */
    ud.pd.sp = ud.sp;

    /* parse string and allocate plumbing */
    plumber_parse_string(&ud.pd, str);

    /* initialize the plumbing */
    plumber_compute(&ud.pd, PLUMBER_INIT);
    /* run */
    sp_process(ud.sp, &ud, process);
    /* Cleanup */
    /* Plumber will handle freeing the memory of the ftable we added */
    /* no need to call sp_ftbl_destroy */
    plumber_clean(&ud.pd);
    sp_ftbl_destroy(&ud.seq);
    sp_destroy(&ud.sp);
    return 0;
}
Example #5
0
int plumber_init(plumber_data *plumb)
{
    plumb->mode = PLUMBER_CREATE;
    plumb->current_pipe = 0;
    plumb->ftmap = plumb->ft1;
    plumb->pipes= &plumb->main;
    plumb->tmp = &plumb->main;
    plumbing_init(plumb->pipes);
    plumb->nchan = 1;
    sporth_stack_init(&plumb->sporth.stack);
    plumber_ftmap_delete(plumb, 1);
    plumber_ftmap_init(plumb);
    plumb->seed = (int) time(NULL);
    plumb->fp = NULL;
    int pos;
    for(pos = 0; pos < 16; pos++) plumb->p[pos] = 0;
    for(pos = 0; pos < 16; pos++) plumb->f[pos] = sporth_f_default;
    return PLUMBER_OK;
}