+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).
+ */
+static 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;
+ }
+}
+