aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jdtalk.h1
-rw-r--r--main.c48
-rw-r--r--strings.c16
3 files changed, 63 insertions, 2 deletions
diff --git a/jdtalk.h b/jdtalk.h
index ce3554b..5b37e7d 100644
--- a/jdtalk.h
+++ b/jdtalk.h
@@ -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);
diff --git a/main.c b/main.c
index 87952d0..aaebac2 100644
--- a/main.c
+++ b/main.c
@@ -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);
diff --git a/strings.c b/strings.c
index a7a6dda..7250d69 100644
--- a/strings.c
+++ b/strings.c
@@ -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;
+}