Index: trunk/src/search.c =================================================================== --- trunk/src/search.c (revision 17097) +++ trunk/src/search.c (revision 17098) @@ -1435,6 +1435,28 @@ return res; } +int pcb_search_obj_by_id_buf2(pcb_data_t *Base, void **Result1, void **Result2, void **Result3, int ID, int type) +{ + int bid = 0; + long res; + + res = pcb_search_obj_by_id_(Base, Result1, Result2, Result3, ID, type); + if (res != PCB_OBJ_VOID) + return res; + + while(res == PCB_OBJ_VOID) { + res = pcb_search_obj_by_id_(pcb_buffers[bid].Data, Result1, Result2, Result3, ID, type); + if (res != PCB_OBJ_VOID) + return res; + bid++; + if (bid >= PCB_MAX_BUFFER) + break; + } + + pcb_message(PCB_MSG_ERROR, "hace: Internal error, search for ID %d failed\n", ID); + return PCB_OBJ_VOID; +} + /* --------------------------------------------------------------------------- * searches the cursor position for the type */ Index: trunk/src/search.h =================================================================== --- trunk/src/search.h (revision 17097) +++ trunk/src/search.h (revision 17098) @@ -188,5 +188,8 @@ int pcb_search_obj_by_location(unsigned long Type, void **Result1, void **Result2, void **Result3, pcb_coord_t X, pcb_coord_t Y, pcb_coord_t Radius); int pcb_search_obj_by_id(pcb_data_t *Base, void **Result1, void **Result2, void **Result3, int ID, int type); +/* Same as pcb_search_obj_by_id, but search in buffers too */ +int pcb_search_obj_by_id_buf2(pcb_data_t *Base, void **Result1, void **Result2, void **Result3, int ID, int type); + #endif