Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 7781) +++ trunk/src/data.h (revision 7782) @@ -52,11 +52,13 @@ ratlist_t Rat; }; +#define pcb_max_group(pcb) ((pcb)->LayerGroups.len) -/* DO NOT USE these two macros, they are not PCB-safe */ +/* DO NOT USE this macro, it is not PCB-safe */ #define pcb_max_layer (PCB->Data->LayerN) -#define pcb_max_group (PCB->LayerGroups.len) + + extern pcb_buffer_t pcb_buffers[PCB_MAX_BUFFER]; extern int pcb_added_lines; extern int pcb_layer_stack[PCB_MAX_LAYER]; Index: trunk/src_plugins/autoroute/autoroute.c =================================================================== --- trunk/src_plugins/autoroute/autoroute.c (revision 7781) +++ trunk/src_plugins/autoroute/autoroute.c (revision 7782) @@ -415,7 +415,7 @@ #ifndef NDEBUG static int __routepcb_box_is_good(routebox_t * rb) { - assert(rb && (rb->group < pcb_max_group) && + assert(rb && (rb->group < pcb_max_group(PCB)) && (rb->box.X1 <= rb->box.X2) && (rb->box.Y1 <= rb->box.Y2) && (rb->flags.homeless ? (rb->box.X1 != rb->box.X2) || (rb->box.Y1 != rb->box.Y2) : (rb->box.X1 != rb->box.X2) && (rb->box.Y1 != rb->box.Y2))); @@ -588,7 +588,7 @@ routebox_t **rbpp, *lastrb = NULL; int i, ht; /* a pin cuts through every layer group */ - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { rbpp = (routebox_t **)vtptr_alloc_append(&layergroupboxes[i], 1); *rbpp = (routebox_t *) malloc(sizeof(**rbpp)); memset((void *) *rbpp, 0, sizeof(**rbpp)); @@ -630,7 +630,7 @@ pcb_coord_t halfthick; routebox_t **rbpp; int layergroup = (PCB_FLAG_TEST(PCB_FLAG_ONSOLDER, pad) ? back : front); - assert(0 <= layergroup && layergroup < pcb_max_group); + assert(0 <= layergroup && layergroup < pcb_max_group(PCB)); assert(PCB->LayerGroups.grp[layergroup].len > 0); rbpp = (routebox_t **) vtptr_alloc_append(&layergroupboxes[layergroup], 1); assert(rbpp); @@ -664,7 +664,7 @@ { routebox_t **rbpp; assert(layergroupboxes && line); - assert(0 <= layergroup && layergroup < pcb_max_group); + assert(0 <= layergroup && layergroup < pcb_max_group(PCB)); assert(PCB->LayerGroups.grp[layergroup].len > 0); rbpp = (routebox_t **) vtptr_alloc_append(&layergroupboxes[layergroup], 1); @@ -708,7 +708,7 @@ pcb_coord_t keep = style->Clearance; assert(layergroupboxes && parent); assert(X1 <= X2 && Y1 <= Y2); - assert(0 <= layergroup && layergroup < pcb_max_group); + assert(0 <= layergroup && layergroup < pcb_max_group(PCB)); assert(PCB->LayerGroups.grp[layergroup].len > 0); rbpp = (routebox_t **) vtptr_alloc_append(&layergroupboxes[layergroup], 1); @@ -731,7 +731,7 @@ int is_not_rectangle = 1; pcb_layergrp_id_t layergroup = pcb_layer_get_group(PCB, layer); routebox_t *rb; - assert(0 <= layergroup && layergroup < pcb_max_group); + assert(0 <= layergroup && layergroup < pcb_max_group(PCB)); rb = AddIrregularObstacle(layergroupboxes, polygon->BoundingBox.X1, polygon->BoundingBox.Y1, @@ -858,7 +858,7 @@ /* check which layers are active first */ routing_layers = 0; - for (group = 0; group < pcb_max_group; group++) { + for (group = 0; group < pcb_max_group(PCB); group++) { for (i = 0; i < PCB->LayerGroups.grp[group].len; i++) { pcb_layer_id_t lid = PCB->LayerGroups.grp[group].lid[i]; /* layer must be 1) copper and 2) on */ @@ -881,7 +881,7 @@ return NULL; /* determine preferred routing direction on each group */ - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { if (i != back && i != front) { x_cost[i] = (i & 1) ? 2 : 1; y_cost[i] = (i & 1) ? 1 : 2; @@ -920,7 +920,7 @@ } /* initialize pointer vectors */ - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { vtptr_init(&layergroupboxes[i]); PCB_COPPER_GROUP_LOOP(PCB->Data, i); { @@ -1136,7 +1136,7 @@ } /* create r-trees from pointer lists */ - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { /* create the r-tree */ rd->layergrouptree[i] = pcb_r_create_tree((const pcb_box_t **) layergroupboxes[i].array, vtptr_len(&layergroupboxes[i]), 1); } @@ -1146,7 +1146,7 @@ /* create "empty-space" structures for via placement (now that we know * appropriate clearances for all the fixed elements) */ - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { int ip; for(ip = 0; ip < vtptr_len(&layergroupboxes[i]); ip++) { void **ptr = &layergroupboxes[i].array[ip]; @@ -1157,7 +1157,7 @@ } } /* free pointer lists */ - for (i = 0; i < pcb_max_group; i++) + for (i = 0; i < pcb_max_group(PCB); i++) vtptr_uninit(&layergroupboxes[i]); /* done! */ return rd; @@ -1166,7 +1166,7 @@ void DestroyRouteData(routedata_t ** rd) { int i; - for (i = 0; i < pcb_max_group; i++) + for (i = 0; i < pcb_max_group(PCB); i++) pcb_r_destroy_tree(&(*rd)->layergrouptree[i]); if (AutoRouteParameters.use_vias) mtspace_destroy(&(*rd)->mtspace); @@ -1293,7 +1293,7 @@ if ((p2.X - p->X) * (p2.Y - p->Y) != 0) trial += AutoRouteParameters.JogPenalty; /* special case for defered via searching */ - if (point_layer > pcb_max_group || point_layer == rb->group) + if (point_layer > pcb_max_group(PCB) || point_layer == rb->group) return trial + PCB_ABS(p2.X - p->X) + PCB_ABS(p2.Y - p->Y); /* if this target is only a via away, then the via is cheaper than the congestion */ if (p->X == p2.X && p->Y == p2.Y) @@ -2881,7 +2881,7 @@ } /* a via cuts through every layer group */ - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { if (!is_layer_group_active[i]) continue; rb = (routebox_t *) malloc(sizeof(*rb)); @@ -3293,7 +3293,7 @@ assert(__routepcb_box_is_good(rb)); /* find the cheapest target */ #if 0 - target = minpcb_cost_target_to_point(&parent->cost_point, pcb_max_group + 1, targets, parent->minpcb_cost_target); + target = minpcb_cost_target_to_point(&parent->cost_point, pcb_max_group(PCB) + 1, targets, parent->minpcb_cost_target); #else target = parent->minpcb_cost_target; #endif @@ -3425,7 +3425,7 @@ free(area); assert(pcb_box_is_good(&cliparea)); count++; - for (j = 0; j < pcb_max_group; j++) { + for (j = 0; j < pcb_max_group(PCB); j++) { edge_t *ne; if (j == within->group || !is_layer_group_active[j]) continue; @@ -4050,7 +4050,7 @@ AutoRouteParameters.JogPenalty = 1000 * (is_smoothing ? 20 : 4); AutoRouteParameters.CongestionPenalty = 1e6; AutoRouteParameters.MinPenalty = EXPENSIVE; - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { if (is_layer_group_active[i]) { AutoRouteParameters.MinPenalty = MIN(x_cost[i], AutoRouteParameters.MinPenalty); AutoRouteParameters.MinPenalty = MIN(y_cost[i], AutoRouteParameters.MinPenalty); @@ -4084,7 +4084,7 @@ big.X2 = PCB_MAX_COORD; big.Y1 = 0; big.Y2 = PCB_MAX_COORD; - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { if (pcb_r_search(rd->layergrouptree[i], &big, NULL, bad_boy, NULL, NULL)) return pcb_false; } @@ -4709,7 +4709,7 @@ if (conf_core.editor.live_routing) { int i; pcb_box_t big = { 0, 0, PCB_MAX_COORD, PCB_MAX_COORD }; - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { pcb_r_search(rd->layergrouptree[i], &big, NULL, ripout_livedraw_obj_cb, NULL, NULL); } } Index: trunk/src_plugins/djopt/djopt.c =================================================================== --- trunk/src_plugins/djopt/djopt.c (revision 7781) +++ trunk/src_plugins/djopt/djopt.c (revision 7782) @@ -2478,7 +2478,7 @@ layer_type[i] = 0; layer_groupings[i] = 0; } - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { f = 0; for (j = 0; j < l->grp[i].len; j++) { unsigned int lflg = pcb_layer_flags(l->grp[i].lid[j]); Index: trunk/src_plugins/draw_csect/draw_csect.c =================================================================== --- trunk/src_plugins/draw_csect/draw_csect.c (revision 7781) +++ trunk/src_plugins/draw_csect/draw_csect.c (revision 7782) @@ -348,7 +348,7 @@ /* draw physical layers */ y = ystart; - for(gid = 0; gid < pcb_max_group; gid++) { + for(gid = 0; gid < pcb_max_group(PCB); gid++) { int i, stepf = 0, stepb = 0, th; pcb_layer_group_t *g = PCB->LayerGroups.grp + gid; const char *color = "#ff0000"; @@ -607,7 +607,7 @@ { pcb_layergrp_id_t gid; - for(gid = 0; gid < pcb_max_group; gid++) { + for(gid = 0; gid < pcb_max_group(PCB); gid++) { int i; const char *type_gfx; pcb_layer_group_t *g = PCB->LayerGroups.grp + gid; Index: trunk/src_plugins/export_bboard/bboard.c =================================================================== --- trunk/src_plugins/export_bboard/bboard.c (revision 7781) +++ trunk/src_plugins/export_bboard/bboard.c (revision 7782) @@ -182,7 +182,7 @@ if (group_data[group].solder && skipsolder) return 0; - if (group >= 0 && group < pcb_max_group) { + if (group >= 0 && group < pcb_max_group(PCB)) { if (!group_data[group].draw) return 0; group_data[group].exp = 1; Index: trunk/src_plugins/export_dsn/dsn.c =================================================================== --- trunk/src_plugins/export_dsn/dsn.c (revision 7781) +++ trunk/src_plugins/export_dsn/dsn.c (revision 7782) @@ -168,7 +168,7 @@ "Router will consider an inner layer to be the \"top\" layer.\n"); } - for (group = 0; group < pcb_max_group; group++) { + for (group = 0; group < pcb_max_group(PCB); group++) { pcb_layer_t *first_layer; unsigned int gflg = pcb_layergrp_flags(PCB, group); Index: trunk/src_plugins/export_dxf/dxf.c =================================================================== --- trunk/src_plugins/export_dxf/dxf.c (revision 7781) +++ trunk/src_plugins/export_dxf/dxf.c (revision 7782) @@ -745,7 +745,7 @@ return pcb_layer_get_group(PCB, l); } /* else something unique */ - return pcb_max_group + 3 + l; + return pcb_max_group(PCB) + 3 + l; } /*! Index: trunk/src_plugins/export_gcode/gcode.c =================================================================== --- trunk/src_plugins/export_gcode/gcode.c (revision 7781) +++ trunk/src_plugins/export_gcode/gcode.c (revision 7782) @@ -409,7 +409,7 @@ gcode_cur_group = i; /* magic */ - idx = (i >= 0 && i < pcb_max_group) ? PCB->LayerGroups.grp[i].lid[0] : i; + idx = (i >= 0 && i < pcb_max_group(PCB)) ? PCB->LayerGroups.grp[i].lid[0] : i; printf("idx=%d %s\n", idx, name); is_solder = (pcb_layergrp_flags(PCB, pcb_layer_get_group(PCB, idx)) & PCB_LYT_BOTTOM) ? 1 : 0; save_drill = is_solder; /* save drills for one layer only */ Index: trunk/src_plugins/export_gerber/gerber.c =================================================================== --- trunk/src_plugins/export_gerber/gerber.c (revision 7781) +++ trunk/src_plugins/export_gerber/gerber.c (revision 7782) @@ -370,7 +370,7 @@ if (l < pcb_max_layer && l >= 0) return pcb_layer_get_group(PCB, l); /* else something unique */ - return pcb_max_group + 3 + l; + return pcb_max_group(PCB) + 3 + l; } static int layer_sort(const void *va, const void *vb) @@ -643,7 +643,7 @@ if ((flags & PCB_LYT_CSECT) && (!want_cross_sect)) return 0; - if ((group >= 0) && (group < pcb_max_group)) { + if ((group >= 0) && (group < pcb_max_group(PCB))) { group_name = PCB->LayerGroups.grp[group].name; if (group_name == NULL) group_name = ""; Index: trunk/src_plugins/export_openscad/scad.c =================================================================== --- trunk/src_plugins/export_openscad/scad.c (revision 7781) +++ trunk/src_plugins/export_openscad/scad.c (revision 7782) @@ -553,7 +553,7 @@ } inner_layers = 0; - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { if (group_data[i].draw && !(group_data[i].component || group_data[i].solder)) { inner_layers++; } @@ -561,7 +561,7 @@ layer_spacing = BOARD_THICKNESS / ((float) inner_layers + 1); layer_offset = BOARD_THICKNESS / 2. - layer_spacing; - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { if (group_data[i].component) { group_data[i].z_offset = (BOARD_THICKNESS / 2.) + (OUTER_COPPER_THICKNESS / 2.); } @@ -637,7 +637,7 @@ } if (opt_exp_copper) { - for (i = 0; i < pcb_max_group; i++) { + for (i = 0; i < pcb_max_group(PCB); i++) { if (group_data[i].exp) { /* printf("%d\n",i); */ @@ -769,7 +769,7 @@ if (!layer_ok) return 0; - if (group >= 0 && group < pcb_max_group) { + if (group >= 0 && group < pcb_max_group(PCB)) { if (flags & PCB_LYT_SILK) { if (!opt_exp_silk) return 0; Index: trunk/src_plugins/export_png/png.c =================================================================== --- trunk/src_plugins/export_png/png.c (revision 7781) +++ trunk/src_plugins/export_png/png.c (revision 7782) @@ -387,7 +387,7 @@ if (l < pcb_max_layer && l >= 0) return pcb_layer_get_group(PCB, l); /* else something unique */ - return pcb_max_group + 3 + l; + return pcb_max_group(PCB) + 3 + l; } static int is_solder(pcb_layergrp_id_t grp) { return pcb_layergrp_flags(PCB, grp) & PCB_LYT_BOTTOM; } Index: trunk/src_plugins/export_ps/eps.c =================================================================== --- trunk/src_plugins/export_ps/eps.c (revision 7781) +++ trunk/src_plugins/export_ps/eps.c (revision 7782) @@ -150,7 +150,7 @@ if (l < pcb_max_layer && l >= 0) return pcb_layer_get_group(PCB, l); /* else something unique */ - return pcb_max_group + 3 + l; + return pcb_max_group(PCB) + 3 + l; } static int is_solder(pcb_layergrp_id_t grp) { return pcb_layergrp_flags(PCB, grp) & PCB_LYT_BOTTOM; } @@ -219,7 +219,7 @@ erase logic. Otherwise, we have to use the expensive multi-mask erase. */ fast_erase = 0; - for (i = 0; i < pcb_max_group; i++) + for (i = 0; i < pcb_max_group(PCB); i++) if (print_group[i]) fast_erase++; Index: trunk/src_plugins/export_ps/ps.c =================================================================== --- trunk/src_plugins/export_ps/ps.c (revision 7781) +++ trunk/src_plugins/export_ps/ps.c (revision 7782) @@ -431,7 +431,7 @@ if (l < pcb_max_layer && l >= 0) return pcb_layer_get_group(PCB, l); /* else something unique */ - return pcb_max_group + 3 + l; + return pcb_max_group(PCB) + 3 + l; } static int layer_sort(const void *va, const void *vb) Index: trunk/src_plugins/export_stat/stat.c =================================================================== --- trunk/src_plugins/export_stat/stat.c (revision 7781) +++ trunk/src_plugins/export_stat/stat.c (revision 7782) @@ -240,7 +240,7 @@ phg = 0; fprintf(f, " li:physical_layers {\n"); - for(lgid = 0; lgid < pcb_max_group; lgid++) { + for(lgid = 0; lgid < pcb_max_group(PCB); lgid++) { if (group_not_empty[lgid]) { phg++; fprintf(f, " ha:layergroup_%ld {\n", lgid); Index: trunk/src_plugins/hid_gtk2_gdk/gtkhid-gdk.c =================================================================== --- trunk/src_plugins/hid_gtk2_gdk/gtkhid-gdk.c (revision 7781) +++ trunk/src_plugins/hid_gtk2_gdk/gtkhid-gdk.c (revision 7782) @@ -89,7 +89,7 @@ static int ghid_gdk_set_layer_group(pcb_layergrp_id_t group, pcb_layer_id_t layer, unsigned int flags, int is_empty) { int idx = group; - if (idx >= 0 && idx < pcb_max_group) { + if (idx >= 0 && idx < pcb_max_group(PCB)) { int n = PCB->LayerGroups.grp[group].len; for (idx = 0; idx < n - 1; idx++) { int ni = PCB->LayerGroups.grp[group].lid[idx]; Index: trunk/src_plugins/hid_gtk2_gl/gtkhid-gl.c =================================================================== --- trunk/src_plugins/hid_gtk2_gl/gtkhid-gl.c (revision 7781) +++ trunk/src_plugins/hid_gtk2_gl/gtkhid-gl.c (revision 7782) @@ -136,7 +136,7 @@ { render_priv *priv = gport->render_priv; int idx = group; - if (idx >= 0 && idx < pcb_max_group) { + if (idx >= 0 && idx < pcb_max_group(PCB)) { int n = PCB->LayerGroups.grp[group].len; for (idx = 0; idx < n - 1; idx++) { int ni = PCB->LayerGroups.grp[group].lid[idx]; Index: trunk/src_plugins/hid_gtk3_cairo/gtkhid-cairo.c =================================================================== --- trunk/src_plugins/hid_gtk3_cairo/gtkhid-cairo.c (revision 7781) +++ trunk/src_plugins/hid_gtk3_cairo/gtkhid-cairo.c (revision 7782) @@ -90,7 +90,7 @@ static int ghid_cairo_set_layer_group(pcb_layergrp_id_t group, pcb_layer_id_t layer, unsigned int flags, int is_empty) { int idx = group; - if (idx >= 0 && idx < pcb_max_group) { + if (idx >= 0 && idx < pcb_max_group(PCB)) { int n = PCB->LayerGroups.grp[group].len; for (idx = 0; idx < n - 1; idx++) { int ni = PCB->LayerGroups.grp[group].lid[idx]; Index: trunk/src_plugins/hid_lesstif/main.c =================================================================== --- trunk/src_plugins/hid_lesstif/main.c (revision 7781) +++ trunk/src_plugins/hid_lesstif/main.c (revision 7782) @@ -2733,7 +2733,7 @@ static int lesstif_set_layer_group(pcb_layergrp_id_t group, pcb_layer_id_t layer, unsigned int flags, int is_empty) { int idx = group; - if (idx >= 0 && idx < pcb_max_group) { + if (idx >= 0 && idx < pcb_max_group(PCB)) { int n = PCB->LayerGroups.grp[group].len; for (idx = 0; idx < n - 1; idx++) { int ni = PCB->LayerGroups.grp[group].lid[idx]; Index: trunk/src_plugins/io_lihata/write.c =================================================================== --- trunk/src_plugins/io_lihata/write.c (revision 7781) +++ trunk/src_plugins/io_lihata/write.c (revision 7782) @@ -519,7 +519,7 @@ if (v1_layers) { /* produce an old layer group assignment from top to bottom */ gm = 0; - for(n = 0; n < pcb_max_group; n++) { + for(n = 0; n < pcb_max_group(PCB); n++) { unsigned int gflg = pcb_layergrp_flags(PCB, n); if (gflg & PCB_LYT_COPPER) { if (gflg & PCB_LYT_TOP) Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 7781) +++ trunk/src_plugins/io_pcb/file.c (revision 7782) @@ -154,7 +154,7 @@ char sep = 0; int group, entry; #warning layer TODO: revise this loop to save only what the original code saved - for (group = 0; group < pcb_max_group; group++) + for (group = 0; group < pcb_max_group(PCB); group++) if (PCB->LayerGroups.grp[group].len) { unsigned int gflg = pcb_layergrp_flags(PCB, group); Index: trunk/src_plugins/lib_gtk_config/gui-config.c =================================================================== --- trunk/src_plugins/lib_gtk_config/gui-config.c (revision 7781) +++ trunk/src_plugins/lib_gtk_config/gui-config.c (revision 7782) @@ -1291,7 +1291,7 @@ string = g_string_new(""); - for (group = 0; group < pcb_max_group; group++) { + for (group = 0; group < pcb_max_group(PCB); group++) { if (lg->grp[group].len == 0) continue; for (entry = 0; entry < lg->grp[group].len; entry++) { @@ -1306,7 +1306,7 @@ if (entry != lg->grp[group].len - 1) string = g_string_append(string, ","); } - if (group != pcb_max_group - 1) + if (group != pcb_max_group(PCB) - 1) string = g_string_append(string, ":"); } return g_string_free(string, FALSE); /* Don't free string->str */