// NeL - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // bin2c.cpp : Defines the entry point for the console application. // #include #include #include #define max(a, b) ((a) > (b) ? (a) : (b)) int main(int argc, char* argv[]) { if (argc<2) { printf ("bin2c [filename.bin] [filename.c]\n"); } else { char sOutput[256]; char *cExt = strrchr(argv[1], '.'); char *cName = max(strrchr(argv[1], '/'), strrchr(argv[1], '\\')) + 1; char sName[256]; strcpy(sName, cName); if (cExt > cName) { sName[cExt - cName] = '\x00'; } if (argc > 2) { strcpy(sOutput, argv[2]); } else { strcpy(sOutput, argv[1]); if (cExt <= cName) { cExt = sOutput + strlen(sOutput); cExt[0] = '.'; } cExt[1] = 'c'; cExt[2] = '\x00'; } FILE *pIn=fopen( argv[1], "rb"); if (pIn==NULL) { printf ("Can't open %s.", argv[1]); } else { FILE *pOut=fopen( sOutput, "w"); if (pOut==NULL) printf ("Can't open %s.", sOutput); else { fprintf (pOut, "/**\n" " * Generated by bin2c.exe\n" " * binfile: %s\n" " */\n" "\n" "extern const unsigned char %s[];\n" "extern const unsigned int %sSize;\n\n" "const unsigned char %s[] =\n" "{\n", argv[1], sName, sName, sName); unsigned int size=0; int i; while (1) { fprintf (pOut, "\t"); for (i=0; i<8; i++) { int c=fgetc (pIn); if (c==EOF) break; fprintf (pOut, "0x%02x, ", c); size++; } fprintf (pOut, "\n"); if (i!=8) break; } fprintf (pOut, "};\n\n"); fprintf (pOut, "const unsigned int %sSize = %d;\n\n", sName, size); fclose (pOut); fclose (pIn); } } } return 0; }