Index: trunk/src/board.c =================================================================== --- trunk/src/board.c (revision 16210) +++ trunk/src/board.c (revision 16211) @@ -99,13 +99,6 @@ ptr->ID = pcb_create_ID_get(); ptr->ThermScale = 0.5; - ptr->Bloat = conf_core.design.bloat; - ptr->Shrink = conf_core.design.shrink; - ptr->minWid = conf_core.design.min_wid; - ptr->minSlk = conf_core.design.min_slk; - ptr->minDrill = conf_core.design.min_drill; - ptr->minRing = conf_core.design.min_ring; - for (i = 0; i < PCB_MAX_LAYER; i++) ptr->Data->Layer[i].name = pcb_strdup(conf_core.design.default_layer_name[i]); Index: trunk/src/board.h =================================================================== --- trunk/src/board.h (revision 16210) +++ trunk/src/board.h (revision 16211) @@ -76,8 +76,6 @@ pcb_bool loose_subc; /* when set, subc parts are not locked into the subc */ pcb_coord_t CursorX, /* cursor position as saved with layout */ CursorY; - pcb_coord_t Bloat, /* drc sizes saved with layout */ - Shrink, minWid, minSlk, minDrill, minRing; pcb_coord_t GridOffsetX, /* as saved with layout */ GridOffsetY, MaxWidth, /* allowed size */ MaxHeight; Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 16210) +++ trunk/src/crosshair.c (revision 16211) @@ -290,7 +290,7 @@ pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.cross); pcb_draw_wireframe_line(pcb_crosshair.GC,line.Point1.X, line.Point1.Y, line.Point2.X, line.Point2.Y, - line.Thickness + 2 * (PCB->Bloat + 1), 0); + line.Thickness + 2 * (conf_core.design.bloat + 1), 0); pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.crosshair); } break; @@ -311,7 +311,7 @@ /* Draw the DRC outline if it is enabled */ if (conf_core.editor.show_drc) { pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.cross); - arc.Thickness += 2 * (PCB->Bloat + 1); + arc.Thickness += 2 * (conf_core.design.bloat + 1); pcb_draw_wireframe_arc(pcb_crosshair.GC,&arc); pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.crosshair); } @@ -348,7 +348,7 @@ if (conf_core.editor.show_drc) { pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.cross); pcb_draw_wireframe_line(pcb_crosshair.GC,point1->X, point1->Y, point2.X, - point2.Y,line->Thickness + 2 * (PCB->Bloat + 1), 0); + point2.Y,line->Thickness + 2 * (conf_core.design.bloat + 1), 0); pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.crosshair); } } @@ -402,7 +402,7 @@ /* Draw the DRC outline if it is enabled */ if (conf_core.editor.show_drc) { pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.cross); - arc.Thickness += 2 * (PCB->Bloat + 1); + arc.Thickness += 2 * (conf_core.design.bloat + 1); pcb_draw_wireframe_arc(pcb_crosshair.GC,&arc); pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.crosshair); } Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 16210) +++ trunk/src/draw.c (revision 16211) @@ -515,7 +515,7 @@ the outline layer. */ if ((lflg & PCB_LYT_OUTLINE) && pcb_layer_is_empty_(PCB, Layer)) { pcb_gui->set_color(pcb_draw_out.fgGC, Layer->meta.real.color); - pcb_gui->set_line_width(pcb_draw_out.fgGC, PCB->minWid); + pcb_gui->set_line_width(pcb_draw_out.fgGC, conf_core.design.min_wid); pcb_gui->draw_rect(pcb_draw_out.fgGC, 0, 0, PCB->MaxWidth, PCB->MaxHeight); } Index: trunk/src/find_act.c =================================================================== --- trunk/src/find_act.c (revision 16210) +++ trunk/src/find_act.c (revision 16211) @@ -60,7 +60,7 @@ pcb_message(PCB_MSG_INFO, _("%m+Rules are minspace %$mS, minoverlap %$mS " "minwidth %$mS, minsilk %$mS\n" "min drill %$mS, min annular ring %$mS\n"), - conf_core.editor.grid_unit->allow, PCB->Bloat, PCB->Shrink, PCB->minWid, PCB->minSlk, PCB->minDrill, PCB->minRing); + conf_core.editor.grid_unit->allow, conf_core.design.bloat, conf_core.design.shrink, conf_core.design.min_wid, conf_core.design.min_slk, conf_core.design.min_drill, conf_core.design.min_ring); } count = pcb_drc_all(); if (pcb_gui->drc_gui == NULL || pcb_gui->drc_gui->log_drc_overview) { Index: trunk/src/find_drc.c =================================================================== --- trunk/src/find_drc.c (revision 16210) +++ trunk/src/find_drc.c (revision 16211) @@ -225,7 +225,7 @@ thing_ptr3 = ptr2; switch (type) { case PCB_OBJ_LINE: - if (line->Clearance < 2 * PCB->Bloat) { + if (line->Clearance < 2 * conf_core.design.bloat) { pcb_undo_add_obj_to_flag(ptr2); PCB_FLAG_SET(TheFlag, line); message = _("Line with insufficient clearance inside polygon\n"); @@ -233,7 +233,7 @@ } break; case PCB_OBJ_ARC: - if (arc->Clearance < 2 * PCB->Bloat) { + if (arc->Clearance < 2 * conf_core.design.bloat) { pcb_undo_add_obj_to_flag(ptr2); PCB_FLAG_SET(TheFlag, arc); message = _("Arc with insufficient clearance inside polygon\n"); @@ -241,7 +241,7 @@ } break; case PCB_OBJ_PSTK: - if (pcb_pstk_drc_check_clearance(ps, polygon, 2 * PCB->Bloat) != 0) { + if (pcb_pstk_drc_check_clearance(ps, polygon, 2 * conf_core.design.bloat) != 0) { pcb_undo_add_obj_to_flag(ptr2); PCB_FLAG_SET(TheFlag, ps); message = _("Padstack with insufficient clearance inside polygon\n"); @@ -264,7 +264,7 @@ violation = pcb_drc_violation_new(message, _("Circuits that are too close may bridge during imaging, etching,\n" "plating, or soldering processes resulting in a direct short."), x, y, 0, /* ANGLE OF ERROR UNKNOWN */ pcb_false, /* MEASUREMENT OF ERROR UNKNOWN */ 0, /* MAGNITUDE OF ERROR UNKNOWN */ - PCB->Bloat, object_count, object_id_list, object_type_list); + conf_core.design.bloat, object_count, object_id_list, object_type_list); append_drc_violation(violation); pcb_drc_violation_free(violation); free(object_id_list); @@ -353,7 +353,7 @@ pcb_poly_plows(PCB->Data, PCB_OBJ_LINE, layer, line, drc_callback); if (IsBad) break; - if (line->Thickness < PCB->minWid) { + if (line->Thickness < conf_core.design.min_wid) { pcb_undo_add_obj_to_flag(line); PCB_FLAG_SET(TheFlag, line); pcb_line_invalidate_draw(layer, line); @@ -363,7 +363,7 @@ BuildObjectList(&object_count, &object_id_list, &object_type_list); violation = pcb_drc_violation_new(_("Line width is too thin"), _("Process specifications dictate a minimum feature-width\n" "that can reliably be reproduced"), x, y, 0, /* ANGLE OF ERROR UNKNOWN */ pcb_true, /* MEASUREMENT OF ERROR KNOWN */ - line->Thickness, PCB->minWid, object_count, object_id_list, object_type_list); + line->Thickness, conf_core.design.min_wid, object_count, object_id_list, object_type_list); append_drc_violation(violation); pcb_drc_violation_free(violation); free(object_id_list); @@ -384,7 +384,7 @@ pcb_poly_plows(PCB->Data, PCB_OBJ_ARC, layer, arc, drc_callback); if (IsBad) break; - if (arc->Thickness < PCB->minWid) { + if (arc->Thickness < conf_core.design.min_wid) { pcb_undo_add_obj_to_flag(arc); PCB_FLAG_SET(TheFlag, arc); pcb_arc_invalidate_draw(layer, arc); @@ -394,7 +394,7 @@ BuildObjectList(&object_count, &object_id_list, &object_type_list); violation = pcb_drc_violation_new(_("Arc width is too thin"), _("Process specifications dictate a minimum feature-width\n" "that can reliably be reproduced"), x, y, 0, /* ANGLE OF ERROR UNKNOWN */ pcb_true, /* MEASUREMENT OF ERROR KNOWN */ - arc->Thickness, PCB->minWid, object_count, object_id_list, object_type_list); + arc->Thickness, conf_core.design.min_wid, object_count, object_id_list, object_type_list); append_drc_violation(violation); pcb_drc_violation_free(violation); free(object_id_list); @@ -430,7 +430,7 @@ violation = pcb_drc_violation_new(_("padstack annular ring too small"), _("Annular rings that are too small may erode during etching,\n" "resulting in a broken connection"), x, y, 0, /* ANGLE OF ERROR UNKNOWN */ pcb_true, /* MEASUREMENT OF ERROR KNOWN */ ring, - PCB->minRing, object_count, object_id_list, object_type_list); + conf_core.design.min_ring, object_count, object_id_list, object_type_list); append_drc_violation(violation); pcb_drc_violation_free(violation); } @@ -441,7 +441,7 @@ BuildObjectList(&object_count, &object_id_list, &object_type_list); violation = pcb_drc_violation_new(_("Padstack drill size is too small"), _("Process rules dictate the minimum drill size which can be used"), x, y, 0, /* ANGLE OF ERROR UNKNOWN */ pcb_true, /* MEASUREMENT OF ERROR KNOWN */ - hole, PCB->minDrill, object_count, object_id_list, object_type_list); + hole, conf_core.design.min_drill, object_count, object_id_list, object_type_list); append_drc_violation(violation); pcb_drc_violation_free(violation); } @@ -466,7 +466,7 @@ if (!IsBad) { PCB_LINE_SILK_LOOP(PCB->Data); { - if (line->Thickness < PCB->minSlk) { + if (line->Thickness < conf_core.design.min_slk) { PCB_FLAG_SET(TheFlag, line); pcb_line_invalidate_draw(layer, line); drcerr_count++; @@ -475,7 +475,7 @@ BuildObjectList(&object_count, &object_id_list, &object_type_list); violation = pcb_drc_violation_new(_("Silk line is too thin"), _("Process specifications dictate a minimum silkscreen feature-width\n" "that can reliably be reproduced"), x, y, 0, /* ANGLE OF ERROR UNKNOWN */ pcb_true, /* MEASUREMENT OF ERROR KNOWN */ - line->Thickness, PCB->minSlk, object_count, object_id_list, object_type_list); + line->Thickness, conf_core.design.min_slk, object_count, object_id_list, object_type_list); append_drc_violation(violation); pcb_drc_violation_free(violation); free(object_id_list); @@ -517,8 +517,8 @@ int *object_type_list; pcb_drc_violation_t *violation; - if (PCB->Shrink != 0) { - Bloat = -PCB->Shrink; + if (conf_core.design.shrink != 0) { + Bloat = -conf_core.design.shrink; TheFlag = PCB_FLAG_DRC | PCB_FLAG_SELECTED; ListStart(ptr2); DoIt(pcb_true, pcb_false); @@ -535,7 +535,7 @@ pcb_reset_conns(pcb_false); User = pcb_true; drc = pcb_false; - Bloat = -PCB->Shrink; + Bloat = -conf_core.design.shrink; TheFlag = PCB_FLAG_SELECTED; ListStart(ptr2); DoIt(pcb_true, pcb_true); @@ -554,7 +554,7 @@ violation = pcb_drc_violation_new(_("Potential for broken trace"), _("Insufficient overlap between objects can lead to broken tracks\n" "due to registration errors with old wheel style photo-plotters."), x, y, 0, /* ANGLE OF ERROR UNKNOWN */ pcb_false, /* MEASUREMENT OF ERROR UNKNOWN */ 0, /* MAGNITUDE OF ERROR UNKNOWN */ - PCB->Shrink, object_count, object_id_list, object_type_list); + conf_core.design.shrink, object_count, object_id_list, object_type_list); append_drc_violation(violation); pcb_drc_violation_free(violation); free(object_id_list); @@ -572,7 +572,7 @@ pcb_reset_conns(pcb_false); TheFlag = PCB_FLAG_FOUND; ListStart(ptr2); - Bloat = PCB->Bloat; + Bloat = conf_core.design.bloat; drc = pcb_true; while (DoIt(pcb_true, pcb_false)) { DumpList(); @@ -588,7 +588,7 @@ DumpList(); TheFlag = PCB_FLAG_FOUND; ListStart(ptr2); - Bloat = PCB->Bloat; + Bloat = conf_core.design.bloat; drc = pcb_true; DoIt(pcb_true, pcb_true); DumpList(); @@ -598,7 +598,7 @@ violation = pcb_drc_violation_new(_("Copper areas too close"), _("Circuits that are too close may bridge during imaging, etching,\n" "plating, or soldering processes resulting in a direct short."), x, y, 0, /* ANGLE OF ERROR UNKNOWN */ pcb_false, /* MEASUREMENT OF ERROR UNKNOWN */ 0, /* MAGNITUDE OF ERROR UNKNOWN */ - PCB->Bloat, object_count, object_id_list, object_type_list); + conf_core.design.bloat, object_count, object_id_list, object_type_list); append_drc_violation(violation); pcb_drc_violation_free(violation); free(object_id_list); @@ -616,7 +616,7 @@ DoIt(pcb_true, pcb_true); DumpList(); drc = pcb_true; - Bloat = PCB->Bloat; + Bloat = conf_core.design.bloat; ListStart(ptr2); } drc = pcb_false; Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 16210) +++ trunk/src/obj_arc.c (revision 16211) @@ -391,10 +391,10 @@ if (value < 0) value = 0; value = MIN(PCB_MAX_LINESIZE, value); - if (!ctx->chgsize.is_absolute && ctx->chgsize.value < 0 && value < PCB->Bloat * 2) + if (!ctx->chgsize.is_absolute && ctx->chgsize.value < 0 && value < conf_core.design.bloat * 2) value = 0; - if (ctx->chgsize.value > 0 && value < PCB->Bloat * 2) - value = PCB->Bloat * 2 + 2; + if (ctx->chgsize.value > 0 && value < conf_core.design.bloat * 2) + value = conf_core.design.bloat * 2 + 2; if (value != Arc->Clearance) { pcb_undo_add_obj_to_clear_size(PCB_OBJ_ARC, Layer, Arc, Arc); pcb_arc_invalidate_erase(Arc); Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 16210) +++ trunk/src/obj_line.c (revision 16211) @@ -433,10 +433,10 @@ if (value < 0) value = 0; value = MIN(PCB_MAX_LINESIZE, value); - if (!ctx->chgsize.is_absolute && ctx->chgsize.value < 0 && value < ctx->chgsize.pcb->Bloat * 2) + if (!ctx->chgsize.is_absolute && ctx->chgsize.value < 0 && value < conf_core.design.bloat * 2) value = 0; - if (ctx->chgsize.value > 0 && value < ctx->chgsize.pcb->Bloat * 2) - value = ctx->chgsize.pcb->Bloat * 2 + 2; + if (ctx->chgsize.value > 0 && value < conf_core.design.bloat * 2) + value = conf_core.design.bloat * 2 + 2; if (value != Line->Clearance) { pcb_undo_add_obj_to_clear_size(PCB_OBJ_LINE, Layer, Line, Line); pcb_poly_restore_to_poly(ctx->chgsize.pcb->Data, PCB_OBJ_LINE, Layer, Line); Index: trunk/src/obj_line_drcenf.c =================================================================== --- trunk/src/obj_line_drcenf.c (revision 16210) +++ trunk/src/obj_line_drcenf.c (revision 16211) @@ -264,7 +264,7 @@ line1.Flags = line2.Flags = pcb_no_flags(); line1.parent_type = line2.parent_type = PCB_PARENT_LAYER; line1.parent.layer = line2.parent.layer = CURRENT; - line1.Thickness = conf_core.design.line_thickness + 2 * (PCB->Bloat + 1); + line1.Thickness = conf_core.design.line_thickness + 2 * (conf_core.design.bloat + 1); line2.Thickness = line1.Thickness; line1.Clearance = line2.Clearance = 0; line1.Point1.X = pcb_crosshair.AttachedLine.Point1.X; Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 16210) +++ trunk/src/obj_poly.c (revision 16211) @@ -485,10 +485,10 @@ return NULL; value = MIN(PCB_MAX_LINESIZE, value); - if (!ctx->chgsize.is_absolute && ctx->chgsize.value < 0 && value < ctx->chgsize.pcb->Bloat * 2) + if (!ctx->chgsize.is_absolute && ctx->chgsize.value < 0 && value < conf_core.design.bloat * 2) value = 0; - if (ctx->chgsize.value > 0 && value < ctx->chgsize.pcb->Bloat * 2) - value = ctx->chgsize.pcb->Bloat * 2 + 2; + if (ctx->chgsize.value > 0 && value < conf_core.design.bloat * 2) + value = conf_core.design.bloat * 2 + 2; if (value != poly->Clearance) { pcb_undo_add_obj_to_clear_size(PCB_OBJ_POLY, Layer, poly, poly); pcb_poly_restore_to_poly(ctx->chgsize.pcb->Data, PCB_OBJ_POLY, Layer, poly); Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 16210) +++ trunk/src/obj_pstk.c (revision 16211) @@ -759,13 +759,13 @@ /* global clearance */ if (ps->Clearance > 0) - return ps->Clearance < 2 * PCB->Bloat; + return ps->Clearance < 2 * conf_core.design.bloat; /* else check each shape; it's safest to run this check on the canonical transformed shape, that's always available */ ts = pcb_pstk_get_tshape_(ps->parent.data, ps->proto, 0); for(n = 0; n < ts->len; n++) - if ((ts->shape[n].clearance > 0) && (ts->shape[n].clearance < 2 * PCB->Bloat)) + if ((ts->shape[n].clearance > 0) && (ts->shape[n].clearance < 2 * conf_core.design.bloat)) return 1; return 0; @@ -837,13 +837,13 @@ pcb_pstk_tshape_t *ts = pcb_pstk_get_tshape_(ps->parent.data, ps->proto, 0); for(n = 0; n < ts->len; n++) { - if (pcb_pstk_shape_hole_break(&ts->shape[n], proto->hdia, 2 * PCB->minRing, err_minring)) { + if (pcb_pstk_shape_hole_break(&ts->shape[n], proto->hdia, 2 * conf_core.design.min_ring, err_minring)) { break; } } } - if ((proto->hdia > 0) && (proto->hdia < PCB->minDrill)) + if ((proto->hdia > 0) && (proto->hdia < conf_core.design.min_drill)) *err_minhole = proto->hdia; } Index: trunk/src/obj_pstk_op.c =================================================================== --- trunk/src/obj_pstk_op.c (revision 16210) +++ trunk/src/obj_pstk_op.c (revision 16211) @@ -287,10 +287,10 @@ if (value < 0) value = 0; value = MIN(PCB_MAX_LINESIZE, value); - if (!ctx->chgsize.is_absolute && (ctx->chgsize.value < 0) && (value < PCB->Bloat * 2)) + if (!ctx->chgsize.is_absolute && (ctx->chgsize.value < 0) && (value < conf_core.design.bloat * 2)) value = 0; - if ((ctx->chgsize.value > 0) && (value < PCB->Bloat * 2)) - value = PCB->Bloat * 2 + 2; + if ((ctx->chgsize.value > 0) && (value < conf_core.design.bloat * 2)) + value = conf_core.design.bloat * 2 + 2; if (ps->Clearance == value) return NULL; @@ -313,8 +313,8 @@ pcb_pstk_proto_copy(&proto, pcb_pstk_get_proto(ps)); if (!ctx->chgsize.is_absolute) { proto.hdia += ctx->chgsize.value; - if (proto.hdia < ctx->chgsize.pcb->minDrill) - proto.hdia = ctx->chgsize.pcb->minDrill; + if (proto.hdia < conf_core.design.min_drill) + proto.hdia = conf_core.design.min_drill; } else proto.hdia = ctx->chgsize.value; Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 16210) +++ trunk/src/obj_text.c (revision 16211) @@ -231,7 +231,7 @@ /* Calculate the bounding box based on the larger of the thicknesses * the text might clamped at on silk or copper layers. */ - min_final_radius = MAX(PCB->minWid, PCB->minSlk) / 2; + min_final_radius = MAX(conf_core.design.min_wid, conf_core.design.min_slk) / 2; /* Pre-adjust the line radius for the fact we are initially computing the * bounds of the un-scaled text, and the thickness clamping applies to @@ -333,10 +333,10 @@ /* the bounding box covers the extent of influence * so it must include the clearance values too */ - Text->BoundingBox.X1 -= PCB->Bloat; - Text->BoundingBox.Y1 -= PCB->Bloat; - Text->BoundingBox.X2 += PCB->Bloat; - Text->BoundingBox.Y2 += PCB->Bloat; + Text->BoundingBox.X1 -= conf_core.design.bloat; + Text->BoundingBox.Y1 -= conf_core.design.bloat; + Text->BoundingBox.X2 += conf_core.design.bloat; + Text->BoundingBox.Y2 += conf_core.design.bloat; pcb_close_box(&Text->BoundingBox); pcb_text_free_str(Text, rendered); } @@ -970,9 +970,9 @@ flg = pcb_layergrp_flags(PCB, layer->meta.real.grp); if (flg & PCB_LYT_SILK) - min_silk_line = PCB->minSlk; + min_silk_line = conf_core.design.min_slk; else - min_silk_line = PCB->minWid; + min_silk_line = conf_core.design.min_wid; pcb_text_draw_(text, min_silk_line, allow_term_gfx); } Index: trunk/src/polygon.c =================================================================== --- trunk/src/polygon.c (revision 16210) +++ trunk/src/polygon.c (revision 16211) @@ -769,7 +769,7 @@ if (!PCB_FLAG_TEST(PCB_FLAG_CLEARLINE, text)) return 0; - if (!(np = RoundRect(b->X1 + PCB->Bloat, b->X2 - PCB->Bloat, b->Y1 + PCB->Bloat, b->Y2 - PCB->Bloat, PCB->Bloat))) + if (!(np = RoundRect(b->X1 + conf_core.design.bloat, b->X2 - conf_core.design.bloat, b->Y1 + conf_core.design.bloat, b->Y2 - conf_core.design.bloat, conf_core.design.bloat))) return -1; return Subtract(np, p, pcb_true); } Index: trunk/src/route.c =================================================================== --- trunk/src/route.c (revision 16210) +++ trunk/src/route.c (revision 16211) @@ -624,7 +624,7 @@ void pcb_route_draw_drc( pcb_route_t * p_route,pcb_hid_gc_t GC ) { - pcb_coord_t thickness = p_route->thickness + 2 * p_route->PCB->Bloat; + pcb_coord_t thickness = p_route->thickness + 2 * conf_core.design.bloat; int i; pcb_gui->set_color(GC,conf_core.appearance.color.cross); Index: trunk/src/tool_arc.c =================================================================== --- trunk/src/tool_arc.c (revision 16210) +++ trunk/src/tool_arc.c (revision 16211) @@ -115,7 +115,7 @@ XORDrawAttachedArc(conf_core.design.line_thickness); if (conf_core.editor.show_drc) { pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.cross); - XORDrawAttachedArc(conf_core.design.line_thickness + 2 * (PCB->Bloat + 1)); + XORDrawAttachedArc(conf_core.design.line_thickness + 2 * (conf_core.design.bloat + 1)); pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.crosshair); } } @@ -134,7 +134,7 @@ pcb_draw_wireframe_line(pcb_crosshair.GC, pcb_crosshair.X, pcb_crosshair.Y, pcb_crosshair.X, pcb_crosshair.Y, - conf_core.design.line_thickness + (2 * PCB->Bloat),0 ); + conf_core.design.line_thickness + (2 * conf_core.design.bloat),0 ); } } Index: trunk/src/tool_line.c =================================================================== --- trunk/src/tool_line.c (revision 16210) +++ trunk/src/tool_line.c (revision 16211) @@ -333,7 +333,7 @@ pcb_draw_wireframe_line(pcb_crosshair.GC, pcb_crosshair.X, pcb_crosshair.Y, pcb_crosshair.X, pcb_crosshair.Y, - conf_core.design.line_thickness + (2 * PCB->Bloat),0 ); + conf_core.design.line_thickness + (2 * conf_core.design.bloat), 0); } } } Index: trunk/src_plugins/autocrop/autocrop.c =================================================================== --- trunk/src_plugins/autocrop/autocrop.c (revision 16210) +++ trunk/src_plugins/autocrop/autocrop.c (revision 16211) @@ -9,7 +9,7 @@ * License, version 2 or later. * * Ported to pcb-rnd by Tibor 'Igor2' Palinkas in 2016. - * Copyright (C) 2016..2017 Tibor 'Igor2' Palinkas + * Copyright (C) 2016..2018 Tibor 'Igor2' Palinkas * * From: Ben Jackson * To: geda-user@moria.seul.org @@ -47,6 +47,7 @@ #include "config.h" #include "board.h" +#include "conf_core.h" #include "data.h" #include "hid.h" #include "rtree.h" @@ -171,7 +172,7 @@ * the edge. Reduce the move by the edge relief requirement XXX * and expand the board by the same amount. */ - pad = PCB->minWid * 5; /* XXX real edge clearance */ + pad = conf_core.design.min_wid * 5; /* XXX real edge clearance */ dx = -box->X1 + pad; dy = -box->Y1 + pad; box->X2 += pad; Index: trunk/src_plugins/djopt/djopt.c =================================================================== --- trunk/src_plugins/djopt/djopt.c (revision 16210) +++ trunk/src_plugins/djopt/djopt.c (revision 16211) @@ -67,7 +67,7 @@ #define selected(x) PCB_FLAG_TEST(PCB_FLAG_SELECTED, (x)) #define autorouted(x) PCB_FLAG_TEST(PCB_FLAG_AUTO, (x)) -#define SB (PCB->Bloat+1) +#define SB (conf_core.design.bloat+1) /* must be 2^N-1 */ #define INC 7 Index: trunk/src_plugins/export_gerber/gerber.c =================================================================== --- trunk/src_plugins/export_gerber/gerber.c (revision 16210) +++ trunk/src_plugins/export_gerber/gerber.c (revision 16211) @@ -854,9 +854,9 @@ else if (!outline_layer) { pcb_hid_gc_t gc = pcb_gui->make_gc(); if (flags & PCB_LYT_SILK) - pcb_gui->set_line_width(gc, PCB->minSlk); + pcb_gui->set_line_width(gc, conf_core.design.min_slk); else if (group >= 0) - pcb_gui->set_line_width(gc, PCB->minWid); + pcb_gui->set_line_width(gc, conf_core.design.min_wid); else pcb_gui->set_line_width(gc, AUTO_OUTLINE_WIDTH); pcb_gui->draw_line(gc, 0, 0, PCB->MaxWidth, 0); Index: trunk/src_plugins/export_ps/ps.c =================================================================== --- trunk/src_plugins/export_ps/ps.c (revision 16210) +++ trunk/src_plugins/export_ps/ps.c (revision 16211) @@ -1167,8 +1167,8 @@ { use_gc(gc); if (!gc->erase || !global.is_copper || global.drillcopper) { - if (gc->erase && global.is_copper && global.drill_helper && radius >= PCB->minDrill / 4) - radius = PCB->minDrill / 4; + if (gc->erase && global.is_copper && global.drill_helper && radius >= conf_core.design.min_drill / 4) + radius = conf_core.design.min_drill / 4; pcb_fprintf(global.f, "%mi %mi %mi c\n", cx, cy, radius + (gc->erase ? -1 : 1) * global.bloat); } } Index: trunk/src_plugins/fontmode/fontmode.c =================================================================== --- trunk/src_plugins/fontmode/fontmode.c (revision 16210) +++ trunk/src_plugins/fontmode/fontmode.c (revision 16211) @@ -122,10 +122,10 @@ #warning TODO do we need to change design.bloat here? conf_set(CFR_DESIGN, "editor/grid_unit", -1, "mil", POL_OVERWRITE); - conf_set_design("design/bloat", "%s", "1"); PCB->Bloat = 1; - conf_set_design("design/shrink", "%s", "1"); PCB->Shrink = 1; - conf_set_design("design/min_wid", "%s", "1"); PCB->minWid = 1; - conf_set_design("design/min_slk", "%s", "1"); PCB->minSlk = 1; + conf_set_design("design/bloat", "%s", "1"); + conf_set_design("design/shrink", "%s", "1"); + conf_set_design("design/min_wid", "%s", "1"); + conf_set_design("design/min_slk", "%s", "1"); conf_set_design("design/text_font_id", "%s", "0"); Index: trunk/src_plugins/hid_lesstif/dialogs.c =================================================================== --- trunk/src_plugins/hid_lesstif/dialogs.c (revision 16210) +++ trunk/src_plugins/hid_lesstif/dialogs.c (revision 16211) @@ -1509,13 +1509,7 @@ { PCB->MaxWidth = sz_str2val(sz_pcb_w, 1); PCB->MaxHeight = sz_str2val(sz_pcb_h, 1); - PCB->Bloat = sz_str2val(sz_bloat, 1); - PCB->Shrink = sz_str2val(sz_shrink, 1); - PCB->minWid = sz_str2val(sz_drc_wid, 1); - PCB->minSlk = sz_str2val(sz_drc_slk, 1); - PCB->minDrill = sz_str2val(sz_drc_drill, 1); - PCB->minRing = sz_str2val(sz_drc_ring, 1); -#warning think these over - are these only for new designs amd we keep real values in PCB-> ? + conf_set_design("design/text_scale", "%s", sz_text); conf_set_design("design/bloat", "%s", sz_bloat); conf_set_design("design/shrink", "%s", sz_shrink); @@ -1535,12 +1529,6 @@ return; sz_val2str(sz_pcb_w, PCB->MaxWidth, 1); sz_val2str(sz_pcb_h, PCB->MaxHeight, 1); - sz_val2str(sz_bloat, PCB->Bloat, 1); - sz_val2str(sz_shrink, PCB->Shrink, 1); - sz_val2str(sz_drc_wid, PCB->minWid, 1); - sz_val2str(sz_drc_slk, PCB->minSlk, 1); - sz_val2str(sz_drc_drill, PCB->minDrill, 1); - sz_val2str(sz_drc_ring, PCB->minRing, 1); sz_val2str(sz_text, conf_core.design.text_scale, 0); ls = pcb_strdup_printf(_("Units are %s."), conf_core.editor.grid_unit->in_suffix); Index: trunk/src_plugins/io_eagle/read_dru.c =================================================================== --- trunk/src_plugins/io_eagle/read_dru.c (revision 16210) +++ trunk/src_plugins/io_eagle/read_dru.c (revision 16211) @@ -33,6 +33,7 @@ #include #include "read_dru.h" +#include "conf_core.h" int pcb_eagle_dru_test_parse(FILE *f) { @@ -142,7 +143,7 @@ return pcb_eagle_dru_test_parse(f); } -static void bump_up_str(const char *key, const char *val, pcb_coord_t *dst) +static void bump_up_str(const char *key, const char *val, const char *cpath, pcb_coord_t curr_val) { pcb_bool succ; double d; @@ -152,8 +153,8 @@ pcb_message(PCB_MSG_ERROR, "Invalid coord value for key %s: '%s'\n", key, val); return; } - if (d > *dst) - *dst = d; + if (d > curr_val) + conf_set(CFR_DESIGN, "design/min_drill", -1, val, POL_OVERWRITE); } int io_eagle_read_pcb_dru(pcb_plug_io_t *ctx, pcb_board_t *pcb, const char *Filename, conf_role_t settings_dest) @@ -170,9 +171,9 @@ if (f == NULL) return -1; - pcb->Bloat = 0; - pcb->minWid = 0; - pcb->minDrill = 0; + conf_set(CFR_DESIGN, "design/bloat", -1, "0", POL_OVERWRITE); + conf_set(CFR_DESIGN, "design/min_wid", -1, "0", POL_OVERWRITE); + conf_set(CFR_DESIGN, "design/min_drill", -1, "0", POL_OVERWRITE); memcpy(tmp, prefix, sizeof(prefix)); @@ -190,19 +191,19 @@ } } else if (strcmp(k, "mdWireWire") == 0) - bump_up_str(k, v, &pcb->Bloat); + bump_up_str(k, v, "design/bloat", conf_core.design.bloat); else if (strcmp(k, "mdWirePad") == 0) - bump_up_str(k, v, &pcb->Bloat); + bump_up_str(k, v, "design/bloat", conf_core.design.bloat); else if (strcmp(k, "mdWireVia") == 0) - bump_up_str(k, v, &pcb->Bloat); + bump_up_str(k, v, "design/bloat", conf_core.design.bloat); else if (strcmp(k, "mdPadPad") == 0) - bump_up_str(k, v, &pcb->Bloat); + bump_up_str(k, v, "design/bloat", conf_core.design.bloat); else if (strcmp(k, "mdPadVia") == 0) - bump_up_str(k, v, &pcb->Bloat); + bump_up_str(k, v, "design/bloat", conf_core.design.bloat); else if (strcmp(k, "msWidth") == 0) - bump_up_str(k, v, &pcb->minWid); + bump_up_str(k, v, "design/min_wid", conf_core.design.min_wid); else if (strcmp(k, "msDrill") == 0) - bump_up_str(k, v, &pcb->minDrill); + bump_up_str(k, v, "design/min_drill", conf_core.design.min_drill); else { int len = strlen(k); if (len < sizeof(tmp) - sizeof(prefix)) { Index: trunk/src_plugins/io_lihata/read.c =================================================================== --- trunk/src_plugins/io_lihata/read.c (revision 16210) +++ trunk/src_plugins/io_lihata/read.c (revision 16211) @@ -324,6 +324,19 @@ return iolht_error(nd, "Invalid bool value: '%s'\n", nd->data.text.value); } +static int parse_coord_conf(const char *path, lht_node_t *nd) +{ + pcb_coord_t tmp; + + if (nd == NULL) + return 0; + if (parse_coord(&tmp, nd) != 0) + return -1; + + conf_set(CFR_DESIGN, path, -1, nd->data.text.value, POL_OVERWRITE); + return 0; +} + static int parse_meta(pcb_board_t *pcb, lht_node_t *nd) { lht_node_t *grp; @@ -352,18 +365,20 @@ grp = lht_dom_hash_get(nd, "drc"); if ((grp != NULL) && (grp->type == LHT_HASH)) { - parse_coord(&pcb->Bloat, lht_dom_hash_get(grp, "bloat")); - parse_coord(&pcb->Shrink, lht_dom_hash_get(grp, "shrink")); - parse_coord(&pcb->minWid, lht_dom_hash_get(grp, "min_width")); - parse_coord(&pcb->minSlk, lht_dom_hash_get(grp, "min_silk")); - parse_coord(&pcb->minDrill, lht_dom_hash_get(grp, "min_drill")); - parse_coord(&pcb->minRing, lht_dom_hash_get(grp, "min_ring")); + if (rdver >= 5) + iolht_warn(grp, 5, "Lihata board v5+ should not have drc metadata saved in board header (use the config)\n"); + parse_coord_conf("design/bloat", lht_dom_hash_get(grp, "bloat")); + parse_coord_conf("design/shrink", lht_dom_hash_get(grp, "shrink")); + parse_coord_conf("design/min_wid", lht_dom_hash_get(grp, "min_width")); + parse_coord_conf("design/min_slk", lht_dom_hash_get(grp, "min_silk")); + parse_coord_conf("design/min_drill", lht_dom_hash_get(grp, "min_drill")); + parse_coord_conf("design/min_ring", lht_dom_hash_get(grp, "min_ring")); } grp = lht_dom_hash_get(nd, "cursor"); if ((grp != NULL) && (grp->type == LHT_HASH)) { if (rdver >= 5) - iolht_warn(grp, 0, "Lihata board v5+ should not have cursor metadata save\n"); + iolht_warn(grp, 0, "Lihata board v5+ should not have cursor metadata saved\n"); parse_coord(&pcb->CursorX, lht_dom_hash_get(grp, "x")); parse_coord(&pcb->CursorY, lht_dom_hash_get(grp, "y")); parse_double(&pcb->Zoom, lht_dom_hash_get(grp, "zoom")); Index: trunk/src_plugins/io_lihata/write.c =================================================================== --- trunk/src_plugins/io_lihata/write.c (revision 16210) +++ trunk/src_plugins/io_lihata/write.c (revision 16211) @@ -33,6 +33,7 @@ #include #include "config.h" #include "board.h" +#include "conf_core.h" #include "data.h" #include "plugins.h" #include "plug_io.h" @@ -147,16 +148,17 @@ lht_dom_hash_put(grp, build_textf("isle_area_nm2", "%f", pcb->IsleArea)); lht_dom_hash_put(grp, build_textf("thermal_scale", "%f", pcb->ThermScale)); + if (wrver < 5) { + grp = lht_dom_node_alloc(LHT_HASH, "drc"); + lht_dom_hash_put(meta, grp); + lht_dom_hash_put(grp, build_textf("bloat", CFMT, conf_core.design.bloat)); + lht_dom_hash_put(grp, build_textf("shrink", CFMT, conf_core.design.shrink)); + lht_dom_hash_put(grp, build_textf("min_width", CFMT, conf_core.design.min_wid)); + lht_dom_hash_put(grp, build_textf("min_silk", CFMT, conf_core.design.min_slk)); + lht_dom_hash_put(grp, build_textf("min_drill", CFMT, conf_core.design.min_drill)); + lht_dom_hash_put(grp, build_textf("min_ring", CFMT, conf_core.design.min_ring)); + } - grp = lht_dom_node_alloc(LHT_HASH, "drc"); - lht_dom_hash_put(meta, grp); - lht_dom_hash_put(grp, build_textf("bloat", CFMT, pcb->Bloat)); - lht_dom_hash_put(grp, build_textf("shrink", CFMT, pcb->Shrink)); - lht_dom_hash_put(grp, build_textf("min_width", CFMT, pcb->minWid)); - lht_dom_hash_put(grp, build_textf("min_silk", CFMT, pcb->minSlk)); - lht_dom_hash_put(grp, build_textf("min_drill", CFMT, pcb->minDrill)); - lht_dom_hash_put(grp, build_textf("min_ring", CFMT, pcb->minRing)); - if (wrver < 5) { grp = lht_dom_node_alloc(LHT_HASH, "cursor"); lht_dom_hash_put(meta, grp); Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 16210) +++ trunk/src_plugins/io_pcb/file.c (revision 16211) @@ -297,8 +297,8 @@ /* PolyArea should be output in square cmils, no suffix */ fprintf(FP, "PolyArea[%s]\n", c_dtostr(PCB_COORD_TO_MIL(PCB_COORD_TO_MIL(PCB->IsleArea) * 100) * 100)); pcb_fprintf(FP, "Thermal[%s]\n", c_dtostr(PCB->ThermScale)); - pcb_fprintf(FP, "DRC[%[0] %[0] %[0] %[0] %[0] %[0]]\n", PCB->Bloat, PCB->Shrink, - PCB->minWid, PCB->minSlk, PCB->minDrill, PCB->minRing); + pcb_fprintf(FP, "DRC[%[0] %[0] %[0] %[0] %[0] %[0]]\n", conf_core.design.bloat, conf_core.design.shrink, + conf_core.design.min_wid, conf_core.design.min_slk, conf_core.design.min_drill, conf_core.design.min_ring); fprintf(FP, "Flags(%s)\n", pcb_strflg_board_f2s(pcb_flags)); fprintf(FP, "Groups(\"%s\")\n", LayerGroupsToString(&PCB->LayerGroups)); fputs("Styles[\"", FP); Index: trunk/src_plugins/io_pcb/parse_y.c =================================================================== --- trunk/src_plugins/io_pcb/parse_y.c (revision 16210) +++ trunk/src_plugins/io_pcb/parse_y.c (revision 16211) @@ -166,6 +166,7 @@ static pcb_coord_t old_units (PLMeasure m); static pcb_coord_t new_units (PLMeasure m); static pcb_flag_t pcb_flag_old(unsigned int flags); +static void load_meta_coord(const char *path, pcb_coord_t crd); #define YYDEBUG 1 #define YYERROR_VERBOSE 1 @@ -173,7 +174,7 @@ #include "parse_y.h" -#line 177 "parse_y.c" /* yacc.c:339 */ +#line 178 "parse_y.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -264,7 +265,7 @@ typedef union YYSTYPE YYSTYPE; union YYSTYPE { -#line 119 "parse_y.y" /* yacc.c:355 */ +#line 120 "parse_y.y" /* yacc.c:355 */ int integer; double number; @@ -272,7 +273,7 @@ pcb_flag_t flagtype; PLMeasure measure; -#line 276 "parse_y.c" /* yacc.c:355 */ +#line 277 "parse_y.c" /* yacc.c:355 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -287,7 +288,7 @@ /* Copy the second part of user declarations. */ -#line 291 "parse_y.c" /* yacc.c:358 */ +#line 292 "parse_y.c" /* yacc.c:358 */ #ifdef short # undef short @@ -589,28 +590,28 @@ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 146, 146, 147, 148, 149, 173, 173, 247, 247, - 258, 258, 277, 278, 283, 283, 324, 326, 356, 363, - 370, 400, 401, 402, 405, 413, 428, 462, 468, 474, - 490, 492, 517, 519, 550, 552, 553, 554, 558, 568, - 579, 606, 610, 615, 643, 647, 691, 700, 709, 713, - 714, 718, 719, 723, 724, 724, 725, 726, 728, 728, - 735, 739, 740, 741, 742, 743, 779, 789, 800, 810, - 820, 856, 861, 893, 892, 923, 924, 928, 929, 933, - 934, 935, 936, 937, 938, 940, 945, 946, 947, 948, - 948, 949, 979, 988, 997, 1045, 1054, 1063, 1100, 1110, - 1128, 1178, 1177, 1216, 1218, 1223, 1222, 1229, 1231, 1236, - 1240, 1300, 1301, 1302, 1303, 1304, 1312, 1311, 1330, 1329, - 1348, 1347, 1368, 1366, 1390, 1388, 1475, 1476, 1480, 1481, - 1482, 1483, 1484, 1486, 1491, 1496, 1501, 1506, 1511, 1516, - 1516, 1520, 1521, 1525, 1526, 1527, 1528, 1530, 1536, 1543, - 1548, 1553, 1553, 1594, 1607, 1619, 1630, 1646, 1700, 1715, - 1728, 1739, 1750, 1751, 1755, 1756, 1778, 1780, 1796, 1815, - 1816, 1819, 1821, 1822, 1843, 1850, 1866, 1867, 1871, 1876, - 1877, 1881, 1882, 1906, 1905, 1915, 1916, 1920, 1921, 1940, - 1957, 1958, 1962, 1967, 1968, 1972, 1973, 1988, 1989, 1990, - 2017, 2030, 2031, 2035, 2036, 2041, 2042, 2043, 2044, 2045, - 2046, 2047, 2048, 2049, 2050 + 0, 147, 147, 148, 149, 150, 174, 174, 248, 248, + 259, 259, 278, 279, 284, 284, 325, 327, 357, 364, + 371, 401, 402, 403, 406, 414, 429, 463, 469, 475, + 491, 493, 518, 520, 551, 553, 554, 555, 559, 569, + 580, 607, 611, 616, 644, 648, 692, 701, 710, 714, + 715, 719, 720, 724, 725, 725, 726, 727, 729, 729, + 736, 740, 741, 742, 743, 744, 780, 790, 801, 811, + 821, 857, 862, 894, 893, 924, 925, 929, 930, 934, + 935, 936, 937, 938, 939, 941, 946, 947, 948, 949, + 949, 950, 980, 989, 998, 1046, 1055, 1064, 1101, 1111, + 1129, 1179, 1178, 1217, 1219, 1224, 1223, 1230, 1232, 1237, + 1241, 1301, 1302, 1303, 1304, 1305, 1313, 1312, 1331, 1330, + 1349, 1348, 1369, 1367, 1391, 1389, 1476, 1477, 1481, 1482, + 1483, 1484, 1485, 1487, 1492, 1497, 1502, 1507, 1512, 1517, + 1517, 1521, 1522, 1526, 1527, 1528, 1529, 1531, 1537, 1544, + 1549, 1554, 1554, 1595, 1608, 1620, 1631, 1647, 1701, 1716, + 1729, 1740, 1751, 1752, 1756, 1757, 1779, 1781, 1797, 1816, + 1817, 1820, 1822, 1823, 1844, 1851, 1867, 1868, 1872, 1877, + 1878, 1882, 1883, 1907, 1906, 1916, 1917, 1921, 1922, 1941, + 1958, 1959, 1963, 1968, 1969, 1973, 1974, 1989, 1990, 1991, + 2018, 2031, 2032, 2036, 2037, 2042, 2043, 2044, 2045, 2046, + 2047, 2048, 2049, 2050, 2051 }; #endif @@ -1787,13 +1788,13 @@ switch (yyn) { case 5: -#line 149 "parse_y.y" /* yacc.c:1646 */ +#line 150 "parse_y.y" /* yacc.c:1646 */ { YYABORT; } -#line 1793 "parse_y.c" /* yacc.c:1646 */ +#line 1794 "parse_y.c" /* yacc.c:1646 */ break; case 6: -#line 173 "parse_y.y" /* yacc.c:1646 */ +#line 174 "parse_y.y" /* yacc.c:1646 */ { /* reset flags for 'used layers'; * init font and data pointers @@ -1816,11 +1817,11 @@ layer_group_string = NULL; old_fmt = 0; } -#line 1820 "parse_y.c" /* yacc.c:1646 */ +#line 1821 "parse_y.c" /* yacc.c:1646 */ break; case 7: -#line 209 "parse_y.y" /* yacc.c:1646 */ +#line 210 "parse_y.y" /* yacc.c:1646 */ { pcb_board_t *pcb_save = PCB; if ((yy_settings_dest != CFR_invalid) && (layer_group_string != NULL)) @@ -1858,28 +1859,28 @@ PCB_ENDALL_LOOP; PCB = pcb_save; } -#line 1862 "parse_y.c" /* yacc.c:1646 */ +#line 1863 "parse_y.c" /* yacc.c:1646 */ break; case 8: -#line 247 "parse_y.y" /* yacc.c:1646 */ +#line 248 "parse_y.y" /* yacc.c:1646 */ { PreLoadElementPCB (); layer_group_string = NULL; } -#line 1869 "parse_y.c" /* yacc.c:1646 */ +#line 1870 "parse_y.c" /* yacc.c:1646 */ break; case 9: -#line 250 "parse_y.y" /* yacc.c:1646 */ +#line 251 "parse_y.y" /* yacc.c:1646 */ { LayerFlag[0] = pcb_true; LayerFlag[1] = pcb_true; yyData->LayerN = 2; PostLoadElementPCB (); } -#line 1879 "parse_y.c" /* yacc.c:1646 */ +#line 1880 "parse_y.c" /* yacc.c:1646 */ break; case 10: -#line 258 "parse_y.y" /* yacc.c:1646 */ +#line 259 "parse_y.y" /* yacc.c:1646 */ { /* reset flags for 'used layers'; * init font and data pointers @@ -1895,11 +1896,11 @@ LayerFlag[i] = pcb_false; yyData->LayerN = 0; } -#line 1899 "parse_y.c" /* yacc.c:1646 */ +#line 1900 "parse_y.c" /* yacc.c:1646 */ break; case 14: -#line 283 "parse_y.y" /* yacc.c:1646 */ +#line 284 "parse_y.y" /* yacc.c:1646 */ { /* mark all symbols invalid */ int i; @@ -1915,20 +1916,20 @@ } *yyFontkitValid = pcb_false; } -#line 1919 "parse_y.c" /* yacc.c:1646 */ +#line 1920 "parse_y.c" /* yacc.c:1646 */ break; case 15: -#line 299 "parse_y.y" /* yacc.c:1646 */ +#line 300 "parse_y.y" /* yacc.c:1646 */ { *yyFontkitValid = pcb_true; pcb_font_set_info(yyFont); } -#line 1928 "parse_y.c" /* yacc.c:1646 */ +#line 1929 "parse_y.c" /* yacc.c:1646 */ break; case 17: -#line 327 "parse_y.y" /* yacc.c:1646 */ +#line 328 "parse_y.y" /* yacc.c:1646 */ { if (check_file_version ((yyvsp[-1].integer)) != 0) { @@ -1935,11 +1936,11 @@ YYABORT; } } -#line 1939 "parse_y.c" /* yacc.c:1646 */ +#line 1940 "parse_y.c" /* yacc.c:1646 */ break; case 18: -#line 357 "parse_y.y" /* yacc.c:1646 */ +#line 358 "parse_y.y" /* yacc.c:1646 */ { yyPCB->Name = (yyvsp[-1].string); yyPCB->MaxWidth = PCB_MAX_COORD; @@ -1946,11 +1947,11 @@ yyPCB->MaxHeight = PCB_MAX_COORD; old_fmt = 1; } -#line 1950 "parse_y.c" /* yacc.c:1646 */ +#line 1951 "parse_y.c" /* yacc.c:1646 */ break; case 19: -#line 364 "parse_y.y" /* yacc.c:1646 */ +#line 365 "parse_y.y" /* yacc.c:1646 */ { yyPCB->Name = (yyvsp[-3].string); yyPCB->MaxWidth = OU ((yyvsp[-2].measure)); @@ -1957,11 +1958,11 @@ yyPCB->MaxHeight = OU ((yyvsp[-1].measure)); old_fmt = 1; } -#line 1961 "parse_y.c" /* yacc.c:1646 */ +#line 1962 "parse_y.c" /* yacc.c:1646 */ break; case 20: -#line 371 "parse_y.y" /* yacc.c:1646 */ +#line 372 "parse_y.y" /* yacc.c:1646 */ { yyPCB->Name = (yyvsp[-3].string); yyPCB->MaxWidth = NU ((yyvsp[-2].measure)); @@ -1968,21 +1969,21 @@ yyPCB->MaxHeight = NU ((yyvsp[-1].measure)); old_fmt = 0; } -#line 1972 "parse_y.c" /* yacc.c:1646 */ +#line 1973 "parse_y.c" /* yacc.c:1646 */ break; case 24: -#line 406 "parse_y.y" /* yacc.c:1646 */ +#line 407 "parse_y.y" /* yacc.c:1646 */ { yyPCB->Grid = OU ((yyvsp[-3].measure)); yyPCB->GridOffsetX = OU ((yyvsp[-2].measure)); yyPCB->GridOffsetY = OU ((yyvsp[-1].measure)); } -#line 1982 "parse_y.c" /* yacc.c:1646 */ +#line 1983 "parse_y.c" /* yacc.c:1646 */ break; case 25: -#line 414 "parse_y.y" /* yacc.c:1646 */ +#line 415 "parse_y.y" /* yacc.c:1646 */ { yyPCB->Grid = OU ((yyvsp[-4].measure)); yyPCB->GridOffsetX = OU ((yyvsp[-3].measure)); @@ -1994,11 +1995,11 @@ conf_set(yy_settings_dest, "editor/draw_grid", -1, "false", POL_OVERWRITE); } } -#line 1998 "parse_y.c" /* yacc.c:1646 */ +#line 1999 "parse_y.c" /* yacc.c:1646 */ break; case 26: -#line 429 "parse_y.y" /* yacc.c:1646 */ +#line 430 "parse_y.y" /* yacc.c:1646 */ { yyPCB->Grid = NU ((yyvsp[-4].measure)); yyPCB->GridOffsetX = NU ((yyvsp[-3].measure)); @@ -2010,109 +2011,109 @@ conf_set(yy_settings_dest, "editor/draw_grid", -1, "false", POL_OVERWRITE); } } -#line 2014 "parse_y.c" /* yacc.c:1646 */ +#line 2015 "parse_y.c" /* yacc.c:1646 */ break; case 27: -#line 463 "parse_y.y" /* yacc.c:1646 */ +#line 464 "parse_y.y" /* yacc.c:1646 */ { yyPCB->CursorX = OU ((yyvsp[-3].measure)); yyPCB->CursorY = OU ((yyvsp[-2].measure)); yyPCB->Zoom = (yyvsp[-1].number)*2; } -#line 2024 "parse_y.c" /* yacc.c:1646 */ +#line 2025 "parse_y.c" /* yacc.c:1646 */ break; case 28: -#line 469 "parse_y.y" /* yacc.c:1646 */ +#line 470 "parse_y.y" /* yacc.c:1646 */ { yyPCB->CursorX = NU ((yyvsp[-3].measure)); yyPCB->CursorY = NU ((yyvsp[-2].measure)); yyPCB->Zoom = (yyvsp[-1].number); } -#line 2034 "parse_y.c" /* yacc.c:1646 */ +#line 2035 "parse_y.c" /* yacc.c:1646 */ break; case 31: -#line 493 "parse_y.y" /* yacc.c:1646 */ +#line 494 "parse_y.y" /* yacc.c:1646 */ { /* Read in cmil^2 for now; in future this should be a noop. */ yyPCB->IsleArea = PCB_MIL_TO_COORD (PCB_MIL_TO_COORD ((yyvsp[-1].number)) / 100.0) / 100.0; } -#line 2043 "parse_y.c" /* yacc.c:1646 */ +#line 2044 "parse_y.c" /* yacc.c:1646 */ break; case 33: -#line 520 "parse_y.y" /* yacc.c:1646 */ +#line 521 "parse_y.y" /* yacc.c:1646 */ { yyPCB->ThermScale = (yyvsp[-1].number); } -#line 2051 "parse_y.c" /* yacc.c:1646 */ +#line 2052 "parse_y.c" /* yacc.c:1646 */ break; case 38: -#line 559 "parse_y.y" /* yacc.c:1646 */ +#line 560 "parse_y.y" /* yacc.c:1646 */ { - yyPCB->Bloat = NU ((yyvsp[-3].measure)); - yyPCB->Shrink = NU ((yyvsp[-2].measure)); - yyPCB->minWid = NU ((yyvsp[-1].measure)); - yyPCB->minRing = NU ((yyvsp[-1].measure)); + load_meta_coord("design/bloat", NU((yyvsp[-3].measure))); + load_meta_coord("design/shrink", NU((yyvsp[-2].measure))); + load_meta_coord("design/min_wid", NU((yyvsp[-1].measure))); + load_meta_coord("design/min_ring", NU((yyvsp[-1].measure))); } -#line 2062 "parse_y.c" /* yacc.c:1646 */ +#line 2063 "parse_y.c" /* yacc.c:1646 */ break; case 39: -#line 569 "parse_y.y" /* yacc.c:1646 */ +#line 570 "parse_y.y" /* yacc.c:1646 */ { - yyPCB->Bloat = NU ((yyvsp[-4].measure)); - yyPCB->Shrink = NU ((yyvsp[-3].measure)); - yyPCB->minWid = NU ((yyvsp[-2].measure)); - yyPCB->minSlk = NU ((yyvsp[-1].measure)); - yyPCB->minRing = NU ((yyvsp[-2].measure)); + load_meta_coord("design/bloat", NU((yyvsp[-4].measure))); + load_meta_coord("design/shrink", NU((yyvsp[-3].measure))); + load_meta_coord("design/min_wid", NU((yyvsp[-2].measure))); + load_meta_coord("design/min_slk", NU((yyvsp[-1].measure))); + load_meta_coord("design/min_ring", NU((yyvsp[-2].measure))); } -#line 2074 "parse_y.c" /* yacc.c:1646 */ +#line 2075 "parse_y.c" /* yacc.c:1646 */ break; case 40: -#line 580 "parse_y.y" /* yacc.c:1646 */ +#line 581 "parse_y.y" /* yacc.c:1646 */ { - yyPCB->Bloat = NU ((yyvsp[-6].measure)); - yyPCB->Shrink = NU ((yyvsp[-5].measure)); - yyPCB->minWid = NU ((yyvsp[-4].measure)); - yyPCB->minSlk = NU ((yyvsp[-3].measure)); - yyPCB->minDrill = NU ((yyvsp[-2].measure)); - yyPCB->minRing = NU ((yyvsp[-1].measure)); + load_meta_coord("design/bloat", NU((yyvsp[-6].measure))); + load_meta_coord("design/shrink", NU((yyvsp[-5].measure))); + load_meta_coord("design/min_wid", NU((yyvsp[-4].measure))); + load_meta_coord("design/min_slk", NU((yyvsp[-3].measure))); + load_meta_coord("design/min_drill", NU((yyvsp[-2].measure))); + load_meta_coord("design/min_ring", NU((yyvsp[-1].measure))); } -#line 2087 "parse_y.c" /* yacc.c:1646 */ +#line 2088 "parse_y.c" /* yacc.c:1646 */ break; case 41: -#line 607 "parse_y.y" /* yacc.c:1646 */ +#line 608 "parse_y.y" /* yacc.c:1646 */ { yy_pcb_flags = pcb_flag_make((yyvsp[-1].integer) & PCB_FLAGS); } -#line 2095 "parse_y.c" /* yacc.c:1646 */ +#line 2096 "parse_y.c" /* yacc.c:1646 */ break; case 42: -#line 611 "parse_y.y" /* yacc.c:1646 */ +#line 612 "parse_y.y" /* yacc.c:1646 */ { yy_pcb_flags = pcb_strflg_board_s2f((yyvsp[-1].string), yyerror); free((yyvsp[-1].string)); } -#line 2104 "parse_y.c" /* yacc.c:1646 */ +#line 2105 "parse_y.c" /* yacc.c:1646 */ break; case 44: -#line 644 "parse_y.y" /* yacc.c:1646 */ +#line 645 "parse_y.y" /* yacc.c:1646 */ { layer_group_string = (yyvsp[-1].string); } -#line 2112 "parse_y.c" /* yacc.c:1646 */ +#line 2113 "parse_y.c" /* yacc.c:1646 */ break; case 46: -#line 692 "parse_y.y" /* yacc.c:1646 */ +#line 693 "parse_y.y" /* yacc.c:1646 */ { if (pcb_route_string_parse((yyvsp[-1].string), &yyPCB->RouteStyle, "mil")) { @@ -2121,11 +2122,11 @@ } free((yyvsp[-1].string)); } -#line 2125 "parse_y.c" /* yacc.c:1646 */ +#line 2126 "parse_y.c" /* yacc.c:1646 */ break; case 47: -#line 701 "parse_y.y" /* yacc.c:1646 */ +#line 702 "parse_y.y" /* yacc.c:1646 */ { if (pcb_route_string_parse(((yyvsp[-1].string) == NULL ? "" : (yyvsp[-1].string)), &yyPCB->RouteStyle, "cmil")) { @@ -2134,17 +2135,17 @@ } free((yyvsp[-1].string)); } -#line 2138 "parse_y.c" /* yacc.c:1646 */ +#line 2139 "parse_y.c" /* yacc.c:1646 */ break; case 54: -#line 724 "parse_y.y" /* yacc.c:1646 */ +#line 725 "parse_y.y" /* yacc.c:1646 */ { attr_list = & yyPCB->Attributes; } -#line 2144 "parse_y.c" /* yacc.c:1646 */ +#line 2145 "parse_y.c" /* yacc.c:1646 */ break; case 58: -#line 728 "parse_y.y" /* yacc.c:1646 */ +#line 729 "parse_y.y" /* yacc.c:1646 */ { /* clear pointer to force memory allocation by * the appropriate subroutine @@ -2151,57 +2152,57 @@ */ yysubc = NULL; } -#line 2155 "parse_y.c" /* yacc.c:1646 */ +#line 2156 "parse_y.c" /* yacc.c:1646 */ break; case 60: -#line 735 "parse_y.y" /* yacc.c:1646 */ +#line 736 "parse_y.y" /* yacc.c:1646 */ { YYABORT; } -#line 2161 "parse_y.c" /* yacc.c:1646 */ +#line 2162 "parse_y.c" /* yacc.c:1646 */ break; case 66: -#line 780 "parse_y.y" /* yacc.c:1646 */ +#line 781 "parse_y.y" /* yacc.c:1646 */ { pcb_old_via_new(yyData, NU ((yyvsp[-8].measure)), NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), (yyvsp[-2].string), (yyvsp[-1].flagtype)); free ((yyvsp[-2].string)); } -#line 2171 "parse_y.c" /* yacc.c:1646 */ +#line 2172 "parse_y.c" /* yacc.c:1646 */ break; case 67: -#line 790 "parse_y.y" /* yacc.c:1646 */ +#line 791 "parse_y.y" /* yacc.c:1646 */ { pcb_old_via_new(yyData, OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2181 "parse_y.c" /* yacc.c:1646 */ +#line 2182 "parse_y.c" /* yacc.c:1646 */ break; case 68: -#line 801 "parse_y.y" /* yacc.c:1646 */ +#line 802 "parse_y.y" /* yacc.c:1646 */ { pcb_old_via_new(yyData, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-5].measure)) + OU((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2191 "parse_y.c" /* yacc.c:1646 */ +#line 2192 "parse_y.c" /* yacc.c:1646 */ break; case 69: -#line 811 "parse_y.y" /* yacc.c:1646 */ +#line 812 "parse_y.y" /* yacc.c:1646 */ { pcb_old_via_new(yyData, OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), 2*PCB_GROUNDPLANEFRAME, OU((yyvsp[-4].measure)) + 2*PCB_MASKFRAME, OU ((yyvsp[-3].measure)), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2201 "parse_y.c" /* yacc.c:1646 */ +#line 2202 "parse_y.c" /* yacc.c:1646 */ break; case 70: -#line 821 "parse_y.y" /* yacc.c:1646 */ +#line 822 "parse_y.y" /* yacc.c:1646 */ { pcb_coord_t hole = (OU((yyvsp[-3].measure)) * PCB_DEFAULT_DRILLINGHOLE); @@ -2214,29 +2215,29 @@ OU((yyvsp[-3].measure)) + 2*PCB_MASKFRAME, hole, (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2218 "parse_y.c" /* yacc.c:1646 */ +#line 2219 "parse_y.c" /* yacc.c:1646 */ break; case 71: -#line 857 "parse_y.y" /* yacc.c:1646 */ +#line 858 "parse_y.y" /* yacc.c:1646 */ { pcb_rat_new(yyData, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), (yyvsp[-5].integer), (yyvsp[-2].integer), conf_core.appearance.rat_thickness, (yyvsp[-1].flagtype)); } -#line 2227 "parse_y.c" /* yacc.c:1646 */ +#line 2228 "parse_y.c" /* yacc.c:1646 */ break; case 72: -#line 862 "parse_y.y" /* yacc.c:1646 */ +#line 863 "parse_y.y" /* yacc.c:1646 */ { pcb_rat_new(yyData, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), (yyvsp[-5].integer), (yyvsp[-2].integer), conf_core.appearance.rat_thickness, pcb_flag_old((yyvsp[-1].integer))); } -#line 2236 "parse_y.c" /* yacc.c:1646 */ +#line 2237 "parse_y.c" /* yacc.c:1646 */ break; case 73: -#line 893 "parse_y.y" /* yacc.c:1646 */ +#line 894 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-4].integer) <= 0 || (yyvsp[-4].integer) > PCB_MAX_LAYER) { @@ -2263,44 +2264,44 @@ if ((yyvsp[-2].string) != NULL) free((yyvsp[-2].string)); } -#line 2267 "parse_y.c" /* yacc.c:1646 */ +#line 2268 "parse_y.c" /* yacc.c:1646 */ break; case 85: -#line 941 "parse_y.y" /* yacc.c:1646 */ +#line 942 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_new_from_rectangle(Layer, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-5].measure)) + OU ((yyvsp[-3].measure)), OU ((yyvsp[-4].measure)) + OU ((yyvsp[-2].measure)), 0, pcb_flag_old((yyvsp[-1].integer))); } -#line 2276 "parse_y.c" /* yacc.c:1646 */ +#line 2277 "parse_y.c" /* yacc.c:1646 */ break; case 89: -#line 948 "parse_y.y" /* yacc.c:1646 */ +#line 949 "parse_y.y" /* yacc.c:1646 */ { attr_list = & Layer->Attributes; } -#line 2282 "parse_y.c" /* yacc.c:1646 */ +#line 2283 "parse_y.c" /* yacc.c:1646 */ break; case 92: -#line 980 "parse_y.y" /* yacc.c:1646 */ +#line 981 "parse_y.y" /* yacc.c:1646 */ { pcb_line_new(Layer, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), (yyvsp[-1].flagtype)); } -#line 2291 "parse_y.c" /* yacc.c:1646 */ +#line 2292 "parse_y.c" /* yacc.c:1646 */ break; case 93: -#line 989 "parse_y.y" /* yacc.c:1646 */ +#line 990 "parse_y.y" /* yacc.c:1646 */ { pcb_line_new(Layer, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), pcb_flag_old((yyvsp[-1].integer))); } -#line 2300 "parse_y.c" /* yacc.c:1646 */ +#line 2301 "parse_y.c" /* yacc.c:1646 */ break; case 94: -#line 998 "parse_y.y" /* yacc.c:1646 */ +#line 999 "parse_y.y" /* yacc.c:1646 */ { /* eliminate old-style rat-lines */ if ((IV ((yyvsp[-1].measure)) & PCB_FLAG_RAT) == 0) @@ -2307,48 +2308,48 @@ pcb_line_new(Layer, OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old(IV ((yyvsp[-1].measure)))); } -#line 2311 "parse_y.c" /* yacc.c:1646 */ +#line 2312 "parse_y.c" /* yacc.c:1646 */ break; case 95: -#line 1046 "parse_y.y" /* yacc.c:1646 */ +#line 1047 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, NU ((yyvsp[-9].measure)), NU ((yyvsp[-8].measure)), NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-1].flagtype)); } -#line 2320 "parse_y.c" /* yacc.c:1646 */ +#line 2321 "parse_y.c" /* yacc.c:1646 */ break; case 96: -#line 1055 "parse_y.y" /* yacc.c:1646 */ +#line 1056 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, OU ((yyvsp[-9].measure)), OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), pcb_flag_old((yyvsp[-1].integer))); } -#line 2329 "parse_y.c" /* yacc.c:1646 */ +#line 2330 "parse_y.c" /* yacc.c:1646 */ break; case 97: -#line 1064 "parse_y.y" /* yacc.c:1646 */ +#line 1065 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-6].measure)), IV ((yyvsp[-3].measure)), (yyvsp[-2].number), OU ((yyvsp[-4].measure)), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old((yyvsp[-1].integer))); } -#line 2338 "parse_y.c" /* yacc.c:1646 */ +#line 2339 "parse_y.c" /* yacc.c:1646 */ break; case 98: -#line 1101 "parse_y.y" /* yacc.c:1646 */ +#line 1102 "parse_y.y" /* yacc.c:1646 */ { /* use a default scale of 100% */ pcb_text_new(Layer,yyFont,OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), 100, (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2348 "parse_y.c" /* yacc.c:1646 */ +#line 2349 "parse_y.c" /* yacc.c:1646 */ break; case 99: -#line 1111 "parse_y.y" /* yacc.c:1646 */ +#line 1112 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-1].integer) & PCB_FLAG_ONSILK) { @@ -2363,11 +2364,11 @@ pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2367 "parse_y.c" /* yacc.c:1646 */ +#line 2368 "parse_y.c" /* yacc.c:1646 */ break; case 100: -#line 1129 "parse_y.y" /* yacc.c:1646 */ +#line 1130 "parse_y.y" /* yacc.c:1646 */ { /* FIXME: shouldn't know about .f */ /* I don't think this matters because anything with hi_format @@ -2387,19 +2388,19 @@ pcb_text_new(Layer, yyFont, NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), (yyvsp[-4].number), (yyvsp[-3].number), (yyvsp[-2].string), (yyvsp[-1].flagtype)); free ((yyvsp[-2].string)); } -#line 2391 "parse_y.c" /* yacc.c:1646 */ +#line 2392 "parse_y.c" /* yacc.c:1646 */ break; case 101: -#line 1178 "parse_y.y" /* yacc.c:1646 */ +#line 1179 "parse_y.y" /* yacc.c:1646 */ { Polygon = pcb_poly_new(Layer, 0, (yyvsp[-2].flagtype)); } -#line 2399 "parse_y.c" /* yacc.c:1646 */ +#line 2400 "parse_y.c" /* yacc.c:1646 */ break; case 102: -#line 1183 "parse_y.y" /* yacc.c:1646 */ +#line 1184 "parse_y.y" /* yacc.c:1646 */ { pcb_cardinal_t contour, contour_start, contour_end; pcb_bool bad_contour_found = pcb_false; @@ -2431,35 +2432,35 @@ pcb_r_insert_entry(Layer->polygon_tree, (pcb_box_t *) Polygon); } } -#line 2435 "parse_y.c" /* yacc.c:1646 */ +#line 2436 "parse_y.c" /* yacc.c:1646 */ break; case 105: -#line 1223 "parse_y.y" /* yacc.c:1646 */ +#line 1224 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_hole_new(Polygon); } -#line 2443 "parse_y.c" /* yacc.c:1646 */ +#line 2444 "parse_y.c" /* yacc.c:1646 */ break; case 109: -#line 1237 "parse_y.y" /* yacc.c:1646 */ +#line 1238 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_point_new(Polygon, OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2451 "parse_y.c" /* yacc.c:1646 */ +#line 2452 "parse_y.c" /* yacc.c:1646 */ break; case 110: -#line 1241 "parse_y.y" /* yacc.c:1646 */ +#line 1242 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_point_new(Polygon, NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2459 "parse_y.c" /* yacc.c:1646 */ +#line 2460 "parse_y.c" /* yacc.c:1646 */ break; case 116: -#line 1312 "parse_y.y" /* yacc.c:1646 */ +#line 1313 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, pcb_no_flags(), (yyvsp[-6].string), (yyvsp[-5].string), NULL, OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), (yyvsp[-2].integer), 100, pcb_no_flags(), pcb_false); @@ -2467,19 +2468,19 @@ free ((yyvsp[-5].string)); pin_num = 1; } -#line 2471 "parse_y.c" /* yacc.c:1646 */ +#line 2472 "parse_y.c" /* yacc.c:1646 */ break; case 117: -#line 1320 "parse_y.y" /* yacc.c:1646 */ +#line 1321 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_fin(yyData); } -#line 2479 "parse_y.c" /* yacc.c:1646 */ +#line 2480 "parse_y.c" /* yacc.c:1646 */ break; case 118: -#line 1330 "parse_y.y" /* yacc.c:1646 */ +#line 1331 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, pcb_flag_old((yyvsp[-9].integer)), (yyvsp[-8].string), (yyvsp[-7].string), NULL, OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), IV ((yyvsp[-4].measure)), IV ((yyvsp[-3].measure)), pcb_flag_old((yyvsp[-2].integer)), pcb_false); @@ -2487,19 +2488,19 @@ free ((yyvsp[-7].string)); pin_num = 1; } -#line 2491 "parse_y.c" /* yacc.c:1646 */ +#line 2492 "parse_y.c" /* yacc.c:1646 */ break; case 119: -#line 1338 "parse_y.y" /* yacc.c:1646 */ +#line 1339 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_fin(yyData); } -#line 2499 "parse_y.c" /* yacc.c:1646 */ +#line 2500 "parse_y.c" /* yacc.c:1646 */ break; case 120: -#line 1348 "parse_y.y" /* yacc.c:1646 */ +#line 1349 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, pcb_flag_old((yyvsp[-10].integer)), (yyvsp[-9].string), (yyvsp[-8].string), (yyvsp[-7].string), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), IV ((yyvsp[-4].measure)), IV ((yyvsp[-3].measure)), pcb_flag_old((yyvsp[-2].integer)), pcb_false); @@ -2508,19 +2509,19 @@ free ((yyvsp[-7].string)); pin_num = 1; } -#line 2512 "parse_y.c" /* yacc.c:1646 */ +#line 2513 "parse_y.c" /* yacc.c:1646 */ break; case 121: -#line 1357 "parse_y.y" /* yacc.c:1646 */ +#line 1358 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_fin(yyData); } -#line 2520 "parse_y.c" /* yacc.c:1646 */ +#line 2521 "parse_y.c" /* yacc.c:1646 */ break; case 122: -#line 1368 "parse_y.y" /* yacc.c:1646 */ +#line 1369 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, pcb_flag_old((yyvsp[-12].integer)), (yyvsp[-11].string), (yyvsp[-10].string), (yyvsp[-9].string), OU ((yyvsp[-8].measure)) + OU ((yyvsp[-6].measure)), OU ((yyvsp[-7].measure)) + OU ((yyvsp[-5].measure)), @@ -2531,19 +2532,19 @@ free ((yyvsp[-10].string)); free ((yyvsp[-9].string)); } -#line 2535 "parse_y.c" /* yacc.c:1646 */ +#line 2536 "parse_y.c" /* yacc.c:1646 */ break; case 123: -#line 1379 "parse_y.y" /* yacc.c:1646 */ +#line 1380 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_fin(yyData); } -#line 2543 "parse_y.c" /* yacc.c:1646 */ +#line 2544 "parse_y.c" /* yacc.c:1646 */ break; case 124: -#line 1390 "parse_y.y" /* yacc.c:1646 */ +#line 1391 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, (yyvsp[-12].flagtype), (yyvsp[-11].string), (yyvsp[-10].string), (yyvsp[-9].string), NU ((yyvsp[-8].measure)) + NU ((yyvsp[-6].measure)), NU ((yyvsp[-7].measure)) + NU ((yyvsp[-5].measure)), @@ -2554,11 +2555,11 @@ free ((yyvsp[-10].string)); free ((yyvsp[-9].string)); } -#line 2558 "parse_y.c" /* yacc.c:1646 */ +#line 2559 "parse_y.c" /* yacc.c:1646 */ break; case 125: -#line 1401 "parse_y.y" /* yacc.c:1646 */ +#line 1402 "parse_y.y" /* yacc.c:1646 */ { if (pcb_subc_is_empty(yysubc)) { pcb_subc_free(yysubc); @@ -2568,111 +2569,111 @@ io_pcb_element_fin(yyData); } } -#line 2572 "parse_y.c" /* yacc.c:1646 */ +#line 2573 "parse_y.c" /* yacc.c:1646 */ break; case 133: -#line 1487 "parse_y.y" /* yacc.c:1646 */ +#line 1488 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_line_new(yysubc, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2580 "parse_y.c" /* yacc.c:1646 */ +#line 2581 "parse_y.c" /* yacc.c:1646 */ break; case 134: -#line 1492 "parse_y.y" /* yacc.c:1646 */ +#line 1493 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_line_new(yysubc, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2588 "parse_y.c" /* yacc.c:1646 */ +#line 2589 "parse_y.c" /* yacc.c:1646 */ break; case 135: -#line 1497 "parse_y.y" /* yacc.c:1646 */ +#line 1498 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_arc_new(yysubc, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-1].measure))); } -#line 2596 "parse_y.c" /* yacc.c:1646 */ +#line 2597 "parse_y.c" /* yacc.c:1646 */ break; case 136: -#line 1502 "parse_y.y" /* yacc.c:1646 */ +#line 1503 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_arc_new(yysubc, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-1].measure))); } -#line 2604 "parse_y.c" /* yacc.c:1646 */ +#line 2605 "parse_y.c" /* yacc.c:1646 */ break; case 137: -#line 1507 "parse_y.y" /* yacc.c:1646 */ +#line 1508 "parse_y.y" /* yacc.c:1646 */ { yysubc_ox = NU ((yyvsp[-2].measure)); yysubc_oy = NU ((yyvsp[-1].measure)); } -#line 2613 "parse_y.c" /* yacc.c:1646 */ +#line 2614 "parse_y.c" /* yacc.c:1646 */ break; case 138: -#line 1512 "parse_y.y" /* yacc.c:1646 */ +#line 1513 "parse_y.y" /* yacc.c:1646 */ { yysubc_ox = OU ((yyvsp[-2].measure)); yysubc_oy = OU ((yyvsp[-1].measure)); } -#line 2622 "parse_y.c" /* yacc.c:1646 */ +#line 2623 "parse_y.c" /* yacc.c:1646 */ break; case 139: -#line 1516 "parse_y.y" /* yacc.c:1646 */ +#line 1517 "parse_y.y" /* yacc.c:1646 */ { attr_list = & yysubc->Attributes; } -#line 2628 "parse_y.c" /* yacc.c:1646 */ +#line 2629 "parse_y.c" /* yacc.c:1646 */ break; case 147: -#line 1531 "parse_y.y" /* yacc.c:1646 */ +#line 1532 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_line_new(yysubc, NU ((yyvsp[-5].measure)) + yysubc_ox, NU ((yyvsp[-4].measure)) + yysubc_oy, NU ((yyvsp[-3].measure)) + yysubc_ox, NU ((yyvsp[-2].measure)) + yysubc_oy, NU ((yyvsp[-1].measure))); } -#line 2638 "parse_y.c" /* yacc.c:1646 */ +#line 2639 "parse_y.c" /* yacc.c:1646 */ break; case 148: -#line 1537 "parse_y.y" /* yacc.c:1646 */ +#line 1538 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_line_new(yysubc, OU ((yyvsp[-5].measure)) + yysubc_ox, OU ((yyvsp[-4].measure)) + yysubc_oy, OU ((yyvsp[-3].measure)) + yysubc_ox, OU ((yyvsp[-2].measure)) + yysubc_oy, OU ((yyvsp[-1].measure))); } -#line 2648 "parse_y.c" /* yacc.c:1646 */ +#line 2649 "parse_y.c" /* yacc.c:1646 */ break; case 149: -#line 1544 "parse_y.y" /* yacc.c:1646 */ +#line 1545 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_arc_new(yysubc, NU ((yyvsp[-7].measure)) + yysubc_ox, NU ((yyvsp[-6].measure)) + yysubc_oy, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-1].measure))); } -#line 2657 "parse_y.c" /* yacc.c:1646 */ +#line 2658 "parse_y.c" /* yacc.c:1646 */ break; case 150: -#line 1549 "parse_y.y" /* yacc.c:1646 */ +#line 1550 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_arc_new(yysubc, OU ((yyvsp[-7].measure)) + yysubc_ox, OU ((yyvsp[-6].measure)) + yysubc_oy, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-1].measure))); } -#line 2666 "parse_y.c" /* yacc.c:1646 */ +#line 2667 "parse_y.c" /* yacc.c:1646 */ break; case 151: -#line 1553 "parse_y.y" /* yacc.c:1646 */ +#line 1554 "parse_y.y" /* yacc.c:1646 */ { attr_list = & yysubc->Attributes; } -#line 2672 "parse_y.c" /* yacc.c:1646 */ +#line 2673 "parse_y.c" /* yacc.c:1646 */ break; case 153: -#line 1595 "parse_y.y" /* yacc.c:1646 */ +#line 1596 "parse_y.y" /* yacc.c:1646 */ { pcb_pstk_t *pin = io_pcb_element_pin_new(yysubc, NU ((yyvsp[-9].measure)) + yysubc_ox, NU ((yyvsp[-8].measure)) + yysubc_oy, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].string), @@ -2681,11 +2682,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2685 "parse_y.c" /* yacc.c:1646 */ +#line 2686 "parse_y.c" /* yacc.c:1646 */ break; case 154: -#line 1608 "parse_y.y" /* yacc.c:1646 */ +#line 1609 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_pin_new(yysubc, OU ((yyvsp[-9].measure)) + yysubc_ox, OU ((yyvsp[-8].measure)) + yysubc_oy, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].string), @@ -2693,11 +2694,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2697 "parse_y.c" /* yacc.c:1646 */ +#line 2698 "parse_y.c" /* yacc.c:1646 */ break; case 155: -#line 1620 "parse_y.y" /* yacc.c:1646 */ +#line 1621 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_pin_new(yysubc, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), 2*PCB_GROUNDPLANEFRAME, OU ((yyvsp[-5].measure)) + 2*PCB_MASKFRAME, OU ((yyvsp[-4].measure)), (yyvsp[-3].string), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); @@ -2704,11 +2705,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2708 "parse_y.c" /* yacc.c:1646 */ +#line 2709 "parse_y.c" /* yacc.c:1646 */ break; case 156: -#line 1631 "parse_y.y" /* yacc.c:1646 */ +#line 1632 "parse_y.y" /* yacc.c:1646 */ { char p_number[8]; @@ -2718,11 +2719,11 @@ free ((yyvsp[-2].string)); } -#line 2722 "parse_y.c" /* yacc.c:1646 */ +#line 2723 "parse_y.c" /* yacc.c:1646 */ break; case 157: -#line 1647 "parse_y.y" /* yacc.c:1646 */ +#line 1648 "parse_y.y" /* yacc.c:1646 */ { pcb_coord_t hole = OU ((yyvsp[-3].measure)) * PCB_DEFAULT_DRILLINGHOLE; char p_number[8]; @@ -2737,11 +2738,11 @@ OU ((yyvsp[-3].measure)) + 2*PCB_MASKFRAME, hole, (yyvsp[-2].string), p_number, pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2741 "parse_y.c" /* yacc.c:1646 */ +#line 2742 "parse_y.c" /* yacc.c:1646 */ break; case 158: -#line 1701 "parse_y.y" /* yacc.c:1646 */ +#line 1702 "parse_y.y" /* yacc.c:1646 */ { pcb_pstk_t *pad = io_pcb_element_pad_new(yysubc, NU ((yyvsp[-10].measure)) + yysubc_ox, NU ((yyvsp[-9].measure)) + yysubc_oy, @@ -2752,11 +2753,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2756 "parse_y.c" /* yacc.c:1646 */ +#line 2757 "parse_y.c" /* yacc.c:1646 */ break; case 159: -#line 1716 "parse_y.y" /* yacc.c:1646 */ +#line 1717 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_pad_new(yysubc,OU ((yyvsp[-10].measure)) + yysubc_ox, OU ((yyvsp[-9].measure)) + yysubc_oy, OU ((yyvsp[-8].measure)) + yysubc_ox, @@ -2765,11 +2766,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2769 "parse_y.c" /* yacc.c:1646 */ +#line 2770 "parse_y.c" /* yacc.c:1646 */ break; case 160: -#line 1729 "parse_y.y" /* yacc.c:1646 */ +#line 1730 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_pad_new(yysubc,OU ((yyvsp[-8].measure)),OU ((yyvsp[-7].measure)),OU ((yyvsp[-6].measure)),OU ((yyvsp[-5].measure)),OU ((yyvsp[-4].measure)), 2*PCB_GROUNDPLANEFRAME, OU ((yyvsp[-4].measure)) + 2*PCB_MASKFRAME, (yyvsp[-3].string), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); @@ -2776,11 +2777,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2780 "parse_y.c" /* yacc.c:1646 */ +#line 2781 "parse_y.c" /* yacc.c:1646 */ break; case 161: -#line 1740 "parse_y.y" /* yacc.c:1646 */ +#line 1741 "parse_y.y" /* yacc.c:1646 */ { char p_number[8]; @@ -2789,23 +2790,23 @@ OU ((yyvsp[-3].measure)) + 2*PCB_MASKFRAME, (yyvsp[-2].string),p_number, pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2793 "parse_y.c" /* yacc.c:1646 */ +#line 2794 "parse_y.c" /* yacc.c:1646 */ break; case 162: -#line 1750 "parse_y.y" /* yacc.c:1646 */ +#line 1751 "parse_y.y" /* yacc.c:1646 */ { (yyval.flagtype) = pcb_flag_old((yyvsp[0].integer)); } -#line 2799 "parse_y.c" /* yacc.c:1646 */ +#line 2800 "parse_y.c" /* yacc.c:1646 */ break; case 163: -#line 1751 "parse_y.y" /* yacc.c:1646 */ +#line 1752 "parse_y.y" /* yacc.c:1646 */ { (yyval.flagtype) = pcb_strflg_s2f((yyvsp[0].string), yyerror, &yy_intconn); free((yyvsp[0].string)); } -#line 2805 "parse_y.c" /* yacc.c:1646 */ +#line 2806 "parse_y.c" /* yacc.c:1646 */ break; case 167: -#line 1781 "parse_y.y" /* yacc.c:1646 */ +#line 1782 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-3].integer) <= 0 || (yyvsp[-3].integer) > PCB_MAX_FONTPOSITION) { @@ -2821,11 +2822,11 @@ Symbol->Valid = pcb_true; Symbol->Delta = NU ((yyvsp[-2].measure)); } -#line 2825 "parse_y.c" /* yacc.c:1646 */ +#line 2826 "parse_y.c" /* yacc.c:1646 */ break; case 168: -#line 1797 "parse_y.y" /* yacc.c:1646 */ +#line 1798 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-3].integer) <= 0 || (yyvsp[-3].integer) > PCB_MAX_FONTPOSITION) { @@ -2841,64 +2842,64 @@ Symbol->Valid = pcb_true; Symbol->Delta = OU ((yyvsp[-2].measure)); } -#line 2845 "parse_y.c" /* yacc.c:1646 */ +#line 2846 "parse_y.c" /* yacc.c:1646 */ break; case 174: -#line 1844 "parse_y.y" /* yacc.c:1646 */ +#line 1845 "parse_y.y" /* yacc.c:1646 */ { pcb_font_new_line_in_sym(Symbol, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2853 "parse_y.c" /* yacc.c:1646 */ +#line 2854 "parse_y.c" /* yacc.c:1646 */ break; case 175: -#line 1851 "parse_y.y" /* yacc.c:1646 */ +#line 1852 "parse_y.y" /* yacc.c:1646 */ { pcb_font_new_line_in_sym(Symbol, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2861 "parse_y.c" /* yacc.c:1646 */ +#line 2862 "parse_y.c" /* yacc.c:1646 */ break; case 183: -#line 1906 "parse_y.y" /* yacc.c:1646 */ +#line 1907 "parse_y.y" /* yacc.c:1646 */ { Menu = pcb_lib_net_new((pcb_lib_t *)&yyPCB->NetlistLib, (yyvsp[-3].string), (yyvsp[-2].string)); free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2871 "parse_y.c" /* yacc.c:1646 */ +#line 2872 "parse_y.c" /* yacc.c:1646 */ break; case 189: -#line 1941 "parse_y.y" /* yacc.c:1646 */ +#line 1942 "parse_y.y" /* yacc.c:1646 */ { pcb_lib_conn_new(Menu, (yyvsp[-1].string)); free ((yyvsp[-1].string)); } -#line 2880 "parse_y.c" /* yacc.c:1646 */ +#line 2881 "parse_y.c" /* yacc.c:1646 */ break; case 197: -#line 1988 "parse_y.y" /* yacc.c:1646 */ +#line 1989 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_ADD_CONN, (yyvsp[-2].string), (yyvsp[-1].string), NULL); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2886 "parse_y.c" /* yacc.c:1646 */ +#line 2887 "parse_y.c" /* yacc.c:1646 */ break; case 198: -#line 1989 "parse_y.y" /* yacc.c:1646 */ +#line 1990 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_DEL_CONN, (yyvsp[-2].string), (yyvsp[-1].string), NULL); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2892 "parse_y.c" /* yacc.c:1646 */ +#line 2893 "parse_y.c" /* yacc.c:1646 */ break; case 199: -#line 1990 "parse_y.y" /* yacc.c:1646 */ +#line 1991 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_CHANGE_ATTRIB, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string)); free((yyvsp[-3].string)); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2898 "parse_y.c" /* yacc.c:1646 */ +#line 2899 "parse_y.c" /* yacc.c:1646 */ break; case 200: -#line 2018 "parse_y.y" /* yacc.c:1646 */ +#line 2019 "parse_y.y" /* yacc.c:1646 */ { char *old_val, *key = (yyvsp[-2].string), *val = (yyvsp[-1].string) ? (yyvsp[-1].string) : (char *)""; old_val = pcb_attribute_get(attr_list, key); @@ -2909,95 +2910,95 @@ free(key); free(val); } -#line 2913 "parse_y.c" /* yacc.c:1646 */ +#line 2914 "parse_y.c" /* yacc.c:1646 */ break; case 201: -#line 2030 "parse_y.y" /* yacc.c:1646 */ +#line 2031 "parse_y.y" /* yacc.c:1646 */ { (yyval.string) = (yyvsp[0].string); } -#line 2919 "parse_y.c" /* yacc.c:1646 */ +#line 2920 "parse_y.c" /* yacc.c:1646 */ break; case 202: -#line 2031 "parse_y.y" /* yacc.c:1646 */ +#line 2032 "parse_y.y" /* yacc.c:1646 */ { (yyval.string) = 0; } -#line 2925 "parse_y.c" /* yacc.c:1646 */ +#line 2926 "parse_y.c" /* yacc.c:1646 */ break; case 203: -#line 2035 "parse_y.y" /* yacc.c:1646 */ +#line 2036 "parse_y.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[0].number); } -#line 2931 "parse_y.c" /* yacc.c:1646 */ +#line 2932 "parse_y.c" /* yacc.c:1646 */ break; case 204: -#line 2036 "parse_y.y" /* yacc.c:1646 */ +#line 2037 "parse_y.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[0].integer); } -#line 2937 "parse_y.c" /* yacc.c:1646 */ +#line 2938 "parse_y.c" /* yacc.c:1646 */ break; case 205: -#line 2041 "parse_y.y" /* yacc.c:1646 */ +#line 2042 "parse_y.y" /* yacc.c:1646 */ { do_measure(&(yyval.measure), (yyvsp[0].number), PCB_MIL_TO_COORD ((yyvsp[0].number)) / 100.0, 0); } -#line 2943 "parse_y.c" /* yacc.c:1646 */ +#line 2944 "parse_y.c" /* yacc.c:1646 */ break; case 206: -#line 2042 "parse_y.y" /* yacc.c:1646 */ +#line 2043 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number)) / 100000.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2949 "parse_y.c" /* yacc.c:1646 */ +#line 2950 "parse_y.c" /* yacc.c:1646 */ break; case 207: -#line 2043 "parse_y.y" /* yacc.c:1646 */ +#line 2044 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number)) / 100.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2955 "parse_y.c" /* yacc.c:1646 */ +#line 2956 "parse_y.c" /* yacc.c:1646 */ break; case 208: -#line 2044 "parse_y.y" /* yacc.c:1646 */ +#line 2045 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number))); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2961 "parse_y.c" /* yacc.c:1646 */ +#line 2962 "parse_y.c" /* yacc.c:1646 */ break; case 209: -#line 2045 "parse_y.y" /* yacc.c:1646 */ +#line 2046 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_INCH_TO_COORD ((yyvsp[-1].number))); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2967 "parse_y.c" /* yacc.c:1646 */ +#line 2968 "parse_y.c" /* yacc.c:1646 */ break; case 210: -#line 2046 "parse_y.y" /* yacc.c:1646 */ +#line 2047 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) / 1000000.0); pcb_io_pcb_usty_seen |= PCB_USTY_NANOMETER; } -#line 2973 "parse_y.c" /* yacc.c:1646 */ +#line 2974 "parse_y.c" /* yacc.c:1646 */ break; case 211: -#line 2047 "parse_y.y" /* yacc.c:1646 */ +#line 2048 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) / 1000.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2979 "parse_y.c" /* yacc.c:1646 */ +#line 2980 "parse_y.c" /* yacc.c:1646 */ break; case 212: -#line 2048 "parse_y.y" /* yacc.c:1646 */ +#line 2049 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number))); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2985 "parse_y.c" /* yacc.c:1646 */ +#line 2986 "parse_y.c" /* yacc.c:1646 */ break; case 213: -#line 2049 "parse_y.y" /* yacc.c:1646 */ +#line 2050 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) * 1000.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2991 "parse_y.c" /* yacc.c:1646 */ +#line 2992 "parse_y.c" /* yacc.c:1646 */ break; case 214: -#line 2050 "parse_y.y" /* yacc.c:1646 */ +#line 2051 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) * 1000000.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2997 "parse_y.c" /* yacc.c:1646 */ +#line 2998 "parse_y.c" /* yacc.c:1646 */ break; -#line 3001 "parse_y.c" /* yacc.c:1646 */ +#line 3002 "parse_y.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -3225,7 +3226,7 @@ #endif return yyresult; } -#line 2053 "parse_y.y" /* yacc.c:1906 */ +#line 2054 "parse_y.y" /* yacc.c:1906 */ /* --------------------------------------------------------------------------- @@ -3316,3 +3317,11 @@ } return rv; } + +/* load a board metadata into conf_core */ +static void load_meta_coord(const char *path, pcb_coord_t crd) +{ + char tmp[128]; + pcb_sprintf(tmp, "%$mm", crd); + conf_set(CFR_DESIGN, path, -1, tmp, POL_OVERWRITE); +} Index: trunk/src_plugins/io_pcb/parse_y.h =================================================================== --- trunk/src_plugins/io_pcb/parse_y.h (revision 16210) +++ trunk/src_plugins/io_pcb/parse_y.h (revision 16211) @@ -101,7 +101,7 @@ typedef union YYSTYPE YYSTYPE; union YYSTYPE { -#line 119 "parse_y.y" /* yacc.c:1909 */ +#line 120 "parse_y.y" /* yacc.c:1909 */ int integer; double number; Index: trunk/src_plugins/io_pcb/parse_y.y =================================================================== --- trunk/src_plugins/io_pcb/parse_y.y (revision 16210) +++ trunk/src_plugins/io_pcb/parse_y.y (revision 16211) @@ -103,6 +103,7 @@ static pcb_coord_t old_units (PLMeasure m); static pcb_coord_t new_units (PLMeasure m); static pcb_flag_t pcb_flag_old(unsigned int flags); +static void load_meta_coord(const char *path, pcb_coord_t crd); #define YYDEBUG 1 #define YYERROR_VERBOSE 1 @@ -557,10 +558,10 @@ pcbdrc1 : T_DRC '[' measure measure measure ']' { - yyPCB->Bloat = NU ($3); - yyPCB->Shrink = NU ($4); - yyPCB->minWid = NU ($5); - yyPCB->minRing = NU ($5); + load_meta_coord("design/bloat", NU($3)); + load_meta_coord("design/shrink", NU($4)); + load_meta_coord("design/min_wid", NU($5)); + load_meta_coord("design/min_ring", NU($5)); } ; @@ -567,11 +568,11 @@ pcbdrc2 : T_DRC '[' measure measure measure measure ']' { - yyPCB->Bloat = NU ($3); - yyPCB->Shrink = NU ($4); - yyPCB->minWid = NU ($5); - yyPCB->minSlk = NU ($6); - yyPCB->minRing = NU ($5); + load_meta_coord("design/bloat", NU($3)); + load_meta_coord("design/shrink", NU($4)); + load_meta_coord("design/min_wid", NU($5)); + load_meta_coord("design/min_slk", NU($6)); + load_meta_coord("design/min_ring", NU($5)); } ; @@ -578,12 +579,12 @@ pcbdrc3 : T_DRC '[' measure measure measure measure measure measure ']' { - yyPCB->Bloat = NU ($3); - yyPCB->Shrink = NU ($4); - yyPCB->minWid = NU ($5); - yyPCB->minSlk = NU ($6); - yyPCB->minDrill = NU ($7); - yyPCB->minRing = NU ($8); + load_meta_coord("design/bloat", NU($3)); + load_meta_coord("design/shrink", NU($4)); + load_meta_coord("design/min_wid", NU($5)); + load_meta_coord("design/min_slk", NU($6)); + load_meta_coord("design/min_drill", NU($7)); + load_meta_coord("design/min_ring", NU($8)); } ; @@ -2140,3 +2141,11 @@ } return rv; } + +/* load a board metadata into conf_core */ +static void load_meta_coord(const char *path, pcb_coord_t crd) +{ + char tmp[128]; + pcb_sprintf(tmp, "%$mm", crd); + conf_set(CFR_DESIGN, path, -1, tmp, POL_OVERWRITE); +} Index: trunk/src_plugins/jostle/jostle.c =================================================================== --- trunk/src_plugins/jostle/jostle.c (revision 16210) +++ trunk/src_plugins/jostle/jostle.c (revision 16211) @@ -487,7 +487,7 @@ } } else { - value = conf_core.design.via_thickness + (PCB->Bloat + 1) * 2 + 50; + value = conf_core.design.via_thickness + (conf_core.design.bloat + 1) * 2 + 50; } x = pcb_crosshair.X; y = pcb_crosshair.Y; Index: trunk/src_plugins/lib_gtk_config/gui-config.c =================================================================== --- trunk/src_plugins/lib_gtk_config/gui-config.c (revision 16210) +++ trunk/src_plugins/lib_gtk_config/gui-config.c (revision 16211) @@ -554,6 +554,7 @@ static GtkWidget *config_sizes_vbox, *config_sizes_tab_vbox, *config_text_spin_button; static pcb_coord_t new_board_width, new_board_height; +static pcb_coord_t new_Bloat, new_Shrink, new_minWid, new_minSlk, new_minDrill, new_minRing; static void config_sizes_apply(void) { @@ -560,13 +561,13 @@ conf_setf(CFR_DESIGN, "design/max_width", -1, "%$mS", new_board_width); conf_setf(CFR_DESIGN, "design/max_height", -1, "%$mS", new_board_height); - conf_set_design("design/bloat", "%$mS", PCB->Bloat); - conf_set_design("design/shrink", "%$mS", PCB->Shrink); - conf_set_design("design/min_wid", "%$mS", PCB->minWid); - conf_set_design("design/min_slk", "%$mS", PCB->minSlk); + conf_set_design("design/bloat", "%$mS", new_Bloat); + conf_set_design("design/shrink", "%$mS", new_Shrink); + conf_set_design("design/min_wid", "%$mS", new_minWid); + conf_set_design("design/min_slk", "%$mS", new_minSlk); conf_set_design("design/poly_isle_area", "%f", PCB->IsleArea); - conf_set_design("design/min_drill", "%$mS", PCB->minDrill); - conf_set_design("design/min_ring", "%$mS", PCB->minRing); + conf_set_design("design/min_drill", "%$mS", new_minDrill); + conf_set_design("design/min_ring", "%$mS", new_minRing); if (PCB->MaxWidth != conf_core.design.max_width || PCB->MaxHeight != conf_core.design.max_height) pcb_board_resize(conf_core.design.max_width, conf_core.design.max_height); @@ -668,29 +669,36 @@ gtk_table_set_col_spacings(GTK_TABLE(table), 6); gtk_table_set_row_spacings(GTK_TABLE(table), 3); + new_Bloat = conf_core.design.bloat; + new_Shrink = conf_core.design.shrink; + new_minWid = conf_core.design.min_wid; + new_minSlk = conf_core.design.min_slk; + new_minDrill = conf_core.design.min_drill; + new_minRing = conf_core.design.min_ring; + ghid_table_coord_entry(table, 0, 0, NULL, - PCB->Bloat, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, - CE_SMALL, 0, coord_entry_cb, &PCB->Bloat, FALSE, _("Minimum copper spacing")); + conf_core.design.bloat, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, + CE_SMALL, 0, coord_entry_cb, &new_Bloat, FALSE, _("Minimum copper spacing")); ghid_table_coord_entry(table, 1, 0, NULL, - PCB->minWid, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, - CE_SMALL, 0, coord_entry_cb, &PCB->minWid, FALSE, _("Minimum copper width")); + conf_core.design.min_wid, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, + CE_SMALL, 0, coord_entry_cb, &new_minWid, FALSE, _("Minimum copper width")); ghid_table_coord_entry(table, 2, 0, NULL, - PCB->Shrink, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, - CE_SMALL, 0, coord_entry_cb, &PCB->Shrink, FALSE, _("Minimum touching copper overlap")); + conf_core.design.shrink, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, + CE_SMALL, 0, coord_entry_cb, &new_Shrink, FALSE, _("Minimum touching copper overlap")); ghid_table_coord_entry(table, 3, 0, NULL, - PCB->minSlk, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, - CE_SMALL, 0, coord_entry_cb, &PCB->minSlk, FALSE, _("Minimum silk width")); + conf_core.design.min_slk, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, + CE_SMALL, 0, coord_entry_cb, &new_minSlk, FALSE, _("Minimum silk width")); ghid_table_coord_entry(table, 4, 0, NULL, - PCB->minDrill, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, - CE_SMALL, 0, coord_entry_cb, &PCB->minDrill, FALSE, _("Minimum drill diameter")); + conf_core.design.min_drill, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, + CE_SMALL, 0, coord_entry_cb, &new_minDrill, FALSE, _("Minimum drill diameter")); ghid_table_coord_entry(table, 5, 0, NULL, - PCB->minRing, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, - CE_SMALL, 0, coord_entry_cb, &PCB->minRing, FALSE, _("Minimum annular ring")); + conf_core.design.min_ring, PCB_MIN_DRC_VALUE, PCB_MAX_DRC_VALUE, + CE_SMALL, 0, coord_entry_cb, &new_minRing, FALSE, _("Minimum annular ring")); vbox = gtkc_vbox_new(TRUE, 0); gtk_box_pack_start(GTK_BOX(tab_vbox), vbox, TRUE, TRUE, 0); Index: trunk/src_plugins/puller/puller.c =================================================================== --- trunk/src_plugins/puller/puller.c (revision 16210) +++ trunk/src_plugins/puller/puller.c (revision 16211) @@ -1646,7 +1646,7 @@ if (start_line->Thickness != end_line->Thickness) return; - thickness = (start_line->Thickness + 1) / 2 + PCB->Bloat; + thickness = (start_line->Thickness + 1) / 2 + conf_core.design.bloat; /* At this point, our expectations are all met. */ Index: trunk/src_plugins/rubberband_orig/rubberband.c =================================================================== --- trunk/src_plugins/rubberband_orig/rubberband.c (revision 16210) +++ trunk/src_plugins/rubberband_orig/rubberband.c (revision 16211) @@ -1180,7 +1180,7 @@ /* Draw the DRC outline if it is enabled */ if (conf_core.editor.show_drc) { pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.cross); - pcb_draw_wireframe_line(pcb_crosshair.GC,x[0],y[0],x[1],y[1],ptr->Line->Thickness + 2 * (PCB->Bloat + 1), 0); + pcb_draw_wireframe_line(pcb_crosshair.GC,x[0],y[0],x[1],y[1],ptr->Line->Thickness + 2 * (conf_core.design.bloat + 1), 0); } } else { Index: trunk/src_plugins/vendordrill/vendor.c =================================================================== --- trunk/src_plugins/vendordrill/vendor.c (revision 16210) +++ trunk/src_plugins/vendordrill/vendor.c (revision 16211) @@ -96,6 +96,14 @@ #define FREE(x) if((x) != NULL) { free (x) ; (x) = NULL; } +/* load a board metadata into conf_core */ +static void load_meta_coord(const char *path, pcb_coord_t crd) +{ + char tmp[128]; + pcb_sprintf(tmp, "%$mm", crd); + conf_set(CFR_DESIGN, path, -1, tmp, POL_OVERWRITE); +} + static pcb_bool vendorIsSubcMappable(pcb_subc_t *subc); /* ************************************************************ */ @@ -262,38 +270,38 @@ sval = pcb_hid_cfg_text_value(doc, "/drc/copper_space"); if (sval != NULL) { - PCB->Bloat = floor(sf * atof(sval) + 0.5); - pcb_message(PCB_MSG_INFO, _("Set DRC minimum copper spacing to %ml mils\n"), PCB->Bloat); + load_meta_coord("design/bloat", floor(sf * atof(sval) + 0.5)); + pcb_message(PCB_MSG_INFO, _("Set DRC minimum copper spacing to %ml mils\n"), conf_core.design.bloat); } sval = pcb_hid_cfg_text_value(doc, "/drc/copper_overlap"); if (sval != NULL) { - PCB->Shrink = floor(sf * atof(sval) + 0.5); - pcb_message(PCB_MSG_INFO, _("Set DRC minimum copper overlap to %ml mils\n"), PCB->Shrink); + load_meta_coord("design/shrink", floor(sf * atof(sval) + 0.5)); + pcb_message(PCB_MSG_INFO, _("Set DRC minimum copper overlap to %ml mils\n"), conf_core.design.shrink); } sval = pcb_hid_cfg_text_value(doc, "/drc/copper_width"); if (sval != NULL) { - PCB->minWid = floor(sf * atof(sval) + 0.5); - pcb_message(PCB_MSG_INFO, _("Set DRC minimum copper spacing to %ml mils\n"), PCB->minWid); + load_meta_coord("design/min_wid", floor(sf * atof(sval) + 0.5)); + pcb_message(PCB_MSG_INFO, _("Set DRC minimum copper spacing to %ml mils\n"), conf_core.design.min_wid); } sval = pcb_hid_cfg_text_value(doc, "/drc/silk_width"); if (sval != NULL) { - PCB->minSlk = floor(sf * atof(sval) + 0.5); - pcb_message(PCB_MSG_INFO, _("Set DRC minimum silk width to %ml mils\n"), PCB->minSlk); + load_meta_coord("design/min_slk", floor(sf * atof(sval) + 0.5)); + pcb_message(PCB_MSG_INFO, _("Set DRC minimum silk width to %ml mils\n"), conf_core.design.min_slk); } sval = pcb_hid_cfg_text_value(doc, "/drc/min_drill"); if (sval != NULL) { - PCB->minDrill = floor(sf * atof(sval) + 0.5); - pcb_message(PCB_MSG_INFO, _("Set DRC minimum drill diameter to %ml mils\n"), PCB->minDrill); + load_meta_coord("design/min_drill", floor(sf * atof(sval) + 0.5)); + pcb_message(PCB_MSG_INFO, _("Set DRC minimum drill diameter to %ml mils\n"), conf_core.design.min_drill); } sval = pcb_hid_cfg_text_value(doc, "/drc/min_ring"); if (sval != NULL) { - PCB->minRing = floor(sf * atof(sval) + 0.5); - pcb_message(PCB_MSG_INFO, _("Set DRC minimum annular ring to %ml mils\n"), PCB->minRing); + load_meta_coord("design/min_ring", floor(sf * atof(sval) + 0.5)); + pcb_message(PCB_MSG_INFO, _("Set DRC minimum annular ring to %ml mils\n"), conf_core.design.min_ring); } pcb_message(PCB_MSG_INFO, _("Loaded %d vendor drills from %s\n"), n_vendor_drills, fname);