Index: trunk/src/hid_cam.c =================================================================== --- trunk/src/hid_cam.c (revision 19129) +++ trunk/src/hid_cam.c (revision 19130) @@ -51,7 +51,7 @@ return dest; } - v = pcb_vlayer_get_first(flags); + v = pcb_vlayer_get_first(flags, purpose, purpi); if (v != NULL) { strcpy(dest, v->name); return dest; @@ -263,7 +263,8 @@ if (parse_layer_type(curr, &lyt, &offs, &has_offs) != 0) goto err; - vl = pcb_vlayer_get_first(lyt); +#warning TODO: extend the syntax for purpose + vl = pcb_vlayer_get_first(lyt, NULL, -1); if (vl == NULL) { pcb_layergrp_id_t gids[PCB_MAX_LAYERGRP]; int n, len = pcb_layergrp_list(dst->pcb, lyt, gids, sizeof(gids)/sizeof(gids[0])); @@ -322,7 +323,7 @@ if (!cam->active) return 0; - vl = pcb_vlayer_get_first(flags); + vl = pcb_vlayer_get_first(flags, purpose, purpi); if (vl == NULL) { if (group == -1) return 1; Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 19129) +++ trunk/src/layer.c (revision 19130) @@ -119,6 +119,8 @@ } \ } while(0) +#define PURP_MATCH(ps, pi) (((purpi == -1) || (purpi == pi)) && ((purpose == NULL) || (strcmp(purpose, ps) == 0))) + void pcb_layer_free(pcb_layer_t *layer) { if (!layer->is_bound) @@ -345,12 +347,12 @@ APPEND(v->new_id); \ } while(0) -const pcb_virt_layer_t *pcb_vlayer_get_first(pcb_layer_type_t mask) +const pcb_virt_layer_t *pcb_vlayer_get_first(pcb_layer_type_t mask, const char *purpose, int purpi) { const pcb_virt_layer_t *v; mask &= (~PCB_LYT_VIRTUAL); for(v = pcb_virt_layers; v->name != NULL; v++) - if (((v->type & (~PCB_LYT_VIRTUAL)) & mask) == mask) + if ((((v->type & (~PCB_LYT_VIRTUAL)) & mask) == mask) && PURP_MATCH(v->purpose, v->purpi)) return v; return NULL; } @@ -384,7 +386,6 @@ int n, used = 0; pcb_virt_layer_t *v; -#define PURP_MATCH(ps, pi) (((purpi == -1) || (purpi == pi)) && ((purpose == NULL) || (strcmp(purpose, ps) == 0))) for(v = pcb_virt_layers; v->name != NULL; v++) if (((v->type & mask) == mask) && (PURP_MATCH(v->purpose, v->purpi))) Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 19129) +++ trunk/src/layer.h (revision 19130) @@ -346,7 +346,7 @@ extern pcb_virt_layer_t pcb_virt_layers[]; /* Return the first virtual layer that fully matches mask */ -const pcb_virt_layer_t *pcb_vlayer_get_first(pcb_layer_type_t mask); +const pcb_virt_layer_t *pcb_vlayer_get_first(pcb_layer_type_t mask, const char *purpose, int purpi); /* Returns whether the given unsigned int layer flags corresponds to a layer that's on the visible side of the board at the moment. */