Index: trunk/src/plug_io.c =================================================================== --- trunk/src/plug_io.c (revision 30821) +++ trunk/src/plug_io.c (revision 30822) @@ -270,7 +270,7 @@ for(n = 0; n < len; n++) { if ((available[n].plug->parse_footprint == NULL) || (!accepts[n])) /* can't parse or doesn't want to parse this file */ continue; - res = available[n].plug->parse_footprint(available[n].plug, Ptr, fctx.filename); + res = available[n].plug->parse_footprint(available[n].plug, Ptr, fctx.filename, fctx.subfpname); if (res == 0) { if (Ptr->loader == NULL) /* if the loader didn't set this (to some more fine grained, e.g. depending on file format version) */ Ptr->loader = available[n].plug; Index: trunk/src/plug_io.h =================================================================== --- trunk/src/plug_io.h (revision 30821) +++ trunk/src/plug_io.h (revision 30822) @@ -83,7 +83,7 @@ int (*parse_pcb)(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename, conf_role_t settings_dest); /* Attempt to load an element from Filename to Ptr. Return 0 on success. */ - int (*parse_footprint)(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name); + int (*parse_footprint)(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name, const char *subfpname); /* Scan as little as possible from the file to decide what the file is and extract tags; For a single file, load head and return it. For a library-type file, load Index: trunk/src_plugins/extedit/extedit.c =================================================================== --- trunk/src_plugins/extedit/extedit.c (revision 30821) +++ trunk/src_plugins/extedit/extedit.c (revision 30822) @@ -302,7 +302,7 @@ pcb_buffer_set_number(bn); pcb_buffer_clear(PCB, PCB_PASTEBUFFER); - if (io_lihata_parse_element(plug_io_lihata_default, pcb_buffers[bn].Data, tmp_fn) != 0) { + if (io_lihata_parse_element(plug_io_lihata_default, pcb_buffers[bn].Data, tmp_fn, NULL) != 0) { pcb_message(PCB_MSG_ERROR, "Failed to load the edited footprint. File left at '%s'.\n", tmp_fn); ret = 1; goto quit1; Index: trunk/src_plugins/io_bxl/read.c =================================================================== --- trunk/src_plugins/io_bxl/read.c (revision 30821) +++ trunk/src_plugins/io_bxl/read.c (revision 30822) @@ -647,7 +647,7 @@ /* Error is handled on the push side */ void pcb_bxl_error(pcb_bxl_ctx_t *ctx, pcb_bxl_STYPE tok, const char *s) { } -int io_bxl_parse_footprint(pcb_plug_io_t *ctx, pcb_data_t *data, const char *filename) +int io_bxl_parse_footprint(pcb_plug_io_t *ctx, pcb_data_t *data, const char *filename, const char *subfpname) { pcb_hidlib_t *hl = &PCB->hidlib; FILE *f; Index: trunk/src_plugins/io_bxl/read.h =================================================================== --- trunk/src_plugins/io_bxl/read.h (revision 30821) +++ trunk/src_plugins/io_bxl/read.h (revision 30822) @@ -2,7 +2,7 @@ #include "plug_io.h" int io_bxl_test_parse(pcb_plug_io_t *ctx, pcb_plug_iot_t typ, const char *Filename, FILE *f); -int io_bxl_parse_footprint(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *fn); +int io_bxl_parse_footprint(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *fn, const char *subfpname); pcb_plug_fp_map_t *io_bxl_map_footprint(pcb_plug_io_t *ctx, FILE *f, const char *fn, pcb_plug_fp_map_t *head, int need_tags); Index: trunk/src_plugins/io_kicad/read.c =================================================================== --- trunk/src_plugins/io_kicad/read.c (revision 30821) +++ trunk/src_plugins/io_kicad/read.c (revision 30822) @@ -2794,7 +2794,7 @@ return readres; } -int io_kicad_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name) +int io_kicad_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name, const char *subfpname) { int mres; pcb_fp_fopen_ctx_t fpst; Index: trunk/src_plugins/io_kicad/read.h =================================================================== --- trunk/src_plugins/io_kicad/read.h (revision 30821) +++ trunk/src_plugins/io_kicad/read.h (revision 30822) @@ -32,6 +32,6 @@ int io_kicad_test_parse(pcb_plug_io_t *ctx, pcb_plug_iot_t typ, const char *Filename, FILE *f); int io_kicad_read_pcb(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename, conf_role_t settings_dest); -int io_kicad_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name); +int io_kicad_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name, const char *subfpname); pcb_plug_fp_map_t *io_kicad_map_footprint(pcb_plug_io_t *ctx, FILE *f, const char *fn, pcb_plug_fp_map_t *head, int need_tags); Index: trunk/src_plugins/io_lihata/read.c =================================================================== --- trunk/src_plugins/io_lihata/read.c (revision 30821) +++ trunk/src_plugins/io_lihata/read.c (revision 30822) @@ -2518,7 +2518,7 @@ } -int io_lihata_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name) +int io_lihata_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name, const char *subfpname) { int res; char *errmsg = NULL; Index: trunk/src_plugins/io_lihata/read.h =================================================================== --- trunk/src_plugins/io_lihata/read.h (revision 30821) +++ trunk/src_plugins/io_lihata/read.h (revision 30822) @@ -29,7 +29,7 @@ int io_lihata_test_parse(pcb_plug_io_t *ctx, pcb_plug_iot_t typ, const char *Filename, FILE *f); int io_lihata_parse_pcb(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename, conf_role_t settings_dest); int io_lihata_parse_font(pcb_plug_io_t *ctx, pcb_font_t *Ptr, const char *Filename); -int io_lihata_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name); +int io_lihata_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name, const char *subfpname); int io_lihata_parse_buffer(pcb_plug_io_t *ctx, pcb_buffer_t *buff, const char *filename); pcb_plug_fp_map_t *io_lihata_map_footprint(pcb_plug_io_t *ctx, FILE *f, const char *fn, pcb_plug_fp_map_t *head, int need_tags); Index: trunk/src_plugins/io_tedax/io_tedax.c =================================================================== --- trunk/src_plugins/io_tedax/io_tedax.c (revision 30821) +++ trunk/src_plugins/io_tedax/io_tedax.c (revision 30822) @@ -182,7 +182,7 @@ {"SaveTedax", pcb_act_Savetedax, pcb_acth_Savetedax, pcb_acts_Savetedax} }; -static int io_tedax_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name) +static int io_tedax_parse_element(pcb_plug_io_t *ctx, pcb_data_t *Ptr, const char *name, const char *subfpname) { return tedax_fp_load(Ptr, name, 0, NULL, 0); }