Index: trunk/src/plug_io.h =================================================================== --- trunk/src/plug_io.h (revision 27351) +++ trunk/src/plug_io.h (revision 27352) @@ -84,11 +84,6 @@ /* Write the buffer to a file. Return 0 on success. */ int (*write_buffer)(pcb_plug_io_t *ctx, FILE *f, pcb_buffer_t *buff); - /* Write subcircuit(s) from 'e' to a library file. If subc_idx is -1, write - all subcircuits as a library (if the format allows), else write only - th sucb_idxth subcircuit as a footprint. Return 0 on success. */ - int (*write_footprint)(pcb_plug_io_t *ctx, FILE *f, pcb_data_t *e, long subc_idx); - /* Write subcircuit(s): head, 0 or more subcircuits and tail. udata may be initialized by head and free'd by tail. If lib is 1, a library of footprints should be written. Index: trunk/src_plugins/extedit/extedit.c =================================================================== --- trunk/src_plugins/extedit/extedit.c (revision 27351) +++ trunk/src_plugins/extedit/extedit.c (revision 27352) @@ -261,6 +261,9 @@ switch(mth->fmt) { case EEF_LIHATA: { + int res; + void *udata; + f = pcb_fopen(&PCB->hidlib, tmp_fn, "w"); if (f == NULL) { pcb_message(PCB_MSG_ERROR, "Failed to open temporary file\n"); @@ -267,7 +270,13 @@ goto quit1; } - if (io_lihata_write_element(plug_io_lihata_default, f, pcb_buffers[bn].Data, 0) != 0) { + res = io_lihata_write_subcs_head(plug_io_lihata_default, &udata, f, 0, 1); + if (res == 0) { + res |= io_lihata_write_subcs_subc(plug_io_lihata_default, &udata, f, pcb_subclist_first(&pcb_buffers[bn].Data->subc)); + res |= io_lihata_write_subcs_tail(plug_io_lihata_default, &udata, f); + } + + if (res != 0) { fclose(f); pcb_message(PCB_MSG_ERROR, "Failed to export target objects to lihata footprint.\n"); goto quit1; Index: trunk/src_plugins/io_autotrax/io_autotrax.c =================================================================== --- trunk/src_plugins/io_autotrax/io_autotrax.c (revision 27351) +++ trunk/src_plugins/io_autotrax/io_autotrax.c (revision 27352) @@ -79,7 +79,6 @@ io_autotrax.parse_footprint = NULL; io_autotrax.parse_font = NULL; io_autotrax.write_buffer = NULL; - io_autotrax.write_footprint = NULL; io_autotrax.write_pcb = io_autotrax_write_pcb; io_autotrax.default_fmt = "Protel autotrax"; io_autotrax.description = "Protel autotrax and easytrax"; Index: trunk/src_plugins/io_dsn/io_dsn.c =================================================================== --- trunk/src_plugins/io_dsn/io_dsn.c (revision 27351) +++ trunk/src_plugins/io_dsn/io_dsn.c (revision 27352) @@ -76,7 +76,6 @@ io_dsn.parse_footprint = NULL; io_dsn.parse_font = NULL; io_dsn.write_buffer = NULL; - io_dsn.write_footprint = NULL; io_dsn.write_pcb = io_dsn_write_pcb; io_dsn.default_fmt = "dsn"; io_dsn.description = "specctra dsn"; Index: trunk/src_plugins/io_eagle/io_eagle.c =================================================================== --- trunk/src_plugins/io_eagle/io_eagle.c (revision 27351) +++ trunk/src_plugins/io_eagle/io_eagle.c (revision 27352) @@ -75,7 +75,6 @@ /* io_eagle_xml.parse_footprint = NULL; io_eagle_xml.parse_font = NULL; io_eagle_xml.write_buffer = io_eagle_write_buffer; - io_eagle_xml.write_footprint = io_eagle_write_element; io_eagle_xml.write_pcb = io_eagle_write_pcb;*/ io_eagle_xml.default_fmt = "eagle"; io_eagle_xml.description = "eagle xml"; @@ -94,7 +93,6 @@ /* io_eagle_bin.parse_footprint = NULL; io_eagle_bin.parse_font = NULL; io_eagle_bin.write_buffer = io_eagle_write_buffer; - io_eagle_bin.write_footprint = io_eagle_write_element; io_eagle_bin.write_pcb = io_eagle_write_pcb;*/ io_eagle_bin.default_fmt = "eagle"; io_eagle_bin.description = "eagle bin"; @@ -113,7 +111,6 @@ io_eagle_dru.parse_footprint = NULL; io_eagle_dru.parse_font = NULL; io_eagle_dru.write_buffer = NULL; - io_eagle_dru.write_footprint = NULL; io_eagle_dru.write_pcb = /*io_eagle_write_pcb_dru*/ NULL; io_eagle_dru.default_fmt = "eagle"; io_eagle_dru.description = "eagle dru"; Index: trunk/src_plugins/io_hyp/io_hyp.c =================================================================== --- trunk/src_plugins/io_hyp/io_hyp.c (revision 27351) +++ trunk/src_plugins/io_hyp/io_hyp.c (revision 27352) @@ -176,8 +176,7 @@ io_hyp.parse_pcb = io_hyp_read_pcb; /* io_hyp.parse_footprint = NULL; io_hyp.parse_font = NULL; - io_hyp.write_buffer = io_hyp_write_buffer; - io_hyp.write_footprint = io_hyp_write_element;*/ + io_hyp.write_buffer = io_hyp_write_buffer;*/ io_hyp.write_pcb = io_hyp_write_pcb; io_hyp.default_fmt = "hyp"; io_hyp.description = "hyperlynx"; Index: trunk/src_plugins/io_kicad/io_kicad.c =================================================================== --- trunk/src_plugins/io_kicad/io_kicad.c (revision 27351) +++ trunk/src_plugins/io_kicad/io_kicad.c (revision 27352) @@ -80,7 +80,6 @@ io_kicad.parse_footprint = io_kicad_parse_element; io_kicad.parse_font = NULL; io_kicad.write_buffer = NULL; - io_kicad.write_footprint = io_kicad_write_element; io_kicad.write_subcs_head = io_kicad_write_subcs_head; io_kicad.write_subcs_subc = io_kicad_write_subcs_subc; io_kicad.write_subcs_tail = io_kicad_write_subcs_tail; Index: trunk/src_plugins/io_kicad/write.c =================================================================== --- trunk/src_plugins/io_kicad/write.c (revision 27351) +++ trunk/src_plugins/io_kicad/write.c (revision 27352) @@ -799,30 +799,6 @@ return 0; } -/* writes element data in kicad legacy format for use in a .mod library */ -int io_kicad_write_element(pcb_plug_io_t *ctx, FILE *FP, pcb_data_t *Data, long subc_idx) -{ - wctx_t wctx; - - if (pcb_subclist_length(&Data->subc) > 1) { - pcb_message(PCB_MSG_ERROR, "Can't save multiple modules (footprints) in a single s-experssion mod file\n"); - return -1; - } - -TODO(": make this initialization a common function with write_kicad_layout()") - pcb_printf_slot[4] = "%{\\()\t\r\n \"}mq"; - - wctx.f = FP; - wctx.pcb = PCB; - wctx.ox = 0; - wctx.oy = 0; - - if (kicad_map_layers(&wctx) != 0) - return -1; - - return kicad_print_subcs(&wctx, Data, 0, 0, 0, subc_idx); -} - int io_kicad_write_subcs_head(pcb_plug_io_t *ctx, void **udata, FILE *f, int lib, long num_subcs) { if ((lib) || (num_subcs > 1)) { Index: trunk/src_plugins/io_kicad/write.h =================================================================== --- trunk/src_plugins/io_kicad/write.h (revision 27351) +++ trunk/src_plugins/io_kicad/write.h (revision 27352) @@ -30,7 +30,6 @@ #include #include "data.h" -int io_kicad_write_element(pcb_plug_io_t *ctx, FILE *FP, pcb_data_t *Data, long subc_idx); int io_kicad_write_pcb(pcb_plug_io_t *ctx, FILE *FP, const char *old_filename, const char *new_filename, pcb_bool emergency); int io_kicad_write_subcs_head(pcb_plug_io_t *ctx, void **udata, FILE *f, int lib, long num_subcs); Index: trunk/src_plugins/io_kicad_legacy/io_kicad_legacy.c =================================================================== --- trunk/src_plugins/io_kicad_legacy/io_kicad_legacy.c (revision 27351) +++ trunk/src_plugins/io_kicad_legacy/io_kicad_legacy.c (revision 27352) @@ -66,7 +66,6 @@ io_kicad_legacy.parse_footprint = NULL; io_kicad_legacy.parse_font = NULL; io_kicad_legacy.write_buffer = NULL; - io_kicad_legacy.write_footprint = io_kicad_legacy_write_element; io_kicad_legacy.write_subcs_head = io_kicad_legacy_write_subcs_head; io_kicad_legacy.write_subcs_subc = io_kicad_legacy_write_subcs_subc; io_kicad_legacy.write_subcs_tail = io_kicad_legacy_write_subcs_tail; Index: trunk/src_plugins/io_kicad_legacy/write.c =================================================================== --- trunk/src_plugins/io_kicad_legacy/write.c (revision 27351) +++ trunk/src_plugins/io_kicad_legacy/write.c (revision 27352) @@ -1058,22 +1058,3 @@ } return 0; } - -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; - unm_t group1; - int res = 0; - - unm_init(&group1); - subclist_foreach(&Data->subc, &sit, subc) { - 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); - - return res; -} Index: trunk/src_plugins/io_kicad_legacy/write.h =================================================================== --- trunk/src_plugins/io_kicad_legacy/write.h (revision 27351) +++ trunk/src_plugins/io_kicad_legacy/write.h (revision 27352) @@ -30,7 +30,6 @@ #include #include "data.h" -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_pcb(pcb_plug_io_t *ctx, FILE *FP, const char *old_filename, const char *new_filename, pcb_bool emergency); int io_kicad_legacy_write_subcs_head(pcb_plug_io_t *ctx, void **udata, FILE *f, int lib, long num_subcs); int io_kicad_legacy_write_subcs_subc(pcb_plug_io_t *ctx, void **udata, FILE *f, pcb_subc_t *subc); Index: trunk/src_plugins/io_lihata/io_lihata.c =================================================================== --- trunk/src_plugins/io_lihata/io_lihata.c (revision 27351) +++ trunk/src_plugins/io_lihata/io_lihata.c (revision 27352) @@ -88,7 +88,6 @@ plug_io_lihata_v6.parse_buffer = io_lihata_parse_buffer; plug_io_lihata_v6.write_font = io_lihata_write_font; plug_io_lihata_v6.write_buffer = io_lihata_write_buffer; - plug_io_lihata_v6.write_footprint = io_lihata_write_element; plug_io_lihata_v6.write_subcs_head = io_lihata_write_subcs_head; plug_io_lihata_v6.write_subcs_subc = io_lihata_write_subcs_subc; plug_io_lihata_v6.write_subcs_tail = io_lihata_write_subcs_tail; @@ -116,7 +115,6 @@ plug_io_lihata_v5.parse_buffer = NULL; plug_io_lihata_v5.write_font = io_lihata_write_font; plug_io_lihata_v5.write_buffer = NULL; - plug_io_lihata_v5.write_footprint = io_lihata_write_element; plug_io_lihata_v5.write_subcs_head = io_lihata_write_subcs_head; plug_io_lihata_v5.write_subcs_subc = io_lihata_write_subcs_subc; plug_io_lihata_v5.write_subcs_tail = io_lihata_write_subcs_tail; @@ -142,7 +140,6 @@ plug_io_lihata_v4.parse_buffer = NULL; plug_io_lihata_v4.write_font = io_lihata_write_font; plug_io_lihata_v4.write_buffer = NULL; - plug_io_lihata_v4.write_footprint = io_lihata_write_element; plug_io_lihata_v4.write_subcs_head = io_lihata_write_subcs_head; plug_io_lihata_v4.write_subcs_subc = io_lihata_write_subcs_subc; plug_io_lihata_v4.write_subcs_tail = io_lihata_write_subcs_tail; @@ -168,7 +165,6 @@ plug_io_lihata_v3.parse_buffer = NULL; plug_io_lihata_v3.write_font = io_lihata_write_font; plug_io_lihata_v3.write_buffer = NULL; - plug_io_lihata_v3.write_footprint = io_lihata_write_element; plug_io_lihata_v3.write_subcs_head = io_lihata_write_subcs_head; plug_io_lihata_v3.write_subcs_subc = io_lihata_write_subcs_subc; plug_io_lihata_v3.write_subcs_tail = io_lihata_write_subcs_tail; @@ -194,7 +190,6 @@ plug_io_lihata_v2.parse_buffer = NULL; plug_io_lihata_v2.write_font = io_lihata_write_font; plug_io_lihata_v2.write_buffer = NULL; - plug_io_lihata_v2.write_footprint = NULL; plug_io_lihata_v2.write_pcb = io_lihata_write_pcb_v2; plug_io_lihata_v2.default_fmt = "lihata"; plug_io_lihata_v2.description = "lihata board v2"; @@ -217,7 +212,6 @@ plug_io_lihata_v1.parse_font = NULL; plug_io_lihata_v1.write_font = io_lihata_write_font; plug_io_lihata_v1.write_buffer = NULL; - plug_io_lihata_v1.write_footprint = NULL; plug_io_lihata_v1.write_pcb = io_lihata_write_pcb_v1; plug_io_lihata_v1.default_fmt = "lihata"; plug_io_lihata_v1.description = "lihata board v1"; Index: trunk/src_plugins/io_lihata/write.c =================================================================== --- trunk/src_plugins/io_lihata/write.c (revision 27351) +++ trunk/src_plugins/io_lihata/write.c (revision 27352) @@ -1772,11 +1772,6 @@ } -int io_lihata_write_element(pcb_plug_io_t *ctx, FILE *f, pcb_data_t *dt, long subc_idx) -{ - return io_lihata_dump_nth_subc(ctx, f, dt, 1, subc_idx); -} - typedef struct { int womit_font, womit_config, womit_styles; int ver; Index: trunk/src_plugins/io_lihata/write.h =================================================================== --- trunk/src_plugins/io_lihata/write.h (revision 27351) +++ trunk/src_plugins/io_lihata/write.h (revision 27352) @@ -34,7 +34,6 @@ int io_lihata_write_pcb_v6(pcb_plug_io_t *ctx, FILE *FP, const char *old_filename, const char *new_filename, pcb_bool emergency); int io_lihata_write_font(pcb_plug_io_t *ctx, pcb_font_t *font, const char *Filename); int io_lihata_write_buffer(pcb_plug_io_t *ctx, FILE *f, pcb_buffer_t *buff); -int io_lihata_write_element(pcb_plug_io_t *ctx, FILE *f, pcb_data_t *dt, long subc_idx); int io_lihata_write_subcs_head(pcb_plug_io_t *ctx, void **udata, FILE *f, int lib, long num_subcs); int io_lihata_write_subcs_subc(pcb_plug_io_t *ctx, void **udata, FILE *f, pcb_subc_t *subc); int io_lihata_write_subcs_tail(pcb_plug_io_t *ctx, void **udata, FILE *f); Index: trunk/src_plugins/io_mentor_cell/io_mentor_cell.c =================================================================== --- trunk/src_plugins/io_mentor_cell/io_mentor_cell.c (revision 27351) +++ trunk/src_plugins/io_mentor_cell/io_mentor_cell.c (revision 27352) @@ -70,7 +70,6 @@ io_mentor_cell.parse_footprint = NULL; io_mentor_cell.parse_font = NULL; io_mentor_cell.write_buffer = NULL; - io_mentor_cell.write_footprint = NULL; io_mentor_cell.write_pcb = NULL; io_mentor_cell.default_fmt = "mentor_cell"; io_mentor_cell.description = "Mentor graphics cell footprint lib"; Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 27351) +++ trunk/src_plugins/io_pcb/file.c (revision 27352) @@ -543,7 +543,7 @@ fputs("\n)\n", FP); } -int io_pcb_WriteSubcData(pcb_plug_io_t *ctx, FILE *FP, pcb_data_t *Data, long subc_idx) +static int io_pcb_WriteSubcData(pcb_plug_io_t *ctx, FILE *FP, pcb_data_t *Data, long subc_idx) { gdl_iterator_t sit; pcb_subc_t *sc; Index: trunk/src_plugins/io_pcb/file.h =================================================================== --- trunk/src_plugins/io_pcb/file.h (revision 27351) +++ trunk/src_plugins/io_pcb/file.h (revision 27352) @@ -56,7 +56,6 @@ extern pcb_plug_io_t *pcb_preferred_io_pcb, *pcb_nanometer_io_pcb, *pcb_centimil_io_pcb; -int io_pcb_WriteSubcData(pcb_plug_io_t *ctx, FILE *f, pcb_data_t *data, long subc_idx); int io_pcb_WritePCB(pcb_plug_io_t *ctx, FILE *f, const char *old_filename, const char *new_filename, pcb_bool emergency); int io_pcb_write_subcs_head(pcb_plug_io_t *ctx, void **udata, FILE *f, int lib, long num_subcs); int io_pcb_write_subcs_subc(pcb_plug_io_t *ctx, void **udata, FILE *f, pcb_subc_t *subc); Index: trunk/src_plugins/io_pcb/io_pcb.c =================================================================== --- trunk/src_plugins/io_pcb/io_pcb.c (revision 27351) +++ trunk/src_plugins/io_pcb/io_pcb.c (revision 27352) @@ -75,7 +75,6 @@ io_pcb[0].parse_footprint = io_pcb_ParseElement; io_pcb[0].parse_font = io_pcb_ParseFont; io_pcb[0].write_buffer = NULL; - io_pcb[0].write_footprint = io_pcb_WriteSubcData; io_pcb[0].write_subcs_head = io_pcb_write_subcs_head; io_pcb[0].write_subcs_subc = io_pcb_write_subcs_subc; io_pcb[0].write_subcs_tail = io_pcb_write_subcs_tail; @@ -93,7 +92,6 @@ io_pcb[1].plugin_data = &ctx[1]; io_pcb[1].fmt_support_prio = io_pcb_fmt; io_pcb[1].write_buffer = NULL; - io_pcb[1].write_footprint = io_pcb_WriteSubcData; io_pcb[1].write_subcs_head = io_pcb_write_subcs_head; io_pcb[1].write_subcs_subc = io_pcb_write_subcs_subc; io_pcb[1].write_subcs_tail = io_pcb_write_subcs_tail; @@ -111,7 +109,6 @@ io_pcb[2].plugin_data = &ctx[2]; io_pcb[2].fmt_support_prio = io_pcb_fmt; io_pcb[2].write_buffer = NULL; - io_pcb[2].write_footprint = io_pcb_WriteSubcData; io_pcb[2].write_subcs_head = io_pcb_write_subcs_head; io_pcb[2].write_subcs_subc = io_pcb_write_subcs_subc; io_pcb[2].write_subcs_tail = io_pcb_write_subcs_tail;