[brlcad-commits] SF.net SVN: brlcad:[35340] brlcad/trunk/src/libged/move_all.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <bo...@us...> - 2009-07-28 16:34:41
|
Revision: 35340 http://brlcad.svn.sourceforge.net/brlcad/?rev=35340&view=rev Author: bob1961 Date: 2009-07-28 16:34:20 +0000 (Tue, 28 Jul 2009) Log Message: ----------- Added a -n option to ged_move_all. Modified Paths: -------------- brlcad/trunk/src/libged/move_all.c Modified: brlcad/trunk/src/libged/move_all.c =================================================================== --- brlcad/trunk/src/libged/move_all.c 2009-07-28 15:35:21 UTC (rev 35339) +++ brlcad/trunk/src/libged/move_all.c 2009-07-28 16:34:20 UTC (rev 35340) @@ -39,12 +39,13 @@ ged_move_all(struct ged *gedp, int argc, const char *argv[]) { register struct ged_display_list *gdlp; + int nflag; register int i; register struct directory *dp; struct rt_db_internal intern; struct rt_comb_internal *comb; struct bu_ptbl stack; - static const char *usage = "from to"; + static const char *usage = "[-n] from to"; GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); GED_CHECK_READ_ONLY(gedp, GED_ERROR); @@ -59,7 +60,7 @@ return GED_HELP; } - if (argc != 3) { + if (argc < 3 || 4 < argc) { bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -69,6 +70,19 @@ return GED_ERROR; } + /* Process the -n option */ + if (argc == 4) { + if (argv[1][0] == '-' && argv[1][1] == 'n' && argv[1][2] == '\0') { + nflag = 1; + --argc; + ++argv; + } else { + bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage); + return GED_ERROR; + } + } else + nflag = 0; + /* rename the record itself */ if ((dp = db_lookup(gedp->ged_wdbp->dbip, argv[1], LOOKUP_NOISY )) == DIR_NULL) return GED_ERROR; @@ -104,34 +118,42 @@ extrude = (struct rt_extrude_internal *)intern.idb_ptr; RT_EXTRUDE_CK_MAGIC(extrude); - if (! strcmp(extrude->sketch_name, argv[1]) ) { - bu_free(extrude->sketch_name, "sketch name"); - extrude->sketch_name = bu_strdup(argv[2]); + if (!strcmp(extrude->sketch_name, argv[1])) { + if (nflag) { + bu_vls_printf(&gedp->ged_result_str, "%s ", dirp->d_namep); + rt_db_free_internal(&intern, &rt_uniresource); + } else { + bu_free(extrude->sketch_name, "sketch name"); + extrude->sketch_name = bu_strdup(argv[2]); - if (rt_db_put_internal(dirp, gedp->ged_wdbp->dbip, &intern, &rt_uniresource) < 0) { - bu_log("oops\n"); + if (rt_db_put_internal(dirp, gedp->ged_wdbp->dbip, &intern, &rt_uniresource) < 0) { + bu_log("oops\n"); + } } - } + } else + rt_db_free_internal(&intern, &rt_uniresource); } } } } - /* Change object name in the directory. */ - if (db_rename(gedp->ged_wdbp->dbip, dp, argv[2]) < 0) { - bu_vls_printf(&gedp->ged_result_str, "error in rename to %s, aborting", argv[2]); - return GED_ERROR; - } + if (!nflag) { + /* Change object name in the directory. */ + if (db_rename(gedp->ged_wdbp->dbip, dp, argv[2]) < 0) { + bu_vls_printf(&gedp->ged_result_str, "error in rename to %s, aborting", argv[2]); + return GED_ERROR; + } - /* Change name in the file */ - if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { - bu_vls_printf(&gedp->ged_result_str, "Database read error, aborting"); - return GED_ERROR; - } + /* Change name in the file */ + if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { + bu_vls_printf(&gedp->ged_result_str, "Database read error, aborting"); + return GED_ERROR; + } - if (rt_db_put_internal(dp, gedp->ged_wdbp->dbip, &intern, &rt_uniresource) < 0) { - bu_vls_printf(&gedp->ged_result_str, "Database write error, aborting"); - return GED_ERROR; + if (rt_db_put_internal(dp, gedp->ged_wdbp->dbip, &intern, &rt_uniresource) < 0) { + bu_vls_printf(&gedp->ged_result_str, "Database write error, aborting"); + return GED_ERROR; + } } bu_ptbl_init(&stack, 64, "combination stack for wdb_mvall_cmd"); @@ -163,9 +185,13 @@ } if (!strcmp(comb_leaf->tr_l.tl_name, argv[1])) { - bu_free(comb_leaf->tr_l.tl_name, "comb_leaf->tr_l.tl_name"); - comb_leaf->tr_l.tl_name = bu_strdup(argv[2]); - changed = 1; + if (nflag) + bu_vls_printf(&gedp->ged_result_str, "%s ", dp->d_namep); + else { + bu_free(comb_leaf->tr_l.tl_name, "comb_leaf->tr_l.tl_name"); + comb_leaf->tr_l.tl_name = bu_strdup(argv[2]); + changed = 1; + } } if (BU_PTBL_END(&stack) < 1) { @@ -183,7 +209,6 @@ if (changed) { if (rt_db_put_internal(dp, gedp->ged_wdbp->dbip, &intern, &rt_uniresource)) { bu_ptbl_free( &stack ); - rt_db_free_internal( &intern, &rt_uniresource ); bu_vls_printf(&gedp->ged_result_str, "Database write error, aborting"); return GED_ERROR; } @@ -195,43 +220,45 @@ bu_ptbl_free(&stack); - /* Change object name anywhere in the display list path. */ - for (BU_LIST_FOR(gdlp, ged_display_list, &gedp->ged_gdp->gd_headDisplay)) { - register int first = 1; - register int found = 0; - struct bu_vls new_path; - char *dup = strdup(bu_vls_addr(&gdlp->gdl_path)); - char *tok = strtok(dup, "/"); + if (!nflag) { + /* Change object name anywhere in the display list path. */ + for (BU_LIST_FOR(gdlp, ged_display_list, &gedp->ged_gdp->gd_headDisplay)) { + register int first = 1; + register int found = 0; + struct bu_vls new_path; + char *dup = strdup(bu_vls_addr(&gdlp->gdl_path)); + char *tok = strtok(dup, "/"); - bu_vls_init(&new_path); + bu_vls_init(&new_path); - while (tok) { - if (!strcmp(tok, argv[1])) { - found = 1; + while (tok) { + if (!strcmp(tok, argv[1])) { + found = 1; - if (first) { - first = 0; - bu_vls_printf(&new_path, "%s", argv[2]); - } else - bu_vls_printf(&new_path, "/%s", argv[2]); - } else { - if (first) { - first = 0; - bu_vls_printf(&new_path, "%s", tok); - } else - bu_vls_printf(&new_path, "/%s", tok); + if (first) { + first = 0; + bu_vls_printf(&new_path, "%s", argv[2]); + } else + bu_vls_printf(&new_path, "/%s", argv[2]); + } else { + if (first) { + first = 0; + bu_vls_printf(&new_path, "%s", tok); + } else + bu_vls_printf(&new_path, "/%s", tok); + } + + tok = strtok((char *)NULL, "/"); } - tok = strtok((char *)NULL, "/"); - } + if (found) { + bu_vls_free(&gdlp->gdl_path); + bu_vls_printf(&gdlp->gdl_path, "%s", bu_vls_addr(&new_path)); + } - if (found) { - bu_vls_free(&gdlp->gdl_path); - bu_vls_printf(&gdlp->gdl_path, "%s", bu_vls_addr(&new_path)); + free((void *)dup); + bu_vls_free(&new_path); } - - free((void *)dup); - bu_vls_free(&new_path); } return GED_OK; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |