LMMS
Loading...
Searching...
No Matches
guimain.cpp
Go to the documentation of this file.
1/*
2 ZynAddSubFX - a software synthesizer
3
4 guimain.cpp - Main file of synthesizer GUI
5 Copyright (C) 2015 Mark McCurry
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
11*/
12
13#include <rtosc/thread-link.h>
14#include <lo/lo.h>
15#include <string>
16#include <thread>
17
18//GUI System
19#include "Connection.h"
20#include "NSM.H"
21
22#include <sys/stat.h>
24const char *embedId = NULL;
25#if USE_NSM
26NSM_Client *nsm = NULL;
27#endif
28lo_server server;
29std::string sendtourl;
30
31/*
32 * Program exit
33 */
35{
37}
38
40
41
42#include "Connection.h"
43#include "Fl_Osc_Interface.h"
44#include "../globals.h"
45#include <map>
46#include <cassert>
47
48#include <rtosc/rtosc.h>
49#include <rtosc/ports.h>
50
51#include <FL/Fl.H>
52#include "Fl_Osc_Tree.H"
53#include "common.H"
54#include "MasterUI.h"
55
56#ifdef NTK_GUI
57#include <FL/Fl_Shared_Image.H>
58#include <FL/Fl_Tiled_Image.H>
59#include <FL/Fl_Dial.H>
60#include <FL/x.H>
61#include <err.h>
62#endif // NTK_GUI
63
64#ifndef NO_UI
65#include "Fl_Osc_Widget.H"
66#endif
67
68using namespace GUI;
69class MasterUI *ui=0;
70
71// exceptionally extension of the namespace outside the core
72namespace zyncarla
73{
74 bool isPlugin = false;
75 bool fileexists(const char *filename)
76 {
77 struct stat tmp;
78 int result = stat(filename, &tmp);
79 if(result >= 0)
80 return true;
81
82 return false;
83 }
84}
85
86#ifdef NTK_GUI
87static Fl_Tiled_Image *module_backdrop;
88#endif
89
91{
92 const bool undo_ = Fl::event_ctrl() && Fl::event_key() == 'z';
93 const bool redo = Fl::event_ctrl() && Fl::event_key() == 'r';
94 const bool show = Fl::event_ctrl() && Fl::event_shift() &&
95 Fl::event_key() == 's';
96 const bool panel = Fl::event_ctrl() && Fl::event_shift() &&
97 Fl::event_key() == 'p';
98 if(undo_)
99 ui->osc->write("/undo", "");
100 else if(redo)
101 ui->osc->write("/redo", "");
102 else if (show) {
103 ui->simplemasterwindow->hide();
104 ui->masterwindow->show();
105 }
106 else if (panel)
107 ui->panelwindow->show();
108 return undo_ || redo || show;
109}
110
111void
112set_module_parameters ( Fl_Widget *o )
113{
114#ifdef NTK_GUI
115 o->box( FL_DOWN_FRAME );
116 o->align( o->align() | FL_ALIGN_IMAGE_BACKDROP );
117 o->color( FL_BLACK );
118 o->image( module_backdrop );
119 o->labeltype( FL_SHADOW_LABEL );
120 if(o->parent()) {
121 o->parent()->labeltype(FL_NO_LABEL);
122 o->parent()->box(FL_NO_BOX);
123 }
124#else
125 o->box( FL_PLASTIC_UP_BOX );
126 o->color( FL_CYAN );
127 o->labeltype( FL_EMBOSSED_LABEL );
128#endif
129}
130
132{
133#ifdef NTK_GUI
134 fl_register_images();
135
136 Fl_Dial::default_style(Fl_Dial::PIXMAP_DIAL);
137
138#ifdef CARLA_VERSION_STRING
139 if(Fl_Shared_Image *img = Fl_Shared_Image::get(gUiPixmapPath + "/knob.png"))
140 Fl_Dial::default_image(img);
141#else
142 if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/knob.png"))
143 Fl_Dial::default_image(img);
144#endif
145 else if(Fl_Shared_Image *img = Fl_Shared_Image::get(SOURCE_DIR "/pixmaps/knob.png"))
146 Fl_Dial::default_image(img);
147 else
148 errx(1, "ERROR: Cannot find pixmaps/knob.png");
149
150
151#ifdef CARLA_VERSION_STRING
152 if(Fl_Shared_Image *img = Fl_Shared_Image::get(gUiPixmapPath + "/window_backdrop.png"))
153 Fl::scheme_bg(new Fl_Tiled_Image(img));
154#else
155 if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/window_backdrop.png"))
156 Fl::scheme_bg(new Fl_Tiled_Image(img));
157#endif
158 else if(Fl_Shared_Image *img = Fl_Shared_Image::get(SOURCE_DIR "/pixmaps/window_backdrop.png"))
159 Fl::scheme_bg(new Fl_Tiled_Image(img));
160 else
161 errx(1, "ERROR: Cannot find pixmaps/window_backdrop.png");
162
163#ifdef CARLA_VERSION_STRING
164 if(Fl_Shared_Image *img = Fl_Shared_Image::get(gUiPixmapPath + "/module_backdrop.png"))
165 module_backdrop = new Fl_Tiled_Image(img);
166#else
167 if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/module_backdrop.png"))
168 module_backdrop = new Fl_Tiled_Image(img);
169#endif
170 else if(Fl_Shared_Image *img = Fl_Shared_Image::get(SOURCE_DIR "/pixmaps/module_backdrop.png"))
171 module_backdrop = new Fl_Tiled_Image(img);
172 else
173 errx(1, "ERROR: Cannot find pixmaps/module_backdrop");
174
175 Fl::background(50, 50, 50);
176 Fl::background2(70, 70, 70);
177 Fl::foreground(255, 255, 255);
178#endif
179
180 //Fl_Window *midi_win = new Fl_Double_Window(400, 400, "Midi connections");
181 //Fl_Osc_Tree *tree = new Fl_Osc_Tree(0,0,400,400);
182 //midi_win->resizable(tree);
183 //tree->root_ports = &Master::ports;
184 //tree->osc = osc;
185 //midi_win->show();
186
187 Fl::add_handler(kb_shortcut_handler);
188
189 ui = new MasterUI((int*)exit, osc);
190
191 if (embedId != NULL)
192 {
193 if (long long winId = atoll(embedId))
194 {
195 // running as plugin
196 isPlugin = true;
197 MasterUI::menu_mastermenu[11].hide(); // file -> nio settings
198 MasterUI::menu_mastermenu[26].deactivate(); // misc -> switch interface mode
199#ifdef NTK_GUI
200 if (winId != 1)
201 {
202 MasterUI::menu_mastermenu[13].hide(); // file -> exit
203 fl_embed(ui->masterwindow, winId);
204 }
205#endif
206 ui->masterwindow->show();
207 }
208 }
209
210 return (void*) ui;
211}
213{
214 delete static_cast<MasterUI*>(ui);
215}
216
217#define BEGIN(x) {x,":non-realtime\0",NULL,[](const char *m, rtosc::RtData d){ \
218 MasterUI *ui = static_cast<MasterUI*>(d.obj); \
219 rtosc_arg_t a0 = {0}, a1 = {0}; \
220 if(rtosc_narguments(m) > 0) \
221 a0 = rtosc_argument(m,0); \
222 if(rtosc_narguments(m) > 1) \
223 a1 = rtosc_argument(m,1); \
224 (void)ui;(void)a1;(void)a0;
225
226#define END }},
227
228struct uiPorts {
229 static rtosc::Ports ports;
230};
231
232//DSL based ports
234 BEGIN("show:i") {
235 ui->showUI(a0.i);
236 } END
237 BEGIN("alert:s") {
238 fl_alert("%s",a0.s);
239 } END
240 BEGIN("session-type:s") {
241 if(strcmp(a0.s,"LASH"))
242 return;
243 ui->sm_indicator1->value(1);
244 ui->sm_indicator2->value(1);
245 ui->sm_indicator1->tooltip("LASH");
246 ui->sm_indicator2->tooltip("LASH");
247 } END
248 BEGIN("save-master:s") {
249 ui->do_save_master(a0.s);
250 } END
251 BEGIN("load-master:s") {
252 ui->do_load_master(a0.s);
253 } END
254 BEGIN("vu-meter:bb") {
255#ifdef DEBUG
256 printf("Vu meter handler...\n");
257#endif
258 if(a0.b.len == sizeof(vuData) &&
259 a1.b.len == sizeof(float)*NUM_MIDI_PARTS) {
260#ifdef DEBUG
261 printf("Normal behavior...\n");
262#endif
263 //Refresh the primary VU meters
264 ui->simplemastervu->update((vuData*)a0.b.data);
265 ui->mastervu->update((vuData*)a0.b.data);
266
267 float *partvu = (float*)a1.b.data;
268 for(int i=0; i<NUM_MIDI_PARTS; ++i)
269 ui->panellistitem[i]->partvu->update(partvu[i]);
270 }
271 } END
272 BEGIN("close-ui") {
273 ui->close();
274 } END
275};
276
277
278void GUI::raiseUi(ui_handle_t gui, const char *message)
279{
280 if(!gui)
281 return;
282 MasterUI *mui = (MasterUI*)gui;
283 mui->osc->tryLink(message);
284#ifdef DEBUG
285 printf("got message for UI '%s:%s'\n", message, rtosc_argument_string(message));
286#endif
287 char buffer[1024];
288 memset(buffer, 0, sizeof(buffer));
290 d.loc = buffer;
291 d.loc_size = 1024;
292 d.obj = gui;
293 uiPorts::ports.dispatch(message+1, d);
294}
295
296void GUI::raiseUi(ui_handle_t gui, const char *dest, const char *args, ...)
297{
298 char buffer[1024];
299 va_list va;
300 va_start(va,args);
301 if(rtosc_vmessage(buffer,1024,dest,args,va))
302 raiseUi(gui, buffer);
303 va_end(va);
304}
305
307{
308 Fl::wait(0.02f);
309}
310
311/******************************************************************************
312 * OSC Interface For User Interface *
313 * *
314 * This is a largely out of date section of code *
315 * Most type specific write methods are no longer used *
316 * See UI/Fl_Osc_* to see what is actually used in this interface *
317 ******************************************************************************/
319{
320 public:
322 {}
323
324 void transmitMsg(const char *path, const char *args, ...)
325 {
326 char buffer[1024];
327 va_list va;
328 va_start(va,args);
329 if(rtosc_vmessage(buffer,1024,path,args,va))
330 transmitMsg(buffer);
331 else
332 fprintf(stderr, "Error in transmitMsg(...)\n");
333 va_end(va);
334 }
335
336 void transmitMsg(const char *rtmsg)
337 {
338 //Send to known url
339 if(!sendtourl.empty()) {
340 lo_message msg = lo_message_deserialise((void*)rtmsg,
342 lo_address addr = lo_address_new_from_url(sendtourl.c_str());
343 lo_send_message(addr, rtmsg, msg);
344 }
345 }
346
347 void requestValue(string s) override
348 {
349 //printf("Request Value '%s'\n", s.c_str());
350 assert(s!="/Psysefxvol-1/part0");
351 //Fl_Osc_Interface::requestValue(s);
352 /*
353 if(impl->activeUrl() != "GUI") {
354 impl->transmitMsg("/echo", "ss", "OSC_URL", "GUI");
355 impl->activeUrl("GUI");
356 }*/
357
358 transmitMsg(s.c_str(),"");
359 }
360
361 void write(string s, const char *args, ...) override
362 {
363 char buffer[4096];
364 va_list va;
365 va_start(va, args);
366 rtosc_vmessage(buffer, sizeof(buffer), s.c_str(), args, va);
367 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 4 + 30, 0 + 40);
369 //fprintf(stderr, "write(%s:%s)\n", s.c_str(), args);
370 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
371 transmitMsg(buffer);
372 va_end(va);
373 }
374
375 void writeRaw(const char *msg) override
376 {
377 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 4 + 30, 0 + 40);
379 //fprintf(stderr, "rawWrite(%s:%s)\n", msg, rtosc_argument_string(msg));
380 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
382 }
383
384 void writeValue(string s, string ss) override
385 {
386 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 4 + 30, 0 + 40);
387 //fprintf(stderr, "writevalue<string>(%s,%s)\n", s.c_str(),ss.c_str());
388 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
389 transmitMsg(s.c_str(), "s", ss.c_str());
390 }
391
392 void writeValue(string s, char c) override
393 {
394 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 4 + 30, 0 + 40);
395 //fprintf(stderr, "writevalue<char>(%s,%d)\n", s.c_str(),c);
396 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
397 transmitMsg(s.c_str(), "c", c);
398 }
399
400 void writeValue(string s, float f) override
401 {
402 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 4 + 30, 0 + 40);
403 //fprintf(stderr, "writevalue<float>(%s,%f)\n", s.c_str(),f);
404 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
405 transmitMsg(s.c_str(), "f", f);
406 }
407
408 void createLink(string s, class Fl_Osc_Widget*w) override
409 {
410 assert(s.length() != 0);
412 assert(!strstr(s.c_str(), "/part0/kit-1"));
413 map.insert(std::pair<string,Fl_Osc_Widget*>(s,w));
414 }
415
416 void renameLink(string old, string newer, Fl_Osc_Widget *w) override
417 {
418 fprintf(stdout, "renameLink('%s','%s',%p)\n",
419 old.c_str(), newer.c_str(), w);
420 removeLink(old, w);
421 createLink(newer, w);
422 }
423
424 void removeLink(string s, class Fl_Osc_Widget*w) override
425 {
426 for(auto i = map.begin(); i != map.end(); ++i) {
427 if(i->first == s && i->second == w) {
428 map.erase(i);
429 break;
430 }
431 }
432 //printf("[%d] removing '%s' (%p)...\n", map.size(), s.c_str(), w);
433 }
434
435 virtual void removeLink(class Fl_Osc_Widget *w) override
436 {
437 bool processing = true;
438 while(processing)
439 {
440 //Verify Iterator invalidation sillyness
441 processing = false;//Exit if no new elements are found
442 for(auto i = map.begin(); i != map.end(); ++i) {
443 if(i->second == w) {
444 //printf("[%d] removing '%s' (%p)...\n", map.size()-1,
445 // i->first.c_str(), w);
446 map.erase(i);
447 processing = true;
448 break;
449 }
450 }
451 }
452 }
453
454 //A very simplistic implementation of a UI agnostic refresh method
455 virtual void damage(const char *path) override
456 {
457 //printf("\n\nDamage(\"%s\")\n", path);
458 for(auto pair:map) {
459 if(strstr(pair.first.c_str(), path)) {
460 auto *tmp = dynamic_cast<Fl_Widget*>(pair.second);
461 //if(tmp)
462 // printf("%x, %d %d [%s]\n", (int)pair.second, tmp->visible_r(), tmp->visible(), pair.first.c_str());
463 //else
464 // printf("%x, (NULL)[%s]\n", (int)pair.second,pair.first.c_str());
465 if(!tmp || tmp->visible_r())
466 pair.second->update();
467 }
468 }
469 }
470
471 void tryLink(const char *msg) override
472 {
473
474 //DEBUG
475 //if(strcmp(msg, "/vu-meter"))//Ignore repeated message
476 // printf("trying the link for a '%s'<%s>\n", msg, rtosc_argument_string(msg));
477 const char *handle = strrchr(msg,'/');
478 if(handle)
479 ++handle;
480
481 int found_count = 0;
482
483 auto range = map.equal_range(msg);
484 for(auto itr = range.first; itr != range.second; ++itr) {
485 auto widget = itr->second;
486 found_count++;
487 const char *arg_str = rtosc_argument_string(msg);
488
489 //Always provide the raw message
490 widget->OSC_raw(msg);
491
492 if(!strcmp(arg_str, "b")) {
493 widget->OSC_value(rtosc_argument(msg,0).b.len,
494 rtosc_argument(msg,0).b.data,
495 handle);
496 } else if(!strcmp(arg_str, "c")) {
497 widget->OSC_value((char)rtosc_argument(msg,0).i,
498 handle);
499 } else if(!strcmp(arg_str, "s")) {
500 widget->OSC_value((const char*)rtosc_argument(msg,0).s,
501 handle);
502 } else if(!strcmp(arg_str, "i")) {
503 widget->OSC_value((int)rtosc_argument(msg,0).i,
504 handle);
505 } else if(!strcmp(arg_str, "f")) {
506 widget->OSC_value((float)rtosc_argument(msg,0).f,
507 handle);
508 } else if(!strcmp(arg_str, "T") || !strcmp(arg_str, "F")) {
509 widget->OSC_value((bool)rtosc_argument(msg,0).T, handle);
510 }
511 }
512
513 if(found_count == 0
514 && strcmp(msg, "/vu-meter")
515 && strcmp(msg, "undo_change")
516 && !strstr(msg, "parameter")
517 && !strstr(msg, "Prespoint")) {
518 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 1, 7 + 30, 0 + 40);
519 //fprintf(stderr, "Unknown widget '%s'\n", msg);
520 //fprintf(stderr, "%c[%d;%d;%dm", 0x1B, 0, 7 + 30, 0 + 40);
521 }
522 };
523
525 {
526 if(!map.empty()) {
527 printf("Leaked controls:\n");
528 for(auto i = map.begin(); i != map.end(); ++i) {
529 printf("Known control '%s' (%p)...\n", i->first.c_str(), i->second);
530 }
531 }
532 }
533
534
535 private:
536 std::multimap<string,Fl_Osc_Widget*> map;
537};
538
540{
541 return new UI_Interface();
542}
543
545
546static void liblo_error_cb(int i, const char *m, const char *loc)
547{
548 fprintf(stderr, "liblo :-( %d-%s@%s\n",i,m,loc);
549}
550
551static int handler_function(const char *path, const char *types, lo_arg **argv,
552 int argc, lo_message msg, void *user_data)
553{
554 (void) types;
555 (void) argv;
556 (void) argc;
557 (void) user_data;
558 char buffer[8192];
559 memset(buffer, 0, sizeof(buffer));
560 size_t size = sizeof(buffer);
561 assert(lo_message_length(msg, path) <= sizeof(buffer));
562 lo_message_serialise(msg, path, buffer, &size);
563 assert(size <= sizeof(buffer));
564 lo_buffer.raw_write(buffer);
565
566 return 0;
567}
568
569void watch_lo(void)
570{
571 while(server && Pexitprogram == 0)
572 lo_server_recv_noblock(server, 100);
573}
574
575const char *help_message =
576"zynaddsubfx-ext-gui [options] uri - Connect to remote ZynAddSubFX\n"
577" --help print this help message\n"
578" --no-uri run without a remote ZynAddSubFX\n"
579" --embed window ID [Internal Flag For Embedding Windows]\n"
580"\n"
581" example: zynaddsubfx-ext-gui osc.udp://localhost:1234/\n"
582" This will connect to a running zynaddsubfx instance on the same\n"
583" machine on port 1234.\n";
584
585#ifndef CARLA_VERSION_STRING
586int main(int argc, char *argv[])
587{
588 const char *uri = NULL;
589 const char *title = NULL;
590 bool help = false;
591 bool no_uri = false;
592 for(int i=1; i<argc; ++i) {
593 if(!strcmp("--help", argv[i]))
594 help = true;
595 else if(!strcmp("--no-uri", argv[i]))
596 no_uri = true;
597 else if(!strcmp("--embed", argv[i]))
598 embedId = argv[++i];
599 else if(!strcmp("--title", argv[i]))
600 title = argv[++i];
601 else
602 uri = argv[i];
603 }
604 if(uri == NULL && no_uri == false)
605 help = true;
606
607 if(help) {
608 puts(help_message);
609 return 1;
610 }
611
612 //Startup Liblo Link
613 if(uri) {
614 server = lo_server_new_with_proto(NULL, LO_UDP, liblo_error_cb);
615 lo_server_add_method(server, NULL, NULL, handler_function, 0);
616 sendtourl = uri;
617 }
618 fprintf(stderr, "ext client running on %d\n", lo_server_get_port(server));
619 std::thread lo_watch(watch_lo);
620
622
623 if (title != NULL)
624 GUI::raiseUi(gui, "/ui/title", "s", title);
625
626 GUI::raiseUi(gui, "/show", "i", 1);
627 while(Pexitprogram == 0) {
629 while(lo_buffer.hasNext())
630 raiseUi(gui, lo_buffer.read());
631 }
632
633 exitprogram();
634 lo_watch.join();
635 return 0;
636}
637#endif
#define errx(...)
Definition SVFilter.cpp:21
NSM_Client * nsm
#define NUM_MIDI_PARTS
Definition globals.h:99
#define NULL
Definition CarlaBridgeFormat.cpp:30
int kb_shortcut_handler(int)
Definition Connection.cpp:44
class MasterUI * ui
Definition Connection.cpp:39
assert(0)
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
int main(void)
Definition atom-test.c:30
Definition Fl_Osc_Interface.h:56
virtual void createLink(string, class Fl_Osc_Widget *)
Definition Fl_Osc_Interface.h:61
Definition Fl_Osc_Widget.H:21
Definition Connection.cpp:285
virtual void removeLink(class Fl_Osc_Widget *w) override
Definition guimain.cpp:435
void renameLink(string old, string newer, Fl_Osc_Widget *w) override
Definition guimain.cpp:416
void transmitMsg(const char *path, const char *args,...)
Definition guimain.cpp:324
void writeValue(string s, float f) override
Definition guimain.cpp:400
void removeLink(string s, class Fl_Osc_Widget *w) override
Definition Connection.cpp:373
void write(string s, const char *args,...) override
Definition guimain.cpp:361
void transmitMsg(const char *rtmsg)
Definition guimain.cpp:336
void dumpLookupTable(void)
Definition guimain.cpp:524
void requestValue(string s) override
Definition guimain.cpp:347
void tryLink(const char *msg) override
Definition guimain.cpp:471
void writeValue(string s, string ss) override
Definition guimain.cpp:384
void writeRaw(const char *msg) override
Definition guimain.cpp:375
std::multimap< string, Fl_Osc_Widget * > map
Definition Connection.cpp:490
virtual void damage(const char *path) override
Definition guimain.cpp:455
UI_Interface()
Definition guimain.cpp:321
void writeValue(string s, char c) override
Definition guimain.cpp:392
void createLink(string s, class Fl_Osc_Widget *w) override
Definition guimain.cpp:408
UINT_D64 w
Definition inflate.c:942
unsigned * m
Definition inflate.c:1559
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned f
Definition inflate.c:1572
static char filename[]
Definition features.c:5
char * argv[]
Definition unzip.c:738
static const char * title
Definition pugl.h:1747
const char * help_message
Definition guimain.cpp:575
#define BEGIN(x)
Definition guimain.cpp:217
void set_module_parameters(Fl_Widget *o)
Definition guimain.cpp:112
const char * embedId
Definition guimain.cpp:24
int kb_shortcut_handler(int)
Definition guimain.cpp:90
void watch_lo(void)
Definition guimain.cpp:569
lo_server server
Definition guimain.cpp:28
int Pexitprogram
Definition guimain.cpp:39
rtosc::ThreadLink lo_buffer(4096 *2, 1000)
static int handler_function(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data)
Definition guimain.cpp:551
void exitprogram()
Definition guimain.cpp:34
std::string sendtourl
Definition guimain.cpp:29
static void liblo_error_cb(int i, const char *m, const char *loc)
Definition guimain.cpp:546
CARLA_PLUGIN_EXPORT void exit(int status)
Definition interposer-safe.cpp:70
static SordNode * uri(SordWorld *world, int num)
Definition sord_test.c:47
const char * msg
Definition missing_descriptor.c:20
Definition Connection.h:23
void * ui_handle_t
Definition Connection.h:24
Fl_Osc_Interface * genOscInterface(zyncarla::MiddleWare *)
Definition ConnectionDummy.cpp:32
void raiseUi(ui_handle_t, const char *)
Definition ConnectionDummy.cpp:22
void destroyUi(ui_handle_t)
Definition ConnectionDummy.cpp:19
ui_handle_t createUi(Fl_Osc_Interface *osc, void *exit)
Definition ConnectionDummy.cpp:15
void tickUi(ui_handle_t)
Definition ConnectionDummy.cpp:28
JOCTET * buffer
Definition juce_JPEGLoader.cpp:302
Definition zynaddsubfx-src.cpp:569
bool fileexists(const char *filename)
Definition Util.cpp:110
bool isPlugin
Definition Util.cpp:41
GUI::ui_handle_t gui
Definition main.cpp:50
size_t rtosc_message_length(const char *msg, size_t len)
Definition rtosc.c:848
size_t rtosc_vmessage(char *buffer, size_t len, const char *address, const char *arguments, va_list ap)
Definition rtosc.c:497
const char * rtosc_argument_string(const char *msg)
Definition rtosc.c:11
rtosc_arg_t rtosc_argument(const char *msg, unsigned idx)
Definition rtosc.c:732
Definition ports.h:161
data object for the dispatch routine
Definition ports.h:55
Definition Connection.cpp:159
static rtosc::Ports ports
Definition Connection.cpp:164
Definition Master.h:44
return c
Definition crypt.c:175
b
Definition crypt.c:628
ulg size
Definition extract.c:2350
int result
Definition process.c:1455
#define void
Definition unzip.h:396
#define END
Definition unzpriv.h:1662
ss
Definition zipinfo.c:2292
int argc
Definition zipinfo.c:455
#define SOURCE_DIR
Definition zynaddsubfx-src.cpp:21