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

char shaders[][64] =
{
	"altwater",
	"bloom_blur",
	"bloom_filter",
	"bloom_final",
	"colourtint",
	"crepuscular_opaque",
	"crepuscular_rays",
	"crepuscular_sky",
	"default2d",
	"defaultadditivesprite",
	"defaultskin",
	"defaultsky",
	"defaultsprite",
	"defaultwall",
	"defaultwarp",
	"drawflat_wall",
	"lpp_depthnorm",
	"lpp_light",
	"lpp_wall",
	"postproc_fisheye",
	"postproc_panorama",
	"rtlight",
	"underwaterwarp",
	"terrain",
	""
};

void dumpprogstring(FILE *out, FILE *src)
{
	int j;
	char line[1024];

	while(fgets(line, sizeof(line), src))
	{
		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++], out);
		}
		else
		{
			fputc('\"', out);				
			while (line[j] && line[j] != '\r' && line[j] != '\n')
			{
				if (line[j] == '\t')
					fputc(' ', out);
				else if (line[j] == '\"')
				{
					fputc('\\', out);
					fputc(line[j], out);
				}
				else
					fputc(line[j], out);
				j++;
			}
			fputs("\\n\"\n", out);
		}
	}

}

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

	if (!c)
	{
		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");

	for (i = 0; *shaders[i]; i++)
	{
		for (a = 0; a < 3; a++)
		{
			if (a == 0)
				sprintf(line, "glsl/%s.glsl", shaders[i]);
			else if (a == 1)
				sprintf(line, "gles/%s.glsl", shaders[i]);
			else
				sprintf(line, "hlsl/%s.hlsl", shaders[i]);
			s = fopen(line, "rt");
			if (!s)
			{
				printf("unable to open %s\n", line);
				continue;
			}
			if (a == 0)
			{
				fprintf(c, "#ifdef GLQUAKE\n");
				fprintf(c, "{QR_OPENGL, 110, \"%s\",\n", shaders[i]);
			}
			else if (a == 1)
			{
				fprintf(c, "#ifdef GLQUAKE\n");
				fprintf(c, "{QR_OPENGL, 100, \"%s\",\n", shaders[i]);
			}
			else
			{
				fprintf(c, "#ifdef D3DQUAKE\n");
				fprintf(c, "{QR_DIRECT3D, 9, \"%s\",\n", shaders[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);
			fprintf(c, "#endif\n");
			fclose(s);
		}
	}

	fclose(c);
}