void WrappedMapperClass_new(TTPtr self, AtomCount argc, AtomPtr argv) { WrappedModularInstancePtr x = (WrappedModularInstancePtr)self; SymbolPtr relativeAddress; long attrstart = attr_args_offset(argc, argv); // support normal arguments // possible relativeAddress if (attrstart && argv) relativeAddress = atom_getsym(argv); else relativeAddress = _sym_nothing; x->address = TTAddress(jamoma_parse_dieze((ObjectPtr)x, relativeAddress)->s_name); jamoma_mapper_create((ObjectPtr)x, &x->wrappedObject); // Make two outlets x->outlets = (TTHandle)sysmem_newptr(sizeof(TTPtr) * 1); x->outlets[data_out] = outlet_new(x, NULL); // anything outlet to output data // handle attribute args attr_args_process(x, argc, argv); // Prepare extra data x->extra = (t_extra*)malloc(sizeof(t_extra)); EXTRA->arguments = new TTValue(); jamoma_ttvalue_from_Atom(*EXTRA->arguments, _sym_nothing, argc, argv); // The following must be deferred because we have to interrogate our box, // and our box is not yet valid until we have finished instantiating the object. // Trying to use a loadbang method instead is also not fully successful (as of Max 5.0.6) defer_low((ObjectPtr)x, (method)map_subscribe, NULL, 0, 0); }
void data_subscribe(TTPtr self, t_symbol *relativeAddress, long argc, t_atom *argv) { WrappedModularInstancePtr x = (WrappedModularInstancePtr)self; TTAddress returnedAddress; TTNodePtr returnedNode = NULL; TTNodePtr returnedContextNode = NULL; // for relative address if (TTAddress(relativeAddress->s_name).getType() == kAddressRelative) { jamoma_subscriber_create((t_object*)x, x->wrappedObject, TTAddress(jamoma_parse_dieze((t_object*)x, relativeAddress)->s_name), x->subscriberObject, returnedAddress, &returnedNode, &returnedContextNode); #ifndef JMOD_MESSAGE #ifndef JMOD_RETURN // if a j.parameter is registered under the root : reset to the default value our self if (returnedContextNode == accessApplicationLocalDirectory->getRoot()) { TTBoolean initialized; x->wrappedObject.get("initialized", initialized); if (!initialized) x->wrappedObject.send(kTTSym_Init); } #endif #endif } else object_error((t_object*)x, "can't register because %s is not a relative address", relativeAddress->s_name); }
// Create void *init_new(t_symbol *s, long argc, t_atom *argv) { long attrstart = attr_args_offset(argc, argv); // support normal arguments t_init *x = (t_init *)object_alloc(g_init_class); t_symbol *relativeAddress = _sym_nothing; // could be used to binds on a sub level j.hub if (attrstart && argv) atom_arg_getsym(&relativeAddress, 0, attrstart, argv); if (x) { x->outlets = (TTHandle)sysmem_newptr(sizeof(TTPtr) * 2); x->outlets[end_out] = bangout(x); x->outlets[start_out] = bangout(x); x->patcherNode = NULL; x->address = TTAddress(jamoma_parse_dieze((t_object*)x, relativeAddress)->s_name); attr_args_process(x, argc, argv); // handle attribute args // The following must be deferred because we have to interrogate our box, // and our box is not yet valid until we have finished instantiating the object. // Trying to use a loadbang method instead is also not fully successful (as of Max 5.0.6) defer_low((t_object*)x, (method)init_subscribe, NULL, 0, 0); } return (x); // Return the pointer }