Index: trunk/src/flag_str.c =================================================================== --- trunk/src/flag_str.c (revision 18124) +++ trunk/src/flag_str.c (revision 18125) @@ -561,6 +561,17 @@ return NULL; } +const pcb_flag_bits_t *pcb_strflg_name(const char *name, int object_type) +{ + int i, n_flagbits = PCB_ENTRIES(pcb_object_flagbits);; + for (i = 0; i < n_flagbits; i++) { + unsigned long my_obj_typs = pcb_object_flagbits[i].object_types; + if ((my_obj_typs & object_type) && (!pcb_object_flagbits[i].omit_list) && (strcmp(pcb_object_flagbits[i].name, name) == 0)) + return &pcb_object_flagbits[i]; + } + return NULL; +} + void pcb_strflg_map(unsigned long fbits, int object_type, void *ctx, void (*cb)(void *ctx, unsigned long flg, const pcb_flag_bits_t *fb)) { int n, i, n_flagbits = PCB_ENTRIES(pcb_object_flagbits); Index: trunk/src/flag_str.h =================================================================== --- trunk/src/flag_str.h (revision 18124) +++ trunk/src/flag_str.h (revision 18125) @@ -82,9 +82,11 @@ /* Call cb for each flag bit for a given object type */ void pcb_strflg_map(unsigned long fbits, int object_type, void *ctx, void (*cb)(void *ctx, unsigned long flg, const pcb_flag_bits_t *fb)); -/* Return flag bit info for a single bit for an object type, or NULL is not available */ +/* Return flag bit info for a single bit for an object type, or NULL is not available - slow linear search */ const pcb_flag_bits_t *pcb_strflg_1bit(unsigned long bit, int object_type); +/* Return flag bit info by flag name for an object type, or NULL is not available - slow linear search */ +const pcb_flag_bits_t *pcb_strflg_name(const char *name, int object_type); /* same as above, for pcb level flags */ char *pcb_strflg_board_f2s(pcb_flag_t flags);