/* * 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() {}