23 typedef struct extra {
28 #define EXTRA ((t_extra*)x->extra)
32 void WrapTTDataClass(WrappedClassPtr c);
33 void WrappedDataClass_new(
TTPtr self,
long argc, t_atom *argv);
34 void WrappedDataClass_free(
TTPtr self);
46 void data_new_address(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
47 void data_subscribe(
TTPtr self, t_symbol *address,
long argc, t_atom *argv);
48 void data_address(
TTPtr self, t_symbol *name);
50 void data_return_value(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
53 void WrappedDataClass_anything(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
82 void data_list(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
93 void data_inc(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
104 void data_dec(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
110 ModularSpec *spec =
new ModularSpec;
111 spec->_wrap = &WrapTTDataClass;
112 spec->_new = &WrappedDataClass_new;
113 spec->_free = &WrappedDataClass_free;
114 spec->_any = &WrappedDataClass_anything;
132 void WrapTTDataClass(WrappedClassPtr c)
134 class_addmethod(c->maxClass, (method)
data_assist,
"assist", A_CANT, 0L);
136 class_addmethod(c->maxClass, (method)data_return_value,
"return_value", A_CANT, 0);
138 class_addmethod(c->maxClass, (method)
data_bang,
"bang", 0L);
139 class_addmethod(c->maxClass, (method)
data_int,
"int", A_LONG, 0);
140 class_addmethod(c->maxClass, (method)
data_float,
"float", A_FLOAT, 0);
141 class_addmethod(c->maxClass, (method)
data_list,
"list", A_GIMME, 0);
143 class_addmethod(c->maxClass, (method)
data_inc,
"+", A_GIMME, 0);
144 class_addmethod(c->maxClass, (method)
data_dec,
"-", A_GIMME, 0);
146 class_addmethod(c->maxClass, (method)data_address,
"address", A_SYM,0);
150 void WrappedDataClass_new(
TTPtr self,
long argc, t_atom *argv)
153 t_symbol* relativeAddress;
154 long attrstart = attr_args_offset(argc, argv);
157 relativeAddress = _sym_nothing;
158 if (attrstart && argv)
159 if (atom_gettype(argv) == A_SYM)
160 relativeAddress = atom_getsym(argv);
162 if (relativeAddress == _sym_nothing) {
163 object_error((t_object*)x,
"needs a name as first argument");
168 if (relativeAddress == gensym(
"data/mute") ||
169 relativeAddress == gensym(
"data/bypass") ||
170 relativeAddress == gensym(
"data/freeze") ||
171 relativeAddress == gensym(
"data/preview") ||
172 relativeAddress == gensym(
"audio/mute") ||
173 relativeAddress == gensym(
"audio/bypass") ||
174 relativeAddress == gensym(
"audio/mix") ||
175 relativeAddress == gensym(
"audio/gain") ||
176 relativeAddress == gensym(
"model") ||
177 relativeAddress == gensym(
"preset") ) {
179 object_error((t_object*)x,
"%s address is reserved by j.model", relativeAddress->s_name);
189 x->
outlets = (TTHandle)sysmem_newptr(
sizeof(
TTPtr) * 2);
190 x->
outlets[data_out] = outlet_new(x, NULL);
195 EXTRA->arrayArgs =
new TTValue();
198 if (argc > 1 && argv)
201 data_new_address(
self, relativeAddress, argc--, argv++);
205 void WrappedDataClass_free(
TTPtr self)
212 void data_new_address(
TTPtr self, t_symbol *relativeAddress,
long argc, t_atom *argv)
232 attr_args_process(x, argc, argv);
237 defer_low((t_object*)x, (method)data_subscribe, relativeAddress, argc, argv);
241 void data_subscribe(
TTPtr self, t_symbol *relativeAddress,
long argc, t_atom *argv)
267 object_error((t_object*)x,
"can't register because %s is not a relative address", relativeAddress->s_name);
271 void data_address(
TTPtr self, t_symbol *address)
278 wrappedModularClass_unregister(x);
284 defer_low(
self,(method)data_new_address, address, argc, argv);
292 strcpy(dst,
"update value, ramp to new value, or set an attribute");
296 strcpy(dst,
"current value when updated");
299 strcpy(dst,
"dumpout");
316 atom_setlong(&a, value);
326 atom_setfloat(&a, value);
339 void WrappedDataClass_anything(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
347 void data_return_value(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
352 if (msg == _sym_nothing)
353 outlet_atoms(x->
outlets[data_out], argc, argv);
355 outlet_anything(x->
outlets[data_out], msg, argc, argv);
TTObject subscriberObject
The instance of a TTSubscriber object used to register the wrapped object in the tree structure...
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
TTErr send(const TTSymbol aName)
Send a message to this object with no arguments.
TTHandle outlets
an array of outlet
TTErr wrapTTModularClassAsMaxClass(TTSymbol &ttblueClassName, const char *maxClassName, WrappedClassPtr *c, ModularSpec *specificities)
Wrap a Jamoma class as a Max class.
void data_int(TTPtr self, long value)
Process an incoming integer value.
We build a directory of TTNodes, and you can request a pointer for any TTNode, or add an observer to ...
The TTAddress class is used to represent a string and efficiently pass and compare that string...
int C74_EXPORT main(void)
Set up this class as a Max external the first time an object of this kind is instantiated.
void * extra
used to keep very specific things
this flag means that an address have no leading slash
void * TTPtr
A generic pointer.
TTErr get(const TTSymbol aName, T &aReturnedValue) const
Get an attribute value for an object.
void data_inc(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
Increase parameter value in steps.
TTObject wrappedObject
The instance of the Jamoma object we are wrapping.
void data_list(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
Process an incoming message containing a list.
void data_bang(TTPtr self)
Process an incoming 'bang' message.
Data Structure for this object.
TTAddressType getType()
Get the type.
Wraps Jamoma Core classes as objects for Max/MSP.
TTBoolean useInternals
The hash table can be used as an array of wrappedObject.
void data_dec(TTPtr self, t_symbol *msg, long argc, t_atom *argv)
Decrease parameter value in steps.
void data_float(TTPtr self, double value)
Process an incoming float value.
void data_assist(TTPtr self, TTPtr b, long msg, long arg, char *dst)
Provide assistance on input and output while patching.
WrappedModularInstance * WrappedModularInstancePtr
Pointer to a wrapped instance of our object.
#define accessApplicationLocalDirectory
Access to the local application directory.
[doxygenAppendixC_copyExample]