Index: trunk/src/sch-rnd/multi.c =================================================================== --- trunk/src/sch-rnd/multi.c (revision 10238) +++ trunk/src/sch-rnd/multi.c (revision 10239) @@ -320,6 +320,21 @@ return sheet; } +csch_sheet_t *sch_rnd_app_load_sheet(csch_project_t *proj, const char *path) +{ + int is_project; + csch_sheet_t *res; + rnd_design_t *last; + + last = rnd_multi_switch_to(NULL); /* empty conf so we can overwrite */ + res = sch_rnd_multi_load_(path, NULL, proj->hdr.loadname, &is_project, NULL, NULL); + res->stype = CSCH_SHTY_UNLISTED; + rnd_multi_switch_to_(last); /* activate the original */ + + return res; +} + + static csch_sheet_t *sch_rnd_multi_new_empty_(csch_project_t *prj, const char *fn) { csch_sheet_t *sheet; Index: trunk/src/sch-rnd/multi.h =================================================================== --- trunk/src/sch-rnd/multi.h (revision 10238) +++ trunk/src/sch-rnd/multi.h (revision 10239) @@ -17,6 +17,9 @@ csch_sheet_t *sch_rnd_multi_new_empty(const char *fn); csch_sheet_t *sch_rnd_multi_new_empty_in_prj(csch_project_t *prj); +/* App-side loader for external hierarchic child sheets from hlibrary */ +csch_sheet_t *sch_rnd_app_load_sheet(csch_project_t *proj, const char *path); + /* Assuming s is not the current sheet, unload it, removing from the list of sheets. If s is NULL, unload currently active sheet. */ void sch_rnd_multi_unload(csch_sheet_t *s); Index: trunk/src/sch-rnd/sch-rnd.c =================================================================== --- trunk/src/sch-rnd/sch-rnd.c (revision 10238) +++ trunk/src/sch-rnd/sch-rnd.c (revision 10239) @@ -58,6 +58,7 @@ #include #include #include +#include #include "conf_core.h" #include "crosshair.h" @@ -278,6 +279,7 @@ LIBCSCHEM_CFG_BIND(csch_cfg_multiport_net_merge, conf_core.compile.multiport_net_merge); LIBCSCHEM_CFG_BIND(csch_cfg_hier_net_allow_rename, conf_core.compile.hierarchic.net_allow_rename); LIBCSCHEM_CFG_BIND(csch_cfg_hier_net_rename_prefer_top, conf_core.compile.hierarchic.net_rename_prefer_top); + csch_app_load_sheet_cb = sch_rnd_app_load_sheet; } extern void sch_rnd_draw_uninit(void);