diff options
author | marcel <marcel@FreeBSD.org> | 2005-05-15 06:26:59 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2005-05-15 06:26:59 +0000 |
commit | bd9685053c859ebeb3b57e83a946081de6f179f1 (patch) | |
tree | b49e3841106472a50c1fbac5a9430b35cb98103e /usr.bin/file2c/file2c.c | |
parent | 09647ee931869435d500b0f24b91d25af5145f6f (diff) | |
download | FreeBSD-src-bd9685053c859ebeb3b57e83a946081de6f179f1.zip FreeBSD-src-bd9685053c859ebeb3b57e83a946081de6f179f1.tar.gz |
o Add option -n. The -n option takes a count and breaks the line
after that many values have been printed. The line length is not
considered anymore.
o Add option -x. The -x option will cause the byte values to be
printed in hexadecimal instead of decimal.
o Bump WARNS to 6.
o Update the manpage accordingly.
Diffstat (limited to 'usr.bin/file2c/file2c.c')
-rw-r--r-- | usr.bin/file2c/file2c.c | 72 |
1 files changed, 53 insertions, 19 deletions
diff --git a/usr.bin/file2c/file2c.c b/usr.bin/file2c/file2c.c index 18c8be2..8e16bbb 100644 --- a/usr.bin/file2c/file2c.c +++ b/usr.bin/file2c/file2c.c @@ -10,36 +10,70 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include <limits.h> #include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static void +usage(void) +{ + + fprintf(stderr, "usage: %s [-n count] [-x] [prefix [suffix]]\n", + getprogname()); + exit(1); +} int main(int argc, char *argv[]) { - int i, j, k; + int c, count, linepos, maxcount, radix; - if (argc > 1) - printf("%s\n", argv[1]); - k = 0; - j = 0; - while((i = getchar()) != EOF) { - if (k++) { + maxcount = 0; + radix = 10; + while ((c = getopt(argc, argv, "n:x")) != -1) { + switch (c) { + case 'n': /* Max. number of bytes per line. */ + maxcount = strtol(optarg, NULL, 10); + break; + case 'x': /* Print hexadecimal numbers. */ + radix = 16; + break; + case '?': + default: + usage(); + } + } + argc -= optind; + argv += optind; + + if (argc > 0) + printf("%s\n", argv[0]); + count = linepos = 0; + while((c = getchar()) != EOF) { + if (count) { putchar(','); - j++; + linepos++; } - if (j > 70) { + if ((maxcount == 0 && linepos > 70) || + (maxcount > 0 && count >= maxcount)) { putchar('\n'); - j = 0; + count = linepos = 0; } - printf("%d", i); - if (i > 99) - j += 3; - else if (i > 9) - j += 2; - else - j++; + switch (radix) { + case 10: + linepos += printf("%d", c); + break; + case 16: + linepos += printf("0x%02x", c); + break; + default: + abort(); + } + count++; } putchar('\n'); - if (argc > 2) - printf("%s\n", argv[2]); + if (argc > 1) + printf("%s\n", argv[1]); return (0); } |