From 7baaff0777813c1dafd441c504f9cc4532f7205b Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sat, 4 Aug 2018 01:13:06 -0400 Subject: Handle /nick and /quit /quit doesn't actually... quit, right now. The only way to know that the connection is closed is tls_read returning zero, it seems. --- chat.c | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/chat.c b/chat.c index c3a4f4f..f799687 100644 --- a/chat.c +++ b/chat.c @@ -40,6 +40,7 @@ static wchar_t *wcssep(wchar_t **stringp, const wchar_t *delim) { wchar_t *orig = *stringp; + if (!orig) return NULL; size_t i = wcscspn(orig, delim); *stringp = NULL; if (orig[i]) { @@ -475,18 +476,52 @@ static void privmsg(bool action, const wchar_t *mesg) { free(line); } +typedef void (*Command)(wchar_t *params); + +static void inputMe(wchar_t *params) { + privmsg(true, params ? params : L""); +} + +static void inputNick(wchar_t *params) { + wchar_t *nick = wcssep(¶ms, L" "); + if (nick) { + clientFmt("NICK %ls\r\n", nick); + } else { + uiFmt("/nick requires a name"); + } +} + +static void inputQuit(wchar_t *params) { + if (params) { + clientFmt("QUIT :%ls\r\n", params); + } else { + clientFmt("QUIT :Goodbye\r\n"); + } +} + +static const struct { + const wchar_t *command; + Command handler; +} COMMANDS[] = { + { L"me", inputMe }, + { L"nick", inputNick }, + { L"quit", inputQuit }, +}; +static const size_t COMMANDS_LEN = sizeof(COMMANDS) / sizeof(COMMANDS[0]); + static void input(wchar_t *input) { if (input[0] != '/') { privmsg(false, input); return; } input++; - wchar_t *cmd = wcssep(&input, L" "); - if (!wcscmp(cmd, L"me")) { - privmsg(true, input ? input : L""); - } else { - uiFmt("/%ls isn't a recognized command", cmd); + wchar_t *command = wcssep(&input, L" "); + for (size_t i = 0; i < COMMANDS_LEN; ++i) { + if (wcscmp(command, COMMANDS[i].command)) continue; + COMMANDS[i].handler(input); + return; } + uiFmt("/%ls isn't a recognized command", command); } static void uiRead(void) { -- cgit 1.4.0 bin/wake.c?id=5f28ff1f506af5cd5af430077621a027d1468718&follow=1'>wake.c (unfollow)
Commit message (Expand)Author
2018-01-29Switch back to QWERTY on LinuxJune McEnroe
2018-01-29Take fbclock font in env varJune McEnroe
2018-01-29Support fbclock fonts wider than 8June McEnroe
2018-01-29Take font path on fbclock argvJune McEnroe
2018-01-29Add fbclockJune McEnroe
2018-01-29Remove color from MakefileJune McEnroe
2018-01-29Set t_Co = 8June McEnroe
2018-01-29Add :Q command aliasJune McEnroe
2018-01-29Add setuid target for briJune McEnroe
2018-01-28Add init function to fb interfaceJune McEnroe
2018-01-28Add color.cJune McEnroe