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

char effects[][64] =
{
	"spikeset.cfg",
	"faithful.cfg",
	"highfps.cfg",
	"high.cfg",
	"minimal.cfg",
	"h2part.cfg",
	"tsshaft.cfg",
	""
};

int main(void)
{
	FILE *c, *h, *s;
	char line[1024];
	int i, j;
	c = fopen("../client/r_partset.c", "wt");
	h = fopen("../client/r_partset.h", "wt");

	if (!c || !h)
	{
		printf("unable to open a file\n");
		return;
	}

	fprintf(c, "/*\nWARNING: THIS FILE IS GENERATED BY '"__FILE__"'.\nYOU SHOULD NOT EDIT THIS FILE BY HAND\n*/\n\n");
	fprintf(c, "#include \"r_partset.h\"\n\n\n");

	for (i = 0; *effects[i]; i++)
	{
		s = fopen(effects[i], "rt");
		if (!s)
		{
			printf("unable to open %s\n", effects[i]);
			return;
		}
		*strchr(effects[i], '.') = 0;
		fprintf(h, "extern char *particle_set_%s;\n", effects[i]);
		if (i)
			fprintf(c, "\n\n\n//////////////////////////////////////////////////////\n\n\n");
		fprintf(c, "char *particle_set_%s =\n", effects[i]);
		while(fgets(line, sizeof(line), s))
		{
			j = 0;
			while (line[j] == ' ' || line[j] == '\t')
				j++;
			if ((line[j] == '/' && line[j] == '/') || line[j] == '\r' || line[j] == '\n')
			{
				while (line[j])
					fputc(line[j++], c);
			}
			else
			{
				fputc('\"', c);				
				while (line[j] && line[j] != '\r' && line[j] != '\n')
				{
					if (line[j] == '\t')
						fputc(' ', c);
					else if (line[j] == '\"')
					{
						fputc('\\', c);
						fputc(line[j], c);
					}
					else
						fputc(line[j], c);
					j++;
				}
				fputs("\\n\"\n", c);
			}
		}
		fputs(";\n", c);
		fclose(s);
	}

	fputs("#define R_PARTSET_BUILTINS ", h);
	for (i = 0; *effects[i]; i++)
	{
		fprintf(h, "{\"%s\", &particle_set_%s},", effects[i], effects[i]);
	}
	fputs("\n", h);

	fclose(h);
	fclose(c);
}
