Index: src/file.c =================================================================== --- src/file.c (revision 935) +++ src/file.c (revision 936) @@ -731,15 +731,8 @@ WritePCBNetlistPatchData (FILE * FP) { if (PCB->NetlistPatches != NULL) { - rats_patch_line_t *n; fprintf (FP, "NetListPatch()\n(\n"); - for(n = PCB->NetlistPatches; n != NULL; n = n->next) { - switch(n->op) { - case RATP_ADD_CONN: fprintf (FP, "\tadd_conn(\"%s\" \"%s\")\n", n->id, n->arg1.net_name); break; - case RATP_DEL_CONN: fprintf (FP, "\tdel_conn(\"%s\" \"%s\")\n", n->id, n->arg1.net_name); break; - case RATP_CHANGE_ATTRIB: fprintf (FP, "\tchange_attrib(\"%s\" \"%s\" \"%s\")\n", n->id, n->arg1.attrib_name, n->arg2.attrib_val); break; - } - } + rats_patch_fexport(PCB, FP, 1); fprintf (FP, ")\n"); } } Index: src/rats_patch.c =================================================================== --- src/rats_patch.c (revision 935) +++ src/rats_patch.c (revision 936) @@ -242,3 +242,20 @@ return NULL; } + +int rats_patch_fexport(PCBTypePtr pcb, FILE *f, int fmt_pcb) +{ + rats_patch_line_t *n; + const char *q = "\""; + const char *po = '('; + const char *pc = ')'; + const char *line_prefix = "\t"; + + for(n = pcb->NetlistPatches; n != NULL; n = n->next) { + switch(n->op) { + case RATP_ADD_CONN: fprintf(f, "%sadd_conn%c%s%s%s %s%s%s%c\n", line_prefix, po, q, n->id, q, q, n->arg1.net_name, q, pc); break; + case RATP_DEL_CONN: fprintf(f, "%sdel_conn%c%s%s%s %s%s%s%c\n", line_prefix, po, q, n->id, q, q, n->arg1.net_name, q, pc); break; + case RATP_CHANGE_ATTRIB: fprintf(f, "%schange_attrib%c%s%s%s %s%s%s %s%s%s%c\n", line_prefix, po, q, n->id, q, q, n->arg1.attrib_name, q, q, n->arg2.attrib_val, q, pc); break; + } + } +} Index: src/rats_patch.h =================================================================== --- src/rats_patch.h (revision 935) +++ src/rats_patch.h (revision 936) @@ -49,3 +49,7 @@ /* find the net entry for a pin (slow) */ LibraryMenuTypePtr rats_patch_find_net4pin(PCBTypePtr pcb, const char *pin); + +/* save all patch lines as an ordered list of text lines + if fmt is non-zero, generate pcb savefile compatible lines, else generate a back annotation patch */ +int rats_patch_fexport(PCBTypePtr pcb, FILE *f, int fmt_pcb);