diff options
author | Tor Andersson <tor@ghostscript.com> | 2009-02-27 17:58:10 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2009-02-27 17:58:10 +0100 |
commit | b41ede1d9b93268b96e686ca3299dd20624a9812 (patch) | |
tree | 4fa65a43aef8290151754d21065e00fae6e64402 | |
parent | 6f68928302a10fbb9edb365fe3f1a47af4afcc16 (diff) | |
download | mupdf-b41ede1d9b93268b96e686ca3299dd20624a9812.tar.xz |
Add a tool similar to hexdump, but for text files.
-rw-r--r-- | strdump.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/strdump.c b/strdump.c new file mode 100644 index 00000000..d8a83807 --- /dev/null +++ b/strdump.c @@ -0,0 +1,91 @@ +/* strdump.c -- similar to hexdump but with ascii strings */ + +#include <stdio.h> +#include <string.h> + +int +strdump(FILE *fo, FILE *fi) +{ + int c, n; + + n = 0; + fputs("\"", fo); + c = fgetc(fi); + while (c != -1) + { + if (c == '\n' || c == '\r') + fputs("\\n\"\n\"", fo); + else + putc(c, fo); + c = fgetc(fi); + n ++; + } + fputs("\"\n", fo); + return n; +} + + +int +main(int argc, char **argv) +{ + FILE *fo; + FILE *fi; + char name[256]; + char *realname; + char *p; + int i, len; + + if (argc < 3) + { + fprintf(stderr, "usage: hexdump output.c input.dat\n"); + return 1; + } + + fo = fopen(argv[1], "wb"); + if (!fo) + { + fprintf(stderr, "hexdump: could not open output file\n"); + return 1; + } + + for (i = 2; i < argc; i++) + { + fi = fopen(argv[i], "rb"); + if (!fi) + { + fprintf(stderr, "hexdump: could not open input file\n"); + return 1; + } + + realname = strrchr(argv[i], '/'); + if (!realname) + realname = strrchr(argv[i], '\\'); + if (realname) + realname ++; + else + realname = argv[i]; + + strcpy(name, argv[i]); + p = name; + while (*p) + { + if ((*p == '/') || (*p == '.') || (*p == '\\') || (*p == '-')) + *p = '_'; + p ++; + } + + fprintf(fo, "const char %s_name[] = \"%s\";\n", name, realname); + fprintf(fo, "const char %s_buf[] = {\n", name); + + len = strdump(fo, fi); + + fprintf(fo, "};\n"); + fprintf(fo, "const int %s_len = %d;\n", name, len); + fprintf(fo, "\n"); + + fclose(fi); + } + + return 0; +} + |