From 2084249288864e17c43570bd9957bd927864b1b7 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sat, 6 Dec 2008 14:37:03 +0100 Subject: [PATCH 1/1] Improve help/man page of para_write. --- Makefile.in | 5 +++++ alsa_write.c | 10 ++++++++++ alsa_write.ggo | 44 ++++++++++++++++++++++------------------ configure.ac | 2 +- file_write.c | 10 ++++++++++ file_write.ggo | 14 ++++++------- write.c | 46 ++++++++++++++++++++++++++++-------------- write.ggo | 54 ++++++++++++++++++++------------------------------ write.h | 1 + write_common.c | 1 + 10 files changed, 112 insertions(+), 75 deletions(-) diff --git a/Makefile.in b/Makefile.in index 9e78b67d..1563739b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -117,6 +117,7 @@ grab_client.cmdline.h grab_client.cmdline.c: grab_client.ggo fsck.ggo) O="--unamed-opts=table";; \ afh.ggo) O="--unamed-opts=audio_file";; \ filter.ggo) O="--no-handle-help";; \ + write.ggo) O="--no-handle-help";; \ esac; \ if test $< != fsck.ggo; then O="$$O --conf-parser "; fi; \ gengetopt $$O \ @@ -148,6 +149,10 @@ man/man1/para_filter.1: para_filter mkdir -p man/man1 help2man -h --detailed-help -N ./$< > $@ +man/man1/para_write.1: para_write + mkdir -p man/man1 + help2man -h --detailed-help -N ./$< > $@ + man/man1/%.1: % mkdir -p man/man1 help2man -N ./$< > $@ diff --git a/alsa_write.c b/alsa_write.c index 89d1995c..9f60d6d8 100644 --- a/alsa_write.c +++ b/alsa_write.c @@ -21,6 +21,7 @@ #include "string.h" #include "list.h" #include "sched.h" +#include "ggo.h" #include "write.h" #include "alsa_write.cmdline.h" #include "error.h" @@ -236,10 +237,19 @@ err_out: */ void alsa_write_init(struct writer *w) { + struct alsa_write_args_info dummy; + + alsa_cmdline_parser_init(&dummy); w->open = alsa_open; w->close = alsa_close; w->pre_select = alsa_write_pre_select; w->post_select = alsa_write_post_select; w->parse_config = alsa_parse_config; w->shutdown = NULL; /* nothing to do */ + w->help = (struct ggo_help) { + .purpose = alsa_write_args_info_purpose, + .usage = alsa_write_args_info_usage, + .short_help = alsa_write_args_info_help, + .detailed_help = alsa_write_args_info_detailed_help + }; } diff --git a/alsa_write.ggo b/alsa_write.ggo index 371ec89f..84f49d58 100644 --- a/alsa_write.ggo +++ b/alsa_write.ggo @@ -1,28 +1,34 @@ -section "alsa options" -###################### - option "device" d #~~~~~~~~~~~~~~~~ "set PCM device" - string typestr="device" - default="default" - optional +string typestr="device" +default="default" +optional +details=" + On systems with dmix, a better choice than the default + value might be to use \"plug:swmix\". +" option "channels" c #~~~~~~~~~~~~~~~~~~ -"number of channels (only necessary for raw -audio)" - - int typestr="num" - default="2" - optional +"specify number of channels" +int typestr="num" +default="2" +optional +details=" + This option is only necessary for playing raw audio with + para_write. In all other cases (plaing wav files with + para_write or using this writer with para_audiod), the number + of channels will be obtained from other resources. +" option "samplerate" s #~~~~~~~~~~~~~~~~~~~~~ - -"force given sample rate (only necessary for -raw audio)" - - int typestr="num" - default="44100" - optional +"force given sample rate" +int typestr="num" +default="44100" +optional +details=" + Again, it is only necessary to specify this when playing raw + audio with para_write. +" diff --git a/configure.ac b/configure.ac index 2429bfbd..04a4e934 100644 --- a/configure.ac +++ b/configure.ac @@ -127,7 +127,7 @@ server_ldflags="" server_audio_formats=" mp3" write_cmdline_objs="write.cmdline file_write.cmdline" -write_errlist_objs="write write_common file_write time fd string sched stdin" +write_errlist_objs="write write_common file_write time fd string sched stdin ggo" write_ldflags="" writers=" file" default_writer="FILE_WRITE" diff --git a/file_write.c b/file_write.c index 839515f8..be1e7713 100644 --- a/file_write.c +++ b/file_write.c @@ -12,6 +12,7 @@ #include "para.h" #include "list.h" #include "sched.h" +#include "ggo.h" #include "write.h" #include "string.h" #include "fd.h" @@ -109,10 +110,19 @@ __malloc static void *file_write_parse_config(const char *options) /** the init function of the file writer */ void file_write_init(struct writer *w) { + struct file_write_args_info dummy; + + file_cmdline_parser_init(&dummy); w->open = file_write_open; w->pre_select = file_write_pre_select; w->post_select = file_write_post_select; w->parse_config = file_write_parse_config; w->close = file_write_close; w->shutdown = NULL; /* nothing to do */ + w->help = (struct ggo_help) { + .purpose = file_write_args_info_purpose, + .usage = file_write_args_info_usage, + .short_help = file_write_args_info_help, + .detailed_help = file_write_args_info_detailed_help + }; } diff --git a/file_write.ggo b/file_write.ggo index a172f757..56c44f7a 100644 --- a/file_write.ggo +++ b/file_write.ggo @@ -1,11 +1,9 @@ -section "file writer options" - option "filename" f #~~~~~~~~~~~~~~~~~~ - -"select output file name. Defaults to a -random filename in ~/.paraslash." - - string typestr="filename" - optional +"specify output file name" +string typestr="filename" +optional +details=" + Defaults to a random filename in ~/.paraslash. +" diff --git a/write.c b/write.c index 998a6d2c..6e78e773 100644 --- a/write.c +++ b/write.c @@ -14,6 +14,7 @@ #include "write.cmdline.h" #include "list.h" #include "sched.h" +#include "ggo.h" #include "stdin.h" #include "write.h" #include "write_common.h" @@ -129,20 +130,6 @@ static struct writer_node_group *check_args(void) struct writer_node_group *g = NULL; struct initial_delay_task *idt = &the_initial_delay_task; - if (conf.list_writers_given) { - char *msg = NULL; - FOR_EACH_WRITER(i) { - char *tmp = make_message("%s%s%s", - i? msg : "", - i? " " : "", - writer_names[i]); - free(msg); - msg = tmp; - } - fprintf(stderr, "%s\n", msg); - free(msg); - exit(EXIT_SUCCESS); - } if (conf.start_time_given) { long unsigned sec, usec; if (sscanf(conf.start_time_arg, "%lu:%lu", @@ -174,6 +161,33 @@ out: return NULL; } +__noreturn static void print_help_and_die(void) +{ + int i, d = conf.detailed_help_given; + const char **p = d? write_args_info_detailed_help + : write_args_info_help; + + printf_or_die("%s\n\n", WRITE_CMDLINE_PARSER_PACKAGE "-" + WRITE_CMDLINE_PARSER_VERSION); + printf_or_die("%s\n\n", write_args_info_usage); + for (; *p; p++) + printf_or_die("%s\n", *p); + + printf_or_die("\nAvailable writers: \n\t"); + FOR_EACH_WRITER(i) + printf_or_die("%s%s", i? " " : "", writer_names[i]); + printf_or_die("\n\n"); + FOR_EACH_WRITER(i) { + struct writer *w = writers + i; + + if (!w->help.short_help) + continue; + printf_or_die("Options for %s:\n", writer_names[i]); + ggo_print_help(&w->help, d); + } + exit(0); +} + /** * Para_write's main function. * @@ -192,9 +206,11 @@ int main(int argc, char *argv[]) struct check_wav_task *cwt = &the_check_wav_task; struct initial_delay_task *idt = &the_initial_delay_task; + init_supported_writers(); write_cmdline_parser(argc, argv, &conf); HANDLE_VERSION_FLAG("write", conf); - init_supported_writers(); + if (conf.help_given || conf.detailed_help_given) + print_help_and_die(); wng = check_args(); if (!wng) diff --git a/write.ggo b/write.ggo index 1ea8abf2..8f557bb9 100644 --- a/write.ggo +++ b/write.ggo @@ -1,45 +1,35 @@ -section "general options" -######################### - -option "list_writers" L -#~~~~~~~~~~~~~~~~~~~~~~ -"print available writers and exit" - - flag off - option "loglevel" l #~~~~~~~~~~~~~~~~~~ "set loglevel (0-6)" - - int typestr="level" - default="4" - optional +int typestr="level" +default="4" +optional option "bufsize" b #~~~~~~~~~~~~~~~~~ "input buffer size" - - int typestr="kilobytes" - default="64" - optional +int typestr="kilobytes" +default="64" +optional option "writer" w #~~~~~~~~~~~~~~~~ - -"select stream writer -may be give multiple times. The same writer -may be specified more than once" - - string typestr="name" - default="alsa (file if alsa is unsupported)" - optional - multiple +"select stream writer" +string typestr="name" +default="alsa (file if alsa is unsupported)" +optional +multiple +details=" + May be give multiple times. The same writer may be specified + more than once. +" option "start_time" t #~~~~~~~~~~~~~~~~~~~~ -"start playback at given time which must be -in a:b format where a denotes seconds and b -denotes microseconds since the epoch" - - string typestr="timeval" - optional +"defer playback" +string typestr="timeval" +optional +details=" + Start playback at given time which must be in a:b format where + a denotes seconds and b denotes microseconds since the epoch. +" diff --git a/write.h b/write.h index 9723977a..7df62f9f 100644 --- a/write.h +++ b/write.h @@ -84,6 +84,7 @@ struct writer { * This is a optional function pointer used for cleaning up. */ void (*shutdown)(struct writer_node *); + struct ggo_help help; }; /** diff --git a/write_common.c b/write_common.c index 3bf5d119..d66b20ca 100644 --- a/write_common.c +++ b/write_common.c @@ -10,6 +10,7 @@ #include "string.h" #include "list.h" #include "sched.h" +#include "ggo.h" #include "write.h" #include "error.h" -- 2.39.2