From 038e61197479865d15cb6ef686e80e47bf2fd843 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 5 Apr 2003 17:22:35 +0000 Subject: [PATCH] better error msgs --- plugins/keyboard/keyparse.c | 4 +- plugins/mouse/mouseparse.c | 126 ++++++++++++++++++++++++++++++++++++ plugins/mouse/mouseparse.h | 8 +++ 3 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 plugins/mouse/mouseparse.c create mode 100644 plugins/mouse/mouseparse.h diff --git a/plugins/keyboard/keyparse.c b/plugins/keyboard/keyparse.c index 15f6e0c5..ba283dd8 100644 --- a/plugins/keyboard/keyparse.c +++ b/plugins/keyboard/keyparse.c @@ -21,7 +21,7 @@ void keyparse(ParseToken *token) top = token->data.identifier; return; } else { - yyerror("syntax error (expected Key)"); + yyerror("syntax error (expected kbind)"); err = TRUE; } } else if (chain == NULL) { @@ -95,7 +95,7 @@ void keyparse(ParseToken *token) if (kbind(strchain, action)) action = NULL; /* don't free this if kbind succeeds */ else - yyerror("failed to add binding"); + yyerror("failed to add key binding"); /* free the char*'s */ g_list_free(strchain); diff --git a/plugins/mouse/mouseparse.c b/plugins/mouse/mouseparse.c new file mode 100644 index 00000000..d2039dd8 --- /dev/null +++ b/plugins/mouse/mouseparse.c @@ -0,0 +1,126 @@ +#include "kernel/action.h" +#include "kernel/parse.h" +#include "mouse.h" + +void mouseparse(ParseToken *token) +{ + static char *top = NULL; + static char *context = NULL, *button = NULL; + static char *arg_str = NULL; + static int arg_int = 0; + static MouseAction event = -1; + static Action *action = NULL; + static gboolean err = FALSE; + + if (err) { + if (token->type == TOKEN_NEWLINE) + err = FALSE; + /* just fall through and free the token */ + } else if (top == NULL) { + if (token->type == TOKEN_IDENTIFIER && + !g_ascii_strcasecmp("mbind", token->data.identifier)) { + top = token->data.identifier; + return; + } else { + yyerror("syntax error (expected mbind)"); + err = TRUE; + } + } else if (context == NULL) { + if (token->type == TOKEN_IDENTIFIER) { + context = token->data.identifier; + return; + } else { + yyerror("syntax error (expected Key)"); + err = TRUE; + } + } else if (event == (unsigned) -1) { + if (token->type == TOKEN_IDENTIFIER) { + if (!g_ascii_strcasecmp("press", token->data.identifier)) + event = MouseAction_Press; + else if (!g_ascii_strcasecmp("release", token->data.identifier)) + event = MouseAction_Release; + else if (!g_ascii_strcasecmp("click", token->data.identifier)) + event = MouseAction_Click; + else if (!g_ascii_strcasecmp("doubleclick",token->data.identifier)) + event = MouseAction_DClick; + else if (!g_ascii_strcasecmp("drag", token->data.identifier)) + event = MouseAction_Motion; + if (event != (unsigned) -1) + return; + else { + yyerror("invalid event"); + err = TRUE; + } + } else { + yyerror("syntax error (expected event)"); + err = TRUE; + } + } else if (button == NULL) { + if (token->type == TOKEN_IDENTIFIER) { + button = token->data.identifier; + return; + } else { + yyerror("syntax error (expected button)"); + err = TRUE; + } + } else if (action == NULL) { + if (token->type == TOKEN_IDENTIFIER) { + action = action_from_string(token->data.identifier); + + /* check for valid actions for motion events */ + if ((event == MouseAction_Motion) ^ + (action && + (action->func == action_move || + action->func == action_resize))) { + action_free(action); + action = NULL; + } + + if (action != NULL) { + return; + } else { + yyerror("invalid action"); + err = TRUE; + } + } else { + yyerror("syntax error (expected action)"); + err = TRUE; + } + } else if (token->type == TOKEN_STRING) { + arg_str = token->data.string; + return; + } else if (token->type == TOKEN_INTEGER) { + arg_int = token->data.integer; + return; + } else if (token->type != TOKEN_NEWLINE) { + yyerror("syntax error (unexpected trailing token)"); + } else { + + /* these use the argument */ + if (action->func == action_execute || action->func == action_restart) + action->data.execute.path = g_strdup(arg_str); + if ((action->func == action_desktop || + action->func == action_send_to_desktop) && + arg_int) + action->data.desktop.desk = (unsigned) arg_int - 1; + if (action->func == action_move_relative_horz || + action->func == action_move_relative_vert || + action->func == action_resize_relative_horz || + action->func == action_resize_relative_vert) + action->data.relative.delta = arg_int; + + if (mbind(button, context, event, action)) + action = NULL; /* don't free this if mbind succeeds */ + else + yyerror("failed to add mouse binding"); + } + + g_free(top); top = NULL; + g_free(context); context = NULL; + g_free(button); button = NULL; + g_free(arg_str); arg_str = NULL; + arg_int = 0; + event = -1; + action_free(action); action = NULL; + parse_free_token(token); +} diff --git a/plugins/mouse/mouseparse.h b/plugins/mouse/mouseparse.h new file mode 100644 index 00000000..0d28d59b --- /dev/null +++ b/plugins/mouse/mouseparse.h @@ -0,0 +1,8 @@ +#ifndef __plugins_mouse_mouseparse_h +#define __plugins_mouse_mouseparse_h + +#include "kernel/parse.h" + +void mouseparse(ParseToken *token); + +#endif -- 2.45.2