diff options
Diffstat (limited to 'root-topology/bin2c.c')
-rw-r--r-- | root-topology/bin2c.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/root-topology/bin2c.c b/root-topology/bin2c.c new file mode 100644 index 00000000..91ce7d14 --- /dev/null +++ b/root-topology/bin2c.c @@ -0,0 +1,57 @@ +/** + Converts input from stdin into an array of binary data for use in C. + + License: Public Domain + + Usage: app VariableName < input > output.c +*/ + +#include <stdint.h> /* uintXX_t */ +#include <inttypes.h> /* PRIuXX macros */ +#include <stdio.h> + +static char const * appName = 0; + +static void usage() +{ + printf("Usage: %s OBJECT_NAME < input > output.c\n\n", appName ); +} + +int main( int argc, char const ** argv ) +{ + appName = argv[0]; + if( (argc != 2) || (argv[1][0] == '-') ) + { + usage(); + return 1; + } + char const * varname = argv[1]; + enum { bufSize = 1024 * 8 }; + unsigned char buf[bufSize]; + size_t rd = 0; + size_t i = 0; + size_t flip = 0; + + printf( "static unsigned char %s[] = {\n\t", varname); + uint32_t size = 0; + while( 0 != (rd = fread( buf, 1, bufSize, stdin ) ) ) + { + size += rd; + for(i = 0; i < rd; ++i ) + { + printf( "0x%02x", buf[i] ); + if( !( (rd < bufSize) && (i == rd-1)) ) putchar(','); + if( 16 == ++flip ) + { + flip = 0; + printf("\n\t"); + } + else putchar(' '); + } + } + printf("\n};\n", varname ); + printf("#define %s_LEN %llu\n",varname,(unsigned long long)size); + //printf( "enum { %s_length = %"PRIu32"%s }; ", varname, size,"UL"); + //printf("enum { %s_length = sizeof(%s) };\n", varname, varname ); + return 0; +} |