Index: trunk/src/hid_helper.c =================================================================== --- trunk/src/hid_helper.c (revision 12030) +++ trunk/src/hid_helper.c (revision 12031) @@ -58,7 +58,7 @@ group = pcb_layer_get_group(PCB, lid); nlayers = PCB->LayerGroups.grp[group].len; - single_name = pcb_layer_name(lid); + single_name = pcb_layer_name(PCB, lid); if (flags & PCB_LYT_TOP) { if (style == PCB_FNS_first || (style == PCB_FNS_single && nlayers == 2)) Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 12030) +++ trunk/src/layer.c (revision 12031) @@ -335,31 +335,31 @@ dst->meta.real.grp = -1; } -pcb_layer_id_t pcb_layer_create(pcb_layergrp_id_t grp, const char *lname) +pcb_layer_id_t pcb_layer_create(pcb_board_t *pcb, pcb_layergrp_id_t grp, const char *lname) { pcb_layer_id_t id; - layer_if_too_many(PCB, return -1); + layer_if_too_many(pcb, return -1); - id = PCB->Data->LayerN++; + id = pcb->Data->LayerN++; if (lname != NULL) { - if (PCB->Data->Layer[id].name != NULL) - free((char *)PCB->Data->Layer[id].name); + if (pcb->Data->Layer[id].name != NULL) + free((char *)pcb->Data->Layer[id].name); } - layer_clear(&PCB->Data->Layer[id]); - PCB->Data->Layer[id].name = pcb_strdup(lname); + layer_clear(&pcb->Data->Layer[id]); + pcb->Data->Layer[id].name = pcb_strdup(lname); /* add layer to group */ if (grp >= 0) { - PCB->LayerGroups.grp[grp].lid[PCB->LayerGroups.grp[grp].len] = id; - PCB->LayerGroups.grp[grp].len++; - PCB->Data->Layer[id].meta.real.vis = PCB->Data->Layer[PCB->LayerGroups.grp[grp].lid[0]].meta.real.vis; + pcb->LayerGroups.grp[grp].lid[pcb->LayerGroups.grp[grp].len] = id; + pcb->LayerGroups.grp[grp].len++; + pcb->Data->Layer[id].meta.real.vis = pcb->Data->Layer[pcb->LayerGroups.grp[grp].lid[0]].meta.real.vis; } - PCB->Data->Layer[id].meta.real.grp = grp; + pcb->Data->Layer[id].meta.real.grp = grp; - PCB->Data->Layer[id].parent = PCB->Data; + pcb->Data->Layer[id].parent = pcb->Data; return id; } @@ -613,12 +613,12 @@ -const char *pcb_layer_name(pcb_layer_id_t id) +const char *pcb_layer_name(pcb_data_t *data, pcb_layer_id_t id) { if (id < 0) return NULL; - if (id < PCB->Data->LayerN) - return PCB->Data->Layer[id].name; + if (id < data->LayerN) + return data->Layer[id].name; if ((id >= PCB_LAYER_VIRT_MIN) && (id <= PCB_LAYER_VIRT_MAX)) return pcb_virt_layers[id-PCB_LAYER_VIRT_MIN].name; return NULL; Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 12030) +++ trunk/src/layer.h (revision 12031) @@ -229,8 +229,11 @@ void pcb_layers_reset(pcb_board_t *pcb); /* Create a new layer and put it in an existing group (if grp is not -1). */ -pcb_layer_id_t pcb_layer_create(pcb_layergrp_id_t grp, const char *lname); +pcb_layer_id_t pcb_layer_create(pcb_board_t *pcb, pcb_layergrp_id_t grp, const char *lname); +/* Return the name of a layer (resolving the true name of virtual layers too) */ +const char *pcb_layer_name(pcb_data_t *data, pcb_layer_id_t id); + /* Rename an existing layer by idx */ int pcb_layer_rename(pcb_layer_id_t layer, const char *lname); Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 12030) +++ trunk/src/layer_grp.c (revision 12031) @@ -661,15 +661,12 @@ void pcb_layer_group_setup_silks(pcb_layer_stack_t *newg) { -#warning layer TODO: this still depends on PCB in pcb_layer_create pcb_layergrp_id_t gid; for(gid = 0; gid < newg->len; gid++) if ((newg->grp[gid].type & PCB_LYT_SILK) && (newg->grp[gid].len == 0)) - pcb_layer_create(gid, "silk"); + pcb_layer_create(PCB, gid, "silk"); } - - int pcb_layergrp_rename_(pcb_layergrp_t *grp, char *name) { free(grp->name); @@ -777,7 +774,7 @@ pcb_layergrp_t *grp = pcb_get_grp_new_misc(pcb); grp->type = PCB_LYT_OUTLINE | PCB_LYT_INTERN; grp->name = pcb_strdup("outline"); - pcb_layer_create(pcb_layergrp_id(pcb, grp), ly->name); + pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name); continue; } @@ -785,7 +782,7 @@ if (ly->meta.bound.type & PCB_LYT_COPPER) { /* top or bottom copper */ grp = pcb_get_grp(&pcb->LayerGroups, ly->meta.bound.type & PCB_LYT_ANYWHERE, PCB_LYT_COPPER); if (grp != NULL) { - pcb_layer_create(pcb_layergrp_id(pcb, grp), ly->name); + pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name); continue; } } @@ -792,7 +789,7 @@ grp = pcb_get_grp(&pcb->LayerGroups, ly->meta.bound.type & PCB_LYT_ANYWHERE, ly->meta.bound.type & PCB_LYT_ANYTHING); if (grp != NULL) { - pcb_layer_id_t lid = pcb_layer_create(pcb_layergrp_id(pcb, grp), ly->name); + pcb_layer_id_t lid = pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name); pcb_layer_t *nly = pcb_get_layer(lid); nly->comb = ly->comb; continue; @@ -824,7 +821,7 @@ offs = existing_intern + offs + 1; if ((offs == int_ofs) && (ly->name != NULL)) { pcb->LayerGroups.grp[n].name = pcb_strdup("internal"); - pcb_layer_create(n, ly->name); + pcb_layer_create(pcb, n, ly->name); goto found; } } Index: trunk/src_plugins/diag/diag.c =================================================================== --- trunk/src_plugins/diag/diag.c (revision 12030) +++ trunk/src_plugins/diag/diag.c (revision 12031) @@ -164,7 +164,7 @@ for(n = 0; n < used; n++) { pcb_layer_id_t layer_id = arr[n]; pcb_layergrp_id_t grp = pcb_layer_get_group(PCB, layer_id); - printf(" [%lx] %04x group=%ld %s\n", layer_id, pcb_layer_flags(PCB, layer_id), grp, pcb_layer_name(layer_id)); + printf(" [%lx] %04x group=%ld %s\n", layer_id, pcb_layer_flags(PCB, layer_id), grp, pcb_layer_name(PCB, layer_id)); } /* query by logical layer: any bottom copper */ Index: trunk/src_plugins/draw_csect/draw_csect.c =================================================================== --- trunk/src_plugins/draw_csect/draw_csect.c (revision 12030) +++ trunk/src_plugins/draw_csect/draw_csect.c (revision 12031) @@ -686,7 +686,7 @@ } else if (drag_addlayer) { if (gactive >= 0) { - pcb_layer_create(gactive, "New Layer"); + pcb_layer_create(PCB, gactive, "New Layer"); pcb_event(PCB_EVENT_LAYERS_CHANGED, NULL); } drag_addlayer = 0; Index: trunk/src_plugins/export_gerber/gerber.c =================================================================== --- trunk/src_plugins/export_gerber/gerber.c (revision 12030) +++ trunk/src_plugins/export_gerber/gerber.c (revision 12031) @@ -695,7 +695,7 @@ return 0; #if 0 - printf(" Layer %s group %lx drill %d mask %d flags=%lx\n", pcb_layer_name(layer), group, is_drill, is_mask, flags); + printf(" Layer %s group %lx drill %d mask %d flags=%lx\n", pcb_layer_name(PCB, layer), group, is_drill, is_mask, flags); #endif Index: trunk/src_plugins/fontmode/fontmode.c =================================================================== --- trunk/src_plugins/fontmode/fontmode.c (revision 12030) +++ trunk/src_plugins/fontmode/fontmode.c (revision 12031) @@ -74,7 +74,7 @@ pcb_layer_id_t lid; assert(grp >= 0); - lid = pcb_layer_create(grp, lname); + lid = pcb_layer_create(PCB, grp, lname); assert(lid >= 0); return &PCB->Data->Layer[lid]; } Index: trunk/src_plugins/hid_remote/remote.c =================================================================== --- trunk/src_plugins/hid_remote/remote.c (revision 12030) +++ trunk/src_plugins/hid_remote/remote.c (revision 12031) @@ -79,7 +79,7 @@ const char *name; pcb_layer_id_t layer_id = arr[n]; pcb_layergrp_id_t gid = pcb_layer_get_group(PCB, layer_id); - name = pcb_layer_name(layer_id); + name = pcb_layer_name(PCB, layer_id); if ((gid < 0) && (name != NULL)) { pcb_remote_new_layer_group(name, layer_id, pcb_layer_flags(PCB, layer_id)); pcb_remote_new_layer(name, layer_id, layer_id); @@ -91,7 +91,7 @@ pcb_layer_id_t lid = arr[n]; pcb_layergrp_id_t gid = pcb_layer_get_group(PCB, lid); if (gid >= 0) - pcb_remote_new_layer(pcb_layer_name(lid), lid, gid); + pcb_remote_new_layer(pcb_layer_name(PCB, lid), lid, gid); } } Index: trunk/src_plugins/io_autotrax/read.c =================================================================== --- trunk/src_plugins/io_autotrax/read.c (revision 12030) +++ trunk/src_plugins/io_autotrax/read.c (revision 12031) @@ -721,7 +721,7 @@ if (pcb_layer_list(mask, &id, 1) != 1) { pcb_layergrp_id_t gid; pcb_layergrp_list(st->pcb, mask, &gid, 1); - id = pcb_layer_create(gid, autotrax_layer); + id = pcb_layer_create(st->pcb, gid, autotrax_layer); } return id; } @@ -744,30 +744,30 @@ if (pcb_layer_list(PCB_LYT_SILK | PCB_LYT_TOP, &id, 1) == 1) { pcb_layergrp_id_t gid; pcb_layergrp_list(st->pcb, PCB_LYT_SILK | PCB_LYT_TOP, &gid, 1); - st->protel_to_stackup[11] = pcb_layer_create(gid, "Board"); /* != outline, cutouts */ + st->protel_to_stackup[11] = pcb_layer_create(st->pcb, gid, "Board"); /* != outline, cutouts */ pcb_layergrp_list(st->pcb, PCB_LYT_SILK | PCB_LYT_TOP, &gid, 1); - st->protel_to_stackup[13] = pcb_layer_create(gid, "Multi"); + st->protel_to_stackup[13] = pcb_layer_create(st->pcb, gid, "Multi"); } else { pcb_message(PCB_MSG_ERROR, "Unable to create Keepout, Multi layers in default top silk group\n"); } g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[2] = pcb_layer_create(g - st->pcb->LayerGroups.grp, "Mid1"); + st->protel_to_stackup[2] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid1"); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[3] = pcb_layer_create(g - st->pcb->LayerGroups.grp, "Mid2"); + st->protel_to_stackup[3] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid2"); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[4] = pcb_layer_create(g - st->pcb->LayerGroups.grp, "Mid3"); + st->protel_to_stackup[4] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid3"); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[5] = pcb_layer_create(g - st->pcb->LayerGroups.grp, "Mid4"); + st->protel_to_stackup[5] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid4"); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[9] = pcb_layer_create(g - st->pcb->LayerGroups.grp, "GND"); + st->protel_to_stackup[9] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "GND"); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[10] = pcb_layer_create(g - st->pcb->LayerGroups.grp, "Power"); + st->protel_to_stackup[10] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Power"); g = pcb_get_grp_new_intern(st->pcb, -1); g->name = pcb_strdup("outline");/* equivalent to keepout = layer 12 in autotrax */ Index: trunk/src_plugins/io_eagle/read.c =================================================================== --- trunk/src_plugins/io_eagle/read.c (revision 12030) +++ trunk/src_plugins/io_eagle/read.c (revision 12031) @@ -329,7 +329,7 @@ break; case 20: /*199: 20 is dimension, 199 is contour */ grp = pcb_get_grp_new_intern(st->pcb, -1); - ly->ly = pcb_layer_create(grp - st->pcb->LayerGroups.grp, ly->name); + ly->ly = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, ly->name); pcb_layergrp_fix_turn_to_outline(grp); break; @@ -337,7 +337,7 @@ if ((id > 1) && (id < 16)) { /* new internal layer */ grp = pcb_get_grp_new_intern(st->pcb, -1); - ly->ly = pcb_layer_create(grp - st->pcb->LayerGroups.grp, ly->name); + ly->ly = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, ly->name); } } if (typ != 0) { @@ -344,7 +344,7 @@ if (reuse) pcb_layer_list(typ, &ly->ly, 1); if ((ly->ly < 0) && (pcb_layergrp_list(st->pcb, typ, &gid, 1) > 0)) - ly->ly = pcb_layer_create(gid, ly->name); + ly->ly = pcb_layer_create(st->pcb, gid, ly->name); } } } Index: trunk/src_plugins/io_hyp/parser.c =================================================================== --- trunk/src_plugins/io_hyp/parser.c (revision 12030) +++ trunk/src_plugins/io_hyp/parser.c (revision 12031) @@ -859,25 +859,25 @@ id = -1; if (pcb_layergrp_list(PCB, PCB_LYT_SILK | PCB_LYT_TOP, &gid, 1) == 1) - id = pcb_layer_create(gid, "top silk"); + id = pcb_layer_create(PCB, gid, "top silk"); if (id < 0) pcb_message(PCB_MSG_ERROR, "failed to create top silk\n"); id = -1; if (pcb_layergrp_list(PCB, PCB_LYT_SILK | PCB_LYT_BOTTOM, &gid, 1) == 1) - id = pcb_layer_create(gid, "bottom silk"); + id = pcb_layer_create(PCB, gid, "bottom silk"); if (id < 0) pcb_message(PCB_MSG_ERROR, "failed to create bottom silk\n"); top_layer_id = -1; if (pcb_layergrp_list(PCB, PCB_LYT_COPPER | PCB_LYT_TOP, &gid, 1) == 1) - top_layer_id = pcb_layer_create(gid, ""); + top_layer_id = pcb_layer_create(PCB, gid, ""); if (top_layer_id < 0) pcb_message(PCB_MSG_ERROR, "failed to create top copper\n"); bottom_layer_id = -1; if (pcb_layergrp_list(PCB, PCB_LYT_COPPER | PCB_LYT_BOTTOM, &gid, 1) == 1) - bottom_layer_id = pcb_layer_create(gid, ""); + bottom_layer_id = pcb_layer_create(PCB, gid, ""); if (bottom_layer_id < 0) pcb_message(PCB_MSG_ERROR, "failed to create bottom copper\n"); @@ -886,7 +886,7 @@ id = -1; grp = pcb_get_grp_new_intern(PCB, -1); if (grp != NULL) { - id = pcb_layer_create(grp - PCB->LayerGroups.grp, "outline"); + id = pcb_layer_create(PCB, grp - PCB->LayerGroups.grp, "outline"); pcb_layergrp_fix_turn_to_outline(grp); } if (id < 0) @@ -951,7 +951,7 @@ /* create new bottom layer */ pcb_layergrp_list(PCB, PCB_LYT_COPPER | PCB_LYT_BOTTOM, &gid, 1); - layer_id = pcb_layer_create(gid, lname); + layer_id = pcb_layer_create(PCB, gid, lname); /* check if new bottom layer valid */ if (layer_id < 0) { @@ -1282,7 +1282,7 @@ for (l = 0; l < layer_count; l++) { pcb_layer_id_t layer_id = layer_array[l]; if (hyp_debug) - pcb_message(PCB_MSG_DEBUG, "draw polygons: layer %lx \"%s\"\n", layer_id, pcb_layer_name(layer_id)); + pcb_message(PCB_MSG_DEBUG, "draw polygons: layer %lx \"%s\"\n", layer_id, pcb_layer_name(PCB->Data, layer_id)); /* loop over all polygons of the layer and draw them */ for (i = polygon_head; i != NULL; i = i->next) { @@ -1602,7 +1602,7 @@ layer_clearance[signal_layer_id] = xy2coord(h->plane_separation); if (hyp_debug) - pcb_message(PCB_MSG_DEBUG, "signal layer: \"%s\"", pcb_layer_name(signal_layer_id)); + pcb_message(PCB_MSG_DEBUG, "signal layer: \"%s\"", pcb_layer_name(PCB->Data, signal_layer_id)); hyp_debug_layer(h); return 0; @@ -1643,7 +1643,7 @@ /* XXX need to flood layer with copper */ if (hyp_debug) - pcb_message(PCB_MSG_DEBUG, "plane layer: \"%s\"", pcb_layer_name(plane_layer_id)); + pcb_message(PCB_MSG_DEBUG, "plane layer: \"%s\"", pcb_layer_name(PCB->Data, plane_layer_id)); hyp_debug_layer(h); return 0; @@ -1896,7 +1896,7 @@ for (i = padstk->padstack; i != NULL; i = i->next) { if (i->layer_name == NULL) continue; - if ((strcmp(i->layer_name, pcb_layer_name(top_layer_id)) == 0) && (i->pad_type != PAD_TYPE_METAL)) + if ((strcmp(i->layer_name, pcb_layer_name(PCB->Data, top_layer_id)) == 0) && (i->pad_type != PAD_TYPE_METAL)) break; } /* if top layer not found, search for bottom layer */ @@ -1904,7 +1904,7 @@ for (i = padstk->padstack; i != NULL; i = i->next) { if (i->layer_name == NULL) continue; - if ((strcmp(i->layer_name, pcb_layer_name(bottom_layer_id)) == 0) && (i->pad_type != PAD_TYPE_METAL)) + if ((strcmp(i->layer_name, pcb_layer_name(PCB->Data, bottom_layer_id)) == 0) && (i->pad_type != PAD_TYPE_METAL)) break; } /* if bottom layer not found, search for default MDEF layer */ Index: trunk/src_plugins/io_kicad/read.c =================================================================== --- trunk/src_plugins/io_kicad/read.c (revision 12030) +++ trunk/src_plugins/io_kicad/read.c (revision 12031) @@ -942,14 +942,14 @@ switch(lnum) { case 0: /*pcb_hid_actionl("dumpcsect", NULL);*/ - pcb_layergrp_list(PCB, PCB_LYT_COPPER | PCB_LYT_BOTTOM, &gid, 1); - id = pcb_layer_create(gid, lname); + pcb_layergrp_list(st->PCB, PCB_LYT_COPPER | PCB_LYT_BOTTOM, &gid, 1); + id = pcb_layer_create(st->PCB, gid, lname); /*printf("------------------------------\n"); pcb_hid_actionl("dumpcsect", NULL);*/ break; case 15: - pcb_layergrp_list(PCB, PCB_LYT_COPPER | PCB_LYT_TOP, &gid, 1); - id = pcb_layer_create(gid, lname); + pcb_layergrp_list(st->PCB, PCB_LYT_COPPER | PCB_LYT_TOP, &gid, 1); + id = pcb_layer_create(st->PCB, gid, lname); break; default: if (strcmp(lname, "Edge.Cuts") == 0) { @@ -956,12 +956,12 @@ /* Edge must be the outline */ pcb_layergrp_t *g = pcb_get_grp_new_intern(PCB, -1); pcb_layergrp_fix_turn_to_outline(g); - id = pcb_layer_create(g - st->PCB->LayerGroups.grp, lname); + id = pcb_layer_create(st->PCB, g - st->PCB->LayerGroups.grp, lname); } else if ((strcmp(ltype, "signal") == 0) || (strcmp(ltype, "power") == 0) || (strncmp(lname, "Dwgs.", 4) == 0) || (strncmp(lname, "Cmts.", 4) == 0) || (strncmp(lname, "Eco", 3) == 0)) { /* Create a new inner layer for signals and for emulating misc layers */ pcb_layergrp_t *g = pcb_get_grp_new_intern(PCB, -1); - id = pcb_layer_create(g - st->PCB->LayerGroups.grp, lname); + id = pcb_layer_create(st->PCB, g - st->PCB->LayerGroups.grp, lname); } else if ((lname[1] == '.') && ((lname[0] == 'F') || (lname[0] == 'B'))) { /* F. or B. layers */ @@ -1000,7 +1000,7 @@ if (pcb_layer_list(mask, &id, 1) != 1) { pcb_layergrp_id_t gid; pcb_layergrp_list(PCB, mask, &gid, 1); - id = pcb_layer_create(gid, kicad_name); + id = pcb_layer_create(st->PCB, gid, kicad_name); } htsi_set(&st->layer_k2i, pcb_strdup(kicad_name), id); return 0; Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 12030) +++ trunk/src_plugins/io_pcb/file.c (revision 12031) @@ -683,10 +683,10 @@ res = pcb_layergrp_list(PCB, PCB_LYT_TOP | PCB_LYT_COPPER, &gid, 1); assert(res == 1); - pcb_layer_create(gid, "top copper"); + pcb_layer_create(PCB, gid, "top copper"); res = pcb_layergrp_list(PCB, PCB_LYT_BOTTOM | PCB_LYT_COPPER, &gid, 1); assert(res == 1); - pcb_layer_create(gid, "bottom copper"); + pcb_layer_create(PCB, gid, "bottom copper"); } }