Index: import_orcad_net.pup =================================================================== --- import_orcad_net.pup (revision 32310) +++ import_orcad_net.pup (revision 32311) @@ -6,4 +6,5 @@ $fmt-feature-r import netlist and footprint info from Orcad PCB II netlists $package import-net default buildin +dep lib_gensexpr autoload 1 Index: menu_internal.c =================================================================== --- menu_internal.c (revision 32310) +++ menu_internal.c (revision 32311) @@ -8,11 +8,11 @@ 'h',' ','{','\n', '\t','\t','\t','l','i',':','s','u','b','m','e','n','u',' ','{', '\n', - '\t','\t','\t','\t','h','a',':','L','o','a','d',' ','P','A','D', - 'S',' ','A','S','C','I','I',' ','.','a','s','c',' ','f','i','l', - 'e',' ','=',' ','{',' ','a','c','t','i','o','n','=','L','o','a', - 'd','P','a','d','s','N','e','t','F','r','o','m','(',')',' ','}', - '\n', + '\t','\t','\t','\t','h','a',':','L','o','a','d',' ','O','r','c', + 'a','d',' ','P','C','B',' ','I','I',' ','n','e','t','l','i','s', + 't',' ','f','i','l','e',' ','=',' ','{',' ','a','c','t','i','o', + 'n','=','L','o','a','d','O','r','c','a','d','N','e','t','F','r', + 'o','m','(',')',' ','}','\n', '\t','\t','\t','}','\n', '\t','\t','}','\n', '\t','}','\n', Index: orcad_net.c =================================================================== --- orcad_net.c (revision 32310) +++ orcad_net.c (revision 32311) @@ -44,6 +44,7 @@ #include #include #include +#include #include "menu_internal.c" @@ -51,7 +52,25 @@ static int orcad_net_parse_net(FILE *fn) { + gsxl_dom_t dom; + int res, c; + gsxl_init(&dom, gsxl_node_t); + + dom.parse.line_comment_char = '#'; + do { + c = fgetc(fn); + } while((res = gsxl_parse_char(&dom, c)) == GSX_RES_NEXT); + + if (res != GSX_RES_EOE) { + rnd_message(RND_MSG_ERROR, "s-expression parse error\n"); + return -1; + } + + /* compact and simplify the tree */ + gsxl_compact_tree(&dom); + + rnd_actionva(&PCB->hidlib, "ElementList", "start", NULL); rnd_actionva(&PCB->hidlib, "Netlist", "Freeze", NULL); rnd_actionva(&PCB->hidlib, "Netlist", "Clear", NULL); @@ -63,6 +82,8 @@ rnd_actionva(&PCB->hidlib, "Netlist", "Thaw", NULL); rnd_actionva(&PCB->hidlib, "ElementList", "Done", NULL); + gsxl_uninit(&dom); + return 0; }