[ekg2-commit] r3885 - in trunk: ekg plugins/ncurses plugins/readline: trunk/ekg/configfile.c trunk/ekg/stuff.c trunk/ekg/stuff.h trunk/plugins/ncurses/bindings.c trunk/plugins/ncurses/old.c trunk/plugins/readline/ui-readline.c

SVN commit svn w toxygen.net
Pon, 10 Mar 2008, 19:44:30 CET


Author: peres
Date: 2008-03-10 19:44:29 +0100 (Mon, 10 Mar 2008)
New Revision: 3885

Modified:
   trunk/ekg/configfile.c
   trunk/ekg/stuff.c
   trunk/ekg/stuff.h
   trunk/plugins/ncurses/bindings.c
   trunk/plugins/ncurses/old.c
   trunk/plugins/readline/ui-readline.c
Log:

Bindings.



Modified: trunk/ekg/configfile.c
===================================================================
--- trunk/ekg/configfile.c	2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/ekg/configfile.c	2008-03-10 18:44:29 UTC (rev 3885)
@@ -381,8 +381,6 @@
  */
 static void config_write_main(FILE *f)
 {
-	list_t l;
-
 	if (!f)
 		return;
 
@@ -414,20 +412,25 @@
 	        }
 	}
 
-	for (l = bindings; l; l = l->next) {
-		struct binding *b = l->data;
+	{
+		struct binding *b;
 
-		if (b->internal)
-			continue;
+		for (b = bindings; b; b = b->next) {
+			if (b->internal)
+				continue;
 
-		fprintf(f, "bind %s %s\n", b->key, b->action);
+			fprintf(f, "bind %s %s\n", b->key, b->action);
+		}
 	}
 
-        for (l = bindings_added; l; l = l->next) {
-                binding_added_t *d = l->data;
-                fprintf(f, "bind-set %s %s\n", d->binding->key, d->sequence);
-        }
+	{
+		binding_added_t *d;
 
+		for (d = bindings_added; d; d = d->next) {
+			fprintf(f, "bind-set %s %s\n", d->binding->key, d->sequence);
+		}
+	}
+
 	{
 		struct timer *t;
 

Modified: trunk/ekg/stuff.c
===================================================================
--- trunk/ekg/stuff.c	2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/ekg/stuff.c	2008-03-10 18:44:29 UTC (rev 3885)
@@ -85,7 +85,7 @@
 child_t *children = NULL;
 alias_t *aliases = NULL;
 list_t autofinds = NULL;
-list_t bindings = NULL;		/**< list_t struct timer <b>all</b> ekg2 timers */
+struct binding *bindings = NULL;	/**< list_t struct timer <b>all</b> ekg2 timers */
 struct timer *timers = NULL;
 list_t conferences = NULL;
 list_t newconferences = NULL;
@@ -96,7 +96,7 @@
 list_t buffer_debug;		/**< debug list_t struct buffer */
 list_t buffer_speech;		/**< speech list_t struct buffer */
 
-list_t bindings_added;
+binding_added_t *bindings_added;
 int old_stderr;
 char *config_subject_prefix;
 char *config_subject_reply_prefix;
@@ -395,15 +395,13 @@
  */
 void binding_list(int quiet, const char *name, int all) 
 {
-	list_t l;
+	struct binding *b;
 	int found = 0;
 
 	if (!bindings)
 		printq("bind_seq_list_empty");
 
-	for (l = bindings; l; l = l->next) {
-		struct binding *b = l->data;
-
+	for (b = bindings; b; b = b->next) {
 		if (name) {
 			if (xstrcasestr(b->key, name)) {
 				printq("bind_seq_list", b->key, b->action);
@@ -417,15 +415,25 @@
 	}
 
 	if (name && !found) {
-		for (l = bindings; l; l = l->next) {
-			struct binding *b = l->data;
-
+		for (b = bindings; b; b = b->next) {
 			if (xstrcasestr(b->action, name))
 				printq("bind_seq_list", b->key, b->action);
 		}
 	}
 }
 
+static LIST_FREE_ITEM(binding_free_item, struct binding *) {
+	xfree(data->key);
+	xfree(data->action);
+	xfree(data->arg);
+	xfree(data->default_action);
+	xfree(data->default_arg);
+}
+
+static LIST_FREE_ITEM(binding_added_free_item, binding_added_t *) {
+	xfree(data->sequence);
+}
+
 /**
  * binding_free()
  *
@@ -433,29 +441,13 @@
  */
 
 void binding_free() {
-	list_t l;
-
 	if (bindings) {
-		for (l = bindings; l; l = l->next) {
-			struct binding *b = l->data;
-
-			xfree(b->key);
-			xfree(b->action);
-			xfree(b->arg);
-			xfree(b->default_action);
-			xfree(b->default_arg);
-		}
-		list_destroy(bindings, 1);
+		LIST_DESTROY2(bindings, binding_free_item);
 		bindings = NULL;
 	}
 
 	if (bindings_added) {
-		for (l = bindings_added; l; l = l->next) {
-			binding_added_t *b = l->data;
-
-			xfree(b->sequence);
-		}
-		list_destroy(bindings_added, 1);
+		LIST_DESTROY2(bindings_added, binding_added_free_item);
 		bindings_added = NULL;
 	}
 }

Modified: trunk/ekg/stuff.h
===================================================================
--- trunk/ekg/stuff.h	2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/ekg/stuff.h	2008-03-10 18:44:29 UTC (rev 3885)
@@ -84,6 +84,8 @@
 #define BINDING_FUNCTION(x) void x(const char *arg) 
 
 struct binding {
+	struct binding	*next;
+
 	char		*key;
 
 	char		*action;			/* akcja */
@@ -96,7 +98,9 @@
 	char		*default_arg;			/* domyślny argument */
 };
 
-typedef struct {
+typedef struct binding_added {
+	struct binding_added	*next;
+
         char		*sequence;
         struct binding	*binding;
 } binding_added_t;
@@ -155,13 +159,13 @@
 extern child_t *children;
 extern alias_t *aliases;
 extern list_t autofinds;
-extern list_t bindings;
+extern struct binding *bindings;
 extern struct timer *timers;
 extern list_t conferences;
 extern list_t newconferences;
 extern list_t buffer_debug;
 extern list_t buffer_speech;
-extern list_t bindings_added;
+extern binding_added_t *bindings_added;
 
 extern time_t last_save;
 extern char *config_profile;

Modified: trunk/plugins/ncurses/bindings.c
===================================================================
--- trunk/plugins/ncurses/bindings.c	2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/plugins/ncurses/bindings.c	2008-03-10 18:44:29 UTC (rev 3885)
@@ -796,14 +796,14 @@
 		if (!xstrcasecmp(key + 4, ("Enter"))) {
 			b->key = xstrdup(("Alt-Enter"));
 			if (add)
-				ncurses_binding_map_meta[13] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+				ncurses_binding_map_meta[13] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
 			return 0;
 		}
 
 		if (!xstrcasecmp(key + 4, ("Backspace"))) {
 			b->key = xstrdup(("Alt-Backspace"));
 			if (add) {
-				ncurses_binding_map_meta[KEY_BACKSPACE] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+				ncurses_binding_map_meta[KEY_BACKSPACE] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
 				ncurses_binding_map_meta[127] = ncurses_binding_map_meta[KEY_BACKSPACE];
 			}
 			return 0;
@@ -817,7 +817,7 @@
 		b->key = saprintf(("Alt-%c"), ch);
 
 		if (add) {
-			ncurses_binding_map_meta[ch] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+			ncurses_binding_map_meta[ch] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
 			if (xisalpha(ch))
 				ncurses_binding_map_meta[xtolower(ch)] = ncurses_binding_map_meta[ch];
 		}
@@ -834,7 +834,7 @@
         if (!xstrcasecmp(key + 5, (x))) { \
                 b->key = xstrdup(key); \
                 if (add) { \
-                        ncurses_binding_map[y] = list_add(&bindings, xmemdup(b, sizeof(struct binding))); \
+                        ncurses_binding_map[y] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding))); \
                         if (z) \
                                 ncurses_binding_map[z] = ncurses_binding_map[y]; \
                 } \
@@ -856,7 +856,7 @@
 
 		if (add) {
                         if (xisalpha(ch))
-				ncurses_binding_map[ch - 64] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+				ncurses_binding_map[ch - 64] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
 			else
 				return -1;
 		}
@@ -873,7 +873,7 @@
 		b->key = saprintf(("F%d"), f);
 		
 		if (add)
-			ncurses_binding_map[KEY_F(f)] = list_add(&bindings, xmemdup(b, sizeof(struct binding)));
+			ncurses_binding_map[KEY_F(f)] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding)));
 		
 		return 0;
 	}
@@ -882,7 +882,7 @@
 	if (!xstrcasecmp(key, (x))) { \
 		b->key = xstrdup((x)); \
 		if (add) { \
-			ncurses_binding_map[y] = list_add(&bindings, xmemdup(b, sizeof(struct binding))); \
+			ncurses_binding_map[y] = LIST_ADD2(&bindings, xmemdup(b, sizeof(struct binding))); \
 			if (z) \
 				ncurses_binding_map[z] = ncurses_binding_map[y]; \
 		} \
@@ -915,15 +915,13 @@
  */
 void ncurses_binding_set(int quiet, const char *key, const char *sequence)
 {
-	list_t l;
+	struct binding *d;
 	binding_added_t *b;
 	struct binding *binding_orginal = NULL;
 	char *joined = NULL;
 	int count = 0;
 
-        for (l = bindings; l; l = l->next) {
-                struct binding *d = l->data;
-
+        for (d = bindings; d; d = d->next) {
                 if (!xstrcasecmp(key, d->key)) {
                         binding_orginal = d;
                         break;
@@ -950,20 +948,18 @@
 	} else
 		joined = xstrdup(sequence);
 
-	for (l = bindings_added; l; l = l->next) {
-		binding_added_t *d = l->data;
-
-		if (!xstrcasecmp(d->sequence, joined)) {
-			d->binding = binding_orginal;
+	for (b = bindings_added; b; b = b->next) {
+		if (!xstrcasecmp(b->sequence, joined)) {
+			b->binding = binding_orginal;
 			xfree(joined);
 			goto end;
 		}
 	}
-	b = xmalloc(sizeof(binding_added_t));
 
+	b = xmalloc(sizeof(binding_added_t));
 	b->sequence = joined;
 	b->binding = binding_orginal;
-	list_add(&bindings_added, b);
+	LIST_ADD2(&bindings_added, b);
 end:
 	if (!in_autoexec)
 		config_changed = 1;
@@ -984,8 +980,7 @@
  */
 void ncurses_binding_add(const char *key, const char *action, int internal, int quiet)
 {
-	struct binding b, *c = NULL;
-	list_t l;
+	struct binding b, *c = NULL, *d;
 	
 	if (!key || !action)
 		return;
@@ -994,9 +989,7 @@
 
 	b.internal = internal;
 	
-	for (l = bindings; l; l = l->next) {
-		struct binding *d = l->data;
-
+	for (d = bindings; d; d = d->next) {
 		if (!xstrcasecmp(key, d->key)) {
 			if (d->internal) {
 				c = d;
@@ -1049,13 +1042,12 @@
  */
 void ncurses_binding_delete(const char *key, int quiet)
 {
-	list_t l;
+	struct binding *b;
 
 	if (!key)
 		return;
 
-	for (l = bindings; l; l = l->next) {
-		struct binding *b = l->data;
+	for (b = bindings; b; b = b->next) {
 		int i;
 
 		if (!b->key || xstrcasecmp(key, b->key))
@@ -1084,7 +1076,7 @@
 
 			}
 
-			list_remove(&bindings, b, 1);
+			LIST_REMOVE2(&bindings, b, NULL);
 		}
 
 		config_changed = 1;

Modified: trunk/plugins/ncurses/old.c
===================================================================
--- trunk/plugins/ncurses/old.c	2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/plugins/ncurses/old.c	2008-03-10 18:44:29 UTC (rev 3885)
@@ -2387,7 +2387,7 @@
 	if (bindings_added && ch != KEY_MOUSE) {
 		char **chars = NULL, *joined;
 		int i = 0, count = 0, success = 0;
-		list_t l;
+		binding_added_t *d;
 		int c;
 		array_add(&chars, xstrdup(itoa(ch)));
 
@@ -2400,9 +2400,7 @@
 
 		joined = array_join(chars, (" "));
 
-		for (l = bindings_added; l; l = l->next) {
-			binding_added_t *d = l->data;
-
+		for (d = bindings_added; d; d = d->next) {
 			if (!xstrcasecmp(d->sequence, joined)) {
 				struct binding *b = d->binding;
 

Modified: trunk/plugins/readline/ui-readline.c
===================================================================
--- trunk/plugins/readline/ui-readline.c	2008-03-10 17:59:21 UTC (rev 3884)
+++ trunk/plugins/readline/ui-readline.c	2008-03-10 18:44:29 UTC (rev 3885)
@@ -524,14 +524,12 @@
  */
 char *bind_find_command(const char *seq)
 {
-	list_t l;
+	struct binding *s;
 
 	if (!seq)
 		return NULL;
 	
-	for (l = bindings; l; l = l->next) {
-		struct binding *s = l->data;
-
+	for (s = bindings; s; s = s->next) {
 		if (s->key && !xstrcasecmp(s->key, seq))
 			return s->action;
 	}
@@ -647,20 +645,18 @@
 		s->action = xstrdup(command);
 		s->internal = 0;
 
-		list_add(&bindings, s);
+		LIST_ADD2(&bindings, s);
 
 		if (!quiet) {
 			print("bind_seq_add", s->key);
 			config_changed = 1;
 		}
 	} else {
-		list_t l;
+		struct binding *s;
 
-		for (l = bindings; l; l = l->next) {
-			struct binding *s = l->data;
-
+		for (s = bindings; s; s = s->next) {
 			if (s->key && !xstrcasecmp(s->key, seq)) {
-				list_remove(&bindings, s, 1);
+				LIST_REMOVE2(&bindings, s, NULL);
 				if (!quiet) {
 					print("bind_seq_remove", seq);
 					config_changed = 1;



Więcej informacji o liście dyskusyjnej ekg2-commit