From b95151c7c22eed7336fdef3a3587138cddf070e4 Mon Sep 17 00:00:00 2001 From: Andrew Hannam Date: Thu, 4 Apr 2013 16:58:48 +1000 Subject: [PATCH] Tools to convert a file to c array file2c converts any file into a C array. Particularly useful for loading an image file into flash. --- tools/file2c/Binaries - Win32/file2c.exe | Bin 0 -> 9216 bytes .../file2c/Source/VS 2012 Project/file2c.sln | 22 +++ .../Source/VS 2012 Project/file2c.v11.suo | Bin 0 -> 24064 bytes .../VS 2012 Project/file2c/file2c.vcxproj | 84 ++++++++++ .../file2c/file2c.vcxproj.filters | 22 +++ .../file2c/file2c.vcxproj.user | 4 + tools/file2c/Source/file2c.c | 144 ++++++++++++++++++ tools/file2c/readme.txt | 8 + 8 files changed, 284 insertions(+) create mode 100644 tools/file2c/Binaries - Win32/file2c.exe create mode 100644 tools/file2c/Source/VS 2012 Project/file2c.sln create mode 100644 tools/file2c/Source/VS 2012 Project/file2c.v11.suo create mode 100644 tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj create mode 100644 tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj.filters create mode 100644 tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj.user create mode 100644 tools/file2c/Source/file2c.c create mode 100644 tools/file2c/readme.txt diff --git a/tools/file2c/Binaries - Win32/file2c.exe b/tools/file2c/Binaries - Win32/file2c.exe new file mode 100644 index 0000000000000000000000000000000000000000..985279559dd5b091c63f37440248cd01a2dc368e GIT binary patch literal 9216 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 nL4|3l={fcVcAsU?@|5KnOVaX{J9%AjJp

a6JS6tqlAp!EQ)# literal 0 HcmV?d00001 diff --git a/tools/file2c/Source/VS 2012 Project/file2c.sln b/tools/file2c/Source/VS 2012 Project/file2c.sln new file mode 100644 index 00000000..5e067d5b --- /dev/null +++ b/tools/file2c/Source/VS 2012 Project/file2c.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "file2c", "file2c\file2c.vcxproj", "{16787B20-A841-4DC1-9C15-E6677A0D7342}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {16787B20-A841-4DC1-9C15-E6677A0D7342}.Debug|Win32.ActiveCfg = Debug|Win32 + {16787B20-A841-4DC1-9C15-E6677A0D7342}.Debug|Win32.Build.0 = Debug|Win32 + {16787B20-A841-4DC1-9C15-E6677A0D7342}.Debug|Win32.Deploy.0 = Debug|Win32 + {16787B20-A841-4DC1-9C15-E6677A0D7342}.Release|Win32.ActiveCfg = Release|Win32 + {16787B20-A841-4DC1-9C15-E6677A0D7342}.Release|Win32.Build.0 = Release|Win32 + {16787B20-A841-4DC1-9C15-E6677A0D7342}.Release|Win32.Deploy.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/tools/file2c/Source/VS 2012 Project/file2c.v11.suo b/tools/file2c/Source/VS 2012 Project/file2c.v11.suo new file mode 100644 index 0000000000000000000000000000000000000000..72b575217fc62fc7f2f754c4472868a2ce118855 GIT binary patch literal 24064 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 literal 0 HcmV?d00001 diff --git a/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj b/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj new file mode 100644 index 00000000..b0b846c7 --- /dev/null +++ b/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj @@ -0,0 +1,84 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + {16787B20-A841-4DC1-9C15-E6677A0D7342} + Win32Proj + file2c + + + + Application + true + v110 + Unicode + + + Application + false + v110 + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + \ No newline at end of file diff --git a/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj.filters b/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj.filters new file mode 100644 index 00000000..97daa75f --- /dev/null +++ b/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj.user b/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj.user new file mode 100644 index 00000000..a375ae35 --- /dev/null +++ b/tools/file2c/Source/VS 2012 Project/file2c/file2c.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/tools/file2c/Source/file2c.c b/tools/file2c/Source/file2c.c new file mode 100644 index 00000000..2bcb4560 --- /dev/null +++ b/tools/file2c/Source/file2c.c @@ -0,0 +1,144 @@ +#include +#include +#include +#ifdef WIN32 + #include +#endif + +static unsigned char buf[1024]; + +static char *filenameof(char *fname) { + char *p; + +#ifdef WIN32 + if (fname[1] == ':') + fname = fname+2; + p = strrchr(fname, '\\'); + if (p) fname = p+1; +#endif + p = strrchr(fname, '/'); + if (p) fname = p+1; + p = strchr(fname, '.'); + if (p) *p = 0; + return fname; +} + +int main(int argc, char * argv[]) +{ +char * opt_progname; +char * opt_inputfile; +char * opt_outputfile; +char * opt_arrayname; +int opt_breakblocks; +char * opt_static; +char * opt_const; +FILE * f_input; +FILE * f_output; +unsigned blocknum; +size_t len; +size_t i; + + /* Default values for our parameters */ + opt_progname = argv[0]; + opt_inputfile = 0; + opt_outputfile = 0; + opt_arrayname = 0; + opt_breakblocks = 0; + opt_static = ""; + opt_const = ""; + + /* Read the arguments */ + while(*++argv) { + if (argv[0][0] == '-') { + while (*++(argv[0])) { + switch(argv[0][0]) { + case 'b': opt_breakblocks = 1; break; + case 'c': opt_const = "const "; break; + case 's': opt_static = "static "; break; + case 'n': opt_arrayname = *++argv; goto nextarg; + default: + fprintf(stderr, "Unknown flag -%c\n", argv[0][0]); + goto usage; + } + } + } else if (!opt_inputfile) + opt_inputfile = argv[0]; + else if (!opt_outputfile) + opt_outputfile = argv[0]; + else { + usage: + fprintf(stderr, "Usage:\n\t%s -?\n" + "\t%s [-bs] [-n name] [inputfile] [outputfile]\n" + "\t\t-?\tThis help\n" + "\t\t-b\tBreak the arrays for compilers that won't handle large arrays\n" + "\t\t-c\tDeclare the arrays as const (useful to ensure they end up in Flash)\n" + "\t\t-s\tDeclare the arrays as static\n" + "\t\t-n name\tUse \"name\" as the name of the array\n" + , opt_progname, opt_progname); + return 1; + } + nextarg: ; + } + + /* Open the input file */ + if (opt_inputfile) { + f_input = fopen(opt_inputfile, +#ifdef WIN32 + "rb"); +#else + "r"); +#endif + if (!f_input) { + fprintf(stderr, "Could not open input file '%s'\n", opt_inputfile); + goto usage; + } + } else { + f_input = stdin; +#ifdef WIN32 + _setmode(_fileno(stdin), _O_BINARY); +#endif + } + + /* Open the output file */ + if (opt_outputfile) { + f_output = fopen(opt_outputfile, "w"); + if (!f_output) { + fprintf(stderr, "Could not open output file '%s'\n", opt_outputfile); + goto usage; + } + } else + f_output = stdout; + + /* Set the array name */ + if (!opt_arrayname) { + if (opt_inputfile) + opt_arrayname = filenameof(opt_inputfile); + if (!opt_arrayname || !opt_arrayname[0]) + opt_arrayname = "filearray"; + } + + /* Read the file processing 1K at a time */ + blocknum = 0; + while((len = fread(buf, 1, sizeof(buf), f_input))) { + if (!blocknum++) + fprintf(f_output, "%s%sunsigned char %s[] = {", opt_static, opt_const, opt_arrayname); + else if (opt_breakblocks) + fprintf(f_output, "\n};\n%s%sunsigned char %s_p%u[] = {", opt_static, opt_const, opt_arrayname, blocknum); + for(i = 0; i < len; i++) { + fprintf(f_output, (i & 0x0F) ? ", 0x%02X" : "\n\t0x%02X", buf[i]); + } + } + fprintf(f_output, "\n};\n"); + + /* Clean up */ + if (ferror(f_input)) + fprintf(stderr, "Input file read error\n"); + if (ferror(f_output)) + fprintf(stderr, "Output file write error - disk full?\n"); + if (f_input != stdin) + fclose(f_input); + if (f_output != stdout) + fclose(f_output); + + return 0; +} diff --git a/tools/file2c/readme.txt b/tools/file2c/readme.txt new file mode 100644 index 00000000..54984111 --- /dev/null +++ b/tools/file2c/readme.txt @@ -0,0 +1,8 @@ +This utility converts a file (of any type) into a c array +so that it can be compiled into your project. + +For example: + file2c -cs test.bmp test-image.h + +For usage instructions: + file2c -?