26 void jamoma_subscriber_fill_list(TTList& listToFill,
TTAddress address,
TTPtr pointer);
36 TTAddress newRelativeAddress, newContextAddress;
37 TTBoolean newInstance, newContextInstance;
42 args.
append(relativeAddress);
44 returnedSubscriber =
TTObject(kTTSym_Subscriber, args);
51 err = returnedSubscriber.
send(kTTSym_Subscribe, args, v);
59 if (!err && *returnedNode) {
61 if (anObject.
valid()) {
64 returnedSubscriber.
get(
"newInstanceCreated", v);
68 returnedSubscriber.
get(
"newContextInstanceCreated", v);
69 newContextInstance = v[0];
74 returnedSubscriber.
get(
"relativeAddress", v);
75 newRelativeAddress = v[0];
76 verbose(PD_LOG_WARN,
"Jamoma cannot register multiple objects with the same OSC identifier (%s). Using %s instead.", relativeAddress.
c_str(), newRelativeAddress.
c_str());
80 if (newContextInstance) {
82 returnedSubscriber.
get(
"contextAddress", v);
83 newContextAddress = v[0];
100 if (patcherContext == kTTSym_model && argc == 1) {
102 if ((argv+1)->a_type == A_SYMBOL)
103 patcherArg =
TTAddress(atom_getsymbol(argv+1)->s_name);
105 else if (patcherContext == kTTSym_view && argc == 2) {
107 if ((argv+2)->a_type == A_SYMBOL)
108 patcherArg =
TTAddress(atom_getsymbol(argv+2)->s_name);
117 if (patcherArg == kTTAdrsEmpty && patcherContext == kTTSym_model)
118 verbose(PD_LOG_WARN,
"No name provided to %s %s. Using %s.", patcherClass.
c_str(), patcherContext.
c_str(), newContextAddress.
getNameInstance().
c_str());
122 verbose(PD_LOG_WARN,
"Duplicate name provided to %s %s (%s). Using %s.", patcherClass.
c_str(), patcherContext.
c_str(), patcherArg.
c_str(), newContextAddress.
getNameInstance().
c_str());
126 returnedSubscriber.
get(kTTSym_nodeAddress, v);
127 returnedAddress = v[0];
129 JamomaDebug post(
"registers at %s", returnedAddress.
c_str());
135 if (anObject.
valid())
136 pd_error(x,
"Jamoma cannot registers %s", relativeAddress.
c_str());
148 if ( canvas->gl_owner == NULL )
150 else if ( canvas->gl_isgraph )
151 return _sym_bpatcher;
152 else return _sym_subpatcher;
158 TTString diezeStr, argsStr, addressStr = address->s_name;
160 t_canvas *patcher = x;
173 patcher = (t_canvas*)object_attr_getobj(x, _sym_parentpatcher);
182 if (hierarchy == _sym_subpatcher) {
186 if (atom_getsym(av) == _sym_pd) {
236 return gensym((
char*)addressStr.data());
246 t_canvas *objPtr = x->o_canvas;
247 t_canvas *patcherPtr = NULL;
259 if (patcherName && patcherPtr) {
268 jamoma_subscriber_fill_list(aContextListToFill,
TTAddress(patcherName), patcherPtr);
271 objPtr = patcherPtr->gl_owner;
287 void jamoma_subscriber_fill_list(TTList& listToFill,
TTAddress address,
TTPtr pointer)
291 listToFill.insert(0, v);
294 if (parent != kTTAdrsEmpty)
295 jamoma_subscriber_fill_list(listToFill, parent, pointer);
305 TTObject returnAddressCallback, returnValueCallback;
308 returnAddressCallback =
TTObject(
"callback");
309 returnAddressCallback.
set(kTTSym_baton,
TTPtr(x));
311 args.
append(returnAddressCallback);
313 returnValueCallback =
TTObject(
"callback");
314 returnValueCallback.
set(kTTSym_baton,
TTPtr(x));
316 args.
append(returnValueCallback);
318 returnedContainer =
TTObject(kTTSym_Container, args);
329 if (aContainer.
valid()) {
331 anAddress = relativeAddressAndAttribute->s_name;
334 error(
"%s is an absolute address", relativeAddressAndAttribute->s_name);
350 return aContainer.
send(kTTSym_Send, data, none);
361 returnedNodeInfo =
TTObject(kTTSym_NodeInfo);
372 returnedData =
TTObject(kTTSym_Data, service);
375 returnedData.
set(kTTSym_baton,
TTPtr(x));
391 aData.
send(kTTSym_Command, v, none);
394 error(
"jamoma_data_command : invalid TTObject");
405 returnedSender =
TTObject(kTTSym_Sender);
415 audio =
TTObject(kTTSym_audiosignal, 1);
417 returnedSender =
TTObject(kTTSym_Sender, audio);
426 if (aSender.
valid()) {
430 return aSender.
send(kTTSym_Send, v, none);
443 TTObject returnAddressCallback, returnValueCallback;
446 returnAddressCallback =
TTObject(
"callback");
447 returnAddressCallback.
set(kTTSym_baton,
TTPtr(x));
449 args.
append(returnAddressCallback);
451 returnValueCallback =
TTObject(
"callback");
452 returnValueCallback.
set(kTTSym_baton,
TTPtr(x));
454 args.
append(returnValueCallback);
456 returnedReceiver =
TTObject(kTTSym_Receiver, args);
464 TTObject returnAddressCallback, audio, empty;
467 returnAddressCallback =
TTObject(
"callback");
468 returnAddressCallback.
set(kTTSym_baton,
TTPtr(x));
470 args.
append(returnAddressCallback);
474 audio =
TTObject(kTTSym_audiosignal, 1);
477 returnedReceiver =
TTObject(kTTSym_Receiver, args);
490 returnLineCallback =
TTObject(
"callback");
491 returnLineCallback.
set(kTTSym_baton,
TTPtr(x));
494 returnedPresetManager =
TTObject(kTTSym_PresetManager, returnLineCallback);
504 returnLineCallback =
TTObject(
"callback");
505 returnLineCallback.
set(kTTSym_baton,
TTPtr(x));
508 returnedCueManager =
TTObject(kTTSym_CueManager, returnLineCallback);
522 signalOutCallback =
TTObject(
"callback");
524 signalOutCallback.
set(kTTSym_baton, baton);
527 returnedInput =
TTObject(kTTSym_Input, signalOutCallback);
535 returnedInput =
TTObject(
"Input.audio");
544 if (anInput.
valid()) {
548 return anInput.
send(kTTSym_Send, v, none);
565 signalOutCallback =
TTObject(
"callback");
567 signalOutCallback.
set(kTTSym_baton, baton);
570 returnedOutput =
TTObject(kTTSym_Output, signalOutCallback);
579 returnedOutput =
TTObject(
"Output.audio");
588 if (anOutput.
valid()) {
592 return anOutput.
send(kTTSym_Send, v, none);
606 TTObject returnValueCallback, returnInputGoingDownCallback, returnInputGoingUpCallback, returnOutputGoingDownCallback, returnOutputGoingUpCallback;
609 returnValueCallback =
TTObject(
"callback");
610 returnValueCallback.
set(kTTSym_baton,
TTPtr(x));
612 args.
append(returnValueCallback);
614 returnInputGoingDownCallback =
TTObject(
"callback");
616 returnInputGoingDownCallback.
set(kTTSym_baton, baton);
618 args.
append(returnInputGoingDownCallback);
620 returnInputGoingUpCallback =
TTObject(
"callback");
622 returnInputGoingUpCallback.
set(kTTSym_baton, baton);
624 args.
append(returnInputGoingUpCallback);
626 returnOutputGoingDownCallback =
TTObject(
"callback");
628 returnOutputGoingDownCallback.
set(kTTSym_baton, baton);
630 args.
append(returnOutputGoingDownCallback);
632 returnOutputGoingUpCallback =
TTObject(
"callback");
634 returnOutputGoingUpCallback.
set(kTTSym_baton, baton);
636 args.
append(returnOutputGoingUpCallback);
638 returnedMapper =
TTObject(kTTSym_Mapper, args);
650 returnedViewer =
TTObject(kTTSym_Viewer);
652 returnedViewer.
set(kTTSym_baton,
TTPtr(x));
663 if (aViewer.
valid()) {
667 return aViewer.
send(kTTSym_Send, v, none);
681 TTObject returnValueCallback, returnSelectionCallback;
684 returnValueCallback =
TTObject(
"callback");
685 returnValueCallback.
set(kTTSym_baton,
TTPtr(x));
687 args.
append(returnValueCallback);
691 returnSelectionCallback =
TTObject(
"callback");
693 returnSelectionCallback.
set(kTTSym_baton, baton);
695 args.
append(returnSelectionCallback);
697 returnedExplorer =
TTObject(kTTSym_Explorer, args);
712 aFilter->
append(kTTSym_object, kTTSym_Data);
713 aFilter->
append(kTTSym_mode, kTTSym_include);
719 aFilter->append(kTTSym_object, kTTSym_Data);
720 aFilter->append(kTTSym_attribute, kTTSym_service);
721 aFilter->append(kTTSym_value, kTTSym_parameter);
722 aFilter->append(kTTSym_mode, kTTSym_include);
728 aFilter->append(kTTSym_object, kTTSym_Data);
729 aFilter->append(kTTSym_attribute, kTTSym_service);
730 aFilter->append(kTTSym_value, kTTSym_message);
731 aFilter->append(kTTSym_mode, kTTSym_include);
737 aFilter->append(kTTSym_object, kTTSym_Data);
738 aFilter->append(kTTSym_attribute, kTTSym_service);
739 aFilter->append(kTTSym_value, kTTSym_return);
740 aFilter->append(kTTSym_mode, kTTSym_include);
746 aFilter->append(kTTSym_object, kTTSym_Container);
747 aFilter->append(kTTSym_attribute, kTTSym_service);
748 aFilter->append(kTTSym_value, kTTSym_model);
749 aFilter->append(kTTSym_mode, kTTSym_include);
755 aFilter->append(kTTSym_object, kTTSym_Container);
756 aFilter->append(kTTSym_attribute, kTTSym_service);
757 aFilter->append(kTTSym_value, kTTSym_view);
758 aFilter->append(kTTSym_mode, kTTSym_include);
764 aFilter->append(kTTSym_object,
TTSymbol(
"none"));
765 aFilter->append(kTTSym_mode, kTTSym_include);
771 aFilter->append(kTTSym_object, kTTSym_Viewer);
772 aFilter->append(kTTSym_mode, kTTSym_include);
778 aFilter->append(kTTSym_attribute, kTTSym_tags);
779 aFilter->append(kTTSym_value, kTTSym_generic);
780 aFilter->append(kTTSym_mode, kTTSym_exclude);
786 aFilter->append(kTTSym_attribute, kTTSym_tags);
787 aFilter->append(kTTSym_value, kTTSym_generic);
788 aFilter->append(kTTSym_mode, kTTSym_restrict);
791 return defaultFilterBank;
805 returnedRamp =
TTObject(kTTSym_Ramp, args);
811 t_object *x = (t_object*)o;
819 argv = (t_atom*)malloc(
sizeof(t_atom) * argc);
821 for (i = 0; i < argc; i++)
822 atom_setfloat(argv+i, v[i]);
826 object_method_typed(x, jps_return_value, _sym_float, argc, argv);
828 object_method_typed(x, jps_return_value, _sym_list, argc, argv);
842 x = (t_object*)((
TTPtr)baton[0]);
852 object_method_typed(x, jps_return_address, SymbolGen(address.
c_str()), 0, 0);
865 method p_method = NULL;
870 x = (t_object*)((
TTPtr)baton[0]);
873 if (baton.
size() >= 2) {
875 s_method = (t_symbol*)((
TTPtr)baton[1]);
877 if (s_method == NULL || s_method == _sym_nothing)
881 if (baton.
size() == 3)
885 s_method = jps_return_value;
891 object_method_typed(x, s_method, _sym_nothing, argc, argv);
895 p_method = object_getmethod(x, s_method);
898 p_method(x, _sym_nothing, argc, argv);
901 sysmem_freeptr(argv);
910 t_symbol *msg, *s_method;
914 method p_method = NULL;
920 x = (t_object*)((
TTPtr)baton[0]);
923 if (baton.
size() >= 2) {
925 s_method = (t_symbol*)((
TTPtr)baton[1]);
927 if (s_method == NULL || s_method == _sym_nothing)
931 if (baton.
size() == 3)
936 s_method = jps_return_value;
943 object_method_typed(x, s_method, msg, argc, argv);
947 p_method = object_getmethod(x, s_method);
950 p_method(x, msg, argc, argv);
955 sysmem_freeptr(argv);
966 x = (t_object*)((
TTPtr)baton[0]);
971 object_method_typed(x, jps_return_signal, _sym_nothing, argc, argv);
973 sysmem_freeptr(argv);
1013 *msg = _sym_nothing;
1017 *argv = (t_atom*)sysmem_newptr(
sizeof(t_atom) * (*argc));
1019 if (*argc && v.
size() > 0) {
1021 for (i = 0; i < *argc; i++) {
1025 if (s == kTTSymEmpty || s == kTTAdrsEmpty)
1026 atom_setsym((*argv)+i, _sym_bang);
1028 atom_setsym((*argv)+i, gensym((
char*)s.
c_str()));
1033 atom_setfloat((*argv)+i, f);
1040 if (atom_gettype(*argv) == A_SYM) {
1042 *msg = atom_getsym(*argv);
1068 if (*argc == 0 || v.
size() == 0)
1072 *argv = (t_atom*)sysmem_newptr(
sizeof(t_atom) * (*argc));
1074 for (i = 0; i < v.
size(); i++)
1079 if (s == kTTSymEmpty)
1080 atom_setsym((*argv)+i, _sym_bang);
1082 atom_setsym((*argv)+i, gensym((
char*)s.
c_str()));
1087 atom_setfloat((*argv)+i, f);
1097 if ((msg == _sym_bang || msg == _sym_nothing) && argc == 0)
1102 if (msg && msg != _sym_nothing && msg != _sym_int && msg != _sym_float && msg != _sym_symbol && msg != _sym_list)
1115 for (i = 0; i < argc; i++)
1117 if (atom_gettype(argv+i) == A_SYMBOL){
1118 if ( atom_getsym((t_atom*)argv+i)->s_name[0] ==
'"'){
1119 std::string concatSym = std::string(atom_getsym((t_atom*)argv+i)->s_name+1);
1122 for (;i < argc; i++){
1123 if (argv[i].a_type == A_SYMBOL) {
1124 char* sym = atom_getsym((t_atom*)argv+i)->s_name;
1125 concatSym += std::string(
" ");
1126 char* c = strchr(sym,
'"');
1132 }
else if ( argv[i].a_type == A_FLOAT ) {
1133 concatSym += std::string(
" ");
1134 concatSym+= std::to_string(atom_getfloat((t_atom*)argv+i));
1137 v[j+start] =
TTSymbol(concatSym.substr(0,concatSym.size()-1));
1140 v[i+start] =
TTSymbol(atom_getsym((t_atom*)argv+i)->s_name);
1143 v[i+start] = (
TTFloat64)atom_getfloat((t_atom*)argv+i);
1158 if (AppName == kTTSymEmpty)
1159 err = convertUpperCasedNameInAddress(TTName, anAddress);
1161 err = convertUpperCasedNameInAddress(AppName, anAddress);
1164 return gensym((
char*)anAddress.
c_str());
1206 b = canvas->gl_obj.te_binbuf;
1210 long ac = binbuf_getnatom(b);
1211 t_atom* av = binbuf_getvec(b);
1212 if(atom_gettype(av) == A_SYM && atom_getsym(av) == gensym(
"pd"))
1228 t_symbol *hierarchy, *_sym_j_context;
1229 t_canvas *upperPatcher;
1232 t_gobj *obj=patcher->gl_list;
1234 for ( ; obj ; obj = obj->g_next )
1236 _sym_j_context = obj->g_pd->c_name;
1237 if (_sym_j_context == _sym_j_model ){
1239 returnedContext = kTTSym_model;
1243 }
else if ( _sym_j_context == _sym_j_view ) {
1245 returnedContext = kTTSym_view;
1256 if (hierarchy == _sym_subpatcher || hierarchy == _sym_bpatcher || hierarchy == SymbolGen(
"poly")) {
1259 upperPatcher = patcher->gl_owner;
1265 patcher = upperPatcher;
1268 else if (hierarchy == _sym_topmost)
1269 returnedContext = kTTSymEmpty;
1276 t_symbol *patcherName, *hierarchy;
1277 t_canvas *upperPatcher;
1279 TTStringIter begin, end;
1283 if(patcher->gl_name)
1284 patcherName = patcher->gl_name;
1286 patcherName = _sym_nothing;
1288 if (patcherName != _sym_nothing) {
1290 s_toParse = patcherName->s_name;
1292 begin = s_toParse.begin();
1293 end = s_toParse.end();
1298 begin = s_toParse.begin();
1299 end = s_toParse.end();
1304 begin = s_toParse.begin();
1305 end = s_toParse.end();
1313 pd_error(patcher,
"jmod. prefix in %s is a 0.5 convention. Please use .module suffix instead", patcherName->s_name);
1316 begin = s_toParse.begin();
1317 end = s_toParse.end();
1323 begin = s_toParse.begin();
1324 end = s_toParse.end();
1330 begin = s_toParse.begin();
1331 end = s_toParse.end();
1333 else if (context == kTTSym_model) {
1337 begin = s_toParse.begin();
1338 end = s_toParse.end();
1341 else if (context == kTTSym_view) {
1345 begin = s_toParse.begin();
1346 end = s_toParse.end();
1352 s_toParse +=
"_help";
1354 returnedClass =
TTSymbol(s_toParse);
1360 if (hierarchy == _sym_subpatcher) {
1369 if (atom_getsym(av) == _sym_pd) {
1379 returnedClass =
TTSymbol(atom_getsym(av)->s_name);
1384 upperPatcher = patcher->gl_owner;
1390 else if (hierarchy == _sym_bpatcher) {
1393 upperPatcher = patcher->gl_owner;
1398 else if (hierarchy == _sym_topmost)
1399 returnedClass = kTTSymEmpty;
1408 t_symbol *hierarchy, *argName = _sym_nothing;
1411 returnedName = kTTSymEmpty;
1418 if (hierarchy == _sym_subpatcher) {
1422 if (atom_getsym(av) == _sym_pd) {
1441 if (context == kTTSym_view) {
1443 argName = atom_getsym(av+1);
1446 }
else if (context == kTTSym_model || hierarchy == _sym_subpatcher)
1447 argName = atom_getsym(av);
1450 if (argName->s_name[0] ==
'@')
1451 argName = _sym_nothing;
1453 if (argName != _sym_nothing)
1462 t_symbol *_sym_j_context;
1464 t_gobj *obj=patcher->gl_list;
1466 for ( ; obj ; obj = obj->g_next )
1468 _sym_j_context = obj->g_pd->c_name;
1469 if (_sym_j_context == _sym_j_model || _sym_j_context == _sym_j_view) {
1471 t_ret_method _method = (t_ret_method)zgetfn(&obj->g_pd,_sym_share_patcher_info);
1473 _method(&obj->g_pd, &patcherInfo);
1475 if (patcherInfo.
size() == 4) {
1476 *returnedPatcher = (t_canvas*)((
TTPtr)patcherInfo[0]);
1477 returnedContext = patcherInfo[1];
1478 returnedClass = patcherInfo[2];
1479 returnedName = patcherInfo[3];
1491 t_symbol *_sym_j_context;
1493 *returnedModelOrView = NULL;
1495 t_gobj *obj=patcher->gl_list;
1497 for ( ; obj ; obj = obj->g_next )
1499 _sym_j_context = obj->g_pd->c_name;
1500 if (_sym_j_context == _sym_j_model || _sym_j_context == _sym_j_view) {
1502 *returnedModelOrView = (t_object*) obj;
1507 return (
void)returnedModelOrView;
1514 t_symbol *_sym_jcomcontext;
1521 t_gobj *obj=patcher->gl_list;
1523 for ( ; obj ; obj = obj->g_next )
1525 _sym_jcomcontext = obj->g_pd->c_name;
1527 dataInput = dataInput || _sym_jcomcontext == _sym_j_in;
1528 dataOutput = dataOutput || _sym_jcomcontext == _sym_j_out;
1529 audioInput = audioInput || _sym_jcomcontext == _sym_j_intilda;
1530 audioOutput = audioOutput || _sym_jcomcontext == _sym_j_outtilda;
1537 t_symbol *_sym_j_context;
1540 t_gobj *obj=patcher->gl_list;
1542 for ( ; obj ; obj = obj->g_next )
1544 _sym_j_context = obj->g_pd->c_name;
1545 uiObject = _sym_j_context == _sym_j_ui;
1557 t_symbol *_sym_modelfilename, *_sym_j_context, *_sym_objfilename;
1561 *returnedModelPatcher = NULL;
1563 t_gobj *obj=patcher->gl_list;
1565 for ( ; obj ; obj = obj->g_next )
1567 _sym_j_context = obj->g_pd->c_name;
1568 if (_sym_j_context == _sym_jpatcher) {
1571 _sym_objfilename = patcher->gl_name;
1572 if (_sym_objfilename == _sym_modelfilename) {
1574 *returnedModelPatcher = (t_object*)obj->g_pd;
1584 t_symbol *_sym_j_context;
1586 *patcherNode = NULL;
1588 t_gobj *obj=patcher->gl_list;
1591 for ( ; obj ; obj = obj->g_next )
1593 _sym_j_context = obj->g_pd->c_name;
1595 if (_sym_j_context == _sym_j_model || _sym_j_context == _sym_j_view) {
1596 t_ret_method _method = (t_ret_method)zgetfn(&obj->g_pd,_sym_share_patcher_info);
1598 _method(&obj->g_pd, patcherNode);
1609 t_symbol *_sym_j_context;
1612 t_canvas *sharedPatcher = NULL;
1618 *returnedPatcher = obj;
1620 _sym_j_context = object_classname(obj);
1621 canShare = _sym_j_context == gensym(
"j.model") || _sym_j_context == gensym(
"j.view");
1623 patcher = *returnedPatcher;
1626 if (*returnedPatcher) {
1633 if (sharedPatcher && sharedContext && sharedClass && sharedName) {
1635 *returnedPatcher = sharedPatcher;
1636 returnedContext = sharedContext;
1637 returnedClass = sharedClass;
1638 returnedName = sharedName;
1648 if (returnedContext == kTTSymEmpty) {
1650 returnedName = S_SEPARATOR;
1651 returnedClass = kTTSymEmpty;
1662 if (returnedClass == kTTSymEmpty)
1663 returnedClass =
TTSymbol(
"Untitled");
1673 if (returnedName == kTTSymEmpty) {
1676 if (returnedContext == kTTSym_model)
1677 returnedName = returnedClass;
1680 else if (returnedContext == kTTSym_view) {
1681 viewName = returnedClass.
c_str();
1682 viewName +=
"(view)";
1683 returnedName =
TTSymbol(viewName.data());
1688 std::replace(s_toParse.begin(), s_toParse.end(),
'.',
'_');
1689 std::replace(s_toParse.begin(), s_toParse.end(),
' ',
'_');
1721 returnedName =
TTSymbol(s_toParse);
1726 pd_error(obj,
"Can't get the patcher. Subscription failed");
1741 TTStringIter begin, end;
1742 TTStringIter beginNumber, endNumber;
1744 begin = s_toParse.begin();
1745 end = s_toParse.end();
1757 sscanf(s_number.
c_str(),
"%ld", &number);
1759 si_format = s_before;
1761 si_format += s_after;
1763 ss_format = s_before;
1765 ss_format += s_after;
1783 s_num = (
char *)malloc(
sizeof(
char)*len);
1784 snprintf(s_num, len, format.
c_str(), i);
1785 *returnedName = gensym(s_num);
1797 s_str = (
char *)malloc(
sizeof(
char)*len);
1798 snprintf(s_str, len, format.
c_str(), s.
c_str());
1799 *returnedName = gensym(s_str);
1809 len = format.
size() + className.string().
size();
1810 s_str = (
char *)malloc(
sizeof(
char)*len);
1811 snprintf(s_str, len, format.
c_str(), className.
c_str());
1812 *returnedFileName = gensym(s_str);
1824 char fullpath[MAXPDSTRING];
1833 if (atom_gettype(argv) == A_SYM) {
1834 userpath = atom_getsym(argv);
1836 if (userpath != _sym_nothing && userpath != _sym_bang) {
1840 t_binbuf* buf = binbuf_new();
1842 canvas_makefilename(((t_eobj*)x)->o_canvas,userpath->s_name,fullpath,MAXPDSTRING);
1843 binbuf_write(buf,fullpath,
"",1);
1879 char filepath[MAXPDSTRING];
1880 char fullpath[MAXPDSTRING];
1881 char posixpath[MAXPDSTRING];
1889 if (atom_gettype(argv) == A_SYM) {
1890 userpath = atom_getsym(argv);
1892 if (userpath != _sym_nothing && userpath != _sym_bang) {
1894 canvas_makefilename(((t_eobj*)x)->o_canvas,userpath->s_name,fullpath,MAXPDSTRING);
TTErr jamoma_input_create(t_object *x, TTObject &returnedInput)
Create an input object for any signal.
TTErr setSchema(const TTSymbol schemaName)
TODO: Add documentation schemaName TODO: Add documentation.
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
void jamoma_ttvalue_to_typed_Atom(const TTValue &v, t_symbol **msg, long *argc, t_atom **argv, TTBoolean &shifted)
Return audio signal.
TTErr jamoma_sender_send(TTObject &aSender, t_symbol *msg, long argc, const t_atom *argv)
Send Max data using a sender object.
TTErr jamoma_input_send(TTObject &anInput, t_symbol *msg, long argc, const t_atom *argv)
Send any signal to an input object.
TTErr send(const TTSymbol aName)
Send a message to this object with no arguments.
TTErr jamoma_output_create_audio(t_object *x, TTObject &returnedOutput)
Create an output object for audio signal.
TTAddress appendAttribute(TTSymbol anAttribute)
Return a new TTAddress with attribute part.
We build a directory of TTNodes, and you can request a pointer for any TTNode, or add an observer to ...
TTHashPtr jamoma_explorer_default_filter_bank(void)
A type that contains a key and a value.
TTErr jamoma_viewer_create(t_object *x, TTObject &returnedViewer)
Create a viewer object.
t_symbol * jamoma_parse_dieze(t_canvas *x, t_symbol *address)
Parse #N inside address and replace them by parent patcher arguments if there are.
TTAddress getParent()
Get a pointer to the parent address.
const char * c_str() const
Return a pointer to the internal C-string.
TTErr jamoma_mapper_create(t_object *x, TTObject &returnedMapper)
Create a mapper object.
TTBoolean jamoma_patcher_get_ui(t_canvas *patcher)
Is there a j.ui object.
TTErr jamoma_container_create(t_object *x, TTObject &returnedContainer)
Create a container object.
The TTAddress class is used to represent a string and efficiently pass and compare that string...
Create and use Jamoma object instances.
size_type size() const noexcept
Return the number of elements.
void jamoma_callback_return_address(const TTValue &baton, const TTValue &v)
Return an address to a j.
void jamoma_patcher_share_info(t_canvas *patcher, t_canvas **returnedPatcher, TTSymbol &returnedContext, TTSymbol &returnedClass, TTSymbol &returnedName)
Get all context info from the root j.model|view in the patcher.
void JAMOMA_EXPORT jamoma_callback_return_ramped_value(void *o, TTUInt32 n, TTFloat64 *v)
this flag means that an address have no leading slash
TTErr jamoma_ramp_create(t_object *x, TTObject &returnedRamp)
Create a TTRamp object.
void jamoma_patcher_get_model_patcher(t_canvas *patcher, TTSymbol modelClass, t_object **returnedModelPatcher)
Get the "aClass.model" external in the patcher.
TTErr jamoma_output_create(t_object *x, TTObject &returnedOutput)
Create an output object for signal.
void jamoma_edit_filename(TTString format, TTSymbol className, t_symbol **returnedFileName)
edit a file name from a given file format and a class name
Maintain a collection of TTValue objects indexed by TTSymbol pointers.
double TTFloat64
64 bit floating point number
#define ToAppName(ttName)
Convert a local application TTSymbol into a tt name.
TTErr jamoma_cueManager_create(t_object *x, TTObject &returnedCueManager)
Create a cue manager object.
void jamoma_edit_numeric_instance(TTString format, t_symbol **returnedName, long i)
edit a new instance of the given format address using interger
TTSymbol jamoma_file_write(t_object *x, long argc, t_atom *argv, char *default_filename)
Get BOOT style filepath from args or, if no args open a dialog to write a file.
void jamoma_callback_return_value_typed(const TTValue &baton, const TTValue &v)
Return the value to a j.
void append(const T &anElementValueToAppend)
Insert a single TTElement at the end.
void * TTPtr
A generic pointer.
TTErr jamoma_container_send(TTObject &aContainer, t_symbol *relativeAddressAndAttribute, long argc, const t_atom *argv)
Send Max data to a node (e.g., a j.parameter object) using a container object.
TTErr get(const TTSymbol aName, T &aReturnedValue) const
Get an attribute value for an object.
void jamoma_ttvalue_to_Atom(const TTValue &v, long *argc, t_atom **argv)
Make an Atom array from a TTValue (!!! this method allocate memory for the Atom array ! free it after...
void jamoma_ttvalue_from_Atom(TTValue &v, t_symbol *msg, long argc, const t_atom *argv)
Make a TTValue from Atom array.
void jamoma_callback_return_value(const TTValue &baton, const TTValue &v)
Return the value to a j.
TTErr set(const TTSymbol aName, T aValue)
Set an attribute value for an object.
The TTSymbol class is used to represent a string and efficiently pass and compare that string...
TTErr jamoma_sender_create(t_object *x, TTObject &returnedSender)
Create a sender object.
TTErr append(const TTSymbol key, const TTValue &value)
Insert an item into the hash table.
TTErr jamoma_output_send(TTObject &anOutput, t_symbol *msg, long argc, const t_atom *argv)
Send any signal to an output object.
void jamoma_patcher_get_class(t_canvas *patcher, TTSymbol context, TTSymbol &returnedClass)
Get the class of the patcher from the file name (removing .model and .view convention name if they ex...
float TTFloat32
32 bit floating point number
#define ToTTName(appName)
Convert a tt name TTSymbol into a local application name.
TTErr jamoma_explorer_create(t_object *x, TTObject &returnedExplorer)
Create an explorer object.
TTUInt32 jamoma_parse_bracket(t_symbol *s, TTString &si_format, TTString &ss_format)
returned the N inside "pp/xx.[N]/yyy" and a format string as "pp/xx.%d/yy" and a format string as "pp...
TTSymbol & getAttribute()
Get the attribute part.
TTSymbol getNameInstance()
Get the name.instance part.
TTErr jamoma_presetManager_create(t_object *x, TTObject &returnedPresetManager)
Create a preset manager object.
const char * c_str() const
Return a pointer to the internal string as a C-string.
std::int32_t TTInt32
32 bit signed integer
void jamoma_edit_string_instance(TTString format, t_symbol **returnedName, TTString s)
edit a new instance of the given format address using string
TTErr jamoma_receiver_create_audio(t_object *x, TTObject &returnedReceiver)
Create a receiver object for audio signal.
JAMOMA_EXPORT TTRegex * ttRegexForPdhelp
A global regex to parse .maxhelp.
void jamoma_patcher_share_node(t_canvas *patcher, TTNodePtr *patcherNode)
Get patcher's node from the root j.model|view in the patcher.
TTErr jamoma_sender_create_audio(t_object *x, TTObject &returnedSender)
Create a sender object for audio signal.
JamomaModular For Max Shared Library.
TTErr jamoma_patcher_get_info(t_canvas *obj, t_canvas **returnedPatcher, TTSymbol &returnedContext, TTSymbol &returnedClass, TTSymbol &returnedName)
Get all context info from an object (his patcher and the context, the class and the name of his patch...
void clear()
Clear all values from the vector, leaving with size of 0.
TTErr jamoma_viewer_send(TTObject &aViewer, t_symbol *msg, long argc, const t_atom *argv)
Send Max data using a viewer object.
t_symbol * jamoma_patcher_get_hierarchy(t_canvas *canvas)
Get the hierarchy of the patcher : bpatcher, subpatcher or top level one.
Something went wrong, but what exactly is not known. Typically used for context-specific problems...
void jamoma_patcher_get_context(t_canvas *patcher, TTSymbol &returnedContext)
Get the context from the upper j.model|view in the patcher or from patcher's name.
TTAddressType getType()
Get the type.
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
TTErr append(const TTSymbol key, const TTValue &value)
Insert an item into the hash table.
t_symbol * jamoma_TTName_To_PdName(TTSymbol TTName)
Convert a TTSymbol "MyObjectMessage" into a t_symbol *"my/object/message" or return NULL if the TTSym...
JAMOMA_EXPORT TTRegex * ttRegexForPdpat
A global regex to parse .maxpat.
std::uint32_t TTUInt32
32 bit unsigned integer
void jamoma_callback_return_signal(const TTValue &baton, const TTValue &v)
Return any signal.
TTErr jamoma_data_create(t_object *x, TTObject &returnedData, TTSymbol service)
Create a data object.
size_t size() const
Find out the length of a string.
TTErr jamoma_receiver_create(t_object *x, TTObject &returnedReceiver)
Create a receiver object.
void jamoma_patcher_get_name(t_canvas *patcher, TTSymbol context, TTSymbol &returnedName)
Get the name of the patcher from his arguments.
TTErr jamoma_data_command(TTObject &aData, t_symbol *msg, long argc, const t_atom *argv)
Send Max data command.
TTErr JAMOMA_EXPORT jamoma_node_info_create(t_object *x, TTObject &returnedNodeInfo)
Create a TTNodeInfo object.
TTSymbol jamoma_file_read(t_object *x, long argc, t_atom *argv, t_fourcc filetype)
Get BOOT style filepath from args or, if no args open a dialog to read a file.
void jamoma_subscriber_get_patcher_list(t_eobj *x, TTList &aContextListToFill)
Get the
list above an external.
The TTString class is used to represent a string.
TTBoolean valid() const
Determine if the object contained by this TTObject is truly ready for use.
void jamoma_patcher_get_input_output(t_canvas *patcher, TTBoolean &dataInput, TTBoolean &dataOutput, TTBoolean &audioInput, TTBoolean &audioOutput)
Look for input and output (data and audio)
void resize(size_type n)
Change the number of elements.
[doxygenAppendixC_copyExample]
void jamoma_patcher_get_args(t_canvas *canvas, long *argc, t_atom **argv)
Load an external for internal use.
TTErr jamoma_input_create_audio(t_object *x, TTObject &returnedInput)
Create an input object for audio signal.
TTErr jamoma_subscriber_create(t_eobj *x, TTObject &anObject, TTAddress relativeAddress, TTObject &returnedSubscriber, TTSymbol &returnedAddress, TTNodePtr *returnedNode, TTNodePtr *returnedContextNode)
Create a #TTSubscriber object and register a TTObject into the tree or, if aTTObject is NULL...
void jamoma_patcher_get_model_or_view(t_canvas *patcher, t_object **returnedModelOrView)
Get j.model or j.view of a patcher.