]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - usr.bin/file2c/file2c.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / usr.bin / file2c / file2c.c
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
18 static void
19 usage(void)
20 {
21
22         fprintf(stderr, "usage: %s [-sx] [-n count] [prefix [suffix]]\n",
23             getprogname());
24         exit(1);
25 }
26
27 int
28 main(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 }