Index: trunk/src_plugins/io_altium/io_altium.c =================================================================== --- trunk/src_plugins/io_altium/io_altium.c (revision 35500) +++ trunk/src_plugins/io_altium/io_altium.c (revision 35501) @@ -35,9 +35,11 @@ #include "plug_io.h" #include "pcbdoc_ascii.h" +#include "pcbdoc_bin.h" #include "pcbdoc.h" static pcb_plug_io_t io_pcbdoc_ascii; +static pcb_plug_io_t io_pcbdoc_bin; static const char *altium_cookie = "Altium IO"; @@ -83,6 +85,11 @@ io_pcbdoc_ascii.mime_type = "application/x-altium"; io_pcbdoc_ascii.multi_footprint = 0; + io_pcbdoc_bin = io_pcbdoc_ascii; + io_pcbdoc_bin.description = "Altium PcbDoc binary board (v6)"; + io_pcbdoc_ascii.test_parse = pcbdoc_bin_test_parse; + io_pcbdoc_ascii.parse_pcb = io_altium_parse_pcbdoc_bin; + RND_HOOK_REGISTER(pcb_plug_io_t, pcb_plug_io_chain, &io_pcbdoc_ascii); return 0; Index: trunk/src_plugins/io_altium/pcbdoc.c =================================================================== --- trunk/src_plugins/io_altium/pcbdoc.c (revision 35500) +++ trunk/src_plugins/io_altium/pcbdoc.c (revision 35501) @@ -1138,7 +1138,7 @@ return 0; } -int io_altium_parse_pcbdoc_ascii(pcb_plug_io_t *ctx, pcb_board_t *pcb, const char *filename, rnd_conf_role_t settings_dest) +static int io_altium_parse_pcbdoc_any(pcb_plug_io_t *ctx, pcb_board_t *pcb, const char *filename, rnd_conf_role_t settings_dest, int is_bin) { rctx_t rctx = {0}; int res = 0; @@ -1165,9 +1165,14 @@ rctx.pcb = pcb; rctx.filename = filename; - if (pcbdoc_ascii_parse_file(&pcb->hidlib, &rctx.tree, filename) != 0) { + if (is_bin) + res = pcbdoc_bin_parse_file(&pcb->hidlib, &rctx.tree, filename); + else + res = pcbdoc_ascii_parse_file(&pcb->hidlib, &rctx.tree, filename); + + if (res != 0) { altium_tree_free(&rctx.tree); - rnd_message(RND_MSG_ERROR, "failed to parse '%s'\n", filename); + rnd_message(RND_MSG_ERROR, "failed to parse '%s' (%s mode)\n", (filename, is_bin ? "binary" : "ASCII")); return -1; } @@ -1215,3 +1220,13 @@ return res; } +int io_altium_parse_pcbdoc_ascii(pcb_plug_io_t *ctx, pcb_board_t *pcb, const char *filename, rnd_conf_role_t settings_dest) +{ + return io_altium_parse_pcbdoc_any(ctx, pcb, filename, settings_dest, 0); +} + +int io_altium_parse_pcbdoc_bin(pcb_plug_io_t *ctx, pcb_board_t *pcb, const char *filename, rnd_conf_role_t settings_dest) +{ + return io_altium_parse_pcbdoc_any(ctx, pcb, filename, settings_dest, 1); +} + Index: trunk/src_plugins/io_altium/pcbdoc.h =================================================================== --- trunk/src_plugins/io_altium/pcbdoc.h (revision 35500) +++ trunk/src_plugins/io_altium/pcbdoc.h (revision 35501) @@ -1 +1,3 @@ int io_altium_parse_pcbdoc_ascii(pcb_plug_io_t *ctx, pcb_board_t *pcb, const char *filename, rnd_conf_role_t settings_dest); +int io_altium_parse_pcbdoc_bin(pcb_plug_io_t *ctx, pcb_board_t *pcb, const char *filename, rnd_conf_role_t settings_dest); + Index: trunk/src_plugins/io_altium/pcbdoc_ascii.c =================================================================== --- trunk/src_plugins/io_altium/pcbdoc_ascii.c (revision 35500) +++ trunk/src_plugins/io_altium/pcbdoc_ascii.c (revision 35501) @@ -34,6 +34,7 @@ #include #include "pcbdoc_ascii.h" +#include "pcbdoc_bin.h" #define block_size 65536L Index: trunk/src_plugins/io_altium/pcbdoc_bin.c =================================================================== --- trunk/src_plugins/io_altium/pcbdoc_bin.c (revision 35500) +++ trunk/src_plugins/io_altium/pcbdoc_bin.c (revision 35501) @@ -483,3 +483,8 @@ return (ucdf_test_parse(file_name) == 0); } +int pcbdoc_bin_parse_file(rnd_hidlib_t *hidlib, altium_tree_t *tree, const char *fn) +{ + return -1; +} + Index: trunk/src_plugins/io_altium/pcbdoc_bin.h =================================================================== --- trunk/src_plugins/io_altium/pcbdoc_bin.h (revision 35500) +++ trunk/src_plugins/io_altium/pcbdoc_bin.h (revision 35501) @@ -4,4 +4,6 @@ } altium_buf_t; int pcbdoc_bin_test_parse(pcb_plug_io_t *ctx, pcb_plug_iot_t typ, const char *file_name, FILE *f); +int pcbdoc_bin_parse_file(rnd_hidlib_t *hidlib, altium_tree_t *tree, const char *fn); +