Index: src/gpcb-menu.res =================================================================== --- src/gpcb-menu.res (revision 937) +++ src/gpcb-menu.res (revision 938) @@ -62,6 +62,7 @@ {" a single element" GetXY(Click to set the element mark <>) Save(ElementConnections)} {" all elements" Save(AllConnections)} {" unused pins" Save(AllUnusedPins)} + {" netlist patch for back annotation" SavePatch() a={"Alt-Ctrl-B" "Alt Ctrlb"}} } - {"Print layout..." Print()} Index: src/netlist.c =================================================================== --- src/netlist.c (revision 937) +++ src/netlist.c (revision 938) @@ -605,6 +605,58 @@ return 0; } + +static const char savepatch_syntax[] = + "SavePatch(filename)"; + +static const char savepatch_help[] = "Save netlist patch for back annotation."; + +/* %start-doc actions SavePatch +Save netlist patch for back annotation. +%end-doc */ +static int +SavePatch (int argc, char **argv, Coord x, Coord y) +{ + const char *fn; + FILE *f; + + if (argc < 1) { + char *default_file; + + if (PCB->Filename != NULL) { + char *end; + int len; + len = strlen(PCB->Filename); + default_file = malloc(len+8); + memcpy(default_file, PCB->Filename, len+1); + end = strrchr(default_file, '.'); + if ((end == NULL) || (strcasecmp(end, ".pcb") != 0)) + end = default_file+len; + strcpy(end, ".bap"); + } + else + default_file = strdup("unnamed.bap"); + + fn = gui->fileselect (_("Save netlist patch as ..."), + _("Choose a file to save netlist patch to\n" + "for back annotation\n"), + default_file, ".bap", "patch", + 0); + + free(default_file); + } + else + fn = argv[0]; + f = fopen(fn, "w"); + if (f == NULL) { + Message("Can't open netlist patch file %s for writing\n", fn); + return 1; + } + rats_patch_fexport(PCB, f, 0); + fclose(f); + return 0; +} + HID_Action netlist_action_list[] = { {"net", 0, Netlist, netlist_help, netlist_syntax} @@ -611,6 +663,10 @@ , {"netlist", 0, Netlist, netlist_help, netlist_syntax} + , + + {"SavePatch", 0, SavePatch, + savepatch_help, savepatch_syntax} }; REGISTER_ACTIONS (netlist_action_list)