void eobj_write(t_eobj* x, t_symbol* s, int argc, t_atom *argv) { char buf[MAXPDSTRING]; char* pch; t_atom av[1]; t_eclass* c = eobj_getclass(x); // The file name is defined if(argc && argv && atom_gettype(argv) == A_SYMBOL) { pch = strpbrk(atom_getsymbol(argv)->s_name, "/\""); // The folder seems defined if(pch != NULL) { atom_setsym(av, atom_getsymbol(argv)); if(c->c_widget.w_write) c->c_widget.w_write(x, s, 1, av); return; } // The folder isn't defined so write it in the canvas folder else { sprintf(buf, "%s/%s", canvas_getdir(x->o_canvas)->s_name, atom_getsymbol(argv)->s_name); atom_setsym(av, gensym(buf)); if(c->c_widget.w_write) c->c_widget.w_write(x, s, 1, av); return; } } // The file name is not defined so we popup a window else { sys_vgui("eobj_saveas %s nothing nothing\n", x->o_id->s_name); } }
void eobj_popup(t_eobj* x, t_symbol* s, float itemid) { t_eclass* c = eobj_getclass(x); if(c->c_widget.w_popup) { c->c_widget.w_popup(x, s, (long)itemid); } }
char eobj_isdsp(void *x) { t_eobj* z = (t_eobj *)x; t_eclass* c = eobj_getclass(z); if(c->c_dsp && c->c_widget.w_dsp) return 1; else return 0; }
void eobj_popup(t_eobj* x, t_symbol* s, float itemid) { t_epopup* popup; t_eclass* c = eobj_getclass(x); if(s && c->c_widget.w_popup) { popup = epopupmenu_getfromsymbol(s); if(popup) { c->c_widget.w_popup(x, popup, (long)itemid); } } }
void eobj_save(t_gobj* x, t_binbuf *b) { t_eclass* c; if(x && b) { c = eobj_getclass(x); if(c && c->c_widget.w_dosave != NULL) { c->c_widget.w_dosave((t_eobj* )x, b); } } }
void eobj_dosave(t_eobj* x, t_binbuf *b) { t_binbuf* d; t_eclass* c = eobj_getclass(x); if(c && b) { binbuf_addv(b, (char *)"ssii", &s__X, s_obj, (t_int)x->o_obj.te_xpix, (t_int)x->o_obj.te_ypix); d = x->o_obj.te_binbuf; if(d) { binbuf_addbinbuf(b, d); } if(c->c_widget.w_save != NULL) { c->c_widget.w_save(x, b); } binbuf_addv(b, (char *)";"); } }
void eobj_attrprocess_viabinbuf(void *x, t_binbuf *d) { int i; char attr_name[MAXPDSTRING]; int defc = 0; t_atom* defv = NULL; t_eclass* c = eobj_getclass(x); for(i = 0; i < c->c_nattr; i++) { sprintf(attr_name, "@%s", c->c_attr[i]->name->s_name); binbuf_get_attribute(d, gensym(attr_name), &defc, &defv); if(defc && defv) { eobj_attr_setvalueof(x, c->c_attr[i]->name, defc, defv); defc = 0; free(defv); defv = NULL; } } }
void eobj_attrprocess_viatoms(void *x, int argc, t_atom *argv) { int i; char buffer[MAXPDSTRING]; int defc = 0; t_atom* defv = NULL; t_eclass* c = eobj_getclass(x); for(i = 0; i < c->c_nattr; i++) { sprintf(buffer, "@%s", c->c_attr[i]->name->s_name); atoms_get_attribute(argc, argv, gensym(buffer), &defc, &defv); if(defc && defv) { eobj_attr_setvalueof(x, c->c_attr[i]->name, defc, defv); defc = 0; free(defv); defv = NULL; } } }
void eobj_dsp(void *x, t_signal **sp) { int i; short* count; t_int* temp; t_float **tempout, *tempreal; t_linetraverser t; t_outconnect *oc; t_eclass* c = eobj_getclass(x); t_edsp* dsp = eobj_getdsp(x); int nouts = obj_nsigoutlets((t_object *)x); int nins = obj_nsiginlets((t_object *)x); int samplesize; if(c && c->c_widget.w_dsp && dsp && (nins || nouts) && sp && sp[0]) { samplesize = sp[0]->s_n; dsp->d_perform_method = NULL; if(dsp->d_misc == E_NO_INPLACE) { if(dsp->d_sigs_out) { tempout = (t_float **)realloc(dsp->d_sigs_out, (size_t)nouts * sizeof(t_float *)); } else { tempout = (t_float **)malloc((size_t)nouts * sizeof(t_float *)); } if(!tempout) { if(dsp->d_sigs_out) { free(dsp->d_sigs_out); dsp->d_sigs_out = NULL; } pd_error(dsp, "can't allocate memory for ni inpace processing."); return; } dsp->d_sigs_out = tempout; if(dsp->d_sigs_real) { tempreal = (t_float *)realloc(dsp->d_sigs_real, (size_t)(nouts * samplesize) * sizeof(t_float)); } else { tempreal = (t_float *)malloc((size_t)(nouts * samplesize) * sizeof(t_float)); } if(!tempreal) { if(dsp->d_sigs_real) { free(dsp->d_sigs_real); dsp->d_sigs_real = NULL; } free(dsp->d_sigs_out); dsp->d_sigs_out = NULL; pd_error(dsp, "can't allocate memory for ni inpace processing."); return; } dsp->d_sigs_real = tempreal; for(i = 0; i < nouts; i++) { dsp->d_sigs_out[i] = dsp->d_sigs_real+i*samplesize; } } if(dsp->d_vectors) { temp = (t_int *)realloc(dsp->d_vectors, (size_t)(nins + nouts + 7) * sizeof(t_int)); } else { temp = (t_int *)malloc((size_t)(nins + nouts + 7) * sizeof(t_int)); } if(!temp) { if(dsp->d_vectors) { free(dsp->d_vectors); dsp->d_vectors = NULL; } free(dsp->d_sigs_real); dsp->d_sigs_real = NULL; free(dsp->d_sigs_out); dsp->d_sigs_out = NULL; dsp->d_size = 0; pd_error(x, "can't allocate memory for dsp vector."); return; } dsp->d_vectors = temp; dsp->d_size = nins + nouts + 7; count = (short*)malloc((size_t)(nins + nouts) * sizeof(short)); if(count) { for(i = 0; i < (nins + nouts); i++) { count[i] = 0; } linetraverser_start(&t, eobj_getcanvas(x)); while((oc = linetraverser_next(&t))) { if(t.tr_ob2 == x && obj_issignaloutlet(t.tr_ob, t.tr_outno)) { count[t.tr_inno] = 1; } } dsp->d_vectors[0] = (t_int)x; dsp->d_vectors[1] = (t_int)dsp; dsp->d_vectors[2] = (t_int)sp[0]->s_n; dsp->d_vectors[3] = (t_int)dsp->d_flags; dsp->d_vectors[4] = (t_int)dsp->d_user_param; dsp->d_vectors[5] = (t_int)nins; dsp->d_vectors[6] = (t_int)nouts; for(i = 7; i < dsp->d_size; i++) { if(sp[i - 7] && sp[i - 7]->s_vec) { dsp->d_vectors[i] = (t_int)(sp[i - 7]->s_vec); } else { free(count); free(dsp->d_vectors); dsp->d_vectors = NULL; free(dsp->d_sigs_real); dsp->d_sigs_real = NULL; free(dsp->d_sigs_out); dsp->d_sigs_out = NULL; dsp->d_size = 0; pd_error(x, "one of the signal isn't allocated."); return; } } c->c_widget.w_dsp(x, x, count, sp[0]->s_sr, sp[0]->s_n, 0); if(dsp->d_perform_method != NULL && dsp->d_misc == E_INPLACE) { dsp_addv(eobj_perform_inplace, (int)dsp->d_size, dsp->d_vectors); } else if(dsp->d_perform_method != NULL && dsp->d_misc == E_NO_INPLACE) { dsp_addv(eobj_perform_noinplace, (int)dsp->d_size, dsp->d_vectors); } free(count); return; } else { free(dsp->d_vectors); dsp->d_vectors = NULL; free(dsp->d_sigs_real); dsp->d_sigs_real = NULL; free(dsp->d_sigs_out); dsp->d_sigs_out = NULL; dsp->d_size = 0; pd_error(x, "can't allocate memory for dsp chain counter."); } } }
void eobj_read(t_eobj* x, t_symbol* s, int argc, t_atom *argv) { char buf[MAXPDSTRING]; char* pch; t_atom av[1]; t_namelist* var; t_eclass* c = eobj_getclass(x); // Name if(argc && argv && atom_gettype(argv) == A_SYMBOL) { // Valid path if((access(atom_getsymbol(argv)->s_name, O_RDONLY) != -1)) { if(c->c_widget.w_read) c->c_widget.w_read(x, s, 1, argv); } // Invalid path or no path else { // Wrong path but we don't care pch = strpbrk(atom_getsymbol(argv)->s_name, "/\""); if(pch != NULL) { if(c->c_widget.w_read) c->c_widget.w_read(x, s, 1, argv); } else { // Look in the canvas folder sprintf(buf, "%s/%s", canvas_getdir(x->o_canvas)->s_name, atom_getsymbol(argv)->s_name); if((access(buf, O_RDONLY) != -1)) { atom_setsym(av, gensym(buf)); if(c->c_widget.w_read) c->c_widget.w_read(x, s, 1, av); return; } // Look in the search path var = sys_searchpath; while (var) { sprintf(buf, "%s/%s", var->nl_string, atom_getsymbol(argv)->s_name); if((access(buf, O_RDONLY) != -1)) { atom_setsym(av, gensym(buf)); if(c->c_widget.w_read) c->c_widget.w_read(x, s, 1, av); return; } var = var->nl_next; } // Nothing work but we don't care if(c->c_widget.w_read) c->c_widget.w_read(x, s, 1, av); return; } } } // No name so we popup a window else { sys_vgui("eobj_openfrom %s\n", x->o_id->s_name); } }
void eobj_save(t_gobj* x, t_binbuf *b) { int i, state; int argc = 0; t_atom* argv = NULL; t_binbuf* d; t_object* z = (t_object *)x; t_ebox* y = (t_ebox *)z; t_eclass* c = eobj_getclass(x); char buffer[MAXPDSTRING]; if(x && b) { if(eobj_isbox(x)) { if(c && b) { state = canvas_suspend_dsp(); binbuf_addv(b, (char *)"ssiis", &s__X, s_cream_obj, (t_int)z->te_xpix, (t_int)z->te_ypix, eobj_getclassname(x)); for(i = 0; i < c->c_nattr; i++) { if(c->c_attr[i] && c->c_attr[i]->save && c->c_attr[i]->name) { eobj_attr_getvalueof(x, c->c_attr[i]->name, &argc, &argv); if(argc && argv) { if(!(argc == 1 && atom_gettype(argv) == A_SYMBOL && !is_valid_symbol(atom_getsymbol(argv)))) { snprintf(buffer, MAXPDSTRING, "@%s", c->c_attr[i]->name->s_name); binbuf_append_attribute(b, gensym(buffer), argc, argv); } argc = 0; free(argv); argv = NULL; } } } argv = (t_atom *)malloc(3 * sizeof(t_atom)); if(argv) { for(i = 0; i < y->b_nparams; i++) { if(y->b_params[i]) { snprintf(buffer, MAXPDSTRING, "@param%i", i); atom_setsym(argv, y->b_params[i]->p_name); atom_setsym(argv+1, y->b_params[i]->p_label); atom_setfloat(argv+2, y->b_params[i]->p_index); binbuf_append_attribute(b, gensym(buffer), 3, argv); } } } if(c->c_widget.w_save != NULL) { c->c_widget.w_save(x, b); } binbuf_addv(b, (char *)";"); canvas_resume_dsp(state); } } else { binbuf_addv(b, (char *)"ssii", &s__X, s_cream_obj, (t_int)z->te_xpix, (t_int)z->te_ypix); d = z->te_binbuf; if(d) { binbuf_addbinbuf(b, d); } if(c->c_widget.w_save != NULL) { c->c_widget.w_save(x, b); } binbuf_addv(b, (char *)";"); } } }
char eobj_isbox(void *x) { t_eobj* z = (t_eobj *)x; t_eclass* c = eobj_getclass(z); return c->c_box; }