home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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() {}
-