Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 20900) +++ trunk/src/obj_line.c (revision 20901) @@ -681,7 +681,7 @@ pcb_pstk_t *ps; #warning pdstk TODO #21: do not work in comp mode, use a pstk proto - scconfig also has TODO #21, fix it there too - if ((ps = pcb_pstk_new_compat_via(PCB->Data, i->X, i->Y, conf_core.design.via_drilling_hole, conf_core.design.via_thickness, conf_core.design.clearance, 0, PCB_PSTK_COMPAT_ROUND, pcb_true)) != NULL) { + if ((ps = pcb_pstk_new_compat_via(PCB->Data, -1, i->X, i->Y, conf_core.design.via_drilling_hole, conf_core.design.via_thickness, conf_core.design.clearance, 0, PCB_PSTK_COMPAT_ROUND, pcb_true)) != NULL) { pcb_undo_add_obj_to_create(PCB_OBJ_PSTK, ps, ps, ps); pcb_pstk_invalidate_draw(ps); } Index: trunk/src/tool_line.c =================================================================== --- trunk/src/tool_line.c (revision 20900) +++ trunk/src/tool_line.c (revision 20901) @@ -181,7 +181,7 @@ && (pcb_layer_flags_(last_layer) & PCB_LYT_COPPER) && (!PCB->is_footprint) #warning pdstk TODO #21: do not work in comp mode, use a pstk proto - scconfig also has TODO #21, fix it there too - && ((ps = pcb_pstk_new_compat_via(PCB->Data, + && ((ps = pcb_pstk_new_compat_via(PCB->Data, -1, pcb_crosshair.AttachedLine.Point1.X, pcb_crosshair.AttachedLine.Point1.Y, conf_core.design.via_drilling_hole, conf_core.design.via_thickness, conf_core.design.clearance, @@ -271,7 +271,7 @@ pcb_crosshair.AttachedLine.Point1.Y, conf_core.design.via_thickness / 2) == PCB_OBJ_VOID #warning pdstk TODO #21: do not work in comp mode, use a pstk proto - scconfig also has TODO #21, fix it there too - && ((ps = pcb_pstk_new_compat_via(PCB->Data, + && ((ps = pcb_pstk_new_compat_via(PCB->Data, -1, pcb_crosshair.AttachedLine.Point1.X, pcb_crosshair.AttachedLine.Point1.Y, conf_core.design.via_drilling_hole, conf_core.design.via_thickness, conf_core.design.clearance, Index: trunk/src/tool_via.c =================================================================== --- trunk/src/tool_via.c (revision 20900) +++ trunk/src/tool_via.c (revision 20901) @@ -65,7 +65,7 @@ #warning pdstk TODO #21: do not work in comp mode, use a pstk proto - scconfig also has TODO #21, fix it there too { - pcb_pstk_t *ps = pcb_pstk_new_compat_via(PCB->Data, pcb_tool_note.X, pcb_tool_note.Y, + pcb_pstk_t *ps = pcb_pstk_new_compat_via(PCB->Data, -1, pcb_tool_note.X, pcb_tool_note.Y, conf_core.design.via_drilling_hole, conf_core.design.via_thickness, conf_core.design.clearance, 0, PCB_PSTK_COMPAT_ROUND, pcb_true); if (ps == NULL) Index: trunk/src_plugins/ar_cpcb/ar_cpcb.c =================================================================== --- trunk/src_plugins/ar_cpcb/ar_cpcb.c (revision 20900) +++ trunk/src_plugins/ar_cpcb/ar_cpcb.c (revision 20901) @@ -175,7 +175,7 @@ if (len > 0) { if (llidx != lidx) { if ((lx == x) && (ly == y)) { - pcb_pstk_t *ps = pcb_pstk_new_compat_via(pcb->Data, x, y, + pcb_pstk_t *ps = pcb_pstk_new_compat_via(pcb->Data, -1, x, y, conf_core.design.via_drilling_hole, via_dia, conf_core.design.clearance, 0, PCB_PSTK_COMPAT_ROUND, pcb_true); } Index: trunk/src_plugins/autoroute/autoroute.c =================================================================== --- trunk/src_plugins/autoroute/autoroute.c (revision 20900) +++ trunk/src_plugins/autoroute/autoroute.c (revision 20901) @@ -2881,7 +2881,7 @@ if (conf_core.editor.live_routing) { #warning padstack TODO: when style contains proto, remove this - live_via = pcb_pstk_new_compat_via(PCB->Data, X, Y, AutoRouteParameters.style->Hole, radius * 2, 2 * AutoRouteParameters.style->Clearance, 0, PCB_PSTK_COMPAT_ROUND, 1); + live_via = pcb_pstk_new_compat_via(PCB->Data, -1, X, Y, AutoRouteParameters.style->Hole, radius * 2, 2 * AutoRouteParameters.style->Clearance, 0, PCB_PSTK_COMPAT_ROUND, 1); if (live_via != NULL) pcb_pstk_invalidate_draw(live_via); } @@ -4513,7 +4513,7 @@ assert(labs((b.X1 + radius) - (b.X2 - radius)) < 2); assert(labs((b.Y1 + radius) - (b.Y2 - radius)) < 2); #warning padstack TODO: when style contains proto, remove this - pp->parent.via = pcb_pstk_new_compat_via(PCB->Data, + pp->parent.via = pcb_pstk_new_compat_via(PCB->Data, -1, b.X1 + radius, b.Y1 + radius, pp->style->Hole, pp->style->Diameter, 2 * pp->style->Clearance, 0, PCB_PSTK_COMPAT_ROUND, 1); assert(pp->parent.via); Index: trunk/src_plugins/diag/integrity.c =================================================================== --- trunk/src_plugins/diag/integrity.c (revision 20900) +++ trunk/src_plugins/diag/integrity.c (revision 20901) @@ -54,6 +54,7 @@ if (__ao__ != (pcb_any_obj_t *)obj) \ pcb_message(PCB_MSG_ERROR, CHK "%s " name " %ld id hash broken (%p != %p)\n", whose, obj->ID, obj, __ao__); \ id_chk_cnt++; \ +printf("checked ok: %ld %ld\n", (long)obj->ID, (long)id_chk_cnt); \ } while(0) @@ -279,8 +280,10 @@ /* Safe check for the other way around: if the hash contains more entries than the objects we checked above, we have some garbage left; the check is safe because it is not needed to dereference the garbage */ - for(e = htip_first(&data->id2obj); e; e = htip_next(&data->id2obj, e)) + for(e = htip_first(&data->id2obj); e; e = htip_next(&data->id2obj, e)) { id_chk_cnt--; +printf("decremn ok: %ld %ld\n", (long)e->key, (long)id_chk_cnt); + } if (id_chk_cnt != 0) pcb_message(PCB_MSG_ERROR, CHK "id hash contains %ld excess IDs in %s\n", id_chk_cnt, whose); Index: trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/create.c =================================================================== --- trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/create.c (revision 20900) +++ trunk/src_plugins/gpmi/pcb-gpmi/gpmi_plugin/gpmi_pkg/layout/create.c (revision 20901) @@ -93,7 +93,7 @@ { void *pin; - pin = pcb_pstk_new_compat_via(PCB->Data, x, y, hole, thickness, clearance, mask, PCB_PSTK_COMPAT_ROUND, 1); + pin = pcb_pstk_new_compat_via(PCB->Data, -1, x, y, hole, thickness, clearance, mask, PCB_PSTK_COMPAT_ROUND, 1); if (pin != NULL) { pcb_undo_add_obj_to_create(PCB_OBJ_PSTK, pin, pin, pin); Index: trunk/src_plugins/import_dsn/dsn.c =================================================================== --- trunk/src_plugins/import_dsn/dsn.c (revision 20900) +++ trunk/src_plugins/import_dsn/dsn.c (revision 20901) @@ -196,7 +196,7 @@ } { - pcb_pstk_t *ps = pcb_pstk_new_compat_via(PCB->Data, x, PCB->MaxHeight - y, drill, dia, clear, 0, PCB_PSTK_COMPAT_ROUND, 1); + pcb_pstk_t *ps = pcb_pstk_new_compat_via(PCB->Data, -1, x, PCB->MaxHeight - y, drill, dia, clear, 0, PCB_PSTK_COMPAT_ROUND, 1); PCB_FLAG_SET(PCB_FLAG_AUTO, ps); } } Index: trunk/src_plugins/import_mucs/mucs.c =================================================================== --- trunk/src_plugins/import_mucs/mucs.c (revision 20900) +++ trunk/src_plugins/import_mucs/mucs.c (revision 20901) @@ -121,7 +121,7 @@ y1 = (getc(fi) + (getc(fi) * 256)); r = (getc(fi) + (getc(fi) * 256)); pcb_trace("Via(%d %d 60 25 \"\" \" \")\n", x1, y1); - ps = pcb_pstk_new_compat_via(PCB->Data, PCB_MIL_TO_COORD(x1), PCB_MIL_TO_COORD(y1), conf_core.design.via_drilling_hole, conf_core.design.via_thickness, conf_core.design.clearance, 0, PCB_PSTK_COMPAT_ROUND, 1); + ps = pcb_pstk_new_compat_via(PCB->Data, -1, PCB_MIL_TO_COORD(x1), PCB_MIL_TO_COORD(y1), conf_core.design.via_drilling_hole, conf_core.design.via_thickness, conf_core.design.clearance, 0, PCB_PSTK_COMPAT_ROUND, 1); PCB_FLAG_SET(PCB_FLAG_AUTO, ps); break; case 'n': Index: trunk/src_plugins/io_autotrax/read.c =================================================================== --- trunk/src_plugins/io_autotrax/read.c (revision 20900) +++ trunk/src_plugins/io_autotrax/read.c (revision 20901) @@ -483,7 +483,7 @@ Mask = Thickness + st->mask_clearance; - ps = pcb_pstk_new_compat_via(data, X, Y, Drill, Thickness, Clearance, Mask, PCB_PSTK_COMPAT_ROUND, 1); + ps = pcb_pstk_new_compat_via(data, -1, X, Y, Drill, Thickness, Clearance, Mask, PCB_PSTK_COMPAT_ROUND, 1); return ps != NULL; } Index: trunk/src_plugins/io_eagle/read.c =================================================================== --- trunk/src_plugins/io_eagle/read.c (revision 20900) +++ trunk/src_plugins/io_eagle/read.c (revision 20901) @@ -861,7 +861,7 @@ pcb_message(PCB_MSG_ERROR, "Invalid padstack shape: '%s' - using octagon instead\n", shape); } - ps = pcb_pstk_new_compat_via(data, x, y, drill, dia, clr, mask, cshp, !hole); + ps = pcb_pstk_new_compat_via(data, -1, x, y, drill, dia, clr, mask, cshp, !hole); if (name != NULL) pcb_attribute_put(&ps->Attributes, "term", name); Index: trunk/src_plugins/io_kicad/read.c =================================================================== --- trunk/src_plugins/io_kicad/read.c (revision 20900) +++ trunk/src_plugins/io_kicad/read.c (revision 20901) @@ -896,7 +896,7 @@ } required = BV(0) | BV(1); if ((tally & required) == required) { /* need start, end, layer, thickness at a minimum */ - if (pcb_pstk_new_compat_via(st->pcb->Data, X, Y, Drill, Thickness, Clearance, Mask, PCB_PSTK_COMPAT_ROUND, pcb_true) == NULL) + if (pcb_pstk_new_compat_via(st->pcb->Data, -1, X, Y, Drill, Thickness, Clearance, Mask, PCB_PSTK_COMPAT_ROUND, pcb_true) == NULL) return kicad_error(subtree, "failed to create via-padstack"); return 0; } Index: trunk/src_plugins/io_lihata/read.c =================================================================== --- trunk/src_plugins/io_lihata/read.c (revision 20900) +++ trunk/src_plugins/io_lihata/read.c (revision 20901) @@ -1138,7 +1138,7 @@ if (err != 0) return -1; - ps = pcb_old_via_new(dt, X+dx, Y+dy, Thickness, Clearance, Mask, DrillingHole, Name, flg); + ps = pcb_old_via_new(dt, -1, X+dx, Y+dy, Thickness, Clearance, Mask, DrillingHole, Name, flg); if (ps == NULL) { iolht_error(obj, "Failed to convert old via to padstack (this via is LOST)\n"); return 0; Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 20900) +++ trunk/src_plugins/io_pcb/file.c (revision 20901) @@ -1061,7 +1061,7 @@ pcb_pstk_t *io_pcb_element_pin_new(pcb_subc_t *subc, pcb_coord_t X, pcb_coord_t Y, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_coord_t Mask, pcb_coord_t DrillingHole, const char *Name, const char *Number, pcb_flag_t Flags) { pcb_pstk_t *p; - p = pcb_old_via_new(subc->data, X, Y, Thickness, Clearance, Mask, DrillingHole, Name, Flags); + p = pcb_old_via_new(subc->data, -1, X, Y, Thickness, Clearance, Mask, DrillingHole, Name, Flags); if (Number != NULL) pcb_attribute_put(&p->Attributes, "term", Number); if (Name != NULL) Index: trunk/src_plugins/io_pcb/parse_y.c =================================================================== --- trunk/src_plugins/io_pcb/parse_y.c (revision 20900) +++ trunk/src_plugins/io_pcb/parse_y.c (revision 20901) @@ -2160,7 +2160,7 @@ case 66: #line 503 "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)), + pcb_old_via_new(yyData, -1, 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)); } @@ -2170,7 +2170,7 @@ case 67: #line 513 "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_old_via_new(yyData, -1, 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)); } @@ -2180,7 +2180,7 @@ case 68: #line 524 "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)), + pcb_old_via_new(yyData, -1, 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)); } @@ -2190,7 +2190,7 @@ case 69: #line 534 "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, + pcb_old_via_new(yyData, -1, 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)); } @@ -2207,7 +2207,7 @@ OU((yyvsp[-3].measure)) > PCB_MIN_PINORVIACOPPER) hole = OU((yyvsp[-3].measure)) - PCB_MIN_PINORVIACOPPER; - pcb_old_via_new(yyData, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), 2*PCB_GROUNDPLANEFRAME, + pcb_old_via_new(yyData, -1, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), 2*PCB_GROUNDPLANEFRAME, OU((yyvsp[-3].measure)) + 2*PCB_MASKFRAME, hole, (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } Index: trunk/src_plugins/io_pcb/parse_y.y =================================================================== --- trunk/src_plugins/io_pcb/parse_y.y (revision 20900) +++ trunk/src_plugins/io_pcb/parse_y.y (revision 20901) @@ -501,7 +501,7 @@ /* x, y, thickness, clearance, mask, drilling-hole, name, flags */ : T_VIA '[' measure measure measure measure measure measure STRING flags ']' { - pcb_old_via_new(yyData, NU ($3), NU ($4), NU ($5), NU ($6), NU ($7), + pcb_old_via_new(yyData, -1, NU ($3), NU ($4), NU ($5), NU ($6), NU ($7), NU ($8), $9, $10); free ($9); } @@ -511,7 +511,7 @@ /* x, y, thickness, clearance, mask, drilling-hole, name, flags */ : T_VIA '(' measure measure measure measure measure measure STRING INTEGER ')' { - pcb_old_via_new(yyData, OU ($3), OU ($4), OU ($5), OU ($6), OU ($7), OU ($8), $9, + pcb_old_via_new(yyData, -1, OU ($3), OU ($4), OU ($5), OU ($6), OU ($7), OU ($8), $9, pcb_flag_old($10)); free ($9); } @@ -522,7 +522,7 @@ /* x, y, thickness, clearance, drilling-hole, name, flags */ : T_VIA '(' measure measure measure measure measure STRING INTEGER ')' { - pcb_old_via_new(yyData, OU ($3), OU ($4), OU ($5), OU ($6), + pcb_old_via_new(yyData, -1, OU ($3), OU ($4), OU ($5), OU ($6), OU ($5) + OU($6), OU ($7), $8, pcb_flag_old($9)); free ($8); } @@ -532,7 +532,7 @@ /* x, y, thickness, drilling-hole, name, flags */ : T_VIA '(' measure measure measure measure STRING INTEGER ')' { - pcb_old_via_new(yyData, OU ($3), OU ($4), OU ($5), 2*PCB_GROUNDPLANEFRAME, + pcb_old_via_new(yyData, -1, OU ($3), OU ($4), OU ($5), 2*PCB_GROUNDPLANEFRAME, OU($5) + 2*PCB_MASKFRAME, OU ($6), $7, pcb_flag_old($8)); free ($7); } @@ -549,7 +549,7 @@ OU($5) > PCB_MIN_PINORVIACOPPER) hole = OU($5) - PCB_MIN_PINORVIACOPPER; - pcb_old_via_new(yyData, OU ($3), OU ($4), OU ($5), 2*PCB_GROUNDPLANEFRAME, + pcb_old_via_new(yyData, -1, OU ($3), OU ($4), OU ($5), 2*PCB_GROUNDPLANEFRAME, OU($5) + 2*PCB_MASKFRAME, hole, $6, pcb_flag_old($7)); free ($6); } Index: trunk/src_plugins/lib_compat_help/pstk_compat.c =================================================================== --- trunk/src_plugins/lib_compat_help/pstk_compat.c (revision 20900) +++ trunk/src_plugins/lib_compat_help/pstk_compat.c (revision 20901) @@ -137,7 +137,7 @@ free(shp->data.poly.x); } -pcb_pstk_t *pcb_pstk_new_compat_via(pcb_data_t *data, pcb_coord_t x, pcb_coord_t y, pcb_coord_t drill_dia, pcb_coord_t pad_dia, pcb_coord_t clearance, pcb_coord_t mask, pcb_pstk_compshape_t cshape, pcb_bool plated) +pcb_pstk_t *pcb_pstk_new_compat_via(pcb_data_t *data, long int id, pcb_coord_t x, pcb_coord_t y, pcb_coord_t drill_dia, pcb_coord_t pad_dia, pcb_coord_t clearance, pcb_coord_t mask, pcb_pstk_compshape_t cshape, pcb_bool plated) { pcb_pstk_proto_t proto; pcb_pstk_shape_t shape[5]; /* max number of shapes: 3 coppers, 2 masks */ @@ -731,7 +731,7 @@ } -pcb_pstk_t *pcb_old_via_new(pcb_data_t *data, pcb_coord_t X, pcb_coord_t Y, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_coord_t Mask, pcb_coord_t DrillingHole, const char *Name, pcb_flag_t Flags) +pcb_pstk_t *pcb_old_via_new(pcb_data_t *data, long int id, pcb_coord_t X, pcb_coord_t Y, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_coord_t Mask, pcb_coord_t DrillingHole, const char *Name, pcb_flag_t Flags) { pcb_pstk_t *p; pcb_pstk_compshape_t shp; @@ -747,7 +747,7 @@ else shp = PCB_PSTK_COMPAT_ROUND; - p = pcb_pstk_new_compat_via(data, X, Y, DrillingHole, Thickness, Clearance/2, Mask, shp, !(Flags.f & PCB_FLAG_HOLE)); + p = pcb_pstk_new_compat_via(data, id, X, Y, DrillingHole, Thickness, Clearance/2, Mask, shp, !(Flags.f & PCB_FLAG_HOLE)); p->Flags.f |= Flags.f & PCB_PSTK_VIA_COMPAT_FLAGS; for(n = 0; n < sizeof(Flags.t) / sizeof(Flags.t[0]); n++) { int nt = PCB_THERMAL_ON, t = ((Flags.t[n/2] >> (4 * (n % 2))) & 0xf); Index: trunk/src_plugins/lib_compat_help/pstk_compat.h =================================================================== --- trunk/src_plugins/lib_compat_help/pstk_compat.h (revision 20900) +++ trunk/src_plugins/lib_compat_help/pstk_compat.h (revision 20901) @@ -12,8 +12,9 @@ PCB_PSTK_COMPAT_INVALID } pcb_pstk_compshape_t; -/* Create a padstack that emulates an old-style via - register proto as needed */ -pcb_pstk_t *pcb_pstk_new_compat_via(pcb_data_t *data, pcb_coord_t x, pcb_coord_t y, pcb_coord_t drill_dia, pcb_coord_t pad_dia, pcb_coord_t clearance, pcb_coord_t mask, pcb_pstk_compshape_t shp, pcb_bool plated); +/* Create a padstack that emulates an old-style via - register proto as needed + if id <= 0, allocate a new id automatically */ +pcb_pstk_t *pcb_pstk_new_compat_via(pcb_data_t *data, long int id, pcb_coord_t x, pcb_coord_t y, pcb_coord_t drill_dia, pcb_coord_t pad_dia, pcb_coord_t clearance, pcb_coord_t mask, pcb_pstk_compshape_t shp, pcb_bool plated); /* Convert an existing padstack to old-style via and return broken down parameters */ pcb_bool pcb_pstk_export_compat_via(pcb_pstk_t *ps, pcb_coord_t *x, pcb_coord_t *y, pcb_coord_t *drill_dia, pcb_coord_t *pad_dia, pcb_coord_t *clearance, pcb_coord_t *mask, pcb_pstk_compshape_t *cshape, pcb_bool *plated); @@ -30,8 +31,9 @@ #define PCB_PSTK_VIA_COMPAT_FLAGS (PCB_FLAG_CLEARLINE | PCB_FLAG_SELECTED | PCB_FLAG_FOUND | PCB_FLAG_WARN | PCB_FLAG_USETHERMAL | PCB_FLAG_LOCK) -/* Create a padstack that mimics the old gEDA/PCB via (or pin). Should not - be used anywhere but io_pcb and io_lihata. */ -pcb_pstk_t *pcb_old_via_new(pcb_data_t *data, pcb_coord_t X, pcb_coord_t Y, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_coord_t Mask, pcb_coord_t DrillingHole, const char *Name, pcb_flag_t Flags); +/* Create a padstack that mimics the old gEDA/PCB via (or pin). + If id <= 0, allocate a new ID automatically. + Should not be used anywhere but io_pcb and io_lihata. */ +pcb_pstk_t *pcb_old_via_new(pcb_data_t *data, long int id, pcb_coord_t X, pcb_coord_t Y, pcb_coord_t Thickness, pcb_coord_t Clearance, pcb_coord_t Mask, pcb_coord_t DrillingHole, const char *Name, pcb_flag_t Flags); #endif