Add '-s' option and update the manual page. With this option, it prints

little more style(9) friendly output.  For example:

%file2c -n 8 -s -x 'const char data[] = {' '};' < /etc/motd
const char data[] = {
	0x46, 0x72, 0x65, 0x65, 0x42, 0x53, 0x44, 0x20,
	0x37, 0x2e, 0x30, 0x2d, 0x43, 0x55, 0x52, 0x52,
	0x45, 0x4e, 0x54, 0x20, 0x28, 0x42, 0x45, 0x41,
	0x53, 0x54, 0x49, 0x45, 0x29, 0x20, 0x23, 0x30,
	0x3a, 0x20, 0x57, 0x65, 0x64, 0x20, 0x4d, 0x61,
	0x72, 0x20, 0x32, 0x31, 0x20, 0x31, 0x39, 0x3a,
	0x30, 0x34, 0x3a, 0x33, 0x36, 0x20, 0x45, 0x44,
	0x54, 0x20, 0x32, 0x30, 0x30, 0x37, 0x0a
};
This commit is contained in:
Jung-uk Kim 2007-03-23 00:00:22 +00:00
parent cad72a80bd
commit 778ee3c639
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=167823
2 changed files with 26 additions and 7 deletions

View File

@ -7,7 +7,7 @@
.\" .\"
.\" $FreeBSD$ .\" $FreeBSD$
.\" .\"
.Dd May 14, 2005 .Dd March 22, 2007
.Dt FILE2C 1 .Dt FILE2C 1
.Os .Os
.Sh NAME .Sh NAME
@ -16,6 +16,7 @@
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl n Ar count .Op Fl n Ar count
.Op Fl s
.Op Fl x .Op Fl x
.Op Ar prefix Op Ar suffix .Op Ar prefix Op Ar suffix
.Sh DESCRIPTION .Sh DESCRIPTION
@ -27,7 +28,10 @@ The byte values are separated by a comma.
This also means that the last byte value is not followed by a comma. This also means that the last byte value is not followed by a comma.
By default the byte values are printed in decimal, but when the By default the byte values are printed in decimal, but when the
.Fl x .Fl x
option is given, the values will be printed in hexadecimal. option is given, the values will be printed in hexadecimal. When
.Fl s
option is given, each line is printed with a leading tab and each comma is
followed by a space except for the last one on the line.
.Pp .Pp
If more than 70 characters are printed on the same line, that line is If more than 70 characters are printed on the same line, that line is
ended and the output continues on the next line. ended and the output continues on the next line.
@ -50,9 +54,11 @@ This program is typically used to embed binary files into C source files.
The prefix is used to define an array type and the suffix is used to end The prefix is used to define an array type and the suffix is used to end
the C statement. the C statement.
The The
.Fl x
and
.Fl n .Fl n
,
.Fl s
and
.Fl x
options are useful when the binary data represents a bitmap and the output options are useful when the binary data represents a bitmap and the output
needs to remain readable and/or editable. needs to remain readable and/or editable.
Fonts, for example, are a good example of this. Fonts, for example, are a good example of this.

View File

@ -19,7 +19,7 @@ static void
usage(void) usage(void)
{ {
fprintf(stderr, "usage: %s [-n count] [-x] [prefix [suffix]]\n", fprintf(stderr, "usage: %s [-n count] [-s] [-x] [prefix [suffix]]\n",
getprogname()); getprogname());
exit(1); exit(1);
} }
@ -27,15 +27,19 @@ usage(void)
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
int c, count, linepos, maxcount, radix; int c, count, linepos, maxcount, pretty, radix;
maxcount = 0; maxcount = 0;
pretty = 0;
radix = 10; radix = 10;
while ((c = getopt(argc, argv, "n:x")) != -1) { while ((c = getopt(argc, argv, "n:sx")) != -1) {
switch (c) { switch (c) {
case 'n': /* Max. number of bytes per line. */ case 'n': /* Max. number of bytes per line. */
maxcount = strtol(optarg, NULL, 10); maxcount = strtol(optarg, NULL, 10);
break; break;
case 's': /* Be more style(9) comliant. */
pretty = 1;
break;
case 'x': /* Print hexadecimal numbers. */ case 'x': /* Print hexadecimal numbers. */
radix = 16; radix = 16;
break; break;
@ -60,6 +64,15 @@ main(int argc, char *argv[])
putchar('\n'); putchar('\n');
count = linepos = 0; count = linepos = 0;
} }
if (pretty) {
if (count) {
putchar(' ');
linepos++;
} else {
putchar('\t');
linepos += 8;
}
}
switch (radix) { switch (radix) {
case 10: case 10:
linepos += printf("%d", c); linepos += printf("%d", c);