Index: trunk/src/plugins/std_cschem/std_cschem.c =================================================================== --- trunk/src/plugins/std_cschem/std_cschem.c (revision 10135) +++ trunk/src/plugins/std_cschem/std_cschem.c (revision 10136) @@ -62,12 +62,24 @@ /*** hooks ***/ +RND_INLINE fgw_error_t render_hier_netname(fgw_arg_t *res, gds_t *prefix, const char *sname) +{ + gds_t tmp; + + gds_init(&tmp); + gds_append_len(&tmp, prefix->array, prefix->used); + gds_append_str(&tmp, sname); + res->type = FGW_STR | FGW_DYN; + res->val.str = tmp.array; + + return 0; +} + fgw_error_t std_cschem_wirenet_name_to_net_name(fgw_arg_t *res, int argc, fgw_arg_t *argv) { const char *sname; csch_hier_path_t *hpath; csch_chdr_t *wnet; - gds_t tmp; CSCH_HOOK_CONVARG(1, FGW_STR, std_cschem_wirenet_name_to_net_name, sname = argv[1].val.cstr); CSCH_HOOK_CONVARG(2, FGW_COBJ, std_cschem_wirenet_name_to_net_name, wnet = fgw_cobj(&argv[2])); @@ -76,14 +88,30 @@ if (sname == NULL) return 0; - gds_init(&tmp); - gds_append_len(&tmp, hpath->prefix.array, hpath->prefix.used); - gds_append_str(&tmp, sname); - res->type = FGW_STR | FGW_DYN; - res->val.str = tmp.array; - return 0; + return render_hier_netname(res, &hpath->prefix, sname); } +fgw_error_t std_cschem_attrib_net_name_to_net_name(fgw_arg_t *res, int argc, fgw_arg_t *argv) +{ + const char *sname; + csch_hier_path_t *hpath; + csch_acomp_t *acomp; + gds_t prefix = {0}; + fgw_error_t retval; + + CSCH_HOOK_CONVARG(1, FGW_STR, std_cschem_attrib_net_name_to_net_name, sname = argv[1].val.cstr); + CSCH_HOOK_CONVARG(2, FGW_AOBJ, std_cschem_attrib_net_name_to_net_name, acomp = fgw_aobj(&argv[2])); + + if (sname == NULL) + return 0; + + csch_hier_build_path(&prefix, acomp->hlev); + retval = render_hier_netname(res, &prefix, sname); + gds_uninit(&prefix); + + return retval; +} + fgw_error_t std_cschem_symbol_name_to_component_name(fgw_arg_t *res, int argc, fgw_arg_t *argv) { const char *sname, *end; @@ -214,6 +242,7 @@ static int on_load(fgw_obj_t *obj, const char *filename, const char *opts) { fgw_func_reg(obj, "wirenet_name_to_net_name", std_cschem_wirenet_name_to_net_name); + fgw_func_reg(obj, "attrib_net_name_to_net_name", std_cschem_attrib_net_name_to_net_name); fgw_func_reg(obj, "symbol_name_to_component_name", std_cschem_symbol_name_to_component_name); fgw_func_reg(obj, "compile_component1", std_cschem_compile_comp1);