[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
gEDA-cvs: gaf.git: branch: master updated (1.6.1-20100214-120-g9c42a66)
The branch, master has been updated
via 9c42a66c0a985ef424f35ac93a289e82ef88b32b (commit)
from d4820b644781b337812a78a1416b67025fa79c2a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
=========
Summary
=========
gschem/include/gschem_struct.h | 14 ++++++++++++++
gschem/include/prototype.h | 5 +++++
gschem/src/Makefile.am | 1 +
gschem/src/gschem_toplevel.c | 5 +++++
gschem/src/o_move.c | 34 ++++++++++++++++------------------
{libgeda => gschem}/src/s_stretch.c | 6 +-----
libgeda/include/libgeda/prototype.h | 6 ------
libgeda/include/libgeda/struct.h | 12 ------------
libgeda/src/Makefile.am | 1 -
libgeda/src/s_page.c | 5 -----
10 files changed, 42 insertions(+), 47 deletions(-)
rename {libgeda => gschem}/src/s_stretch.c (97%)
=================
Commit Messages
=================
commit 9c42a66c0a985ef424f35ac93a289e82ef88b32b
Author: Peter Clifton <pcjc2@xxxxxxxxx>
Commit: Peter Clifton <pcjc2@xxxxxxxxx>
Move STRETCH structure and s_stretch.c from libgeda to gschem
This structure and related functions deal with rubberbanding nets during
move operations. They are only used from within gschem, although there
is of course setup and tear-down in libgeda. Move this all to gschem.
This isn't a 1-1 move, since various headers and structures needed to
be fixed up in the process. The stretch_list now lives in the
GSCHEM_TOPLEVEL, not the PAGE, matching the fact that we don't allow
action state to persist when a GSCHEM_TOPLEVEL changes active PAGE.
A free of the stretch list is removed from s_page_delete(), but no
equivalent is re-added in gschem. Action state is torn down when an
action is cancelled, which is done before deleting any GSCHEM_TOPLEVEL.
:100644 100644 fd9c0fa... 453b777... M gschem/include/gschem_struct.h
:100644 100644 5b71022... cf2c86d... M gschem/include/prototype.h
:100644 100644 2cd0d90... 2c2ffd3... M gschem/src/Makefile.am
:100644 100644 ba8e360... 6bfda7a... M gschem/src/gschem_toplevel.c
:100644 100644 6043f2f... 4e2d64e... M gschem/src/o_move.c
:000000 100644 0000000... 4fe472c... A gschem/src/s_stretch.c
:100644 100644 ad9608a... 1b60f7c... M libgeda/include/libgeda/prototype.h
:100644 100644 2abfbe2... fef18c7... M libgeda/include/libgeda/struct.h
:100644 100644 ba66781... ae62fe8... M libgeda/src/Makefile.am
:100644 100644 7a973ad... aa687d5... M libgeda/src/s_page.c
:100644 000000 395f3fb... 0000000... D libgeda/src/s_stretch.c
=========
Changes
=========
commit 9c42a66c0a985ef424f35ac93a289e82ef88b32b
Author: Peter Clifton <pcjc2@xxxxxxxxx>
Commit: Peter Clifton <pcjc2@xxxxxxxxx>
Move STRETCH structure and s_stretch.c from libgeda to gschem
This structure and related functions deal with rubberbanding nets during
move operations. They are only used from within gschem, although there
is of course setup and tear-down in libgeda. Move this all to gschem.
This isn't a 1-1 move, since various headers and structures needed to
be fixed up in the process. The stretch_list now lives in the
GSCHEM_TOPLEVEL, not the PAGE, matching the fact that we don't allow
action state to persist when a GSCHEM_TOPLEVEL changes active PAGE.
A free of the stretch list is removed from s_page_delete(), but no
equivalent is re-added in gschem. Action state is torn down when an
action is cancelled, which is done before deleting any GSCHEM_TOPLEVEL.
diff --git a/gschem/include/gschem_struct.h b/gschem/include/gschem_struct.h
index fd9c0fa..453b777 100644
--- a/gschem/include/gschem_struct.h
+++ b/gschem/include/gschem_struct.h
@@ -2,6 +2,7 @@
typedef enum {SNAP_OFF, SNAP_GRID, SNAP_RESNAP, SNAP_STATE_COUNT} SNAP_STATE;
typedef struct st_gschem_toplevel GSCHEM_TOPLEVEL;
+typedef struct st_stretch STRETCH;
struct st_gschem_toplevel {
@@ -105,6 +106,11 @@ struct st_gschem_toplevel {
type of object being manipulated. */
OBJECT *which_object; /* Object being manipulated */
+ /* ------------------ */
+ /* Rubberbanding nets */
+ /* ------------------ */
+ GList *stretch_list;
+
/* --------------------- */
/* Gschem internal state */
/* --------------------- */
@@ -205,3 +211,11 @@ struct st_gschem_toplevel {
char *print_command; /* The command to send postscript to when printing */
};
+
+struct st_stretch
+{
+ OBJECT *object;
+ CONN *connection;
+
+ int whichone;
+};
diff --git a/gschem/include/prototype.h b/gschem/include/prototype.h
index 5b71022..cf2c86d 100644
--- a/gschem/include/prototype.h
+++ b/gschem/include/prototype.h
@@ -710,6 +710,11 @@ void o_undo_remove_last_undo(GSCHEM_TOPLEVEL *w_current);
/* parsecmd.c */
void usage(char *cmd);
int parse_commandline(int argc, char *argv[]);
+/* s_stretch.c */
+GList *s_stretch_add(GList *list, OBJECT *object, CONN *connection, int whichone);
+GList *s_stretch_remove(GList *list, OBJECT *object);
+void s_stretch_print_all(GList *list);
+void s_stretch_destroy_all(GList *list);
/* x_attribedit.c */
gint option_menu_get_history(GtkOptionMenu *option_menu);
void attrib_edit_dialog_ok(GtkWidget *w, GSCHEM_TOPLEVEL *w_current);
diff --git a/gschem/src/Makefile.am b/gschem/src/Makefile.am
index 2cd0d90..2c2ffd3 100644
--- a/gschem/src/Makefile.am
+++ b/gschem/src/Makefile.am
@@ -46,6 +46,7 @@ gschem_SOURCES = \
o_text.c \
o_undo.c \
parsecmd.c \
+ s_stretch.c \
x_attribedit.c \
x_autonumber.c \
x_basic.c \
diff --git a/gschem/src/gschem_toplevel.c b/gschem/src/gschem_toplevel.c
index ba8e360..6bfda7a 100644
--- a/gschem/src/gschem_toplevel.c
+++ b/gschem/src/gschem_toplevel.c
@@ -118,6 +118,11 @@ GSCHEM_TOPLEVEL *gschem_toplevel_new ()
w_current->which_grip = -1;
w_current->which_object = NULL;
+ /* ------------------ */
+ /* Rubberbanding nets */
+ /* ------------------ */
+ w_current->stretch_list = NULL;
+
/* --------------------- */
/* Gschem internal state */
/* --------------------- */
diff --git a/gschem/src/o_move.c b/gschem/src/o_move.c
index 6043f2f..4e2d64e 100644
--- a/gschem/src/o_move.c
+++ b/gschem/src/o_move.c
@@ -37,6 +37,8 @@ void o_move_start(GSCHEM_TOPLEVEL *w_current, int w_x, int w_y)
TOPLEVEL *toplevel = w_current->toplevel;
GList *s_iter;
+ g_return_if_fail (w_current->stretch_list == NULL);
+
if (o_select_selected (w_current)) {
/* Save the current state. When rotating the selection when moving,
@@ -57,7 +59,7 @@ void o_move_start(GSCHEM_TOPLEVEL *w_current, int w_x, int w_y)
/* Set the dont_redraw flag on rubberbanded objects and invalidate them.
* This ensures that they are not drawn (in their un-stretched position)
* during screen updates. */
- for (s_iter = toplevel->page_current->stretch_list;
+ for (s_iter = w_current->stretch_list;
s_iter != NULL; s_iter = g_list_next (s_iter)) {
STRETCH *stretch = s_iter->data;
stretch->object->dont_redraw = TRUE;
@@ -156,7 +158,7 @@ void o_move_end(GSCHEM_TOPLEVEL *w_current)
/* Unset the dont_redraw flag on rubberbanded objects.
* We set this above, in o_move_start(). */
- for (s_iter = toplevel->page_current->stretch_list;
+ for (s_iter = w_current->stretch_list;
s_iter != NULL; s_iter = g_list_next (s_iter)) {
STRETCH *stretch = s_iter->data;
stretch->object->dont_redraw = FALSE;
@@ -233,8 +235,8 @@ void o_move_end(GSCHEM_TOPLEVEL *w_current)
g_list_free(toplevel->page_current->place_list);
toplevel->page_current->place_list = NULL;
- s_stretch_destroy_all (toplevel->page_current->stretch_list);
- toplevel->page_current->stretch_list = NULL;
+ s_stretch_destroy_all (w_current->stretch_list);
+ w_current->stretch_list = NULL;
}
@@ -245,12 +247,11 @@ void o_move_end(GSCHEM_TOPLEVEL *w_current)
*/
void o_move_cancel (GSCHEM_TOPLEVEL *w_current)
{
- TOPLEVEL *toplevel = w_current->toplevel;
GList *s_iter;
/* Unset the dont_redraw flag on rubberbanded objects.
* We set this above, in o_move_start(). */
- for (s_iter = toplevel->page_current->stretch_list;
+ for (s_iter = w_current->stretch_list;
s_iter != NULL; s_iter = g_list_next (s_iter)) {
STRETCH *stretch = s_iter->data;
stretch->object->dont_redraw = FALSE;
@@ -258,8 +259,8 @@ void o_move_cancel (GSCHEM_TOPLEVEL *w_current)
g_list_free(w_current->toplevel->page_current->place_list);
w_current->toplevel->page_current->place_list = NULL;
- s_stretch_destroy_all (toplevel->page_current->stretch_list);
- toplevel->page_current->stretch_list = NULL;
+ s_stretch_destroy_all (w_current->stretch_list);
+ w_current->stretch_list = NULL;
w_current->inside_action = 0;
i_set_state (w_current, SELECT);
@@ -340,7 +341,6 @@ void o_move_motion (GSCHEM_TOPLEVEL *w_current, int w_x, int w_y)
*/
void o_move_invalidate_rubber (GSCHEM_TOPLEVEL *w_current, int drawing)
{
- TOPLEVEL *toplevel = w_current->toplevel;
GList *s_iter;
int dx1, dx2, dy1, dy2;
int x1, y1, x2, y2;
@@ -348,7 +348,7 @@ void o_move_invalidate_rubber (GSCHEM_TOPLEVEL *w_current, int drawing)
o_place_invalidate_rubber (w_current, drawing);
if (w_current->netconn_rubberband) {
- for (s_iter = toplevel->page_current->stretch_list;
+ for (s_iter = w_current->stretch_list;
s_iter != NULL; s_iter = g_list_next (s_iter)) {
STRETCH *s_current = s_iter->data;
OBJECT *object = s_current->object;
@@ -385,7 +385,6 @@ void o_move_invalidate_rubber (GSCHEM_TOPLEVEL *w_current, int drawing)
*/
void o_move_draw_rubber (GSCHEM_TOPLEVEL *w_current, int drawing)
{
- TOPLEVEL *toplevel = w_current->toplevel;
GList *s_iter;
int diff_x, diff_y;
@@ -397,7 +396,7 @@ void o_move_draw_rubber (GSCHEM_TOPLEVEL *w_current, int drawing)
diff_x = w_current->second_wx - w_current->first_wx;
diff_y = w_current->second_wy - w_current->first_wy;
- for (s_iter = toplevel->page_current->stretch_list;
+ for (s_iter = w_current->stretch_list;
s_iter != NULL; s_iter = g_list_next (s_iter)) {
STRETCH *s_current = s_iter->data;
OBJECT *object = s_current->object;
@@ -519,9 +518,8 @@ void o_move_check_endpoint(GSCHEM_TOPLEVEL *w_current, OBJECT * object)
#endif
if (whichone >= 0 && whichone <= 1) {
- toplevel->page_current->stretch_list =
- s_stretch_add (toplevel->page_current->stretch_list,
- other, c_current, whichone);
+ w_current->stretch_list = s_stretch_add (w_current->stretch_list,
+ other, c_current, whichone);
}
}
@@ -602,7 +600,7 @@ void o_move_end_rubberband (GSCHEM_TOPLEVEL *w_current,
TOPLEVEL *toplevel = w_current->toplevel;
GList *s_iter, *s_iter_next;
- for (s_iter = toplevel->page_current->stretch_list;
+ for (s_iter = w_current->stretch_list;
s_iter != NULL; s_iter = s_iter_next) {
STRETCH *s_current = s_iter->data;
OBJECT *object = s_current->object;
@@ -621,8 +619,8 @@ void o_move_end_rubberband (GSCHEM_TOPLEVEL *w_current,
object->line->y[whichone] += w_dy;
if (o_move_zero_length (object)) {
- toplevel->page_current->stretch_list =
- s_stretch_remove (toplevel->page_current->stretch_list, object);
+ w_current->stretch_list =
+ s_stretch_remove (w_current->stretch_list, object);
o_delete (w_current, object);
continue;
}
diff --git a/gschem/src/s_stretch.c b/gschem/src/s_stretch.c
new file mode 100644
index 0000000..4fe472c
--- /dev/null
+++ b/gschem/src/s_stretch.c
@@ -0,0 +1,132 @@
+/* gEDA - GPL Electronic Design Automation
+ * libgeda - gEDA's library
+ * Copyright (C) 1998-2010 Ales Hvezda
+ * Copyright (C) 1998-2010 gEDA Contributors (see ChangeLog for details)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
+ */
+#include <config.h>
+
+#include <stdio.h>
+
+#include "gschem.h"
+
+#ifdef HAVE_LIBDMALLOC
+#include <dmalloc.h>
+#endif
+
+
+/*! \todo Finish function documentation!!!
+ * \brief
+ * \par Function Description
+ *
+ */
+GList *s_stretch_add (GList *list, OBJECT *object,
+ CONN *connection, int whichone)
+{
+ GList *s_iter;
+ STRETCH *s_new;
+
+ /* Check if the object is already in the stretch list */
+ for (s_iter = list; s_iter != NULL; s_iter = g_list_next (s_iter)) {
+ STRETCH *s_current = s_iter->data;
+ if (s_current->object->sid == object->sid) {
+ return list;
+ }
+ }
+
+ s_new = g_malloc (sizeof (STRETCH));
+ s_new->object = object;
+ s_new->connection = connection;
+ s_new->whichone = whichone;
+
+ return g_list_append (list, s_new);
+}
+
+
+/*! \brief Test if a STRETCH structure points at a given OBJECT
+ *
+ * \brief
+ * \par Function Description
+ * Compares if (STRETCH *)a->object == (OBJECT *)b
+ *
+ * \param [in] a The STRETCH structure
+ * \param [in] b The OBJECT to test for
+ * \returns 0 if STRETCH *a points to OBJECT *b, otherwise 1.
+ */
+static gint find_object (gconstpointer a, gconstpointer b)
+{
+ return (((STRETCH *)a)->object == (OBJECT *)b) ? 0 : 1;
+}
+
+
+/*! \todo Finish function documentation!!!
+ * \brief
+ * \par Function Description
+ *
+ */
+GList *s_stretch_remove (GList *list, OBJECT *object)
+{
+ GList *item;
+
+ g_return_val_if_fail (object != NULL, list);
+
+ item = g_list_find_custom (list, object, find_object);
+ g_free (item->data);
+
+ return g_list_delete_link (list, item);
+}
+
+
+/*! \todo Finish function documentation!!!
+ * \brief
+ * \par Function Description
+ *
+ */
+void s_stretch_print_all (GList *list)
+{
+ GList *iter;
+
+ printf("START printing stretch ********************\n");
+ for (iter = list; iter != NULL; iter = g_list_next (iter)) {
+ STRETCH *s_current = iter->data;
+
+ if (s_current->object) {
+ printf("Object: %s\n", s_current->object->name);
+ } else {
+ printf("Object is NULL\n");
+ }
+
+ if (s_current->connection) {
+ printf("Connection type: %d\n", s_current->connection->type);
+ } else {
+ printf("Connection is NULL\n");
+ }
+
+ printf("which one: %d\n", s_current->whichone);
+ }
+ printf("DONE printing stretch ********************\n\n");
+}
+
+/*! \todo Finish function documentation!!!
+ * \brief
+ * \par Function Description
+ *
+ */
+void s_stretch_destroy_all (GList *list)
+{
+ g_list_foreach (list, (GFunc)g_free, NULL);
+ g_list_free (list);
+}
diff --git a/libgeda/include/libgeda/prototype.h b/libgeda/include/libgeda/prototype.h
index ad9608a..1b60f7c 100644
--- a/libgeda/include/libgeda/prototype.h
+++ b/libgeda/include/libgeda/prototype.h
@@ -419,12 +419,6 @@ void s_slib_print_dirs(void);
char *s_slot_search_slot(OBJECT *object, OBJECT **return_found);
void s_slot_update_object(TOPLEVEL *toplevel, OBJECT *object);
-/* s_stretch.c */
-GList *s_stretch_add(GList *list, OBJECT *object, CONN *connection, int whichone);
-GList *s_stretch_remove(GList *list, OBJECT *object);
-void s_stretch_print_all(GList *list);
-void s_stretch_destroy_all(GList *list);
-
/* s_tile.c */
void s_tile_update_object(TOPLEVEL *toplevel, OBJECT *object);
GList *s_tile_get_objectlists(TOPLEVEL *toplevel, int world_x1, int world_y1, int world_x2, int world_y2);
diff --git a/libgeda/include/libgeda/struct.h b/libgeda/include/libgeda/struct.h
index 2abfbe2..fef18c7 100644
--- a/libgeda/include/libgeda/struct.h
+++ b/libgeda/include/libgeda/struct.h
@@ -51,9 +51,6 @@ typedef struct st_bounds BOUNDS;
typedef struct st_conn CONN;
typedef struct st_bus_ripper BUS_RIPPER;
-/* Used when you move objects and you want the nets/pins to stretch */
-typedef struct st_stretch STRETCH;
-
/* netlist structures (gnetlist) */
typedef struct st_netlist NETLIST;
typedef struct st_cpinlist CPINLIST;
@@ -324,14 +321,6 @@ struct st_bus_ripper
int y[2];
};
-struct st_stretch
-{
- OBJECT *object;
- CONN *connection;
-
- int whichone;
-};
-
struct st_bounds {
gint min_x;
gint min_y;
@@ -391,7 +380,6 @@ struct st_page {
SELECTION *selection_list; /* new selection mechanism */
GList *place_list;
OBJECT *object_lastplace; /* the last found item */
- GList *stretch_list;
char *page_filename;
int CHANGED; /* changed flag */
diff --git a/libgeda/src/Makefile.am b/libgeda/src/Makefile.am
index ba66781..ae62fe8 100644
--- a/libgeda/src/Makefile.am
+++ b/libgeda/src/Makefile.am
@@ -52,7 +52,6 @@ libgeda_la_SOURCES = \
s_path.c \
s_slib.c \
s_slot.c \
- s_stretch.c \
s_textbuffer.c \
s_tile.c \
s_toplevel.c \
diff --git a/libgeda/src/s_page.c b/libgeda/src/s_page.c
index 7a973ad..aa687d5 100644
--- a/libgeda/src/s_page.c
+++ b/libgeda/src/s_page.c
@@ -149,9 +149,6 @@ PAGE *s_page_new (TOPLEVEL *toplevel, const gchar *filename)
/* new selection mechanism */
page->selection_list = o_selection_new();
- /* net/pin/bus stretch when doing moves */
- page->stretch_list = NULL;
-
page->place_list = NULL;
/* init undo struct pointers */
@@ -248,8 +245,6 @@ void s_page_delete (TOPLEVEL *toplevel, PAGE *page)
#endif
s_tile_free_all (page);
- s_stretch_destroy_all (page->stretch_list);
-
/* free current page undo structs */
s_undo_free_all (toplevel, page);
diff --git a/libgeda/src/s_stretch.c b/libgeda/src/s_stretch.c
deleted file mode 100644
index 395f3fb..0000000
--- a/libgeda/src/s_stretch.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* gEDA - GPL Electronic Design Automation
- * libgeda - gEDA's library
- * Copyright (C) 1998-2010 Ales Hvezda
- * Copyright (C) 1998-2010 gEDA Contributors (see ChangeLog for details)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
- */
-#include <config.h>
-
-#include <stdio.h>
-#include <ctype.h>
-#if HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "libgeda_priv.h"
-
-#ifdef HAVE_LIBDMALLOC
-#include <dmalloc.h>
-#endif
-
-
-/*! \todo Finish function documentation!!!
- * \brief
- * \par Function Description
- *
- */
-GList *s_stretch_add (GList *list, OBJECT *object,
- CONN *connection, int whichone)
-{
- GList *s_iter;
- STRETCH *s_new;
-
- /* Check if the object is already in the stretch list */
- for (s_iter = list; s_iter != NULL; s_iter = g_list_next (s_iter)) {
- STRETCH *s_current = s_iter->data;
- if (s_current->object->sid == object->sid) {
- return list;
- }
- }
-
- s_new = g_malloc (sizeof (STRETCH));
- s_new->object = object;
- s_new->connection = connection;
- s_new->whichone = whichone;
-
- return g_list_append (list, s_new);
-}
-
-
-/*! \brief Test if a STRETCH structure points at a given OBJECT
- *
- * \brief
- * \par Function Description
- * Compares if (STRETCH *)a->object == (OBJECT *)b
- *
- * \param [in] a The STRETCH structure
- * \param [in] b The OBJECT to test for
- * \returns 0 if STRETCH *a points to OBJECT *b, otherwise 1.
- */
-static gint find_object (gconstpointer a, gconstpointer b)
-{
- return (((STRETCH *)a)->object == (OBJECT *)b) ? 0 : 1;
-}
-
-
-/*! \todo Finish function documentation!!!
- * \brief
- * \par Function Description
- *
- */
-GList *s_stretch_remove (GList *list, OBJECT *object)
-{
- GList *item;
-
- g_return_val_if_fail (object != NULL, list);
-
- item = g_list_find_custom (list, object, find_object);
- g_free (item->data);
-
- return g_list_delete_link (list, item);
-}
-
-
-/*! \todo Finish function documentation!!!
- * \brief
- * \par Function Description
- *
- */
-void s_stretch_print_all (GList *list)
-{
- GList *iter;
-
- printf("START printing stretch ********************\n");
- for (iter = list; iter != NULL; iter = g_list_next (iter)) {
- STRETCH *s_current = iter->data;
-
- if (s_current->object) {
- printf("Object: %s\n", s_current->object->name);
- } else {
- printf("Object is NULL\n");
- }
-
- if (s_current->connection) {
- printf("Connection type: %d\n", s_current->connection->type);
- } else {
- printf("Connection is NULL\n");
- }
-
- printf("which one: %d\n", s_current->whichone);
- }
- printf("DONE printing stretch ********************\n\n");
-}
-
-/*! \todo Finish function documentation!!!
- * \brief
- * \par Function Description
- *
- */
-void s_stretch_destroy_all (GList *list)
-{
- g_list_foreach (list, (GFunc)g_free, NULL);
- g_list_free (list);
-}
_______________________________________________
geda-cvs mailing list
geda-cvs@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-cvs