[geany/geany-plugins] a1bd3e: scope - GArray parse_modes, recent_programs, thread_groups -> ScpTreeStore
Dimitar Zhekov
git-noreply at xxxxx
Mon May 6 13:56:18 UTC 2013
Branch: refs/heads/master
Author: Dimitar Zhekov <dimitar.zhekov at gmail.com>
Committer: Dimitar Zhekov <dimitar.zhekov at gmail.com>
Date: Mon, 06 May 2013 13:56:18 UTC
Commit: a1bd3e69b8151606e0c5acaaae3d1643ab80db88
https://github.com/geany/geany-plugins/commit/a1bd3e69b8151606e0c5acaaae3d1643ab80db88
Log Message:
-----------
scope - GArray parse_modes, recent_programs, thread_groups -> ScpTreeStore
Modified Paths:
--------------
scope/ChangeLog
scope/data/scope.glade
scope/src/break.c
scope/src/gtk216.c
scope/src/gtk216.h
scope/src/inspect.c
scope/src/local.c
scope/src/memory.c
scope/src/menu.c
scope/src/parse.c
scope/src/parse.h
scope/src/program.c
scope/src/scope.c
scope/src/stack.c
scope/src/thread.c
scope/src/tooltip.c
scope/src/utils.c
scope/src/utils.h
scope/src/watch.c
Modified: scope/ChangeLog
14 files changed, 13 insertions(+), 1 deletions(-)
===================================================================
@@ -1,3 +1,15 @@
+2013-05-04 Dimitar Zhekov <dimitar.zhekov at gmail.com>
+
+ * data/scope.glade, src/break.c, src/gtk216.c, src/gtk216.h,
+ src/inspect.c, src/local.c, src/memory.c, src/menu.c, src/parse.c,
+ src/parse.h, src/program.c, src/scope.c, src/stack.c, src/thread.c,
+ src/tooltip.c, src/utils.c, src/utils.h, src/watch.c:
+ GArray parse_modes -> ScpTreeStore.
+ GArray recent_programs -> ScpTreeStore.
+ Removed get array element size emulation.
+ Removed all array utility functions.
+
+
2013-05-02 Dimitar Zhekov <dimitar.zhekov at gmail.com>
* data/scope.glade, src/thread.c:
@@ -46,7 +58,7 @@
2013-03-07 Dimitar Zhekov <dimitar.zhekov at gmail.com>
* src/gtk216.c:
- Fixed a bug in array size emulation
+ Fixed a bug in array size emulation.
2013-02-21 Dimitar Zhekov <dimitar.zhekov at gmail.com>
Modified: scope/data/scope.glade
22 files changed, 22 insertions(+), 0 deletions(-)
===================================================================
@@ -1227,6 +1227,28 @@
</object>
</child>
</object>
+ <object class="ScpTreeStore" id="recent_program_store">
+ <property name="sublevels">False</property>
+ <columns>
+ <!-- column-name recent_program_store_name -->
+ <column type="gchararray" utf8_collate="false"/>
+ <!-- column-name recent_program_store_id -->
+ <column type="gint"/>
+ </columns>
+ </object>
+ <object class="ScpTreeStore" id="parse_mode_store">
+ <property name="sublevels">False</property>
+ <columns>
+ <!-- column-name parse_mode_store_hbit -->
+ <column type="gint"/>
+ <!-- column-name parse_mode_store_member -->
+ <column type="gint"/>
+ <!-- column-name parse_mode_store_entry -->
+ <column type="gboolean"/>
+ <!-- column-name parse_mode_store_name -->
+ <column type="gchararray" utf8_collate="false"/>
+ </columns>
+ </object>
<object class="ScpTreeStore" id="thread_group_store">
<property name="sublevels">False</property>
<columns>
Modified: scope/src/break.c
10 files changed, 5 insertions(+), 5 deletions(-)
===================================================================
@@ -424,7 +424,7 @@ static void break_node_parse(const ParseNode *node, BreakData *bd)
append_script_command(script, string);
else
{
- array_foreach((GArray *) script->value,
+ parse_foreach((GArray *) script->value,
(GFunc) append_script_command, string);
}
@@ -485,7 +485,7 @@ void on_break_inserted(GArray *nodes)
bd.stage = BG_DISCARD;
}
- array_foreach(nodes, (GFunc) break_node_parse, &bd);
+ parse_foreach(nodes, (GFunc) break_node_parse, &bd);
}
static void break_apply(GtkTreeIter *iter, gboolean thread)
@@ -669,7 +669,7 @@ void on_break_list(GArray *nodes)
store_foreach(store, (GFunc) break_iter_missing, NULL);
bd.stage = BG_DISCARD;
- array_foreach(nodes, (GFunc) break_node_parse, &bd);
+ parse_foreach(nodes, (GFunc) break_node_parse, &bd);
if (refresh)
breaks_missing();
@@ -710,7 +710,7 @@ void on_break_created(GArray *nodes)
{
BreakData bd;
bd.stage = BG_DISCARD;
- array_foreach(nodes, (GFunc) break_node_parse, &bd);
+ parse_foreach(nodes, (GFunc) break_node_parse, &bd);
}
break_async = TRUE;
@@ -730,7 +730,7 @@ static void break_feature_node_check(const ParseNode *node, G_GNUC_UNUSED gpoint
void on_break_features(GArray *nodes)
{
- array_foreach(parse_lead_array(nodes), (GFunc) break_feature_node_check, NULL);
+ parse_foreach(parse_lead_array(nodes), (GFunc) break_feature_node_check, NULL);
}
static void break_delete(GtkTreeIter *iter)
Modified: scope/src/gtk216.c
59 files changed, 0 insertions(+), 59 deletions(-)
===================================================================
@@ -19,54 +19,6 @@
#include "common.h"
-#if !GLIB_CHECK_VERSION(2, 22, 0)
-/* :-( */
-typedef struct _ArraySize
-{
- GArray *array;
- guint element_size;
-} ArraySize;
-
-GArray *array_sizes;
-
-static ArraySize *find_array_size(GArray *array)
-{
- gchar *end = array_sizes->data + sizeof(ArraySize) * array_sizes->len;
- gchar *data;
-
- for (data = array_sizes->data; data < end; data += sizeof(ArraySize))
- if (*(GArray **) data == array)
- return (ArraySize *) data;
-
- return NULL;
-}
-
-#undef g_array_sized_new
-GArray *scope_array_sized_new(gboolean zero_terminated, gboolean clear, guint element_size,
- guint reserved_size)
-{
- GArray *array = g_array_sized_new(zero_terminated, clear, element_size, reserved_size);
- ArraySize array_size = { array, element_size };
-
- g_array_append_val(array_sizes, array_size);
- return array;
-}
-
-guint scope_array_get_element_size(GArray *array)
-{
- return find_array_size(array)->element_size;
-}
-
-#undef g_array_free
-gchar *scope_array_free(GArray *array, gboolean free_segment)
-{
- g_array_remove_index(array_sizes,
- find_array_size(array) - (ArraySize *) array_sizes->data);
-
- return g_array_free(array, free_segment);
-}
-#endif /* GLIB 2.22.0 */
-
#if !GTK_CHECK_VERSION(2, 18, 0)
void gtk_widget_set_visible(GtkWidget *widget, gboolean visible)
{
@@ -123,15 +75,4 @@ void gtk216_init(void)
for (scd = sort_column_ids; scd->id; scd++)
gtk_tree_view_column_set_sort_column_id(get_column(scd->id), scd->sort_column_id);
-
-#if !GLIB_CHECK_VERSION(2, 22, 0)
- array_sizes = g_array_sized_new(FALSE, FALSE, sizeof(ArraySize), 0x10);
-#endif
-}
-
-void gtk216_finalize(void)
-{
-#if !GLIB_CHECK_VERSION(2, 22, 0)
- g_array_free(array_sizes, TRUE);
-#endif
}
Modified: scope/src/gtk216.h
13 files changed, 0 insertions(+), 13 deletions(-)
===================================================================
@@ -19,19 +19,6 @@
#ifndef GTK216_H
-#if !GLIB_CHECK_VERSION(2, 22, 0)
-GArray *scope_array_sized_new(gboolean zero_terminated, gboolean clear, guint element_size,
- guint reserved_size);
-#define g_array_sized_new(zero_terminated, clear, element_size, reserved_size) \
- scope_array_sized_new((zero_terminated), (clear), (element_size), (reserved_size))
-#define g_array_new(zero_terminated, clear, elt_size) \
- g_array_sized_new((zero_terminated), (clear), (elt_size), 0)
-guint scope_array_get_element_size(GArray *array);
-#define g_array_get_element_size(array) scope_array_get_element_size(array)
-gchar *scope_array_free(GArray *array, gboolean free_segment);
-#define g_array_free(array, free_segment) scope_array_free((array), (free_segment))
-#endif /* GLIB 2.22.0 */
-
#if !GTK_CHECK_VERSION(2, 18, 0)
#define gtk_widget_get_visible(widget) GTK_WIDGET_VISIBLE(widget)
#define gtk_widget_get_sensitive(widget) GTK_WIDGET_SENSITIVE(widget)
Modified: scope/src/inspect.c
12 files changed, 6 insertions(+), 6 deletions(-)
===================================================================
@@ -351,7 +351,7 @@ void on_inspect_children(GArray *nodes)
scp_tree_store_get(store, &iter, INSPECT_VAR1, &var1,
INSPECT_NUMCHILD, &numchild, -1);
- array_foreach(nodes, (GFunc) inspect_node_append, &iter);
+ parse_foreach(nodes, (GFunc) inspect_node_append, &iter);
end = from + nodes->len;
if (nodes->len && (from || end < numchild))
@@ -453,7 +453,7 @@ static void inspect_node_change(const ParseNode *node, G_GNUC_UNUSED gpointer gd
void on_inspect_changelist(GArray *nodes)
{
- array_foreach(parse_lead_array(nodes), (GFunc) inspect_node_change, NULL);
+ parse_foreach(parse_lead_array(nodes), (GFunc) inspect_node_change, NULL);
}
static void inspect_apply(GtkTreeIter *iter)
@@ -593,11 +593,11 @@ void inspect_add(const gchar *text)
{
GtkTreeIter iter;
const gchar *expr = gtk_entry_get_text(inspect_expr);
- const ParseMode *pm = parse_mode_find(expr);
- scp_tree_store_append_with_values(store, &iter, NULL, INSPECT_HB_MODE, pm->hb_mode,
- INSPECT_SCID, ++scid_gen, INSPECT_FORMAT, FORMAT_NATURAL, INSPECT_COUNT,
- option_inspect_count, INSPECT_EXPAND, option_inspect_expand, -1);
+ scp_tree_store_append_with_values(store, &iter, NULL, INSPECT_HB_MODE,
+ parse_mode_get(expr, MODE_HBIT), INSPECT_SCID, ++scid_gen, INSPECT_FORMAT,
+ FORMAT_NATURAL, INSPECT_COUNT, option_inspect_count, INSPECT_EXPAND,
+ option_inspect_expand, -1);
inspect_dialog_store(&iter);
utils_tree_set_cursor(selection, &iter, -1);
Modified: scope/src/local.c
2 files changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -95,7 +95,7 @@ void on_local_variables(GArray *nodes)
gtk_tree_model_get((GtkTreeModel *) store, &iter, LOCAL_NAME, &ld.name, -1);
locals_clear();
- array_foreach(parse_lead_array(nodes), (GFunc) local_node_variable, &ld);
+ parse_foreach(parse_lead_array(nodes), (GFunc) local_node_variable, &ld);
g_free(ld.name);
}
}
Modified: scope/src/memory.c
12 files changed, 6 insertions(+), 6 deletions(-)
===================================================================
@@ -243,7 +243,7 @@ void on_memory_read_bytes(GArray *nodes)
gtk_tree_view_column_queue_resize(get_column("memory_ascii_column"));
}
- array_foreach(parse_lead_array(nodes), (GFunc) memory_node_read,
+ parse_foreach(parse_lead_array(nodes), (GFunc) memory_node_read,
GINT_TO_POINTER(TRUE));
if (addr)
@@ -345,11 +345,11 @@ static void on_memory_group_update(const MenuItem *menu_item)
static MenuItem memory_menu_items[] =
{
- { "memory_refresh", on_memory_refresh, DS_FRESHABLE, NULL, NULL },
- { "memory_read", on_memory_read, DS_SENDABLE, NULL, NULL },
- { "memory_copy", on_memory_copy, DS_COPYABLE, NULL, NULL },
- { "memory_clear", on_memory_clear, DS_CLEARABLE, NULL, NULL },
- { "memory_group", on_memory_group_display, DS_SENDABLE, NULL, NULL },
+ { "memory_refresh", on_memory_refresh, DS_FRESHABLE, NULL, NULL },
+ { "memory_read", on_memory_read, DS_SENDABLE, NULL, NULL },
+ { "memory_copy", on_memory_copy, DS_COPYABLE, NULL, NULL },
+ { "memory_clear", on_memory_clear, DS_CLEARABLE, NULL, NULL },
+ { "memory_group", on_memory_group_display, DS_SENDABLE, NULL, NULL },
GROUP_ITEM("1", 0),
GROUP_ITEM("2", 1),
GROUP_ITEM("4", 2),
Modified: scope/src/menu.c
3 files changed, 1 insertions(+), 2 deletions(-)
===================================================================
@@ -412,11 +412,10 @@ void on_menu_evaluate_value(GArray *nodes)
{
if (atoi(parse_grab_token(nodes)) == scid_gen && !gtk_widget_get_visible(modify_dialog))
{
- const ParseMode *pm = parse_mode_find(input);
gchar *expr = utils_get_utf8_from_locale(input);
menu_evaluate_modify(expr, parse_lead_value(nodes), "Evaluate/Modify",
- pm->hb_mode, eval_mr_mode, NULL);
+ parse_mode_get(input, MODE_HBIT), eval_mr_mode, NULL);
g_free(expr);
}
}
Modified: scope/src/parse.c
166 files changed, 85 insertions(+), 81 deletions(-)
===================================================================
@@ -23,6 +23,24 @@
#include "common.h"
+static void parse_node_free(ParseNode *node, G_GNUC_UNUSED gpointer gdata)
+{
+ if (node->type == PT_ARRAY)
+ {
+ parse_foreach((GArray *) node->value, (GFunc) parse_node_free, NULL);
+ g_array_free((GArray *) node->value, TRUE);
+ }
+}
+
+void parse_foreach(GArray *nodes, GFunc func, gpointer gdata)
+{
+ const ParseNode *node = (const ParseNode *) nodes->data;
+ const ParseNode *end = node + nodes->len;
+
+ for (; node < end; node++)
+ func((gpointer) node, gdata);
+}
+
static void target_feature_node_check(const ParseNode *node, G_GNUC_UNUSED gpointer gdata)
{
if (!strcmp((const char *) node->value, "async"))
@@ -32,7 +50,7 @@ static void target_feature_node_check(const ParseNode *node, G_GNUC_UNUSED gpoin
static void on_target_features(GArray *nodes)
{
pref_gdb_async_mode = FALSE;
- array_foreach(parse_lead_array(nodes), (GFunc) target_feature_node_check, NULL);
+ parse_foreach(parse_lead_array(nodes), (GFunc) target_feature_node_check, NULL);
}
static void on_quiet_error(G_GNUC_UNUSED GArray *nodes)
@@ -109,21 +127,6 @@ static void on_data_modified(G_GNUC_UNUSED GArray *nodes)
{ NULL, NULL, '\0', '\0', 0 }
};
-static void parse_array_append(GArray *nodes, const char *name, ParseNodeType type, void *value)
-{
- ParseNode *node = (ParseNode *) array_append(nodes);
-
- node->name = name;
- node->type = type;
- node->value = value;
-}
-
-static void parse_node_free(ParseNode *node)
-{
- if (node->type == PT_ARRAY)
- array_free((GArray *) node->value, (GFreeFunc) parse_node_free);
-}
-
static char *parse_error(const char *text)
{
dc_error("%s", text);
@@ -189,7 +192,8 @@ static char *parse_text(GArray *nodes, char *text, char end, char newline)
if (!text && !newline)
{
- array_clear(nodes, (GFreeFunc) parse_node_free);
+ parse_foreach(nodes, (GFunc) parse_node_free, NULL);
+ g_array_set_size(nodes, 0);
return NULL;
}
}
@@ -203,7 +207,7 @@ static char *parse_text(GArray *nodes, char *text, char end, char newline)
if (!brace && *text != '[')
return parse_error("\" { or [ expected");
- array = array_new(ParseNode, 0x10);
+ array = g_array_new(FALSE, FALSE, sizeof(ParseNode));
node.type = PT_ARRAY;
node.value = array;
@@ -235,7 +239,7 @@ void parse_message(char *message, const char *token)
if (route->callback)
{
- GArray *nodes = array_new(ParseNode, 0x10);
+ GArray *nodes = g_array_new(FALSE, FALSE, sizeof(ParseNode));
const char *comma = strchr(route->prefix, ',');
if (comma)
@@ -244,12 +248,16 @@ void parse_message(char *message, const char *token)
iff (nodes->len >= route->args, "missing argument(s)")
{
if (token)
- parse_array_append(nodes, "=token", PT_VALUE, (char *) token + 1);
+ {
+ ParseNode node = { "=token", PT_VALUE, (char *) token + 1 };
+ g_array_append_val(nodes, node);
+ }
route->callback(nodes);
}
- array_free(nodes, (GFreeFunc) parse_node_free);
+ parse_foreach(nodes, (GFunc) parse_node_free, NULL);
+ g_array_free(nodes, TRUE);
}
}
@@ -379,7 +387,14 @@ gchar *parse_get_display_from_7bit(const char *text, gint hb_mode, gint mr_mode)
const ParseNode *parse_find_node(GArray *nodes, const char *name)
{
- return (const ParseNode *) array_find(nodes, name, FALSE);
+ const ParseNode *node = (const ParseNode *) nodes->data;
+ const ParseNode *end = node + nodes->len;
+
+ for (; node < end; node++)
+ if (!strcmp(node->name, name))
+ return node;
+
+ return NULL;
}
const void *parse_find_node_type(GArray *nodes, const char *name, ParseNodeType type)
@@ -403,13 +418,13 @@ const char *parse_grab_token(GArray *nodes)
if (node)
{
token = (const char *) node->value;
- array_remove(nodes, node);
+ g_array_remove_index(nodes, node - (const ParseNode *) nodes->data);
}
return token;
}
-gchar *parse_find_error(GArray *nodes)
+gchar *parse_get_error(GArray *nodes)
{
gchar *error = parse_find_value(nodes, "msg");
return error && *error ? utils_get_utf8_from_locale(error) :
@@ -431,7 +446,7 @@ static gboolean errors_show(G_GNUC_UNUSED gpointer gdata)
void on_error(GArray *nodes)
{
- gchar *error = parse_find_error(nodes);
+ gchar *error = parse_get_error(nodes);
if (errors_id)
g_string_append_c(errors, '\n');
@@ -478,12 +493,8 @@ void parse_location(GArray *nodes, ParseLocation *loc)
loc->line = 0;
}
-static GArray *parse_modes;
-
-static void parse_mode_free(ParseMode *pm)
-{
- g_free(pm->name);
-}
+static ScpTreeStore *parse_modes;
+enum { MODE_NAME = MODE_ENTRY + 1 };
static gboolean parse_mode_load(GKeyFile *config, const char *section)
{
@@ -491,33 +502,38 @@ static gboolean parse_mode_load(GKeyFile *config, const char *section)
gint hb_mode = utils_get_setting_integer(config, section, "hbit", HB_DEFAULT);
gint mr_mode = utils_get_setting_integer(config, section, "member", MR_DEFAULT);
gboolean entry = utils_get_setting_boolean(config, section, "entry", TRUE);
+ gboolean valid = FALSE;
if (name && (unsigned) hb_mode < HB_COUNT && (unsigned) mr_mode < MR_MODIFY)
{
- ParseMode *pm = (ParseMode *) array_append(parse_modes);
-
- pm->name = name;
- pm->hb_mode = hb_mode;
- pm->mr_mode = mr_mode;
- pm->entry = entry;
- return TRUE;
+ scp_tree_store_append_with_values(parse_modes, NULL, NULL, MODE_NAME, name,
+ MODE_HBIT, hb_mode, MODE_MEMBER, mr_mode, MODE_ENTRY, entry, -1);
+ valid = TRUE;
}
g_free(name);
- return FALSE;
+ return valid;
}
-static gboolean parse_mode_save(GKeyFile *config, const char *section, ParseMode *pm)
+static gboolean parse_mode_save(GKeyFile *config, const char *section, GtkTreeIter *iter)
{
- g_key_file_set_string(config, section, "name", pm->name);
- g_key_file_set_integer(config, section, "hbit", pm->hb_mode);
- g_key_file_set_integer(config, section, "member", pm->mr_mode);
- g_key_file_set_boolean(config, section, "entry", pm->entry);
+ const char *name;
+ gint hb_mode, mr_mode;
+ gboolean entry;
+
+ scp_tree_store_get(parse_modes, iter, MODE_NAME, &name, MODE_HBIT, &hb_mode,
+ MODE_MEMBER, &mr_mode, MODE_ENTRY, &entry, -1);
+
+ if (hb_mode == HB_DEFAULT && mr_mode == MR_DEFAULT && entry)
+ return FALSE;
+
+ g_key_file_set_string(config, section, "name", name);
+ g_key_file_set_integer(config, section, "hbit", hb_mode);
+ g_key_file_set_integer(config, section, "member", mr_mode);
+ g_key_file_set_boolean(config, section, "entry", entry);
return TRUE;
}
-static ParseMode parse_mode_default = { NULL, HB_DEFAULT, MR_DEFAULT, TRUE };
-
char *parse_mode_reentry(const char *name)
{
return g_str_has_suffix(name, "@entry") ? g_strndup(name, strlen(name) - 6) :
@@ -529,42 +545,34 @@ static char *parse_mode_pm_name(const char *name)
return g_strndup(name, strlen(name) - (g_str_has_suffix(name, "@entry") ? 6 : 0));
}
-const ParseMode *parse_mode_find(const char *name)
+gint parse_mode_get(const char *name, gint mode)
{
char *pm_name = parse_mode_pm_name(name);
- ParseMode *pm = (ParseMode *) array_find(parse_modes, pm_name, FALSE);
+ GtkTreeIter iter;
+ gint value;
+
+ if (store_find(parse_modes, &iter, MODE_NAME, pm_name))
+ scp_tree_store_get(parse_modes, &iter, mode, &value, -1);
+ else
+ value = mode == MODE_HBIT ? HB_DEFAULT : mode == MODE_MEMBER ? MR_DEFAULT : TRUE;
+
g_free(pm_name);
- return pm ? pm : &parse_mode_default;
+ return value;
}
void parse_mode_update(const char *name, gint mode, gint value)
{
char *pm_name = parse_mode_pm_name(name);
- ParseMode *pm = (ParseMode *) array_find(parse_modes, pm_name, FALSE);
+ GtkTreeIter iter;
- if (!pm)
+ if (!store_find(parse_modes, &iter, MODE_NAME, name))
{
- pm = (ParseMode *) array_append(parse_modes);
- pm->name = g_strdup(pm_name);
- pm->hb_mode = HB_DEFAULT;
- pm->mr_mode = MR_DEFAULT;
- pm->entry = TRUE;
+ scp_tree_store_append_with_values(parse_modes, &iter, NULL, MODE_NAME, pm_name,
+ MODE_HBIT, HB_DEFAULT, MODE_MEMBER, MR_DEFAULT, MODE_ENTRY, TRUE, -1);
}
- g_free(pm_name);
- switch (mode)
- {
- case MODE_HBIT : pm->hb_mode = value; break;
- case MODE_MEMBER : pm->mr_mode = value; break;
- default :
- {
- g_assert(mode == MODE_ENTRY);
- pm->entry = value;
- }
- }
-
- if (pm->hb_mode == HB_DEFAULT && pm->mr_mode == MR_DEFAULT && pm->entry)
- array_remove(parse_modes, pm);
+ g_free(pm_name);
+ scp_tree_store_set(parse_modes, &iter, mode, value, -1);
}
gboolean parse_variable(GArray *nodes, ParseVariable *var, const char *children)
@@ -573,8 +581,6 @@ gboolean parse_variable(GArray *nodes, ParseVariable *var, const char *children)
iff (name, "no name")
{
- const ParseMode *pm = parse_mode_find(name);
-
var->name = name;
var->value = parse_find_value(nodes, "value");
var->expr = NULL;
@@ -586,11 +592,9 @@ gboolean parse_variable(GArray *nodes, ParseVariable *var, const char *children)
var->numchild = utils_atoi0(var->children);
}
- pm = parse_mode_find(var->expr ? var->expr : name);
- var->hb_mode = pm->hb_mode;
- var->mr_mode = pm->mr_mode;
- var->display = parse_get_display_from_7bit(var->value, pm->hb_mode, pm->mr_mode);
-
+ var->hb_mode = parse_mode_get(var->expr ? var->expr : name, MODE_HBIT);
+ var->mr_mode = parse_mode_get(var->expr ? var->expr : name, MODE_MEMBER);
+ var->display = parse_get_display_from_7bit(var->value, var->hb_mode, var->mr_mode);
return TRUE;
}
@@ -599,23 +603,23 @@ gboolean parse_variable(GArray *nodes, ParseVariable *var, const char *children)
void parse_load(GKeyFile *config)
{
- array_clear(parse_modes, (GFreeFunc) parse_mode_free);
+ store_clear(parse_modes);
utils_load(config, "parse", parse_mode_load);
}
void parse_save(GKeyFile *config)
{
- array_save(parse_modes, config, "parse", (ASaveFunc) parse_mode_save);
+ store_save(parse_modes, config, "parse", parse_mode_save);
}
void parse_init(void)
{
errors = g_string_sized_new(MAXLEN);
- parse_modes = array_new(ParseMode, 0x10);
+ parse_modes = SCP_TREE_STORE(get_object("parse_mode_store"));
+ scp_tree_store_set_sort_column_id(parse_modes, MODE_NAME, GTK_SORT_ASCENDING);
}
void parse_finalize(void)
{
g_string_free(errors, TRUE);
- array_free(parse_modes, (GFreeFunc) parse_mode_free);
}
Modified: scope/src/parse.h
7 files changed, 4 insertions(+), 3 deletions(-)
===================================================================
@@ -32,6 +32,7 @@
void *value;
} ParseNode;
+void parse_foreach(GArray *nodes, GFunc func, gpointer gdata);
char *parse_string(char *text, char newline);
void parse_message(char *message, const char *token);
gchar *parse_get_display_from_7bit(const char *text, gint hb_mode, gint mr_mode);
@@ -43,11 +44,11 @@
#define parse_find_locale(nodes, name) utils_7bit_to_locale(parse_find_value((nodes), (name)))
#define parse_find_array(nodes, name) \
((GArray *) parse_find_node_type((nodes), (name), PT_ARRAY))
-const char *parse_grab_token(GArray *nodes); /* removes from nodes */
+const char *parse_grab_token(GArray *nodes); /* removes token from nodes */
#define parse_lead_array(nodes) ((GArray *) ((ParseNode *) nodes->data)->value)
#define parse_lead_value(nodes) ((char *) ((ParseNode *) nodes->data)->value)
-gchar *parse_find_error(GArray *nodes);
+gchar *parse_get_error(GArray *nodes);
void on_error(GArray *nodes);
typedef struct _ParseLocation
@@ -110,7 +111,7 @@ enum
} ParseVariable;
char *parse_mode_reentry(const char *name);
-const ParseMode *parse_mode_find(const char *name);
+gint parse_mode_get(const char *name, gint mode);
void parse_mode_update(const char *name, gint mode, gint value);
gboolean parse_variable(GArray *nodes, ParseVariable *var, const char *children);
#define parse_variable_free(var) g_free((var)->display)
Modified: scope/src/program.c
142 files changed, 83 insertions(+), 59 deletions(-)
===================================================================
@@ -41,48 +41,44 @@ static void stash_group_destroy(StashGroup *group, G_GNUC_UNUSED gpointer gdata)
utils_stash_group_free(group);
}
-typedef struct _RecentProgram
+enum
{
- gchar *name;
- guint id;
-} RecentProgram;
+ PROGRAM_NAME,
+ PROGRAM_ID /* 1-based */
+};
#define RECENT_COUNT 28
-static GArray *recent_programs;
+static ScpTreeStore *recent_programs;
static guint recent_bitmap;
static GtkWidget *recent_menu;
-static void recent_program_free(RecentProgram *program)
-{
- g_free(program->name);
-}
-
static gboolean recent_program_load(GKeyFile *config, const char *section)
{
gchar *name = utils_get_setting_string(config, section, "name", NULL);
gint id = utils_get_setting_integer(config, section, "id", 0);
+ gboolean valid = FALSE;
- if (name && *name && id > 0 && (recent_bitmap & (1 << id)) == 0 &&
- recent_programs->len < RECENT_COUNT)
+ if (name && id > 0 && id <= RECENT_COUNT && (recent_bitmap & (1 << id)) == 0)
{
- RecentProgram *recent = (RecentProgram *) array_append(recent_programs);
-
- recent->name = name;
- recent->id = id;
+ scp_tree_store_append_with_values(recent_programs, NULL, NULL, PROGRAM_NAME, name,
+ PROGRAM_ID, id, -1);
recent_bitmap |= 1 << id;
- return TRUE;
+ valid = TRUE;
}
g_free(name);
- return FALSE;
+ return valid;
}
-static gboolean recent_program_save(GKeyFile *config, const char *section,
- RecentProgram *recent)
+static gboolean recent_program_save(GKeyFile *config, const char *section, GtkTreeIter *iter)
{
- g_key_file_set_string(config, section, "name", recent->name);
- g_key_file_set_integer(config, section, "id", recent->id);
+ const gchar *name;
+ gint id;
+
+ scp_tree_store_get(recent_programs, iter, PROGRAM_NAME, &name, PROGRAM_ID, &id, -1);
+ g_key_file_set_string(config, section, "name", name);
+ g_key_file_set_integer(config, section, "id", id);
return TRUE;
}
@@ -95,15 +91,18 @@ static void recent_menu_item_destroy(GtkWidget *widget, G_GNUC_UNUSED gpointer g
static gint recent_menu_count;
-static void recent_menu_item_create(RecentProgram *recent, G_GNUC_UNUSED gpointer gdata)
+static void recent_menu_item_create(GtkTreeIter *iter, G_GNUC_UNUSED gpointer gdata)
{
if (recent_menu_count < pref_show_recent_items)
{
- GtkWidget *item = gtk_menu_item_new_with_label(recent->name);
+ const gchar *name;
+ GtkWidget *item;
+ scp_tree_store_get(recent_programs, iter, PROGRAM_NAME, &name, -1);
+ item = gtk_menu_item_new_with_label(name);
gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu), item);
g_signal_connect(item, "activate", G_CALLBACK(on_recent_menu_item_activate),
- recent->name);
+ (gpointer) name);
recent_menu_count++;
}
}
@@ -112,7 +111,7 @@ static void recent_menu_create(void)
{
gtk_container_foreach(GTK_CONTAINER(recent_menu), recent_menu_item_destroy, NULL);
recent_menu_count = 0;
- array_foreach(recent_programs, (GFunc) recent_menu_item_create, NULL);
+ store_foreach(recent_programs, (GFunc) recent_menu_item_create, NULL);
gtk_widget_show_all(GTK_WIDGET(recent_menu));
}
@@ -136,6 +135,23 @@ static char *recent_file_name(gint id)
gboolean program_temp_breakpoint;
gchar *program_temp_break_location;
+static gboolean program_find(GtkTreeIter *iter, const char *name)
+{
+ gboolean valid = scp_tree_store_get_iter_first(recent_programs, iter);
+
+ while (valid)
+ {
+ const char *name1;
+
+ scp_tree_store_get(recent_programs, iter, PROGRAM_NAME, &name1, -1);
+ if (!utils_filenamecmp(name1, name))
+ break;
+ valid = scp_tree_store_iter_next(recent_programs, iter);
+ }
+
+ return valid;
+}
+
static void save_program_settings(void)
{
const gchar *program_name = *program_executable ? program_executable :
@@ -143,24 +159,38 @@ static void save_program_settings(void)
if (*program_name)
{
- RecentProgram *recent = (RecentProgram *) array_find(recent_programs, program_name,
- TRUE);
+ GtkTreeIter iter;
+ gint id;
GKeyFile *config = g_key_file_new();
char *configfile;
- if (!recent)
+ if (program_find(&iter, program_name))
{
- recent = (RecentProgram *) array_append(recent_programs);
- recent->name = g_strdup(program_name);
-
- for (recent->id = 1; recent->id < RECENT_COUNT; recent->id++)
- if ((recent_bitmap & (1 << recent->id)) == 0)
- break;
-
- recent_bitmap |= 1 << recent->id;
+ scp_tree_store_get(recent_programs, &iter, PROGRAM_ID, &id, -1);
+ scp_tree_store_move(recent_programs, &iter, 0);
+ }
+ else
+ {
+ if (scp_tree_store_iter_nth_child(recent_programs, &iter, NULL,
+ RECENT_COUNT - 1))
+ {
+ scp_tree_store_get(recent_programs, &iter, PROGRAM_ID, &id, -1);
+ scp_tree_store_remove(recent_programs, &iter);
+ }
+ else
+ {
+ for (id = 1; id < RECENT_COUNT; id++)
+ if ((recent_bitmap & (1 << id)) == 0)
+ break;
+
+ recent_bitmap |= 1 << id;
+ }
+
+ scp_tree_store_prepend_with_values(recent_programs, &iter, NULL,
+ PROGRAM_NAME, program_name, PROGRAM_ID, id, -1);
}
- configfile = recent_file_name(recent->id);
+ configfile = recent_file_name(id);
stash_foreach((GFunc) stash_group_save_to_key_file, config);
breaks_save(config);
watches_save(config);
@@ -169,16 +199,6 @@ static void save_program_settings(void)
utils_key_file_write_to_file(config, configfile);
g_free(configfile);
g_key_file_free(config);
-
- g_array_insert_vals(recent_programs, 0, ++recent, 1);
- array_remove(recent_programs, recent);
- recent_menu_create();
-
- if (recent_programs->len > RECENT_COUNT)
- {
- recent_bitmap &= ~(1 << recent->id);
- array_remove(recent_programs, recent);
- }
}
}
@@ -207,20 +227,24 @@ static void program_configure(void)
static void on_recent_menu_item_activate(G_GNUC_UNUSED GtkMenuItem *menuitem, const gchar *name)
{
- RecentProgram *recent = (RecentProgram *) array_find(recent_programs, name, TRUE);
+ GtkTreeIter iter;
- if (recent && utils_filenamecmp(recent->name, *program_executable ? program_executable :
- program_load_script))
+ if (utils_filenamecmp(name, *program_executable ? program_executable :
+ program_load_script) && program_find(&iter, name))
{
- char *configfile = recent_file_name(recent->id);
+ gint id;
+ char *configfile;
GKeyFile *config = g_key_file_new();
GError *gerror = NULL;
gchar *message;
+ scp_tree_store_get(recent_programs, &iter, PROGRAM_ID, &id, -1);
+ configfile = recent_file_name(id);
+
if (g_key_file_load_from_file(config, configfile, G_KEY_FILE_NONE, &gerror))
{
+ scp_tree_store_move(recent_programs, &iter, 0);
save_program_settings();
- recent = (RecentProgram *) array_find(recent_programs, name, TRUE);
stash_foreach((GFunc) stash_group_load_from_key_file, config);
if ((unsigned) option_inspect_expand > EXPAND_MAX)
option_inspect_expand = 100;
@@ -228,9 +252,9 @@ static void on_recent_menu_item_activate(G_GNUC_UNUSED GtkMenuItem *menuitem, co
watches_load(config);
inspects_load(config);
parse_load(config);
- message = g_strdup_printf(_("Loaded debug settings for %s."), recent->name);
- g_array_insert_vals(recent_programs, 0, ++recent, 1);
- array_remove(recent_programs, recent);
+ message = g_strdup_printf(_("Loaded debug settings for %s."), name);
+ program_find(&iter, name);
+ scp_tree_store_move(recent_programs, &iter, 0);
recent_menu_create();
program_configure();
}
@@ -387,6 +411,7 @@ static void on_program_ok_button_clicked(G_GNUC_UNUSED GtkButton *button,
g_free(program_environment);
program_environment = utils_text_buffer_get_text(environment, -1);
save_program_settings();
+ recent_menu_create();
program_configure();
gtk_widget_hide(program_dialog);
@@ -531,7 +556,7 @@ void program_init(void)
stash_group_add_boolean(group, &thread_show_core, "show_core", TRUE);
thread_group = group;
- recent_programs = array_new(RecentProgram, RECENT_COUNT + 2);
+ recent_programs = SCP_TREE_STORE(get_object("recent_program_store"));
recent_bitmap = 0;
recent_menu = get_widget("program_recent_menu");
}
@@ -543,12 +568,11 @@ void program_finalize(void)
save_program_settings();
g_key_file_load_from_file(config, configfile, G_KEY_FILE_NONE, NULL);
- array_save(recent_programs, config, "recent", (ASaveFunc) recent_program_save);
+ store_save(recent_programs, config, "recent", recent_program_save);
utils_key_file_write_to_file(config, configfile);
g_key_file_free(config);
g_free(configfile);
- array_free(recent_programs, (GFreeFunc) recent_program_free);
gtk_widget_destroy(program_dialog);
stash_foreach((GFunc) stash_group_destroy, NULL);
}
Modified: scope/src/scope.c
1 files changed, 0 insertions(+), 1 deletions(-)
===================================================================
@@ -623,7 +623,6 @@ void plugin_cleanup(void)
parse_finalize();
prefs_finalize();
debug_finalize();
- gtk216_finalize();
gtk_widget_destroy(debug_statusbar);
g_object_unref(builder);
Modified: scope/src/stack.c
10 files changed, 5 insertions(+), 5 deletions(-)
===================================================================
@@ -52,8 +52,8 @@ static void stack_node_location(const ParseNode *node, const char *fid)
scp_tree_store_append_with_values(store, &iter, NULL, STACK_ID, id,
STACK_FILE, loc.file, STACK_LINE, loc.line, STACK_BASE_NAME,
loc.base_name, STACK_FUNC, loc.func, STACK_ARGS, NULL, STACK_ADDR,
- loc.addr, STACK_ENTRY, !loc.func || parse_mode_find(loc.func)->entry,
- -1);
+ loc.addr, STACK_ENTRY, !loc.func ||
+ parse_mode_get(loc.func, MODE_ENTRY), -1);
parse_location_free(&loc);
if (!g_strcmp0(id, fid))
@@ -71,7 +71,7 @@ void on_stack_frames(GArray *nodes)
char *fid = g_strdup(frame_id);
stack_clear();
- array_foreach(parse_lead_array(nodes), (GFunc) stack_node_location, fid);
+ parse_foreach(parse_lead_array(nodes), (GFunc) stack_node_location, fid);
g_free(fid);
if (!frame_id)
@@ -132,7 +132,7 @@ static void stack_node_arguments(const ParseNode *node, G_GNUC_UNUSED gpointer g
sd.string = g_string_sized_new(0xFF);
scp_tree_store_get(store, &iter, STACK_ENTRY, &sd.entry, -1);
- array_foreach(nodes, (GFunc) append_argument_variable, &sd);
+ parse_foreach(nodes, (GFunc) append_argument_variable, &sd);
scp_tree_store_set(store, &iter, STACK_ARGS, sd.string->str, -1);
g_string_free(sd.string, TRUE);
}
@@ -143,7 +143,7 @@ static void stack_node_arguments(const ParseNode *node, G_GNUC_UNUSED gpointer g
void on_stack_arguments(GArray *nodes)
{
if (!g_strcmp0(parse_grab_token(nodes), thread_id))
- array_foreach(parse_lead_array(nodes), (GFunc) stack_node_arguments, NULL);
+ parse_foreach(parse_lead_array(nodes), (GFunc) stack_node_arguments, NULL);
}
void on_stack_follow(GArray *nodes)
Modified: scope/src/thread.c
4 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -388,7 +388,7 @@ void on_thread_stopped(GArray *nodes)
}
}
else
- array_foreach((GArray *) stopped->value, (GFunc) thread_node_stopped, &sd);
+ parse_foreach((GArray *) stopped->value, (GFunc) thread_node_stopped, &sd);
}
if (thread_select_on_stopped && thread_state <= THREAD_RUNNING && sd.found)
@@ -541,7 +541,7 @@ static const char *thread_info_parse(GArray *nodes, gboolean select)
{
const char *tid = parse_find_value(nodes, "current-thread-id");
- array_foreach(parse_lead_array(nodes), (GFunc) thread_node_parse, NULL);
+ parse_foreach(parse_lead_array(nodes), (GFunc) thread_node_parse, NULL);
if (tid)
set_gdb_thread(tid, select);
Modified: scope/src/tooltip.c
7 files changed, 3 insertions(+), 4 deletions(-)
===================================================================
@@ -76,7 +76,7 @@ void on_tooltip_error(GArray *nodes)
if (atoi(parse_grab_token(nodes)) == scid_gen)
{
if (pref_tooltips_fail_action == 1)
- tooltip_set(parse_find_error(nodes));
+ tooltip_set(parse_get_error(nodes));
else
{
tooltip_set(NULL);
@@ -92,9 +92,8 @@ void on_tooltip_value(GArray *nodes)
{
if (atoi(parse_grab_token(nodes)) == scid_gen)
{
- const ParseMode *pm = parse_mode_find(input);
- tooltip_set(parse_get_display_from_7bit(parse_lead_value(nodes), pm->hb_mode,
- pm->mr_mode));
+ tooltip_set(parse_get_display_from_7bit(parse_lead_value(nodes),
+ parse_mode_get(input, MODE_HBIT), parse_mode_get(input, MODE_MEMBER)));
}
}
Modified: scope/src/utils.c
101 files changed, 6 insertions(+), 95 deletions(-)
===================================================================
@@ -134,100 +134,6 @@ void utils_strchrepl(char *text, char c, char rep)
*p = '\0';
}
-gchar *array_append(GArray *array)
-{
- g_array_set_size(array, array->len + 1);
- return array->data + g_array_get_element_size(array) * (array->len - 1);
-}
-
-#ifdef G_OS_UNIX
-gchar *array_find(GArray *array, const char *key, G_GNUC_UNUSED gboolean filename)
-#else
-gchar *array_find(GArray *array, const char *key, gboolean filename)
-#endif
-{
- guint size = g_array_get_element_size(array);
- gchar *end = array->data + size * array->len;
- gchar *data;
-#ifdef G_OS_UNIX
- int (*const compare)(const char *s1, const char *s2) = strcmp;
-#else
- int (*compare)(const char *s1, const char *s2) = filename ? utils_str_casecmp : strcmp;
-#endif
-
- for (data = array->data; data < end; data += size)
- if (!compare(*(const char **) data, key))
- return data;
-
- return NULL;
-}
-
-void array_foreach(GArray *array, GFunc each_func, gpointer gdata)
-{
- guint size = g_array_get_element_size(array);
- gchar *end = array->data + size * array->len;
- gchar *data;
-
- for (data = array->data; data < end; data += size)
- each_func(data, gdata);
-}
-
-guint array_index(GArray *array, gconstpointer element)
-{
- return ((const gchar *) element - array->data) / g_array_get_element_size(array);
-}
-
-void array_remove(GArray *array, gconstpointer element)
-{
- g_array_remove_index(array, array_index(array, element));
-}
-
-static void array_free_element(gpointer element, GFreeFunc free_func)
-{
- free_func(element);
-}
-
-void array_clear(GArray *array, GFreeFunc free_func)
-{
- array_foreach(array, (GFunc) array_free_element, free_func);
- g_array_set_size(array, 0);
-}
-
-void array_free(GArray *array, GFreeFunc free_func)
-{
- array_foreach(array, (GFunc) array_free_element, free_func);
- g_array_free(array, TRUE);
-}
-
-static void utils_clear_sections(GKeyFile *config, const char *prefix, guint i)
-{
- gboolean valid;
-
- do
- {
- char *section = g_strdup_printf("%s_%d", prefix, i++);
- valid = g_key_file_remove_group(config, section, NULL);
- g_free(section);
- } while (valid);
-}
-
-void array_save(GArray *array, GKeyFile *config, const gchar *prefix, ASaveFunc save_func)
-{
- guint size = g_array_get_element_size(array);
- gchar *end = array->data + size * array->len;
- gchar *data;
- guint n = 0;
-
- for (data = array->data; data < end; data += size)
- {
- char *section = g_strdup_printf("%s_%d", prefix, n);
- n += save_func(config, section, data);
- g_free(section);
- }
-
- utils_clear_sections(config, prefix, n);
-}
-
gboolean store_find(ScpTreeStore *store, GtkTreeIter *iter, guint column, const char *key)
{
if (scp_tree_store_get_column_type(store, column) == G_TYPE_STRING)
@@ -264,7 +170,12 @@ void store_save(ScpTreeStore *store, GKeyFile *config, const gchar *prefix,
g_free(section);
}
- utils_clear_sections(config, prefix, i);
+ do
+ {
+ char *section = g_strdup_printf("%s_%d", prefix, i++);
+ valid = g_key_file_remove_group(config, section, NULL);
+ g_free(section);
+ } while (valid);
}
gint store_gint_compare(ScpTreeStore *store, GtkTreeIter *a, GtkTreeIter *b, gpointer gdata)
Modified: scope/src/utils.h
11 files changed, 0 insertions(+), 11 deletions(-)
===================================================================
@@ -29,17 +29,6 @@
const gchar *utils_skip_spaces(const gchar *text);
void utils_strchrepl(char *text, char c, char repl);
-#define array_new(type, start) g_array_sized_new(FALSE, FALSE, sizeof(type), (start))
-gchar *array_append(GArray *array);
-gchar *array_find(GArray *array, const char *key, gboolean filename);
-void array_foreach(GArray *array, GFunc each_func, gpointer gdata);
-guint array_index(GArray *array, const void *data);
-void array_remove(GArray *array, const void *data);
-void array_clear(GArray *array, GFreeFunc free_func);
-void array_free(GArray *array, GFreeFunc free_func);
-typedef gboolean (*ASaveFunc)(GKeyFile *config, const char *section, void *data);
-void array_save(GArray *array, GKeyFile *config, const char *prefix, ASaveFunc save_func);
-
#define iff(expr, ...) if (G_UNLIKELY(!(expr))) dc_error(__VA_ARGS__); else
#define utils_atoi0(s) ((s) ? atoi(s) : 0) /* note: 2 references to s */
Modified: scope/src/watch.c
18 files changed, 7 insertions(+), 11 deletions(-)
===================================================================
@@ -75,11 +75,9 @@ static void on_watch_expr_edited(G_GNUC_UNUSED GtkCellRendererText *renderer,
if (strcmp(new_text, expr))
{
- const ParseMode *pm = parse_mode_find(new_text);
-
scp_tree_store_set(store, &iter, WATCH_EXPR, new_text, WATCH_DISPLAY, NULL,
- WATCH_VALUE, NULL, WATCH_HB_MODE, pm->hb_mode, WATCH_MR_MODE,
- pm->mr_mode, -1);
+ WATCH_VALUE, NULL, WATCH_HB_MODE, parse_mode_get(new_text, MODE_HBIT),
+ WATCH_MR_MODE, parse_mode_get(new_text, MODE_MEMBER), -1);
if (enabled && (debug_state() & DS_DEBUG))
watch_iter_update(&iter, GINT_TO_POINTER(TRUE));
@@ -131,7 +129,7 @@ void on_watch_value(GArray *nodes)
void on_watch_error(GArray *nodes)
{
- watch_set(nodes, parse_find_error(nodes), NULL);
+ watch_set(nodes, parse_get_error(nodes), NULL);
}
static void watch_iter_clear(GtkTreeIter *iter, G_GNUC_UNUSED gpointer gdata)
@@ -160,12 +158,12 @@ void watch_add(const gchar *text)
if (validate_column(expr, TRUE))
{
- const ParseMode *pm = parse_mode_find(expr);
GtkTreeIter iter;
scp_tree_store_append_with_values(store, &iter, NULL, WATCH_EXPR, expr,
- WATCH_HB_MODE, pm->hb_mode, WATCH_MR_MODE, pm->mr_mode, WATCH_SCID,
- ++scid_gen, WATCH_ENABLED, TRUE, -1);
+ WATCH_HB_MODE, parse_mode_get(expr, MODE_HBIT), WATCH_MR_MODE,
+ parse_mode_get(expr, MODE_MEMBER), WATCH_SCID, ++scid_gen, WATCH_ENABLED,
+ TRUE, -1);
utils_tree_set_cursor(selection, &iter, 0.5);
if (debug_state() & DS_DEBUG)
@@ -198,9 +196,7 @@ static gboolean watch_load(GKeyFile *config, const char *section)
if (expr && (unsigned) hb_mode < HB_COUNT && (unsigned) mr_mode < MR_MODIFY)
{
- GtkTreeIter iter;
-
- scp_tree_store_append_with_values(store, &iter, NULL, WATCH_EXPR, expr,
+ scp_tree_store_append_with_values(store, NULL, NULL, WATCH_EXPR, expr,
WATCH_HB_MODE, hb_mode, WATCH_MR_MODE, mr_mode, WATCH_SCID, ++scid_gen,
WATCH_ENABLED, enabled, -1);
valid = TRUE;
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list