diff --git a/src/command.c b/src/command.c index 442e37b4..93eec545 100644 --- a/src/command.c +++ b/src/command.c @@ -51,8 +51,6 @@ struct cmd_t { }; static struct cmd_t * _cmd_get_command(const char * const command); -static gboolean _handle_command(const char * const command, - const char * const inp); static void _update_presence(const jabber_presence_t presence, const char * const show, const char * const inp); static gboolean @@ -81,7 +79,6 @@ static gboolean _cmd_online(const char * const inp, struct cmd_help_t help); static gboolean _cmd_dnd(const char * const inp, struct cmd_help_t help); static gboolean _cmd_chat(const char * const inp, struct cmd_help_t help); static gboolean _cmd_xa(const char * const inp, struct cmd_help_t help); -static gboolean _cmd_default(const char * const inp); /* * The commands are broken down into three groups: @@ -337,45 +334,6 @@ static struct cmd_t status_commands[] = static PAutocomplete commands_ac; -/* - * Take a line of input and process it, return TRUE if profanity is to - * continue, FALSE otherwise - */ -gboolean -process_input(char *inp) -{ - log_msg(PROF_LEVEL_DEBUG, PROF, "Input recieved: %s", inp); - gboolean result = FALSE; - g_strstrip(inp); - - // add line to history if something typed - if (strlen(inp) > 0) { - history_append(inp); - } - - // just carry on if no input - if (strlen(inp) == 0) { - result = TRUE; - - // habdle command if input starts with a '/' - } else if (inp[0] == '/') { - char inp_cpy[strlen(inp) + 1]; - strcpy(inp_cpy, inp); - char *command = strtok(inp_cpy, " "); - result = _handle_command(command, inp); - - // call a default handler if input didn't start with '/' - } else { - result = _cmd_default(inp); - } - - inp_clear(); - reset_search_attempts(); - win_page_off(); - - return result; -} - /* * Initialise command autocompleter and history */ @@ -455,47 +413,34 @@ cmd_get_status_help(void) return result; } -static struct cmd_t * -_cmd_get_command(const char * const command) -{ - unsigned int i; - for (i = 0; i < ARRAY_SIZE(main_commands); i++) { - struct cmd_t *pcmd = main_commands+i; - if (strcmp(pcmd->cmd, command) == 0) { - return pcmd; - } - } - - for (i = 0; i < ARRAY_SIZE(setting_commands); i++) { - struct cmd_t *pcmd = setting_commands+i; - if (strcmp(pcmd->cmd, command) == 0) { - return pcmd; - } - } - - for (i = 0; i < ARRAY_SIZE(status_commands); i++) { - struct cmd_t *pcmd = status_commands+i; - if (strcmp(pcmd->cmd, command) == 0) { - return pcmd; - } - } - - return NULL; -} - - -static gboolean -_handle_command(const char * const command, const char * const inp) +gboolean +cmd_execute(const char * const command, const char * const inp) { struct cmd_t *cmd = _cmd_get_command(command); if (cmd != NULL) { return (cmd->func(inp, cmd->help)); } else { - return _cmd_default(inp); + return cmd_execute_default(inp); } } +gboolean +cmd_execute_default(const char * const inp) +{ + if (win_in_chat()) { + char *recipient = win_get_recipient(); + jabber_send(inp, recipient); + win_show_outgoing_msg("me", recipient, inp); + free(recipient); + } else { + cons_bad_command(inp); + } + + return TRUE; +} + + static gboolean _cmd_connect(const char * const inp, struct cmd_help_t help) { @@ -783,21 +728,6 @@ _cmd_xa(const char * const inp, struct cmd_help_t help) return TRUE; } -static gboolean -_cmd_default(const char * const inp) -{ - if (win_in_chat()) { - char *recipient = win_get_recipient(); - jabber_send(inp, recipient); - win_show_outgoing_msg("me", recipient, inp); - free(recipient); - } else { - cons_bad_command(inp); - } - - return TRUE; -} - static void _update_presence(const jabber_presence_t presence, const char * const show, const char * const inp) @@ -867,3 +797,30 @@ _cmd_set_boolean_preference(const char * const inp, struct cmd_help_t help, return TRUE; } +static struct cmd_t * +_cmd_get_command(const char * const command) +{ + unsigned int i; + for (i = 0; i < ARRAY_SIZE(main_commands); i++) { + struct cmd_t *pcmd = main_commands+i; + if (strcmp(pcmd->cmd, command) == 0) { + return pcmd; + } + } + + for (i = 0; i < ARRAY_SIZE(setting_commands); i++) { + struct cmd_t *pcmd = setting_commands+i; + if (strcmp(pcmd->cmd, command) == 0) { + return pcmd; + } + } + + for (i = 0; i < ARRAY_SIZE(status_commands); i++) { + struct cmd_t *pcmd = status_commands+i; + if (strcmp(pcmd->cmd, command) == 0) { + return pcmd; + } + } + + return NULL; +} diff --git a/src/command.h b/src/command.h index 5967a053..7c5c6eb3 100644 --- a/src/command.h +++ b/src/command.h @@ -31,9 +31,10 @@ struct cmd_help_t { }; void cmd_init(void); -gboolean process_input(char *inp); char * cmd_complete(char *inp); void cmd_reset_completer(void); +gboolean cmd_execute(const char * const command, const char * const inp); +gboolean cmd_execute_default(const char * const inp); // command help GSList * cmd_get_basic_help(void); diff --git a/src/profanity.c b/src/profanity.c index 9834ef74..5663454e 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -30,6 +30,7 @@ #include "profanity.h" #include "log.h" #include "chat_log.h" +#include "history.h" #include "ui.h" #include "jabber.h" #include "command.h" @@ -38,6 +39,7 @@ #include "tinyurl.h" static log_level_t _get_log_level(char *log_level); +gboolean _process_input(char *inp); static void _profanity_shutdown(void); void @@ -67,7 +69,7 @@ profanity_run(void) } inp[size++] = '\0'; - cmd_result = process_input(inp); + cmd_result = _process_input(inp); } } @@ -113,3 +115,42 @@ _get_log_level(char *log_level) return PROF_LEVEL_ERROR; } } + +/* + * Take a line of input and process it, return TRUE if profanity is to + * continue, FALSE otherwise + */ +gboolean +_process_input(char *inp) +{ + log_msg(PROF_LEVEL_DEBUG, PROF, "Input recieved: %s", inp); + gboolean result = FALSE; + g_strstrip(inp); + + // add line to history if something typed + if (strlen(inp) > 0) { + history_append(inp); + } + + // just carry on if no input + if (strlen(inp) == 0) { + result = TRUE; + + // habdle command if input starts with a '/' + } else if (inp[0] == '/') { + char inp_cpy[strlen(inp) + 1]; + strcpy(inp_cpy, inp); + char *command = strtok(inp_cpy, " "); + result = cmd_execute(command, inp); + + // call a default handler if input didn't start with '/' + } else { + result = cmd_execute_default(inp); + } + + inp_clear(); + reset_search_attempts(); + win_page_off(); + + return result; +}