Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 6116) +++ trunk/src/crosshair.c (revision 6117) @@ -282,7 +282,7 @@ y = pcb_crosshair.Y - Buffer->Y; /* draw all visible layers */ - for (i = 0; i < pcb_max_copper_layer + 2; i++) + for (i = 0; i < pcb_max_layer; i++) if (PCB->Data->Layer[i].On) { pcb_layer_t *layer = &Buffer->Data->Layer[i]; @@ -763,7 +763,7 @@ info.X = X; info.Y = Y; - for (i = 0; i < pcb_max_copper_layer; i++) { + 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) Index: trunk/src/search.c =================================================================== --- trunk/src/search.c (revision 6116) +++ trunk/src/search.c (revision 6117) @@ -1091,11 +1091,15 @@ HigherAvail = PCB_TYPE_ELEMENT; } - for (i = -1; i < pcb_max_copper_layer + 1; i++) { + for (i = -1; i < pcb_max_layer + 1; i++) { +#warning layer TODO: remove these hacks with special i values and make the loop go by groups + if (pcb_layer_flags(i) & PCB_LYT_SILK) /* special order for now: silks are i=-1 and i=max+1 */ + continue; if (i < 0) SearchLayer = &PCB->Data->SILKLAYER; - else if (i < pcb_max_copper_layer) + else if (i < pcb_max_layer) SearchLayer = LAYER_ON_STACK(i); + else { SearchLayer = &PCB->Data->BACKSILKLAYER; if (!PCB->InvisibleObjectsOn) Index: trunk/src/select.c =================================================================== --- trunk/src/select.c (revision 6116) +++ trunk/src/select.c (revision 6117) @@ -296,8 +296,9 @@ PCB_END_LOOP; /* check layers */ - LAYER_LOOP(PCB->Data, pcb_max_copper_layer + 2); + LAYER_LOOP(PCB->Data, pcb_max_layer); { +#warning layer TODO: replace this with flag checks if (layer == &PCB->Data->SILKLAYER) { if (!(PCB->ElementOn || !Flag)) continue;