#include #include #include FILE *file_c; FILE *file_h; void convert(char *file_name, char *var_name) { int i, n; unsigned char buffer[16]; FILE *infile=fopen(file_name, "r"); fprintf(file_c, "unsigned char %s[] = {\n", var_name); while ((n = fread(buffer, 1, 16, infile))) { for (i = 0; i < n; i++) { fprintf(file_c, "0x%2.2x,", buffer[i]); } } fprintf(file_c, "\n};\n"); fprintf(file_c, "unsigned int %s_length = %d;\n\n", var_name, ftell(infile)); fprintf(file_h, "extern unsigned char %s[];\n", var_name); fprintf(file_h, "extern unsigned int %s_length;\n\n", var_name); } int main(int argc, char **argv) { if (argc <= 1) { printf("Usage: %s binary_file\nOutputs: binary_file.h, binary_file.c\n", argv[0]); printf("Optional flags: \n"); printf("\t-a\tAppend converted file to output files\n"); return; } int i; char **file = NULL; char mode[3]; mode[0] = 'w'; mode[1] = '\0'; for(i=1;i < argc;i++) { switch(argv[i][0]) { case '-': // flag switch(argv[i][1]) { case 'a': printf(" appending mode activated\n"); mode[0] = 'a'; break; default: break; } break; default: // not a flag, so it is filename file = &argv[i]; break; } } if (file == NULL) { printf("ERR: must specify filename\n"); return 1; } printf("Processing %s\n", *file); size_t file_length = strlen(*file); char *var_name = malloc(file_length+1); strcpy(var_name, *file); i = 0; while(var_name[i] != '\0') { switch(var_name[i]) { case '.': case '\\': case ',': var_name[i] = '_'; break; default: break; } i++; } char *filename_c = malloc(file_length+3); strcpy(filename_c, var_name); filename_c[file_length] = '.'; filename_c[file_length+1] = 'c'; filename_c[file_length+2] = '\0'; char *filename_h = malloc(file_length+3); strcpy(filename_h, var_name); filename_h[file_length] = '.'; filename_h[file_length+1] = 'h'; filename_h[file_length+2] = '\0'; printf("Writing to %s and %s\n", filename_c, filename_h); file_c = fopen(filename_c, mode); file_h = fopen(filename_h, mode); i = 0; while(var_name[i] != '\0') { switch(var_name[i]) { case '/': var_name[i] = '_'; break; default: break; } i++; } fprintf(file_h, "#ifndef %s_H\n#define %s_H\n", var_name, var_name); convert(*file, var_name); fprintf(file_h, "#endif\n"); fclose(file_c); fclose(file_h); return 0; }