[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: gEDA-user: pcb-20100929 released
Great!
Now let me suggest some kind of "Patchlevel 0".
Most of these patches deal with well-known issues
discussed on the list or on the tracker; some of them
are years old.
Of course, there are lots of more patches e.g. on the tracker;
I just randomly picked some obvious ones that were not likely
to cause strong objections.
The developers have no resources to push them into master;
however, the users could collect them and release inofficially.
If somebody is interested, we could discuss what we want
to be included, and what we don't; if nobody is interested,
I'll just stack more patches than otherwise expected and
use them locally.
Best wishes,
Ineiev
From 9b8d3cda761b1a719d10768cd34d4908c70023a5 Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Sun, 12 Sep 2010 08:14:14 +0000
Subject: [PATCH 01/12] RectPoly: check arguments to avoid empty polygons
fixes PCB segfaults when running DRC #3064413
---
src/polygon.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/polygon.c b/src/polygon.c
index 586e8cc..72e65d5 100644
--- a/src/polygon.c
+++ b/src/polygon.c
@@ -330,8 +330,8 @@ RectPoly (LocationType x1, LocationType x2, LocationType y1, LocationType y2)
PLINE *contour = NULL;
Vector v;
- assert (x2 > x1);
- assert (y2 > y1);
+ if (x1 >= x2 || y1 >= y2)
+ return NULL;
v[0] = x1;
v[1] = y1;
if ((contour = poly_NewContour (v)) == NULL)
--
1.6.5.2
From 1e25441acaa40ceff0518e71b6d5f87cbc322bb8 Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 20 Feb 2009 20:19:01 +0300
Subject: [PATCH 02/12] misfix annoying decimals bug 1741659
bug report by Kai-Martin Knaak
also make polar coordinates less verbous
---
src/hid/gtk/gui-misc.c | 88 ++++++++++++++++++++++++++++++++++-------------
1 files changed, 63 insertions(+), 25 deletions(-)
diff --git a/src/hid/gtk/gui-misc.c b/src/hid/gtk/gui-misc.c
index a607a69..5ffbbd6 100644
--- a/src/hid/gtk/gui-misc.c
+++ b/src/hid/gtk/gui-misc.c
@@ -1,10 +1,8 @@
-/* $Id$ */
-
/*
* COPYRIGHT
*
* PCB, interactive printed circuit board design
- * Copyright (C) 1994,1995,1996 Thomas Nau
+ * Copyright (C) 1994,1995,1996,2009 Thomas Nau
*
* 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
@@ -42,8 +40,6 @@
#include <dmalloc.h>
#endif
-RCSID ("$Id$");
-
#define DEFAULT_CURSORSHAPE GDK_CROSSHAIR
#define CUSTOM_CURSOR_CLOCKWISE (GDK_LAST_CURSOR + 10)
@@ -549,6 +545,53 @@ ghid_set_status_line_label (void)
ghid_status_line_set_text (text);
}
+/* returns an auxiliary value needed to adjust mm grid.
+ the adjustment is needed to prevent ..99 tails in position labels.
+
+ All these are a workaround to precision lost
+ because of double->integer transform
+ while fitting Crosshair to grid in crosshair.c
+
+ There is another way to fix: report mm dimensions with %.3f, like
+ in the Lesstif hid; but this reduces the information
+ */
+static double
+ghid_get_grid_factor(void)
+{
+ /* when grid units are mm, they shall be an integer of
+ 1 mm / grid_factor_per_mm */
+ const int grid_factor_per_mm = 10000;/*min grid is .1 um < PCB unit*/
+ if (Settings.grid_units_mm)
+ return floor (PCB->Grid * COOR_TO_MM * grid_factor_per_mm +.5) /
+ grid_factor_per_mm;
+ return 0;
+}
+/* transforms a pcb coordinate to selected units
+ adjusted to the nearest grid point for mm grid */
+static double
+ghid_grid_pcb_to_units (double x, double grid_factor)
+{
+ double x_scaled = (Settings.grid_units_mm? COOR_TO_MM: 1./100) * x;
+ double nearest_gridpoint;
+
+ if (PCB->Grid < 4.5)/*nothing to adjust: the grid is too fine */
+ return x_scaled;
+ /* adjustment is not needed for inches
+ probably because x/100 is always 'integer' enough */
+ if (!Settings.grid_units_mm)
+ return x_scaled;
+ nearest_gridpoint = floor (x / PCB->Grid + .5);
+ /* honour snapping to an unaligned object */
+ if (fabs (nearest_gridpoint * PCB->Grid - x) > 1)
+ return x_scaled;
+ /* without mm-adjusted grid_factor
+ (return floor (x / PCB->Grid + .5) * PCB->Grid * COOR_TO_MM),
+ the bug appears for 0.1 or 0.05 mm grid at coordinates more than 4000 mm.
+ grid_factor makes the stuff work at least up to 254 m,
+ which is 100 times more than maximum board size as of Aug 2010. */
+ return nearest_gridpoint * grid_factor;
+}
+
/* ---------------------------------------------------------------------------
* output of cursor position
*/
@@ -556,32 +599,27 @@ void
ghid_set_cursor_position_labels (void)
{
gchar text[128];
+ int prec = Settings.grid_units_mm ? 4: 2;
+ double grid_factor = ghid_get_grid_factor();
if (Marked.status)
- {double scale, dx, dy, r, a;
- scale = Settings.grid_units_mm ? COOR_TO_MM: 1. / 100;
- dx = (Crosshair.X - Marked.X) * scale;
- dy = (Marked.Y - Crosshair.Y) * scale;
- r = sqrt( dx * dx + dy * dy);
- a = atan2(dy, dx) * 180 / M_PI;
- if (Settings.grid_units_mm)
- snprintf (text, sizeof (text), "r %-.4f; phi %-.1f; %-.4f %-.4f",
- r, a, dx, dy);
-
- else
- snprintf (text, sizeof (text), "r %-.2f; phi %-.1f; %-.2f %-.2f",
- r, a, dx, dy);
+ {
+ double dx, dy, r, a;
+
+ dx = ghid_grid_pcb_to_units (Crosshair.X - Marked.X, grid_factor);
+ dy = ghid_grid_pcb_to_units (Crosshair.Y - Marked.Y, grid_factor);
+ r = sqrt (dx * dx + dy * dy);
+ a = atan2 (dy, dx) * RAD_TO_DEG;
+ snprintf (text, sizeof (text), "%-.*f %-.1f; %-.*f %-.*f",
+ prec, r, a, prec, dx, prec, dy);
ghid_cursor_position_relative_label_set_text (text);
}
else
- ghid_cursor_position_relative_label_set_text ("r __.__; phi __._; __.__ __.__");
+ ghid_cursor_position_relative_label_set_text ("__.__ __._; __.__ __.__");
- if (Settings.grid_units_mm)
- snprintf (text, sizeof (text), "%-.4f %-.4f",
- COOR_TO_MM * Crosshair.X, COOR_TO_MM * Crosshair.Y);
- else
- snprintf (text, sizeof (text), "%-.2f %-.2f",
- Crosshair.X / 100., Crosshair.Y / 100.);
+ snprintf (text, sizeof (text), "%-.*f %-.*f",
+ prec, ghid_grid_pcb_to_units (Crosshair.X, grid_factor),
+ prec, ghid_grid_pcb_to_units (Crosshair.Y, grid_factor));
ghid_cursor_position_label_set_text (text);
}
--
1.6.5.2
From 54c234dd5447afc90377b736b31cc43dd9c685e5 Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 20 Feb 2009 21:36:32 +0300
Subject: [PATCH 03/12] misfix disappearing crosshair mark
bug 1882970 (reported by Steven Michalske hardkrash)
(0) when the cursor leaves the window,
the mark disappears (with attached objects);
when the cursor enters again, the mark
is redrawn only if there are any attached objects;
(1) When there are no attached objects,
the mark disappears on button press, but is not
redrawn again when button press and release form
a click.
---
src/hid/gtk/gui-output-events.c | 42 ++++++--------------------------------
1 files changed, 7 insertions(+), 35 deletions(-)
diff --git a/src/hid/gtk/gui-output-events.c b/src/hid/gtk/gui-output-events.c
index 6164415..def375e 100644
--- a/src/hid/gtk/gui-output-events.c
+++ b/src/hid/gtk/gui-output-events.c
@@ -1,5 +1,3 @@
-/* $Id$ */
-
/*
* COPYRIGHT
*
@@ -54,14 +52,7 @@
#define TOOLTIP_UPDATE_DELAY 200
-RCSID ("$Id$");
-
static gint x_pan_speed, y_pan_speed;
-
-/* Set to true if cursor is currently in viewport. This is a hack to prevent
- * Crosshair stack corruption due to unmatching window enter / leave events */
-gboolean cursor_in_viewport = false;
-
void
ghid_port_ranges_changed (void)
{
@@ -627,7 +618,6 @@ ghid_port_button_press_cb (GtkWidget * drawing_area,
GdkEventButton * ev, GtkUIManager * ui)
{
ModifierKeysState mk;
- gboolean drag;
GdkModifierType state;
/* Reject double and triple click events */
@@ -638,7 +628,6 @@ ghid_port_button_press_cb (GtkWidget * drawing_area,
mk = ghid_modifier_keys_state (&state);
ghid_show_crosshair (FALSE);
HideCrosshair (TRUE);
- drag = have_crosshair_attachments ();
do_mouse_action(ev->button, mk);
@@ -657,26 +646,21 @@ ghid_port_button_release_cb (GtkWidget * drawing_area,
GdkEventButton * ev, GtkUIManager * ui)
{
ModifierKeysState mk;
- gboolean drag;
GdkModifierType state;
ghid_note_event_location (ev);
state = (GdkModifierType) (ev->state);
mk = ghid_modifier_keys_state (&state);
- drag = have_crosshair_attachments ();
- if (drag)
- HideCrosshair (TRUE);
+ HideCrosshair (TRUE);
do_mouse_action(ev->button, mk + M_Release);
- if (drag)
- {
- AdjustAttachedObjects ();
- ghid_invalidate_all ();
- RestoreCrosshair (TRUE);
- ghid_screen_update ();
- }
+ AdjustAttachedObjects ();
+ ghid_invalidate_all ();
+ RestoreCrosshair (TRUE);
+ ghid_screen_update ();
+
ghid_set_status_line_label ();
g_idle_add (ghid_idle_cb, NULL);
return TRUE;
@@ -939,13 +923,7 @@ ghid_port_window_enter_cb (GtkWidget * widget,
{
ghid_screen_update ();
}
-
- if(! cursor_in_viewport)
- {
- RestoreCrosshair (TRUE);
- cursor_in_viewport = TRUE;
- }
-
+ CrosshairOn (TRUE);
return FALSE;
}
@@ -1037,12 +1015,6 @@ ghid_port_window_leave_cb (GtkWidget * widget,
}
}
- if(cursor_in_viewport)
- {
- HideCrosshair (TRUE);
- cursor_in_viewport = FALSE;
- }
-
ghid_show_crosshair (FALSE);
out->has_entered = FALSE;
--
1.6.5.2
From 95ffb71c27616b0a4a9af861b71655c318065148 Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Thu, 30 Jul 2009 04:15:08 +0000
Subject: [PATCH 04/12] GTK: misfix RouteStylesChanged action [2826008]
trigger ghid_route_style_buttons_update to
update button states
---
src/hid/gtk/gtkhid-main.c | 1 +
src/hid/gtk/gui-top-window.c | 11 +++++++----
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/hid/gtk/gtkhid-main.c b/src/hid/gtk/gtkhid-main.c
index 7d59672..cde233a 100644
--- a/src/hid/gtk/gtkhid-main.c
+++ b/src/hid/gtk/gtkhid-main.c
@@ -1269,6 +1269,7 @@ RouteStylesChanged (int argc, char **argv, int x, int y)
if (PCB && PCB->RouteStyle[0].Name)
for (n = 0; n < NUM_STYLES; ++n)
ghid_route_style_set_button_label ((&PCB->RouteStyle[n])->Name, n);
+ ghid_route_style_buttons_update ();
return 0;
}
diff --git a/src/hid/gtk/gui-top-window.c b/src/hid/gtk/gui-top-window.c
index 9c30a93..e241600 100644
--- a/src/hid/gtk/gui-top-window.c
+++ b/src/hid/gtk/gui-top-window.c
@@ -1883,7 +1883,7 @@ make_route_style_buttons (GtkWidget * vbox, GHidPort * port)
void
ghid_route_style_button_set_active (gint n)
{
- if (n < 0 || n >= N_ROUTE_STYLES)
+ if (n < 0 || n >= N_ROUTE_STYLES || !route_style_button[n].button)
return;
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
@@ -1900,6 +1900,9 @@ ghid_route_style_buttons_update (void)
RouteStyleType *rst;
gint i;
+ if (NULL == PCB || NULL == ghidgui)
+ return;
+
for (i = 0; i < NUM_STYLES + 2; ++i)
{
if (i < NUM_STYLES)
@@ -1922,9 +1925,9 @@ ghid_route_style_buttons_update (void)
ghid_route_style_button_set_active (i);
route_style_index = i;
ghidgui->toggle_holdoff = FALSE;
-
- gtk_widget_set_sensitive (route_style_edit_button,
- (i == NUM_STYLES + 2) ? FALSE : TRUE);
+ if (route_style_edit_button)
+ gtk_widget_set_sensitive (route_style_edit_button,
+ (i == NUM_STYLES + 2) ? FALSE : TRUE);
}
void
--
1.6.5.2
From 2b814821e47f97bc82a306b8cc339ae35332a11e Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Fri, 27 Nov 2009 09:12:31 +0300
Subject: [PATCH 05/12] fix some lines producing typos in pcb.pdf
---
src/action.c | 27 +++++++++++++--------------
1 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/src/action.c b/src/action.c
index f52fcf4..a7f82d8 100644
--- a/src/action.c
+++ b/src/action.c
@@ -2522,7 +2522,7 @@ static const char display_syntax[] =
"Display(ToggleThindraw|ToggleThindrawPoly|ToggleOrthoMove|ToggleLocalRef)\n"
"Display(ToggleCheckPlanes|ToggleShowDRC|ToggleAutoDRC)\n"
"Display(ToggleLiveRoute|LockNames|OnlyNames)\n"
- "Display(Pinout|PinOrPadName)\n" "Display(Scroll, Direction)";
+ "Display(Pinout|PinOrPadName)\nDisplay(Scroll, Direction)";
static const char display_help[] = "Several display-related actions.";
@@ -2972,7 +2972,7 @@ ActionDisplay (int argc, char **argv, int childX, int childY)
static const char mode_syntax[] =
"Mode(Arc|Arrow|Copy|InsertPoint|Line|Lock|Move|None|PasteBuffer)\n"
"Mode(Polygon|Rectangle|Remove|Rotate|Text|Thermal|Via)\n"
- "Mode(Notify|Release|Cancel|Stroke)\n" "Mode(Save|Restore)";
+ "Mode(Notify|Release|Cancel|Stroke)\nMode(Save|Restore)";
static const char mode_help[] = "Change or use the tool mode.";
@@ -3262,7 +3262,7 @@ ActionRemoveSelected (int argc, char **argv, int x, int y)
/* --------------------------------------------------------------------------- */
-static const char renumber_syntax[] = "Renumber()\n" "Renumber(filename)";
+static const char renumber_syntax[] = "Renumber()\nRenumber(filename)";
static const char renumber_help[] =
"Renumber all elements. The changes will be recorded to filename\n"
@@ -3823,8 +3823,7 @@ ActionAddRats (int argc, char **argv, int x, int y)
static const char delete_syntax[] =
"Delete(Object|Selected)\n"
- "Delete(AllRats|SelectedRats)"
- ;
+ "Delete(AllRats|SelectedRats)";
static const char delete_help[] = "Delete stuff.";
@@ -3995,7 +3994,7 @@ ActionAutoRoute (int argc, char **argv, int x, int y)
/* --------------------------------------------------------------------------- */
static const char markcrosshair_syntax[] =
- "MarkCrosshair()\n" "MarkCrosshair(Center)";
+ "MarkCrosshair()\nMarkCrosshair(Center)";
static const char markcrosshair_help[] = "Set/Reset the Crosshair mark";
@@ -4290,7 +4289,7 @@ ActionChangeClearSize (int argc, char **argv, int x, int y)
/* --------------------------------------------------------------------------- */
static const char minmaskgap_syntax[] =
- "MinMaskGap(delta)\n" "MinMaskGap(Selected, delta)";
+ "MinMaskGap(delta)\nMinMaskGap(Selected, delta)";
static const char minmaskgap_help[] =
"Ensures the mask is a minimum distance from pins and pads.";
@@ -4374,7 +4373,7 @@ ActionMinMaskGap (int argc, char **argv, int x, int y)
/* --------------------------------------------------------------------------- */
static const char mincleargap_syntax[] =
- "MinClearGap(delta)\n" "MinClearGap(Selected, delta)";
+ "MinClearGap(delta)\nMinClearGap(Selected, delta)";
static const char mincleargap_help[] =
"Ensures that polygons are a minimum distance from objects.";
@@ -4573,7 +4572,7 @@ ActionChangePinName (int argc, char **argv, int x, int y)
/* --------------------------------------------------------------------------- */
static const char changename_syntax[] =
- "ChangeName(Object)\n" "ChangeName(Layout|Layer)";
+ "ChangeName(Object)\nChangeName(Layout|Layer)";
static const char changename_help[] = "Sets the name of objects.";
@@ -5345,7 +5344,7 @@ static const char select_syntax[] =
"Select(ElementByName|ObjectByName|PadByName|PinByName)\n"
"Select(ElementByName|ObjectByName|PadByName|PinByName, Name)\n"
"Select(TextByName|ViaByName)\n"
- "Select(TextByName|ViaByName, Name)\n" "Select(Convert)";
+ "Select(TextByName|ViaByName, Name)\nSelect(Convert)";
static const char select_help[] = "Toggles or sets the selection";
@@ -5534,7 +5533,7 @@ static const char unselect_syntax[] =
"Unselect(All|Block|Connection)\n"
"Unselect(ElementByName|ObjectByName|PadByName|PinByName)\n"
"Unselect(ElementByName|ObjectByName|PadByName|PinByName, Name)\n"
- "Unselect(TextByName|ViaByName)\n" "Unselect(TextByName|ViaByName, Name)\n";
+ "Unselect(TextByName|ViaByName)\nUnselect(TextByName|ViaByName, Name)\n";
static const char unselect_help[] =
"unselects the object at the pointer location or the specified objects";
@@ -5795,7 +5794,7 @@ ActionSaveTo (int argc, char **argv, int x, int y)
/* --------------------------------------------------------------------------- */
static const char savesettings_syntax[] =
- "SaveSettings()\n" "SaveSettings(local)";
+ "SaveSettings()\nSaveSettings(local)";
static const char savesettings_help[] = "Saves settings.";
@@ -6183,7 +6182,7 @@ ActionPasteBuffer (int argc, char **argv, int x, int y)
/* --------------------------------------------------------------------------- */
-static const char undo_syntax[] = "Undo()\n" "Undo(ClearList)";
+static const char undo_syntax[] = "Undo()\nUndo(ClearList)";
static const char undo_help[] = "Undo recent changes.";
@@ -6732,7 +6731,7 @@ static const char changeflag_syntax[] =
"ChangeFlag(SelectedLines|SelectedPins|SelectedVias, flag, value)\n"
"ChangeFlag(SelectedPads|SelectedTexts|SelectedNames, flag, value)\n"
"ChangeFlag(SelectedElements, flag, value)\n"
- "flag = square | octagon | thermal | join\n" "value = 0 | 1";
+ "flag = square | octagon | thermal | join\nvalue = 0 | 1";
static const char changeflag_help[] = "Sets or clears flags on objects.";
--
1.6.5.2
From 6e102106a0ed1786c13428cc4cd500ffd0af92d2 Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 7 May 2009 07:31:37 +0400
Subject: [PATCH 06/12] mv `wish' detection from `INSTALL' to `configure'
when wish is absent, the graphical QFP footprint builder is not
installed
---
INSTALL | 13 ++++---------
configure.ac | 15 +++++++++++----
lib/Makefile.am | 7 ++++---
3 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/INSTALL b/INSTALL
index c4df37d..9212152 100644
--- a/INSTALL
+++ b/INSTALL
@@ -80,12 +80,8 @@ Printer HID's:
is not given.
In addition to the libraries listed above, there is a graphical QFP footprint
-creator which uses TCL/TK. If you do not wish to use this feature, and you
-do not have TCL/TK installed on your system, you may simply set WISH to
-/usr/bin/true in your configure environment. For example:
-
- env WISH=/usr/bin/true ./configure
-
+creator which uses TCL/TK. If you do not have TCL/TK installed on your
+system, the creator will not be installed.
Please refer to the output of
@@ -114,9 +110,8 @@ from the top level directory.
- GNU m4. In particular your m4 must support -F for frozen files.
-- wish (part of tcl/tk). If not installed, set WISH=/bin/false in
- your configure environment and you just won't get the graphical
- QFP footprint builder
+- wish (part of tcl/tk). If not installed you just won't
+ get the graphical QFP footprint builder
- gtk if you are using the gtk frontend
diff --git a/configure.ac b/configure.ac
index 6aab549..fa4966f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -517,7 +517,7 @@ fi
AC_PATH_PROGS(M4, gm4 m4, [none])
if test "X$M4" = "Xnone" ; then
- AC_MSG_ERROR([Did not find a m4 executible. You need to make sure
+ AC_MSG_ERROR([Did not find a m4 executable. You need to make sure
that m4 is installed on your system and that m4 is in your path])
fi
AC_MSG_CHECKING([if $M4 has the division involving negative numbers bug])
@@ -535,11 +535,18 @@ fi
AC_PATH_PROGS(WISH, wish wish83 wish8.3 wish80 wish8.0 cygwish83 cygwish80,[none])
if test "X$WISH" = "Xnone" ; then
- AC_MSG_ERROR([Did not find the wish executible. You need to make sure
- that tcl is installed on your system and that wish is in your path])
+ AC_MSG_RESULT([
+ Did not find the wish executable. You need to make sure
+ that tcl/tk is installed on your system and that wish is in your path
+ in order to build qfp-ui script. If you do have it installed you may
+ want to set WISH in your configure environment, for example:
+ env WISH=/opt/tcl-tk/bin/wish ./configure
+
+ ])
fi
+AM_CONDITIONAL(WISH_FOUND, test x$WISH != xnone)
-AC_DEFINE_UNQUOTED(M4,$M4,[m4 executible])
+AC_DEFINE_UNQUOTED(M4,$M4,[m4 executable])
GNUM4=$M4
AC_SUBST(GNUM4)
AC_DEFINE_UNQUOTED(GNUM4,"$M4",[m4 program used by pcb])
diff --git a/lib/Makefile.am b/lib/Makefile.am
index ae1b485..63cb71e 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -10,9 +10,10 @@ LIBSCRIPTS= \
CreateLibraryContents.sh \
CreateLibrary.sh \
ListLibraryContents.sh \
- QueryLibrary.sh \
- qfp-ui
-
+ QueryLibrary.sh
+if WISH_FOUND
+LIBSCRIPTS+= qfp-ui
+endif
dist_noinst_SCRIPTS= \
m4lib_to_newlib.sh
--
1.6.5.2
From f35ac98a162ff3c6e54537d33b7b043996db2f56 Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Mon, 2 Nov 2009 15:38:58 +0000
Subject: [PATCH 07/12] fix refcard.ps orientation
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
originally this was a response to
the bug report 2890230
by Ø£ØÙ?د اÙ?Ù?ØÙ?Ù?دÙ? (Ahmed El-Mahmoudy)
---
doc/Makefile.am | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 1228b33..ff0884d 100755
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -180,6 +180,15 @@ if MISSING_DVIPS
else
${DVIPS} -Ppdf -j0 -D 300 -o $@ $<
endif
+refcard.ps: refcard.dvi
+if MISSING_DVIPS
+ @echo "****************************************************"
+ @echo "WARNING: dvips is missing on your system but"
+ @echo "$@ is out of date and needs to rebuilt."
+ @echo "Changes to $< will be ignored"
+else
+ ${DVIPS} -Ppdf -j0 -D 300 -T 297mm,210mm -o $@ $<
+endif
.tex.pdf:
if MISSING_PDFLATEX
--
1.6.5.2
From 33cb5be93c7c3e274c67f308432d8448c114d1f2 Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Fri, 27 Nov 2009 08:34:38 +0300
Subject: [PATCH 08/12] fix erratum about sections hierarhy
---
doc/pcb.texi | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/doc/pcb.texi b/doc/pcb.texi
index cf3ceb1..226b47f 100644
--- a/doc/pcb.texi
+++ b/doc/pcb.texi
@@ -5237,7 +5237,7 @@ rats-nest" command after moving parts around.
After the placement is complete, use the line tool to add traces to the
board. As traces are added, the corresponding rats line will disappear.
-@section Forward Annotation of Schematic Changes
+@subsection Forward Annotation of Schematic Changes
If schematic changes are made after the layout has started,
@code{gsch2pcb} can be used to forward annotate these changes to the
layout. To forward annotate schematic changes, run @samp{gsch2pcb
--
1.6.5.2
From 33ba99a80015886214f007187a36e0824b54d2be Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Thu, 19 Nov 2009 12:49:37 +0300
Subject: [PATCH 09/12] Cleanup RoundRect and SquarePadPoly
the corner points were added to
segments made with frac_circle() from the wrong side
---
src/polygon.c | 36 ++++++++++++++++++++++++++----------
1 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/src/polygon.c b/src/polygon.c
index 72e65d5..a75c4aa 100644
--- a/src/polygon.c
+++ b/src/polygon.c
@@ -443,21 +443,29 @@ RoundRect (LocationType x1, LocationType x2, LocationType y1, LocationType y2,
assert (x2 > x1);
assert (y2 > y1);
v[0] = x1 - t;
- v[1] = y1;
+ v[1] = y2;
if ((contour = poly_NewContour (v)) == NULL)
return NULL;
+ v[0] = x1 - t;
+ v[1] = y1;
frac_circle (contour, x1, y1, v, 4);
- v[0] = x2;
+ v[0] = x1;
v[1] = y1 - t;
poly_InclVertex (contour->head.prev, poly_CreateNode (v));
+ v[0] = x2;
+ v[1] = y1 - t;
frac_circle (contour, x2, y1, v, 4);
v[0] = x2 + t;
- v[1] = y2;
+ v[1] = y1;
poly_InclVertex (contour->head.prev, poly_CreateNode (v));
+ v[0] = x2 + t;
+ v[1] = y2;
frac_circle (contour, x2, y2, v, 4);
- v[0] = x1;
+ v[0] = x2;
v[1] = y2 + t;
poly_InclVertex (contour->head.prev, poly_CreateNode (v));
+ v[0] = x1;
+ v[1] = y2 + t;
frac_circle (contour, x1, y2, v, 4);
return ContourToPoly (contour);
}
@@ -638,7 +646,7 @@ SquarePadPoly (PadType * pad, BDimension clear)
d =
sqrt (SQUARE (pad->Point1.X - pad->Point2.X) +
SQUARE (pad->Point1.Y - pad->Point2.Y));
- if (d != 0)
+ if (d > .5)
{
double a = halfthick / d;
tx = (t->Point1.Y - t->Point2.Y) * a;
@@ -669,25 +677,33 @@ SquarePadPoly (PadType * pad, BDimension clear)
c->Point2.Y -= cx;
}
- v[0] = c->Point1.X - tx;
- v[1] = c->Point1.Y - ty;
+ v[0] = c->Point1.X + tx;
+ v[1] = c->Point1.Y + ty;
if ((contour = poly_NewContour (v)) == NULL)
return 0;
+ v[0] = c->Point1.X - tx;
+ v[1] = c->Point1.Y - ty;
frac_circle (contour, (t->Point1.X - tx), (t->Point1.Y - ty), v, 4);
+ v[0] = t->Point1.X - cx;
+ v[1] = t->Point1.Y - cy;
+ poly_InclVertex (contour->head.prev, poly_CreateNode (v));
v[0] = t->Point2.X - cx;
v[1] = t->Point2.Y - cy;
- poly_InclVertex (contour->head.prev, poly_CreateNode (v));
frac_circle (contour, (t->Point2.X - tx), (t->Point2.Y - ty), v, 4);
+ v[0] = c->Point2.X - tx;
+ v[1] = c->Point2.Y - ty;
+ poly_InclVertex (contour->head.prev, poly_CreateNode (v));
v[0] = c->Point2.X + tx;
v[1] = c->Point2.Y + ty;
- poly_InclVertex (contour->head.prev, poly_CreateNode (v));
frac_circle (contour, (t->Point2.X + tx), (t->Point2.Y + ty), v, 4);
+ v[0] = t->Point2.X + cx;
+ v[1] = t->Point2.Y + cy;
+ poly_InclVertex (contour->head.prev, poly_CreateNode (v));
v[0] = t->Point1.X + cx;
v[1] = t->Point1.Y + cy;
- poly_InclVertex (contour->head.prev, poly_CreateNode (v));
frac_circle (contour, (t->Point1.X + tx), (t->Point1.Y + ty), v, 4);
/* now we have the line contour */
--
1.6.5.2
From e7511777705ade02dd2b00ad858b2b1433973132 Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Thu, 27 Aug 2009 21:12:57 +0400
Subject: [PATCH 10/12] cleanup batch gui
fit types of functions with declared in hid.h
include some necessary headers
---
src/hid/batch/batch.c | 23 +++++++++++++++--------
1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/src/hid/batch/batch.c b/src/hid/batch/batch.c
index f3b7d3c..eab81bf 100644
--- a/src/hid/batch/batch.c
+++ b/src/hid/batch/batch.c
@@ -1,5 +1,3 @@
-/* $Id$ */
-
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -11,13 +9,14 @@
#include "global.h"
#include "hid.h"
+#include "../hidint.h"
#include "data.h"
+#include "misc.h"
#ifdef HAVE_LIBDMALLOC
#include <dmalloc.h>
#endif
-
-RCSID ("$Id$");
+#include<unistd.h>
/* This is a text-line "batch" HID, which exists for scripting and
non-GUI needs. */
@@ -59,6 +58,7 @@ PCBChanged (int argc, char **argv, int x, int y)
return 0;
}
+extern void print_actions ();
static int
help (int argc, char **argv, int x, int y)
{
@@ -237,12 +237,14 @@ batch_fill_polygon (hidGC gc, int n_coords, int *x, int *y)
}
static void
-batch_fill_pcb_polygon (hidGC gc, PolygonType *poly)
+batch_fill_pcb_polygon (hidGC gc, PolygonType *poly,
+ const BoxType *clip_box)
{
}
static void
-batch_thindraw_pcb_polygon (hidGC gc, PolygonType *poly)
+batch_thindraw_pcb_polygon (hidGC gc, PolygonType *poly,
+ const BoxType *clip_box)
{
}
@@ -395,8 +397,12 @@ batch_fileselect (const char *title, const char *descr,
static int
batch_attribute_dialog (HID_Attribute * attrs,
int n_attrs, HID_Attr_Val * results,
- const char *descr)
+ const char * title_, const char *descr)
{
+ printf ("Attribute dialog %s [%s] (not implemented)\n", title_, descr);
+ /* return a value to cancel the dialog
+ because it is not implemented */
+ return !0;
}
static void
@@ -411,9 +417,10 @@ batch_beep (void)
fflush (stdout);
}
-static void
+static int
batch_progress (int so_far, int total, const char *message)
{
+ return 0;
}
HID batch_gui = {
--
1.6.5.2
From 047b99e8ca009cec966cd802002ad8d78741364c Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Sat, 29 Aug 2009 10:09:27 +0000
Subject: [PATCH 11/12] Valgrind: fix memory leaks
---
src/hid/common/hidinit.c | 12 +++---------
src/mymem.c | 8 ++++----
src/parse_y.y | 9 ++++++++-
3 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/src/hid/common/hidinit.c b/src/hid/common/hidinit.c
index bb1a66b..a7cae91 100644
--- a/src/hid/common/hidinit.c
+++ b/src/hid/common/hidinit.c
@@ -700,15 +700,11 @@ void
derive_default_filename(const char *pcbfile, HID_Attribute *filename_attrib, const char *suffix, char **memory)
{
char *buf;
- char *pf;
+ const char *pf;
- if (pcbfile == NULL)
- pf = strdup ("unknown.pcb");
- else
- pf = strdup (pcbfile);
-
- if (!pf || (memory && filename_attrib->default_val.str_value != *memory)) return;
+ if (memory && filename_attrib->default_val.str_value != *memory) return;
+ pf = pcbfile? pcbfile: "unknown.pcb";
buf = malloc (strlen (pf) + strlen(suffix) + 1);
if (memory) *memory = buf;
if (buf) {
@@ -722,6 +718,4 @@ derive_default_filename(const char *pcbfile, HID_Attribute *filename_attrib, con
free(filename_attrib->default_val.str_value);
filename_attrib->default_val.str_value = buf;
}
-
- free (pf);
}
diff --git a/src/mymem.c b/src/mymem.c
index bed0f9b..8014b98 100644
--- a/src/mymem.c
+++ b/src/mymem.c
@@ -937,14 +937,12 @@ FreeDataMemory (DataTypePtr Data)
MYFREE (text->TextString);
}
END_LOOP;
- if (layer->Name)
- MYFREE (layer->Name);
LINE_LOOP (layer);
{
- if (line->Number)
- MYFREE (line->Number);
+ MYFREE (line->Number);
}
END_LOOP;
+ MYFREE (layer->Name);
MYFREE (layer->Line);
MYFREE (layer->Arc);
MYFREE (layer->Text);
@@ -977,6 +975,8 @@ FreeDataMemory (DataTypePtr Data)
r_destroy_tree (&Data->pad_tree);
if (Data->rat_tree)
r_destroy_tree (&Data->rat_tree);
+ MYFREE (Data->Via);
+ MYFREE (Data->Element);
/* clear struct */
memset (Data, 0, sizeof (DataType));
}
diff --git a/src/parse_y.y b/src/parse_y.y
index f4fc367..f80b540 100644
--- a/src/parse_y.y
+++ b/src/parse_y.y
@@ -172,6 +172,7 @@ parsepcb
pcbnetlist
{
int i, j;
+ char *layer_groups = layer_group_string;
PCBTypePtr pcb_save = PCB;
if (layer_group_string == NULL)
@@ -182,6 +183,8 @@ parsepcb
Message("illegal layer-group string\n");
YYABORT;
}
+ SaveFree (layer_groups);
+ layer_group_string = NULL;
/* initialize the polygon clipping now since
* we didn't know the layer grouping before.
*/
@@ -567,6 +570,7 @@ pcbflags
| T_FLAGS '(' STRING ')'
{
yyPCB->Flags = string_to_pcbflags ($3, yyerror);
+ SaveFree($3);
}
|
;
@@ -651,6 +655,7 @@ pcbstyles
Message("illegal route-style string\n");
YYABORT;
}
+ SaveFree($3);
}
| T_STYLES '[' STRING ']'
{
@@ -659,6 +664,7 @@ pcbstyles
Message("illegal route-style string\n");
YYABORT;
}
+ SaveFree($3);
}
|
;
@@ -856,6 +862,7 @@ layer
}
Layer = &yyData->Layer[$3-1];
+ SaveFree (Layer->Name);
/* memory for name is already allocated */
Layer->Name = $4;
LayerFlag[$3-1] = true;
@@ -1684,7 +1691,7 @@ pad
;
flags : NUMBER { $$ = OldFlags($1); }
- | STRING { $$ = string_to_flags ($1, yyerror); }
+ | STRING { $$ = string_to_flags ($1, yyerror); SaveFree($1); }
;
symbols
--
1.6.5.2
From 8152d6f1e14a3b25976a05af698f493d24949a2b Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Sat, 29 Aug 2009 11:46:29 +0000
Subject: [PATCH 12/12] Valgrind: fix potential buffer overflow
---
src/create.c | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/src/create.c b/src/create.c
index bf3b688..7ac86f6 100644
--- a/src/create.c
+++ b/src/create.c
@@ -972,11 +972,9 @@ LibraryMenuTypePtr
CreateNewNet (LibraryTypePtr lib, char *name, char *style)
{
LibraryMenuTypePtr menu;
- char temp[64];
- sprintf (temp, " %s", name);
menu = GetLibraryMenuMemory (lib);
- menu->Name = MyStrdup (temp, "CreateNewNet()");
+ menu->Name = Concat (" ", name, NULL);
menu->flag = 1; /* net is enabled by default */
if (style == NULL || NSTRCMP ("(unknown)", style) == 0)
menu->Style = NULL;
--
1.6.5.2
_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user