home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
200-299
/
ff262.lzh
/
Jumble
/
jumble.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-10-31
|
1KB
|
104 lines
/*
* 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() {}