From e601ae72c16f3f80dcfc131b573ab2e91a390582 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 23 Nov 2021 20:56:30 -0500 Subject: [PATCH] Use help formatting routines from dxcommon. Since the dxcommon help utility routines were adapted directly this package, it is fairly straightforward to import and use the now-common code here. --- Makefile.am | 9 +++---- common | 2 +- src/cdecl99.c | 68 ++--------------------------------------------- src/cdecl99.h | 1 - src/execute.gperf | 3 ++- 5 files changed, 9 insertions(+), 74 deletions(-) diff --git a/Makefile.am b/Makefile.am index 2597f8a..3955dd5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -12,7 +12,7 @@ EXTRA_LTLIBRARIES = AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src \ -I$(top_builddir)/lib -I$(top_srcdir)/lib \ - -I$(top_builddir)/test \ + -I$(DX_BASEDIR)/src -I$(top_builddir)/test \ -DBISON_LOCALEDIR=\"$(BISON_LOCALEDIR)\" \ -DLOCALEDIR=\"$(localedir)\" @@ -32,8 +32,8 @@ EXTRA_DIST = bootstrap $(DX_BASEDIR)/scripts/fix-gnulib.pl m4/gnulib-cache.m4 \ dist_man_MANS = doc/cdecl99.1 doc/libcdecl.3 include_HEADERS = src/cdecl.h -noinst_HEADERS = conf_pre.h conf_post.h src/scan.h src/parse.h \ - test/declgen.h test/test.h +noinst_HEADERS = conf_pre.h conf_post.h common/src/help.h \ + src/scan.h src/parse.h test/declgen.h test/test.h noinst_DATA = $(MOFILES) @@ -51,11 +51,10 @@ libcdecl_la_SOURCES += src/i18n.c endif bin_PROGRAMS = cdecl99 -cdecl99_SOURCES = src/commands.c src/cdecl99.h +cdecl99_SOURCES = common/src/help.c src/commands.c src/cdecl99.h cdecl99_LDADD = $(libmain_a_OBJECTS) $(libexec_a_OBJECTS) libcdecl.la \ libgnu.la $(LTLIBICONV) $(LTLIBINTL) $(LTLIBREADLINE) $(cdecl99_OBJECTS): $(gnulib_headers) -$(cdecl99_OBJECTS): src/options.h EXTRA_LIBRARIES = libexec.a libexec_a_SOURCES = src/execute.c src/commands.h diff --git a/common b/common index e218d44..6532aaa 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit e218d4445fa5a2015163cf50d847980ff3240b36 +Subproject commit 6532aaac91a7efd99eb74726679c4000459e7bb3 diff --git a/src/cdecl99.c b/src/cdecl99.c index 27ce048..493f64f 100644 --- a/src/cdecl99.c +++ b/src/cdecl99.c @@ -36,6 +36,7 @@ #include "cdecl99.h" #include "cdecl.h" +#include "help.h" static const char *progname = "cdecl99"; static bool interactive = true; @@ -90,65 +91,6 @@ static void print_usage(FILE *f) progname); } -static int -print_optstring(const struct option *opt, const struct lopt_help *help) -{ - char optstring[100]; - int w; - - if (!ENABLE_NLS) - goto no_translate; - - if (opt->has_arg) { - w = snprintf(optstring, sizeof optstring, - _(" -%c, --%s=%s"), opt->val, opt->name, - pgettext_expr(opt->name, help->arg)); - } else { - w = snprintf(optstring, sizeof optstring, - _(" -%c, --%s"), opt->val, opt->name); - } - - if (w < 0) - goto no_translate; - - w = mbsnwidth(optstring, w, 0); - printf("%s", optstring); - goto out; - -no_translate: - if (opt->has_arg) { - w = printf(" -%c, --%s=%s", opt->val, opt->name, help->arg); - } else { - w = printf(" -%c, --%s", opt->val, opt->name); - } -out: - if (w < 0 || w > 18) { - putchar('\n'); - return 0; - } - - return w; -} - -/* - * Print a string, with each line indented by i spaces. The first line - * will be indented by w fewer spaces (to account for the cursor being in - * some other column). - */ -void print_block(const char *s, int i, int w) -{ - for (; *s; w = 0) { - const char *nl = strchr(s, '\n'); - int n = (nl ? nl-s : -1); - - printf("%*s%.*s\n", i-w, "", n, s); - if (!nl) - break; - - s = nl+1; - } -} - static void print_help(void) { const struct option *opt; @@ -162,17 +104,11 @@ static void print_help(void) puts(_("Options:")); for (opt = lopts; opt->name; opt++) { struct lopt_help help; - int w; if (!lopt_get_help(opt, &help)) continue; - w = print_optstring(opt, &help); - - if (ENABLE_NLS) - help.desc = pgettext_expr(opt->name, help.desc); - - print_block(help.desc, 20, w); + help_print_option(opt, help.arg, help.desc, 20); } putchar('\n'); diff --git a/src/cdecl99.h b/src/cdecl99.h index 254b29f..7ed2407 100644 --- a/src/cdecl99.h +++ b/src/cdecl99.h @@ -22,7 +22,6 @@ #include #define _(x) gettext(x) -void print_block(const char *s, int i, int w); int run_command(const char *line, int interactive); int run_command_simplify(const char *arg); int run_command_explain(const char *arg); diff --git a/src/execute.gperf b/src/execute.gperf index b1e7d59..de8b136 100644 --- a/src/execute.gperf +++ b/src/execute.gperf @@ -24,6 +24,7 @@ #include "cdecl99.h" #include "commands.h" +#include "help.h" typedef #if STRTAB_MAX_OFFSET < UINT_LEAST8_MAX @@ -76,7 +77,7 @@ static int run_cmd_help(void) w = 0; } - print_block(gettext(strtab+c->cmd), 15, w); + help_print_desc(NULL, gettext(strtab+c->cmd), 15, w); } return 0; -- 2.43.2