This is a small little program used to execute a bad practice a clean way :-)
It will read a file on stdin and write it as decimal integers on stdout,
this is useful for embedding files in c-sources.
There are a few places where this is needed, and this is a better way than
the current practice of hand-editing the sources.
The command:
date | file2c 'const char date[] = {' ',0};'
will produce:
const char date[] = {
83,97,116,32,74,97,110,32,50,56,32,49,54,58,52,55,58,51,51,32,80,83,84,
32,49,57,57,53,10
,0};
The manual page is 2 lines longer than the source :-)
1995-01-29 00:49:57 +00:00
|
|
|
/*
|
|
|
|
* ----------------------------------------------------------------------------
|
|
|
|
* "THE BEER-WARE LICENSE" (Revision 42):
|
2002-03-25 13:53:46 +00:00
|
|
|
* <phk@FreeBSD.org> wrote this file. As long as you retain this notice you
|
This is a small little program used to execute a bad practice a clean way :-)
It will read a file on stdin and write it as decimal integers on stdout,
this is useful for embedding files in c-sources.
There are a few places where this is needed, and this is a better way than
the current practice of hand-editing the sources.
The command:
date | file2c 'const char date[] = {' ',0};'
will produce:
const char date[] = {
83,97,116,32,74,97,110,32,50,56,32,49,54,58,52,55,58,51,51,32,80,83,84,
32,49,57,57,53,10
,0};
The manual page is 2 lines longer than the source :-)
1995-01-29 00:49:57 +00:00
|
|
|
* can do whatever you want with this stuff. If we meet some day, and you think
|
|
|
|
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
|
|
|
* ----------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
2002-06-30 05:25:07 +00:00
|
|
|
#include <sys/cdefs.h>
|
|
|
|
__FBSDID("$FreeBSD$");
|
|
|
|
|
2005-05-15 06:26:59 +00:00
|
|
|
#include <limits.h>
|
This is a small little program used to execute a bad practice a clean way :-)
It will read a file on stdin and write it as decimal integers on stdout,
this is useful for embedding files in c-sources.
There are a few places where this is needed, and this is a better way than
the current practice of hand-editing the sources.
The command:
date | file2c 'const char date[] = {' ',0};'
will produce:
const char date[] = {
83,97,116,32,74,97,110,32,50,56,32,49,54,58,52,55,58,51,51,32,80,83,84,
32,49,57,57,53,10
,0};
The manual page is 2 lines longer than the source :-)
1995-01-29 00:49:57 +00:00
|
|
|
#include <stdio.h>
|
2005-05-15 06:26:59 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
static void
|
|
|
|
usage(void)
|
|
|
|
{
|
|
|
|
|
2007-10-30 17:49:00 +00:00
|
|
|
fprintf(stderr, "usage: %s [-sx] [-n count] [prefix [suffix]]\n",
|
2005-05-15 06:26:59 +00:00
|
|
|
getprogname());
|
|
|
|
exit(1);
|
|
|
|
}
|
This is a small little program used to execute a bad practice a clean way :-)
It will read a file on stdin and write it as decimal integers on stdout,
this is useful for embedding files in c-sources.
There are a few places where this is needed, and this is a better way than
the current practice of hand-editing the sources.
The command:
date | file2c 'const char date[] = {' ',0};'
will produce:
const char date[] = {
83,97,116,32,74,97,110,32,50,56,32,49,54,58,52,55,58,51,51,32,80,83,84,
32,49,57,57,53,10
,0};
The manual page is 2 lines longer than the source :-)
1995-01-29 00:49:57 +00:00
|
|
|
|
|
|
|
int
|
2005-05-15 01:07:36 +00:00
|
|
|
main(int argc, char *argv[])
|
This is a small little program used to execute a bad practice a clean way :-)
It will read a file on stdin and write it as decimal integers on stdout,
this is useful for embedding files in c-sources.
There are a few places where this is needed, and this is a better way than
the current practice of hand-editing the sources.
The command:
date | file2c 'const char date[] = {' ',0};'
will produce:
const char date[] = {
83,97,116,32,74,97,110,32,50,56,32,49,54,58,52,55,58,51,51,32,80,83,84,
32,49,57,57,53,10
,0};
The manual page is 2 lines longer than the source :-)
1995-01-29 00:49:57 +00:00
|
|
|
{
|
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
};
2007-03-23 00:00:22 +00:00
|
|
|
int c, count, linepos, maxcount, pretty, radix;
|
This is a small little program used to execute a bad practice a clean way :-)
It will read a file on stdin and write it as decimal integers on stdout,
this is useful for embedding files in c-sources.
There are a few places where this is needed, and this is a better way than
the current practice of hand-editing the sources.
The command:
date | file2c 'const char date[] = {' ',0};'
will produce:
const char date[] = {
83,97,116,32,74,97,110,32,50,56,32,49,54,58,52,55,58,51,51,32,80,83,84,
32,49,57,57,53,10
,0};
The manual page is 2 lines longer than the source :-)
1995-01-29 00:49:57 +00:00
|
|
|
|
2005-05-15 06:26:59 +00:00
|
|
|
maxcount = 0;
|
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
};
2007-03-23 00:00:22 +00:00
|
|
|
pretty = 0;
|
2005-05-15 06:26:59 +00:00
|
|
|
radix = 10;
|
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
};
2007-03-23 00:00:22 +00:00
|
|
|
while ((c = getopt(argc, argv, "n:sx")) != -1) {
|
2005-05-15 06:26:59 +00:00
|
|
|
switch (c) {
|
|
|
|
case 'n': /* Max. number of bytes per line. */
|
|
|
|
maxcount = strtol(optarg, NULL, 10);
|
|
|
|
break;
|
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
};
2007-03-23 00:00:22 +00:00
|
|
|
case 's': /* Be more style(9) comliant. */
|
|
|
|
pretty = 1;
|
|
|
|
break;
|
2005-05-15 06:26:59 +00:00
|
|
|
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) {
|
2005-05-15 01:07:36 +00:00
|
|
|
putchar(',');
|
2005-05-15 06:26:59 +00:00
|
|
|
linepos++;
|
2005-05-15 01:07:36 +00:00
|
|
|
}
|
2005-05-15 06:26:59 +00:00
|
|
|
if ((maxcount == 0 && linepos > 70) ||
|
|
|
|
(maxcount > 0 && count >= maxcount)) {
|
2005-05-15 01:07:36 +00:00
|
|
|
putchar('\n');
|
2005-05-15 06:26:59 +00:00
|
|
|
count = linepos = 0;
|
2005-05-15 01:07:36 +00:00
|
|
|
}
|
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
};
2007-03-23 00:00:22 +00:00
|
|
|
if (pretty) {
|
|
|
|
if (count) {
|
|
|
|
putchar(' ');
|
|
|
|
linepos++;
|
|
|
|
} else {
|
|
|
|
putchar('\t');
|
|
|
|
linepos += 8;
|
|
|
|
}
|
|
|
|
}
|
2005-05-15 06:26:59 +00:00
|
|
|
switch (radix) {
|
|
|
|
case 10:
|
|
|
|
linepos += printf("%d", c);
|
|
|
|
break;
|
|
|
|
case 16:
|
|
|
|
linepos += printf("0x%02x", c);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
abort();
|
|
|
|
}
|
|
|
|
count++;
|
This is a small little program used to execute a bad practice a clean way :-)
It will read a file on stdin and write it as decimal integers on stdout,
this is useful for embedding files in c-sources.
There are a few places where this is needed, and this is a better way than
the current practice of hand-editing the sources.
The command:
date | file2c 'const char date[] = {' ',0};'
will produce:
const char date[] = {
83,97,116,32,74,97,110,32,50,56,32,49,54,58,52,55,58,51,51,32,80,83,84,
32,49,57,57,53,10
,0};
The manual page is 2 lines longer than the source :-)
1995-01-29 00:49:57 +00:00
|
|
|
}
|
2005-05-15 01:07:36 +00:00
|
|
|
putchar('\n');
|
2005-05-15 06:26:59 +00:00
|
|
|
if (argc > 1)
|
|
|
|
printf("%s\n", argv[1]);
|
2005-05-15 01:07:36 +00:00
|
|
|
return (0);
|
This is a small little program used to execute a bad practice a clean way :-)
It will read a file on stdin and write it as decimal integers on stdout,
this is useful for embedding files in c-sources.
There are a few places where this is needed, and this is a better way than
the current practice of hand-editing the sources.
The command:
date | file2c 'const char date[] = {' ',0};'
will produce:
const char date[] = {
83,97,116,32,74,97,110,32,50,56,32,49,54,58,52,55,58,51,51,32,80,83,84,
32,49,57,57,53,10
,0};
The manual page is 2 lines longer than the source :-)
1995-01-29 00:49:57 +00:00
|
|
|
}
|