Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 5389) +++ trunk/src/draw.c (revision 5390) @@ -176,9 +176,9 @@ int i, ngroups, side; int component, solder; /* This is the list of layer groups we will draw. */ - int do_group[PCB_MAX_LAYER]; + int do_group[PCB_MAX_LAYERGRP]; /* This is the reverse of the order in which we draw them. */ - int drawn_groups[PCB_MAX_LAYER]; + int drawn_groups[PCB_MAX_LAYERGRP]; pcb_bool paste_empty; Index: trunk/src/globalconst.h =================================================================== --- trunk/src/globalconst.h (revision 5389) +++ trunk/src/globalconst.h (revision 5390) @@ -47,6 +47,12 @@ #define PCB_LARGE_VALUE (COORD_MAX / 2 - 1) /* maximum extent of board and elements */ #define PCB_MAX_LAYER 16 /* max number of layer, check source code for more changes, a *lot* more changes */ +#if 0 +/* new array size that allows substrate layers */ +# define PCB_MAX_LAYERGRP ((PCB_MAX_LAYER+4)*2) /* max number of layer groups, a.k.a. physical layers */ +#else +# define PCB_MAX_LAYERGRP PCB_MAX_LAYER /* max number of layer groups, a.k.a. physical layers */ +#endif #define PCB_MIN_LINESIZE PCB_MIL_TO_COORD(0.01) /* thickness of lines */ #define PCB_MAX_LINESIZE PCB_LARGE_VALUE #define PCB_MIN_ARCSIZE PCB_MIL_TO_COORD(0.01) Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 5389) +++ trunk/src/layer.c (revision 5390) @@ -96,7 +96,7 @@ int group, member, layer; pcb_bool c_set = pcb_false, /* flags for the two special layers to */ s_set = pcb_false; /* provide a default setting for old formats */ - int groupnum[PCB_MAX_LAYER + 2]; + int groupnum[PCB_MAX_LAYERGRP + 2]; /* clear struct */ memset(LayerGroup, 0, sizeof(pcb_layer_group_t)); @@ -722,7 +722,7 @@ } /* reset layer groups */ - for(n = 0; n < PCB_MAX_LAYER; n++) + for(n = 0; n < PCB_MAX_LAYERGRP; n++) PCB->LayerGroups.Number[n] = 0; /* set up one copper layer on top and one on bottom */ @@ -779,7 +779,7 @@ case PCB_LYT_TOP: return COMPONENT_LAYER; case PCB_LYT_BOTTOM: return SOLDER_LAYER; case PCB_LYT_INTERN: - for(grp = 2; grp < PCB_MAX_LAYER; grp++) { + for(grp = 2; grp < PCB_MAX_LAYERGRP; grp++) { if (PCB->LayerGroups.Number[grp] > 0) { id = PCB->LayerGroups.Entries[grp][0]; if (strcmp(PCB->Data->Layer[id].Name, "outline") != 0) @@ -791,7 +791,7 @@ break; case PCB_LYT_OUTLINE: - for(grp = 2; grp < PCB_MAX_LAYER; grp++) { + for(grp = 2; grp < PCB_MAX_LAYERGRP; grp++) { if (PCB->LayerGroups.Number[grp] > 0) { id = PCB->LayerGroups.Entries[grp][0]; if (strcmp(PCB->Data->Layer[id].Name, "outline") == 0) @@ -851,7 +851,7 @@ abort(); /* can't get here */ case PCB_LYT_INTERN: /* find the first internal layer */ - for(found = 0, grp = 2; grp < PCB_MAX_LAYER; grp++) { + for(found = 0, grp = 2; grp < PCB_MAX_LAYERGRP; grp++) { if (PCB->LayerGroups.Number[grp] > 0) { id = PCB->LayerGroups.Entries[grp][0]; if (strcmp(PCB->Data->Layer[id].Name, "outline") != 0) { @@ -872,10 +872,10 @@ if (grp < 0) { /* Also need to create a group */ - for(grp = 0; grp < PCB_MAX_LAYER; grp++) + for(grp = 0; grp < PCB_MAX_LAYERGRP; grp++) if (PCB->LayerGroups.Number[grp] == 0) break; - if (grp >= PCB_MAX_LAYER) + if (grp >= PCB_MAX_LAYERGRP) return -2; } @@ -1018,7 +1018,7 @@ int pcb_layer_move(pcb_layer_id_t old_index, pcb_layer_id_t new_index) { - int groups[PCB_MAX_LAYER + 2], l, g; + int groups[PCB_MAX_LAYERGRP + 2], l, g; pcb_layer_t saved_layer; int saved_group; @@ -1046,10 +1046,10 @@ return 1; } - for (g = 0; g < PCB_MAX_LAYER + 2; g++) + for (g = 0; g < PCB_MAX_LAYERGRP + 2; g++) groups[g] = -1; - for (g = 0; g < PCB_MAX_LAYER; g++) + for (g = 0; g < PCB_MAX_LAYERGRP; g++) for (l = 0; l < PCB->LayerGroups.Number[g]; l++) groups[PCB->LayerGroups.Entries[g][l]] = g; @@ -1107,7 +1107,7 @@ move_all_thermals(old_index, new_index); - for (g = 0; g < PCB_MAX_LAYER; g++) + for (g = 0; g < PCB_MAX_LAYERGRP; g++) PCB->LayerGroups.Number[g] = 0; for (l = 0; l < pcb_max_copper_layer + 2; l++) { int i; @@ -1118,12 +1118,12 @@ } } - for (g = 0; g < PCB_MAX_LAYER; g++) + for (g = 0; g < PCB_MAX_LAYERGRP; g++) if (PCB->LayerGroups.Number[g] == 0) { memmove(&PCB->LayerGroups.Number[g], - &PCB->LayerGroups.Number[g + 1], (PCB_MAX_LAYER - g - 1) * sizeof(PCB->LayerGroups.Number[g])); + &PCB->LayerGroups.Number[g + 1], (PCB_MAX_LAYERGRP - g - 1) * sizeof(PCB->LayerGroups.Number[g])); memmove(&PCB->LayerGroups.Entries[g], - &PCB->LayerGroups.Entries[g + 1], (PCB_MAX_LAYER - g - 1) * sizeof(PCB->LayerGroups.Entries[g])); + &PCB->LayerGroups.Entries[g + 1], (PCB_MAX_LAYERGRP - g - 1) * sizeof(PCB->LayerGroups.Entries[g])); } pcb_hid_action("LayersChanged"); Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 5389) +++ trunk/src/layer.h (revision 5390) @@ -38,8 +38,8 @@ * on/off together. */ struct pcb_layer_group_s { - pcb_cardinal_t Number[PCB_MAX_LAYER], /* number of entries per groups */ - Entries[PCB_MAX_LAYER][PCB_MAX_LAYER + 2]; + pcb_cardinal_t Number[PCB_MAX_LAYERGRP], /* number of entries per groups */ + Entries[PCB_MAX_LAYERGRP][PCB_MAX_LAYER + 2]; }; struct pcb_layer_s { /* holds information about one layer */ Index: trunk/src_plugins/autoroute/autoroute.c =================================================================== --- trunk/src_plugins/autoroute/autoroute.c (revision 5389) +++ trunk/src_plugins/autoroute/autoroute.c (revision 5390) @@ -298,7 +298,7 @@ typedef struct routedata { int max_styles; /* one rtree per layer *group */ - pcb_rtree_t *layergrouptree[PCB_MAX_LAYER]; /* no silkscreen layers here =) */ + pcb_rtree_t *layergrouptree[PCB_MAX_LAYERGRP]; /* no silkscreen layers here =) */ /* root pointer into connectivity information */ routebox_t *first_net; /* default routing style */ @@ -400,9 +400,9 @@ */ /* group number of groups that hold surface mount pads */ static pcb_cardinal_t front, back; -static pcb_bool usedGroup[PCB_MAX_LAYER]; -static int x_cost[PCB_MAX_LAYER], y_cost[PCB_MAX_LAYER]; -static pcb_bool is_layer_group_active[PCB_MAX_LAYER]; +static pcb_bool usedGroup[PCB_MAX_LAYERGRP]; +static int x_cost[PCB_MAX_LAYERGRP], y_cost[PCB_MAX_LAYERGRP]; +static pcb_bool is_layer_group_active[PCB_MAX_LAYERGRP]; static int ro = 0; static int smoothes = 1; static int passes = 12; @@ -850,7 +850,7 @@ static routedata_t *CreateRouteData() { pcb_netlist_list_t Nets; - vtptr_t layergroupboxes[PCB_MAX_LAYER]; + vtptr_t layergroupboxes[PCB_MAX_LAYERGRP]; pcb_box_t bbox; routedata_t *rd; int group, i; Index: trunk/src_plugins/djopt/djopt.c =================================================================== --- trunk/src_plugins/djopt/djopt.c (revision 5389) +++ trunk/src_plugins/djopt/djopt.c (revision 5390) @@ -109,7 +109,7 @@ static corner_s *corners, *next_corner = 0; static line_s *lines; -static int layer_groupings[PCB_MAX_LAYER]; +static int layer_groupings[PCB_MAX_LAYERGRP]; static char layer_type[PCB_MAX_LAYER]; #define LT_COMPONENT 1 #define LT_SOLDER 2 Index: trunk/src_plugins/export_bboard/bboard.c =================================================================== --- trunk/src_plugins/export_bboard/bboard.c (revision 5389) +++ trunk/src_plugins/export_bboard/bboard.c (revision 5390) @@ -83,7 +83,7 @@ float z_offset; int solder; int component; -} group_data[PCB_MAX_LAYER]; +} group_data[PCB_MAX_LAYERGRP]; #define HA_bboardfile 0 Index: trunk/src_plugins/export_gcode/gcode.c =================================================================== --- trunk/src_plugins/export_gcode/gcode.c (revision 5389) +++ trunk/src_plugins/export_gcode/gcode.c (revision 5390) @@ -109,7 +109,7 @@ * Which groups of layers to export into PNG layer masks. 1 means export, 0 * means do not export. */ -static int gcode_export_group[PCB_MAX_LAYER]; +static int gcode_export_group[PCB_MAX_LAYERGRP]; /* Group that is currently exported. */ static int gcode_cur_group; @@ -400,7 +400,7 @@ : PCB_INCH_TO_COORD(options[HA_toolradius].real_value * scale); gcode_choose_groups(); - for (i = 0; i < PCB_MAX_LAYER; i++) { + for (i = 0; i < PCB_MAX_LAYERGRP; i++) { if (gcode_export_group[i]) { gcode_cur_group = i; Index: trunk/src_plugins/export_gerber/gerber.c =================================================================== --- trunk/src_plugins/export_gerber/gerber.c (revision 5389) +++ trunk/src_plugins/export_gerber/gerber.c (revision 5390) @@ -277,7 +277,7 @@ static int lastgroup = -1; static int lastcap = -1; static int lastcolor = -1; -static int print_group[PCB_MAX_LAYER]; +static int print_group[PCB_MAX_LAYERGRP]; static int print_layer[PCB_MAX_LAYER]; static int lastX, lastY; /* the last X and Y coordinate */ Index: trunk/src_plugins/export_nelma/nelma.c =================================================================== --- trunk/src_plugins/export_nelma/nelma.c (revision 5389) +++ trunk/src_plugins/export_nelma/nelma.c (revision 5390) @@ -123,7 +123,7 @@ * Which groups of layers to export into PNG layer masks. 1 means export, 0 * means do not export. */ -static int nelma_export_group[PCB_MAX_LAYER]; +static int nelma_export_group[PCB_MAX_LAYERGRP]; /* Group that is currently exported. */ static int nelma_cur_group; @@ -257,7 +257,7 @@ fprintf(out, "\t\t\"air-bottom\""); z = 10; - for (i = 0; i < PCB_MAX_LAYER; i++) + for (i = 0; i < PCB_MAX_LAYERGRP; i++) if (nelma_export_group[i]) { idx = (i >= 0 && i < pcb_max_group) ? PCB->LayerGroups.Entries[i][0] : i; ext = pcb_layer_type_to_file_name(idx, PCB_FNS_fixed); @@ -322,7 +322,7 @@ /* pcb_pin_name_to_xy(pin, &x, &y); */ - for (i = 0; i < PCB_MAX_LAYER; i++) + for (i = 0; i < PCB_MAX_LAYERGRP; i++) if (nelma_export_group[i]) { idx = (i >= 0 && i < pcb_max_group) ? PCB->LayerGroups.Entries[i][0] : i; ext = pcb_layer_type_to_file_name(idx, PCB_FNS_fixed); @@ -393,7 +393,7 @@ nelma_write_layer(out, 1000, 2 * subh, "air-bottom", 0, "air"); z = 10; - for (i = 0; i < PCB_MAX_LAYER; i++) + for (i = 0; i < PCB_MAX_LAYERGRP; i++) if (nelma_export_group[i]) { idx = (i >= 0 && i < pcb_max_group) ? PCB->LayerGroups.Entries[i][0] : i; ext = pcb_layer_type_to_file_name(idx, PCB_FNS_fixed); @@ -427,7 +427,7 @@ x = pcb_to_nelma(px); y = pcb_to_nelma(py); - for (i = 0; i < PCB_MAX_LAYER; i++) + for (i = 0; i < PCB_MAX_LAYERGRP; i++) if (nelma_export_group[i]) { idx = (i >= 0 && i < pcb_max_group) ? PCB->LayerGroups.Entries[i][0] : i; ext = pcb_layer_type_to_file_name(idx, PCB_FNS_fixed); @@ -626,7 +626,7 @@ nelma_choose_groups(); - for (i = 0; i < PCB_MAX_LAYER; i++) { + for (i = 0; i < PCB_MAX_LAYERGRP; i++) { if (nelma_export_group[i]) { nelma_cur_group = i; Index: trunk/src_plugins/export_openscad/scad.c =================================================================== --- trunk/src_plugins/export_openscad/scad.c (revision 5389) +++ trunk/src_plugins/export_openscad/scad.c (revision 5390) @@ -120,7 +120,7 @@ float z_offset; int solder; int component; -} group_data[PCB_MAX_LAYER]; +} group_data[PCB_MAX_LAYERGRP]; #define HA_scadfile 0 Index: trunk/src_plugins/export_png/png.c =================================================================== --- trunk/src_plugins/export_png/png.c (revision 5389) +++ trunk/src_plugins/export_png/png.c (revision 5390) @@ -112,7 +112,7 @@ static int lastgroup = -1; static gdImagePtr lastbrush = (gdImagePtr) ((void *) -1); static int lastcap = -1; -static int print_group[PCB_MAX_LAYER]; +static int print_group[PCB_MAX_LAYERGRP]; static int print_layer[PCB_MAX_LAYER]; /* For photo-mode we need the following layers as monochrome masks: @@ -130,7 +130,7 @@ static gdImagePtr photo_copper[PCB_MAX_LAYER + 2]; static gdImagePtr photo_silk, photo_mask, photo_drill, *photo_im; static gdImagePtr photo_outline; -static int photo_groups[PCB_MAX_LAYER + 2], photo_ngroups; +static int photo_groups[PCB_MAX_LAYERGRP + 2], photo_ngroups; static int photo_has_inners; static int doing_outline, have_outline; Index: trunk/src_plugins/export_ps/eps.c =================================================================== --- trunk/src_plugins/export_ps/eps.c (revision 5389) +++ trunk/src_plugins/export_ps/eps.c (revision 5390) @@ -62,7 +62,7 @@ static pcb_coord_t linewidth = -1; static int lastcap = -1; static int lastcolor = -1; -static int print_group[PCB_MAX_LAYER]; +static int print_group[PCB_MAX_LAYERGRP]; static int print_layer[PCB_MAX_LAYER]; static int fast_erase = -1; Index: trunk/src_plugins/export_ps/ps.c =================================================================== --- trunk/src_plugins/export_ps/ps.c (revision 5389) +++ trunk/src_plugins/export_ps/ps.c (revision 5390) @@ -379,7 +379,7 @@ FILE *f; int pagecount; pcb_coord_t linewidth; - pcb_bool print_group[PCB_MAX_LAYER]; + pcb_bool print_group[PCB_MAX_LAYERGRP]; pcb_bool print_layer[PCB_MAX_LAYER]; double fade_ratio; pcb_bool multi_file; Index: trunk/src_plugins/export_stat/stat.c =================================================================== --- trunk/src_plugins/export_stat/stat.c (revision 5389) +++ trunk/src_plugins/export_stat/stat.c (revision 5390) @@ -125,8 +125,8 @@ int i, lid, lgid; char buff[1024]; time_t t; - layer_stat_t ls, *lgs, lgss[PCB_MAX_LAYER]; - int nl, phg, hp, hup, group_not_empty[PCB_MAX_LAYER]; + layer_stat_t ls, *lgs, lgss[PCB_MAX_LAYERGRP]; + int nl, phg, hp, hup, group_not_empty[PCB_MAX_LAYERGRP]; pcb_cardinal_t num_etop = 0, num_ebottom = 0, num_esmd = 0, num_epads = 0, num_epins = 0; memset(lgss, 0, sizeof(lgss)); Index: trunk/src_plugins/hid_gtk/gui-config.c =================================================================== --- trunk/src_plugins/hid_gtk/gui-config.c (revision 5389) +++ trunk/src_plugins/hid_gtk/gui-config.c (revision 5390) @@ -1184,9 +1184,9 @@ static GtkWidget *config_groups_table, *config_groups_vbox, *config_groups_window; static GtkWidget *layer_entry[PCB_MAX_LAYER]; -static GtkWidget *group_button[PCB_MAX_LAYER + 2][PCB_MAX_LAYER]; +static GtkWidget *group_button[PCB_MAX_LAYERGRP + 2][PCB_MAX_LAYER]; -static gint config_layer_group[PCB_MAX_LAYER + 2]; +static gint config_layer_group[PCB_MAX_LAYERGRP + 2]; static pcb_layer_group_t layer_groups, /* Working copy */ *lg_monitor; /* Keep track if our working copy */