77 lines
1.8 KiB
C
77 lines
1.8 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <ctype.h>
|
|
|
|
#if defined(_WIN32)
|
|
#pragma warning(disable : 4996) // The POSIX name for this item is deprecated.
|
|
#endif
|
|
|
|
int main(int argc, char **argv) {
|
|
FILE *f_c, *f_h, *f_i;
|
|
unsigned int i, j, count, size;
|
|
unsigned char buf[12];
|
|
|
|
if (argc < 3) {
|
|
fprintf(stderr, "Syntax: bin2c <C file> <H file> [Input file 1] [Input file 2] ..\n");
|
|
return -1;
|
|
}
|
|
f_c = fopen(argv[1], "w");
|
|
if (!f_c) {
|
|
fprintf(stderr, "Error opening %s\n", argv[1]);
|
|
return -1;
|
|
}
|
|
f_h = fopen(argv[2], "w");
|
|
if (!f_h) {
|
|
fprintf(stderr, "Error opening %s\n", argv[2]);
|
|
return -1;
|
|
}
|
|
|
|
fprintf(f_c, "/* Autogenerated by bin2c */\n\n");
|
|
fprintf(f_c, "#include <stdint.h>\n\n");
|
|
fprintf(f_h, "/* Autogenerated by bin2c */\n\n");
|
|
fprintf(f_h, "#pragma once\n");
|
|
fprintf(f_h, "#include <stdint.h>\n\n");
|
|
|
|
for (i=3; i<(unsigned int) argc; ++i) {
|
|
char *name = strdup(strrchr(argv[i], '/') ? strrchr(argv[i], '/')+1 : argv[i] );
|
|
for (j=0; j<strlen(name); ++j) {
|
|
if (name[j] == '.' || name[j] == '-')
|
|
name[j] = '_';
|
|
else
|
|
name[j] = tolower(name[j]);
|
|
}
|
|
|
|
f_i = fopen(argv[i], "rb");
|
|
if (!f_i) {
|
|
fprintf(stderr, "Error opening %s\n", argv[i]);
|
|
return -1;
|
|
}
|
|
|
|
fprintf(f_c, "uint8_t %s[] = {\n", name);
|
|
fprintf(f_h, "extern uint8_t %s[];\n", name);
|
|
|
|
size = 0;
|
|
while ((count = (unsigned int) fread(buf, 1, sizeof(buf), f_i)) > 0) {
|
|
fprintf(f_c, " ");
|
|
for (j=0; j<count; j++) {
|
|
fprintf(f_c, "0x%02x, ", (unsigned int) buf[j]);
|
|
size++;
|
|
}
|
|
fprintf(f_c, "\n");
|
|
}
|
|
fprintf(f_c, " 0x00\n");
|
|
|
|
fprintf(f_c, "};\n\n");
|
|
fprintf(f_h, "extern uint32_t %s_size;\n\n", name);
|
|
fprintf(f_c, "uint32_t %s_size = %i;\n\n", name, size);
|
|
fclose(f_i);
|
|
free(name);
|
|
}
|
|
|
|
fclose(f_c);
|
|
fclose(f_h);
|
|
|
|
return 0;
|
|
}
|