Index: trunk/src/funchash_core_list.h =================================================================== --- trunk/src/funchash_core_list.h (revision 31055) +++ trunk/src/funchash_core_list.h (revision 31056) @@ -79,6 +79,7 @@ action_entry(Next) action_entry(Normalize) action_entry(Notify) +action_entry(NoAllRats) action_entry(NoRats) action_entry(Object) action_entry(Off) Index: trunk/src/netlist_act.c =================================================================== --- trunk/src/netlist_act.c (revision 31055) +++ trunk/src/netlist_act.c (revision 31056) @@ -181,6 +181,33 @@ pcb_netlist_changed(0); } +static void allrats(int val) +{ + htsp_entry_t *e; + int chg = 0; + for(e = htsp_first(&PCB->netlist[PCB_NETLIST_EDITED]); e != NULL; e = htsp_next(&PCB->netlist[PCB_NETLIST_EDITED], e)) { + pcb_net_t *n = e->value; + if ((n != NULL) && (n->inhibit_rats != val)) { + n->inhibit_rats = val; + chg = 1; + } + } + if (chg) + pcb_netlist_changed(0); +} + +static int pcb_netlist_allrats() +{ + allrats(0); + return 0; +} + +static int pcb_netlist_noallrats() +{ + allrats(1); + return 0; +} + /* The primary purpose of this action is to remove the netlist completely so that a new one can be loaded, usually via a gsch2pcb style script. */ @@ -399,6 +426,8 @@ case F_Unselect: func = pcb_netlist_unselect; break; case F_Rats: func = pcb_netlist_rats; break; case F_NoRats: func = pcb_netlist_norats; break; + case F_AllRats: return pcb_netlist_allrats(); + case F_NoAllRats: return pcb_netlist_noallrats(); case F_AddRats: func = pcb_netlist_addrats; break; case F_Style: func = (NFunc) pcb_netlist_style; break; case F_Ripup: func = pcb_netlist_ripup; break;