summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chat.h1
-rw-r--r--command.c34
2 files changed, 22 insertions, 13 deletions
diff --git a/chat.h b/chat.h
index 5b3c01c..9317843 100644
--- a/chat.h
+++ b/chat.h
@@ -123,6 +123,7 @@ void uiShow(void);
void uiHide(void);
void uiDraw(void);
void uiShowID(size_t id);
+void uiShowNum(size_t num);
void uiRead(void);
void uiWrite(size_t id, enum Heat heat, const time_t *time, const char *str);
void uiFormat(
diff --git a/command.c b/command.c
index 7fb98af..8471214 100644
--- a/command.c
+++ b/command.c
@@ -57,9 +57,16 @@ static void commandMe(size_t id, char *params) {
}
static void commandQuit(size_t id, char *params) {
+ (void)id;
set(&self.quit, (params ? params : "Goodbye"));
}
+static void commandWindow(size_t id, char *params) {
+ (void)id;
+ if (!params) return;
+ uiShowNum(strtoul(params, NULL, 10));
+}
+
static const struct Handler {
const char *cmd;
Command *fn;
@@ -68,6 +75,7 @@ static const struct Handler {
{ "/notice", commandNotice },
{ "/quit", commandQuit },
{ "/quote", commandQuote },
+ { "/window", commandWindow },
};
static int compar(const void *cmd, const void *_handler) {
@@ -97,21 +105,21 @@ const char *commandIsAction(size_t id, const char *input) {
}
void command(size_t id, char *input) {
- if (id == Debug) {
+ if (id == Debug && input[0] != '/') {
commandQuote(id, input);
- return;
- }
- if (commandIsPrivmsg(id, input)) {
+ } else if (commandIsPrivmsg(id, input)) {
commandPrivmsg(id, input);
- return;
- }
- char *cmd = strsep(&input, " ");
- const struct Handler *handler = bsearch(
- cmd, Commands, ARRAY_LEN(Commands), sizeof(*handler), compar
- );
- if (handler) {
- handler->fn(id, input);
+ } else if (input[0] == '/' && isdigit(input[1])) {
+ commandWindow(id, &input[1]);
} else {
- uiFormat(id, Hot, NULL, "No such command %s", cmd);
+ char *cmd = strsep(&input, " ");
+ const struct Handler *handler = bsearch(
+ cmd, Commands, ARRAY_LEN(Commands), sizeof(*handler), compar
+ );
+ if (handler) {
+ handler->fn(id, input);
+ } else {
+ uiFormat(id, Hot, NULL, "No such command %s", cmd);
+ }
}
}