+#if HELP_GETOPT_LONG_ONLY
+/* String table generated by gen-strtab.awk from help-glo.str */
+#define STRTAB_INITIALIZER \
+ N_(" -%s [%s]") \
+ "\0" "%*s%.*s\n" \
+ "\0" N_(" -%s %s") \
+ "\0" N_(" -%s") \
+ ""
+enum {
+ fmt_long_optional_arg = 0,
+ fmt_long_mandatory_arg = 19,
+ fmt_long_without_arg = 27,
+ fmt_desc = 10,
+ fmt_nl = 17
+};
+#else
+/* String table generated by gen-strtab.awk from help-std.str */
+#define STRTAB_INITIALIZER \
+ STR_L10N_(N_(" --%s[=%s]")) \
+ STR_L10N_(N_(" --%s=%s")) \
+ STR_L10N_(N_(" --%s")) \
+ N_(" -%c, --%s[=%s]") \
+ "\0" N_(" -%c, --%s=%s") \
+ "\0" N_(" -%c, --%s") \
+ "\0" "%*s%.*s\n" \
+ ""
+enum {
+ fmt_short_optional_arg = 0,
+ fmt_long_optional_arg = 5,
+ fmt_short_mandatory_arg = 16,
+ fmt_long_mandatory_arg = 21,
+ fmt_short_without_arg = 30,
+ fmt_long_without_arg = 35,
+ fmt_desc = 41,
+ fmt_nl = 48
+};
+#endif
+
+static const struct optstr {
+ unsigned char map[HELP_GETOPT_LONG_ONLY ? 3 : 7];
+ char tab[sizeof (STRTAB_INITIALIZER)];
+} optstr = {
+ {
+ offsetof(struct optstr, tab) + fmt_long_without_arg,
+ offsetof(struct optstr, tab) + fmt_long_mandatory_arg,
+ offsetof(struct optstr, tab) + fmt_long_optional_arg,
+#if !HELP_GETOPT_LONG_ONLY
+ 0,
+ offsetof(struct optstr, tab) + fmt_short_without_arg,
+ offsetof(struct optstr, tab) + fmt_short_mandatory_arg,
+ offsetof(struct optstr, tab) + fmt_short_optional_arg,
+#endif
+ },
+ STRTAB_INITIALIZER
+};
+
+/*
+ * When NLS is enabled, we assume snprintf is available. The GNU libintl
+ * library should provide a suitable fallback if necessary.
+ */
+#if ENABLE_NLS && !defined(help_do_snprintf)
+#define help_do_snprintf snprintf
+#elif !ENABLE_NLS
+#define help_do_snprintf fake_snprintf
+static inline int fake_snprintf(char *buf, size_t n, const char *fmt, ...)
+{
+ return -1;
+}
+#endif
+
+#define has_short_char(type) (!HELP_GETOPT_LONG_ONLY && (type & 4))
+