Index: trunk/src/action_helper.c =================================================================== --- trunk/src/action_helper.c (revision 12050) +++ trunk/src/action_helper.c (revision 12051) @@ -790,8 +790,8 @@ pcb_crosshair.AttachedLine.Point1.Y, conf_core.design.via_thickness / 2) == PCB_TYPE_NONE - && (pcb_layer_flags_(PCB, CURRENT) & PCB_LYT_COPPER) - && (pcb_layer_flags_(PCB, lastLayer) & PCB_LYT_COPPER) + && (pcb_layer_flags_(CURRENT) & PCB_LYT_COPPER) + && (pcb_layer_flags_(lastLayer) & PCB_LYT_COPPER) && (via = pcb_via_new(PCB->Data, pcb_crosshair.AttachedLine.Point1.X, pcb_crosshair.AttachedLine.Point1.Y, @@ -848,7 +848,7 @@ } if (conf_core.editor.auto_drc - && (pcb_layer_flags_(PCB, CURRENT) & PCB_LYT_COPPER)) + && (pcb_layer_flags_(CURRENT) & PCB_LYT_COPPER)) maybe_found_flag = PCB_FLAG_FOUND; else maybe_found_flag = 0; @@ -876,8 +876,8 @@ isn't a pin already here */ if (PCB->ViaOn && pcb_layer_get_group_(CURRENT) != pcb_layer_get_group_(lastLayer) - && (pcb_layer_flags_(PCB, CURRENT) & PCB_LYT_COPPER) - && (pcb_layer_flags_(PCB, lastLayer) & PCB_LYT_COPPER) + && (pcb_layer_flags_(CURRENT) & PCB_LYT_COPPER) + && (pcb_layer_flags_(lastLayer) & PCB_LYT_COPPER) && pcb_search_obj_by_location(PCB_TYPEMASK_PIN, &ptr1, &ptr2, &ptr3, pcb_crosshair.AttachedLine.Point1.X, pcb_crosshair.AttachedLine.Point1.Y, Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 12050) +++ trunk/src/draw.c (revision 12051) @@ -486,7 +486,7 @@ info.drawn_area = screen; info.layer = Layer; - lflg = pcb_layer_flags_(PCB, Layer); + lflg = pcb_layer_flags_(Layer); if (PCB_LAYERFLG_ON_VISIBLE_SIDE(lflg)) Output.active_padGC = Output.padGC; else Index: trunk/src/find_misc.c =================================================================== --- trunk/src/find_misc.c (revision 12050) +++ trunk/src/find_misc.c (revision 12051) @@ -231,7 +231,7 @@ return; if (type & PCB_SILK_TYPE) { /* don't mess with non-conducting objects! */ - if (!(pcb_layer_flags_(PCB, (pcb_layer_t *) ptr1) & PCB_LYT_COPPER) || ((pcb_layer_t *) ptr1)->meta.real.no_drc) + if (!(pcb_layer_flags_((pcb_layer_t *)ptr1) & PCB_LYT_COPPER) || ((pcb_layer_t *) ptr1)->meta.real.no_drc) return; } } Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 12050) +++ trunk/src/layer.c (revision 12051) @@ -118,7 +118,7 @@ { pcb_layer_type_t flags; - flags = pcb_layer_flags_(pcb, layer); + flags = pcb_layer_flags_(layer); if (flags == 0) return 1; @@ -205,22 +205,26 @@ return pcb_layergrp_flags(pcb, l->meta.real.grp); } -unsigned int pcb_layer_flags_(pcb_board_t *pcb, pcb_layer_t *layer) +unsigned int pcb_layer_flags_(pcb_layer_t *layer) { + /* real layer: have to do a layer stack based lookup; but at least we have a real layer ID */ if (!layer->is_bound) { - pcb_layer_id_t lid = pcb_layer_id(pcb->Data, layer); + pcb_data_t *data = layer->parent; + pcb_layer_id_t lid = pcb_layer_id(data, layer); if (lid < 0) return 0; - return pcb_layer_flags(pcb, lid); + assert(data->parent_type == PCB_PARENT_BOARD); + return pcb_layer_flags(data->parent.board, lid); } /* bound layer: if it is already bound to a real layer, use that, whatever it is (manual binding may override our local type match pattern) */ if (layer->meta.bound.real != NULL) { - pcb_layer_id_t lid = pcb_layer_id(pcb->Data, layer); - return pcb_layer_flags(pcb, lid); + layer = layer->meta.bound.real; + assert(!layer->is_bound); + return pcb_layer_flags_(layer); /* tail recursion */ } /* bound layer without a real layer binding: use the type match */ Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 12050) +++ trunk/src/layer.h (revision 12051) @@ -201,7 +201,7 @@ /* returns a bitfield of pcb_layer_type_t; returns 0 if layer_idx or layer is invalid. */ unsigned int pcb_layer_flags(pcb_board_t *pcb, pcb_layer_id_t layer_idx); -unsigned int pcb_layer_flags_(pcb_board_t *pcb, pcb_layer_t *layer); +unsigned int pcb_layer_flags_(pcb_layer_t *layer); /* map bits of a layer type (call cb for each bit set); return number of bits found. */ Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 12050) +++ trunk/src/obj_line.c (revision 12051) @@ -643,7 +643,7 @@ pcb_draw(); if (!PCB->ViaOn || ctx->move.more_to_come || pcb_layer_get_group_(Layer) == - pcb_layer_get_group_(ctx->move.dst_layer) || !(pcb_layer_flags(PCB, pcb_layer_id(PCB->Data, Layer)) & PCB_LYT_COPPER) || !(pcb_layer_flags_(PCB, ctx->move.dst_layer) & PCB_LYT_COPPER)) + pcb_layer_get_group_(ctx->move.dst_layer) || !(pcb_layer_flags(PCB, pcb_layer_id(PCB->Data, Layer)) & PCB_LYT_COPPER) || !(pcb_layer_flags_(ctx->move.dst_layer) & PCB_LYT_COPPER)) return (newone); /* consider via at Point1 */ sb.X1 = newone->Point1.X - newone->Thickness / 2; Index: trunk/src/obj_line_drcenf.c =================================================================== --- trunk/src/obj_line_drcenf.c (revision 12050) +++ trunk/src/obj_line_drcenf.c (revision 12051) @@ -47,7 +47,7 @@ pcb_attached_line_t *line = &pcb_crosshair.AttachedLine; int flags = conf_core.editor.clear_line ? PCB_FLAG_CLEARLINE : 0; - if (conf_core.editor.auto_drc && (pcb_layer_flags_(PCB, CURRENT) & PCB_LYT_COPPER)) + if (conf_core.editor.auto_drc && (pcb_layer_flags_(CURRENT) & PCB_LYT_COPPER)) flags |= PCB_FLAG_FOUND; /* I need at least one point */ Index: trunk/src/obj_term.c =================================================================== --- trunk/src/obj_term.c (revision 12050) +++ trunk/src/obj_term.c (revision 12051) @@ -322,7 +322,7 @@ /* search for layer objects */ layer = subc->data->Layer; for (l = 0; l < subc->data->LayerN; l++, layer++) { - if ((pcb_layer_flags_(pcb, layer) & lyt) == 0) + if ((pcb_layer_flags_(layer) & lyt) == 0) continue; PCB_LINE_LOOP(layer) { CHECK_TERM_LY(line); Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 12050) +++ trunk/src/obj_text.c (revision 12051) @@ -478,7 +478,7 @@ textlist_remove(text); textlist_append(&Destination->Text, text); - if (pcb_layer_flags_(PCB, Destination) & PCB_LYT_BOTTOM) + if (pcb_layer_flags_(Destination) & PCB_LYT_BOTTOM) PCB_FLAG_SET(PCB_FLAG_ONSOLDER, text); /* get the text mirrored on display */ else PCB_FLAG_CLEAR(PCB_FLAG_ONSOLDER, text); Index: trunk/src/polygon.c =================================================================== --- trunk/src/polygon.c (revision 12050) +++ trunk/src/polygon.c (revision 12051) @@ -1165,7 +1165,7 @@ unsigned int gflg; pcb_layer_type_t lf; - lf = pcb_layer_flags_(PCB, Layer); + lf = pcb_layer_flags_(Layer); if (!(lf & PCB_LYT_COPPER)) { /* also handles lf == 0 */ polygon->NoHolesValid = 0; return 0; @@ -1761,7 +1761,7 @@ if (type == PCB_TYPE_PIN || ptr1 == ptr2 || ptr1 == NULL) { LAYER_LOOP(Data, pcb_max_layer); { - if (!(pcb_layer_flags_(PCB, layer) & PCB_LYT_COPPER)) + if (!(pcb_layer_flags_(layer) & PCB_LYT_COPPER)) continue; info.layer = layer; pcb_r_search(layer->polygon_tree, &sb, NULL, plow_callback, &info, &seen); Index: trunk/src_plugins/export_dsn/dsn.c =================================================================== --- trunk/src_plugins/export_dsn/dsn.c (revision 12050) +++ trunk/src_plugins/export_dsn/dsn.c (revision 12051) @@ -222,7 +222,7 @@ pcb_layer_t *layer = iter->data; char *layeropts = pcb_strdup("(type signal)"); - if (!(pcb_layer_flags_(PCB, layer) & PCB_LYT_COPPER)) + if (!(pcb_layer_flags_(layer) & PCB_LYT_COPPER)) continue; /* see if layer has same name as a net and make it a power layer */ Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 12050) +++ trunk/src_plugins/io_pcb/file.c (revision 12051) @@ -481,7 +481,7 @@ */ static const char *layer_name_hack(pcb_layer_t *layer, const char *name) { - unsigned long lflg = pcb_layer_flags_(PCB, layer); + unsigned long lflg = pcb_layer_flags_(layer); /* The old PCB format encodes some properties in layer names - have to alter the real layer name before save to get the same effect */ if (lflg & PCB_LYT_OUTLINE) { Index: trunk/src_plugins/lib_gtk_common/bu_dwg_tooltip.c =================================================================== --- trunk/src_plugins/lib_gtk_common/bu_dwg_tooltip.c (revision 12050) +++ trunk/src_plugins/lib_gtk_common/bu_dwg_tooltip.c (revision 12051) @@ -61,7 +61,7 @@ return NULL; /* don't mess with silk objects! */ - if ((type & PCB_SILK_TYPE) && (pcb_layer_flags_(PCB, (pcb_layer_t *) ptr1) & PCB_LYT_SILK)) + if ((type & PCB_SILK_TYPE) && (pcb_layer_flags_((pcb_layer_t *)ptr1) & PCB_LYT_SILK)) return NULL; if (type == PCB_TYPE_PIN || type == PCB_TYPE_PAD) { Index: trunk/src_plugins/lib_netmap/netmap.c =================================================================== --- trunk/src_plugins/lib_netmap/netmap.c (revision 12050) +++ trunk/src_plugins/lib_netmap/netmap.c (revision 12051) @@ -68,7 +68,7 @@ if (htpp_get(&map->o2n, obj) != NULL) return; - if ((layer != NULL) && (pcb_layer_flags_(map->pcb, layer) & PCB_LYT_COPPER) == 0) + if ((layer != NULL) && (pcb_layer_flags_(layer) & PCB_LYT_COPPER) == 0) return; pcb_lookup_conn_by_obj(map, obj, 0, found); Index: trunk/src_plugins/query/query_access.c =================================================================== --- trunk/src_plugins/query/query_access.c (revision 12050) +++ trunk/src_plugins/query/query_access.c (revision 12051) @@ -241,8 +241,8 @@ switch(fh1) { case query_fields_name: PCB_QRY_RET_STR(res, l->name); case query_fields_visible: PCB_QRY_RET_INT(res, l->meta.real.vis); - case query_fields_position: PCB_QRY_RET_INT(res, pcb_layer_flags_(PCB, l) & PCB_LYT_ANYWHERE); - case query_fields_type: PCB_QRY_RET_INT(res, pcb_layer_flags_(PCB, l) & PCB_LYT_ANYTHING); + case query_fields_position: PCB_QRY_RET_INT(res, pcb_layer_flags_(l) & PCB_LYT_ANYWHERE); + case query_fields_type: PCB_QRY_RET_INT(res, pcb_layer_flags_(l) & PCB_LYT_ANYTHING); default:; } Index: trunk/src_plugins/rubberband_orig/rubberband.c =================================================================== --- trunk/src_plugins/rubberband_orig/rubberband.c (revision 12050) +++ trunk/src_plugins/rubberband_orig/rubberband.c (revision 12051) @@ -730,7 +730,7 @@ { pcb_layer_t *layer = (pcb_layer_t *) Ptr1; pcb_line_t *line = (pcb_line_t *) Ptr2; - if (pcb_layer_flags_(PCB, layer) & PCB_LYT_COPPER) { + if (pcb_layer_flags_(layer) & PCB_LYT_COPPER) { CheckLinePointForRubberbandConnection(rbnd, layer, line, &line->Point1,0 ); CheckLinePointForRubberbandConnection(rbnd, layer, line, &line->Point2,1 ); } @@ -738,7 +738,7 @@ } case PCB_TYPE_LINE_POINT: - if (pcb_layer_flags_(PCB, (pcb_layer_t *) Ptr1) & PCB_LYT_COPPER) { + if (pcb_layer_flags_((pcb_layer_t *)Ptr1) & PCB_LYT_COPPER) { CheckLinePointForRubberbandConnection(rbnd, (pcb_layer_t *) Ptr1, (pcb_line_t *) Ptr2, (pcb_point_t *) Ptr3,0); if(conf_rbo.plugins.rubberband_orig.enable_rubberband_arcs != 0) @@ -747,12 +747,12 @@ break; case PCB_TYPE_ARC_POINT: - if (pcb_layer_flags_(PCB, (pcb_layer_t *) Ptr1) & PCB_LYT_COPPER) + if (pcb_layer_flags_((pcb_layer_t *)Ptr1) & PCB_LYT_COPPER) CheckArcPointForRubberbandConnection(rbnd, (pcb_layer_t *) Ptr1, (pcb_arc_t *) Ptr2, (int *) Ptr3, pcb_true); break; case PCB_TYPE_ARC: - if (pcb_layer_flags_(PCB, (pcb_layer_t *) Ptr1) & PCB_LYT_COPPER) + if (pcb_layer_flags_((pcb_layer_t *)Ptr1) & PCB_LYT_COPPER) CheckArcForRubberbandConnection(rbnd, (pcb_layer_t *) Ptr1, (pcb_arc_t *) Ptr2, pcb_true); break; @@ -761,7 +761,7 @@ break; case PCB_TYPE_POLYGON: - if (pcb_layer_flags_(PCB, (pcb_layer_t *) Ptr1) & PCB_LYT_COPPER) + if (pcb_layer_flags_((pcb_layer_t *)Ptr1) & PCB_LYT_COPPER) CheckPolygonForRubberbandConnection(rbnd, (pcb_layer_t *) Ptr1, (pcb_polygon_t *) Ptr2); break; }