From 46eb00f8d665f654af2a1f820e9681cb60822ae0 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Tue, 28 Feb 2012 22:12:07 -0800 Subject: [PATCH] Use getopt_long for processing command line arguments to Non-DAW and Non-Mixer. --- mixer/src/main.C | 104 +++++++++++++++---------------- timeline/doc/control-points.png | Bin 0 -> 8067 bytes timeline/doc/control-signals.png | Bin 0 -> 18901 bytes timeline/src/main.C | 101 ++++++++++++++++-------------- 4 files changed, 106 insertions(+), 99 deletions(-) create mode 100644 timeline/doc/control-points.png create mode 100644 timeline/doc/control-signals.png diff --git a/mixer/src/main.C b/mixer/src/main.C index e597a59..84847a2 100644 --- a/mixer/src/main.C +++ b/mixer/src/main.C @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -203,72 +204,69 @@ main ( int argc, char **argv ) nsm = new NSM_Client; instance_name = strdup( APP_NAME ); + bool instance_override = false; + static struct option long_options[] = + { + { "instance", required_argument, 0, 'i' }, + { "osc-port", required_argument, 0, 'p' }, + { 0, 0, 0, 0 } + }; + + int option_index = 0; + int c = 0; + + + while ( ( c = getopt_long_only( argc, argv, "", long_options, &option_index ) ) != -1 ) { - int r = argc - 1; - int i = 1; - for ( ; i < argc; ++i, --r ) + switch ( c ) { - if ( !strcmp( argv[i], "--instance" ) ) - { - if ( r > 1 ) - { - MESSAGE( "Using instance name \"%s\"", argv[i+1] ); - instance_name = strdup( argv[i+1] ); - --r; - ++i; - } - else - { - FATAL( "Missing instance name" ); - } - } - else if ( !strcmp( argv[i], "--osc-port" ) ) - { - if ( r > 1 ) - { - MESSAGE( "Using OSC port \"%s\"", argv[i+1] ); - osc_port = argv[i+1]; - --r; - ++i; - } - else - { - FATAL( "Missing OSC port" ); - } - } - else if ( !strncmp( argv[i], "--", 2 ) ) - { - WARNING( "Unrecognized option: %s", argv[i] ); - } - else + case 'p': + DMESSAGE( "Using OSC port %s", optarg ); + osc_port = optarg; + break; + case 'i': + DMESSAGE( "Using OSC port %s", optarg ); + free( instance_name ); + instance_name = strdup( optarg ); + instance_override = true; + break; + case '?': + printf( "Usage: %s [--osc-port portnum]\n\n", argv[0] ); + exit(0); break; } + } - mixer->init_osc( osc_port ); + mixer->init_osc( osc_port ); - char *nsm_url = getenv( "NSM_URL" ); + char *nsm_url = getenv( "NSM_URL" ); - if ( nsm_url ) + if ( nsm_url ) + { + if ( ! nsm->init( nsm_url ) ) { - if ( ! nsm->init( nsm_url ) ) - { - nsm->announce( APP_NAME, ":switch:dirty:", argv[0] ); + if ( instance_override ) + WARNING( "--instance option is not available when running under session management, ignoring." ); + + if ( optind < argc ) + WARNING( "Loading files from the command-line is incompatible with session management, ignoring." ); - // poll so we can keep OSC handlers running in the GUI thread and avoid extra sync - Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL ); - } + nsm->announce( APP_NAME, ":switch:dirty:", argv[0] ); + + // poll so we can keep OSC handlers running in the GUI thread and avoid extra sync + Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL ); } - else + } + else + { + if ( optind < argc ) { - if ( r >= 1 ) - { - MESSAGE( "Loading \"%s\"", argv[i] ); + MESSAGE( "Loading \"%s\"", argv[optind] ); - if ( ! mixer->command_load( argv[i] ) ) - { - fl_alert( "Error opening project specified on commandline" ); - } + if ( ! mixer->command_load( argv[optind] ) ) + { + fl_alert( "Error opening project specified on commandline" ); } } } diff --git a/timeline/doc/control-points.png b/timeline/doc/control-points.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea09c3f6c7eb12af9731be7c526cdf8d70838ac GIT binary patch literal 8067 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 Hr-UW|mA_&R literal 0 HcmV?d00001 diff --git a/timeline/src/main.C b/timeline/src/main.C index d9a8fda..4319cdc 100644 --- a/timeline/src/main.C +++ b/timeline/src/main.C @@ -26,6 +26,7 @@ #include #include #include +#include /* for registrations */ #include "Audio_Region.H" @@ -183,6 +184,7 @@ main ( int argc, char **argv ) tle = new TLE; instance_name = strdup( APP_NAME ); + bool instance_override = false; /* we don't really need a pointer for this */ // will be created on project new/open @@ -192,67 +194,74 @@ main ( int argc, char **argv ) const char *osc_port = NULL; - { - int r = argc - 1; - int i = 1; - for ( ; i < argc; ++i, --r ) - - if ( !strcmp( argv[i], "--osc-port" ) ) - { - if ( r > 1 ) - { - MESSAGE( "Using OSC port \"%s\"", argv[i+1] ); - osc_port = argv[i+1]; - --r; - ++i; - } - else - { - FATAL( "Missing OSC port" ); - } - } - + static struct option long_options[] = + { + { "instance", required_argument, 0, 'i' }, + { "osc-port", required_argument, 0, 'p' }, + { 0, 0, 0, 0 } + }; + + int option_index = 0; + int c = 0; - MESSAGE( "Starting GUI" ); + while ( ( c = getopt_long_only( argc, argv, "", long_options, &option_index ) ) != -1 ) + { + switch ( c ) + { + case 'p': + DMESSAGE( "Using OSC port %s", optarg ); + osc_port = optarg; + break; + case 'i': + DMESSAGE( "Using OSC port %s", optarg ); + free( instance_name ); + instance_name = strdup( optarg ); + instance_override = true; + break; + case '?': + printf( "Usage: %s [--osc-port portnum]\n\n", argv[0] ); + exit(0); + break; + } + } - tle->run(); + MESSAGE( "Starting GUI" ); + tle->run(); - timeline->init_osc( osc_port ); + timeline->init_osc( osc_port ); #ifdef HAVE_XPM - tle->main_window->icon((char *)p); + tle->main_window->icon((char *)p); #endif - tle->main_window->show( argc, argv ); + tle->main_window->show( 0, NULL ); + char *nsm_url = getenv( "NSM_URL" ); - char *nsm_url = getenv( "NSM_URL" ); - - if ( nsm_url ) + if ( nsm_url ) + { + if ( ! nsm->init( nsm_url ) ) { - if ( ! nsm->init( nsm_url ) ) - { - nsm->announce( APP_NAME, ":progress:switch:", argv[0] ); + if ( instance_override ) + WARNING( "--instance option is not available when running under session management, ignoring." ); + + if ( optind < argc ) + WARNING( "Loading files from the command-line is incompatible with session management, ignoring." ); + + nsm->announce( APP_NAME, ":progress:switch:", argv[0] ); - /* poll so we can keep OSC handlers running in the GUI thread and avoid extra sync */ - Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL ); - } + /* poll so we can keep OSC handlers running in the GUI thread and avoid extra sync */ + Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL ); } - else + } + else + { + if ( optind < argc ) { - if ( r >= 1 ) - { - MESSAGE( "Loading \"%s\"", argv[i] ); + MESSAGE( "Loading \"%s\"", argv[optind] ); - tle->open( argv[i] ); - - /* ) */ - /* { */ - /* fl_alert( "Error opening project specified on commandline" ); */ - /* } */ - } + tle->open( argv[optind] ); } - } Fl::add_check( check_sigterm );