1/*
2 * ----------------------------------------------------------------------------
3 * "THE BEER-WARE LICENSE" (Revision 42):
4 * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
5 * can do whatever you want with this stuff. If we meet some day, and you think
6 * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
7 * ----------------------------------------------------------------------------
8 */
9
10#include <sys/cdefs.h>
11__FBSDID("$FreeBSD$");
12
13#include <limits.h>
14#include <stdio.h>
15#include <stdlib.h>
16#include <unistd.h>
17
18static void
19usage(void)
20{
21
22	fprintf(stderr, "usage: %s [-sx] [-n count] [prefix [suffix]]\n",
23	    getprogname());
24	exit(1);
25}
26
27int
28main(int argc, char *argv[])
29{
30	int c, count, linepos, maxcount, pretty, radix;
31
32	maxcount = 0;
33	pretty = 0;
34	radix = 10;
35	while ((c = getopt(argc, argv, "n:sx")) != -1) {
36		switch (c) {
37		case 'n':	/* Max. number of bytes per line. */
38			maxcount = strtol(optarg, NULL, 10);
39			break;
40		case 's':	/* Be more style(9) comliant. */
41			pretty = 1;
42			break;
43		case 'x':	/* Print hexadecimal numbers. */
44			radix = 16;
45			break;
46		case '?':
47		default:
48			usage();
49		}
50	}
51	argc -= optind;
52	argv += optind;
53
54	if (argc > 0)
55		printf("%s\n", argv[0]);
56	count = linepos = 0;
57	while((c = getchar()) != EOF) {
58		if (count) {
59			putchar(',');
60			linepos++;
61		}
62		if ((maxcount == 0 && linepos > 70) ||
63		    (maxcount > 0 && count >= maxcount)) {
64			putchar('\n');
65			count = linepos = 0;
66		}
67		if (pretty) {
68			if (count) {
69				putchar(' ');
70				linepos++;
71			} else {
72				putchar('\t');
73				linepos += 8;
74			}
75		}
76		switch (radix) {
77		case 10:
78			linepos += printf("%d", c);
79			break;
80		case 16:
81			linepos += printf("0x%02x", c);
82			break;
83		default:
84			abort();
85		}
86		count++;
87	}
88	putchar('\n');
89	if (argc > 1)
90		printf("%s\n", argv[1]);
91	return (0);
92}
93