summaryrefslogtreecommitdiffstats
path: root/src/progs/server/cmdline.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-12-12 12:45:33 +0000
committerDavid Robillard <d@drobilla.net>2006-12-12 12:45:33 +0000
commit71f632d459471c2e75ed04b808df9671539a182c (patch)
tree2fe3c25243e7b915656c02dd46bca5a0d317b599 /src/progs/server/cmdline.c
parent9e2a757e026abf79d0cdcf12a18796fa89973356 (diff)
downloadingen-71f632d459471c2e75ed04b808df9671539a182c.tar.gz
ingen-71f632d459471c2e75ed04b808df9671539a182c.tar.bz2
ingen-71f632d459471c2e75ed04b808df9671539a182c.zip
Connection loading.
Command line parameter for server to allow connecting to specific JACK server. git-svn-id: http://svn.drobilla.net/lad/ingen@217 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/progs/server/cmdline.c')
-rw-r--r--src/progs/server/cmdline.c324
1 files changed, 282 insertions, 42 deletions
diff --git a/src/progs/server/cmdline.c b/src/progs/server/cmdline.c
index 6b7ddf6a..6a697a04 100644
--- a/src/progs/server/cmdline.c
+++ b/src/progs/server/cmdline.c
@@ -1,27 +1,83 @@
/*
- File autogenerated by gengetopt version 2.10
+ File autogenerated by gengetopt version 2.18
generated with the following command:
- gengetopt
+ 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
#include "getopt.h"
#include "cmdline.h"
+const char *gengetopt_args_info_purpose = "";
+
+const char *gengetopt_args_info_usage = "Usage: Om - An OSC controlled realtime modular synthesizer [OPTIONS]... [FILES]...";
+
+const char *gengetopt_args_info_help[] = {
+ " -h, --help Print help and exit",
+ " -V, --version Print version and exit",
+ " -p, --port=STRING OSC port to listen on (default=`16180')",
+ " -j, --jack-server=STRING Name of Jack server to attach to",
+ " -i, --in-jackd Run engine as in-process JACK client (default=off)",
+ 0
+};
+
+static
+void clear_given (struct gengetopt_args_info *args_info);
+static
+void clear_args (struct gengetopt_args_info *args_info);
+
+static int
+cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required, const char *additional_error);
+
+
+static char *
+gengetopt_strdup (const char *s);
+
+static
+void clear_given (struct gengetopt_args_info *args_info)
+{
+ args_info->help_given = 0 ;
+ args_info->version_given = 0 ;
+ args_info->port_given = 0 ;
+ args_info->jack_server_given = 0 ;
+ args_info->in_jackd_given = 0 ;
+}
+
+static
+void clear_args (struct gengetopt_args_info *args_info)
+{
+ args_info->port_arg = gengetopt_strdup ("16180");
+ args_info->port_orig = NULL;
+ args_info->jack_server_arg = NULL;
+ args_info->jack_server_orig = NULL;
+ args_info->in_jackd_flag = 0;
+
+}
+
+static
+void init_args_info(struct gengetopt_args_info *args_info)
+{
+ args_info->help_help = gengetopt_args_info_help[0] ;
+ args_info->version_help = gengetopt_args_info_help[1] ;
+ args_info->port_help = gengetopt_args_info_help[2] ;
+ args_info->jack_server_help = gengetopt_args_info_help[3] ;
+ args_info->in_jackd_help = gengetopt_args_info_help[4] ;
+
+}
+
void
cmdline_parser_print_version (void)
{
@@ -31,24 +87,124 @@ cmdline_parser_print_version (void)
void
cmdline_parser_print_help (void)
{
+ int i = 0;
cmdline_parser_print_version ();
- printf("\n"
- "Usage: %s [OPTIONS]...\n", CMDLINE_PARSER_PACKAGE);
- printf(" -h --help Print help and exit\n");
- printf(" -V --version Print version and exit\n");
- printf(" -pSTRING --port=STRING OSC port to listen on (default='16180')\n");
- printf(" -i --in-jackd Run engine as in-process JACK client (default=off)\n");
+
+ if (strlen(gengetopt_args_info_purpose) > 0)
+ printf("\n%s\n", gengetopt_args_info_purpose);
+
+ printf("\n%s\n\n", gengetopt_args_info_usage);
+ while (gengetopt_args_info_help[i])
+ printf("%s\n", gengetopt_args_info_help[i++]);
+}
+
+void
+cmdline_parser_init (struct gengetopt_args_info *args_info)
+{
+ clear_given (args_info);
+ clear_args (args_info);
+ init_args_info (args_info);
+
+ args_info->inputs = NULL;
+ args_info->inputs_num = 0;
+}
+
+static void
+cmdline_parser_release (struct gengetopt_args_info *args_info)
+{
+
+ unsigned int i;
+ if (args_info->port_arg)
+ {
+ free (args_info->port_arg); /* free previous argument */
+ args_info->port_arg = 0;
+ }
+ if (args_info->port_orig)
+ {
+ free (args_info->port_orig); /* free previous argument */
+ args_info->port_orig = 0;
+ }
+ if (args_info->jack_server_arg)
+ {
+ free (args_info->jack_server_arg); /* free previous argument */
+ args_info->jack_server_arg = 0;
+ }
+ if (args_info->jack_server_orig)
+ {
+ free (args_info->jack_server_orig); /* free previous argument */
+ args_info->jack_server_orig = 0;
+ }
+
+ for (i = 0; i < args_info->inputs_num; ++i)
+ free (args_info->inputs [i]);
+
+ if (args_info->inputs_num)
+ free (args_info->inputs);
+
+ clear_given (args_info);
+}
+
+int
+cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info)
+{
+ FILE *outfile;
+ int i = 0;
+
+ outfile = fopen(filename, "w");
+
+ if (!outfile)
+ {
+ fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename);
+ return EXIT_FAILURE;
+ }
+
+ if (args_info->help_given) {
+ fprintf(outfile, "%s\n", "help");
+ }
+ if (args_info->version_given) {
+ fprintf(outfile, "%s\n", "version");
+ }
+ if (args_info->port_given) {
+ if (args_info->port_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "port", args_info->port_orig);
+ } else {
+ fprintf(outfile, "%s\n", "port");
+ }
+ }
+ if (args_info->jack_server_given) {
+ if (args_info->jack_server_orig) {
+ fprintf(outfile, "%s=\"%s\"\n", "jack-server", args_info->jack_server_orig);
+ } else {
+ fprintf(outfile, "%s\n", "jack-server");
+ }
+ }
+ if (args_info->in_jackd_given) {
+ fprintf(outfile, "%s\n", "in-jackd");
+ }
+
+ fclose (outfile);
+
+ i = EXIT_SUCCESS;
+ return i;
}
+void
+cmdline_parser_free (struct gengetopt_args_info *args_info)
+{
+ cmdline_parser_release (args_info);
+}
-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);
+ char *result = NULL;
+ if (!s)
+ return result;
+
+ result = (char*)malloc(strlen(s) + 1);
if (result == (char*)0)
return (char*)0;
strcpy(result, s);
@@ -58,22 +214,46 @@ gengetopt_strdup (const char *s)
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;
+ return cmdline_parser2 (argc, argv, args_info, 0, 1, 1);
+}
- args_info->help_given = 0 ;
- args_info->version_given = 0 ;
- args_info->port_given = 0 ;
- args_info->in_jackd_given = 0 ;
-#define clear_args() { \
- args_info->port_arg = gengetopt_strdup("16180") ;\
- args_info->in_jackd_flag = 0;\
+int
+cmdline_parser2 (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required)
+{
+ int result;
+
+ result = cmdline_parser_internal (argc, argv, args_info, override, initialize, check_required, NULL);
+
+ if (result == EXIT_FAILURE)
+ {
+ cmdline_parser_free (args_info);
+ exit (EXIT_FAILURE);
+ }
+
+ return result;
+}
+
+int
+cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name)
+{
+ return EXIT_SUCCESS;
}
- clear_args();
+int
+cmdline_parser_internal (int argc, char * const *argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required, const char *additional_error)
+{
+ int c; /* Character of the parsed option. */
+
+ int error = 0;
+ struct gengetopt_args_info local_args_info;
+
+ if (initialize)
+ cmdline_parser_init (args_info);
+
+ cmdline_parser_init (&local_args_info);
optarg = 0;
- optind = 1;
+ optind = 0;
opterr = 1;
optopt = '?';
@@ -86,65 +266,125 @@ cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_i
{ "help", 0, NULL, 'h' },
{ "version", 0, NULL, 'V' },
{ "port", 1, NULL, 'p' },
+ { "jack-server", 1, NULL, 'j' },
{ "in-jackd", 0, NULL, 'i' },
{ NULL, 0, NULL, 0 }
};
stop_char = 0;
- c = getopt_long (argc, argv, "hVp:i", long_options, &option_index);
+ c = getopt_long (argc, argv, "hVp:j:i", 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 ();
+ cmdline_parser_free (&local_args_info);
exit (EXIT_SUCCESS);
case 'V': /* Print version and exit. */
- clear_args ();
cmdline_parser_print_version ();
+ cmdline_parser_free (&local_args_info);
exit (EXIT_SUCCESS);
case 'p': /* OSC port to listen on. */
- if (args_info->port_given)
+ if (local_args_info.port_given)
{
- fprintf (stderr, "%s: `--port' (`-p') option given more than once\n", CMDLINE_PARSER_PACKAGE);
- clear_args ();
- exit (EXIT_FAILURE);
+ fprintf (stderr, "%s: `--port' (`-p') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
+ goto failure;
}
+ if (args_info->port_given && ! override)
+ continue;
+ local_args_info.port_given = 1;
args_info->port_given = 1;
+ if (args_info->port_arg)
+ free (args_info->port_arg); /* free previous string */
args_info->port_arg = gengetopt_strdup (optarg);
+ if (args_info->port_orig)
+ free (args_info->port_orig); /* free previous string */
+ args_info->port_orig = gengetopt_strdup (optarg);
+ break;
+
+ case 'j': /* Name of Jack server to attach to. */
+ if (local_args_info.jack_server_given)
+ {
+ fprintf (stderr, "%s: `--jack-server' (`-j') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
+ goto failure;
+ }
+ if (args_info->jack_server_given && ! override)
+ continue;
+ local_args_info.jack_server_given = 1;
+ args_info->jack_server_given = 1;
+ if (args_info->jack_server_arg)
+ free (args_info->jack_server_arg); /* free previous string */
+ args_info->jack_server_arg = gengetopt_strdup (optarg);
+ if (args_info->jack_server_orig)
+ free (args_info->jack_server_orig); /* free previous string */
+ args_info->jack_server_orig = gengetopt_strdup (optarg);
break;
case 'i': /* Run engine as in-process JACK client. */
- if (args_info->in_jackd_given)
+ if (local_args_info.in_jackd_given)
{
- fprintf (stderr, "%s: `--in-jackd' (`-i') option given more than once\n", CMDLINE_PARSER_PACKAGE);
- clear_args ();
- exit (EXIT_FAILURE);
+ fprintf (stderr, "%s: `--in-jackd' (`-i') option given more than once%s\n", argv[0], (additional_error ? additional_error : ""));
+ goto failure;
}
+ if (args_info->in_jackd_given && ! override)
+ continue;
+ local_args_info.in_jackd_given = 1;
args_info->in_jackd_given = 1;
args_info->in_jackd_flag = !(args_info->in_jackd_flag);
break;
case 0: /* Long option with no short option */
-
case '?': /* Invalid option. */
/* `getopt_long' already printed an error message. */
- exit (EXIT_FAILURE);
+ goto failure;
default: /* bug: option not considered. */
- fprintf (stderr, "%s: option unknown: %c\n", CMDLINE_PARSER_PACKAGE, c);
+ fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : ""));
abort ();
} /* switch */
} /* while */
- if ( missing_required_options )
- exit (EXIT_FAILURE);
+
+
+ cmdline_parser_release (&local_args_info);
+
+ if ( error )
+ return (EXIT_FAILURE);
+
+ if (optind < argc)
+ {
+ int i = 0 ;
+ int found_prog_name = 0;
+ /* whether program name, i.e., argv[0], is in the remaining args
+ (this may happen with some implementations of getopt,
+ but surely not with the one included by gengetopt) */
+
+ i = optind;
+ while (i < argc)
+ if (argv[i++] == argv[0]) {
+ found_prog_name = 1;
+ break;
+ }
+ i = 0;
+
+ args_info->inputs_num = argc - optind - found_prog_name;
+ args_info->inputs =
+ (char **)(malloc ((args_info->inputs_num)*sizeof(char *))) ;
+ while (optind < argc)
+ if (argv[optind++] != argv[0])
+ args_info->inputs[ i++ ] = gengetopt_strdup (argv[optind-1]) ;
+ }
return 0;
+
+failure:
+
+ cmdline_parser_release (&local_args_info);
+ return (EXIT_FAILURE);
}