SF.net SVN: geany:[5184] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Fri Aug 20 15:55:30 UTC 2010
Revision: 5184
http://geany.svn.sourceforge.net/geany/?rev=5184&view=rev
Author: ntrel
Date: 2010-08-20 15:55:30 +0000 (Fri, 20 Aug 2010)
Log Message:
-----------
Replace GeanyBuildCommand::entries array with separate fields.
Similar to r5077 in the bs2 branch, but with less loop unrolling.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/build.c
trunk/src/build.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2010-08-20 11:28:40 UTC (rev 5183)
+++ trunk/ChangeLog 2010-08-20 15:55:30 UTC (rev 5184)
@@ -4,6 +4,9 @@
Link Octave instead of Matlab.
Add comment about not being autogenerated.
Minor changes to fit Scintilla order.
+ * src/build.c, src/build.h:
+ Replace GeanyBuildCommand::entries array with separate fields.
+ Similar to r5077 in the bs2 branch, but with less loop unrolling.
2010-08-17 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c 2010-08-20 11:28:40 UTC (rev 5183)
+++ trunk/src/build.c 2010-08-20 15:55:30 UTC (rev 5184)
@@ -152,10 +152,38 @@
/* convenience routines to access parts of GeanyBuildCommand */
static gchar *id_to_str(GeanyBuildCommand *bc, gint id)
{
- return bc->entries[id];
+ switch (id)
+ {
+ case GEANY_BC_LABEL:
+ return bc->label;
+ case GEANY_BC_COMMAND:
+ return bc->command;
+ case GEANY_BC_WORKING_DIR:
+ return bc->working_dir;
+ }
+ g_assert(0);
+ return NULL;
}
+static void set_command(GeanyBuildCommand *bc, gint id, gchar *str)
+{
+ switch (id)
+ {
+ case GEANY_BC_LABEL:
+ setptr(bc->label, str);
+ break;
+ case GEANY_BC_COMMAND:
+ setptr(bc->command, str);
+ break;
+ case GEANY_BC_WORKING_DIR:
+ setptr(bc->working_dir, str);
+ break;
+ }
+ g_assert(0);
+}
+
+
static gchar *buildcmd_label(GeanyBuildCommand *bc)
{
return id_to_str(bc, GEANY_BC_LABEL);
@@ -209,6 +237,7 @@
/* for debug only, print the commands structures in priority order */
static void printfcmds(void)
{
+#if 0
GeanyBuildCommand **cl[GEANY_GBG_COUNT][GEANY_BCS_COUNT] = {
/* GEANY_BCS_DEF, GEANY_BCS_FT, GEANY_BCS_HOME_FT, GEANY_BCS_PREF,
* GEANY_BCS_FT_PROJ, GEANY_BCS_PROJ */
@@ -285,6 +314,7 @@
}
printf("\n");
}
+#endif
}
@@ -1891,7 +1921,7 @@
if (bc != NULL )
{
- if ((str = bc->entries[i]) == NULL)
+ if ((str = id_to_str(bc, i)) == NULL)
str = "";
else if ((gint)dst == src)
roww->used_dst = TRUE;
@@ -2112,7 +2142,7 @@
if (*(dst->dst[grp]) == NULL)
*(dst->dst[grp]) = g_new0(GeanyBuildCommand, build_groups_count[grp]);
for (i = 0; i < GEANY_BC_CMDENTRIES_COUNT; i++)
- setptr((*(dst->dst[grp]))[cmd].entries[i], entries[i]);
+ set_command(&(*(dst->dst[grp]))[cmd], i, entries[i]);
(*(dst->dst[grp]))[cmd].exists = TRUE;
(*(dst->dst[grp]))[cmd].changed = TRUE;
changed = TRUE;
@@ -2307,12 +2337,12 @@
if (label != NULL)
{
dstcmd[cmd].exists = TRUE;
- setptr(dstcmd[cmd].entries[GEANY_BC_LABEL], label);
+ setptr(dstcmd[cmd].label, label);
set_key_fld(key,"CM");
- setptr(dstcmd[cmd].entries[GEANY_BC_COMMAND],
+ setptr(dstcmd[cmd].command,
g_key_file_get_string(config, build_grp_name, key, NULL));
set_key_fld(key,"WD");
- setptr(dstcmd[cmd].entries[GEANY_BC_WORKING_DIR],
+ setptr(dstcmd[cmd].working_dir,
g_key_file_get_string(config, build_grp_name, key, NULL));
}
else dstcmd[cmd].exists = FALSE;
@@ -2398,12 +2428,13 @@
/* load old [build_settings] values if there is no value defined by [build-menu] */
/* set GeanyBuildCommand if it doesn't already exist and there is a command */
+/* TODO: rewrite as function */
#define ASSIGNIF(type, id, string, value) \
if (NZV(value) && ! type[GBO_TO_CMD(id)].exists) { \
type[GBO_TO_CMD(id)].exists = TRUE; \
- setptr(type[GBO_TO_CMD(id)].entries[GEANY_BC_LABEL], g_strdup(string)); \
- setptr(type[GBO_TO_CMD(id)].entries[GEANY_BC_COMMAND], (value)); \
- setptr(type[GBO_TO_CMD(id)].entries[GEANY_BC_WORKING_DIR], NULL); \
+ setptr(type[GBO_TO_CMD(id)].label, g_strdup(string)); \
+ setptr(type[GBO_TO_CMD(id)].command, (value)); \
+ setptr(type[GBO_TO_CMD(id)].working_dir, NULL); \
type[GBO_TO_CMD(id)].old = TRUE; \
} else \
g_free(value);
@@ -2448,11 +2479,11 @@
else
makebasedir = g_strdup("%d");
if (non_ft_pref[GBO_TO_CMD(GEANY_GBO_MAKE_ALL)].old)
- setptr(non_ft_pref[GBO_TO_CMD(GEANY_GBO_MAKE_ALL)].entries[GEANY_BC_WORKING_DIR], g_strdup(makebasedir));
+ setptr(non_ft_pref[GBO_TO_CMD(GEANY_GBO_MAKE_ALL)].working_dir, g_strdup(makebasedir));
if (non_ft_pref[GBO_TO_CMD(GEANY_GBO_CUSTOM)].old)
- setptr(non_ft_pref[GBO_TO_CMD(GEANY_GBO_CUSTOM)].entries[GEANY_BC_WORKING_DIR], g_strdup(makebasedir));
+ setptr(non_ft_pref[GBO_TO_CMD(GEANY_GBO_CUSTOM)].working_dir, g_strdup(makebasedir));
if (non_ft_pref[GBO_TO_CMD(GEANY_GBO_MAKE_OBJECT)].old)
- setptr(non_ft_pref[GBO_TO_CMD(GEANY_GBO_MAKE_OBJECT)].entries[GEANY_BC_WORKING_DIR], g_strdup("%d"));
+ setptr(non_ft_pref[GBO_TO_CMD(GEANY_GBO_MAKE_OBJECT)].working_dir, g_strdup("%d"));
value = g_key_file_get_string(config, "project", "run_cmd", NULL);
if (NZV(value))
{
@@ -2461,9 +2492,9 @@
if (! exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].exists)
{
exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].exists = TRUE;
- setptr(exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].entries[GEANY_BC_LABEL], g_strdup(_("_Execute")));
- setptr(exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].entries[GEANY_BC_COMMAND], value);
- setptr(exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].entries[GEANY_BC_WORKING_DIR], g_strdup(basedir));
+ setptr(exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].label, g_strdup(_("_Execute")));
+ setptr(exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].command, value);
+ setptr(exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].working_dir, g_strdup(basedir));
exec_proj[GBO_TO_CMD(GEANY_GBO_EXEC)].old = TRUE;
}
}
@@ -2516,7 +2547,7 @@
for (i = 0; i < GEANY_BC_CMDENTRIES_COUNT; i++)
{
set_key_fld(key, config_keys[i]);
- g_key_file_set_string(config, build_grp_name, key, src[cmd].entries[i]);
+ g_key_file_set_string(config, build_grp_name, key, id_to_str(&src[cmd], i));
}
}
else
@@ -2645,15 +2676,17 @@
static struct
{
- const gchar *entries[GEANY_BC_CMDENTRIES_COUNT];
+ const gchar *label;
+ const gchar *command;
+ const gchar *working_dir;
GeanyBuildCommand **ptr;
gint index;
} default_cmds[] = {
- { {N_("_Make"), "make", NULL}, &non_ft_def, GBO_TO_CMD(GEANY_GBO_MAKE_ALL)},
- { {N_("Make Custom _Target"), "make ", NULL}, &non_ft_def, GBO_TO_CMD(GEANY_GBO_CUSTOM)},
- { {N_("Make _Object"), "make %e.o", NULL }, &non_ft_def, GBO_TO_CMD(GEANY_GBO_MAKE_OBJECT)},
- { {N_("_Execute"), "./%e", NULL }, &exec_def, GBO_TO_CMD(GEANY_GBO_EXEC)},
- { {NULL, NULL, NULL}, NULL, 0 }
+ { N_("_Make"), "make", NULL, &non_ft_def, GBO_TO_CMD(GEANY_GBO_MAKE_ALL)},
+ { N_("Make Custom _Target"), "make ", NULL, &non_ft_def, GBO_TO_CMD(GEANY_GBO_CUSTOM)},
+ { N_("Make _Object"), "make %e.o", NULL, &non_ft_def, GBO_TO_CMD(GEANY_GBO_MAKE_OBJECT)},
+ { N_("_Execute"), "./%e", NULL, &exec_def, GBO_TO_CMD(GEANY_GBO_EXEC)},
+ { NULL, NULL, NULL, NULL, 0 }
};
@@ -2669,18 +2702,14 @@
non_ft_def = g_new0(GeanyBuildCommand, build_groups_count[GEANY_GBG_NON_FT]);
exec_def = g_new0(GeanyBuildCommand, build_groups_count[GEANY_GBG_EXEC]);
run_info = g_new0(RunInfo, build_groups_count[GEANY_GBG_EXEC]);
- for (cmdindex = 0; default_cmds[cmdindex].entries[GEANY_BC_COMMAND] != NULL; ++cmdindex)
+
+ for (cmdindex = 0; default_cmds[cmdindex].command != NULL; ++cmdindex)
{
- enum GeanyBuildCmdEntries k;
GeanyBuildCommand *cmd = &((*(default_cmds[cmdindex].ptr))[ default_cmds[cmdindex].index ]);
cmd->exists = TRUE;
- for (k = 0; k < GEANY_BC_CMDENTRIES_COUNT; k++)
- {
- if (k == GEANY_BC_LABEL)
- cmd->entries[k] = g_strdup(_(default_cmds[cmdindex].entries[k]));
- else
- cmd->entries[k] = g_strdup(default_cmds[cmdindex].entries[k]);
- }
+ cmd->label = g_strdup(_(default_cmds[cmdindex].label));
+ cmd->command = g_strdup(default_cmds[cmdindex].command);
+ cmd->working_dir = g_strdup(default_cmds[cmdindex].working_dir);
}
/* create the toolbar Build item sub menu */
Modified: trunk/src/build.h
===================================================================
--- trunk/src/build.h 2010-08-20 11:28:40 UTC (rev 5183)
+++ trunk/src/build.h 2010-08-20 15:55:30 UTC (rev 5184)
@@ -120,20 +120,22 @@
extern GeanyBuildInfo build_info;
/** The entries of a command for a menu item */
-typedef enum GeanyBuildCmdEntries
+typedef enum GeanyBuildCmdEntries
{
- GEANY_BC_LABEL, /**< The menu item label, _ marks mnemonic */
- GEANY_BC_COMMAND, /**< The command to run. */
- GEANY_BC_WORKING_DIR, /**< The directory to run in */
- GEANY_BC_CMDENTRIES_COUNT /**< Count of entries */
+ GEANY_BC_LABEL, /**< The menu item label, _ marks mnemonic */
+ GEANY_BC_COMMAND, /**< The command to run. */
+ GEANY_BC_WORKING_DIR, /**< The directory to run in */
+ GEANY_BC_CMDENTRIES_COUNT /**< Count of entries */
} GeanyBuildCmdEntries;
/** The command for a menu item. */
typedef struct GeanyBuildCommand
{
- /** Pointers to g_string values of the command entries.
+ /** Pointers to g_string values of the command entries.
* Must be freed if the pointer is changed. */
- gchar *entries[GEANY_BC_CMDENTRIES_COUNT];
+ gchar *label; /**< Menu item label */
+ gchar *command; /**< Command to run */
+ gchar *working_dir; /**< working directory */
gboolean exists; /**< If the entries have valid values. */
gboolean changed; /**< Save on exit if @c changed, remove if not @c exist. */
gboolean old; /**< Converted from old format. */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list