/*
 * jumble.c - create/solve anagrams
 *
 * Manx Compile: cc +x5 jumble
 *               ln jumble -lc
 */

#define TRUE	1
#define FALSE	0

#define tolower(c) ((c) | 0x20)

char *a, b[79];
short filter = FALSE;

valid()
{
	static char vowel [] = { "aeiouy" };
	register short v = 0, c = 0;
	register char *s = a;

	while (*s) {
		if (strchr(vowel, *s++))
		{
			v++;
			c = 0;
		}
		else
		{
			v = 0;
			c++;
		}
		if (v == 3 || c == 4)
			return FALSE;
	}
	return TRUE;
}

void output()
{
	if (filter && !valid())
		return;
	else
	{
		if ((strlen(b) + strlen(a)) < 77)
			strcat(b, a);
		else
		{
			puts(b);
			strcpy(b, a);
		}
		strcat(b, " ");
	}
}

void permute(k)
register short k;
{
	register short i;
	register char t;

	if (k == 0)
		output();
	else
		permute(k - 1);

	for (i = 0; i < k; i++)
	{
		t = a[i], a[i] = a[k], a[k] = t;
		permute(k - 1);
		t = a[i], a[i] = a[k], a[k] = t;
	}
}

void main(argc, argv)
int argc;
char *argv[];
{
	register char c;

	while (--argc && (*++argv)[0] == '-')
		while (c = *++argv[0])
			switch (tolower(c))
			{
				case 'f':
					filter = TRUE;
					break;

				default:
					puts("\nError: unknown flag\n");
					break;
			}
	if (argc != 1 || **argv == '?')
		puts("\nUsage: JUMBLE [-f] text\n");
	else
	{
		a = *argv;
		permute(strlen(a) - 1);
		puts(b);
	}
}

_wb_parse() {}
