Revision: 70687 http://sourceforge.net/p/brlcad/code/70687 Author: starseeker Date: 2018-02-08 15:47:56 +0000 (Thu, 08 Feb 2018) Log Message: ----------- print can now print values
Modified Paths: -------------- brlcad/trunk/src/libanalyze/nirt.cxx Modified: brlcad/trunk/src/libanalyze/nirt.cxx =================================================================== --- brlcad/trunk/src/libanalyze/nirt.cxx 2018-02-08 12:55:26 UTC (rev 70686) +++ brlcad/trunk/src/libanalyze/nirt.cxx 2018-02-08 15:47:56 UTC (rev 70687) @@ -267,6 +267,7 @@ struct resource *res; struct rt_i *rtip_air; struct resource *res_air; + struct nout_record *vals; /* internal format specifier arrays */ struct bu_attribute_value_set *val_types; @@ -1587,20 +1588,47 @@ extern "C" int print_item(void *ns, int argc, const char **argv) { + int i = 0; + struct bu_vls oval = BU_VLS_INIT_ZERO; struct nirt_state *nss = (struct nirt_state *)ns; if (!ns) return -1; if (argc == 1) { - lout(nss, "%s\n", argv[0]); + lerr(nss, "Usage: print %s\n", get_desc_args("print")); return 0; } + argc--; argv++; - // TODO - handle error - // lerr(nss, "Usage: print %s\n", get_desc_args("print")); + for (i = 0; i < argc; i++) { + const char *val_type = bu_avs_get(nss->val_types, argv[i]); + bu_vls_trunc(&oval, 0); + if (!val_type) { + lerr(nss, "Error: item %s is not a valid NIRT value key\n", argv[i]); + bu_vls_free(&oval); + return -1; + } + if (BU_STR_EQUAL(val_type, "INT")) { + nirt_print_fmt_substr(&oval, "%d", argv[i], nss->vals, nss->base2local); + lout(nss, "%s\n", bu_vls_addr(&oval)); + continue; + } + if (BU_STR_EQUAL(val_type, "FLOAT") || BU_STR_EQUAL(val_type, "FNOUNIT")) { + nirt_print_fmt_substr(&oval, "%g", argv[i], nss->vals, nss->base2local); + lout(nss, "%s\n", bu_vls_addr(&oval)); + continue; + } + if (BU_STR_EQUAL(val_type, "STRING")) { + nirt_print_fmt_substr(&oval, "%s", argv[i], nss->vals, nss->base2local); + lout(nss, "%s\n", bu_vls_addr(&oval)); + continue; + } + lerr(nss, "Error: item %s has unknown value type %s\n", argv[i], val_type); + bu_vls_free(&oval); + return -1; + } - - bu_log("print_item\n"); + bu_vls_free(&oval); return 0; } @@ -2104,6 +2132,16 @@ bu_avs_init_empty(n->val_types); bu_avs_init_empty(n->val_docs); + BU_GET(n->vals, struct nout_record); + bu_vls_init(&n->vals->path_name); + bu_vls_init(&n->vals->reg_name); + bu_vls_init(&n->vals->ov_reg1_name); + bu_vls_init(&n->vals->ov_sol_in); + bu_vls_init(&n->vals->ov_sol_out); + bu_vls_init(&n->vals->claimant_list); + bu_vls_init(&n->vals->claimant_listn); + bu_vls_init(&n->vals->attributes); + /* Populate the output key and type information */ { std::string s(ovals); @@ -2200,6 +2238,16 @@ if (ns->rtip != RTI_NULL) rt_free_rti(ns->rtip); if (ns->rtip_air != RTI_NULL) rt_free_rti(ns->rtip_air); + bu_vls_free(&ns->vals->path_name); + bu_vls_free(&ns->vals->reg_name); + bu_vls_free(&ns->vals->ov_reg1_name); + bu_vls_free(&ns->vals->ov_sol_in); + bu_vls_free(&ns->vals->ov_sol_out); + bu_vls_free(&ns->vals->claimant_list); + bu_vls_free(&ns->vals->claimant_listn); + bu_vls_free(&ns->vals->attributes); + BU_PUT(ns->vals, struct nout_record); + BU_PUT(ns->res, struct resource); BU_PUT(ns->res_air, struct resource); BU_PUT(ns->err, struct bu_vls); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits