void *hoa_canvas_new(t_symbol *s, long argc, t_atom *argv) { t_atom av[3]; atom_setfloat(av, 0); t_hoa_canvas *x = (t_hoa_canvas *)pd_new(hoa_canvas_class); t_canvas* owner = canvas_getcurrent(); x->x_canvas = canvas_new(0, 0, 0, NULL); canvas_vis(x->x_canvas, 0); pd_typedmess((t_pd *)x->x_canvas, gensym("pop"), 1, av); canvas_setcurrent(owner); if(argc && atom_gettype(argv) == A_SYM) { atom_setfloat(av, 0); atom_setfloat(av+1, 20); atom_setsym(av+2, atom_getsym(argv)); pd_typedmess((t_pd *)x->x_canvas, gensym("obj"), 3, av); } canvas_loadbang(x->x_canvas); canvas_vis(x->x_canvas, 1); outlet_new((t_object *)x, &s_signal); return (x); }
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 hammergui__vised(t_hammergui *snk, t_symbol *s, t_floatarg f) { #ifdef HAMMERGUI_DEBUG fprintf(stderr, "_vised %s %g (sink %x)\n", (s ? s->s_name : "???"), f, (int)snk); #endif if (!snk->g_psvised) { bug("hammergui__vised"); return; } if (snk->g_psvised->s_thing) { t_atom at[2]; SETSYMBOL(&at[0], s); SETFLOAT(&at[1], f); pd_typedmess(snk->g_psvised->s_thing, ps__vised, 2, at); } #if 0 /* How to be notified about changes of button state, prior to gui objects in a canvas? LATER find a reliable way -- delete if failed */ sys_vgui("bindtags %s {hammertag %s Canvas . all}\n", s->s_name, s->s_name); #endif }
static void bindlist_anything(t_bindlist *x, t_symbol *s, int argc, t_atom *argv) { t_bindelem *e; for (e = x->b_list; e; e = e->e_next) pd_typedmess(e->e_who, s, argc, argv); }
void Instance::prepareDsp(const int nins, const int nouts, const int samplerate, const int nsamples) noexcept { t_atom av; av.a_type = A_FLOAT; av.a_w.w_float = 1; pd_typedmess((t_pd *)gensym("pd")->s_thing, gensym("dsp"), 1, &av); }
static void new_inlet_float(t_inlet *x, t_float f) { if (x->i_symfrom == &s_float) pd_vmess(x->i_dest, x->i_un.iu_symto, "f", (t_floatarg)f); else if (*x->i_dest == eproxy_class) { t_atom a; t_eproxy* proxy = (t_eproxy *)x->i_dest; t_eobj *z = (t_eobj *)proxy->p_owner; z->o_current_proxy = proxy->p_index; SETFLOAT(&a, f); pd_typedmess((t_pd *)x->i_dest, &s_float, 1, &a); z->o_current_proxy = 0; } else if (x->i_symfrom == &s_signal) x->i_un.iu_floatsignalvalue = f; else if (!x->i_symfrom) pd_float(x->i_dest, f); else if (x->i_symfrom == &s_list) { t_atom a; SETFLOAT(&a, f); new_inlet_list(x, &s_float, 1, &a); } else inlet_wrong(x, &s_float); }
static void bindlist_anything(t_bindlist *x, t_symbol *s, int argc, t_atom *argv) { t_bindelem *e; change_bindlist_via_graph = 1; for (e = x->b_list; e; e = e->e_next) if (e->e_who != NULL) pd_typedmess(e->e_who, s, argc, argv); if (change_bindlist_via_graph > 1) bindlist_cleanup(x); change_bindlist_via_graph = 0; }
int libpd_message(const char *recv, const char *msg, int n, t_atom *v) { t_pd *dest; sys_lock(); dest = get_object(recv); if (dest == NULL) { sys_unlock(); return -1; } pd_typedmess(dest, gensym(msg), n, v); sys_unlock(); return 0; }
bool flext::SysForward(const t_symbol *recv,const t_symbol *s,int argc,const t_atom *argv) { void *cl = recv->s_thing; if(UNLIKELY(!cl)) return false; #if FLEXT_SYS == FLEXT_SYS_PD pd_typedmess((t_class **)cl,(t_symbol *)s,argc,(t_atom *)argv); #elif FLEXT_SYS == FLEXT_SYS_MAX typedmess(recv->s_thing,(t_symbol *)s,argc,(t_atom *)argv); #else # error Not implemented #endif return true; }
/* filtering out redundant "_up" messages */ static void hammergui__up(t_hammergui *snk, t_floatarg f) { #ifdef HAMMERGUI_DEBUG fprintf(stderr, "_up %g (sink %x)\n", f, (int)snk); #endif if (!snk->g_psmouse) { bug("hammergui__up"); return; } if ((int)f) { if (!snk->g_isup) { snk->g_isup = 1; if (snk->g_psmouse->s_thing) { t_atom at; SETFLOAT(&at, 1); pd_typedmess(snk->g_psmouse->s_thing, ps__up, 1, &at); } } } else { if (snk->g_isup) { snk->g_isup = 0; if (snk->g_psmouse->s_thing) { t_atom at; SETFLOAT(&at, 0); pd_typedmess(snk->g_psmouse->s_thing, ps__up, 1, &at); } } } }
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); }
static void new_inlet_bang(t_inlet *x) { if (x->i_symfrom == &s_bang) pd_vmess(x->i_dest, x->i_un.iu_symto, ""); else if (!x->i_symfrom) pd_bang(x->i_dest); else if (x->i_symfrom == &s_list) new_inlet_list(x, &s_bang, 0, 0); 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 *)proxy->p_owner, &s_bang, 0, NULL); z->o_current_proxy = 0; } else inlet_wrong(x, &s_bang); }
static void hammergui__focus(t_hammergui *snk, t_symbol *s, t_floatarg f) { #ifdef HAMMERGUI_DEBUG fprintf(stderr, "_focus %s %g (sink %x)\n", (s ? s->s_name : "???"), f, (int)snk); #endif if (!snk->g_psfocus) { bug("hammergui__focus"); return; } if (snk->g_psfocus->s_thing) { t_atom at[2]; SETSYMBOL(&at[0], s); SETFLOAT(&at[1], f); pd_typedmess(snk->g_psfocus->s_thing, ps__focus, 2, at); } }
void pd_forwardmess(t_pd *x, int argc, t_atom *argv) { if (argc) { t_atomtype t = argv->a_type; if (t == A_SYMBOL) pd_typedmess(x, argv->a_w.w_symbol, argc-1, argv+1); else if (t == A_POINTER) { if (argc == 1) pd_pointer(x, argv->a_w.w_gpointer); else pd_list(x, &s_list, argc, argv); } else if (t == A_FLOAT) { if (argc == 1) pd_float(x, argv->a_w.w_float); else pd_list(x, &s_list, argc, argv); } else bug("pd_forwardmess"); } }
static int libdir_add_to_globalpath(const char*path) { int major, minor, bugfix; sys_getversion(&major, &minor, &bugfix); if((major==0 && minor < 48)) { sys_searchpath = namelist_append(sys_searchpath, path, 0); } else { const char *inptr = path; char encoded[MAXPDSTRING]; char *outptr = encoded; t_atom ap[2]; *outptr++='+'; while(inptr && ((outptr+2) < (encoded+MAXPDSTRING))) { *outptr++ = *inptr++; if ('+'==inptr[-1]) *outptr++='+'; } *outptr=0; SETSYMBOL(ap+0, gensym(encoded)); SETFLOAT(ap+1, 0.f); pd_typedmess(gensym("pd")->s_thing, gensym("add-to-path"), 2, ap); } return 1; }
static void new_inlet_pointer(t_inlet *x, t_gpointer *gp) { if (x->i_symfrom == &s_pointer) pd_vmess(x->i_dest, x->i_un.iu_symto, "p", gp); else if (!x->i_symfrom) pd_pointer(x->i_dest, gp); else if (x->i_symfrom == &s_list) { t_atom a; SETPOINTER(&a, gp); new_inlet_list(x, &s_pointer, 1, &a); } else if (*x->i_dest == eproxy_class) { t_atom a; t_eproxy* proxy = (t_eproxy *)x->i_dest; t_eobj *z = (t_eobj *)proxy->p_owner; z->o_current_proxy = proxy->p_index; SETPOINTER(&a, gp); pd_typedmess((t_pd *)x->i_dest, &s_pointer, 1, &a); z->o_current_proxy = 0; } else inlet_wrong(x, &s_pointer); }
static void new_inlet_symbol(t_inlet *x, t_symbol *s) { if (x->i_symfrom == &s_symbol) pd_vmess(x->i_dest, x->i_un.iu_symto, "s", s); else if (!x->i_symfrom) pd_symbol(x->i_dest, s); else if (x->i_symfrom == &s_list) { t_atom a; SETSYMBOL(&a, s); new_inlet_list(x, &s_symbol, 1, &a); } else if (*x->i_dest == eproxy_class) { t_atom a; t_eproxy* proxy = (t_eproxy *)x->i_dest; t_eobj *z = (t_eobj *)proxy->p_owner; z->o_current_proxy = proxy->p_index; SETSYMBOL(&a, s); pd_typedmess((t_pd *)x->i_dest, &s_symbol, 1, &a); z->o_current_proxy = 0; } else inlet_wrong(x, &s_symbol); }
/* anything else is a message from the dialog window to the owner; just forward it. */ static void gfxstub_anything(t_gfxstub *x, t_symbol *s, int argc, t_atom *argv) { if (x->x_owner) pd_typedmess(x->x_owner, s, argc, argv); }
static void eproxy_anything(t_eproxy *x, t_symbol *s, int argc, t_atom *argv) { t_eobj *z = (t_eobj *)x->p_owner; z->o_current_proxy = x->p_index; pd_typedmess((t_pd *)x->p_owner, s, argc, argv); }