Index: write.c =================================================================== --- write.c (revision 27332) +++ write.c (revision 27333) @@ -663,9 +663,9 @@ } } -int io_kicad_legacy_write_buffer_subc(pcb_plug_io_t *ctx, FILE *FP, pcb_buffer_t *buff, long idx) +int io_kicad_legacy_write_buffer_subc(pcb_plug_io_t *ctx, FILE *FP, pcb_buffer_t *buff, long subc_idx) { - if (idx != 0) { + if (subc_idx != 0) { pcb_message(PCB_MSG_ERROR, "Only the first subcircuit can be saved at the moment\n"); return -1; } @@ -681,7 +681,7 @@ io_kicad_legacy_write_subc_index(FP, buff->Data); fputs("$EndINDEX\n", FP); - pcb_write_footprint_data(FP, buff->Data, "kicadl"); + pcb_write_footprint_data(FP, buff->Data, "kicadl", subc_idx); return 0; } @@ -1041,7 +1041,7 @@ return 0; } -int io_kicad_legacy_write_element(pcb_plug_io_t *ctx, FILE *FP, pcb_data_t *Data) +int io_kicad_legacy_write_element(pcb_plug_io_t *ctx, FILE *FP, pcb_data_t *Data, long subc_idx) { gdl_iterator_t sit; pcb_subc_t *subc; @@ -1050,8 +1050,10 @@ unm_init(&group1); subclist_foreach(&Data->subc, &sit, subc) { - const char *uname = unm_name(&group1, or_empty(pcb_attribute_get(&subc->Attributes, "footprint")), subc); - res |= io_kicad_legacy_write_subc(FP, PCB, subc, 0, 0, uname); + if ((subc_idx == -1) || (subc_idx == sit.count)) { + const char *uname = unm_name(&group1, or_empty(pcb_attribute_get(&subc->Attributes, "footprint")), subc); + res |= io_kicad_legacy_write_subc(FP, PCB, subc, 0, 0, uname); + } } unm_uninit(&group1); Index: write.h =================================================================== --- write.h (revision 27332) +++ write.h (revision 27333) @@ -30,6 +30,6 @@ #include #include "data.h" -int io_kicad_legacy_write_element(pcb_plug_io_t *ctx, FILE *FP, pcb_data_t *Data); +int io_kicad_legacy_write_element(pcb_plug_io_t *ctx, FILE *FP, pcb_data_t *Data, long subc_idx); int io_kicad_legacy_write_buffer_subc(pcb_plug_io_t *ctx, FILE *FP, pcb_buffer_t *buff, long idx); int io_kicad_legacy_write_pcb(pcb_plug_io_t *ctx, FILE *FP, const char *old_filename, const char *new_filename, pcb_bool emergency);