Index: trunk/doc-rnd/TODO =================================================================== --- trunk/doc-rnd/TODO (revision 1316) +++ trunk/doc-rnd/TODO (revision 1317) @@ -2,7 +2,6 @@ - test transition (after glib removal is finished so that valgrind works reasonably well again): - test gpmi search - get rid of gcode/lists.h, and vector.[ch] (autorouter) - - move fontmode BUGS - gpmi (and other buildings/plugins) not showing up in the about box Index: trunk/src/vector.c =================================================================== --- trunk/src/vector.c (revision 1316) +++ trunk/src/vector.c (nonexistent) @@ -1,222 +0,0 @@ -/* $Id$ */ - -/* - * COPYRIGHT - * - * PCB, interactive printed circuit board design - * Copyright (C) 1994,1995,1996 Thomas Nau - * Copyright (C) 1998,1999,2000,2001 harry eaton - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * Contact addresses for paper mail and Email: - * harry eaton, 6697 Buttonhole Ct, Columbia, MD 21044 USA - * haceaton@aplcomm.jhuapl.edu - * - */ - -/* this file, vector.c, was written and is - * Copyright (c) 2001 C. Scott Ananian. - */ - -/* operations on vectors. - */ - -#include "config.h" - -#include -#include -#ifdef HAVE_STRING_H -#include -#endif - -#include "global.h" -#include "vector.h" - - -RCSID("$Id$"); - -/* --------------------------------------------------------------------------- - * some local prototypes - */ - -/* --------------------------------------------------------------------------- - * some local types - */ -struct vector_struct { - vector_element_t *element; - int size, max; -}; - -/* --------------------------------------------------------------------------- - * some local identifiers - */ - -/* --------------------------------------------------------------------------- - * functions. - */ - -/* helper function for assertions */ -#ifndef NDEBUG -static int __vector_is_good(vector_t * vector) -{ - return vector && (vector->max == 0 || vector->element) && - (vector->max >= 0) && (vector->size >= 0) && (vector->size <= vector->max) && 1; -} -#endif /* !NDEBUG */ - -/* create an empty vector */ -vector_t *vector_create() -{ - vector_t *vector; - /* okay, create empty vector */ - vector = (vector_t *) calloc(1, sizeof(*vector)); - assert(vector); - assert(__vector_is_good(vector)); - return vector; -} - -/* destroy a vector */ -void vector_destroy(vector_t ** vector) -{ - assert(vector && *vector); - assert(__vector_is_good(*vector)); - if ((*vector)->element) - free((*vector)->element); - free(*vector); - *vector = NULL; -} - -/* -- interrogation -- */ -int vector_is_empty(vector_t * vector) -{ - assert(__vector_is_good(vector)); - return (vector->size == 0); -} - -int vector_size(vector_t * vector) -{ - assert(__vector_is_good(vector)); - return (vector->size); -} - -vector_element_t vector_element(vector_t * vector, int N) -{ - assert(__vector_is_good(vector)); - assert(N < vector->size); - return vector->element[N]; -} - -/* return the first element of the vector. */ -vector_element_t vector_element_first(vector_t * vector) -{ - assert(__vector_is_good(vector)); - assert(vector->size > 0); - return vector_element(vector, 0); -} - -/* return the last element of the vector. */ -vector_element_t vector_element_last(vector_t * vector) -{ - assert(__vector_is_good(vector)); - assert(vector->size > 0); - return vector_element(vector, vector->size - 1); -} - -/* -- mutation -- */ -/* add data to end of vector */ -void vector_append(vector_t * vector, vector_element_t data) -{ - vector_insert_many(vector, vector->size, &data, 1); -} - -void vector_append_many(vector_t * vector, vector_element_t data[], int count) -{ - vector_insert_many(vector, vector->size, data, count); -} - -void vector_append_vector(vector_t * vector, vector_t * other_vector) -{ - vector_append_many(vector, other_vector->element, other_vector->size); -} - -void vector_insert(vector_t * vector, int N, vector_element_t data) -{ - vector_insert_many(vector, N, &data, 1); -} - -/* add data at specified position of vector */ -void vector_insert_many(vector_t * vector, int N, vector_element_t data[], int count) -{ - assert(__vector_is_good(vector)); - assert(N <= vector->size); - if (count == 0) - return; - assert(data && count > 0); - if (vector->size + count > vector->max) { - vector->max = MAX(32, MAX(vector->size + count, vector->max * 2)); - vector->element = (void **) realloc(vector->element, vector->max * sizeof(*vector->element)); - } - memmove(vector->element + N + count, vector->element + N, (vector->size - N) * sizeof(*vector->element)); - memmove(vector->element + N, data, count * sizeof(*data)); - vector->size += count; - assert(__vector_is_good(vector)); -} - -vector_t *vector_duplicate(vector_t * orig) -{ - vector_t *newone = vector_create(); - if (!orig) - return newone; - newone->element = (void **) malloc(orig->max * sizeof(*orig->element)); - newone->max = orig->max; - newone->size = orig->size; - memcpy(newone->element, orig->element, orig->size * sizeof(vector_element_t)); - assert(__vector_is_good(newone)); - return newone; -} - -/* return and delete the *last* element of vector */ -vector_element_t vector_remove_last(vector_t * vector) -{ - assert(vector->size > 0); - return vector_remove(vector, vector->size - 1); -} - -/* return and delete data at specified position of vector */ -vector_element_t vector_remove(vector_t * vector, int N) -{ - vector_element_t old; - assert(__vector_is_good(vector)); - assert(N < vector->size); - old = vector->element[N]; - memmove(vector->element + N, vector->element + N + 1, (vector->size - (N + 1)) * sizeof(*vector->element)); - vector->size--; - assert(__vector_is_good(vector)); - return old; -} - -/* replace the data at the specified position with the given data. - * returns the old data. */ -vector_element_t vector_replace(vector_t * vector, vector_element_t data, int N) -{ - vector_element_t old; - assert(__vector_is_good(vector)); - assert(N < vector->size); - old = vector->element[N]; - vector->element[N] = data; - assert(__vector_is_good(vector)); - return old; -} Index: trunk/src/vector.h =================================================================== --- trunk/src/vector.h (revision 1316) +++ trunk/src/vector.h (nonexistent) @@ -1,78 +0,0 @@ -/* $Id$ */ - -/* - * COPYRIGHT - * - * PCB, interactive printed circuit board design - * Copyright (C) 1994,1995,1996 Thomas Nau - * Copyright (C) 1998,1999,2000,2001 harry eaton - * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * Contact addresses for paper mail and Email: - * harry eaton, 6697 Buttonhole Ct, Columbia, MD 21044 USA - * haceaton@aplcomm.jhuapl.edu - * - */ - -/* this file, vector.h, was written and is - * Copyright (c) 2001 C. Scott Ananian. - */ - -/* prototypes for vector routines. - */ - -#ifndef PCB_VECTOR_H -#define PCB_VECTOR_H - -/* what a vector looks like */ -typedef struct vector_struct vector_t; -/* what data in a vector looks like */ -typedef void *vector_element_t; - -/* create an empty vector */ -vector_t *vector_create(); -/* destroy a vector */ -void vector_destroy(vector_t ** vector); -/* copy a vector */ -vector_t *vector_duplicate(vector_t * vector); - -/* -- interrogation -- */ -int vector_is_empty(vector_t * vector); -int vector_size(vector_t * vector); -vector_element_t vector_element(vector_t * vector, int N); -vector_element_t vector_element_first(vector_t * vector); -vector_element_t vector_element_last(vector_t * vector); - -/* -- mutation -- */ -/* add data to end of vector */ -void vector_append(vector_t * vector, vector_element_t data); -/* add multiple elements to end of vector */ -void vector_append_many(vector_t * vector, vector_element_t data[], int count); -/* add a vector of elements to the end of vector */ -void vector_append_vector(vector_t * vector, vector_t * other_vector); -/* add data at specified position of vector */ -void vector_insert(vector_t * vector, int N, vector_element_t data); -/* add multiple elements at specified position of vector */ -void vector_insert_many(vector_t * vector, int N, vector_element_t data[], int count); -/* return and delete the *last* element of vector */ -vector_element_t vector_remove_last(vector_t * vector); -/* return and delete data at specified position of vector */ -vector_element_t vector_remove(vector_t * vector, int N); -/* replace the data at the specified position with the given data. - * returns the old data. */ -vector_element_t vector_replace(vector_t * vector, vector_element_t data, int N); - -#endif /* PCB_VECTOR_H */ Index: trunk/src/Makefile.dep =================================================================== --- trunk/src/Makefile.dep (revision 1316) +++ trunk/src/Makefile.dep (revision 1317) @@ -666,15 +666,6 @@ list_element.h libpcb_fp.h data.h action.h action_funclist.h \ action_funchash.h change.h error.h crosshair.h undo.h polygon.h set.h \ search.h draw.h misc.h ../src_3rd/genvector/gds_char.h mymem.h -vector.o: vector.c ../config.h ../config.manual.h ../config.auto.h \ - global.h const.h ../globalconst.h ../config.h macro.h global_typedefs.h \ - global_objs.h ../src_3rd/genlist/gendlist.h polyarea.h list_common.h \ - list_line.h ../src_3rd/genlist/gentdlist_impl.h \ - ../src_3rd/genlist/gendlist.h ../src_3rd/genlist/gentdlist_undef.h \ - list_arc.h list_text.h list_poly.h list_pad.h list_pin.h list_rat.h \ - vtonpoint.h ../src_3rd/genvector/genvector_impl.h \ - ../src_3rd/genvector/genvector_undef.h hid.h global_element.h \ - list_element.h libpcb_fp.h vector.h vtonpoint.o: vtonpoint.c vtonpoint.h global_objs.h \ ../src_3rd/genlist/gendlist.h ../config.h ../config.manual.h \ ../config.auto.h ../globalconst.h ../config.h global_typedefs.h \ @@ -1278,8 +1269,9 @@ list_element.h libpcb_fp.h data.h global.h macro.h \ ../src_plugins/autoroute/autoroute.h box.h misc.h \ ../src_3rd/genvector/gds_char.h mymem.h create.h draw.h error.h find.h \ - heap.h rtree.h misc.h ../src_plugins/autoroute/mtspace.h vector.h \ - mymem.h polygon.h rats.h remove.h thermal.h undo.h pcb-printf.h set.h + heap.h rtree.h misc.h ../src_plugins/autoroute/mtspace.h \ + ../src_plugins/autoroute/vector.h mymem.h polygon.h rats.h remove.h \ + thermal.h undo.h pcb-printf.h set.h ../src_plugins/autoroute/mtspace.o: ../src_plugins/autoroute/mtspace.c \ ../config.h ../config.manual.h ../config.auto.h global.h const.h \ ../globalconst.h ../config.h macro.h global_typedefs.h global_objs.h \ @@ -1291,7 +1283,7 @@ ../src_3rd/genvector/genvector_undef.h hid.h global_element.h \ list_element.h libpcb_fp.h box.h global.h misc.h \ ../src_3rd/genvector/gds_char.h mymem.h heap.h rtree.h \ - ../src_plugins/autoroute/mtspace.h vector.h + ../src_plugins/autoroute/mtspace.h ../src_plugins/autoroute/vector.h ../src_plugins/autoroute/action.o: ../src_plugins/autoroute/action.c \ ../config.h ../config.manual.h ../config.auto.h global.h const.h \ ../globalconst.h ../config.h macro.h global_typedefs.h global_objs.h \ @@ -1303,6 +1295,16 @@ ../src_3rd/genvector/genvector_undef.h hid.h global_element.h \ list_element.h libpcb_fp.h ../src_plugins/autoroute/autoroute.h \ plugins.h set.h global.h dolists.h +../src_plugins/autoroute/vector.o: ../src_plugins/autoroute/vector.c \ + ../config.h ../config.manual.h ../config.auto.h global.h const.h \ + ../globalconst.h ../config.h macro.h global_typedefs.h global_objs.h \ + ../src_3rd/genlist/gendlist.h polyarea.h list_common.h list_line.h \ + ../src_3rd/genlist/gentdlist_impl.h ../src_3rd/genlist/gendlist.h \ + ../src_3rd/genlist/gentdlist_undef.h list_arc.h list_text.h list_poly.h \ + list_pad.h list_pin.h list_rat.h vtonpoint.h \ + ../src_3rd/genvector/genvector_impl.h \ + ../src_3rd/genvector/genvector_undef.h hid.h global_element.h \ + list_element.h libpcb_fp.h ../src_plugins/autoroute/vector.h ../src_plugins/vendordrill/vendor.o: ../src_plugins/vendordrill/vendor.c \ ../config.h ../config.manual.h ../config.auto.h change.h global.h \ const.h ../globalconst.h ../config.h macro.h global_typedefs.h \ Index: trunk/src/Makefile.in =================================================================== --- trunk/src/Makefile.in (revision 1316) +++ trunk/src/Makefile.in (revision 1317) @@ -80,7 +80,6 @@ thermal.o undo.o undo_act.o - vector.o vtonpoint.o hid/common/actions.o hid/common/flags.o Index: trunk/src_plugins/autoroute/Plug.tmpasm =================================================================== --- trunk/src_plugins/autoroute/Plug.tmpasm (revision 1316) +++ trunk/src_plugins/autoroute/Plug.tmpasm (revision 1317) @@ -2,7 +2,7 @@ append /local/pcb/autoroute/buildin {} put /local/pcb/mod {autoroute} -put /local/pcb/mod/OBJS [@ $(PLUGDIR)/autoroute/autoroute.o $(PLUGDIR)/autoroute/mtspace.o $(PLUGDIR)/autoroute/action.o @] +put /local/pcb/mod/OBJS [@ $(PLUGDIR)/autoroute/autoroute.o $(PLUGDIR)/autoroute/mtspace.o $(PLUGDIR)/autoroute/action.o $(PLUGDIR)/autoroute/vector.o @] if /local/pcb/autoroute/enable then if /local/pcb/autoroute/buildin then Index: trunk/src_plugins/autoroute/vector.c =================================================================== --- trunk/src_plugins/autoroute/vector.c (nonexistent) +++ trunk/src_plugins/autoroute/vector.c (revision 1317) @@ -0,0 +1,222 @@ +/* $Id$ */ + +/* + * COPYRIGHT + * + * PCB, interactive printed circuit board design + * Copyright (C) 1994,1995,1996 Thomas Nau + * Copyright (C) 1998,1999,2000,2001 harry eaton + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Contact addresses for paper mail and Email: + * harry eaton, 6697 Buttonhole Ct, Columbia, MD 21044 USA + * haceaton@aplcomm.jhuapl.edu + * + */ + +/* this file, vector.c, was written and is + * Copyright (c) 2001 C. Scott Ananian. + */ + +/* operations on vectors. + */ + +#include "config.h" + +#include +#include +#ifdef HAVE_STRING_H +#include +#endif + +#include "global.h" +#include "vector.h" + + +RCSID("$Id$"); + +/* --------------------------------------------------------------------------- + * some local prototypes + */ + +/* --------------------------------------------------------------------------- + * some local types + */ +struct vector_struct { + vector_element_t *element; + int size, max; +}; + +/* --------------------------------------------------------------------------- + * some local identifiers + */ + +/* --------------------------------------------------------------------------- + * functions. + */ + +/* helper function for assertions */ +#ifndef NDEBUG +static int __vector_is_good(vector_t * vector) +{ + return vector && (vector->max == 0 || vector->element) && + (vector->max >= 0) && (vector->size >= 0) && (vector->size <= vector->max) && 1; +} +#endif /* !NDEBUG */ + +/* create an empty vector */ +vector_t *vector_create() +{ + vector_t *vector; + /* okay, create empty vector */ + vector = (vector_t *) calloc(1, sizeof(*vector)); + assert(vector); + assert(__vector_is_good(vector)); + return vector; +} + +/* destroy a vector */ +void vector_destroy(vector_t ** vector) +{ + assert(vector && *vector); + assert(__vector_is_good(*vector)); + if ((*vector)->element) + free((*vector)->element); + free(*vector); + *vector = NULL; +} + +/* -- interrogation -- */ +int vector_is_empty(vector_t * vector) +{ + assert(__vector_is_good(vector)); + return (vector->size == 0); +} + +int vector_size(vector_t * vector) +{ + assert(__vector_is_good(vector)); + return (vector->size); +} + +vector_element_t vector_element(vector_t * vector, int N) +{ + assert(__vector_is_good(vector)); + assert(N < vector->size); + return vector->element[N]; +} + +/* return the first element of the vector. */ +vector_element_t vector_element_first(vector_t * vector) +{ + assert(__vector_is_good(vector)); + assert(vector->size > 0); + return vector_element(vector, 0); +} + +/* return the last element of the vector. */ +vector_element_t vector_element_last(vector_t * vector) +{ + assert(__vector_is_good(vector)); + assert(vector->size > 0); + return vector_element(vector, vector->size - 1); +} + +/* -- mutation -- */ +/* add data to end of vector */ +void vector_append(vector_t * vector, vector_element_t data) +{ + vector_insert_many(vector, vector->size, &data, 1); +} + +void vector_append_many(vector_t * vector, vector_element_t data[], int count) +{ + vector_insert_many(vector, vector->size, data, count); +} + +void vector_append_vector(vector_t * vector, vector_t * other_vector) +{ + vector_append_many(vector, other_vector->element, other_vector->size); +} + +void vector_insert(vector_t * vector, int N, vector_element_t data) +{ + vector_insert_many(vector, N, &data, 1); +} + +/* add data at specified position of vector */ +void vector_insert_many(vector_t * vector, int N, vector_element_t data[], int count) +{ + assert(__vector_is_good(vector)); + assert(N <= vector->size); + if (count == 0) + return; + assert(data && count > 0); + if (vector->size + count > vector->max) { + vector->max = MAX(32, MAX(vector->size + count, vector->max * 2)); + vector->element = (void **) realloc(vector->element, vector->max * sizeof(*vector->element)); + } + memmove(vector->element + N + count, vector->element + N, (vector->size - N) * sizeof(*vector->element)); + memmove(vector->element + N, data, count * sizeof(*data)); + vector->size += count; + assert(__vector_is_good(vector)); +} + +vector_t *vector_duplicate(vector_t * orig) +{ + vector_t *newone = vector_create(); + if (!orig) + return newone; + newone->element = (void **) malloc(orig->max * sizeof(*orig->element)); + newone->max = orig->max; + newone->size = orig->size; + memcpy(newone->element, orig->element, orig->size * sizeof(vector_element_t)); + assert(__vector_is_good(newone)); + return newone; +} + +/* return and delete the *last* element of vector */ +vector_element_t vector_remove_last(vector_t * vector) +{ + assert(vector->size > 0); + return vector_remove(vector, vector->size - 1); +} + +/* return and delete data at specified position of vector */ +vector_element_t vector_remove(vector_t * vector, int N) +{ + vector_element_t old; + assert(__vector_is_good(vector)); + assert(N < vector->size); + old = vector->element[N]; + memmove(vector->element + N, vector->element + N + 1, (vector->size - (N + 1)) * sizeof(*vector->element)); + vector->size--; + assert(__vector_is_good(vector)); + return old; +} + +/* replace the data at the specified position with the given data. + * returns the old data. */ +vector_element_t vector_replace(vector_t * vector, vector_element_t data, int N) +{ + vector_element_t old; + assert(__vector_is_good(vector)); + assert(N < vector->size); + old = vector->element[N]; + vector->element[N] = data; + assert(__vector_is_good(vector)); + return old; +} Index: trunk/src_plugins/autoroute/vector.h =================================================================== --- trunk/src_plugins/autoroute/vector.h (nonexistent) +++ trunk/src_plugins/autoroute/vector.h (revision 1317) @@ -0,0 +1,78 @@ +/* $Id$ */ + +/* + * COPYRIGHT + * + * PCB, interactive printed circuit board design + * Copyright (C) 1994,1995,1996 Thomas Nau + * Copyright (C) 1998,1999,2000,2001 harry eaton + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Contact addresses for paper mail and Email: + * harry eaton, 6697 Buttonhole Ct, Columbia, MD 21044 USA + * haceaton@aplcomm.jhuapl.edu + * + */ + +/* this file, vector.h, was written and is + * Copyright (c) 2001 C. Scott Ananian. + */ + +/* prototypes for vector routines. + */ + +#ifndef PCB_VECTOR_H +#define PCB_VECTOR_H + +/* what a vector looks like */ +typedef struct vector_struct vector_t; +/* what data in a vector looks like */ +typedef void *vector_element_t; + +/* create an empty vector */ +vector_t *vector_create(); +/* destroy a vector */ +void vector_destroy(vector_t ** vector); +/* copy a vector */ +vector_t *vector_duplicate(vector_t * vector); + +/* -- interrogation -- */ +int vector_is_empty(vector_t * vector); +int vector_size(vector_t * vector); +vector_element_t vector_element(vector_t * vector, int N); +vector_element_t vector_element_first(vector_t * vector); +vector_element_t vector_element_last(vector_t * vector); + +/* -- mutation -- */ +/* add data to end of vector */ +void vector_append(vector_t * vector, vector_element_t data); +/* add multiple elements to end of vector */ +void vector_append_many(vector_t * vector, vector_element_t data[], int count); +/* add a vector of elements to the end of vector */ +void vector_append_vector(vector_t * vector, vector_t * other_vector); +/* add data at specified position of vector */ +void vector_insert(vector_t * vector, int N, vector_element_t data); +/* add multiple elements at specified position of vector */ +void vector_insert_many(vector_t * vector, int N, vector_element_t data[], int count); +/* return and delete the *last* element of vector */ +vector_element_t vector_remove_last(vector_t * vector); +/* return and delete data at specified position of vector */ +vector_element_t vector_remove(vector_t * vector, int N); +/* replace the data at the specified position with the given data. + * returns the old data. */ +vector_element_t vector_replace(vector_t * vector, vector_element_t data, int N); + +#endif /* PCB_VECTOR_H */