diff --git a/src/actions.c b/src/actions.c index c99ad536..db14f768 100644 --- a/src/actions.c +++ b/src/actions.c @@ -1250,7 +1250,6 @@ int descend_schematic(int instnumber) if(!strcmp(xctx->sch[xctx->currsch],"")) { char cmd[PATH_MAX+1000]; - char filename[PATH_MAX]; char res[PATH_MAX]; my_strncpy(filename, xctx->sch[xctx->currsch], S(filename)); @@ -1342,10 +1341,10 @@ int descend_schematic(int instnumber) xctx->currsch++; hilight_child_pins(); - get_sch_from_sym(filename, xctx->inst[n].ptr+ xctx->sym); - dbg(1, "descend_schematic(): filename=%s\n", filename); unselect_all(1); + get_sch_from_sym(filename, xctx->inst[n].ptr+ xctx->sym); remove_symbols(); + dbg(1, "descend_schematic(): filename=%s\n", filename); /* we are descending from a parent schematic downloaded from the web */ if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname || strstr(xctx->current_dirname, "https://") == xctx->current_dirname) { @@ -1354,10 +1353,9 @@ int descend_schematic(int instnumber) tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL); /* build local file name of downloaded object and load it */ my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0)); - load_schematic(1, sympath, 1); - } else { - load_schematic(1, filename, 1); + my_strncpy(filename, sympath, S(filename)); } + load_schematic(1, filename, 1); if(xctx->hilight_nets) { prepare_netlist_structs(0); diff --git a/src/spice_netlist.c b/src/spice_netlist.c index 40032764..b65083fc 100644 --- a/src/spice_netlist.c +++ b/src/spice_netlist.c @@ -528,6 +528,17 @@ void spice_block_netlist(FILE *fd, int i) else spice_stop=0; get_sch_from_sym(filename, xctx->sym + i); + + if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname || + strstr(xctx->current_dirname, "https://") == xctx->current_dirname) { + char sympath[PATH_MAX]; + /* download item into ${XSCHEM_TMP_DIR}/xschem_web */ + tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL); + /* build local file name of downloaded object and load it */ + my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0)); + my_strncpy(filename, sympath, S(filename)); + } + if(split_f) { my_snprintf(netl_filename, S(netl_filename), "%s/.%s_%d", tclgetvar("netlist_dir"), skip_dir(xctx->sym[i].name), getpid()); diff --git a/src/tedax_netlist.c b/src/tedax_netlist.c index 4f9470ed..2cbc3ea4 100644 --- a/src/tedax_netlist.c +++ b/src/tedax_netlist.c @@ -84,6 +84,17 @@ static void tedax_block_netlist(FILE *fd, int i) else tedax_stop=0; get_sch_from_sym(filename, xctx->sym + i); + + if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname || + strstr(xctx->current_dirname, "https://") == xctx->current_dirname) { + char sympath[PATH_MAX]; + /* download item into ${XSCHEM_TMP_DIR}/xschem_web */ + tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL); + /* build local file name of downloaded object and load it */ + my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0)); + my_strncpy(filename, sympath, S(filename)); + } + fprintf(fd, "\n# expanding symbol: %s # of pins=%d\n", xctx->sym[i].name,xctx->sym[i].rects[PINLAYER] ); fprintf(fd, "## sym_path: %s\n", abs_sym_path(xctx->sym[i].name, "")); diff --git a/src/verilog_netlist.c b/src/verilog_netlist.c index d318a04b..46edf9ba 100644 --- a/src/verilog_netlist.c +++ b/src/verilog_netlist.c @@ -436,6 +436,17 @@ void verilog_block_netlist(FILE *fd, int i) else verilog_stop=0; get_sch_from_sym(filename, xctx->sym + i); + + if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname || + strstr(xctx->current_dirname, "https://") == xctx->current_dirname) { + char sympath[PATH_MAX]; + /* download item into ${XSCHEM_TMP_DIR}/xschem_web */ + tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL); + /* build local file name of downloaded object and load it */ + my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0)); + my_strncpy(filename, sympath, S(filename)); + } + if(split_f) { my_snprintf(netl_filename, S(netl_filename), "%s/.%s_%d", tclgetvar("netlist_dir"), skip_dir(xctx->sym[i].name), getpid()); diff --git a/src/vhdl_netlist.c b/src/vhdl_netlist.c index 17c0780f..dce93603 100644 --- a/src/vhdl_netlist.c +++ b/src/vhdl_netlist.c @@ -528,6 +528,17 @@ void vhdl_block_netlist(FILE *fd, int i) else vhdl_stop=0; get_sch_from_sym(filename, xctx->sym + i); + + if( strstr(xctx->current_dirname, "http://") == xctx->current_dirname || + strstr(xctx->current_dirname, "https://") == xctx->current_dirname) { + char sympath[PATH_MAX]; + /* download item into ${XSCHEM_TMP_DIR}/xschem_web */ + tclvareval("try_download_url {", xctx->current_dirname, "} {", filename, "}", NULL); + /* build local file name of downloaded object and load it */ + my_snprintf(sympath, S(sympath), "%s/xschem_web/%s", tclgetvar("XSCHEM_TMP_DIR"), get_cell_w_ext(filename, 0)); + my_strncpy(filename, sympath, S(filename)); + } + if(split_f) { my_snprintf(netl_filename, S(netl_filename), "%s/.%s_%d", tclgetvar("netlist_dir"), skip_dir(xctx->sym[i].name), getpid());