X-Git-Url: https://harrygodden.com/git/?p=csRadar.git;a=blobdiff_plain;f=vmf.h;h=740a3749da0af94070dabd7da5077aaae7ac8197;hp=4fbe023c568867a5ba5cb6ab0a4ae90c581dbe99;hb=HEAD;hpb=dee56773cecd3a165331732008b7c0acf6f13393 diff --git a/vmf.h b/vmf.h index 4fbe023..740a374 100644 --- a/vmf.h +++ b/vmf.h @@ -695,15 +695,24 @@ u32 vmf_init_subvmf( vmf_map *map, const char *subvmf ); void vmf_load_all_instances( vmf_map *map, vdf_node *vmf ) { + char nextvmf[ 512 ]; + const char *base = kv_get( vmf, "csr_path", "" ); + vdf_foreach( vmf, "entity", ent ) { if( !strcmp( kv_get( ent, "classname", "" ), "func_instance" )) { // Entity is in use if file is specified, if not just ignore the entity. - const char *path = kv_get( ent, "file", "" ); - if( strcmp( path, "" ) ) + const char *path = kv_get( ent, "file", NULL ); + + if( path ) { - if( (ent->user1 = vmf_init_subvmf( map, path ))) + // Make relative path real + strcpy( nextvmf, base ); + csr_downlvl( nextvmf ); + strcat( nextvmf, path ); + + if( (ent->user1 = vmf_init_subvmf( map, nextvmf ))) { ent->user1 --; ent->user = VMF_FLAG_IS_INSTANCE; @@ -744,7 +753,9 @@ u32 vmf_init_subvmf( vmf_map *map, const char *subvmf ) strcpy( inst->name, subvmf ); if( (inst->root = vdf_open_file( subvmf )) ) - { + { + vdf_kv_append( inst->root, "csr_path", subvmf ); + // Recursive load other instances vmf_load_all_instances( map, inst->root ); return id+1; @@ -767,6 +778,8 @@ vmf_map *vmf_init( const char *path ) return NULL; } + vdf_kv_append( map->root, "csr_path", path ); + // Prepare instances vmf_load_all_instances( map, map->root );