summaryrefslogtreecommitdiffstats
path: root/src/progs/patch_loader
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-06-10 02:43:54 +0000
committerDavid Robillard <d@drobilla.net>2006-06-10 02:43:54 +0000
commit47246db7e9d71ba694b719001033fba1766a58c4 (patch)
tree25614ea4f2c92033a3cd37f6413df742f09a5369 /src/progs/patch_loader
parent98fe0e7056e6697396249531785d3899f94d79be (diff)
downloadingen-47246db7e9d71ba694b719001033fba1766a58c4.tar.gz
ingen-47246db7e9d71ba694b719001033fba1766a58c4.tar.bz2
ingen-47246db7e9d71ba694b719001033fba1766a58c4.zip
More juggling
git-svn-id: http://svn.drobilla.net/lad/grauph@16 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/progs/patch_loader')
-rw-r--r--src/progs/patch_loader/Makefile.am13
-rw-r--r--src/progs/patch_loader/README5
-rw-r--r--src/progs/patch_loader/cmdline.c163
-rw-r--r--src/progs/patch_loader/cmdline.ggo7
-rw-r--r--src/progs/patch_loader/cmdline.h47
-rw-r--r--src/progs/patch_loader/new_patch_loader.cpp76
-rw-r--r--src/progs/patch_loader/patch_loader.cpp82
7 files changed, 393 insertions, 0 deletions
diff --git a/src/progs/patch_loader/Makefile.am b/src/progs/patch_loader/Makefile.am
new file mode 100644
index 00000000..15e0c503
--- /dev/null
+++ b/src/progs/patch_loader/Makefile.am
@@ -0,0 +1,13 @@
+EXTRA_DIST = README
+
+om_patch_loader_CXXFLAGS = -I$(top_srcdir)/src/clients -I$(top_srcdir)/src/common -DPKGDATADIR=\"$(pkgdatadir)\" $(LXML2_CFLAGS) $(LOSC_CFLAGS)
+om_patch_loader_LDADD = ../libomclient.a $(LOSC_LIBS) $(LXML2_LIBS)
+
+bin_PROGRAMS = om_patch_loader
+
+om_patch_loader_DEPENDENCIES = ../libomclient.a
+
+om_patch_loader_SOURCES = \
+ patch_loader.cpp \
+ cmdline.h \
+ cmdline.c
diff --git a/src/progs/patch_loader/README b/src/progs/patch_loader/README
new file mode 100644
index 00000000..9f3b6f4b
--- /dev/null
+++ b/src/progs/patch_loader/README
@@ -0,0 +1,5 @@
+This is a stand-alone patch loader for Om. It has no user interface, it
+just launches, loads the patch(es) passed as a parameter, and exits.
+
+Useful for loading patches from scripts, other apps, etc. or just using
+Om patches without loading the GUI.
diff --git a/src/progs/patch_loader/cmdline.c b/src/progs/patch_loader/cmdline.c
new file mode 100644
index 00000000..0606cb7b
--- /dev/null
+++ b/src/progs/patch_loader/cmdline.c
@@ -0,0 +1,163 @@
+/*
+ File autogenerated by gengetopt version 2.10
+ generated with the following command:
+ gengetopt -u
+
+ The developers of gengetopt consider the fixed text that goes in all
+ gengetopt output files to be in the public domain:
+ we make no copyright claims on it.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* If we use autoconf. */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "getopt.h"
+
+#include "cmdline.h"
+
+void
+cmdline_parser_print_version (void)
+{
+ printf ("%s %s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION);
+}
+
+void
+cmdline_parser_print_help (void)
+{
+ cmdline_parser_print_version ();
+ printf("\n"
+ "Usage: %s [OPTIONS]... [FILES]...\n", CMDLINE_PARSER_PACKAGE);
+ printf(" -h --help Print help and exit\n");
+ printf(" -V --version Print version and exit\n");
+ printf(" -uSTRING --engine-url=STRING Om engine URL to connect to\n");
+ printf(" -pINT --client-port=INT Client port to listen on\n");
+}
+
+
+static char *gengetopt_strdup (const char *s);
+
+/* gengetopt_strdup() */
+/* strdup.c replacement of strdup, which is not standard */
+char *
+gengetopt_strdup (const char *s)
+{
+ char *result = (char*)malloc(strlen(s) + 1);
+ if (result == (char*)0)
+ return (char*)0;
+ strcpy(result, s);
+ return result;
+}
+
+int
+cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info)
+{
+ int c; /* Character of the parsed option. */
+ int missing_required_options = 0;
+
+ args_info->help_given = 0 ;
+ args_info->version_given = 0 ;
+ args_info->engine_url_given = 0 ;
+ args_info->client_port_given = 0 ;
+#define clear_args() { \
+ args_info->engine_url_arg = NULL; \
+}
+
+ clear_args();
+
+ args_info->inputs = NULL;
+ args_info->inputs_num = 0;
+
+ optarg = 0;
+ optind = 1;
+ opterr = 1;
+ optopt = '?';
+
+ while (1)
+ {
+ int option_index = 0;
+ char *stop_char;
+
+ static struct option long_options[] = {
+ { "help", 0, NULL, 'h' },
+ { "version", 0, NULL, 'V' },
+ { "engine-url", 1, NULL, 'u' },
+ { "client-port", 1, NULL, 'p' },
+ { NULL, 0, NULL, 0 }
+ };
+
+ stop_char = 0;
+ c = getopt_long (argc, argv, "hVu:p:", long_options, &option_index);
+
+ if (c == -1) break; /* Exit from `while (1)' loop. */
+
+ switch (c)
+ {
+ case 'h': /* Print help and exit. */
+ clear_args ();
+ cmdline_parser_print_help ();
+ exit (EXIT_SUCCESS);
+
+ case 'V': /* Print version and exit. */
+ clear_args ();
+ cmdline_parser_print_version ();
+ exit (EXIT_SUCCESS);
+
+ case 'u': /* Om engine URL to connect to. */
+ if (args_info->engine_url_given)
+ {
+ fprintf (stderr, "%s: `--engine-url' (`-u') option given more than once\n", CMDLINE_PARSER_PACKAGE);
+ clear_args ();
+ exit (EXIT_FAILURE);
+ }
+ args_info->engine_url_given = 1;
+ args_info->engine_url_arg = gengetopt_strdup (optarg);
+ break;
+
+ case 'p': /* Client port to listen on. */
+ if (args_info->client_port_given)
+ {
+ fprintf (stderr, "%s: `--client-port' (`-p') option given more than once\n", CMDLINE_PARSER_PACKAGE);
+ clear_args ();
+ exit (EXIT_FAILURE);
+ }
+ args_info->client_port_given = 1;
+ args_info->client_port_arg = strtol (optarg,&stop_char,0);
+ break;
+
+
+ case 0: /* Long option with no short option */
+
+ case '?': /* Invalid option. */
+ /* `getopt_long' already printed an error message. */
+ exit (EXIT_FAILURE);
+
+ default: /* bug: option not considered. */
+ fprintf (stderr, "%s: option unknown: %c\n", CMDLINE_PARSER_PACKAGE, c);
+ abort ();
+ } /* switch */
+ } /* while */
+
+
+ if ( missing_required_options )
+ exit (EXIT_FAILURE);
+
+ if (optind < argc)
+ {
+ int i = 0 ;
+
+ args_info->inputs_num = argc - optind ;
+ args_info->inputs =
+ (char **)(malloc ((args_info->inputs_num)*sizeof(char *))) ;
+ while (optind < argc)
+ args_info->inputs[ i++ ] = gengetopt_strdup (argv[optind++]) ;
+ }
+
+ return 0;
+}
diff --git a/src/progs/patch_loader/cmdline.ggo b/src/progs/patch_loader/cmdline.ggo
new file mode 100644
index 00000000..5acd6737
--- /dev/null
+++ b/src/progs/patch_loader/cmdline.ggo
@@ -0,0 +1,7 @@
+# Process this file with gengetopt -u to generate the necessary code (in cmdline.h, cmdline.c)
+
+package "om_patch_loader - A command line patch loading client for Om"
+
+option "engine-url" u "Om engine URL to connect to" string no
+option "client-port" p "Client port to listen on" int no
+
diff --git a/src/progs/patch_loader/cmdline.h b/src/progs/patch_loader/cmdline.h
new file mode 100644
index 00000000..b417c664
--- /dev/null
+++ b/src/progs/patch_loader/cmdline.h
@@ -0,0 +1,47 @@
+/* cmdline.h */
+
+/* File autogenerated by gengetopt version 2.10 */
+
+#ifndef CMDLINE_H
+#define CMDLINE_H
+
+/* If we use autoconf. */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifndef CMDLINE_PARSER_PACKAGE
+#define CMDLINE_PARSER_PACKAGE "om_patch_loader - A command line patch loading client for the Om realtime modular synthesizer"
+#endif
+
+#ifndef CMDLINE_PARSER_VERSION
+#define CMDLINE_PARSER_VERSION VERSION
+#endif
+
+struct gengetopt_args_info
+{
+ char * engine_url_arg; /* Om engine URL to connect to. */
+ int client_port_arg; /* Client port to listen on. */
+
+ int help_given ; /* Whether help was given. */
+ int version_given ; /* Whether version was given. */
+ int engine_url_given ; /* Whether engine-url was given. */
+ int client_port_given ; /* Whether client-port was given. */
+
+ char **inputs ; /* unamed options */
+ unsigned inputs_num ; /* unamed options number */
+} ;
+
+int cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info);
+
+void cmdline_parser_print_help(void);
+void cmdline_parser_print_version(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* CMDLINE_H */
diff --git a/src/progs/patch_loader/new_patch_loader.cpp b/src/progs/patch_loader/new_patch_loader.cpp
new file mode 100644
index 00000000..8884e85b
--- /dev/null
+++ b/src/progs/patch_loader/new_patch_loader.cpp
@@ -0,0 +1,76 @@
+/* This file is part of Om. Copyright (C) 2005 Dave Robillard.
+ *
+ * Om is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * Om is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <iostream>
+#include <unistd.h>
+#include "cmdline.h" // generated by gengetopt
+#include "util/Path.h"
+#include "OSCEngineInterface.h"
+#include "PatchLibrarian.h"
+
+using std::cout; using std::cerr; using std::endl;
+using Om::Path;
+
+using namespace LibOmClient;
+
+
+int
+main(int argc, char** argv)
+{
+ const char* engine_url = NULL;
+ int client_port = 0;
+
+ /* Parse command line options */
+ gengetopt_args_info args_info;
+ if (cmdline_parser (argc, argv, &args_info) != 0)
+ return 1;
+
+ if (args_info.engine_url_given) {
+ engine_url = args_info.engine_url_arg;
+ } else {
+ cout << "[Main] No engine URL specified. Attempting to use osc.udp://localhost:16180" << endl;
+ engine_url = "osc.udp://localhost:16180";
+ }
+
+ if (args_info.client_port_given)
+ client_port = args_info.client_port_arg;
+ else
+ client_port = 0; // will choose a free port automatically
+
+ OSCEngineInterface engine(engine_url);
+
+ /* Connect to engine */
+ if (!engine.attach()) {
+ cerr << "Unable to connect to engine" << endl;
+ return 1;
+ }
+
+ engine.activate();
+ engine.register_client();
+
+ /*int id = engine.get_next_request_id();
+ engine.set_wait_response_id(id);
+ engine.load_plugins(id);
+ engine.wait_for_response();
+ */
+ engine.load_plugins();
+
+ // Load patches
+ for (uint i=0; i < args_info.inputs_num; ++i)
+ PatchLibrarian::load_patch(&engine, args_info.inputs[i]);
+
+ return 0;
+}
diff --git a/src/progs/patch_loader/patch_loader.cpp b/src/progs/patch_loader/patch_loader.cpp
new file mode 100644
index 00000000..e8579ed7
--- /dev/null
+++ b/src/progs/patch_loader/patch_loader.cpp
@@ -0,0 +1,82 @@
+/* This file is part of Om. Copyright (C) 2005 Dave Robillard.
+ *
+ * Om is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * Om is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include "OSCModelEngineInterface.h"
+#include "PatchLibrarian.h"
+#include "PatchModel.h"
+#include "util/Path.h"
+#include <iostream>
+#include <unistd.h>
+#include "cmdline.h" // generated by gengetopt
+
+using std::cout; using std::endl;
+using Om::Path;
+
+using namespace LibOmClient;
+
+int main(int argc, char** argv)
+{
+ const char* engine_url = NULL;
+ int client_port = 0;
+
+ /* **** Parse command line options **** */
+
+ gengetopt_args_info args_info;
+ if (cmdline_parser (argc, argv, &args_info) != 0)
+ return 1;
+
+ if (args_info.engine_url_given) {
+ engine_url = args_info.engine_url_arg;
+ } else {
+ cout << "[Main] No engine URL specified. Attempting to use osc.udp://localhost:16180" << endl;
+ engine_url = "osc.udp://localhost:16180";
+ }
+
+ if (args_info.client_port_given)
+ client_port = args_info.client_port_arg;
+
+
+ /* **** Mr. Spock.. Engage **** */
+
+
+ OSCModelEngineInterface osc_controller(engine_url);
+ PatchLibrarian librarian(&osc_controller);
+
+ /* Connect to engine */
+ osc_controller.attach(client_port);
+ osc_controller.activate();
+ //osc_controller.register_client(NULL); // FIXME
+
+ //int id = osc_controller.get_next_request_id();
+ //osc_controller.set_wait_response_id(id);
+ //osc_controller.load_plugins(id);
+ //osc_controller.wait_for_response();
+ /* FIXME: Make this work like this:
+ * osc_controller.load_plugins();
+ * osc_controller.wait_for_response();
+ */
+
+ // Load patches
+ for (uint i=0; i < args_info.inputs_num; ++i) {
+ PatchModel* pm = new PatchModel("", 0);
+ pm->filename(args_info.inputs[i]);
+ librarian.load_patch(pm, true);
+ delete pm;
+ }
+
+ return 0;
+}