| @@ -88,51 +88,12 @@ static void copyright(FILE* file) | |||||
| { | { | ||||
| fprintf(file, "jackdmp " VERSION "\n" | fprintf(file, "jackdmp " VERSION "\n" | ||||
| "Copyright 2001-2005 Paul Davis and others.\n" | "Copyright 2001-2005 Paul Davis and others.\n" | ||||
| "Copyright 2004-2012 Grame.\n" | |||||
| "Copyright 2004-2013 Grame.\n" | |||||
| "jackdmp comes with ABSOLUTELY NO WARRANTY\n" | "jackdmp comes with ABSOLUTELY NO WARRANTY\n" | ||||
| "This is free software, and you are welcome to redistribute it\n" | "This is free software, and you are welcome to redistribute it\n" | ||||
| "under certain conditions; see the file COPYING for details\n"); | "under certain conditions; see the file COPYING for details\n"); | ||||
| } | } | ||||
| static void usage(FILE* file) | |||||
| { | |||||
| fprintf(file, "\n" | |||||
| "usage: jackdmp [ --no-realtime OR -r ]\n" | |||||
| " [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" | |||||
| " (the two previous arguments are mutually exclusive. The default is --realtime)\n" | |||||
| " [ --name OR -n server-name ]\n" | |||||
| " [ --timeout OR -t client-timeout-in-msecs ]\n" | |||||
| " [ --loopback OR -L loopback-port-number ]\n" | |||||
| " [ --port-max OR -p maximum-number-of-ports]\n" | |||||
| " [ --slave-backend OR -X slave-backend-name ]\n" | |||||
| " [ --internal-client OR -I internal-client-name ]\n" | |||||
| " [ --verbose OR -v ]\n" | |||||
| #ifdef __linux__ | |||||
| " [ --clocksource OR -c [ c(ycle) | h(pet) | s(ystem) ]\n" | |||||
| #endif | |||||
| " [ --replace-registry ]\n" | |||||
| " [ --silent OR -s ]\n" | |||||
| " [ --sync OR -S ]\n" | |||||
| " [ --temporary OR -T ]\n" | |||||
| " [ --version OR -V ]\n" | |||||
| " -d master-backend-name [ ... master-backend args ... ]\n" | |||||
| #ifdef __APPLE__ | |||||
| " Available master backends may include: coreaudio, dummy, net or netone.\n\n" | |||||
| #endif | |||||
| #ifdef WIN32 | |||||
| " Available master backends may include: portaudio, dummy, net or netone.\n\n" | |||||
| #endif | |||||
| #ifdef __linux__ | |||||
| " Available master backends may include: alsa, dummy, freebob, firewire, net or netone.\n\n" | |||||
| #endif | |||||
| #if defined(__sun__) || defined(sun) | |||||
| " Available master backends may include: boomer, oss, dummy or net.\n\n" | |||||
| #endif | |||||
| " jackdmp -d master-backend-name --help\n" | |||||
| " to display options for each master backend\n\n"); | |||||
| } | |||||
| // To put in the control.h interface ?? | |||||
| static jackctl_driver_t * jackctl_server_get_driver(jackctl_server_t *server, const char *driver_name) | static jackctl_driver_t * jackctl_server_get_driver(jackctl_server_t *server, const char *driver_name) | ||||
| { | { | ||||
| const JSList * node_ptr = jackctl_server_get_drivers_list(server); | const JSList * node_ptr = jackctl_server_get_drivers_list(server); | ||||
| @@ -147,6 +108,20 @@ static jackctl_driver_t * jackctl_server_get_driver(jackctl_server_t *server, co | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| static void print_server_drivers(jackctl_server_t *server, FILE* file) | |||||
| { | |||||
| const JSList * node_ptr = jackctl_server_get_drivers_list(server); | |||||
| fprintf(file, "Available backends:\n"); | |||||
| while (node_ptr) { | |||||
| jackctl_driver_t* driver = (jackctl_driver_t *)node_ptr->data; | |||||
| fprintf(file, " %s (%s)\n", jackctl_driver_get_name(driver), (jackctl_driver_get_type(driver) == JackMaster) ? "master" : "slave"); | |||||
| node_ptr = jack_slist_next(node_ptr); | |||||
| } | |||||
| fprintf(file, "\n"); | |||||
| } | |||||
| static jackctl_internal_t * jackctl_server_get_internal(jackctl_server_t *server, const char *internal_name) | static jackctl_internal_t * jackctl_server_get_internal(jackctl_server_t *server, const char *internal_name) | ||||
| { | { | ||||
| const JSList * node_ptr = jackctl_server_get_internals_list(server); | const JSList * node_ptr = jackctl_server_get_internals_list(server); | ||||
| @@ -161,6 +136,20 @@ static jackctl_internal_t * jackctl_server_get_internal(jackctl_server_t *server | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| static void print_server_internals(jackctl_server_t *server, FILE* file) | |||||
| { | |||||
| const JSList * node_ptr = jackctl_server_get_internals_list(server); | |||||
| fprintf(file, "Available internals:\n"); | |||||
| while (node_ptr) { | |||||
| jackctl_internal_t* internal = (jackctl_internal_t *)node_ptr->data; | |||||
| fprintf(file, " %s\n", jackctl_internal_get_name(internal)); | |||||
| node_ptr = jack_slist_next(node_ptr); | |||||
| } | |||||
| fprintf(file, "\n"); | |||||
| } | |||||
| static jackctl_parameter_t * jackctl_get_parameter(const JSList * parameters_list, const char * parameter_name) | static jackctl_parameter_t * jackctl_get_parameter(const JSList * parameters_list, const char * parameter_name) | ||||
| { | { | ||||
| while (parameters_list) { | while (parameters_list) { | ||||
| @@ -173,6 +162,38 @@ static jackctl_parameter_t * jackctl_get_parameter(const JSList * parameters_lis | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| static void usage(FILE* file, jackctl_server_t *server) | |||||
| { | |||||
| fprintf(file, "\n" | |||||
| "usage: jackdmp [ --no-realtime OR -r ]\n" | |||||
| " [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" | |||||
| " (the two previous arguments are mutually exclusive. The default is --realtime)\n" | |||||
| " [ --name OR -n server-name ]\n" | |||||
| " [ --timeout OR -t client-timeout-in-msecs ]\n" | |||||
| " [ --loopback OR -L loopback-port-number ]\n" | |||||
| " [ --port-max OR -p maximum-number-of-ports]\n" | |||||
| " [ --slave-backend OR -X slave-backend-name ]\n" | |||||
| " [ --internal-client OR -I internal-client-name ]\n" | |||||
| " [ --verbose OR -v ]\n" | |||||
| #ifdef __linux__ | |||||
| " [ --clocksource OR -c [ c(ycle) | h(pet) | s(ystem) ]\n" | |||||
| #endif | |||||
| " [ --replace-registry ]\n" | |||||
| " [ --silent OR -s ]\n" | |||||
| " [ --sync OR -S ]\n" | |||||
| " [ --temporary OR -T ]\n" | |||||
| " [ --version OR -V ]\n" | |||||
| " -d master-backend-name [ ... master-backend args ... ]\n" | |||||
| " jackdmp -d master-backend-name --help\n" | |||||
| " to display options for each master backend\n\n"); | |||||
| if (server) { | |||||
| print_server_drivers(server, file); | |||||
| print_server_internals(server, file); | |||||
| } | |||||
| } | |||||
| // Prototype to be found in libjackserver | // Prototype to be found in libjackserver | ||||
| extern "C" void silent_jack_error_callback(const char *desc); | extern "C" void silent_jack_error_callback(const char *desc); | ||||
| @@ -270,7 +291,7 @@ int main(int argc, char** argv) | |||||
| value.ui = JACK_TIMER_SYSTEM_CLOCK; | value.ui = JACK_TIMER_SYSTEM_CLOCK; | ||||
| jackctl_parameter_set_value(param, &value); | jackctl_parameter_set_value(param, &value); | ||||
| } else { | } else { | ||||
| usage(stdout); | |||||
| usage(stdout, NULL); | |||||
| goto destroy_server; | goto destroy_server; | ||||
| } | } | ||||
| } | } | ||||
| @@ -379,7 +400,7 @@ int main(int argc, char** argv) | |||||
| /*fallthru*/ | /*fallthru*/ | ||||
| case 'h': | case 'h': | ||||
| usage(stdout); | |||||
| usage(stdout, server_ctl); | |||||
| goto destroy_server; | goto destroy_server; | ||||
| } | } | ||||
| } | } | ||||
| @@ -400,7 +421,7 @@ int main(int argc, char** argv) | |||||
| } | } | ||||
| if (!master_driver_name) { | if (!master_driver_name) { | ||||
| usage(stderr); | |||||
| usage(stderr, NULL); | |||||
| goto destroy_server; | goto destroy_server; | ||||
| } | } | ||||
| @@ -524,15 +545,17 @@ int main(int argc, char** argv) | |||||
| // Slave drivers | // Slave drivers | ||||
| for (it = slaves_list.begin(); it != slaves_list.end(); it++) { | for (it = slaves_list.begin(); it != slaves_list.end(); it++) { | ||||
| jackctl_driver_t * slave_driver_ctl = jackctl_server_get_driver(server_ctl, *it); | jackctl_driver_t * slave_driver_ctl = jackctl_server_get_driver(server_ctl, *it); | ||||
| if (slave_driver_ctl) | |||||
| if (slave_driver_ctl) { | |||||
| jackctl_server_remove_slave(server_ctl, slave_driver_ctl); | jackctl_server_remove_slave(server_ctl, slave_driver_ctl); | ||||
| } | |||||
| } | } | ||||
| // Internal clients | // Internal clients | ||||
| for (it = internals_list.begin(); it != internals_list.end(); it++) { | for (it = internals_list.begin(); it != internals_list.end(); it++) { | ||||
| jackctl_internal_t * internal_driver_ctl = jackctl_server_get_internal(server_ctl, *it); | jackctl_internal_t * internal_driver_ctl = jackctl_server_get_internal(server_ctl, *it); | ||||
| if (internal_driver_ctl) | |||||
| if (internal_driver_ctl) { | |||||
| jackctl_server_unload_internal(server_ctl, internal_driver_ctl); | jackctl_server_unload_internal(server_ctl, internal_driver_ctl); | ||||
| } | |||||
| } | } | ||||
| jackctl_server_close(server_ctl); | jackctl_server_close(server_ctl); | ||||