]> git.draconx.ca Git - cdecl99.git/commitdiff
Use help formatting routines from dxcommon.
authorNick Bowler <nbowler@draconx.ca>
Wed, 24 Nov 2021 01:56:30 +0000 (20:56 -0500)
committerNick Bowler <nbowler@draconx.ca>
Wed, 24 Nov 2021 02:25:08 +0000 (21:25 -0500)
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
common
src/cdecl99.c
src/cdecl99.h
src/execute.gperf

index 2597f8a2480dc7ad5371b0baa4afcfb2e3d9f6b9..3955dd5026cc6e6b74eafde1343cbdedd9b366c0 100644 (file)
@@ -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 e218d4445fa5a2015163cf50d847980ff3240b36..6532aaac91a7efd99eb74726679c4000459e7bb3 160000 (submodule)
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit e218d4445fa5a2015163cf50d847980ff3240b36
+Subproject commit 6532aaac91a7efd99eb74726679c4000459e7bb3
index 27ce048c73c1053e2fd1a074f332b17a92211490..493f64f64391826750b655203c71fac0dd884aa1 100644 (file)
@@ -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');
 
index 254b29fd4e41c8c21428d0a5876c9fc6e3a11791..7ed24072a9826d4ba3c0dae3c3077b09c8e1c3b6 100644 (file)
@@ -22,7 +22,6 @@
 #include <gettext.h>
 #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);
index b1e7d5931ee2e4746c3c04bf80050cb1ab6583c6..de8b1364c7cf44c953b8f9983ca6d0aed1bbf2a9 100644 (file)
@@ -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;