Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 19182) +++ trunk/src/layer_grp.c (revision 19183) @@ -622,6 +622,20 @@ return used; } +int pcb_layergrp_listp(pcb_board_t *pcb, pcb_layer_type_t mask, pcb_layergrp_id_t *res, int res_len, int purpi, const char *purpose) +{ + int group, used = 0; + pcb_layergrp_t *g; + for (group = 0, g = pcb->LayerGroups.grp; group < pcb->LayerGroups.len; group++,g++) { + if ((pcb_layergrp_flags(pcb, group) & mask) == mask) { + if (((purpose == NULL) || (strcmp(purpose, g->purpose) == 0)) && ((purpi == -1) || (purpi == g->purpi))) { + APPEND(group); + } + } + } + return used; +} + int pcb_layergrp_list_any(pcb_board_t *pcb, pcb_layer_type_t mask, pcb_layergrp_id_t *res, int res_len) { int group, used = 0; Index: trunk/src/layer_grp.h =================================================================== --- trunk/src/layer_grp.h (revision 19182) +++ trunk/src/layer_grp.h (revision 19183) @@ -103,6 +103,7 @@ /* Same as pcb_layer_list but lists layer groups. A group is matching if any layer in that group matches mask. */ int pcb_layergrp_list(pcb_board_t *pcb, pcb_layer_type_t mask, pcb_layergrp_id_t *res, int res_len); +int pcb_layergrp_listp(pcb_board_t *pcb, pcb_layer_type_t mask, pcb_layergrp_id_t *res, int res_len, int purpi, const char *purpose); int pcb_layergrp_list_any(pcb_board_t *pcb, pcb_layer_type_t mask, pcb_layergrp_id_t *res, int res_len); /* Put a layer in a group (the layer should not be in any other group);