diff options
author | Harry Jeffery <harry@exec64.co.uk> | 2017-04-12 22:16:41 +0100 |
---|---|---|
committer | Harry Jeffery <harry@exec64.co.uk> | 2017-04-12 23:10:58 +0100 |
commit | ad33be42c0192a491cce10c1771ed8e2ac1d0196 (patch) | |
tree | 9c718d1dc2d23ae4a5e537ab684bf703e59818b7 /src | |
parent | 1ce11b6307b1c0cc1ab75547fcb5ea63daf72bfe (diff) | |
download | imv-ad33be42c0192a491cce10c1771ed8e2ac1d0196.tar.gz |
Add basic command system
Diffstat (limited to 'src')
-rw-r--r-- | src/commands.c | 64 | ||||
-rw-r--r-- | src/commands.h | 26 |
2 files changed, 90 insertions, 0 deletions
diff --git a/src/commands.c b/src/commands.c new file mode 100644 index 0000000..9b93933 --- /dev/null +++ b/src/commands.c @@ -0,0 +1,64 @@ +/* Copyright (c) 2017 imv authors + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include "commands.h" +#include "list.h" + +struct imv_command { + const char* command; + void (*handler)(struct imv_list *args); +}; + +struct imv_list *g_commands = NULL; + +void imv_command_register(const char *command, void (*handler)()) +{ + if(!g_commands) { + g_commands = imv_list_create(); + } + + struct imv_command *cmd = malloc(sizeof(struct imv_command)); + cmd->command = strdup(command); + cmd->handler = handler; + imv_list_append(g_commands, cmd); +} + +int imv_command_exec(const char *command) +{ + if(!g_commands) { + return 1; + } + + struct imv_list *args = imv_split_string(command, ' '); + int ret = 1; + + if(args->len > 0) { + for(size_t i = 0; i < g_commands->len; ++i) { + struct imv_command *cmd = g_commands->items[i]; + if(!strcmp(cmd->command, args->items[0])) { + cmd->handler(args); + ret = 0; + break; + } + } + } + + imv_list_deep_free(args); + return ret; +} + +/* vim:set ts=2 sts=2 sw=2 et: */ diff --git a/src/commands.h b/src/commands.h new file mode 100644 index 0000000..1dfa3bf --- /dev/null +++ b/src/commands.h @@ -0,0 +1,26 @@ +/* Copyright (c) 2017 imv authors + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef COMMANDS_H +#define COMMANDS_H + +void imv_command_register(const char *command, void (*handler)()); +int imv_command_exec(const char *command); + +#endif + +/* vim:set ts=2 sts=2 sw=2 et: */ |