diff options
-rw-r--r-- | jdtalk.h | 1 | ||||
-rw-r--r-- | main.c | 48 | ||||
-rw-r--r-- | strings.c | 16 |
3 files changed, 63 insertions, 2 deletions
@@ -45,6 +45,7 @@ void dictionary_free(struct Dictionary *dict); char *str_random_case(char *s); char *str_hill_case(char *s); char *str_leet(char *s); +char *str_title_case(char *s); char *talkf(struct Dictionary *dict, const char *fmt, char **parts); char *talk_salad(struct Dictionary *dict, size_t limit, char **parts); @@ -1,5 +1,38 @@ #include "jdtalk.h" +static const char *usage_text = \ + "usage: %s [-h] [-befHlr] [-s salad_word_count] [-c line_limit] [-p pattern] [-a acronym]\n" + " -a str Acronym mode\n" + " -b Enable benchmark output\n" + " -c num Output `num` lines\n" + " -e Exact match (use with -p)\n" + " -f str Custom output format\n" + " (a=adjective, d=adverb, n=noun, v=verb)\n" + " -h Show this usage statement\n" + " -H Produce hill-cased strings (hIlL cAsE)\n" + " -l Produce leet speak strings (1337 5|*34|<)\n" + " -r Produce random-case strings (raNdoM CasE)\n" + " -s num Produce word salad (`num` words per line)\n" + " -t Produce title-case strings (Title Case)\n" + "\n"; + +static void usage(char *name) { + char *begin; + char buf[PATH_MAX]; + buf[0] = '\0'; + + strcpy(buf, name); + begin = strrchr(buf, '/'); + if (begin && strlen(begin)) { + printf("%s\n", begin); + memmove(begin, begin + 1, strlen(begin)); + printf("%s\n", begin); + } else { + begin = buf; + } + printf(usage_text, begin); +} + int main(int argc, char *argv[]) { struct Dictionary *dict; char buf[OUTPUT_SIZE_MAX]; @@ -16,6 +49,7 @@ int main(int argc, char *argv[]) { int do_leet; int do_salad; int do_benchmark; + int do_title_case; int salad_limit; size_t limit; float start_time; @@ -30,6 +64,7 @@ int main(int argc, char *argv[]) { do_leet = 0; do_salad = 0; do_benchmark = 0; + do_title_case = 0; limit = 0; salad_limit = 10; @@ -41,7 +76,11 @@ int main(int argc, char *argv[]) { srand(time(NULL)); setvbuf(stdout, NULL, _IONBF, 0); - for (size_t i = 0; argv[i] != NULL; i++) { + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "-h") == 0) { + usage(argv[0]); + exit(0); + } if (strcmp(argv[i], "-b") == 0) { do_benchmark = 1; } @@ -50,7 +89,6 @@ int main(int argc, char *argv[]) { } if (strcmp(argv[i], "-p") == 0) { do_pattern = 1; - memset(pattern, '\0', sizeof(pattern)); strcpy(pattern, argv[i + 1]); } if (strcmp(argv[i], "-e") == 0) { @@ -74,8 +112,12 @@ int main(int argc, char *argv[]) { } if (strcmp(argv[i], "-a") == 0) { do_acronym = 1; + do_title_case = 1; strcpy(acronym, argv[i + 1]); } + if (strcmp(argv[i], "-t") == 0) { + do_title_case = 1; + } } dict = dictionary_populate(); @@ -131,6 +173,8 @@ int main(int argc, char *argv[]) { str_hill_case(buf); } else if (do_leet) { strcpy(buf, str_leet(buf)); + } else if (do_title_case) { + str_title_case(buf); } puts(buf); @@ -141,3 +141,19 @@ char *str_leet(char *s) { return buf; } +char *str_title_case(char *s) { + size_t len; + size_t i; + + len = strlen(s); + i = 0; + char ch; + + s[i] = toupper(s[i]); + for (; i < len; i++) { + if (i < len - 1 && s[i] == ' ') { + s[i + 1] = (char) toupper(s[i + 1]); + } + } + return s; +} |