Index: src/find.c =================================================================== --- src/find.c (revision 20) +++ src/find.c (revision 21) @@ -1039,8 +1039,30 @@ save_place = PVList.Location; while (PVList.Location < PVList.Number) { + int ic; + PinType *orig_pin; /* get pointer to data */ - info.pv = *(PVLIST_ENTRY (PVList.Location)); + orig_pin = (PVLIST_ENTRY (PVList.Location)); + info.pv = *orig_pin; + + /* Internal connection: if pins in the same element have the same + internal connection group number, they are connected */ + ic = GET_INTCONN(orig_pin); + if ((info.pv.Element != NULL) && (ic > 0)) { + ElementType *e = info.pv.Element; + printf("Looking for intconn:\n"); + PIN_LOOP (e); + { + if ((orig_pin != pin) && (ic == GET_INTCONN(pin))) { + printf(" FOUND!\n"); + if (!TEST_FLAG (TheFlag, pin)) + ADD_PV_TO_LIST (pin); + } + } + END_LOOP; + } + + EXPAND_BOUNDS (&info.pv); if (setjmp (info.env) == 0) r_search (PCB->Data->via_tree, (BoxType *) & info.pv, NULL, Index: src/macro.h =================================================================== --- src/macro.h (revision 20) +++ src/macro.h (revision 21) @@ -124,6 +124,8 @@ #define ASSIGN_SQUARE(V,P) (P)->Flags.q = V +#define GET_INTCONN(P) ((P)->Flags.int_conn_grp) + extern int mem_any_set (unsigned char *, int); #define TEST_ANY_THERMS(P) mem_any_set((P)->Flags.t, sizeof((P)->Flags.t))