From a1cee3bc3cc3afa9b3d71cc742ea1d055d8e7a20 Mon Sep 17 00:00:00 2001 From: torben Date: Tue, 10 Nov 2009 15:18:35 +0000 Subject: [PATCH] add jack_wait git-svn-id: http://subversion.jackaudio.org/jack/trunk/jack@3731 0c269be4-1314-0410-8aa9-9f06e86f4224 --- tools/Makefile.am | 5 ++ tools/wait.c | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 tools/wait.c diff --git a/tools/Makefile.am b/tools/Makefile.am index bc988fc..769fd5e 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -38,6 +38,7 @@ bin_PROGRAMS = jack_load \ jack_alias \ jack_bufsize \ jack_samplerate \ + jack_wait \ $(JACK_TRANSPORT) \ $(NETJACK_TOOLS) @@ -67,6 +68,10 @@ jack_thread_wait_SOURCES = tw.c jack_thread_wait_LDFLAGS = @OS_LDFLAGS@ jack_thread_wait_LDADD = $(top_builddir)/libjack/libjack.la +jack_wait_SOURCES = wait.c +jack_wait_LDFLAGS = @OS_LDFLAGS@ +jack_wait_LDADD = $(top_builddir)/libjack/libjack.la + jack_evmon_SOURCES = evmon.c jack_evmon_LDFLAGS = @OS_LDFLAGS@ jack_evmon_LDADD = $(top_builddir)/libjack/libjack.la diff --git a/tools/wait.c b/tools/wait.c new file mode 100644 index 0000000..65e6c20 --- /dev/null +++ b/tools/wait.c @@ -0,0 +1,153 @@ +#include +#include +#include +#include +#include + +#include + +#include + +#include + +char * my_name; + +void +show_version (void) +{ + fprintf (stderr, "%s: JACK Audio Connection Kit version " VERSION "\n", + my_name); +} + +void +show_usage (void) +{ + show_version (); + fprintf (stderr, "\nUsage: %s [options]\n", my_name); + fprintf (stderr, "Check for jack existence, or wait, until it either quits, or gets started\n"); + fprintf (stderr, "options:\n"); + fprintf (stderr, " -s, --server Connect to the jack server named \n"); + fprintf (stderr, " -w, --wait Wait for server to become available\n"); + fprintf (stderr, " -q, --quit Wait until server is quit\n"); + fprintf (stderr, " -c, --check Check wether server is running\n"); + fprintf (stderr, " -t, --timeout Wait timeout in seconds\n"); + fprintf (stderr, " -h, --help Display this help message\n"); + fprintf (stderr, " --version Output version information and exit\n\n"); + fprintf (stderr, "For more information see http://jackaudio.org/\n"); +} + +int +main (int argc, char *argv[]) +{ + jack_client_t *client; + jack_status_t status; + jack_options_t options = JackNoStartServer; + int c; + int option_index; + char* aliases[2]; + char *server_name = NULL; + int wait_for_start = 0; + int wait_for_quit = 0; + int just_check = 0; + int wait_timeout = 0; + time_t start_timestamp; + + + struct option long_options[] = { + { "server", 1, 0, 's' }, + { "wait", 0, 0, 'w' }, + { "quit", 0, 0, 'q' }, + { "check", 0, 0, 'c' }, + { "timeout", 1, 0, 't' }, + { "help", 0, 0, 'h' }, + { "version", 0, 0, 'v' }, + { 0, 0, 0, 0 } + }; + + my_name = strrchr(argv[0], '/'); + if (my_name == 0) { + my_name = argv[0]; + } else { + my_name ++; + } + + while ((c = getopt_long (argc, argv, "s:wqct:hv", long_options, &option_index)) >= 0) { + switch (c) { + case 's': + server_name = (char *) malloc (sizeof (char) * strlen(optarg)); + strcpy (server_name, optarg); + options |= JackServerName; + break; + case 'w': + wait_for_start = 1; + break; + case 'q': + wait_for_quit = 1; + break; + case 'c': + just_check = 1; + break; + case 't': + wait_timeout = atoi(optarg); + break; + case 'h': + show_usage (); + return 1; + break; + case 'v': + show_version (); + return 1; + break; + default: + show_usage (); + return 1; + break; + } + } + + /* try to open server in a loop. breaking under certein conditions */ + + start_timestamp = time( NULL ); + + while(1) { + client = jack_client_open ("wait", options, &status, server_name); + /* check for some real error and bail out */ + if( (client == NULL) && !(status & JackServerFailed) ) { + fprintf (stderr, "jack_client_open() failed, " + "status = 0x%2.0x\n", status); + return 1; + } + + if( client == NULL ) { + if( wait_for_quit ) { + fprintf( stdout, "server is gone\n" ); + break; + } + if( just_check ) { + fprintf( stdout, "not running\n" ); + break; + } + } else { + jack_client_close( client ); + if( wait_for_start ) { + fprintf( stdout, "server is available\n" ); + break; + } + if( just_check ) { + fprintf( stdout, "running\n" ); + break; + } + } + if( wait_timeout ) { + if( (time( NULL ) - start_timestamp) > wait_timeout ) { + fprintf( stdout, "timeout\n" ); + break; + } + } + + // Wait a second, and repeat + sleep(1); + } + + exit (0); +} -- 2.11.4.GIT