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
2 changed files with 26 additions and 7 deletions

View File

@ -7,7 +7,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd May 14, 2005
.Dd March 22, 2007
.Dt FILE2C 1
.Os
.Sh NAME
@ -16,6 +16,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl n Ar count
.Op Fl s
.Op Fl x
.Op Ar prefix Op Ar suffix
.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.
By default the byte values are printed in decimal, but when the
.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
If more than 70 characters are printed on the same line, that line is
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 C statement.
The
.Fl x
and
.Fl n
,
.Fl s
and
.Fl x
options are useful when the binary data represents a bitmap and the output
needs to remain readable and/or editable.
Fonts, for example, are a good example of this.

View File

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