#include <stdio.h>
#include <stdlib.h>
#include <string>

using namespace std;

int main(int argc, char * argv[])
{
	if (argc < 5)
	{
		printf("Usage: compilefile infile hfile cfile internal_name\n");
		return 0;
	}
	
	uint32_t bytecount = 0;
	FILE * infile = fopen(argv[1], "rb");
	FILE * hfile = fopen(argv[2], "wt");
	FILE * cfile = fopen(argv[3], "wt");
	char * internalname = argv[4];
	
	while (getc(infile) != EOF)
		bytecount++;
	
	fseek(infile, 0, SEEK_SET);
	unsigned char * filedata = new unsigned char[bytecount];
	fread(filedata, sizeof(unsigned char), bytecount, infile);
	
	string houtput = "#ifndef __";
	houtput += internalname;
	houtput += "_H__\n#define __";
	houtput += internalname;
	houtput += "_H__\nextern unsigned char ";
	houtput += internalname;
	houtput += "[];\nextern int ";
	houtput += internalname;
	houtput += "_count;\n#endif\n";
	
	fwrite(houtput.c_str(), sizeof(char), houtput.size(), hfile);
	
	fprintf(cfile, "#include \"%s\"\nint %s_count = %d;\nunsigned char %s[] = {",
		argv[2], internalname, bytecount, internalname
		);
	for (int i = 0; i < bytecount; i++)
	{
		fprintf(cfile, "%d,", (int) filedata[i]);
		if (i % 80 == 0)
			fprintf(cfile, "\n");
	}
	fprintf(cfile, "0};\n");
	
	fclose(infile);
	fclose(hfile);
	fclose(cfile);
	return 0;
}


