/* Permutation file creation program - shouldn't be needed */


#include "scrab.h"

#define PERMFILE "fcrabble_permutations"

short int perms[7][5040][7];
int numperms[7];

void makeperm(short int p[7][5040][7],int num[7])
{
	int used[7];
	int ptr[7];
	int count;
	int clash,max;
	int lastptr[7] = {-1,-1,-1,-1,-1,-1,-1};

	for (count = 0; count < 7; count++)
		num[count] = 0;
	for (max = 0; max < 7; max++)
	{
	printf("Making %i perms\n",max+1);
	for (ptr[0] = 0; ptr[0] < 7; ptr[0]++)
	for (ptr[1] = 0; ptr[1] < 7; ptr[1]++)
	for (ptr[2] = 0; ptr[2] < 7; ptr[2]++)
	for (ptr[3] = 0; ptr[3] < 7; ptr[3]++)
	for (ptr[4] = 0; ptr[4] < 7; ptr[4]++)
	for (ptr[5] = 0; ptr[5] < 7; ptr[5]++)
	for (ptr[6] = 0; ptr[6] < 7; ptr[6]++)
	{
		for (count = 0; count < 7; count++)
		{
			used[count] = 0;
		}
		
		clash = 0;
		for (count = 0; count < (max+1); count++)
			if (!used[ptr[count]])
				used[ptr[count]] = 1;
			else
				{
				clash = 1;
				break;
				}
		if (clash)
			continue;
		clash = 0;
		for (count = 0; count < (max+1); count++)
		{
			if (ptr[count] == lastptr[count])
				clash++;	
		}
		if (clash == (max+1))
			continue;
		for (count = 0; count < (max+1); count++)
		{
			p[max][num[max]][count] = ptr[count];
			lastptr[count] = ptr[count];
			}
		(num[max])++;
	}
	}

}

void writeperms()
{
	FILE *fp;
	int perm,nperms,values;
	
	fp = fopen(PERMFILE,"w");
	if (fp==NULL)
	{
		fprintf(stderr,"Couldn't open permutations file");
		exit(1);
	}
	printf("writing perm file...\n");
	for (nperms = 0;nperms < 7;nperms++)
	{
		fprintf(fp,"%i\n",numperms[nperms]);
	}
	for (perm = 0;perm < 7;perm++)
		for (nperms = 0; nperms < numperms[perm];nperms++)
		{
			for (values = 0; values < perm+1;values++)
			{
				putc(perms[perm][nperms][values],fp);
			}
			fprintf(fp,"\n");
		}
	fclose(fp);
}

int main()
{
	makeperm(perms,numperms);
	writeperms();
	return 0;
}
