Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 16173) +++ trunk/src/crosshair.c (revision 16174) @@ -447,7 +447,7 @@ && PCB_FLAG_TEST(PCB_FLAG_FLOATER, (pcb_any_obj_t *)pcb_crosshair.AttachedObject.Ptr2)) { pcb_any_obj_t *obj = pcb_crosshair.AttachedObject.Ptr2; if (obj->parent_type == PCB_PARENT_LAYER) { - pcb_data_t *data = obj->parent.layer->parent; + pcb_data_t *data = obj->parent.layer->parent.data; if ((data != NULL) && (data->parent_type == PCB_PARENT_SUBC)) { pcb_subc_t *sc = data->parent.subc; pcb_coord_t ox, oy; Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 16173) +++ trunk/src/data.c (revision 16174) @@ -253,8 +253,10 @@ void pcb_data_set_layer_parents(pcb_data_t *data) { pcb_layer_id_t n; - for(n = 0; n < PCB_MAX_LAYER; n++) - data->Layer[n].parent = data; + for(n = 0; n < PCB_MAX_LAYER; n++) { + data->Layer[n].parent.data = data; + data->Layer[n].parent_type = PCB_PARENT_DATA; + } } void pcb_data_bind_board_layers(pcb_board_t *pcb, pcb_data_t *data, int share_rtrees) @@ -262,7 +264,8 @@ pcb_layer_id_t n; for(n = 0; n < pcb->Data->LayerN; n++) { pcb_layer_real2bound(&data->Layer[n], &pcb->Data->Layer[n], share_rtrees); - data->Layer[n].parent = data; + data->Layer[n].parent.data = data; + data->Layer[n].parent_type = PCB_PARENT_DATA; } data->LayerN = pcb->Data->LayerN; } @@ -273,7 +276,9 @@ for(n = 0; n < data->LayerN; n++) { pcb_layer_type_t lyt = pcb_layergrp_flags(pcb4layer_groups, data->Layer[n].meta.real.grp); pcb_layer_real2bound_offs(&data->Layer[n], pcb4layer_groups, &data->Layer[n]); - data->Layer[n].parent = data; + data->Layer[n].parent.data = data; + data->Layer[n].parent_type = PCB_PARENT_DATA; + data->Layer[n].type = PCB_OBJ_LAYER; data->Layer[n].meta.bound.type = lyt; } } Index: trunk/src/find_any_isect.c =================================================================== --- trunk/src/find_any_isect.c (revision 16173) +++ trunk/src/find_any_isect.c (revision 16174) @@ -39,9 +39,9 @@ { /* produce the clopped version for polygons to compare */ if ((a->type == PCB_OBJ_POLY) && (((pcb_poly_t *)a)->Clipped == NULL)) - pcb_poly_init_clip(a->parent.layer->parent, a->parent.layer, (pcb_poly_t *)a); + pcb_poly_init_clip(a->parent.layer->parent.data, a->parent.layer, (pcb_poly_t *)a); if ((b->type == PCB_OBJ_POLY) && (((pcb_poly_t *)b)->Clipped == NULL)) - pcb_poly_init_clip(b->parent.layer->parent, b->parent.layer, (pcb_poly_t *)b); + pcb_poly_init_clip(b->parent.layer->parent.data, b->parent.layer, (pcb_poly_t *)b); switch(a->type) { case PCB_OBJ_VOID: return pcb_false; Index: trunk/src/find_misc.c =================================================================== --- trunk/src/find_misc.c (revision 16173) +++ trunk/src/find_misc.c (revision 16174) @@ -52,7 +52,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->meta.real.no_drc = pcb_attribute_get(&l->meta.real.Attributes, "PCB::skip-drc") != NULL; + l->meta.real.no_drc = pcb_attribute_get(&l->Attributes, "PCB::skip-drc") != NULL; } } Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 16173) +++ trunk/src/gui_act.c (revision 16174) @@ -1354,9 +1354,9 @@ val = NULL; } if (val == NULL) - ret |= pcb_attribute_remove(&ly->meta.real.Attributes, key); + ret |= pcb_attribute_remove(&ly->Attributes, key); else - ret |= pcb_attribute_put(&ly->meta.real.Attributes, key, val); + ret |= pcb_attribute_put(&ly->Attributes, key, val); free(key); pcb_board_set_changed_flag(pcb_true); } Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 16173) +++ trunk/src/layer.c (revision 16174) @@ -121,7 +121,7 @@ void pcb_layer_free(pcb_layer_t *layer) { if (!layer->is_bound) - pcb_attribute_free(&layer->meta.real.Attributes); + pcb_attribute_free(&layer->Attributes); PCB_TEXT_LOOP(layer); { free(text->TextString); @@ -234,7 +234,7 @@ if ((Layer >= pcb_uilayer.array) && (Layer < pcb_uilayer.array + vtlayer_len(&pcb_uilayer))) return (Layer - pcb_uilayer.array) | PCB_LYT_UI; - if (Layer->parent != Data) { + if (Layer->parent.data != Data) { /* the only case this makes sense is when we are resolving a bound layer */ if ((Layer->is_bound) && (Layer->meta.bound.real != NULL)) return pcb_layer_id(Data, Layer->meta.bound.real); @@ -269,7 +269,7 @@ /* real layer: have to do a layer stack based lookup; but at least we have a real layer ID */ if (!layer->is_bound) { - pcb_data_t *data = layer->parent; + pcb_data_t *data = layer->parent.data; pcb_layer_id_t lid; if (data == NULL) @@ -427,7 +427,10 @@ } pcb->Data->Layer[id].meta.real.grp = grp; - pcb->Data->Layer[id].parent = pcb->Data; + pcb->Data->Layer[id].parent_type = PCB_PARENT_DATA; + pcb->Data->Layer[id].parent.data = pcb->Data; + pcb->Data->Layer[id].type = PCB_OBJ_LAYER; + return id; } @@ -502,7 +505,9 @@ default: break; } } - lp->parent = parent; + lp->parent.data = parent; + lp->parent_type = PCB_PARENT_DATA; + lp->type = PCB_OBJ_LAYER; } int pcb_layer_move(pcb_board_t *pcb, pcb_layer_id_t old_index, pcb_layer_id_t new_index, pcb_layergrp_id_t new_in_grp) @@ -778,8 +783,9 @@ lay->is_bound = 1; lay->name = pcb_strdup(name); lay->meta.bound.type = type; - lay->parent = data; - + lay->parent.data = data; + lay->parent_type = PCB_PARENT_DATA; + lay->type = PCB_OBJ_LAYER; return lay; } @@ -903,7 +909,7 @@ return 0; if (pcb_gui->set_layer_group != NULL) - return pcb_gui->set_layer_group(-1, pcb_layer_id(first->parent, first), PCB_LYT_VIRTUAL | PCB_LYT_UI, is_empty); + return pcb_gui->set_layer_group(-1, pcb_layer_id(first->parent.data, first), PCB_LYT_VIRTUAL | PCB_LYT_UI, is_empty); /* if the GUI doesn't have a set_layer, assume it wants to draw all layers */ return 1; @@ -912,7 +918,7 @@ void pcb_layer_edit_attrib(pcb_layer_t *layer) { char *buf = pcb_strdup_printf("Layer %s Attributes", layer->name); - pcb_gui->edit_attributes(buf, &(layer->meta.real.Attributes)); + pcb_gui->edit_attributes(buf, &(layer->Attributes)); free(buf); } Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 16173) +++ trunk/src/layer.h (revision 16174) @@ -100,11 +100,12 @@ #include "obj_text_list.h" struct pcb_layer_s { /* holds information about one layer */ + PCB_ANY_OBJ_FIELDS; + linelist_t Line; textlist_t Text; polylist_t Polygon; arclist_t Arc; - pcb_data_t *parent; const char *name; /* layer name */ @@ -119,7 +120,6 @@ 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; @@ -156,7 +156,7 @@ pcb_layer_id_t pcb_layer_get_top_silk(); /* Return the board the layer is under */ -#define pcb_layer_get_top(layer) pcb_data_get_top((layer)->parent) +#define pcb_layer_get_top(layer) pcb_data_get_top((layer)->parent.data) typedef struct { const char *name, *abbrev; Index: trunk/src/netlist.c =================================================================== --- trunk/src/netlist.c (revision 16173) +++ trunk/src/netlist.c (revision 16174) @@ -211,7 +211,7 @@ return NULL; if (term->parent_type == PCB_PARENT_LAYER) - data = term->parent.layer->parent; + data = term->parent.layer->parent.data; else if (term->parent_type == PCB_PARENT_DATA) data = term->parent.data; else Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 16173) +++ trunk/src/obj_poly.c (revision 16174) @@ -293,7 +293,7 @@ Layer->polygon_tree = pcb_r_create_tree(); pcb_r_insert_entry(Layer->polygon_tree, (pcb_box_t *) polygon); PCB_SET_PARENT(polygon, layer, Layer); - pcb_poly_clear_from_poly(Layer->parent, PCB_OBJ_POLY, Layer, polygon); + pcb_poly_clear_from_poly(Layer->parent.data, PCB_OBJ_POLY, Layer, polygon); } /* creates a new polygon on a layer */ @@ -327,7 +327,7 @@ pcb_add_poly_on_layer(dst, p); pcb_poly_copy_meta(p, src); - pcb = pcb_data_get_top(dst->parent); + pcb = pcb_data_get_top(dst->parent.data); if (pcb != NULL) pcb_poly_init_clip(pcb->Data, dst, p); return p; @@ -341,7 +341,7 @@ pcb_add_poly_on_layer(dst, p); pcb_poly_copy_meta(p, src); - pcb = pcb_data_get_top(dst->parent); + pcb = pcb_data_get_top(dst->parent.data); if (pcb != NULL) pcb_poly_init_clip(pcb->Data, dst, p); return p; Index: trunk/src/obj_poly.h =================================================================== --- trunk/src/obj_poly.h (revision 16173) +++ trunk/src/obj_poly.h (revision 16174) @@ -211,7 +211,7 @@ do { \ if (layer->is_bound) layer = layer->meta.bound.real; \ if (PCB_POLY_HAS_CLEARANCE(poly) && (layer != NULL)) \ - pcb_poly_clear_from_poly(layer->parent, PCB_OBJ_POLY, layer, poly); \ + pcb_poly_clear_from_poly(layer->parent.data, PCB_OBJ_POLY, layer, poly); \ } while(0) /* Let the poly clear sorrunding polys in its layer */ @@ -219,7 +219,7 @@ do { \ if (poly->parent.layer != NULL) { \ pcb_layer_t *layer = pcb_layer_get_real(poly->parent.layer); \ - if ((layer != NULL) && (layer->parent->parent_type == PCB_PARENT_BOARD)) { \ + if ((layer != NULL) && (layer->parent.data->parent_type == PCB_PARENT_BOARD)) { \ pcb_poly_ppclear_at(poly, layer); \ } \ } \ @@ -230,10 +230,10 @@ do { \ if (poly->parent.layer != NULL) { \ pcb_layer_t *layer = pcb_layer_get_real(poly->parent.layer); \ - if ((layer != NULL) && (layer->parent->parent_type == PCB_PARENT_BOARD)) { \ + if ((layer != NULL) && (layer->parent.data->parent_type == PCB_PARENT_BOARD)) { \ if (layer->is_bound) layer = layer->meta.bound.real; \ if (PCB_POLY_HAS_CLEARANCE(poly) && (layer != NULL)) \ - pcb_poly_restore_to_poly(layer->parent, PCB_OBJ_POLY, layer, poly); \ + pcb_poly_restore_to_poly(layer->parent.data, PCB_OBJ_POLY, layer, poly); \ } \ } \ } while(0) Index: trunk/src/obj_pstk_inlines.h =================================================================== --- trunk/src/obj_pstk_inlines.h (revision 16173) +++ trunk/src/obj_pstk_inlines.h (revision 16174) @@ -213,8 +213,8 @@ /* special case: if thermal says 'no shape' on this layer, omit the shape */ layer = pcb_layer_get_real(layer); - if ((layer != NULL) && (layer->parent != NULL)) { - lid = pcb_layer_id(layer->parent, layer); + if ((layer != NULL) && (layer->parent.data != NULL)) { + lid = pcb_layer_id(layer->parent.data, layer); if (lid < ps->thermals.used) { if ((ps->thermals.shape[lid] & PCB_THERMAL_ON) && ((ps->thermals.shape[lid] & 3) == PCB_THERMAL_NOSHAPE)) return NULL; Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 16173) +++ trunk/src/obj_subc.c (revision 16174) @@ -126,7 +126,9 @@ memcpy(&dst->meta, &src->meta, sizeof(src->meta)); dst->is_bound = 1; dst->comb = src->comb; - dst->parent = sc->data; + dst->parent.data = sc->data; + dst->parent_type = PCB_PARENT_DATA; + dst->type = PCB_OBJ_LAYER; dst->name = pcb_strdup(src->name); return dst; } @@ -294,7 +296,7 @@ PCB_FLAG_SET(PCB_FLAG_CLEARPOLYPOLY, poly); pcb_attribute_copy_all(&poly->Attributes, &line->Attributes); - pcb_poly_init_clip(dst->parent, dst, poly); + pcb_poly_init_clip(dst->parent.data, dst, poly); pcb_add_poly_on_layer(dst, poly); return poly; @@ -1058,7 +1060,7 @@ pcb_arc_t *arc; gdl_iterator_t it; int chg = 0; - pcb_data_t *dst_data = dl == NULL ? NULL : dl->parent; + pcb_data_t *dst_data = dl == NULL ? NULL : dl->parent.data; linelist_foreach(&sl->Line, &it, line) { if (src_has_real_layer) { Index: trunk/src/obj_subc_parent.h =================================================================== --- trunk/src/obj_subc_parent.h (revision 16173) +++ trunk/src/obj_subc_parent.h (revision 16174) @@ -54,11 +54,11 @@ if (p->layer == NULL) return NULL; - if (p->layer->parent == NULL) + if (p->layer->parent.data == NULL) return NULL; - if (p->layer->parent->parent_type == PCB_PARENT_SUBC) - return p->layer->parent->parent.subc; + if (p->layer->parent.data->parent_type == PCB_PARENT_SUBC) + return p->layer->parent.data->parent.subc; return NULL; } @@ -95,7 +95,7 @@ switch(obj->parent_type) { case PCB_PARENT_INVALID: return pcb_false; case PCB_PARENT_BOARD: return pcb_false; - case PCB_PARENT_LAYER: if (obj->parent.layer->parent == data) return pcb_true; break; + case PCB_PARENT_LAYER: if (obj->parent.layer->parent.data == data) return pcb_true; break; case PCB_PARENT_SUBC: if (obj->parent.subc->data == data) return pcb_true; break; case PCB_PARENT_DATA: if (obj->parent.data == data) return pcb_true; break; } Index: trunk/src/obj_term.c =================================================================== --- trunk/src/obj_term.c (revision 16173) +++ trunk/src/obj_term.c (revision 16174) @@ -223,7 +223,7 @@ pcb_attribute_remove(&r->obj->Attributes, "term"); if (r->obj->type == PCB_OBJ_POLY) - pcb_poly_init_clip(r->obj->parent.layer->parent, r->obj->parent.layer, (pcb_poly_t *)r->obj); + pcb_poly_init_clip(r->obj->parent.layer->parent.data, r->obj->parent.layer, (pcb_poly_t *)r->obj); return res; } @@ -275,7 +275,7 @@ undo_term_rename_swap(r); if (obj->type == PCB_OBJ_POLY) - pcb_poly_init_clip(obj->parent.layer->parent, obj->parent.layer, (pcb_poly_t *)obj); + pcb_poly_init_clip(obj->parent.layer->parent.data, obj->parent.layer, (pcb_poly_t *)obj); pcb_undo_inc_serial(); return PCB_TERM_ERR_SUCCESS; Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 16173) +++ trunk/src/obj_text.c (revision 16174) @@ -158,7 +158,7 @@ pcb_attribute_list_t *attr = &text->Attributes; path = key+2; if ((path[0] == 'p') && (memcmp(path, "parent.", 7) == 0)) { - pcb_data_t *par = text->parent.layer->parent; + pcb_data_t *par = text->parent.layer->parent.data; if (par->parent_type == PCB_PARENT_SUBC) attr = &par->parent.subc->Attributes; else if (par->parent_type == PCB_PARENT_BOARD) @@ -693,7 +693,7 @@ void pcb_text_update(pcb_layer_t *layer, pcb_text_t *text) { - pcb_data_t *data = layer->parent; + pcb_data_t *data = layer->parent.data; pcb_board_t *pcb = pcb_data_get_top(data); if (pcb == NULL) Index: trunk/src/search.c =================================================================== --- trunk/src/search.c (revision 16173) +++ trunk/src/search.c (revision 16174) @@ -436,7 +436,7 @@ double d; pcb_data_t *dt; - dt = polygon->parent.layer->parent; /* polygon -> layer -> data */ + dt = polygon->parent.layer->parent.data; /* polygon -> layer -> data */ if ((dt != NULL) && (dt->parent_type == PCB_PARENT_SUBC)) { /* do not find subc part poly points if not explicitly requested */ if (!(ctx->Type & PCB_OBJ_SUBC_PART)) Index: trunk/src_plugins/diag/integrity.c =================================================================== --- trunk/src_plugins/diag/integrity.c (revision 16173) +++ trunk/src_plugins/diag/integrity.c (revision 16174) @@ -47,14 +47,6 @@ pcb_message(PCB_MSG_ERROR, CHK "%s " name " %ld broken empty attribute list\n", whose, (obj)->ID); \ } while(0) -#define chk_layer_attr(ly) \ - do { \ - if (!(ly)->is_bound) { \ - if (((ly)->meta.real.Attributes.Number > 0) && ((ly)->meta.real.Attributes.List == NULL)) \ - pcb_message(PCB_MSG_ERROR, CHK "%s layer %s broken empty attribute list\n", whose, (ly)->name); \ - } \ - } while(0) - #define check_field_eq(name, obj, st1, st2, fld, fmt) \ do { \ if ((st1)->fld != (st2)->fld) \ @@ -183,11 +175,11 @@ pcb_poly_t *poly; /* check layers */ - if (data->Layer[n].parent != data) + if (data->Layer[n].parent.data != 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 has invalid name\n", whose, n); - chk_layer_attr(&data->Layer[n]); + chk_attr("layer", &data->Layer[n]); /* check layer objects */ for(lin = linelist_first(&data->Layer[n].Line); lin != NULL; lin = linelist_next(lin)) { Index: trunk/src_plugins/export_bboard/bboard.c =================================================================== --- trunk/src_plugins/export_bboard/bboard.c (revision 16173) +++ trunk/src_plugins/export_bboard/bboard.c (revision 16174) @@ -202,7 +202,7 @@ char *clr; unsigned int r, g, b; - if ((clr = pcb_attribute_get(&(layer->meta.real.Attributes), "BBoard::LayerColor")) != NULL) { + if ((clr = pcb_attribute_get(&(layer->Attributes), "BBoard::LayerColor")) != NULL) { if (clr[0] == '#') { if (sscanf(&(clr[1]), "%02x%02x%02x", &r, &g, &b) == 3) goto ok; Index: trunk/src_plugins/import_hpgl/hpgl.c =================================================================== --- trunk/src_plugins/import_hpgl/hpgl.c (revision 16173) +++ trunk/src_plugins/import_hpgl/hpgl.c (revision 16174) @@ -66,7 +66,9 @@ pcb_layer_real2bound(&data->Layer[n], &PCB->Data->Layer[n], 0); free((char *)data->Layer[n].name); data->Layer[n].name = pcb_strdup_printf("hpgl_pen_%d", n); - data->Layer[n].parent = data; + data->Layer[n].parent.data = data; + data->Layer[n].parent_type = PCB_PARENT_DATA; + data->Layer[n].type = PCB_OBJ_LAYER; } } Index: trunk/src_plugins/io_hyp/write.c =================================================================== --- trunk/src_plugins/io_hyp/write.c (revision 16173) +++ trunk/src_plugins/io_hyp/write.c (revision 16174) @@ -280,7 +280,7 @@ if (poly->Clipped == NULL) { pcb_layer_t *l = poly->parent.layer; - pcb_poly_init_clip(l->parent, l, poly); + pcb_poly_init_clip(l->parent.data, l, poly); } if (poly->Clipped == NULL) Index: trunk/src_plugins/io_lihata/read.c =================================================================== --- trunk/src_plugins/io_lihata/read.c (revision 16173) +++ trunk/src_plugins/io_lihata/read.c (revision 16174) @@ -673,7 +673,7 @@ } pcb_add_poly_on_layer(ly, poly); - pcb_poly_init_clip(ly->parent, ly, poly); + pcb_poly_init_clip(ly->parent.data, ly, poly); return 0; } @@ -765,9 +765,11 @@ if (layer_id >= dt->LayerN) dt->LayerN = layer_id+1; - ly->parent = dt; + ly->parent.data = dt; + ly->parent_type = PCB_PARENT_DATA; + ly->type = PCB_OBJ_LAYER; - parse_attributes(&ly->meta.real.Attributes, lht_dom_hash_get(grp, "attributes")); + parse_attributes(&ly->Attributes, lht_dom_hash_get(grp, "attributes")); ncmb = lht_dom_hash_get(grp, "combining"); if (ncmb != NULL) { Index: trunk/src_plugins/io_lihata/write.c =================================================================== --- trunk/src_plugins/io_lihata/write.c (revision 16173) +++ trunk/src_plugins/io_lihata/write.c (revision 16174) @@ -786,7 +786,7 @@ } if (!layer->is_bound) - lht_dom_hash_put(obj, build_attributes(&layer->meta.real.Attributes)); + lht_dom_hash_put(obj, build_attributes(&layer->Attributes)); 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 16173) +++ trunk/src_plugins/io_pcb/file.c (revision 16174) @@ -550,7 +550,7 @@ fprintf(FP, "Layer(%i ", (int) Number + 1); pcb_print_quoted_string(FP, layer_name_hack(layer, PCB_EMPTY(layer->name))); fputs(")\n(\n", FP); - WriteAttributeList(FP, &layer->meta.real.Attributes, "\t"); + WriteAttributeList(FP, &layer->Attributes, "\t"); linelist_foreach(&layer->Line, &it, line) { pcb_fprintf(FP, "\tLine[%[0] %[0] %[0] %[0] %[0] %[0] %s]\n", @@ -798,7 +798,9 @@ return -1; lid = pcb->Data->LayerN; pcb->Data->Layer[lid].name = pcb_strdup(name); - pcb->Data->Layer[lid].parent = pcb->Data; + pcb->Data->Layer[lid].parent.data = pcb->Data; + pcb->Data->Layer[lid].parent_type = PCB_PARENT_DATA; + pcb->Data->Layer[lid].type = PCB_OBJ_LAYER; pcb->Data->LayerN++; return lid; } @@ -826,7 +828,9 @@ if (pcb->Data->Layer[lid].meta.real.grp == 0) { free((char *)pcb->Data->Layer[lid].name); pcb->Data->Layer[lid].name = pcb_strdup(name); - pcb->Data->Layer[lid].parent = pcb->Data; + pcb->Data->Layer[lid].parent.data = pcb->Data; + pcb->Data->Layer[lid].parent_type = PCB_PARENT_DATA; + pcb->Data->Layer[lid].type = PCB_OBJ_LAYER; return lid; } } Index: trunk/src_plugins/io_pcb/parse_y.c =================================================================== --- trunk/src_plugins/io_pcb/parse_y.c (revision 16173) +++ trunk/src_plugins/io_pcb/parse_y.c (revision 16174) @@ -596,21 +596,21 @@ 579, 606, 610, 615, 643, 647, 691, 700, 709, 713, 714, 718, 719, 723, 724, 724, 725, 726, 728, 728, 735, 739, 740, 741, 742, 743, 779, 789, 800, 810, - 820, 856, 861, 893, 892, 921, 922, 926, 927, 931, - 932, 933, 934, 935, 936, 938, 943, 944, 945, 946, - 946, 947, 977, 986, 995, 1043, 1052, 1061, 1098, 1108, - 1126, 1176, 1175, 1214, 1216, 1221, 1220, 1227, 1229, 1234, - 1238, 1298, 1299, 1300, 1301, 1302, 1310, 1309, 1328, 1327, - 1346, 1345, 1366, 1364, 1388, 1386, 1473, 1474, 1478, 1479, - 1480, 1481, 1482, 1484, 1489, 1494, 1499, 1504, 1509, 1514, - 1514, 1518, 1519, 1523, 1524, 1525, 1526, 1528, 1534, 1541, - 1546, 1551, 1551, 1592, 1605, 1617, 1628, 1644, 1698, 1713, - 1726, 1737, 1748, 1749, 1753, 1754, 1776, 1778, 1794, 1813, - 1814, 1817, 1819, 1820, 1841, 1848, 1864, 1865, 1869, 1874, - 1875, 1879, 1880, 1904, 1903, 1913, 1914, 1918, 1919, 1938, - 1955, 1956, 1960, 1965, 1966, 1970, 1971, 1986, 1987, 1988, - 2015, 2028, 2029, 2033, 2034, 2039, 2040, 2041, 2042, 2043, - 2044, 2045, 2046, 2047, 2048 + 820, 856, 861, 893, 892, 923, 924, 928, 929, 933, + 934, 935, 936, 937, 938, 940, 945, 946, 947, 948, + 948, 949, 979, 988, 997, 1045, 1054, 1063, 1100, 1110, + 1128, 1178, 1177, 1216, 1218, 1223, 1222, 1229, 1231, 1236, + 1240, 1300, 1301, 1302, 1303, 1304, 1312, 1311, 1330, 1329, + 1348, 1347, 1368, 1366, 1390, 1388, 1475, 1476, 1480, 1481, + 1482, 1483, 1484, 1486, 1491, 1496, 1501, 1506, 1511, 1516, + 1516, 1520, 1521, 1525, 1526, 1527, 1528, 1530, 1536, 1543, + 1548, 1553, 1553, 1594, 1607, 1619, 1630, 1646, 1700, 1715, + 1728, 1739, 1750, 1751, 1755, 1756, 1778, 1780, 1796, 1815, + 1816, 1819, 1821, 1822, 1843, 1850, 1866, 1867, 1871, 1876, + 1877, 1881, 1882, 1906, 1905, 1915, 1916, 1920, 1921, 1940, + 1957, 1958, 1962, 1967, 1968, 1972, 1973, 1988, 1989, 1990, + 2017, 2030, 2031, 2035, 2036, 2041, 2042, 2043, 2044, 2045, + 2046, 2047, 2048, 2049, 2050 }; #endif @@ -2249,7 +2249,9 @@ YYABORT; } Layer = &yyData->Layer[(yyvsp[-4].integer)-1]; - Layer->parent = yyData; + Layer->parent.data = yyData; + Layer->parent_type = PCB_PARENT_DATA; + Layer->type = PCB_OBJ_LAYER; /* memory for name is already allocated */ if (Layer->name != NULL) @@ -2261,44 +2263,44 @@ if ((yyvsp[-2].string) != NULL) free((yyvsp[-2].string)); } -#line 2265 "parse_y.c" /* yacc.c:1646 */ +#line 2267 "parse_y.c" /* yacc.c:1646 */ break; case 85: -#line 939 "parse_y.y" /* yacc.c:1646 */ +#line 941 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_new_from_rectangle(Layer, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-5].measure)) + OU ((yyvsp[-3].measure)), OU ((yyvsp[-4].measure)) + OU ((yyvsp[-2].measure)), 0, pcb_flag_old((yyvsp[-1].integer))); } -#line 2274 "parse_y.c" /* yacc.c:1646 */ +#line 2276 "parse_y.c" /* yacc.c:1646 */ break; case 89: -#line 946 "parse_y.y" /* yacc.c:1646 */ - { attr_list = & Layer->meta.real.Attributes; } -#line 2280 "parse_y.c" /* yacc.c:1646 */ +#line 948 "parse_y.y" /* yacc.c:1646 */ + { attr_list = & Layer->Attributes; } +#line 2282 "parse_y.c" /* yacc.c:1646 */ break; case 92: -#line 978 "parse_y.y" /* yacc.c:1646 */ +#line 980 "parse_y.y" /* yacc.c:1646 */ { pcb_line_new(Layer, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), (yyvsp[-1].flagtype)); } -#line 2289 "parse_y.c" /* yacc.c:1646 */ +#line 2291 "parse_y.c" /* yacc.c:1646 */ break; case 93: -#line 987 "parse_y.y" /* yacc.c:1646 */ +#line 989 "parse_y.y" /* yacc.c:1646 */ { pcb_line_new(Layer, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), pcb_flag_old((yyvsp[-1].integer))); } -#line 2298 "parse_y.c" /* yacc.c:1646 */ +#line 2300 "parse_y.c" /* yacc.c:1646 */ break; case 94: -#line 996 "parse_y.y" /* yacc.c:1646 */ +#line 998 "parse_y.y" /* yacc.c:1646 */ { /* eliminate old-style rat-lines */ if ((IV ((yyvsp[-1].measure)) & PCB_FLAG_RAT) == 0) @@ -2305,48 +2307,48 @@ pcb_line_new(Layer, OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old(IV ((yyvsp[-1].measure)))); } -#line 2309 "parse_y.c" /* yacc.c:1646 */ +#line 2311 "parse_y.c" /* yacc.c:1646 */ break; case 95: -#line 1044 "parse_y.y" /* yacc.c:1646 */ +#line 1046 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, NU ((yyvsp[-9].measure)), NU ((yyvsp[-8].measure)), NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-1].flagtype)); } -#line 2318 "parse_y.c" /* yacc.c:1646 */ +#line 2320 "parse_y.c" /* yacc.c:1646 */ break; case 96: -#line 1053 "parse_y.y" /* yacc.c:1646 */ +#line 1055 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, OU ((yyvsp[-9].measure)), OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), pcb_flag_old((yyvsp[-1].integer))); } -#line 2327 "parse_y.c" /* yacc.c:1646 */ +#line 2329 "parse_y.c" /* yacc.c:1646 */ break; case 97: -#line 1062 "parse_y.y" /* yacc.c:1646 */ +#line 1064 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-6].measure)), IV ((yyvsp[-3].measure)), (yyvsp[-2].number), OU ((yyvsp[-4].measure)), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old((yyvsp[-1].integer))); } -#line 2336 "parse_y.c" /* yacc.c:1646 */ +#line 2338 "parse_y.c" /* yacc.c:1646 */ break; case 98: -#line 1099 "parse_y.y" /* yacc.c:1646 */ +#line 1101 "parse_y.y" /* yacc.c:1646 */ { /* use a default scale of 100% */ pcb_text_new(Layer,yyFont,OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), 100, (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2346 "parse_y.c" /* yacc.c:1646 */ +#line 2348 "parse_y.c" /* yacc.c:1646 */ break; case 99: -#line 1109 "parse_y.y" /* yacc.c:1646 */ +#line 1111 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-1].integer) & PCB_FLAG_ONSILK) { @@ -2361,11 +2363,11 @@ pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2365 "parse_y.c" /* yacc.c:1646 */ +#line 2367 "parse_y.c" /* yacc.c:1646 */ break; case 100: -#line 1127 "parse_y.y" /* yacc.c:1646 */ +#line 1129 "parse_y.y" /* yacc.c:1646 */ { /* FIXME: shouldn't know about .f */ /* I don't think this matters because anything with hi_format @@ -2385,19 +2387,19 @@ pcb_text_new(Layer, yyFont, NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), (yyvsp[-4].number), (yyvsp[-3].number), (yyvsp[-2].string), (yyvsp[-1].flagtype)); free ((yyvsp[-2].string)); } -#line 2389 "parse_y.c" /* yacc.c:1646 */ +#line 2391 "parse_y.c" /* yacc.c:1646 */ break; case 101: -#line 1176 "parse_y.y" /* yacc.c:1646 */ +#line 1178 "parse_y.y" /* yacc.c:1646 */ { Polygon = pcb_poly_new(Layer, 0, (yyvsp[-2].flagtype)); } -#line 2397 "parse_y.c" /* yacc.c:1646 */ +#line 2399 "parse_y.c" /* yacc.c:1646 */ break; case 102: -#line 1181 "parse_y.y" /* yacc.c:1646 */ +#line 1183 "parse_y.y" /* yacc.c:1646 */ { pcb_cardinal_t contour, contour_start, contour_end; pcb_bool bad_contour_found = pcb_false; @@ -2429,35 +2431,35 @@ pcb_r_insert_entry(Layer->polygon_tree, (pcb_box_t *) Polygon); } } -#line 2433 "parse_y.c" /* yacc.c:1646 */ +#line 2435 "parse_y.c" /* yacc.c:1646 */ break; case 105: -#line 1221 "parse_y.y" /* yacc.c:1646 */ +#line 1223 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_hole_new(Polygon); } -#line 2441 "parse_y.c" /* yacc.c:1646 */ +#line 2443 "parse_y.c" /* yacc.c:1646 */ break; case 109: -#line 1235 "parse_y.y" /* yacc.c:1646 */ +#line 1237 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_point_new(Polygon, OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2449 "parse_y.c" /* yacc.c:1646 */ +#line 2451 "parse_y.c" /* yacc.c:1646 */ break; case 110: -#line 1239 "parse_y.y" /* yacc.c:1646 */ +#line 1241 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_point_new(Polygon, NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2457 "parse_y.c" /* yacc.c:1646 */ +#line 2459 "parse_y.c" /* yacc.c:1646 */ break; case 116: -#line 1310 "parse_y.y" /* yacc.c:1646 */ +#line 1312 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, pcb_no_flags(), (yyvsp[-6].string), (yyvsp[-5].string), NULL, OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), (yyvsp[-2].integer), 100, pcb_no_flags(), pcb_false); @@ -2465,19 +2467,19 @@ free ((yyvsp[-5].string)); pin_num = 1; } -#line 2469 "parse_y.c" /* yacc.c:1646 */ +#line 2471 "parse_y.c" /* yacc.c:1646 */ break; case 117: -#line 1318 "parse_y.y" /* yacc.c:1646 */ +#line 1320 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_fin(yyData); } -#line 2477 "parse_y.c" /* yacc.c:1646 */ +#line 2479 "parse_y.c" /* yacc.c:1646 */ break; case 118: -#line 1328 "parse_y.y" /* yacc.c:1646 */ +#line 1330 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, pcb_flag_old((yyvsp[-9].integer)), (yyvsp[-8].string), (yyvsp[-7].string), NULL, OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), IV ((yyvsp[-4].measure)), IV ((yyvsp[-3].measure)), pcb_flag_old((yyvsp[-2].integer)), pcb_false); @@ -2485,19 +2487,19 @@ free ((yyvsp[-7].string)); pin_num = 1; } -#line 2489 "parse_y.c" /* yacc.c:1646 */ +#line 2491 "parse_y.c" /* yacc.c:1646 */ break; case 119: -#line 1336 "parse_y.y" /* yacc.c:1646 */ +#line 1338 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_fin(yyData); } -#line 2497 "parse_y.c" /* yacc.c:1646 */ +#line 2499 "parse_y.c" /* yacc.c:1646 */ break; case 120: -#line 1346 "parse_y.y" /* yacc.c:1646 */ +#line 1348 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, pcb_flag_old((yyvsp[-10].integer)), (yyvsp[-9].string), (yyvsp[-8].string), (yyvsp[-7].string), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), IV ((yyvsp[-4].measure)), IV ((yyvsp[-3].measure)), pcb_flag_old((yyvsp[-2].integer)), pcb_false); @@ -2506,19 +2508,19 @@ free ((yyvsp[-7].string)); pin_num = 1; } -#line 2510 "parse_y.c" /* yacc.c:1646 */ +#line 2512 "parse_y.c" /* yacc.c:1646 */ break; case 121: -#line 1355 "parse_y.y" /* yacc.c:1646 */ +#line 1357 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_fin(yyData); } -#line 2518 "parse_y.c" /* yacc.c:1646 */ +#line 2520 "parse_y.c" /* yacc.c:1646 */ break; case 122: -#line 1366 "parse_y.y" /* yacc.c:1646 */ +#line 1368 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, pcb_flag_old((yyvsp[-12].integer)), (yyvsp[-11].string), (yyvsp[-10].string), (yyvsp[-9].string), OU ((yyvsp[-8].measure)) + OU ((yyvsp[-6].measure)), OU ((yyvsp[-7].measure)) + OU ((yyvsp[-5].measure)), @@ -2529,19 +2531,19 @@ free ((yyvsp[-10].string)); free ((yyvsp[-9].string)); } -#line 2533 "parse_y.c" /* yacc.c:1646 */ +#line 2535 "parse_y.c" /* yacc.c:1646 */ break; case 123: -#line 1377 "parse_y.y" /* yacc.c:1646 */ +#line 1379 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_fin(yyData); } -#line 2541 "parse_y.c" /* yacc.c:1646 */ +#line 2543 "parse_y.c" /* yacc.c:1646 */ break; case 124: -#line 1388 "parse_y.y" /* yacc.c:1646 */ +#line 1390 "parse_y.y" /* yacc.c:1646 */ { yysubc = io_pcb_element_new(yyData, yysubc, yyFont, (yyvsp[-12].flagtype), (yyvsp[-11].string), (yyvsp[-10].string), (yyvsp[-9].string), NU ((yyvsp[-8].measure)) + NU ((yyvsp[-6].measure)), NU ((yyvsp[-7].measure)) + NU ((yyvsp[-5].measure)), @@ -2552,11 +2554,11 @@ free ((yyvsp[-10].string)); free ((yyvsp[-9].string)); } -#line 2556 "parse_y.c" /* yacc.c:1646 */ +#line 2558 "parse_y.c" /* yacc.c:1646 */ break; case 125: -#line 1399 "parse_y.y" /* yacc.c:1646 */ +#line 1401 "parse_y.y" /* yacc.c:1646 */ { if (pcb_subc_is_empty(yysubc)) { pcb_subc_free(yysubc); @@ -2566,111 +2568,111 @@ io_pcb_element_fin(yyData); } } -#line 2570 "parse_y.c" /* yacc.c:1646 */ +#line 2572 "parse_y.c" /* yacc.c:1646 */ break; case 133: -#line 1485 "parse_y.y" /* yacc.c:1646 */ +#line 1487 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_line_new(yysubc, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2578 "parse_y.c" /* yacc.c:1646 */ +#line 2580 "parse_y.c" /* yacc.c:1646 */ break; case 134: -#line 1490 "parse_y.y" /* yacc.c:1646 */ +#line 1492 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_line_new(yysubc, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2586 "parse_y.c" /* yacc.c:1646 */ +#line 2588 "parse_y.c" /* yacc.c:1646 */ break; case 135: -#line 1495 "parse_y.y" /* yacc.c:1646 */ +#line 1497 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_arc_new(yysubc, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-1].measure))); } -#line 2594 "parse_y.c" /* yacc.c:1646 */ +#line 2596 "parse_y.c" /* yacc.c:1646 */ break; case 136: -#line 1500 "parse_y.y" /* yacc.c:1646 */ +#line 1502 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_arc_new(yysubc, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-1].measure))); } -#line 2602 "parse_y.c" /* yacc.c:1646 */ +#line 2604 "parse_y.c" /* yacc.c:1646 */ break; case 137: -#line 1505 "parse_y.y" /* yacc.c:1646 */ +#line 1507 "parse_y.y" /* yacc.c:1646 */ { yysubc_ox = NU ((yyvsp[-2].measure)); yysubc_oy = NU ((yyvsp[-1].measure)); } -#line 2611 "parse_y.c" /* yacc.c:1646 */ +#line 2613 "parse_y.c" /* yacc.c:1646 */ break; case 138: -#line 1510 "parse_y.y" /* yacc.c:1646 */ +#line 1512 "parse_y.y" /* yacc.c:1646 */ { yysubc_ox = OU ((yyvsp[-2].measure)); yysubc_oy = OU ((yyvsp[-1].measure)); } -#line 2620 "parse_y.c" /* yacc.c:1646 */ +#line 2622 "parse_y.c" /* yacc.c:1646 */ break; case 139: -#line 1514 "parse_y.y" /* yacc.c:1646 */ +#line 1516 "parse_y.y" /* yacc.c:1646 */ { attr_list = & yysubc->Attributes; } -#line 2626 "parse_y.c" /* yacc.c:1646 */ +#line 2628 "parse_y.c" /* yacc.c:1646 */ break; case 147: -#line 1529 "parse_y.y" /* yacc.c:1646 */ +#line 1531 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_line_new(yysubc, NU ((yyvsp[-5].measure)) + yysubc_ox, NU ((yyvsp[-4].measure)) + yysubc_oy, NU ((yyvsp[-3].measure)) + yysubc_ox, NU ((yyvsp[-2].measure)) + yysubc_oy, NU ((yyvsp[-1].measure))); } -#line 2636 "parse_y.c" /* yacc.c:1646 */ +#line 2638 "parse_y.c" /* yacc.c:1646 */ break; case 148: -#line 1535 "parse_y.y" /* yacc.c:1646 */ +#line 1537 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_line_new(yysubc, OU ((yyvsp[-5].measure)) + yysubc_ox, OU ((yyvsp[-4].measure)) + yysubc_oy, OU ((yyvsp[-3].measure)) + yysubc_ox, OU ((yyvsp[-2].measure)) + yysubc_oy, OU ((yyvsp[-1].measure))); } -#line 2646 "parse_y.c" /* yacc.c:1646 */ +#line 2648 "parse_y.c" /* yacc.c:1646 */ break; case 149: -#line 1542 "parse_y.y" /* yacc.c:1646 */ +#line 1544 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_arc_new(yysubc, NU ((yyvsp[-7].measure)) + yysubc_ox, NU ((yyvsp[-6].measure)) + yysubc_oy, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-1].measure))); } -#line 2655 "parse_y.c" /* yacc.c:1646 */ +#line 2657 "parse_y.c" /* yacc.c:1646 */ break; case 150: -#line 1547 "parse_y.y" /* yacc.c:1646 */ +#line 1549 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_arc_new(yysubc, OU ((yyvsp[-7].measure)) + yysubc_ox, OU ((yyvsp[-6].measure)) + yysubc_oy, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-1].measure))); } -#line 2664 "parse_y.c" /* yacc.c:1646 */ +#line 2666 "parse_y.c" /* yacc.c:1646 */ break; case 151: -#line 1551 "parse_y.y" /* yacc.c:1646 */ +#line 1553 "parse_y.y" /* yacc.c:1646 */ { attr_list = & yysubc->Attributes; } -#line 2670 "parse_y.c" /* yacc.c:1646 */ +#line 2672 "parse_y.c" /* yacc.c:1646 */ break; case 153: -#line 1593 "parse_y.y" /* yacc.c:1646 */ +#line 1595 "parse_y.y" /* yacc.c:1646 */ { pcb_pstk_t *pin = io_pcb_element_pin_new(yysubc, NU ((yyvsp[-9].measure)) + yysubc_ox, NU ((yyvsp[-8].measure)) + yysubc_oy, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].string), @@ -2679,11 +2681,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2683 "parse_y.c" /* yacc.c:1646 */ +#line 2685 "parse_y.c" /* yacc.c:1646 */ break; case 154: -#line 1606 "parse_y.y" /* yacc.c:1646 */ +#line 1608 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_pin_new(yysubc, OU ((yyvsp[-9].measure)) + yysubc_ox, OU ((yyvsp[-8].measure)) + yysubc_oy, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].string), @@ -2691,11 +2693,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2695 "parse_y.c" /* yacc.c:1646 */ +#line 2697 "parse_y.c" /* yacc.c:1646 */ break; case 155: -#line 1618 "parse_y.y" /* yacc.c:1646 */ +#line 1620 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_pin_new(yysubc, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), 2*PCB_GROUNDPLANEFRAME, OU ((yyvsp[-5].measure)) + 2*PCB_MASKFRAME, OU ((yyvsp[-4].measure)), (yyvsp[-3].string), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); @@ -2702,11 +2704,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2706 "parse_y.c" /* yacc.c:1646 */ +#line 2708 "parse_y.c" /* yacc.c:1646 */ break; case 156: -#line 1629 "parse_y.y" /* yacc.c:1646 */ +#line 1631 "parse_y.y" /* yacc.c:1646 */ { char p_number[8]; @@ -2716,11 +2718,11 @@ free ((yyvsp[-2].string)); } -#line 2720 "parse_y.c" /* yacc.c:1646 */ +#line 2722 "parse_y.c" /* yacc.c:1646 */ break; case 157: -#line 1645 "parse_y.y" /* yacc.c:1646 */ +#line 1647 "parse_y.y" /* yacc.c:1646 */ { pcb_coord_t hole = OU ((yyvsp[-3].measure)) * PCB_DEFAULT_DRILLINGHOLE; char p_number[8]; @@ -2735,11 +2737,11 @@ OU ((yyvsp[-3].measure)) + 2*PCB_MASKFRAME, hole, (yyvsp[-2].string), p_number, pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2739 "parse_y.c" /* yacc.c:1646 */ +#line 2741 "parse_y.c" /* yacc.c:1646 */ break; case 158: -#line 1699 "parse_y.y" /* yacc.c:1646 */ +#line 1701 "parse_y.y" /* yacc.c:1646 */ { pcb_pstk_t *pad = io_pcb_element_pad_new(yysubc, NU ((yyvsp[-10].measure)) + yysubc_ox, NU ((yyvsp[-9].measure)) + yysubc_oy, @@ -2750,11 +2752,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2754 "parse_y.c" /* yacc.c:1646 */ +#line 2756 "parse_y.c" /* yacc.c:1646 */ break; case 159: -#line 1714 "parse_y.y" /* yacc.c:1646 */ +#line 1716 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_pad_new(yysubc,OU ((yyvsp[-10].measure)) + yysubc_ox, OU ((yyvsp[-9].measure)) + yysubc_oy, OU ((yyvsp[-8].measure)) + yysubc_ox, @@ -2763,11 +2765,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2767 "parse_y.c" /* yacc.c:1646 */ +#line 2769 "parse_y.c" /* yacc.c:1646 */ break; case 160: -#line 1727 "parse_y.y" /* yacc.c:1646 */ +#line 1729 "parse_y.y" /* yacc.c:1646 */ { io_pcb_element_pad_new(yysubc,OU ((yyvsp[-8].measure)),OU ((yyvsp[-7].measure)),OU ((yyvsp[-6].measure)),OU ((yyvsp[-5].measure)),OU ((yyvsp[-4].measure)), 2*PCB_GROUNDPLANEFRAME, OU ((yyvsp[-4].measure)) + 2*PCB_MASKFRAME, (yyvsp[-3].string), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); @@ -2774,11 +2776,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2778 "parse_y.c" /* yacc.c:1646 */ +#line 2780 "parse_y.c" /* yacc.c:1646 */ break; case 161: -#line 1738 "parse_y.y" /* yacc.c:1646 */ +#line 1740 "parse_y.y" /* yacc.c:1646 */ { char p_number[8]; @@ -2787,23 +2789,23 @@ OU ((yyvsp[-3].measure)) + 2*PCB_MASKFRAME, (yyvsp[-2].string),p_number, pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2791 "parse_y.c" /* yacc.c:1646 */ +#line 2793 "parse_y.c" /* yacc.c:1646 */ break; case 162: -#line 1748 "parse_y.y" /* yacc.c:1646 */ +#line 1750 "parse_y.y" /* yacc.c:1646 */ { (yyval.flagtype) = pcb_flag_old((yyvsp[0].integer)); } -#line 2797 "parse_y.c" /* yacc.c:1646 */ +#line 2799 "parse_y.c" /* yacc.c:1646 */ break; case 163: -#line 1749 "parse_y.y" /* yacc.c:1646 */ +#line 1751 "parse_y.y" /* yacc.c:1646 */ { (yyval.flagtype) = pcb_strflg_s2f((yyvsp[0].string), yyerror, &yy_intconn); free((yyvsp[0].string)); } -#line 2803 "parse_y.c" /* yacc.c:1646 */ +#line 2805 "parse_y.c" /* yacc.c:1646 */ break; case 167: -#line 1779 "parse_y.y" /* yacc.c:1646 */ +#line 1781 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-3].integer) <= 0 || (yyvsp[-3].integer) > PCB_MAX_FONTPOSITION) { @@ -2819,11 +2821,11 @@ Symbol->Valid = pcb_true; Symbol->Delta = NU ((yyvsp[-2].measure)); } -#line 2823 "parse_y.c" /* yacc.c:1646 */ +#line 2825 "parse_y.c" /* yacc.c:1646 */ break; case 168: -#line 1795 "parse_y.y" /* yacc.c:1646 */ +#line 1797 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-3].integer) <= 0 || (yyvsp[-3].integer) > PCB_MAX_FONTPOSITION) { @@ -2839,64 +2841,64 @@ Symbol->Valid = pcb_true; Symbol->Delta = OU ((yyvsp[-2].measure)); } -#line 2843 "parse_y.c" /* yacc.c:1646 */ +#line 2845 "parse_y.c" /* yacc.c:1646 */ break; case 174: -#line 1842 "parse_y.y" /* yacc.c:1646 */ +#line 1844 "parse_y.y" /* yacc.c:1646 */ { pcb_font_new_line_in_sym(Symbol, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2851 "parse_y.c" /* yacc.c:1646 */ +#line 2853 "parse_y.c" /* yacc.c:1646 */ break; case 175: -#line 1849 "parse_y.y" /* yacc.c:1646 */ +#line 1851 "parse_y.y" /* yacc.c:1646 */ { pcb_font_new_line_in_sym(Symbol, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2859 "parse_y.c" /* yacc.c:1646 */ +#line 2861 "parse_y.c" /* yacc.c:1646 */ break; case 183: -#line 1904 "parse_y.y" /* yacc.c:1646 */ +#line 1906 "parse_y.y" /* yacc.c:1646 */ { Menu = pcb_lib_net_new((pcb_lib_t *)&yyPCB->NetlistLib, (yyvsp[-3].string), (yyvsp[-2].string)); free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2869 "parse_y.c" /* yacc.c:1646 */ +#line 2871 "parse_y.c" /* yacc.c:1646 */ break; case 189: -#line 1939 "parse_y.y" /* yacc.c:1646 */ +#line 1941 "parse_y.y" /* yacc.c:1646 */ { pcb_lib_conn_new(Menu, (yyvsp[-1].string)); free ((yyvsp[-1].string)); } -#line 2878 "parse_y.c" /* yacc.c:1646 */ +#line 2880 "parse_y.c" /* yacc.c:1646 */ break; case 197: -#line 1986 "parse_y.y" /* yacc.c:1646 */ +#line 1988 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_ADD_CONN, (yyvsp[-2].string), (yyvsp[-1].string), NULL); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2884 "parse_y.c" /* yacc.c:1646 */ +#line 2886 "parse_y.c" /* yacc.c:1646 */ break; case 198: -#line 1987 "parse_y.y" /* yacc.c:1646 */ +#line 1989 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_DEL_CONN, (yyvsp[-2].string), (yyvsp[-1].string), NULL); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2890 "parse_y.c" /* yacc.c:1646 */ +#line 2892 "parse_y.c" /* yacc.c:1646 */ break; case 199: -#line 1988 "parse_y.y" /* yacc.c:1646 */ +#line 1990 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_CHANGE_ATTRIB, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string)); free((yyvsp[-3].string)); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2896 "parse_y.c" /* yacc.c:1646 */ +#line 2898 "parse_y.c" /* yacc.c:1646 */ break; case 200: -#line 2016 "parse_y.y" /* yacc.c:1646 */ +#line 2018 "parse_y.y" /* yacc.c:1646 */ { char *old_val, *key = (yyvsp[-2].string), *val = (yyvsp[-1].string) ? (yyvsp[-1].string) : (char *)""; old_val = pcb_attribute_get(attr_list, key); @@ -2907,95 +2909,95 @@ free(key); free(val); } -#line 2911 "parse_y.c" /* yacc.c:1646 */ +#line 2913 "parse_y.c" /* yacc.c:1646 */ break; case 201: -#line 2028 "parse_y.y" /* yacc.c:1646 */ +#line 2030 "parse_y.y" /* yacc.c:1646 */ { (yyval.string) = (yyvsp[0].string); } -#line 2917 "parse_y.c" /* yacc.c:1646 */ +#line 2919 "parse_y.c" /* yacc.c:1646 */ break; case 202: -#line 2029 "parse_y.y" /* yacc.c:1646 */ +#line 2031 "parse_y.y" /* yacc.c:1646 */ { (yyval.string) = 0; } -#line 2923 "parse_y.c" /* yacc.c:1646 */ +#line 2925 "parse_y.c" /* yacc.c:1646 */ break; case 203: -#line 2033 "parse_y.y" /* yacc.c:1646 */ +#line 2035 "parse_y.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[0].number); } -#line 2929 "parse_y.c" /* yacc.c:1646 */ +#line 2931 "parse_y.c" /* yacc.c:1646 */ break; case 204: -#line 2034 "parse_y.y" /* yacc.c:1646 */ +#line 2036 "parse_y.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[0].integer); } -#line 2935 "parse_y.c" /* yacc.c:1646 */ +#line 2937 "parse_y.c" /* yacc.c:1646 */ break; case 205: -#line 2039 "parse_y.y" /* yacc.c:1646 */ +#line 2041 "parse_y.y" /* yacc.c:1646 */ { do_measure(&(yyval.measure), (yyvsp[0].number), PCB_MIL_TO_COORD ((yyvsp[0].number)) / 100.0, 0); } -#line 2941 "parse_y.c" /* yacc.c:1646 */ +#line 2943 "parse_y.c" /* yacc.c:1646 */ break; case 206: -#line 2040 "parse_y.y" /* yacc.c:1646 */ +#line 2042 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number)) / 100000.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2947 "parse_y.c" /* yacc.c:1646 */ +#line 2949 "parse_y.c" /* yacc.c:1646 */ break; case 207: -#line 2041 "parse_y.y" /* yacc.c:1646 */ +#line 2043 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number)) / 100.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2953 "parse_y.c" /* yacc.c:1646 */ +#line 2955 "parse_y.c" /* yacc.c:1646 */ break; case 208: -#line 2042 "parse_y.y" /* yacc.c:1646 */ +#line 2044 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number))); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2959 "parse_y.c" /* yacc.c:1646 */ +#line 2961 "parse_y.c" /* yacc.c:1646 */ break; case 209: -#line 2043 "parse_y.y" /* yacc.c:1646 */ +#line 2045 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_INCH_TO_COORD ((yyvsp[-1].number))); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2965 "parse_y.c" /* yacc.c:1646 */ +#line 2967 "parse_y.c" /* yacc.c:1646 */ break; case 210: -#line 2044 "parse_y.y" /* yacc.c:1646 */ +#line 2046 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) / 1000000.0); pcb_io_pcb_usty_seen |= PCB_USTY_NANOMETER; } -#line 2971 "parse_y.c" /* yacc.c:1646 */ +#line 2973 "parse_y.c" /* yacc.c:1646 */ break; case 211: -#line 2045 "parse_y.y" /* yacc.c:1646 */ +#line 2047 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) / 1000.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2977 "parse_y.c" /* yacc.c:1646 */ +#line 2979 "parse_y.c" /* yacc.c:1646 */ break; case 212: -#line 2046 "parse_y.y" /* yacc.c:1646 */ +#line 2048 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number))); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2983 "parse_y.c" /* yacc.c:1646 */ +#line 2985 "parse_y.c" /* yacc.c:1646 */ break; case 213: -#line 2047 "parse_y.y" /* yacc.c:1646 */ +#line 2049 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) * 1000.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2989 "parse_y.c" /* yacc.c:1646 */ +#line 2991 "parse_y.c" /* yacc.c:1646 */ break; case 214: -#line 2048 "parse_y.y" /* yacc.c:1646 */ +#line 2050 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) * 1000000.0); pcb_io_pcb_usty_seen |= PCB_USTY_UNITS; } -#line 2995 "parse_y.c" /* yacc.c:1646 */ +#line 2997 "parse_y.c" /* yacc.c:1646 */ break; -#line 2999 "parse_y.c" /* yacc.c:1646 */ +#line 3001 "parse_y.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -3223,7 +3225,7 @@ #endif return yyresult; } -#line 2051 "parse_y.y" /* yacc.c:1906 */ +#line 2053 "parse_y.y" /* yacc.c:1906 */ /* --------------------------------------------------------------------------- Index: trunk/src_plugins/io_pcb/parse_y.y =================================================================== --- trunk/src_plugins/io_pcb/parse_y.y (revision 16173) +++ trunk/src_plugins/io_pcb/parse_y.y (revision 16174) @@ -902,7 +902,9 @@ YYABORT; } Layer = &yyData->Layer[$3-1]; - Layer->parent = yyData; + Layer->parent.data = yyData; + Layer->parent_type = PCB_PARENT_DATA; + Layer->type = PCB_OBJ_LAYER; /* memory for name is already allocated */ if (Layer->name != NULL) @@ -943,7 +945,7 @@ | text_hi_format | text_newformat | text_oldformat - | { attr_list = & Layer->meta.real.Attributes; } attribute + | { attr_list = & Layer->Attributes; } attribute | polygon_format /* %start-doc pcbfile Line Index: trunk/src_plugins/lib_compat_help/subc_help.c =================================================================== --- trunk/src_plugins/lib_compat_help/subc_help.c (revision 16173) +++ trunk/src_plugins/lib_compat_help/subc_help.c (revision 16174) @@ -64,7 +64,9 @@ sc->data->Layer[n].comb = comb; sc->data->Layer[n].is_bound = 1; sc->data->Layer[n].meta.bound.type = lyt; - sc->data->Layer[n].parent = sc->data; + sc->data->Layer[n].parent.data = sc->data; + sc->data->Layer[n].parent_type = PCB_PARENT_DATA; + sc->data->Layer[n].type = PCB_OBJ_LAYER; return &sc->data->Layer[n]; } Index: trunk/src_plugins/lib_gtk_common/dlg_propedit.c =================================================================== --- trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 16173) +++ trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 16174) @@ -325,7 +325,9 @@ preview_pcb.LayerGroups.grp[0].len = 1; preview_pcb.LayerGroups.len = 1; PCB_SET_PARENT(preview_pcb.Data, board, &preview_pcb); - preview_pcb.Data->Layer[0].parent = preview_pcb.Data; + preview_pcb.Data->Layer[0].parent.data = preview_pcb.Data; + preview_pcb.Data->Layer[0].parent_type = PCB_PARENT_DATA; + preview_pcb.Data->Layer[0].type = PCB_OBJ_LAYER; #warning TODO: preview_pcb is never freed Index: trunk/src_plugins/millpath/toolpath.c =================================================================== --- trunk/src_plugins/millpath/toolpath.c (revision 16173) +++ trunk/src_plugins/millpath/toolpath.c (revision 16174) @@ -213,7 +213,7 @@ int pcb_tlp_mill_copper_layer(pcb_tlp_session_t *result, pcb_layer_t *layer) { - pcb_board_t *pcb = pcb_data_get_top(layer->parent); + pcb_board_t *pcb = pcb_data_get_top(layer->parent.data); setup_ui_layers(pcb, result, layer); setup_remove_poly(pcb, result, layer); Index: trunk/src_plugins/query/query_access.c =================================================================== --- trunk/src_plugins/query/query_access.c (revision 16173) +++ trunk/src_plugins/query/query_access.c (revision 16174) @@ -242,7 +242,7 @@ if (fh1 == query_fields_a) { const char *s2; fld2str_req(s2, fld, 1); - PCB_QRY_RET_STR(res, pcb_attribute_get(&l->meta.real.Attributes, s2)); + PCB_QRY_RET_STR(res, pcb_attribute_get(&l->Attributes, s2)); } if (fld->next != NULL)