mirror of
https://github.com/reactos/reactos.git
synced 2024-06-29 01:12:06 +00:00
[HOST-TOOLS/BIN2C]: Add bin2c host tool, to be used for embedding binary files inside C source code, by transforming them into a byte array. By Hermès Bélusca.
CORE-6653 #resolve Committed to trunk. Cheers ;) svn path=/trunk/; revision=57296
This commit is contained in:
parent
ad26240c79
commit
6fbbda7beb
|
@ -69,9 +69,9 @@ if(NOT CMAKE_CROSSCOMPILING)
|
|||
add_subdirectory(lib)
|
||||
|
||||
if(NOT MSVC)
|
||||
export(TARGETS widl gendib cabman cdmake mkhive obj2bin spec2def geninc rsym mkshelllink FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
|
||||
export(TARGETS bin2c widl gendib cabman cdmake mkhive obj2bin spec2def geninc rsym mkshelllink FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
|
||||
else()
|
||||
export(TARGETS widl gendib cabman cdmake mkhive obj2bin spec2def geninc mkshelllink FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
|
||||
export(TARGETS bin2c widl gendib cabman cdmake mkhive obj2bin spec2def geninc mkshelllink FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
|
||||
endif()
|
||||
|
||||
else()
|
||||
|
|
|
@ -5,6 +5,8 @@ if(MSVC)
|
|||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
add_executable(bin2c bin2c.c)
|
||||
|
||||
add_subdirectory(cabman)
|
||||
add_subdirectory(cdmake)
|
||||
add_subdirectory(gendib)
|
||||
|
|
106
reactos/tools/bin2c.c
Normal file
106
reactos/tools/bin2c.c
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS bin2c
|
||||
* FILE: tools/bin2c/bin2c.c
|
||||
* PURPOSE: Converts a binary file into a byte array
|
||||
* PROGRAMMER: Hermès Bélusca - Maïto
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
FILE* inFile;
|
||||
FILE* outCFile;
|
||||
FILE* outHFile;
|
||||
unsigned char ch;
|
||||
unsigned char cnt;
|
||||
|
||||
/*
|
||||
* Validate the arguments.
|
||||
*/
|
||||
if (argc < 5)
|
||||
{
|
||||
printf("Usage: bin2c infile.bin outfile.c outfile.h array_name [array_attribute [header_for_attribute]]\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Open the input and the output files.
|
||||
*/
|
||||
inFile = fopen(argv[1], "rb");
|
||||
if (!inFile)
|
||||
{
|
||||
printf("ERROR: Couldn't open data file '%s'.\n", argv[1]);
|
||||
return -1;
|
||||
}
|
||||
outCFile = fopen(argv[2], "w");
|
||||
if (!outCFile)
|
||||
{
|
||||
fclose(inFile);
|
||||
printf("ERROR: Couldn't create output source file '%s'.\n", argv[2]);
|
||||
return -1;
|
||||
}
|
||||
outHFile = fopen(argv[3], "w");
|
||||
if (!outHFile)
|
||||
{
|
||||
fclose(outCFile);
|
||||
fclose(inFile);
|
||||
printf("ERROR: Couldn't create output header file '%s'.\n", argv[3]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Generate the header file and close it.
|
||||
*/
|
||||
fprintf(outHFile, "/* This file is autogenerated, do not edit. */\n\n");
|
||||
fprintf(outHFile, "#ifndef CHAR\n"
|
||||
"#define CHAR char\n"
|
||||
"#endif\n\n");
|
||||
fprintf(outHFile, "extern CHAR %s[];\n", argv[4]);
|
||||
fclose(outHFile);
|
||||
|
||||
/*
|
||||
* Generate the source file and close it.
|
||||
*/
|
||||
fprintf(outCFile, "/* This file is autogenerated, do not edit. */\n\n");
|
||||
if (argc >= 7)
|
||||
{
|
||||
/* There is a header to be included for defining the array attribute. */
|
||||
fprintf(outCFile, "#include \"%s\"\n", argv[6]);
|
||||
}
|
||||
fprintf(outCFile, "#include \"%s\"\n\n", argv[3]);
|
||||
|
||||
/* Generate the array. */
|
||||
if (argc >= 6)
|
||||
{
|
||||
/* There is an array attribute. */
|
||||
fprintf(outCFile, "%s ", argv[5]);
|
||||
}
|
||||
fprintf(outCFile, "CHAR %s[] =\n{", argv[4]);
|
||||
|
||||
cnt = 0;
|
||||
ch = fgetc(inFile);
|
||||
while (!feof(inFile))
|
||||
{
|
||||
if ((cnt % 16) == 0)
|
||||
{
|
||||
fprintf(outCFile, "\n ");
|
||||
cnt = 0;
|
||||
}
|
||||
fprintf(outCFile, " 0x%02x,", (unsigned int)ch);
|
||||
++cnt;
|
||||
ch = fgetc(inFile);
|
||||
}
|
||||
/* Put a final NULL terminator. */
|
||||
fprintf(outCFile, "\n 0x00");
|
||||
fprintf(outCFile, "\n};\n");
|
||||
fclose(outCFile);
|
||||
|
||||
/* Close the input file. */
|
||||
fclose(inFile);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* EOF */
|
Loading…
Reference in a new issue