Index: trunk/src/board.c =================================================================== --- trunk/src/board.c (revision 9098) +++ trunk/src/board.c (revision 9099) @@ -99,7 +99,7 @@ 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]); + ptr->Data->Layer[i].meta.real.name = pcb_strdup(conf_core.design.default_layer_name[i]); pcb_font_create_default(ptr); @@ -168,8 +168,8 @@ /* copy default settings */ for (i = 0; i < PCB_MAX_LAYER; i++) { - ptr->Data->Layer[i].Color = conf_core.appearance.color.layer[i]; - ptr->Data->Layer[i].SelectedColor = conf_core.appearance.color.layer_selected[i]; + ptr->Data->Layer[i].meta.real.color = conf_core.appearance.color.layer[i]; + ptr->Data->Layer[i].meta.real.selected_color = conf_core.appearance.color.layer_selected[i]; } } Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 9098) +++ trunk/src/buffer.c (revision 9099) @@ -606,7 +606,7 @@ for (i = 0; i < num_layers; i++) { pcb_layer_t *sourcelayer = &PCB_PASTEBUFFER->Data->Layer[i], *destlayer = LAYER_PTR(i); - if (destlayer->On) { + if (destlayer->meta.real.vis) { PCB_LINE_LOOP(sourcelayer); { if (CopyLine(&ctx, destlayer, line)) Index: trunk/src/change_act.c =================================================================== --- trunk/src/change_act.c (revision 9098) +++ trunk/src/change_act.c (revision 9099) @@ -684,7 +684,7 @@ /* change the name of the active layer */ case F_Layer: - name = pcb_gui->prompt_for(_("Enter the layer name:"), PCB_EMPTY(CURRENT->Name)); + name = pcb_gui->prompt_for(_("Enter the layer name:"), PCB_EMPTY(CURRENT->meta.real.name)); /* NB: pcb_layer_rename_ takes ownership of the passed memory */ if (name && (pcb_layer_rename_(CURRENT, name) == 0)) pcb_board_set_changed_flag(pcb_true); Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 9098) +++ trunk/src/crosshair.c (revision 9099) @@ -309,7 +309,7 @@ /* draw all visible layers */ for (i = 0; i < pcb_max_layer; i++) - if (PCB->Data->Layer[i].On) { + if (PCB->Data->Layer[i].meta.real.vis) { pcb_layer_t *layer = &Buffer->Data->Layer[i]; PCB_LINE_LOOP(layer); @@ -1088,7 +1088,7 @@ for (i = 0; i < pcb_max_layer; i++) { pcb_layer_t *layer = &PCB->Data->Layer[i]; /* Only find points of arcs and lines on currently visible layers. */ - if (!layer->On) + if (!layer->meta.real.vis) continue; pcb_r_search(layer->line_tree, &SearchBox, NULL, onpoint_line_callback, &info, NULL); pcb_r_search(layer->arc_tree, &SearchBox, NULL, onpoint_arc_callback, &info, NULL); Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 9098) +++ trunk/src/data.c (revision 9099) @@ -199,14 +199,14 @@ list_map0(&data->Rat, pcb_rat_t, pcb_rat_free); for (layer = data->Layer, i = 0; i < data->LayerN; layer++, i++) { - pcb_attribute_free(&layer->Attributes); + pcb_attribute_free(&layer->meta.real.Attributes); PCB_TEXT_LOOP(layer); { free(text->TextString); } PCB_END_LOOP; - if (layer->Name) - free((char*)layer->Name); + if (layer->meta.real.name) + free((char*)layer->meta.real.name); PCB_LINE_LOOP(layer); { if (line->Number) Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 9098) +++ trunk/src/draw.c (revision 9099) @@ -172,8 +172,8 @@ pcb_bool paste_empty; - PCB->Data->SILKLAYER.Color = conf_core.appearance.color.element; - PCB->Data->BACKSILKLAYER.Color = conf_core.appearance.color.invisible_objects; + PCB->Data->SILKLAYER.meta.real.color = conf_core.appearance.color.element; + PCB->Data->BACKSILKLAYER.meta.real.color = conf_core.appearance.color.invisible_objects; memset(do_group, 0, sizeof(do_group)); for (ngroups = 0, i = 0; i < pcb_max_layer; i++) { @@ -184,7 +184,7 @@ if ((gflg & PCB_LYT_SILK) || (gflg & PCB_LYT_MASK) || (gflg & PCB_LYT_PASTE)) /* do not draw silk, mask and paste here, they'll be drawn separately */ continue; - if (l->On && !do_group[group]) { + if (l->meta.real.vis && !do_group[group]) { do_group[group] = 1; drawn_groups[ngroups++] = group; } @@ -297,7 +297,7 @@ /* find the first ui layer in use */ first = NULL; for(i = 0; i < vtlayer_len(&pcb_uilayer); i++) { - if (pcb_uilayer.array[i].cookie != NULL) { + if (pcb_uilayer.array[i].meta.real.cookie != NULL) { first = pcb_uilayer.array+i; break; } @@ -306,7 +306,7 @@ /* if there's any UI layer, try to draw them */ if ((first != NULL) && pcb_layer_gui_set_g_ui(first, 0)) { for(i = 0; i < vtlayer_len(&pcb_uilayer); i++) - if ((pcb_uilayer.array[i].cookie != NULL) && (pcb_uilayer.array[i].On)) + if ((pcb_uilayer.array[i].meta.real.cookie != NULL) && (pcb_uilayer.array[i].meta.real.vis)) pcb_draw_layer(pcb_uilayer.array+i, drawn_area); pcb_gui->end_layer(); } @@ -394,7 +394,7 @@ auto-outline magically disappear when you first add something to the outline layer. */ if ((lflg & PCB_LYT_OUTLINE) && pcb_layer_is_empty_(PCB, Layer)) { - pcb_gui->set_color(Output.fgGC, Layer->Color); + pcb_gui->set_color(Output.fgGC, Layer->meta.real.color); pcb_gui->set_line_width(Output.fgGC, PCB->minWid); pcb_gui->draw_rect(Output.fgGC, 0, 0, PCB->MaxWidth, PCB->MaxHeight); } @@ -419,7 +419,7 @@ for (i = n_entries - 1; i >= 0; i--) { layernum = layers[i]; Layer = PCB->Data->Layer + layernum; - if (!(gflg & PCB_LYT_SILK) && Layer->On) + if (!(gflg & PCB_LYT_SILK) && Layer->meta.real.vis) pcb_draw_layer(Layer, drawn_area); } if (n_entries > 1) @@ -472,19 +472,19 @@ DrawVia((pcb_pin_t *) ptr2); break; case PCB_TYPE_LINE: - if (((pcb_layer_t *) ptr1)->On) + if (((pcb_layer_t *) ptr1)->meta.real.vis) DrawLine((pcb_layer_t *) ptr1, (pcb_line_t *) ptr2); break; case PCB_TYPE_ARC: - if (((pcb_layer_t *) ptr1)->On) + if (((pcb_layer_t *) ptr1)->meta.real.vis) DrawArc((pcb_layer_t *) ptr1, (pcb_arc_t *) ptr2); break; case PCB_TYPE_TEXT: - if (((pcb_layer_t *) ptr1)->On) + if (((pcb_layer_t *) ptr1)->meta.real.vis) DrawText((pcb_layer_t *) ptr1, (pcb_text_t *) ptr2); break; case PCB_TYPE_POLYGON: - if (((pcb_layer_t *) ptr1)->On) + if (((pcb_layer_t *) ptr1)->meta.real.vis) DrawPolygon((pcb_layer_t *) ptr1, (pcb_polygon_t *) ptr2); break; case PCB_TYPE_ELEMENT: Index: trunk/src/draw_composite.c =================================================================== --- trunk/src/draw_composite.c (revision 9098) +++ trunk/src/draw_composite.c (revision 9099) @@ -143,16 +143,16 @@ } { - const char *old_color = l->Color; + const char *old_color = l->meta.real.color; pcb_hid_gc_t old_fg = Output.fgGC; Output.fgGC = Output.pmGC; - l->Color = ctx->color; + l->meta.real.color = ctx->color; if (!want_add) - l->Color = "erase"; + l->meta.real.color = "erase"; if (l->comb & PCB_LYC_AUTO) draw_auto(ctx, auto_data); pcb_draw_layer(l, ctx->screen); - l->Color = old_color; + l->meta.real.color = old_color; Output.fgGC = old_fg; } } Index: trunk/src/find_lookup.c =================================================================== --- trunk/src/find_lookup.c (revision 9098) +++ trunk/src/find_lookup.c (revision 9099) @@ -415,7 +415,7 @@ for(layer = 0; layer < pcb_max_layer; layer++) { if (!(pcb_layer_flags(PCB, layer) & PCB_LYT_COPPER)) continue; - if (LAYER_PTR(layer)->no_drc) + if (LAYER_PTR(layer)->meta.real.no_drc) continue; info.layer = layer; /* add touching lines */ @@ -733,7 +733,7 @@ for(layer = 0; layer < pcb_max_layer; layer++) { if (!(pcb_layer_flags(PCB, layer) & PCB_LYT_COPPER)) continue; - if (LAYER_PTR(layer)->no_drc) + if (LAYER_PTR(layer)->meta.real.no_drc) continue; /* do nothing if there are no PV's */ if (TotalP + TotalV == 0) { Index: trunk/src/find_misc.c =================================================================== --- trunk/src/find_misc.c (revision 9098) +++ trunk/src/find_misc.c (revision 9099) @@ -50,7 +50,7 @@ #warning layer TODO: decide whether it is from attribute or not for (layer = 0; layer < pcb_max_layer; layer++) { pcb_layer_t *l = LAYER_PTR(layer); - l->no_drc = pcb_attrib_get(l, "PCB::skip-drc") != NULL; + l->meta.real.no_drc = pcb_attribute_get(&l->meta.real.Attributes, "PCB::skip-drc") != NULL; } } @@ -90,7 +90,7 @@ for (i = pcb_max_layer; i != -1; i--) { pcb_cardinal_t layer = pcb_layer_stack[i]; - if (PCB->Data->Layer[layer].On) { + if (PCB->Data->Layer[layer].meta.real.vis) { /* draw all new lines */ position = LineList[layer].DrawLocation; for (; position < LineList[layer].Number; position++) @@ -230,7 +230,7 @@ pcb_layer_id_t laynum = pcb_layer_id(PCB->Data, (pcb_layer_t *) ptr1); /* don't mess with non-conducting objects! */ - if (!(pcb_layer_flags(PCB, laynum) & PCB_LYT_COPPER) || ((pcb_layer_t *) ptr1)->no_drc) + if (!(pcb_layer_flags(PCB, laynum) & PCB_LYT_COPPER) || ((pcb_layer_t *) ptr1)->meta.real.no_drc) return; } } Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 9098) +++ trunk/src/gui_act.c (revision 9099) @@ -1438,9 +1438,9 @@ val = NULL; } if (val == NULL) - ret |= pcb_attribute_remove(&ly->Attributes, key); + ret |= pcb_attribute_remove(&ly->meta.real.Attributes, key); else - ret |= pcb_attribute_put(&ly->Attributes, key, val, 1); + ret |= pcb_attribute_put(&ly->meta.real.Attributes, key, val, 1); free(key); pcb_board_set_changed_flag(pcb_true); } @@ -1459,7 +1459,7 @@ {"auto: auto-generated layer", NULL, PCB_HATT_BOOL, 0, 0, {0}, NULL, NULL, 0, NULL, NULL} }; - attr[0].default_val.str_value = pcb_strdup(ly->Name); + attr[0].default_val.str_value = pcb_strdup(ly->meta.real.name); attr[1].default_val.int_value = ly->comb & PCB_LYC_SUB; attr[2].default_val.int_value = ly->comb & PCB_LYC_AUTO; @@ -1467,7 +1467,7 @@ if (ar == 0) { pcb_layer_combining_t comb = 0; - if (strcmp(ly->Name, attr[0].default_val.str_value) != 0) { + if (strcmp(ly->meta.real.name, attr[0].default_val.str_value) != 0) { ret |= pcb_layer_rename_(ly, (char *)attr[0].default_val.str_value); attr[0].default_val.str_value = NULL; pcb_board_set_changed_flag(pcb_true); Index: trunk/src/hid_flags.c =================================================================== --- trunk/src/hid_flags.c (revision 9098) +++ trunk/src/hid_flags.c (revision 9099) @@ -85,8 +85,8 @@ { int i; for (i = 0; i < pcb_max_layer; i++) { - save_array[i] = PCB->Data->Layer[i].On; - PCB->Data->Layer[i].On = 1; + save_array[i] = PCB->Data->Layer[i].meta.real.vis; + PCB->Data->Layer[i].meta.real.vis = 1; } } @@ -94,5 +94,5 @@ { int i; for (i = 0; i < pcb_max_layer; i++) - PCB->Data->Layer[i].On = save_array[i]; + PCB->Data->Layer[i].meta.real.vis = save_array[i]; } Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 9098) +++ trunk/src/layer.c (revision 9099) @@ -263,7 +263,7 @@ { pcb_layer_id_t n; for (n = 0; n < PCB->Data->LayerN; n++) - if (strcmp(PCB->Data->Layer[n].Name, name) == 0) + if (strcmp(PCB->Data->Layer[n].meta.real.name, name) == 0) return n; return -1; } @@ -276,9 +276,9 @@ for the rest of the code: the (embedded) default design will overwrite this. */ /* reset layers */ for(n = 0; n < PCB_MAX_LAYER; n++) { - if (PCB->Data->Layer[n].Name != NULL) - free((char *)PCB->Data->Layer[n].Name); - PCB->Data->Layer[n].Name = pcb_strdup(""); + if (PCB->Data->Layer[n].meta.real.name != NULL) + free((char *)PCB->Data->Layer[n].meta.real.name); + PCB->Data->Layer[n].meta.real.name = pcb_strdup(""); PCB->Data->Layer[n].grp = -1; } @@ -308,18 +308,18 @@ 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].meta.real.name != NULL) + free((char *)PCB->Data->Layer[id].meta.real.name); } layer_clear(&PCB->Data->Layer[id]); - PCB->Data->Layer[id].Name = pcb_strdup(lname); + PCB->Data->Layer[id].meta.real.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].On = PCB->Data->Layer[PCB->LayerGroups.grp[grp].lid[0]].On; + PCB->Data->Layer[id].meta.real.vis = PCB->Data->Layer[PCB->LayerGroups.grp[grp].lid[0]].meta.real.vis; } PCB->Data->Layer[id].grp = grp; @@ -329,9 +329,9 @@ int pcb_layer_rename(pcb_layer_id_t layer, const char *lname) { - if (PCB->Data->Layer[layer].Name != NULL) - free((char *)PCB->Data->Layer[layer].Name); - PCB->Data->Layer[layer].Name = pcb_strdup(lname); + if (PCB->Data->Layer[layer].meta.real.name != NULL) + free((char *)PCB->Data->Layer[layer].meta.real.name); + PCB->Data->Layer[layer].meta.real.name = pcb_strdup(lname); return 0; } @@ -367,8 +367,8 @@ int pcb_layer_rename_(pcb_layer_t *Layer, char *Name) { - free((char*)Layer->Name); - Layer->Name = Name; + free((char*)Layer->meta.real.name); + Layer->meta.real.name = Name; pcb_event(PCB_EVENT_LAYERS_CHANGED, NULL); return 0; } @@ -399,10 +399,10 @@ { memset(lp, 0, sizeof(pcb_layer_t)); lp->grp = gid; - lp->On = 1; - lp->Name = pcb_strdup("New Layer"); - lp->Color = conf_core.appearance.color.layer[idx]; - lp->SelectedColor = conf_core.appearance.color.layer_selected[idx]; + lp->meta.real.vis = 1; + lp->meta.real.name = pcb_strdup("New Layer"); + lp->meta.real.color = conf_core.appearance.color.layer[idx]; + lp->meta.real.selected_color = conf_core.appearance.color.layer_selected[idx]; if ((gid >= 0) && (PCB->LayerGroups.grp[gid].len == 0)) { /*When adding the first layer in a group, set up comb flags automatically */ switch((PCB->LayerGroups.grp[gid].type) & PCB_LYT_ANYTHING) { case PCB_LYT_MASK: lp->comb = PCB_LYC_AUTO | PCB_LYC_SUB; break; @@ -584,7 +584,7 @@ if (id < 0) return NULL; if (id < PCB->Data->LayerN) - return PCB->Data->Layer[id].Name; + return PCB->Data->Layer[id].meta.real.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 9098) +++ trunk/src/layer.h (revision 9099) @@ -94,24 +94,38 @@ #include "obj_all_list.h" struct pcb_layer_s { /* holds information about one layer */ - const char *Name; /* layer name */ linelist_t Line; textlist_t Text; polylist_t Polygon; arclist_t Arc; + pcb_data_t *parent; + + pcb_layergrp_id_t grp; /* the group this layer is in (cross-reference) */ + pcb_layer_combining_t comb; /* how to combine this layer with other layers in the group */ + + /* for bound layers these point to the board layer's*/ pcb_rtree_t *line_tree, *text_tree, *polygon_tree, *arc_tree; pcb_rtree_t *subc_tree; /* TODO: decide whether this lists subcircuits or parts of subcircuits */ - pcb_bool On; /* visible flag */ - const char *Color; /* color */ - const char *SelectedColor; - pcb_attribute_list_t Attributes; - int no_drc; /* whether to ignore the layer when checking the design rules */ - pcb_layergrp_id_t grp; /* the group this layer is in (cross-reference) */ - pcb_layer_combining_t comb; /* how to combine this layer with other layers in the group */ - - const char *cookie; /* for UI layers: registration cookie; NULL for unused UI layers */ - pcb_data_t *parent; + union { + struct { /* A real board layer */ + const char *name; /* layer name */ + pcb_bool vis; /* visible flag */ + const char *color; /* color */ + const char *selected_color; + pcb_attribute_list_t Attributes; + int no_drc; /* whether to ignore the layer when checking the design rules */ + const char *cookie; /* for UI layers: registration cookie; NULL for unused UI layers */ + } real; + struct { /* A subcircuit layer binding; list data are local but everything else is coming from board layers */ + pcb_layer_t *real; /* NULL if unbound */ + + /* matching rules */ + pcb_layer_type_t type; + pcb_layer_combining_t comb; + int stack_offs; /* offset in the stack for PCB_LYT_INNER: positive is counted from primary side, negative from the opposite side */ + } bound; + } meta; }; Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 9098) +++ trunk/src/layer_grp.c (revision 9099) @@ -471,7 +471,7 @@ } -#define LAYER_IS_OUTLINE(idx) ((pcb->Data->Layer[idx].Name != NULL) && ((strcmp(pcb->Data->Layer[idx].Name, "route") == 0 || strcmp(pcb->Data->Layer[(idx)].Name, "outline") == 0))) +#define LAYER_IS_OUTLINE(idx) ((pcb->Data->Layer[idx].meta.real.name != NULL) && ((strcmp(pcb->Data->Layer[idx].meta.real.name, "route") == 0 || strcmp(pcb->Data->Layer[(idx)].meta.real.name, "outline") == 0))) int pcb_layer_parse_group_string(pcb_board_t *pcb, const char *grp_str, int LayerN, int oldfmt) { const char *s, *start; Index: trunk/src/layer_ui.c =================================================================== --- trunk/src/layer_ui.c (revision 9098) +++ trunk/src/layer_ui.c (revision 9099) @@ -43,8 +43,8 @@ for(n = 0; n < vtlayer_len(&pcb_uilayer); n++) { l = &pcb_uilayer.array[n]; - if (l->cookie == NULL) { - l->cookie = cookie; + if (l->meta.real.cookie == NULL) { + l->meta.real.cookie = cookie; goto found; } } @@ -51,10 +51,10 @@ l = vtlayer_alloc_append(&pcb_uilayer, 1); found:; - l->cookie = cookie; - l->Color = color; - l->Name = name; - l->On = 1; + l->meta.real.cookie = cookie; + l->meta.real.color = color; + l->meta.real.name = name; + l->meta.real.vis = 1; pcb_event(PCB_EVENT_LAYERS_CHANGED, NULL); return l; } @@ -64,11 +64,11 @@ int n; for(n = 0; n < vtlayer_len(&pcb_uilayer); n++) { pcb_layer_t *l = &pcb_uilayer.array[n]; - if (l->cookie == cookie) { + if (l->meta.real.cookie == cookie) { #warning TODO: free all objects - l->cookie = NULL; - l->Color = l->Name = NULL; - l->On = 0; + l->meta.real.cookie = NULL; + l->meta.real.color = l->meta.real.name = NULL; + l->meta.real.vis = 0; pcb_event(PCB_EVENT_LAYERS_CHANGED, NULL); } } Index: trunk/src/layer_vis.c =================================================================== --- trunk/src/layer_vis.c (revision 9098) +++ trunk/src/layer_vis.c (revision 9099) @@ -84,17 +84,17 @@ if (Layer & PCB_LYT_UI) { if (On < 0) - On = !pcb_uilayer.array[Layer].On; + On = !pcb_uilayer.array[Layer].meta.real.vis; Layer &= ~(PCB_LYT_UI | PCB_LYT_VIRTUAL); if (Layer >= vtlayer_len(&pcb_uilayer)) return 0; - pcb_uilayer.array[Layer].On = On; + pcb_uilayer.array[Layer].meta.real.vis = On; changed = 1; goto done; } if (On < 0) - On = !PCB->Data->Layer[Layer].On; + On = !PCB->Data->Layer[Layer].meta.real.vis; if (conf_core.rc.verbose) printf("pcb_layervis_change_group_vis(Layer=%ld, On=%d, ChangeStackOrder=%d)\n", Layer, On, ChangeStackOrder); @@ -106,7 +106,7 @@ /* don't count the passed member of the group */ if (layer != Layer && layer < pcb_max_layer) { - PCB->Data->Layer[layer].On = On; + PCB->Data->Layer[layer].meta.real.vis = On; /* push layer on top of stack if switched on */ if (On && ChangeStackOrder) @@ -118,7 +118,7 @@ } /* change at least the passed layer */ - PCB->Data->Layer[Layer].On = On; + PCB->Data->Layer[Layer].meta.real.vis = On; if (On && ChangeStackOrder) PushOnTopOfLayerStack(Layer); @@ -140,7 +140,7 @@ for (i = 0; i < pcb_max_layer; i++) { if (!(pcb_layer_flags(PCB, i) & PCB_LYT_SILK)) pcb_layer_stack[i] = i; - PCB->Data->Layer[i].On = pcb_true; + PCB->Data->Layer[i].meta.real.vis = pcb_true; } PCB->InvisibleObjectsOn = pcb_true; PCB->PinOn = pcb_true; @@ -173,7 +173,7 @@ for (i = 0; i < pcb_max_layer; i++) { if (!(pcb_layer_flags(PCB, i) & PCB_LYT_SILK)) SavedStack.pcb_layer_stack[i] = pcb_layer_stack[i]; - SavedStack.LayerOn[i] = PCB->Data->Layer[i].On; + SavedStack.LayerOn[i] = PCB->Data->Layer[i].meta.real.vis; } SavedStack.ElementOn = pcb_silk_on(PCB); SavedStack.InvisibleObjectsOn = PCB->InvisibleObjectsOn; @@ -201,7 +201,7 @@ for (i = 0; i < pcb_max_layer; i++) { if (!(pcb_layer_flags(PCB, i) & PCB_LYT_SILK)) pcb_layer_stack[i] = SavedStack.pcb_layer_stack[i]; - PCB->Data->Layer[i].On = SavedStack.LayerOn[i]; + PCB->Data->Layer[i].meta.real.vis = SavedStack.LayerOn[i]; } PCB->InvisibleObjectsOn = SavedStack.InvisibleObjectsOn; PCB->PinOn = SavedStack.PinOn; @@ -225,9 +225,9 @@ in = 1; for(n = 0; n < pcb_max_layer; n++) { if (pcb_layer_flags(PCB, n) & PCB_LYT_MASK) { - if (PCB->Data->Layer[n].On != *cfg->val.boolean) { + if (PCB->Data->Layer[n].meta.real.vis != *cfg->val.boolean) { chg = 1; - PCB->Data->Layer[n].On = *cfg->val.boolean; + PCB->Data->Layer[n].meta.real.vis = *cfg->val.boolean; } } } @@ -251,7 +251,7 @@ g->vis = 0; for(n = 0; n < g->len; n++) { pcb_layer_t *l = pcb_get_layer(g->lid[n]); - if ((l != NULL) && (l->On)) { + if ((l != NULL) && (l->meta.real.vis)) { g->vis = 1; break; } @@ -261,7 +261,7 @@ pcb_bool_op(g->vis, vis); for(n = 0; n < g->len; n++) { pcb_layer_t *l = pcb_get_layer(g->lid[n]); - pcb_bool_op(l->On, vis); + pcb_bool_op(l->meta.real.vis, vis); } } } Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 9098) +++ trunk/src/obj_arc.c (revision 9099) @@ -503,7 +503,7 @@ { pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_ARC, Layer, Arc); pcb_r_delete_entry(Layer->arc_tree, (pcb_box_t *) Arc); - if (Layer->On) { + if (Layer->meta.real.vis) { EraseArc(Arc); pcb_arc_move(Arc, ctx->move.dx, ctx->move.dy); DrawArc(Layer, Arc); @@ -544,7 +544,7 @@ pcb_message(PCB_MSG_WARNING, _("Sorry, the object is locked\n")); return NULL; } - if (ctx->move.dst_layer == Layer && Layer->On) { + if (ctx->move.dst_layer == Layer && Layer->meta.real.vis) { DrawArc(Layer, Arc); pcb_draw(); } @@ -552,11 +552,11 @@ return (Arc); pcb_undo_add_obj_to_move_to_layer(PCB_TYPE_ARC, Layer, Arc, Arc); pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_ARC, Layer, Arc); - if (Layer->On) + if (Layer->meta.real.vis) EraseArc(Arc); newone = (pcb_arc_t *) MoveArcToLayerLowLevel(ctx, Layer, Arc, ctx->move.dst_layer); pcb_poly_clear_from_poly(PCB->Data, PCB_TYPE_ARC, ctx->move.dst_layer, Arc); - if (ctx->move.dst_layer->On) + if (ctx->move.dst_layer->meta.real.vis) DrawArc(ctx->move.dst_layer, newone); pcb_draw(); return (newone); @@ -577,7 +577,7 @@ void *RemoveArc_op(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_arc_t *Arc) { /* erase from screen */ - if (Layer->On) { + if (Layer->meta.real.vis) { EraseArc(Arc); if (!ctx->remove.bulk) pcb_draw(); @@ -718,12 +718,12 @@ color = conf_core.appearance.color.warn; else if (PCB_FLAG_TEST(PCB_FLAG_SELECTED | PCB_FLAG_FOUND, arc)) { if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, arc)) - color = layer->SelectedColor; + color = layer->meta.real.selected_color; else color = conf_core.appearance.color.connected; } else - color = layer->Color; + color = layer->meta.real.color; if (PCB_FLAG_TEST(PCB_FLAG_ONPOINT, arc)) { assert(color != NULL); Index: trunk/src/obj_arc.h =================================================================== --- trunk/src/obj_arc.h (revision 9098) +++ trunk/src/obj_arc.h (revision 9099) @@ -121,7 +121,7 @@ pcb_layer_t *layer = (top)->Layer; \ for (l = 0; l < ((top)->LayerN > 0 ? (top)->LayerN : PCB->Data->LayerN); l++, layer++) \ { \ - if (layer->On) \ + if (layer->meta.real.vis) \ PCB_ARC_LOOP(layer) #endif Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 9098) +++ trunk/src/obj_line.c (revision 9099) @@ -433,7 +433,7 @@ /* moves a line */ void *MoveLine(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_line_t *Line) { - if (Layer->On) + if (Layer->meta.real.vis) EraseLine(Line); pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_LINE, Layer, Line); pcb_r_delete_entry(Layer->line_tree, (pcb_box_t *) Line); @@ -440,7 +440,7 @@ pcb_line_move(Line, ctx->move.dx, ctx->move.dy); pcb_r_insert_entry(Layer->line_tree, (pcb_box_t *) Line, 0); pcb_poly_clear_from_poly(PCB->Data, PCB_TYPE_LINE, Layer, Line); - if (Layer->On) { + if (Layer->meta.real.vis) { DrawLine(Layer, Line); pcb_draw(); } @@ -451,7 +451,7 @@ void *MoveLinePoint(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_line_t *Line, pcb_point_t *Point) { if (Layer) { - if (Layer->On) + if (Layer->meta.real.vis) EraseLine(Line); pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_LINE, Layer, Line); pcb_r_delete_entry(Layer->line_tree, &Line->BoundingBox); @@ -459,7 +459,7 @@ pcb_line_bbox(Line); pcb_r_insert_entry(Layer->line_tree, &Line->BoundingBox, 0); pcb_poly_clear_from_poly(PCB->Data, PCB_TYPE_LINE, Layer, Line); - if (Layer->On) { + if (Layer->meta.real.vis) { DrawLine(Layer, Line); pcb_draw(); } @@ -567,7 +567,7 @@ pcb_message(PCB_MSG_WARNING, _("Sorry, the object is locked\n")); return NULL; } - if (ctx->move.dst_layer == Layer && Layer->On) { + if (ctx->move.dst_layer == Layer && Layer->meta.real.vis) { DrawLine(Layer, Line); pcb_draw(); } @@ -575,13 +575,13 @@ return (Line); pcb_undo_add_obj_to_move_to_layer(PCB_TYPE_LINE, Layer, Line, Line); - if (Layer->On) + if (Layer->meta.real.vis) EraseLine(Line); pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_LINE, Layer, Line); newone = (pcb_line_t *) MoveLineToLayerLowLevel(ctx, Layer, Line, ctx->move.dst_layer); Line = NULL; pcb_poly_clear_from_poly(PCB->Data, PCB_TYPE_LINE, ctx->move.dst_layer, newone); - if (ctx->move.dst_layer->On) + if (ctx->move.dst_layer->meta.real.vis) DrawLine(ctx->move.dst_layer, newone); pcb_draw(); if (!PCB->ViaOn || ctx->move.more_to_come || @@ -676,7 +676,7 @@ void *RemoveLine_op(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_line_t *Line) { /* erase from screen */ - if (Layer->On) { + if (Layer->meta.real.vis) { EraseLine(Line); if (!ctx->remove.bulk) pcb_draw(); @@ -861,12 +861,12 @@ color = conf_core.appearance.color.warn; else if (PCB_FLAG_TEST(PCB_FLAG_SELECTED | PCB_FLAG_FOUND, line)) { if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, line)) - color = layer->SelectedColor; + color = layer->meta.real.selected_color; else color = conf_core.appearance.color.connected; } else - color = layer->Color; + color = layer->meta.real.color; if (PCB_FLAG_TEST(PCB_FLAG_ONPOINT, line)) { assert(color != NULL); Index: trunk/src/obj_line.h =================================================================== --- trunk/src/obj_line.h (revision 9098) +++ trunk/src/obj_line.h (revision 9099) @@ -123,7 +123,7 @@ pcb_layer_t *layer = (top)->Layer; \ for (l = 0; l < ((top)->LayerN > 0 ? (top)->LayerN : PCB->Data->LayerN); l++, layer++) \ { \ - if (layer->On) \ + if (layer->meta.real.vis) \ PCB_LINE_LOOP(layer) #endif Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 9098) +++ trunk/src/obj_poly.c (revision 9099) @@ -433,7 +433,7 @@ /* moves a polygon */ void *MovePolygon(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_polygon_t *Polygon) { - if (Layer->On) { + if (Layer->meta.real.vis) { ErasePolygon(Polygon); } pcb_r_delete_entry(Layer->polygon_tree, (pcb_box_t *) Polygon); @@ -440,7 +440,7 @@ pcb_poly_move(Polygon, ctx->move.dx, ctx->move.dy); pcb_r_insert_entry(Layer->polygon_tree, (pcb_box_t *) Polygon, 0); pcb_poly_init_clip(PCB->Data, Layer, Polygon); - if (Layer->On) { + if (Layer->meta.real.vis) { DrawPolygon(Layer, Polygon); pcb_draw(); } @@ -450,7 +450,7 @@ /* moves a polygon-point */ void *MovePolygonPoint(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_polygon_t *Polygon, pcb_point_t *Point) { - if (Layer->On) { + if (Layer->meta.real.vis) { ErasePolygon(Polygon); } pcb_r_delete_entry(Layer->polygon_tree, (pcb_box_t *) Polygon); @@ -459,7 +459,7 @@ pcb_r_insert_entry(Layer->polygon_tree, (pcb_box_t *) Polygon, 0); pcb_poly_remove_excess_points(Layer, Polygon); pcb_poly_init_clip(PCB->Data, Layer, Polygon); - if (Layer->On) { + if (Layer->meta.real.vis) { DrawPolygon(Layer, Polygon); pcb_draw(); } @@ -517,7 +517,7 @@ if (((long int) ctx->move.dst_layer == -1) || (Layer == ctx->move.dst_layer)) return (Polygon); pcb_undo_add_obj_to_move_to_layer(PCB_TYPE_POLYGON, Layer, Polygon, Polygon); - if (Layer->On) + if (Layer->meta.real.vis) ErasePolygon(Polygon); /* Move all of the thermals with the polygon */ d.snum = pcb_layer_id(PCB->Data, Layer); @@ -529,7 +529,7 @@ pcb_r_search(PCB->Data->via_tree, &Polygon->BoundingBox, NULL, mptl_pin_callback, &d, NULL); newone = (struct pcb_polygon_s *) MovePolygonToLayerLowLevel(ctx, Layer, Polygon, ctx->move.dst_layer); pcb_poly_init_clip(PCB->Data, ctx->move.dst_layer, newone); - if (ctx->move.dst_layer->On) { + if (ctx->move.dst_layer->meta.real.vis) { DrawPolygon(ctx->move.dst_layer, newone); pcb_draw(); } @@ -587,7 +587,7 @@ void *RemovePolygon_op(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_polygon_t *Polygon) { /* erase from screen */ - if (Layer->On) { + if (Layer->meta.real.vis) { ErasePolygon(Polygon); if (!ctx->remove.bulk) pcb_draw(); @@ -618,7 +618,7 @@ if (contour == 0) return pcb_poly_remove(Layer, Polygon); - if (Layer->On) { + if (Layer->meta.real.vis) { ErasePolygon(Polygon); if (!ctx->remove.bulk) pcb_draw(); @@ -643,7 +643,7 @@ pcb_poly_init_clip(PCB->Data, Layer, Polygon); /* redraw polygon if necessary */ - if (Layer->On) { + if (Layer->meta.real.vis) { DrawPolygon(Layer, Polygon); if (!ctx->remove.bulk) pcb_draw(); @@ -668,7 +668,7 @@ if (contour_points <= 3) return RemovePolygonContour(ctx, Layer, Polygon, contour); - if (Layer->On) + if (Layer->meta.real.vis) ErasePolygon(Polygon); /* insert the polygon-point into the undo list */ @@ -691,7 +691,7 @@ pcb_poly_init_clip(PCB->Data, Layer, Polygon); /* redraw polygon if necessary */ - if (Layer->On) { + if (Layer->meta.real.vis) { DrawPolygon(Layer, Polygon); if (!ctx->remove.bulk) pcb_draw(); @@ -730,7 +730,7 @@ if (PCB_FLAG_TEST(PCB_FLAG_WARN, polygon)) color = conf_core.appearance.color.warn; else if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, polygon)) - color = i->layer->SelectedColor; + color = i->layer->meta.real.selected_color; else if (PCB_FLAG_TEST(PCB_FLAG_FOUND, polygon)) color = conf_core.appearance.color.connected; else if (PCB_FLAG_TEST(PCB_FLAG_ONPOINT, polygon)) { @@ -739,7 +739,7 @@ color = buf; } else - color = i->layer->Color; + color = i->layer->meta.real.color; pcb_gui->set_color(Output.fgGC, color); if ((pcb_gui->thindraw_pcb_polygon != NULL) && (conf_core.editor.thin_draw || conf_core.editor.thin_draw_poly)) Index: trunk/src/obj_poly.h =================================================================== --- trunk/src/obj_poly.h (revision 9098) +++ trunk/src/obj_poly.h (revision 9099) @@ -114,7 +114,7 @@ pcb_layer_t *layer = (top)->Layer; \ for (l = 0; l < ((top)->LayerN > 0 ? (top)->LayerN : PCB->Data->LayerN); l++, layer++) \ { \ - if (layer->On) \ + if (layer->meta.real.vis) \ PCB_POLY_LOOP(layer) Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 9098) +++ trunk/src/obj_text.c (revision 9099) @@ -372,7 +372,7 @@ { pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_TEXT, Layer, Text); pcb_r_delete_entry(Layer->text_tree, (pcb_box_t *) Text); - if (Layer->On) { + if (Layer->meta.real.vis) { EraseText(Layer, Text); pcb_text_move(Text, ctx->move.dx, ctx->move.dy); DrawText(Layer, Text); @@ -420,12 +420,12 @@ } if (ctx->move.dst_layer != layer) { pcb_undo_add_obj_to_move_to_layer(PCB_TYPE_TEXT, layer, text, text); - if (layer->On) + if (layer->meta.real.vis) EraseText(layer, text); text = MoveTextToLayerLowLevel(ctx, layer, text, ctx->move.dst_layer); - if (ctx->move.dst_layer->On) + if (ctx->move.dst_layer->meta.real.vis) DrawText(ctx->move.dst_layer, text); - if (layer->On || ctx->move.dst_layer->On) + if (layer->meta.real.vis || ctx->move.dst_layer->meta.real.vis) pcb_draw(); } return text; @@ -446,7 +446,7 @@ void *RemoveText_op(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_text_t *Text) { /* erase from screen */ - if (Layer->On) { + if (Layer->meta.real.vis) { EraseText(Layer, Text); pcb_r_delete_entry(Layer->text_tree, (pcb_box_t *)Text); if (!ctx->remove.bulk) @@ -676,9 +676,9 @@ unsigned int flg = 0; if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, text)) - pcb_gui->set_color(Output.fgGC, layer->SelectedColor); + pcb_gui->set_color(Output.fgGC, layer->meta.real.selected_color); else - pcb_gui->set_color(Output.fgGC, layer->Color); + pcb_gui->set_color(Output.fgGC, layer->meta.real.color); if (layer->grp >= 0) flg = pcb_layergrp_flags(PCB, layer->grp); Index: trunk/src/obj_text.h =================================================================== --- trunk/src/obj_text.h (revision 9098) +++ trunk/src/obj_text.h (revision 9099) @@ -72,7 +72,7 @@ } while(0) /* Determines if text is actually visible */ -#define pcb_text_is_visible(b, l, t) ((l)->On) +#define pcb_text_is_visible(b, l, t) ((l)->meta.real.vis) #define PCB_TEXT_LOOP(layer) do { \ pcb_text_t *text; \ Index: trunk/src/object_act.c =================================================================== --- trunk/src/object_act.c (revision 9098) +++ trunk/src/object_act.c (revision 9099) @@ -128,7 +128,7 @@ int i; layer = NULL; for (i = 0; i < pcb_max_layer; i++) - if (strcmp(PCB->Data->Layer[i].Name, layername) == 0) { + if (strcmp(PCB->Data->Layer[i].meta.real.name, layername) == 0) { layer = &(PCB->Data->Layer[i]); break; } @@ -137,9 +137,9 @@ return 1; } } - buf = (char *) malloc(strlen(layer->Name) + strlen("Layer X Attributes")); - sprintf(buf, "Layer %s Attributes", layer->Name); - pcb_gui->edit_attributes(buf, &(layer->Attributes)); + buf = (char *) malloc(strlen(layer->meta.real.name) + strlen("Layer X Attributes")); + sprintf(buf, "Layer %s Attributes", layer->meta.real.name); + pcb_gui->edit_attributes(buf, &(layer->meta.real.Attributes)); free(buf); return 0; } Index: trunk/src/route.c =================================================================== --- trunk/src/route.c (revision 9098) +++ trunk/src/route.c (revision 9099) @@ -626,7 +626,7 @@ pcb_layer_t * layer = pcb_get_layer(p_obj->layer); if(layer) - pcb_gui->set_color(GC,layer->Color); + pcb_gui->set_color(GC,layer->meta.real.color); switch(p_obj->type) { case PCB_TYPE_LINE : Index: trunk/src/search.c =================================================================== --- trunk/src/search.c (revision 9098) +++ trunk/src/search.c (revision 9099) @@ -1104,7 +1104,7 @@ if (!PCB->InvisibleObjectsOn) continue; } - if (SearchLayer->On) { + if (SearchLayer->meta.real.vis) { if ((HigherAvail & (PCB_TYPE_PIN | PCB_TYPE_PAD)) == 0 && Type & PCB_TYPE_POLYGON_POINT && SearchPointByLocation(locked, (pcb_layer_t **) Result1, (pcb_polygon_t **) Result2, (pcb_point_t **) Result3)) Index: trunk/src/select.c =================================================================== --- trunk/src/select.c (revision 9098) +++ trunk/src/select.c (revision 9099) @@ -308,7 +308,7 @@ if (!(pcb->InvisibleObjectsOn || !Flag)) continue; } - else if (!(layer->On || !Flag)) + else if (!(layer->meta.real.vis || !Flag)) continue; PCB_LINE_LOOP(layer); @@ -317,7 +317,7 @@ && !PCB_FLAG_TEST(PCB_FLAG_LOCK, line) && PCB_FLAG_TEST(PCB_FLAG_SELECTED, line) != Flag) { append(PCB_TYPE_LINE, layer, line); - if (layer->On) + if (layer->meta.real.vis) DrawLine(layer, line); } } @@ -328,7 +328,7 @@ && !PCB_FLAG_TEST(PCB_FLAG_LOCK, arc) && PCB_FLAG_TEST(PCB_FLAG_SELECTED, arc) != Flag) { append(PCB_TYPE_ARC, layer, arc); - if (layer->On) + if (layer->meta.real.vis) DrawArc(layer, arc); } } @@ -352,7 +352,7 @@ && !PCB_FLAG_TEST(PCB_FLAG_LOCK, polygon) && PCB_FLAG_TEST(PCB_FLAG_SELECTED, polygon) != Flag) { append(PCB_TYPE_POLYGON, layer, polygon); - if (layer->On) + if (layer->meta.real.vis) DrawPolygon(layer, polygon); } } Index: trunk/src/undo.c =================================================================== --- trunk/src/undo.c (revision 9098) +++ trunk/src/undo.c (revision 9099) @@ -677,7 +677,7 @@ case PCB_TYPE_POLYGON: /* restore the removed point */ { /* recover the point */ - if (andDraw && layer->On) + if (andDraw && layer->meta.real.vis) ErasePolygon(polygon); pcb_insert_point_in_object(PCB_TYPE_POLYGON, layer, polygon, &Entry->Data.RemovedPoint.Index, @@ -685,7 +685,7 @@ Entry->Data.RemovedPoint.Y, pcb_true, Entry->Data.RemovedPoint.last_in_contour); polygon->Points[Entry->Data.RemovedPoint.Index].ID = Entry->Data.RemovedPoint.ID; - if (andDraw && layer->On) + if (andDraw && layer->meta.real.vis) DrawPolygon(layer, polygon); Entry->Type = PCB_UNDO_INSERT_POINT; Entry->ID = Entry->Data.RemovedPoint.ID; @@ -718,7 +718,7 @@ switch (type) { case PCB_TYPE_POLYGON_POINT: /* removes an inserted polygon point */ { - if (andDraw && layer->On) + if (andDraw && layer->meta.real.vis) ErasePolygon(polygon); /* Check whether this point was at the end of its contour. @@ -741,7 +741,7 @@ Entry->Type = PCB_UNDO_REMOVE_POINT; Entry->Data.RemovedPoint.Index = point_idx; pcb_destroy_object(PCB->Data, PCB_TYPE_POLYGON_POINT, layer, polygon, pnt); - if (andDraw && layer->On) + if (andDraw && layer->meta.real.vis) DrawPolygon(layer, polygon); return (pcb_true); } Index: trunk/src_plugins/autoroute/autoroute.c =================================================================== --- trunk/src_plugins/autoroute/autoroute.c (revision 9098) +++ trunk/src_plugins/autoroute/autoroute.c (revision 9099) @@ -862,7 +862,7 @@ 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 */ - if ((pcb_layer_flags(PCB, lid) & PCB_LYT_COPPER) && PCB->Data->Layer[lid].On) { + if ((pcb_layer_flags(PCB, lid) & PCB_LYT_COPPER) && PCB->Data->Layer[lid].meta.real.vis) { routing_layers++; is_layer_group_active[group] = pcb_true; break; @@ -4460,10 +4460,10 @@ assert(is_layer_group_active[p->group]); for (i = 0, layer = NULL; i < PCB->LayerGroups.grp[p->group].len; i++) { layer = LAYER_PTR(PCB->LayerGroups.grp[p->group].lid[i]); - if (layer->On) + if (layer->meta.real.vis) break; } - assert(layer && layer->On); /*at least one layer must be on in this group! */ + assert(layer && layer->meta.real.vis); /*at least one layer must be on in this group! */ assert(p->type != EXPANSION_AREA); if (p->type == LINE) { pcb_coord_t halfwidth = HALF_THICK(p->style->Thick); Index: trunk/src_plugins/diag/diag.c =================================================================== --- trunk/src_plugins/diag/diag.c (revision 9098) +++ trunk/src_plugins/diag/diag.c (revision 9099) @@ -168,7 +168,7 @@ printf("All %d bottom copper layers are:\n", used); for(n = 0; n < used; n++) { pcb_layer_id_t layer_id = arr[n]; - printf(" [%lx] %s \n", layer_id, PCB->Data->Layer[layer_id].Name); + printf(" [%lx] %s \n", layer_id, PCB->Data->Layer[layer_id].meta.real.name); } /* query by groups (physical layers): any copper in group */ @@ -179,7 +179,7 @@ printf(" group %ld (%d layers)\n", group_id, PCB->LayerGroups.grp[group_id].len); for(n = 0; n < PCB->LayerGroups.grp[group_id].len; n++) { pcb_layer_id_t layer_id = PCB->LayerGroups.grp[group_id].lid[n]; - printf(" [%lx] %s\n", layer_id, PCB->Data->Layer[layer_id].Name); + printf(" [%lx] %s\n", layer_id, PCB->Data->Layer[layer_id].meta.real.name); } } Index: trunk/src_plugins/diag/integrity.c =================================================================== --- trunk/src_plugins/diag/integrity.c (revision 9098) +++ trunk/src_plugins/diag/integrity.c (revision 9099) @@ -91,8 +91,8 @@ /* check layers */ if (data->Layer[n].parent != data) - pcb_message(PCB_MSG_ERROR, CHK "%s layer %ld/%s parent proken (%p != %p)\n", whose, n, data->Layer[n].Name, data->Layer[n].parent, data); - if (name_chk && ((data->Layer[n].Name == NULL) || (*data->Layer[n].Name == '\0'))) + pcb_message(PCB_MSG_ERROR, CHK "%s layer %ld/%s parent proken (%p != %p)\n", whose, n, data->Layer[n].meta.real.name, data->Layer[n].parent, data); + if (name_chk && ((data->Layer[n].meta.real.name == NULL) || (*data->Layer[n].meta.real.name == '\0'))) pcb_message(PCB_MSG_ERROR, CHK "%s layer %ld has invalid name\n", whose, n); /* check layer objects */ Index: trunk/src_plugins/draw_csect/draw_csect.c =================================================================== --- trunk/src_plugins/draw_csect/draw_csect.c (revision 9098) +++ trunk/src_plugins/draw_csect/draw_csect.c (revision 9099) @@ -461,7 +461,7 @@ if (lid == drag_lid) continue; - t = dtext_bg(gc, x, y, 200, 0, l->Name, COLOR_BG, l->Color); + t = dtext_bg(gc, x, y, 200, 0, l->meta.real.name, COLOR_BG, l->meta.real.color); pcb_text_bbox(pcb_font(PCB, 0, 1), t); if (l->comb & PCB_LYC_SUB) { dhrect(PCB_COORD_TO_MM(t->BoundingBox.X1), y, PCB_COORD_TO_MM(t->BoundingBox.X2)+1, y+4, 1.2, 0, 0, 0, OMIT_NONE); @@ -469,7 +469,7 @@ } if (redraw_text) - t = dtext_bg(gc, x, y, 200, 0, l->Name, COLOR_BG, l->Color); + t = dtext_bg(gc, x, y, 200, 0, l->meta.real.name, COLOR_BG, l->meta.real.color); else dhrect(PCB_COORD_TO_MM(t->BoundingBox.X1), y, PCB_COORD_TO_MM(t->BoundingBox.X2)+1, y+4, 0.25, 0, 0, 0, OMIT_NONE); @@ -524,7 +524,7 @@ } else if (drag_lid >= 0) { pcb_layer_t *l = &PCB->Data->Layer[drag_lid]; - draw_hover_label(l->Name); + draw_hover_label(l->meta.real.name); mark_grp(cy, PCB_LYT_COPPER | PCB_LYT_MASK | PCB_LYT_PASTE | PCB_LYT_SILK, MARK_GRP_FRAME); mark_layer_order(cx); } @@ -724,7 +724,7 @@ else if (check_layer_del(drag_lid) == 0) { g = &PCB->LayerGroups.grp[gactive]; pcb_layer_move_to_group(PCB, drag_lid, gactive); - pcb_message(PCB_MSG_INFO, "moved layer %s to group %d\n", l->Name, gactive); + pcb_message(PCB_MSG_INFO, "moved layer %s to group %d\n", l->meta.real.name, gactive); move_layer_to_its_place:; if (lactive_idx < g->len-1) { memmove(g->lid + lactive_idx + 1, g->lid + lactive_idx, (g->len - 1 - lactive_idx) * sizeof(pcb_layer_id_t)); @@ -802,7 +802,7 @@ for(i = 0; i < g->len; i++) { pcb_layer_id_t lid = g->lid[i]; pcb_layer_t *l = &PCB->Data->Layer[lid]; - printf(" [%ld] %s comb=", lid, l->Name); + printf(" [%ld] %s comb=", lid, l->meta.real.name); if (l->comb & PCB_LYC_SUB) printf(" sub"); if (l->comb & PCB_LYC_AUTO) printf(" auto"); printf("\n"); Index: trunk/src_plugins/export_bboard/bboard.c =================================================================== --- trunk/src_plugins/export_bboard/bboard.c (revision 9098) +++ trunk/src_plugins/export_bboard/bboard.c (revision 9099) @@ -197,7 +197,7 @@ char *clr; unsigned int r, g, b; - if ((clr = pcb_attribute_get(&(layer->Attributes), "BBoard::LayerColor")) != NULL) { + if ((clr = pcb_attribute_get(&(layer->meta.real.Attributes), "BBoard::LayerColor")) != NULL) { if (clr[0] == '#') { if (sscanf(&(clr[1]), "%02x%02x%02x", &r, &g, &b) == 3) goto ok; @@ -204,8 +204,8 @@ } } - if (layer->Color && (layer->Color[0] == '#')) { - if (sscanf(&(layer->Color[1]), "%02x%02x%02x", &r, &g, &b) == 3) + if (layer->meta.real.color && (layer->meta.real.color[0] == '#')) { + if (sscanf(&(layer->meta.real.color[1]), "%02x%02x%02x", &r, &g, &b) == 3) goto ok; } Index: trunk/src_plugins/export_dsn/dsn.c =================================================================== --- trunk/src_plugins/export_dsn/dsn.c (revision 9098) +++ trunk/src_plugins/export_dsn/dsn.c (revision 9099) @@ -160,7 +160,7 @@ g_list_free(layerlist); /* might be around from the last export */ - if (PCB->Data->Layer[top_layer].On) { + if (PCB->Data->Layer[top_layer].meta.real.vis) { layerlist = g_list_append(layerlist, &PCB->Data->Layer[top_layer]); } else { @@ -182,7 +182,7 @@ continue; first_layer = &PCB->Data->Layer[PCB->LayerGroups.grp[group].lid[0]]; - if (!first_layer->On) + if (!first_layer->meta.real.vis) continue; layerlist = g_list_append(layerlist, first_layer); @@ -189,12 +189,12 @@ if (group < top_group) { pcb_message(PCB_MSG_WARNING, "WARNING! DSN export moved layer group with the \"%s\" layer " - "after the top layer group. DSN files must have the top " "layer first.\n", first_layer->Name); + "after the top layer group. DSN files must have the top " "layer first.\n", first_layer->meta.real.name); } if (group > bot_group) { pcb_message(PCB_MSG_WARNING, "WARNING! DSN export moved layer group with the \"%s\" layer " - "before the bottom layer group. DSN files must have the " "bottom layer last.\n", first_layer->Name); + "before the bottom layer group. DSN files must have the " "bottom layer last.\n", first_layer->meta.real.name); } PCB_COPPER_GROUP_LOOP(PCB->Data, group); @@ -201,13 +201,13 @@ { if (entry > 0) { pcb_message(PCB_MSG_WARNING, "WARNING! DSN export squashed layer \"%s\" into layer " - "\"%s\", DSN files do not have layer groups.", layer->Name, first_layer->Name); + "\"%s\", DSN files do not have layer groups.", layer->meta.real.name, first_layer->meta.real.name); } } PCB_END_LOOP; } - if (PCB->Data->Layer[bot_layer].On) { + if (PCB->Data->Layer[bot_layer].meta.real.vis) { layerlist = g_list_append(layerlist, &PCB->Data->Layer[bot_layer]); } else { @@ -229,12 +229,12 @@ for (int ni = 0; ni < PCB->NetlistLib[PCB_NETLIST_EDITED].MenuN; ni++) { char *nname; nname = PCB->NetlistLib[PCB_NETLIST_EDITED].Menu[ni].Name + 2; - if (!strcmp(layer->Name, nname)) { + if (!strcmp(layer->meta.real.name, nname)) { g_free(layeropts); - layeropts = pcb_strdup_printf("(type power) (use_net \"%s\")", layer->Name); + layeropts = pcb_strdup_printf("(type power) (use_net \"%s\")", layer->meta.real.name); } } - fprintf(fp, " (layer \"%s\"\n", layer->Name); + fprintf(fp, " (layer \"%s\"\n", layer->meta.real.name); fprintf(fp, " %s\n", layeropts); fprintf(fp, " )\n"); g_free(layeropts); @@ -316,7 +316,7 @@ if (!pin->Number) { /* if pin is null just make it a keepout */ for (GList * iter = layerlist; iter; iter = g_list_next(iter)) { pcb_layer_t *lay = iter->data; - pcb_fprintf(fp, " (keepout \"\" (circle \"%s\" %.6mm %.6mm %.6mm))\n", lay->Name, pinthickness, lx, ly); + pcb_fprintf(fp, " (keepout \"\" (circle \"%s\" %.6mm %.6mm %.6mm))\n", lay->meta.real.name, pinthickness, lx, ly); } } else { @@ -357,7 +357,7 @@ pcb_layer_t *lay; lay = g_list_nth_data(layerlist, partside); pcb_fprintf(fp, " (keepout \"\" (rect \"%s\" %.6mm %.6mm %.6mm %.6mm))\n", - lay->Name, lx - xlen / 2, ly - ylen / 2, lx + xlen / 2, ly + ylen / 2); + lay->meta.real.name, lx - xlen / 2, ly - ylen / 2, lx + xlen / 2, ly + ylen / 2); } else { pcb_fprintf(fp, " (pin %s \"%s\" %.6mm %.6mm)\n", padstack, pad->Number, lx, ly); @@ -399,7 +399,7 @@ dim2 = dim2l; pcb_fprintf(fp, " (shape (rect \"%s\" %.6mm %.6mm %.6mm %.6mm))\n", - ((pcb_layer_t *) (g_list_first(layerlist)->data))->Name, dim1 / -2, dim2 / -2, dim1 / 2, dim2 / 2); + ((pcb_layer_t *) (g_list_first(layerlist)->data))->meta.real.name, dim1 / -2, dim2 / -2, dim1 / 2, dim2 / 2); } else if (sscanf(padstack, "Th_square_%ld", &dim1l) == 1) { dim1 = dim1l; @@ -476,7 +476,7 @@ { pcb_fprintf(fp, " (wire (path %s %.6mm %.6mm %.6mm %.6mm %.6mm)\n", - lay->Name, line->Thickness, line->Point1.X, + lay->meta.real.name, line->Thickness, line->Point1.X, (PCB->MaxHeight - line->Point1.Y), line->Point2.X, (PCB->MaxHeight - line->Point2.Y)); fprintf(fp, " (type protect))\n"); } Index: trunk/src_plugins/export_fidocadj/fidocadj.c =================================================================== --- trunk/src_plugins/export_fidocadj/fidocadj.c (revision 9098) +++ trunk/src_plugins/export_fidocadj/fidocadj.c (revision 9099) @@ -198,7 +198,7 @@ for(lid = 0; lid < pcb_max_layer; lid++) { pcb_layer_t *ly = PCB->Data->Layer+lid; unsigned int lflg = pcb_layer_flags(PCB, lid); - int fidoly = layer_map(lflg, &fidoly_next, &layer_warned, ly->Name); + int fidoly = layer_map(lflg, &fidoly_next, &layer_warned, ly->meta.real.name); if (fidoly < 0) continue; Index: trunk/src_plugins/export_ps/eps.c =================================================================== --- trunk/src_plugins/export_ps/eps.c (revision 9098) +++ trunk/src_plugins/export_ps/eps.c (revision 9099) @@ -210,7 +210,7 @@ pcb_layer_t *layer = PCB->Data->Layer + i; if (pcb_layer_flags(PCB, i) & PCB_LYT_SILK) continue; - if (layer->On) + if (layer->meta.real.vis) if (!pcb_layer_is_empty_(PCB, layer)) print_group[pcb_layer_get_group(PCB, i)] = 1; } Index: trunk/src_plugins/export_stat/stat.c =================================================================== --- trunk/src_plugins/export_stat/stat.c (revision 9098) +++ trunk/src_plugins/export_stat/stat.c (revision 9099) @@ -178,7 +178,7 @@ lgs = lgss + lgid; fprintf(f, " ha:layer_%d {\n", lid); - fprintf(f, " name={%s}\n", l->Name); + fprintf(f, " name={%s}\n", l->meta.real.name); fprintf(f, " empty=%s\n", empty ? "yes" : "no"); fprintf(f, " flags=%x\n", lflg); fprintf(f, " grp=%ld\n", lgid); Index: trunk/src_plugins/hid_batch/batch.c =================================================================== --- trunk/src_plugins/hid_batch/batch.c (revision 9098) +++ trunk/src_plugins/hid_batch/batch.c (revision 9099) @@ -87,7 +87,7 @@ unsigned int gflg = pcb_layergrp_flags(PCB, lg); for (j = 0; j < PCB_MAX_LAYER; j++) putchar(j == lg ? '#' : '-'); - printf(" %c %s\n", (gflg & PCB_LYT_TOP) ? 'c' : (gflg & PCB_LYT_BOTTOM) ? 's' : '-', PCB->Data->Layer[i].Name); + printf(" %c %s\n", (gflg & PCB_LYT_TOP) ? 'c' : (gflg & PCB_LYT_BOTTOM) ? 's' : '-', PCB->Data->Layer[i].meta.real.name); } return 0; } Index: trunk/src_plugins/hid_gtk2_gdk/gtkhid-gdk.c =================================================================== --- trunk/src_plugins/hid_gtk2_gdk/gtkhid-gdk.c (revision 9098) +++ trunk/src_plugins/hid_gtk2_gdk/gtkhid-gdk.c (revision 9099) @@ -97,7 +97,7 @@ int n = PCB->LayerGroups.grp[group].len; for (idx = 0; idx < n - 1; idx++) { int ni = PCB->LayerGroups.grp[group].lid[idx]; - if (ni >= 0 && ni < pcb_max_layer && PCB->Data->Layer[ni].On) + if (ni >= 0 && ni < pcb_max_layer && PCB->Data->Layer[ni].meta.real.vis) break; } idx = PCB->LayerGroups.grp[group].lid[idx]; @@ -111,7 +111,7 @@ } if (idx >= 0 && idx < pcb_max_layer && ((flags & PCB_LYT_ANYTHING) != PCB_LYT_SILK)) - return /*pinout ? 1 : */ PCB->Data->Layer[idx].On; + return /*pinout ? 1 : */ PCB->Data->Layer[idx].meta.real.vis; /* virtual layers */ { Index: trunk/src_plugins/hid_lesstif/main.c =================================================================== --- trunk/src_plugins/hid_lesstif/main.c (revision 9098) +++ trunk/src_plugins/hid_lesstif/main.c (revision 9099) @@ -568,7 +568,7 @@ l = PCB->LayerGroups.grp[g].lid[i]; if (l >= 0 && l < pcb_max_layer && (!(pcb_layer_flags(PCB, l) & PCB_LYT_SILK))) { *c = l; - if (PCB->Data->Layer[l].On) + if (PCB->Data->Layer[l].meta.real.vis) return 1; } } @@ -2737,7 +2737,7 @@ int n = PCB->LayerGroups.grp[group].len; for (idx = 0; idx < n - 1; idx++) { int ni = PCB->LayerGroups.grp[group].lid[idx]; - if (ni >= 0 && ni < pcb_max_layer && PCB->Data->Layer[ni].On) + if (ni >= 0 && ni < pcb_max_layer && PCB->Data->Layer[ni].meta.real.vis) break; } idx = PCB->LayerGroups.grp[group].lid[idx]; @@ -2767,7 +2767,7 @@ /* normal layers */ if (flags & PCB_LYT_COPPER) - return pinout ? 1 : PCB->Data->Layer[idx].On; + return pinout ? 1 : PCB->Data->Layer[idx].meta.real.vis; /* virtual layers */ { Index: trunk/src_plugins/hid_lesstif/menu.c =================================================================== --- trunk/src_plugins/hid_lesstif/menu.c (revision 9098) +++ trunk/src_plugins/hid_lesstif/menu.c (revision 9099) @@ -92,7 +92,7 @@ if (PCB && PCB->Data) { pcb_data_t *d = PCB->Data; for (i = 0; i < PCB_MAX_LAYER; i++) - fg_colors[i] = lesstif_parse_color(d->Layer[i].Color); + fg_colors[i] = lesstif_parse_color(d->Layer[i].meta.real.color); fg_colors[LB_SILK] = lesstif_parse_color(conf_core.appearance.color.element); fg_colors[LB_RATS] = lesstif_parse_color(conf_core.appearance.color.rat); fg_colors[LB_PINS] = lesstif_parse_color(conf_core.appearance.color.pin); @@ -146,13 +146,13 @@ set = pcb_paste_on(PCB); break; default: /* layers */ - set = PCB->Data->Layer[i].On; + set = PCB->Data->Layer[i].meta.real.vis; break; } stdarg_n = 0; - if (i < PCB_MAX_LAYER && PCB->Data->Layer[i].Name) { - XmString s = XmStringCreatePCB(PCB->Data->Layer[i].Name); + if (i < PCB_MAX_LAYER && PCB->Data->Layer[i].meta.real.name) { + XmString s = XmStringCreatePCB(PCB->Data->Layer[i].meta.real.name); stdarg(XmNlabelString, s); } if (!lb->is_pick) { @@ -188,7 +188,7 @@ name = "Silk"; break; default: - name = PCB->Data->Layer[current_layer].Name; + name = PCB->Data->Layer[current_layer].meta.real.name; break; } stdarg_n = 0; @@ -231,8 +231,8 @@ switch (layer) { case LB_SILK: set = !pcb_silk_on(PCB); - PCB->Data->SILKLAYER.On = set; - PCB->Data->BACKSILKLAYER.On = set; + PCB->Data->SILKLAYER.meta.real.vis = set; + PCB->Data->BACKSILKLAYER.meta.real.vis = set; break; case LB_RATS: set = PCB->RatOn = !PCB->RatOn; @@ -257,7 +257,7 @@ set = pcb_paste_on(PCB); break; default: /* layers */ - set = PCB->Data->Layer[layer].On = !PCB->Data->Layer[layer].On; + set = PCB->Data->Layer[layer].meta.real.vis = !PCB->Data->Layer[layer].meta.real.vis; break; } @@ -269,7 +269,7 @@ l = PCB->LayerGroups.grp[group].lid[i]; if (l != layer && (!(pcb_layer_flags(PCB, l) & PCB_LYT_SILK))) { show_one_layer_button(l, set); - PCB->Data->Layer[l].On = set; + PCB->Data->Layer[l].meta.real.vis = set; } } } @@ -298,7 +298,7 @@ name = "Silk"; break; default: - name = PCB->Data->Layer[layer].Name; + name = PCB->Data->Layer[layer].meta.real.name; break; } stdarg_n = 0; Index: trunk/src_plugins/io_kicad/write.c =================================================================== --- trunk/src_plugins/io_kicad/write.c (revision 9098) +++ trunk/src_plugins/io_kicad/write.c (revision 9099) @@ -553,10 +553,10 @@ pcb_cardinal_t currentLayer = number; /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { /* fprintf(FP, "Layer(%i ", (int) Number + 1); - pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->Name)); + pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->meta.real.name)); fputs(")\n(\n", FP); WriteAttributeList(FP, &layer->Attributes, "\t"); */ @@ -595,10 +595,10 @@ int copperStartY; /* used for mapping geda copper arcs onto kicad copper lines */ /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { /* fprintf(FP, "Layer(%i ", (int) Number + 1); - pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->Name)); + pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->meta.real.name)); fputs(")\n(\n", FP); WriteAttributeList(FP, &layer->Attributes, "\t"); */ @@ -676,10 +676,10 @@ pcb_cardinal_t currentLayer = number; /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { /* fprintf(FP, "Layer(%i ", (int) Number + 1); - pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->Name)); + pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->meta.real.name)); fputs(")\n(\n", FP); WriteAttributeList(FP, &layer->Attributes, "\t"); */ @@ -1055,7 +1055,7 @@ pcb_cardinal_t currentLayer = number; /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { int localFlag = 0; polylist_foreach(&layer->Polygon, &it, polygon) { if (polygon->HoleIndexN == 0) { /* no holes defined within polygon, which we implement support for first */ Index: trunk/src_plugins/io_kicad_legacy/write.c =================================================================== --- trunk/src_plugins/io_kicad_legacy/write.c (revision 9098) +++ trunk/src_plugins/io_kicad_legacy/write.c (revision 9099) @@ -561,10 +561,10 @@ pcb_cardinal_t currentLayer = number; /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { /* fprintf(FP, "Layer(%i ", (int) Number + 1); - pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->Name)); + pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->meta.real.name)); fputs(")\n(\n", FP); WriteAttributeList(FP, &layer->Attributes, "\t"); */ @@ -605,10 +605,10 @@ int copperStartY; /* used for mapping geda copper arcs onto kicad copper lines */ /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { /* fprintf(FP, "Layer(%i ", (int) Number + 1); - pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->Name)); + pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->meta.real.name)); fputs(")\n(\n", FP); WriteAttributeList(FP, &layer->Attributes, "\t"); */ @@ -683,10 +683,10 @@ pcb_cardinal_t currentLayer = number; /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { /* fprintf(FP, "Layer(%i ", (int) Number + 1); - pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->Name)); + pcb_print_quoted_string(FP, (char *) PCB_EMPTY(layer->meta.real.name)); fputs(")\n(\n", FP); WriteAttributeList(FP, &layer->Attributes, "\t"); */ @@ -1213,7 +1213,7 @@ pcb_cardinal_t currentLayer = number; /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { int localFlag = 0; polylist_foreach(&layer->Polygon, &it, polygon) { if (polygon->HoleIndexN == 0) { /* no holes defined within polygon, which we implement support for first */ Index: trunk/src_plugins/io_lihata/read.c =================================================================== --- trunk/src_plugins/io_lihata/read.c (revision 9098) +++ trunk/src_plugins/io_lihata/read.c (revision 9099) @@ -554,15 +554,15 @@ if (layer_id >= dt->LayerN) dt->LayerN = layer_id+1; - ly->Name = pcb_strdup(grp->name); + ly->meta.real.name = pcb_strdup(grp->name); ly->parent = dt; - parse_bool(&ly->On, lht_dom_hash_get(grp, "visible")); + parse_bool(&ly->meta.real.vis, lht_dom_hash_get(grp, "visible")); if (pcb != NULL) { int grp_id; parse_int(&grp_id, lht_dom_hash_get(grp, "group")); dt->Layer[layer_id].grp = grp_id; -/* pcb_trace("parse_data_layer name: %d,%d '%s' grp=%d\n", layer_id, dt->LayerN-1, ly->Name, grp_id);*/ +/* pcb_trace("parse_data_layer name: %d,%d '%s' grp=%d\n", layer_id, dt->LayerN-1, ly->meta.real.name, grp_id);*/ } ncmb = lht_dom_hash_get(grp, "combining"); @@ -771,7 +771,7 @@ for(n = 0; n < pcb->Data->LayerN - 2; n++) { pcb_layer_t *l = &pcb->Data->Layer[n]; pcb_layergrp_id_t grp = l->grp; - /*pcb_trace("********* l=%d %s g=%ld (top=%ld bottom=%ld)\n", n, l->Name, grp, top_silk, bottom_silk);*/ + /*pcb_trace("********* l=%d %s g=%ld (top=%ld bottom=%ld)\n", n, l->meta.real.name, grp, top_silk, bottom_silk);*/ l->grp = -1; if (grp == bottom_silk) @@ -783,11 +783,11 @@ /* pcb_trace(" add %ld\n", g - pcb->LayerGroups.grp);*/ if (g != NULL) { pcb_layer_add_in_group_(pcb, g, g - pcb->LayerGroups.grp, n); - if (strcmp(l->Name, "outline") == 0) + if (strcmp(l->meta.real.name, "outline") == 0) pcb_layergrp_fix_turn_to_outline(g); } else - pcb_message(PCB_MSG_ERROR, "failed to create layer %s\n", l->Name); + pcb_message(PCB_MSG_ERROR, "failed to create layer %s\n", l->meta.real.name); } pcb_layergrp_fix_old_outline(pcb); Index: trunk/src_plugins/io_lihata/write.c =================================================================== --- trunk/src_plugins/io_lihata/write.c (revision 9098) +++ trunk/src_plugins/io_lihata/write.c (revision 9099) @@ -176,7 +176,7 @@ int t = PCB_FLAG_THERM_GET(layer, &fh); if (t != 0) { const char *name; - txt = lht_dom_node_alloc(LHT_TEXT, PCB->Data->Layer[layer].Name); + txt = lht_dom_node_alloc(LHT_TEXT, PCB->Data->Layer[layer].meta.real.name); name = io_lihata_thermal_style(t); if (name != NULL) txt->data.text.value = pcb_strdup(name); @@ -504,10 +504,10 @@ pcb_text_t *tx; int added = 0; - obj = lht_dom_node_alloc(LHT_HASH, layer->Name); + obj = lht_dom_node_alloc(LHT_HASH, layer->meta.real.name); - lht_dom_hash_put(obj, build_text("visible", layer->On ? "1" : "0")); - lht_dom_hash_put(obj, build_attributes(&layer->Attributes)); + lht_dom_hash_put(obj, build_text("visible", layer->meta.real.vis ? "1" : "0")); + lht_dom_hash_put(obj, build_attributes(&layer->meta.real.Attributes)); lht_dom_hash_put(obj, build_textf("group", "%ld", layer_group)); if (wrver >= 2) { lht_dom_hash_put(obj, build_textf("lid", "%ld", lid)); Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 9098) +++ trunk/src_plugins/io_pcb/file.c (revision 9099) @@ -508,11 +508,11 @@ pcb_polygon_t *polygon; /* write information about non empty layers */ - if (!pcb_layer_is_empty_(PCB, layer) || (layer->Name && *layer->Name)) { + if (!pcb_layer_is_empty_(PCB, layer) || (layer->meta.real.name && *layer->meta.real.name)) { fprintf(FP, "Layer(%i ", (int) Number + 1); - pcb_print_quoted_string(FP, layer_name_hack(layer, PCB_EMPTY(layer->Name))); + pcb_print_quoted_string(FP, layer_name_hack(layer, PCB_EMPTY(layer->meta.real.name))); fputs(")\n(\n", FP); - WriteAttributeList(FP, &layer->Attributes, "\t"); + WriteAttributeList(FP, &layer->meta.real.Attributes, "\t"); linelist_foreach(&layer->Line, &it, line) { pcb_fprintf(FP, "\tLine[%[0] %[0] %[0] %[0] %[0] %[0] %s]\n", @@ -711,7 +711,7 @@ if (pcb->Data->LayerN >= PCB_MAX_LAYER) return -1; lid = pcb->Data->LayerN; - pcb->Data->Layer[lid].Name = pcb_strdup(name); + pcb->Data->Layer[lid].meta.real.name = pcb_strdup(name); pcb->Data->Layer[lid].parent = pcb->Data; pcb->Data->LayerN++; return lid; @@ -722,8 +722,8 @@ pcb_layer_id_t lid; for(lid = 0; lid < PCB_MAX_LAYER; lid++) { if (pcb->Data->Layer[lid].grp == 0) { - free((char *)pcb->Data->Layer[lid].Name); - pcb->Data->Layer[lid].Name = pcb_strdup(name); + free((char *)pcb->Data->Layer[lid].meta.real.name); + pcb->Data->Layer[lid].meta.real.name = pcb_strdup(name); return lid; } } @@ -738,7 +738,7 @@ pcb_layer_group_setup_default(&pcb->LayerGroups); for(lid = 0; lid < pcb->Data->LayerN; lid++) { - if (strcmp(pcb->Data->Layer[lid].Name, "silk") == 0) { + if (strcmp(pcb->Data->Layer[lid].meta.real.name, "silk") == 0) { if (silk < 0) pcb_layergrp_list(PCB, PCB_LYT_BOTTOM | PCB_LYT_SILK, &gid, 1); else @@ -747,9 +747,9 @@ silk = lid; } else { - if (*pcb->Data->Layer[lid].Name == '\0') { - free((char *)pcb->Data->Layer[lid].Name); - pcb->Data->Layer[lid].Name = pcb_strdup("anonymous"); + if (*pcb->Data->Layer[lid].meta.real.name == '\0') { + free((char *)pcb->Data->Layer[lid].meta.real.name); + pcb->Data->Layer[lid].meta.real.name = pcb_strdup("anonymous"); } if (lid == 0) pcb_layergrp_list(PCB, PCB_LYT_TOP | PCB_LYT_COPPER, &gid, 1); Index: trunk/src_plugins/io_pcb/parse_y.c =================================================================== --- trunk/src_plugins/io_pcb/parse_y.c (revision 9098) +++ trunk/src_plugins/io_pcb/parse_y.c (revision 9099) @@ -2237,9 +2237,9 @@ Layer->parent = yyData; /* memory for name is already allocated */ - if (Layer->Name != NULL) - free((char*)Layer->Name); - Layer->Name = (yyvsp[-3].string); /* shouldn't this be strdup()'ed ? */ + if (Layer->meta.real.name != NULL) + free((char*)Layer->meta.real.name); + Layer->meta.real.name = (yyvsp[-3].string); /* shouldn't this be strdup()'ed ? */ LayerFlag[(yyvsp[-4].integer)-1] = pcb_true; if (yyData->LayerN < (yyvsp[-4].integer)) yyData->LayerN = (yyvsp[-4].integer); @@ -2260,7 +2260,7 @@ case 89: #line 931 "parse_y.y" /* yacc.c:1646 */ - { attr_list = & Layer->Attributes; } + { attr_list = & Layer->meta.real.Attributes; } #line 2265 "parse_y.c" /* yacc.c:1646 */ break; Index: trunk/src_plugins/io_pcb/parse_y.y =================================================================== --- trunk/src_plugins/io_pcb/parse_y.y (revision 9098) +++ trunk/src_plugins/io_pcb/parse_y.y (revision 9099) @@ -890,9 +890,9 @@ Layer->parent = yyData; /* memory for name is already allocated */ - if (Layer->Name != NULL) - free((char*)Layer->Name); - Layer->Name = $4; /* shouldn't this be strdup()'ed ? */ + if (Layer->meta.real.name != NULL) + free((char*)Layer->meta.real.name); + Layer->meta.real.name = $4; /* shouldn't this be strdup()'ed ? */ LayerFlag[$3-1] = pcb_true; if (yyData->LayerN < $3) yyData->LayerN = $3; @@ -928,7 +928,7 @@ | text_hi_format | text_newformat | text_oldformat - | { attr_list = & Layer->Attributes; } attribute + | { attr_list = & Layer->meta.real.Attributes; } attribute | polygon_format /* %start-doc pcbfile Line Index: trunk/src_plugins/lib_gtk_common/dlg_propedit.c =================================================================== --- trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 9098) +++ trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 9099) @@ -309,9 +309,9 @@ preview_pcb.ViaOn = 1; for (n = 0; n < pcb_max_layer; n++) { - preview_pcb.Data->Layer[n].On = 1; - preview_pcb.Data->Layer[n].Color = pcb_strdup(PCB->Data->Layer[n].Color); - preview_pcb.Data->Layer[n].Name = pcb_strdup("preview dummy"); + preview_pcb.Data->Layer[n].meta.real.vis = 1; + preview_pcb.Data->Layer[n].meta.real.color = pcb_strdup(PCB->Data->Layer[n].meta.real.color); + preview_pcb.Data->Layer[n].meta.real.name = pcb_strdup("preview dummy"); } Index: trunk/src_plugins/lib_gtk_common/ui_zoompan.c =================================================================== --- trunk/src_plugins/lib_gtk_common/ui_zoompan.c (revision 9098) +++ trunk/src_plugins/lib_gtk_common/ui_zoompan.c (revision 9099) @@ -356,10 +356,10 @@ pcb_bool comp_on = pcb_false, solder_on = pcb_false; if (pcb_layergrp_list(PCB, PCB_LYT_BOTTOM | PCB_LYT_COPPER, &solder_group, 1) > 0) - solder_on = LAYER_PTR(PCB->LayerGroups.grp[solder_group].lid[0])->On; + solder_on = LAYER_PTR(PCB->LayerGroups.grp[solder_group].lid[0])->meta.real.vis; if (pcb_layergrp_list(PCB, PCB_LYT_TOP | PCB_LYT_COPPER, &comp_group, 1) > 0) - comp_on = LAYER_PTR(PCB->LayerGroups.grp[comp_group].lid[0])->On; + comp_on = LAYER_PTR(PCB->LayerGroups.grp[comp_group].lid[0])->meta.real.vis; pcb_draw_inhibit_inc(); if (argc > 0) { Index: trunk/src_plugins/lib_gtk_common/wt_layersel.c =================================================================== --- trunk/src_plugins/lib_gtk_common/wt_layersel.c (revision 9098) +++ trunk/src_plugins/lib_gtk_common/wt_layersel.c (revision 9099) @@ -108,7 +108,7 @@ if (lsl->ev_vis == NULL) { pcb_layer_t *l = pcb_get_layer(lsl->lid); if (l != NULL) - is_on = l->On; + is_on = l->meta.real.vis; } else lsl->ev_vis(lsl, 0, &is_on); @@ -169,7 +169,7 @@ pcb_layergrp_id_t gid; pcb_layer_t *l; - if (CURRENT->On) + if (CURRENT->meta.real.vis) return; /* look for the next one to enable, group-vise */ @@ -181,7 +181,7 @@ if (g->len < 1) continue; l = PCB->Data->Layer + g->lid[0]; - if (l->On) + if (l->meta.real.vis) goto change_selection; } @@ -210,8 +210,8 @@ { pcb_layer_t *l = &pcb_uilayer.array[lsl->virt_data]; if (toggle) - l->On = !l->On; - *is_on = l->On; + l->meta.real.vis = !l->meta.real.vis; + *is_on = l->meta.real.vis; return 0; } @@ -299,7 +299,7 @@ else { pcb_layer_t *l = pcb_get_layer(lsl->lid); if (l != NULL) - is_on = !l->On; + is_on = !l->meta.real.vis; else normal = 0; } @@ -535,7 +535,7 @@ for(n = 0; n < grp->len; n++) { pcb_layer_t *l = pcb_get_layer(grp->lid[n]); if (l != NULL) { - GtkWidget *wl = build_layer(lsg, &lsg->layer[n], l->Name, grp->lid[n], NULL); + GtkWidget *wl = build_layer(lsg, &lsg->layer[n], l->meta.real.name, grp->lid[n], NULL); gtk_box_pack_start(GTK_BOX(lsg->layers), wl, TRUE, TRUE, 1); lsg->layer[n].lid = grp->lid[n]; } @@ -604,7 +604,7 @@ gtk_box_pack_start(GTK_BOX(ls->grp_box), build_group_start(ls, lsg, "UI", 0, &ls->grp_ui), FALSE, FALSE, 0); for(n = 0; n < vtlayer_len(&pcb_uilayer); n++) { - gtk_box_pack_start(GTK_BOX(lsg->layers), build_layer(lsg, &lsg->layer[n], pcb_uilayer.array[n].Name, -1, &pcb_uilayer.array[n].Color), FALSE, FALSE, 1); + gtk_box_pack_start(GTK_BOX(lsg->layers), build_layer(lsg, &lsg->layer[n], pcb_uilayer.array[n].meta.real.name, -1, &pcb_uilayer.array[n].meta.real.color), FALSE, FALSE, 1); lsg->layer[n].ev_selected = ev_lyr_no_select; lsg->layer[n].ev_vis = vis_ui; lsg->layer[n].virt_data = n; Index: trunk/src_plugins/lib_gtk_config/gui-config.c =================================================================== --- trunk/src_plugins/lib_gtk_config/gui-config.c (revision 9098) +++ trunk/src_plugins/lib_gtk_config/gui-config.c (revision 9099) @@ -1346,9 +1346,9 @@ sprintf(lnp, "design/default_layer_name[%d]", n); nd = conf_lht_get_at(ctx->dst_role, lnp, 1); layer = &PCB->Data->Layer[n]; - if (strcmp(layer->Name, nd->data.text.value) != 0) { + if (strcmp(layer->meta.real.name, nd->data.text.value) != 0) { free(nd->data.text.value); - nd->data.text.value = pcb_strdup(layer->Name); + nd->data.text.value = pcb_strdup(layer->meta.real.name); conf_makedirty(ctx->dst_role); } } Index: trunk/src_plugins/lib_hid_common/layer_menu.c =================================================================== --- trunk/src_plugins/lib_hid_common/layer_menu.c (revision 9098) +++ trunk/src_plugins/lib_hid_common/layer_menu.c (revision 9099) @@ -57,7 +57,7 @@ for(n = 0; n < g->len; n++) { pcb_layer_t *l = pcb_get_layer(g->lid[n]); - pcb_snprintf(bn, len_avail, " %s", l->Name); + pcb_snprintf(bn, len_avail, " %s", l->meta.real.name); pcb_gui->create_menu(path, "TODO: action", "", "accel", "Layer", cookie); } } Index: trunk/src_plugins/query/query_access.c =================================================================== --- trunk/src_plugins/query/query_access.c (revision 9098) +++ trunk/src_plugins/query/query_access.c (revision 9099) @@ -232,7 +232,7 @@ if (fh1 == query_fields_a) { const char *s2; fld2str_req(s2, fld, 1); - PCB_QRY_RET_STR(res, pcb_attribute_get(&l->Attributes, s2)); + PCB_QRY_RET_STR(res, pcb_attribute_get(&l->meta.real.Attributes, s2)); } if (fld->next != NULL) @@ -239,8 +239,8 @@ PCB_QRY_RET_INV(res); switch(fh1) { - case query_fields_name: PCB_QRY_RET_STR(res, l->Name); - case query_fields_visible: PCB_QRY_RET_INT(res, l->On); + case query_fields_name: PCB_QRY_RET_STR(res, l->meta.real.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, pcb_layer_id(PCB->Data, l)) & PCB_LYT_ANYWHERE); case query_fields_type: PCB_QRY_RET_INT(res, pcb_layer_flags(PCB, pcb_layer_id(PCB->Data, l)) & PCB_LYT_ANYTHING); default:; Index: trunk/src_plugins/rubberband_orig/rubberband.c =================================================================== --- trunk/src_plugins/rubberband_orig/rubberband.c (revision 9098) +++ trunk/src_plugins/rubberband_orig/rubberband.c (revision 9099) @@ -255,7 +255,7 @@ { /* check all visible lines of the group member */ info.layer = layer; - if (info.layer->On) { + if (info.layer->meta.real.vis) { pcb_r_search(info.layer->line_tree, &info.box, NULL, rubber_callback, &info, NULL); } } @@ -416,7 +416,7 @@ PCB_COPPER_GROUP_LOOP(PCB->Data, group); { /* check all visible lines of the group member */ - if (layer->On) { + if (layer->meta.real.vis) { info.layer = layer; pcb_r_search(layer->line_tree, &info.box, NULL, rubber_callback, &info, NULL); } @@ -452,7 +452,7 @@ PCB_COPPER_GROUP_LOOP(PCB->Data, group); { /* check all visible lines of the group member */ - if (layer->On) { + if (layer->meta.real.vis) { info.layer = layer; pcb_r_search(layer->line_tree, &info.box, NULL, rubber_callback, &info, NULL); } @@ -490,7 +490,7 @@ PCB_COPPER_GROUP_LOOP(PCB->Data, group); { /* check all visible lines of the group member */ - if (layer->On) { + if (layer->meta.real.vis) { info.layer = layer; pcb_r_search(layer->line_tree, &info.box, NULL, rubber_callback, &info, NULL); } @@ -512,7 +512,7 @@ group = pcb_layer_get_group_(Layer); PCB_COPPER_GROUP_LOOP(PCB->Data, group); { - if (layer->On) { + if (layer->meta.real.vis) { pcb_coord_t thick; /* the following code just stupidly compares the endpoints @@ -837,7 +837,7 @@ XORDrawAttachedLine(x1,y1,x2,y2, ptr->Line->Thickness); } else if(conf_core.editor.move_linepoint_uses_route == 0) { - pcb_gui->set_color(pcb_crosshair.GC,ptr->Layer->Color); + pcb_gui->set_color(pcb_crosshair.GC,ptr->Layer->meta.real.color); XORDrawAttachedLine(x1,y1,x2,y2, ptr->Line->Thickness); /* Draw the DRC outline if it is enabled */ if (conf_core.editor.show_drc) {