summaryrefslogtreecommitdiffstats
path: root/usr.bin/file2c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1995-01-29 00:49:57 +0000
committerphk <phk@FreeBSD.org>1995-01-29 00:49:57 +0000
commit44d9c7e9b3d448bf116a13c6bd8ebb5d7c8ffe36 (patch)
tree74d96360e3e3de678927ef324e7928a057b7d3dd /usr.bin/file2c
parent1c4f0da002bee304102c51e111fb0008aa0c8634 (diff)
downloadFreeBSD-src-44d9c7e9b3d448bf116a13c6bd8ebb5d7c8ffe36.zip
FreeBSD-src-44d9c7e9b3d448bf116a13c6bd8ebb5d7c8ffe36.tar.gz
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 :-)
Diffstat (limited to 'usr.bin/file2c')
-rw-r--r--usr.bin/file2c/Makefile6
-rw-r--r--usr.bin/file2c/file2c.148
-rw-r--r--usr.bin/file2c/file2c.c46
3 files changed, 100 insertions, 0 deletions
diff --git a/usr.bin/file2c/Makefile b/usr.bin/file2c/Makefile
new file mode 100644
index 0000000..f19c125
--- /dev/null
+++ b/usr.bin/file2c/Makefile
@@ -0,0 +1,6 @@
+# $Id: Makefile,v 1.3 1994/09/24 02:55:45 davidg Exp $
+
+PROG= file2c
+MAN1= file2c.1
+
+.include <bsd.prog.mk>
diff --git a/usr.bin/file2c/file2c.1 b/usr.bin/file2c/file2c.1
new file mode 100644
index 0000000..c2dda08
--- /dev/null
+++ b/usr.bin/file2c/file2c.1
@@ -0,0 +1,48 @@
+.\"----------------------------------------------------------------------------
+.\" "THE BEER-WARE LICENSE" (Revision 42):
+.\" <phk@freebsd.org> wrote this file. As long as you retain this notice, you
+.\" can do whatever you want with this file. If we meet some day, and you think
+.\" this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
+.\" ---------------------------------------------------------------------------
+.\"
+.\" $Id$
+.\"
+.Dd Jan 28, 1995
+.Dt FILE2C 1
+.Os
+.Sh NAME
+.Nm file2c
+.Nd convert file to c-source.
+.Sh SYNOPSIS
+.Nm file2c
+.Op "string"
+.Op "string"
+.Sh DESCRIPTION
+The
+.Nm file2c
+utility reads a file from stdin and writes it to stdout, converting each
+byte to its decimal representation on the fly.
+.Pp
+If the first
+.Op string
+is present, it is printed before the data, if the second
+.Op string
+is present, it is printed after the data.
+.Pp
+This program is used to embedd binary or other files into C source files,
+for instance as a char[].
+.Sh EXAMPLE
+The command:
+.Bd -literal -offset indent
+date | file2c 'const char date[] = {' ',0};'
+.Ed
+.Pp
+will produce:
+.Bd -literal -offset indent
+const char date[] = {
+83,97,116,32,74,97,110,32,50,56,32,49,54,58,50,56,58,48,53,
+32,80,83,84,32,49,57,57,53,10
+,0};
+.Ed
+
+
diff --git a/usr.bin/file2c/file2c.c b/usr.bin/file2c/file2c.c
new file mode 100644
index 0000000..0bad904
--- /dev/null
+++ b/usr.bin/file2c/file2c.c
@@ -0,0 +1,46 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
+ * 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
+ * ----------------------------------------------------------------------------
+ *
+ * $Id$
+ *
+ */
+
+#include <stdio.h>
+
+int
+main(int argc, char **argv)
+{
+ int i,j,k;
+ char s[10];
+
+ if (argc > 1)
+ printf("%s\n",argv[1]);
+ k = 0;
+ j = 0;
+ while((i = getchar()) != EOF) {
+ if(k++) {
+ putchar(',');
+ j++;
+ }
+ if (j > 70) {
+ putchar('\n');
+ j = 0;
+ }
+ printf("%d",i);
+ if (i > 99)
+ j += 3;
+ else if (i > 9)
+ j += 2;
+ else
+ j++;
+ }
+ putchar('\n');
+ if (argc > 2)
+ printf("%s\n",argv[2]);
+ return 0;
+}
OpenPOWER on IntegriCloud