/* * kenny -- a command-line kennyfier * Copyright 2002 Kohan Ikin * Ported to C by Colin Leroy * To compile use `gcc -o kenny kenny.c` * To run use `kenny "my string here"` * * Thanks to: * Peter Palmreuther for a * reverse-translation bugfix. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #define NORMAL 0 #define KENNYSPEAK 1 #define FALSE 0 #define TRUE 1 void usage (void) { printf("kenny STRING\n"); } int is_kennyspeak (char *str) { int i=0; for (i=0; i < strlen(str); i++) { if ((*str >= 'a' && *str <= 'z' && *str != 'm' && *str != 'f' && *str != 'p') || (*str >= 'A' && *str <= 'Z' && *str != 'M' && *str != 'F' && *str != 'P')) return FALSE; *str++; } return TRUE; } char *to_kennyspeak (char *str) { char *kenny_text = NULL; kenny_text = (char *)malloc(strlen(str)*3 + 1); while (str != NULL && *str != '\0') { if (*str < 'A' || (*str > 'Z' && *str < 'a') || *str > 'z') { sprintf(kenny_text, "%s%c", kenny_text, *str); } else { char *add = NULL; add = (char *)malloc(3*sizeof(char)); switch (*str) { case 'e': sprintf(add, "mpp"); break; case 't': sprintf(add, "fmp"); break; case 'a': sprintf(add, "mmm"); break; case 'o': sprintf(add, "ppf"); break; case 'i': sprintf(add, "mff"); break; case 'n': sprintf(add, "ppp"); break; case 's': sprintf(add, "fmm"); break; case 'h': sprintf(add, "mfp"); break; case 'r': sprintf(add, "pff"); break; case 'd': sprintf(add, "mpm"); break; case 'l': sprintf(add, "pmf"); break; case 'c': sprintf(add, "mmf"); break; case 'u': sprintf(add, "fmf"); break; case 'm': sprintf(add, "ppm"); break; case 'w': sprintf(add, "fpp"); break; case 'f': sprintf(add, "mpf"); break; case 'g': sprintf(add, "mfm"); break; case 'y': sprintf(add, "ffm"); break; case 'p': sprintf(add, "pfm"); break; case 'b': sprintf(add, "mmp"); break; case 'v': sprintf(add, "fpm"); break; case 'k': sprintf(add, "pmp"); break; case 'j': sprintf(add, "pmm"); break; case 'x': sprintf(add, "fpf"); break; case 'q': sprintf(add, "pfp"); break; case 'z': sprintf(add, "ffp"); break; case 'E': sprintf(add, "Mpp"); break; case 'T': sprintf(add, "Fmp"); break; case 'A': sprintf(add, "Mmm"); break; case 'O': sprintf(add, "Ppf"); break; case 'I': sprintf(add, "Mff"); break; case 'N': sprintf(add, "Ppp"); break; case 'S': sprintf(add, "Fmm"); break; case 'H': sprintf(add, "Mfp"); break; case 'R': sprintf(add, "Pff"); break; case 'D': sprintf(add, "Mpm"); break; case 'L': sprintf(add, "Pmf"); break; case 'C': sprintf(add, "Mmf"); break; case 'U': sprintf(add, "Fmf"); break; case 'M': sprintf(add, "Ppm"); break; case 'W': sprintf(add, "Fpp"); break; case 'F': sprintf(add, "Mpf"); break; case 'G': sprintf(add, "Mfm"); break; case 'Y': sprintf(add, "Ffm"); break; case 'P': sprintf(add, "Pfm"); break; case 'B': sprintf(add, "Mmp"); break; case 'V': sprintf(add, "Fpm"); break; case 'K': sprintf(add, "Pmp"); break; case 'J': sprintf(add, "Pmm"); break; case 'X': sprintf(add, "Fpf"); break; case 'Q': sprintf(add, "Pfp"); break; case 'Z': sprintf(add, "Ffp"); break; } sprintf(kenny_text, "%s%s",kenny_text,add); free(add); add = NULL; } *str++; } return kenny_text; } char *to_normal (char *str) { char *normal_text = NULL; char *temp = NULL; int i =0; int str_length = strlen(str); normal_text = (char *)malloc(strlen(str)/2 + 1); temp = (char *)malloc(2*sizeof(char)); while (i < str_length) { char add; if (i < str_length - 2) sprintf(temp,"%c%c",*(str+1),*(str+2)); if (*str < 'A' || (*str > 'Z' && *str < 'a') || *str > 'z') { sprintf(normal_text, "%s%c", normal_text, *str); *(str++); i++; continue; } else if (*str == 'm') { if (!strncmp(temp, "pp", 2)) add = 'e'; else if (!strncmp(temp, "mm", 2)) add = 'a'; else if (!strncmp(temp, "ff", 2)) add = 'i'; else if (!strncmp(temp, "fp", 2)) add = 'h'; else if (!strncmp(temp, "pm", 2)) add = 'd'; else if (!strncmp(temp, "mf", 2)) add = 'c'; else if (!strncmp(temp, "pf", 2)) add = 'f'; else if (!strncmp(temp, "fm", 2)) add = 'g'; else if (!strncmp(temp, "mp", 2)) add = 'b'; } else if (*str == 'p') { if (!strncmp(temp, "pf", 2)) add = 'o'; else if (!strncmp(temp, "pp", 2)) add = 'n'; else if (!strncmp(temp, "ff", 2)) add = 'r'; else if (!strncmp(temp, "mf", 2)) add = 'l'; else if (!strncmp(temp, "pm", 2)) add = 'm'; else if (!strncmp(temp, "fm", 2)) add = 'p'; else if (!strncmp(temp, "mp", 2)) add = 'k'; else if (!strncmp(temp, "mm", 2)) add = 'j'; else if (!strncmp(temp, "fp", 2)) add = 'q'; } else if (*str == 'f') { if (!strncmp(temp, "mp", 2)) add = 't'; else if (!strncmp(temp, "mm", 2)) add = 's'; else if (!strncmp(temp, "mf", 2)) add = 'u'; else if (!strncmp(temp, "pp", 2)) add = 'w'; else if (!strncmp(temp, "fm", 2)) add = 'y'; else if (!strncmp(temp, "pm", 2)) add = 'v'; else if (!strncmp(temp, "pf", 2)) add = 'x'; else if (!strncmp(temp, "fp", 2)) add = 'z'; } else if (*str == 'M') { if (!strncmp(temp, "pp", 2)) add = 'E'; else if (!strncmp(temp, "mm", 2)) add = 'A'; else if (!strncmp(temp, "ff", 2)) add = 'I'; else if (!strncmp(temp, "fp", 2)) add = 'H'; else if (!strncmp(temp, "pm", 2)) add = 'D'; else if (!strncmp(temp, "mf", 2)) add = 'C'; else if (!strncmp(temp, "pf", 2)) add = 'F'; else if (!strncmp(temp, "fm", 2)) add = 'G'; else if (!strncmp(temp, "mp", 2)) add = 'B'; } else if (*str == 'P') { if (!strncmp(temp, "pf", 2)) add = 'O'; else if (!strncmp(temp, "pp", 2)) add = 'N'; else if (!strncmp(temp, "ff", 2)) add = 'R'; else if (!strncmp(temp, "mf", 2)) add = 'L'; else if (!strncmp(temp, "pm", 2)) add = 'M'; else if (!strncmp(temp, "fm", 2)) add = 'P'; else if (!strncmp(temp, "mp", 2)) add = 'K'; else if (!strncmp(temp, "mm", 2)) add = 'J'; else if (!strncmp(temp, "fp", 2)) add = 'Q'; } else if (*str == 'F') { if (!strncmp(temp, "mp", 2)) add = 'T'; else if (!strncmp(temp, "mm", 2)) add = 'S'; else if (!strncmp(temp, "mf", 2)) add = 'U'; else if (!strncmp(temp, "pp", 2)) add = 'W'; else if (!strncmp(temp, "fm", 2)) add = 'Y'; else if (!strncmp(temp, "pm", 2)) add = 'V'; else if (!strncmp(temp, "pf", 2)) add = 'X'; else if (!strncmp(temp, "fp", 2)) add = 'Z'; } sprintf(normal_text,"%s%c",normal_text,add); *(str+=3); i+=3; } return normal_text; } int main (int argc, char *argv[]) { if (argc < 2 || !strncmp(argv[1],"--help",6)) { usage(); } else if (!strncmp(argv[1],"greggles is a steggles",22)) { printf("oh yes he is\n"); } else if (!strncmp(argv[1],"hellokohan",10)) { printf("fittzuzfa!\n"); } else if (!strncmp(argv[1],"ik!",3)) { printf("\"ik!\" is not an easter egg.\n"); } else if (!strncmp(argv[1],"ik",2)) { printf("\"ik\" was Simon's idea, not mine!\n"); } else if (!strncmp(argv[1],"ingy",4)) { printf("\"Sad eggs....\"\n\n- Ingy\nwww.ingy.net\n"); } else if (!strncmp(argv[1],"CS302",5)) { printf("Pat Quincy Upbottom\n"); } else if (!strncmp(argv[1],"Aeolas",6)) { printf("Aeolas thinks KennySpeak sounds like " "someone getting head....\n\n" "http://pub28.ezboard.com/ftweetysnestofr" "eaksfrm1.showMessage?topicID=701.topic\n"); } else if (is_kennyspeak(argv[1])) { printf("%s\n", to_normal(argv[1])); } else { printf("%s\n", to_kennyspeak(argv[1])); } return 0; }