static void dump_text(FILE *fp, int codepage) { int i; for (i = 0; i < header.num_msg; i++) { const char *id = mb_from_wstring(mmo_index[i].wid, codepage); const char *str = mb_from_wstring(mmo_index[i].wstr, codepage); fprintf(fp, "#\n"); print_escape_str(fp, id); fprintf(fp, "\n"); print_escape_str(fp, str); fprintf(fp, "\n\n"); } }
main(int argc, char *argv[]) #endif { char *fmt, *start; int fieldwidth, precision; char convch, nextch; char *format; #if !defined(SHELL) && !defined(BUILTIN) setlocale (LC_ALL, ""); #endif /* Need to accept/ignore "--" option. */ if (argc > 1 && strcmp(argv[1], "--") == 0) { argc--; argv++; } if (argc < 2) { usage(); return (1); } format = *++argv; gargv = ++argv; #define SKIP1 "#-+ 0" #define SKIP2 "*0123456789" do { /* * Basic algorithm is to scan the format string for conversion * specifications -- once one is found, find out if the field * width or precision is a '*'; if it is, gather up value. * Note, format strings are reused as necessary to use up the * provided arguments, arguments of zero/null string are * provided to use up the format string. */ /* find next format specification */ for (fmt = format; *fmt; fmt++) { switch (*fmt) { case '%': start = fmt++; if (*fmt == '%') { putchar ('%'); break; } else if (*fmt == 'b') { char *p = getstr(); if (print_escape_str(p)) { return (rval); } break; } /* skip to field width */ for (; strchr(SKIP1, *fmt); ++fmt) ; fieldwidth = *fmt == '*' ? getint() : 0; /* skip to possible '.', get following precision */ for (; strchr(SKIP2, *fmt); ++fmt) ; if (*fmt == '.') ++fmt; precision = *fmt == '*' ? getint() : 0; for (; strchr(SKIP2, *fmt); ++fmt) ; if (!*fmt) { warnx ("missing format character"); return(1); } convch = *fmt; nextch = *(fmt + 1); *(fmt + 1) = '\0'; switch(convch) { case 'c': { char p = getchr(); PF(start, p); break; } case 's': { char *p = getstr(); PF(start, p); break; } case 'd': case 'i': { long p; char *f = mklong(start, convch); if (!f) { warnx("out of memory"); return (1); } p = getlong(); PF(f, p); break; } case 'o': case 'u': case 'x': case 'X': { unsigned long p; char *f = mklong(start, convch); if (!f) { warnx("out of memory"); return (1); } p = getulong(); PF(f, p); break; } case 'e': case 'E': case 'f': case 'g': case 'G': { double p = getdouble(); PF(start, p); break; } default: warnx ("%s: invalid directive", start); return(1); } *(fmt + 1) = nextch; break; case '\\': fmt += print_escape(fmt); break; default: putchar (*fmt); break; } } } while (gargv > argv && *gargv); return (rval); }