static void new_inlet_list(t_inlet *x, t_symbol *s, int argc, t_atom *argv) { if (x->i_symfrom == &s_list || x->i_symfrom == &s_float || x->i_symfrom == &s_symbol || x->i_symfrom == &s_pointer) typedmess(x->i_dest, x->i_un.iu_symto, argc, argv); else if (*x->i_dest == eproxy_class) { t_eproxy* proxy = (t_eproxy *)x->i_dest; t_eobj *z = (t_eobj *)proxy->p_owner; z->o_current_proxy = proxy->p_index; pd_typedmess((t_pd *)x->i_dest, s, argc, argv); z->o_current_proxy = 0; } else if (!x->i_symfrom) { typedmess(x->i_dest, s, argc, argv); //pd_list(x->i_dest, s, argc, argv); } else if (!argc) new_inlet_bang(x); else if (argc==1 && argv->a_type == A_FLOAT) new_inlet_float(x, atom_getfloat(argv)); else if (argc==1 && argv->a_type == A_SYMBOL) new_inlet_symbol(x, atom_getsymbol(argv)); else inlet_wrong(x, &s_list); }
static void iem_event_key(void *z, t_floatarg fkey) { t_iem_event *x = z; char c = (char)fkey; if(x->x_gui.x_fsf.x_change) { if((c==0)) { x->x_gui.x_fsf.x_change = 0; } else if((c=='\n')||(c==13)) { x->x_gui.x_fsf.x_change = 0; SETFLOAT(x->x_at_out, 0.0f); outlet_anything(x->x_gui.x_obj.ob_outlet, x->x_key, 1, x->x_at_out); if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) typedmess(x->x_gui.x_snd->s_thing, x->x_key, 1, x->x_at_out); } else if((c=='\b')||(c==127)) { SETFLOAT(x->x_at_out, 127.0f); outlet_anything(x->x_gui.x_obj.ob_outlet, x->x_key, 1, x->x_at_out); if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) typedmess(x->x_gui.x_snd->s_thing, x->x_key, 1, x->x_at_out); } else { SETFLOAT(x->x_at_out, fkey); outlet_anything(x->x_gui.x_obj.ob_outlet, x->x_key, 1, x->x_at_out); if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) typedmess(x->x_gui.x_snd->s_thing, x->x_key, 1, x->x_at_out); } } }
static void inlet_anything(t_inlet *x, t_symbol *s, int argc, t_atom *argv) { if (x->i_symfrom == s) typedmess(x->i_dest, x->i_symto, argc, argv); else if (!x->i_symfrom) typedmess(x->i_dest, s, argc, argv); else inlet_wrong(x, s); }
void max_jit_op_int(t_max_jit_op *x, long c) { t_atom a; jit_atom_setlong(&a,c); typedmess(x,_jit_sym_val,1,&a); }
/* this routine is called when a new "object" is requested whose class Pd doesn't know. Pd tries to load it as an extern, then as an abstraction. */ void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv) { t_pd *current; int fd; char dirbuf[MAXPDSTRING], *nameptr; if (tryingalready) return; newest = 0; class_loadsym = s; if (sys_load_lib(canvas_getcurrent(), s->s_name)) { tryingalready = 1; typedmess(dummy, s, argc, argv); tryingalready = 0; return; } class_loadsym = 0; current = s__X.s_thing; if ((fd = canvas_open(canvas_getcurrent(), s->s_name, ".pd", dirbuf, &nameptr, MAXPDSTRING, 0)) >= 0 || (fd = canvas_open(canvas_getcurrent(), s->s_name, ".pat", dirbuf, &nameptr, MAXPDSTRING, 0)) >= 0) { close (fd); if (!pd_setloadingabstraction(s)) { canvas_setargs(argc, argv); binbuf_evalfile(gensym(nameptr), gensym(dirbuf)); if (s__X.s_thing != current) canvas_popabstraction((t_canvas *)(s__X.s_thing)); canvas_setargs(0, 0); } else error("%s: can't load abstraction within itself\n", s->s_name); } else newest = 0; }
void max_jit_op_float(t_max_jit_op *x, double f) { t_atom a; jit_atom_setfloat(&a,f); typedmess(x,_jit_sym_val,1,&a); }
///////////////////////////////////////////////////////// // render // ///////////////////////////////////////////////////////// void GemMan :: renderChain(t_symbol*s, bool start){ if(s->s_thing) { t_atom ap[1]; SETFLOAT(ap, start); typedmess(s->s_thing, gensym("gem_state"), 1, ap); } }
/* this routine is called when a new "object" is requested whose class Pd doesn't know. Pd tries to load it as an extern, then as an abstraction. */ void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv) { int fd; char dirbuf[MAXPDSTRING], classslashclass[MAXPDSTRING], *nameptr; if (tryingalready>MAXOBJDEPTH){ error("maximum object loading depth %d reached", MAXOBJDEPTH); return; } if (s == &s_anything){ error("object name \"%s\" not allowed", s->s_name); return; } pd_this->pd_newest = 0; class_loadsym = s; pd_globallock(); if (sys_load_lib(canvas_getcurrent(), s->s_name)) { tryingalready++; typedmess(dummy, s, argc, argv); tryingalready--; return; } class_loadsym = 0; pd_globalunlock(); }
static void sendcanvas_anything(t_sendcanvas *x, t_symbol*s, int argc, t_atom*argv) { if(0==x->x_pd) return; typedmess(x->x_pd, s, argc, argv); }
void pd_vmess(t_pd *x, t_symbol *sel, char *fmt, ...) { va_list ap; t_atom arg[MAXPDARG], *at =arg; int nargs = 0; char *fp = fmt; va_start(ap, fmt); while (1) { if (nargs > MAXPDARG) { pd_error(x, "pd_vmess: only %d allowed", MAXPDARG); break; } switch(*fp++) { case 'f': SETFLOAT(at, va_arg(ap, double)); break; case 's': SETSYMBOL(at, va_arg(ap, t_symbol *)); break; case 'i': SETFLOAT(at, va_arg(ap, t_int)); break; case 'p': SETPOINTER(at, va_arg(ap, t_gpointer *)); break; default: goto done; } at++; nargs++; } done: va_end(ap); typedmess(x, sel, nargs, arg); }
static void new_inlet_anything(t_inlet *x, t_symbol *s, int argc, t_atom *argv) { if (x->i_symfrom == s) typedmess(x->i_dest, x->i_un.iu_symto, argc, argv); else if (!x->i_symfrom) typedmess(x->i_dest, s, argc, argv); else if (*x->i_dest == eproxy_class) { t_eproxy* proxy = (t_eproxy *)x->i_dest; t_eobj *z = (t_eobj *)proxy->p_owner; z->o_current_proxy = proxy->p_index; pd_typedmess((t_pd *)x->i_dest, s, argc, argv); z->o_current_proxy = 0; } else inlet_wrong(x, s); }
void max_xray_jit_levelsetseg_float(t_max_xray_jit_levelsetseg *x, double f) { t_atom a; jit_atom_setfloat(&a,f); typedmess((t_object *)x,_jit_sym_val,1,&a); }
/* convenience routine giving a stdarg interface to typedmess(). Only ten args supported; it seems unlikely anyone will need more since longer messages are likely to be programmatically generated anyway. */ void pd_vmess(t_pd *x, t_symbol *sel, char *fmt, ...) { va_list ap; t_atom arg[10], *at = arg; int nargs = 0; char *fp = fmt; va_start(ap, fmt); while (1) { if (nargs >= 10) { pd_error(x, "pd_vmess: only 10 allowed"); break; } switch(*fp++) { case 'f': SETFLOAT(at, va_arg(ap, double)); break; case 's': SETSYMBOL(at, va_arg(ap, t_symbol *)); break; case 't': SETBLOB(at, va_arg(ap, t_blob *)); /*post("pd_vmess: arg[0].a_w.w_blob = %p", arg[0].a_w.w_blob);*/ break; /* MP 20061226 blob type */ case 'i': SETFLOAT(at, va_arg(ap, t_int)); break; case 'p': SETPOINTER(at, va_arg(ap, t_gpointer *)); break; default: goto done; } at++; nargs++; } done: va_end(ap); typedmess(x, sel, nargs, arg); }
void cmmjl_osc_sendMsg(void *x, t_symbol *msg, int argc, t_atom *argv){ t_linklist *ll = cmmjl_obj_osc_address_methods_get(x); t_symbol *m = gensym(basename(msg->s_name)); char *osc_address; int i; method func; void *r; if(msg == ps_OSCTimeTag){ return; } if(!ll){ return; } osc_address = linklist_getindex(ll, 0); for(i = 0; i < linklist_getsize(ll); i++){ if(!osc_address){ post("no OSC address--breaking"); break; } if(!cmmjl_osc_match(x, msg->s_name, osc_address)){ func = zgetfn((t_object *)x, m); if(func){ r = typedmess(x, m, argc, argv); //return; } }else{ } linklist_next(ll, osc_address, (void **)&osc_address); } CMMJL_ERROR(x, CMMJL_ENOFUNC, "couldn't send message %s to object", m->s_name); }
/* just forward any messages to the garray */ static void array_define_anything(t_glist *x, t_symbol *s, int argc, t_atom *argv) { t_glist *gl = (x->gl_list ? pd_checkglist(&x->gl_list->g_pd) : 0); if (gl && gl->gl_list && pd_class(&gl->gl_list->g_pd) == garray_class) typedmess(&gl->gl_list->g_pd, s, argc, argv); else bug("array_define_anything"); }
void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv) { t_outconnect *oc; char c; if (&c < stacklimit) outlet_stackerror(x); else for (oc = x->o_connections; oc; oc = oc->oc_next) typedmess(oc->oc_to, s, argc, argv); }
static void inlet_list(t_inlet *x, t_symbol *s, int argc, t_atom *argv) { t_atom at; if (x->i_symfrom == &s_list || x->i_symfrom == &s_float || x->i_symfrom == &s_symbol || x->i_symfrom == &s_pointer) typedmess(x->i_dest, x->i_symto, argc, argv); else if (!x->i_symfrom) pd_list(x->i_dest, s, argc, argv); else inlet_wrong(x, &s_list); }
static void dist_anything(t_dist *x, t_symbol *s, int argc, t_atom *argv) { int i; for(i = 0; i <= x->x_rec; i++) { if (x->x_sym[i]->s_thing) typedmess(x->x_sym[i]->s_thing, s, argc, argv); } }
t_pd *forky_newobject(t_symbol *s, int ac, t_atom *av) { #if FORKY_VERSION >= 37 typedmess(&pd_objectmaker, s, ac, av); return (pd_newest()); #else return (0); #endif }
/* this one only in g_clone.c -- LATER consider sending the message without having to chase the linked list every time? */ void obj_sendinlet(t_object *x, int n, t_symbol *s, int argc, t_atom *argv) { t_inlet *i; for (i = x->ob_inlet; i && n; i = i->i_next, n--) ; if (i) typedmess(&i->i_pd, s, argc, argv); else bug("obj_sendinlet"); }
void GemMan :: renderChain(t_symbol*s, GemState *state){ if(s->s_thing) { t_atom ap[2]; ap->a_type=A_POINTER; ap->a_w.w_gpointer=NULL; // the cache ? (ap+1)->a_type=A_POINTER; (ap+1)->a_w.w_gpointer=(t_gpointer *)state; typedmess(s->s_thing, gensym("gem_state"), 2, ap); } }
void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv) { t_outconnect *oc; if(++stackcount >= STACKITER) outlet_stackerror(x); else for (oc = x->o_connections; oc; oc = oc->oc_next) typedmess(oc->oc_to, s, argc, argv); --stackcount; }
static void update_gui_labels(struct proc_pd *x) { const struct proc_class_control *p = x->proc_class->info_control; for (int i = 0; p[i].desc; i++) { t_symbol *s = gensym_n("slider",i); if (s->s_thing) { t_atom s_desc = {A_SYMBOL, (union word)slider_label(&p[i])}; typedmess(s->s_thing, gensym("label"), 1, &s_desc); } } }
static void update_gui(struct proc_pd *x, int control_index) { int param_index = proc_instance_find_control(x->proc_instance, control_index); if (param_index < 0) return; PROC_NUMBER_T value = proc_instance_get_param(x->proc_instance, param_index); t_symbol *s = gensym_n("slider",control_index); if (s->s_thing) { t_atom s_desc = FLOAT(value); typedmess(s->s_thing, gensym("set"), 1, &s_desc); } }
static void grab_anything(t_grab *x, t_symbol *s, int ac, t_atom *av) { t_pd *grabbed; grab_start(x); while (grabbed = grab_next(x)) { typedmess(grabbed, s, ac, av); grab_restore(x); } }
/* never use implicit running status (expect other midi senders) */ static void xeqithook_playmessage(t_xeqit *it, t_symbol *target, int argc, t_atom *argv) { t_xeq *x = (t_xeq *)it->i_owner; t_pd *dest = target->s_thing; if (argv->a_type == A_FLOAT) { int status = it->i_status; if (dest) typedmess(dest, &s_list, argc, argv); if (status) { status |= it->i_channel; outlet_float(x->x_midiout, status); outlet_float(x->x_midiout, it->i_data1); if (it->i_data2 >= 0) outlet_float(x->x_midiout, it->i_data2); } } else if (argv->a_type == A_SYMBOL && dest) typedmess(dest, argv->a_w.w_symbol, argc-1, argv+1); }
static void iem_event_motion(t_iem_event *x, t_floatarg dx, t_floatarg dy) { x->x_x += (t_int)dx; x->x_y -= (t_int)dy; SETFLOAT(x->x_at_out, (t_float)x->x_x); SETFLOAT(x->x_at_out+1, (t_float)x->x_y); outlet_anything(x->x_gui.x_obj.ob_outlet, x->x_dragg_x_y, 2, x->x_at_out); if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) typedmess(x->x_gui.x_snd->s_thing, x->x_dragg_x_y, 2, x->x_at_out); }
void iCircle2D_bang(t_iCircle2D *x) { SETFLOAT(&(x->force[14]), x->posX_old); // posX_old SETFLOAT(&(x->force[15]), x->posY_old); // posY_old x->posX_old = x->posX; x->posY_old = x->posY; if (x->x_sym->s_thing) typedmess(x->x_sym->s_thing, gensym("interactor_circle_2D"), 20, x->force); outlet_anything(x->force_new, gensym("interactor_circle_2D"), 20, x->force); }
static int iem_event_click(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit) { t_iem_event* x = (t_iem_event *)z; t_int xpos=text_xpix(&x->x_gui.x_obj, glist); t_int ypos=text_ypix(&x->x_gui.x_obj, glist); if(doit != x->x_doit) { SETFLOAT(x->x_at_out, (t_float)doit); SETFLOAT(x->x_at_out+1, (t_float)shift); SETFLOAT(x->x_at_out+2, (t_float)(alt?1:0)); outlet_anything(x->x_gui.x_obj.ob_outlet, x->x_mouse_shft_alt, 3, x->x_at_out); if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) typedmess(x->x_gui.x_snd->s_thing, x->x_mouse_shft_alt, 3, x->x_at_out); if(doit) x->x_gui.x_fsf.x_change = 1; x->x_doit = doit; } x->x_x = xpix - xpos; x->x_y = x->x_gui.x_h - (ypix - ypos); SETFLOAT(x->x_at_out, (t_float)x->x_x); SETFLOAT(x->x_at_out+1, (t_float)x->x_y); if(doit) { glist_grab(x->x_gui.x_glist, &x->x_gui.x_obj.te_g, (t_glistmotionfn)iem_event_motion, iem_event_key, (t_float)xpix, (t_float)ypix); outlet_anything(x->x_gui.x_obj.ob_outlet, x->x_dragg_x_y, 2, x->x_at_out); if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) typedmess(x->x_gui.x_snd->s_thing, x->x_dragg_x_y, 2, x->x_at_out); } else { outlet_anything(x->x_gui.x_obj.ob_outlet, x->x_move_x_y, 2, x->x_at_out); if(x->x_gui.x_fsf.x_snd_able && x->x_gui.x_snd->s_thing) typedmess(x->x_gui.x_snd->s_thing, x->x_move_x_y, 2, x->x_at_out); } return (1); }
static void audiosettings_params_apply(t_audiosettings*x) { /* "pd audio-dialog ..." #00: indev[0] #01: indev[1] #02: indev[2] #03: indev[3] #04: inchan[0] #05: inchan[1] #06: inchan[2] #07: inchan[3] #08: outdev[0] #09: outdev[1] #10: outdev[2] #11: outdev[3] #12: outchan[0] #13: outchan[1] #14: outchan[2] #15: outchan[3] #16: rate #17: advance #18: callback */ t_atom argv [2*MAXAUDIOINDEV+2*MAXAUDIOOUTDEV+3]; int argc=2*MAXAUDIOINDEV+2*MAXAUDIOOUTDEV+3; int i=0; // as_params_print(&x->x_params); for(i=0; i<MAXAUDIOINDEV; i++) { SETFLOAT(argv+i+0*MAXAUDIOINDEV, (t_float)(x->x_params.audioindev[i])); SETFLOAT(argv+i+1*MAXAUDIOINDEV, (t_float)(x->x_params.chindev [i])); } for(i=0; i<MAXAUDIOOUTDEV; i++) { SETFLOAT(argv+i+2*MAXAUDIOINDEV+0*MAXAUDIOOUTDEV,(t_float)(x->x_params.audiooutdev[i])); SETFLOAT(argv+i+2*MAXAUDIOINDEV+1*MAXAUDIOOUTDEV,(t_float)(x->x_params.choutdev [i])); } SETFLOAT(argv+2*MAXAUDIOINDEV+2*MAXAUDIOOUTDEV+0,(t_float)(x->x_params.rate)); SETFLOAT(argv+2*MAXAUDIOINDEV+2*MAXAUDIOOUTDEV+1,(t_float)(x->x_params.advance)); SETFLOAT(argv+2*MAXAUDIOINDEV+2*MAXAUDIOOUTDEV+2,(t_float)(x->x_params.callback)); if (s_pdsym->s_thing) typedmess(s_pdsym->s_thing, gensym("audio-dialog"), argc, argv); }