Thread: [brlcad-commits] SF.net SVN: brlcad:[32607] brlcad/trunk/src/libged/search.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <sta...@us...> - 2008-09-08 21:34:15
|
Revision: 32607 http://brlcad.svn.sourceforge.net/brlcad/?rev=32607&view=rev Author: starseeker Date: 2008-09-08 21:34:25 +0000 (Mon, 08 Sep 2008) Log Message: ----------- Add back in other names for not, and and or options Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-08 21:13:42 UTC (rev 32606) +++ brlcad/trunk/src/libged/search.c 2008-09-08 21:34:25 UTC (rev 32607) @@ -199,13 +199,17 @@ { "!", N_NOT, c_not, O_ZERO }, { "(", N_OPENPAREN, c_openparen, O_ZERO }, { ")", N_CLOSEPAREN, c_closeparen, O_ZERO }, + { "-a", N_AND, NULL, O_NONE }, + { "-and", N_AND, NULL, O_NONE }, { "-attr", N_ATTR, c_attr, O_ARGV }, { "-name", N_NAME, c_name, O_ARGV }, - { "-o", N_OR, c_or, O_ZERO }, + { "-not", N_NOT, c_not, O_ZERO }, + { "-o", N_OR, c_or, O_ZERO }, + { "-or", N_OR, c_or, O_ZERO }, { "-print", N_PRINT, c_print, O_ZERO }, { "-print0", N_PRINT0, c_print0, O_ZERO }, { "-stdattr", N_STDATTR, c_stdattr, O_ZERO }, - { "-type", N_TYPE, c_type, O_ARGV }, + { "-type", N_TYPE, c_type, O_ARGV }, }; static PLAN * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-10 19:19:23
|
Revision: 32619 http://brlcad.svn.sourceforge.net/brlcad/?rev=32619&view=rev Author: starseeker Date: 2008-09-10 19:19:32 +0000 (Wed, 10 Sep 2008) Log Message: ----------- Oops - need to regfree after regcomp (thanks Sean) Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-10 17:42:48 UTC (rev 32618) +++ brlcad/trunk/src/libged/search.c 2008-09-10 19:19:32 UTC (rev 32619) @@ -409,12 +409,14 @@ rv = regcomp(®, regexp, REG_NOSUB|REG_EXTENDED); } if (rv != 0) { + regfree(®); bu_log("Error - regex compile did not succeed: %s\n", regexp); return BRLCAD_ERROR; } new = palloc(type, f_regex); new->regexp_data = reg; (*resultplan) = new; + regfree(®); return BRLCAD_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-10 19:34:58
|
Revision: 32621 http://brlcad.svn.sourceforge.net/brlcad/?rev=32621&view=rev Author: starseeker Date: 2008-09-10 19:35:08 +0000 (Wed, 10 Sep 2008) Log Message: ----------- Don't need regfree in error case - libregex is polite and frees the memory itself in an error situation. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-10 19:25:00 UTC (rev 32620) +++ brlcad/trunk/src/libged/search.c 2008-09-10 19:35:08 UTC (rev 32621) @@ -409,7 +409,6 @@ rv = regcomp(®, regexp, REG_NOSUB|REG_EXTENDED); } if (rv != 0) { - regfree(®); bu_log("Error - regex compile did not succeed: %s\n", regexp); return BRLCAD_ERROR; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-10 20:02:13
|
Revision: 32624 http://brlcad.svn.sourceforge.net/brlcad/?rev=32624&view=rev Author: starseeker Date: 2008-09-10 20:02:17 +0000 (Wed, 10 Sep 2008) Log Message: ----------- We don't really need stdbool.h here, and Windows doesn't like it. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-10 20:00:24 UTC (rev 32623) +++ brlcad/trunk/src/libged/search.c 2008-09-10 20:02:17 UTC (rev 32624) @@ -91,7 +91,6 @@ #include "common.h" #include <string.h> #include <stdlib.h> -#include <stdbool.h> #include "bio.h" #include "cmd.h" @@ -396,14 +395,14 @@ } int -c_regex_common(enum ntype type, char *regexp, bool icase, PLAN **resultplan) +c_regex_common(enum ntype type, char *regexp, int icase, PLAN **resultplan) { regex_t reg; PLAN *new; int rv; size_t len; bu_log("Matching extened regular expression: %s\n", regexp); - if (icase) { + if (icase = 1 ) { rv = regcomp(®, regexp, REG_NOSUB|REG_EXTENDED|REG_ICASE); } else { rv = regcomp(®, regexp, REG_NOSUB|REG_EXTENDED); @@ -422,14 +421,14 @@ int c_regex(char *pattern, char ***ignored, int unused, PLAN **resultplan) { - return (c_regex_common(N_REGEX, pattern, false, resultplan)); + return (c_regex_common(N_REGEX, pattern, 0, resultplan)); } int c_iregex(char *pattern, char ***ignored, int unused, PLAN **resultplan) { - return (c_regex_common(N_IREGEX, pattern, true, resultplan)); + return (c_regex_common(N_IREGEX, pattern, 1, resultplan)); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-16 00:41:58
|
Revision: 32649 http://brlcad.svn.sourceforge.net/brlcad/?rev=32649&view=rev Author: starseeker Date: 2008-09-16 00:42:08 +0000 (Tue, 16 Sep 2008) Log Message: ----------- Regions are combinations - report them if type is combination Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-15 22:46:19 UTC (rev 32648) +++ brlcad/trunk/src/libged/search.c 2008-09-16 00:42:08 UTC (rev 32649) @@ -740,13 +740,12 @@ break; case DB5_MINORTYPE_BRLCAD_COMBINATION: if (DB_FULL_PATH_CUR_DIR(entry)->d_flags & DIR_REGION) { - if ((!bu_fnmatch(plan->type_data, "r", 0)) || (!bu_fnmatch(plan->type_data, "region", 0))) { + if ((!bu_fnmatch(plan->type_data, "r", 0)) || (!bu_fnmatch(plan->type_data, "reg", 0)) || (!bu_fnmatch(plan->type_data, "region", 0))) { type_match = 1; } - } else { - if ((!bu_fnmatch(plan->type_data, "comb", 0)) || (!bu_fnmatch(plan->type_data, "combination", 0))) { + } + if ( (!bu_fnmatch(plan->type_data, "c", 0)) || (!bu_fnmatch(plan->type_data, "comb", 0)) || (!bu_fnmatch(plan->type_data, "combination", 0))) { type_match = 1; - } } break; default: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-16 01:36:50
|
Revision: 32650 http://brlcad.svn.sourceforge.net/brlcad/?rev=32650&view=rev Author: starseeker Date: 2008-09-16 01:37:01 +0000 (Tue, 16 Sep 2008) Log Message: ----------- Add assembly type check to search. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-16 00:42:08 UTC (rev 32649) +++ brlcad/trunk/src/libged/search.c 2008-09-16 01:37:01 UTC (rev 32650) @@ -602,7 +602,25 @@ return BRLCAD_OK; } + /* + * -count_if_region- + * + * This function checks if the current combination is also a region and if + * it is, increments the counter. Used in the assembly type determination + * tree walk. + * + */ +static void count_if_region(struct rt_wdb *wdb, struct db_full_path *entry, genptr_t rcount) +{ + int *counter = (int*)rcount; + if (DB_FULL_PATH_CUR_DIR(entry)->d_flags & DIR_REGION) { + (*counter)++; + } +} + + +/* * -type function -- * * Search based on the type of the object - primitives are matched @@ -744,6 +762,13 @@ type_match = 1; } } + if (!(DB_FULL_PATH_CUR_DIR(entry)->d_flags & DIR_REGION)) { + if ( (!bu_fnmatch(plan->type_data, "a", 0)) || (!bu_fnmatch(plan->type_data, "assem", 0)) || (!bu_fnmatch(plan->type_data, "assembly", 0))) { + int rcount = 0; + db_fullpath_traverse( wdbp, entry, count_if_region, NULL, wdbp->wdb_resp, &rcount ); + if (rcount > 0) type_match = 1; + } + } if ( (!bu_fnmatch(plan->type_data, "c", 0)) || (!bu_fnmatch(plan->type_data, "comb", 0)) || (!bu_fnmatch(plan->type_data, "combination", 0))) { type_match = 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-17 13:19:20
|
Revision: 32659 http://brlcad.svn.sourceforge.net/brlcad/?rev=32659&view=rev Author: starseeker Date: 2008-09-17 13:19:30 +0000 (Wed, 17 Sep 2008) Log Message: ----------- Add option to type to spot nested regions (assemblies with the region flag set, or regions containing regions depending on how you look at it.) Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-17 12:19:00 UTC (rev 32658) +++ brlcad/trunk/src/libged/search.c 2008-09-17 13:19:30 UTC (rev 32659) @@ -769,6 +769,13 @@ if (rcount > 0) type_match = 1; } } + if (DB_FULL_PATH_CUR_DIR(entry)->d_flags & DIR_REGION) { + if ( (!bu_fnmatch(plan->type_data, "nr", 0)) || (!bu_fnmatch(plan->type_data, "nested_region", 0))) { + int rcount = 0; + db_fullpath_traverse( wdbp, entry, count_if_region, NULL, wdbp->wdb_resp, &rcount ); + if (rcount > 1) type_match = 1; + } + } if ( (!bu_fnmatch(plan->type_data, "c", 0)) || (!bu_fnmatch(plan->type_data, "comb", 0)) || (!bu_fnmatch(plan->type_data, "combination", 0))) { type_match = 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-18 15:50:47
|
Revision: 32672 http://brlcad.svn.sourceforge.net/brlcad/?rev=32672&view=rev Author: starseeker Date: 2008-09-18 22:50:57 +0000 (Thu, 18 Sep 2008) Log Message: ----------- Fix a couple bugs in the -below option - now seems to be working better, results on m35.g match those of -type nr search. Also do better path argument validation - multiple object full path values are valid, so can't just do db_lookup on argv. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-18 21:06:54 UTC (rev 32671) +++ brlcad/trunk/src/libged/search.c 2008-09-18 22:50:57 UTC (rev 32672) @@ -436,7 +436,7 @@ case OP_XOR: state = db_fullpath_stateful_traverse_subtree( tp->tr_b.tb_left, traverse_func, wdbp, dfp, comb_func, leaf_func, resp, client_data ); if (state == 1) return 1; - db_fullpath_stateful_traverse_subtree( tp->tr_b.tb_right, traverse_func, wdbp, dfp, comb_func, leaf_func, resp, client_data ); + state = db_fullpath_stateful_traverse_subtree( tp->tr_b.tb_right, traverse_func, wdbp, dfp, comb_func, leaf_func, resp, client_data ); if (state == 1) { return 1; } else { @@ -533,7 +533,11 @@ if ( dp->d_flags & DIR_SOLID || dp->d_major_type & DB5_MAJORTYPE_BINARY_MASK ) { /* at leaf */ if ( leaf_func ) - if(leaf_func( wdbp, dfp, client_data )) return 1; + if (leaf_func( wdbp, dfp, client_data )) { + return 1; + } else { + return 0; + } } } @@ -558,16 +562,16 @@ db_full_path_init(&belowpath); db_dup_full_path(&belowpath, entry); + if (DB_FULL_PATH_CUR_DIR(entry)->d_flags & DIR_COMB) { + if ( rt_db_get_internal5( &in, DB_FULL_PATH_CUR_DIR(entry), wdbp->dbip, NULL, wdbp->wdb_resp ) < 0 ) + return 0; - if ( rt_db_get_internal5( &in, DB_FULL_PATH_CUR_DIR(entry), wdbp->dbip, NULL, wdbp->wdb_resp ) < 0 ) - return 0; + comb = (struct rt_comb_internal *)in.idb_ptr; - comb = (struct rt_comb_internal *)in.idb_ptr; + state = db_fullpath_stateful_traverse_subtree( comb->tree, db_fullpath_stateful_traverse, wdbp, &belowpath, find_execute_nested_plans, find_execute_nested_plans, wdbp->wdb_resp, plan->bl_data[0] ); - state = db_fullpath_stateful_traverse_subtree( comb->tree, db_fullpath_stateful_traverse, wdbp, &belowpath, find_execute_nested_plans, find_execute_nested_plans, wdbp->wdb_resp, plan->bl_data[0] ); - - rt_db_free_internal( &in, wdbp->wdb_resp ); - + rt_db_free_internal( &in, wdbp->wdb_resp ); + } db_free_full_path(&belowpath); if (state >= 1) { return 1; @@ -1827,14 +1831,16 @@ if ( !( (argv[1][0] == '-') || (argv[1][0] == '!') || (argv[1][0] == '(') ) && (strcmp(argv[1],"/") != 0) && (strcmp(argv[1],".") != 0) ) { /* We seem to have a path - make sure it's valid */ - if (db_lookup(wdbp->dbip, argv[1], LOOKUP_QUIET) == DIR_NULL) { + db_string_to_path(&dfp, wdbp->dbip, argv[1]); + if (db_lookup(wdbp->dbip, dfp.fp_names[0]->d_namep , LOOKUP_QUIET) == DIR_NULL) { Tcl_AppendResult(interp, "path not found in database.\n", (char *)NULL); + db_free_full_path(&dfp); return TCL_ERROR; } - db_string_to_path(&dfp, wdbp->dbip, argv[1]); isoutput = 0; if (find_formplan(&argv[2], &dbplan) != BRLCAD_OK) { Tcl_AppendResult(interp, "Failed to build find plan.\n", (char *)NULL); + db_free_full_path(&dfp); return TCL_ERROR; } else { find_execute(dbplan, &dfp, wdbp, 0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-18 15:59:17
|
Revision: 32673 http://brlcad.svn.sourceforge.net/brlcad/?rev=32673&view=rev Author: starseeker Date: 2008-09-18 22:59:27 +0000 (Thu, 18 Sep 2008) Log Message: ----------- Doggone it - do path validation right this time. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-18 22:50:57 UTC (rev 32672) +++ brlcad/trunk/src/libged/search.c 2008-09-18 22:59:27 UTC (rev 32673) @@ -1831,9 +1831,8 @@ if ( !( (argv[1][0] == '-') || (argv[1][0] == '!') || (argv[1][0] == '(') ) && (strcmp(argv[1],"/") != 0) && (strcmp(argv[1],".") != 0) ) { /* We seem to have a path - make sure it's valid */ - db_string_to_path(&dfp, wdbp->dbip, argv[1]); - if (db_lookup(wdbp->dbip, dfp.fp_names[0]->d_namep , LOOKUP_QUIET) == DIR_NULL) { - Tcl_AppendResult(interp, "path not found in database.\n", (char *)NULL); + if (db_string_to_path(&dfp, wdbp->dbip, argv[1]) == -1) { + Tcl_AppendResult(interp, " Search path not found in database.\n", (char *)NULL); db_free_full_path(&dfp); return TCL_ERROR; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2008-09-18 23:18:34
|
Revision: 32685 http://brlcad.svn.sourceforge.net/brlcad/?rev=32685&view=rev Author: brlcad Date: 2008-09-19 06:18:44 +0000 (Fri, 19 Sep 2008) Log Message: ----------- ws Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-19 05:45:22 UTC (rev 32684) +++ brlcad/trunk/src/libged/search.c 2008-09-19 06:18:44 UTC (rev 32685) @@ -236,27 +236,27 @@ { "(", N_OPENPAREN, c_openparen, O_ZERO }, { ")", N_CLOSEPAREN, c_closeparen, O_ZERO }, { "-a", N_AND, NULL, O_NONE }, - { "-ab", N_ABOVE, c_above, O_ZERO }, - { "-above", N_ABOVE, c_above, O_ZERO }, + { "-ab", N_ABOVE, c_above, O_ZERO }, + { "-above", N_ABOVE, c_above, O_ZERO }, { "-and", N_AND, NULL, O_NONE }, - { "-attr", N_ATTR, c_attr, O_ARGV }, - { "-bl", N_BELOW, c_below, O_ZERO }, - { "-below", N_BELOW, c_below, O_ZERO }, - { "-empty", N_EMPTY, c_empty, O_ZERO }, - { "-iname", N_INAME, c_iname, O_ARGV }, - { "-iregex", N_IREGEX, c_iregex, O_ARGV }, - { "-maxdepth", N_MAXDEPTH, c_maxdepth, O_ARGV }, - { "-mindepth", N_MINDEPTH, c_mindepth, O_ARGV }, + { "-attr", N_ATTR, c_attr, O_ARGV }, + { "-bl", N_BELOW, c_below, O_ZERO }, + { "-below", N_BELOW, c_below, O_ZERO }, + { "-empty", N_EMPTY, c_empty, O_ZERO }, + { "-iname", N_INAME, c_iname, O_ARGV }, + { "-iregex", N_IREGEX, c_iregex, O_ARGV }, + { "-maxdepth", N_MAXDEPTH, c_maxdepth, O_ARGV }, + { "-mindepth", N_MINDEPTH, c_mindepth, O_ARGV }, { "-name", N_NAME, c_name, O_ARGV }, { "-not", N_NOT, c_not, O_ZERO }, - { "-o", N_OR, c_or, O_ZERO }, - { "-or", N_OR, c_or, O_ZERO }, + { "-o", N_OR, c_or, O_ZERO }, + { "-or", N_OR, c_or, O_ZERO }, { "-path", N_PATH, c_path, O_ARGV }, { "-print", N_PRINT, c_print, O_ZERO }, { "-print0", N_PRINT0, c_print0, O_ZERO }, - { "-regex", N_REGEX, c_regex, O_ARGV }, + { "-regex", N_REGEX, c_regex, O_ARGV }, { "-stdattr", N_STDATTR, c_stdattr, O_ZERO }, - { "-type", N_TYPE, c_type, O_ARGV }, + { "-type", N_TYPE, c_type, O_ARGV }, }; static PLAN * @@ -334,7 +334,6 @@ } - int find_execute_nested_plans(struct rt_wdb *wdbp, struct db_full_path *entry, genptr_t inputplan) { PLAN *p; @@ -342,7 +341,7 @@ int state; for (p = plan; p && (state = (p->eval)(p, entry, wdbp)); p = p->next) ; - return state; + return state; } @@ -379,10 +378,6 @@ } - - - - /* * D B _ F U L L P A T H _ S T A T E F U L _ T R A V E R S E _ S U B T R E E * @@ -392,17 +387,17 @@ */ int db_fullpath_stateful_traverse_subtree(union tree *tp, - int (*traverse_func) ( struct rt_wdb *, struct db_full_path *, - int (*) (struct rt_wdb *, struct db_full_path *, genptr_t), - int (*) (struct rt_wdb *, struct db_full_path *, genptr_t), - struct resource *, - genptr_t), - struct rt_wdb *wdbp, - struct db_full_path *dfp, - int (*comb_func) (struct rt_wdb *, struct db_full_path *, genptr_t), - int (*leaf_func) (struct rt_wdb *, struct db_full_path *, genptr_t), - struct resource *resp, - genptr_t client_data) + int (*traverse_func) ( struct rt_wdb *, struct db_full_path *, + int (*) (struct rt_wdb *, struct db_full_path *, genptr_t), + int (*) (struct rt_wdb *, struct db_full_path *, genptr_t), + struct resource *, + genptr_t), + struct rt_wdb *wdbp, + struct db_full_path *dfp, + int (*comb_func) (struct rt_wdb *, struct db_full_path *, genptr_t), + int (*leaf_func) (struct rt_wdb *, struct db_full_path *, genptr_t), + struct resource *resp, + genptr_t client_data) { struct directory *dp; int state = 0; @@ -466,11 +461,11 @@ */ int db_fullpath_stateful_traverse( struct rt_wdb *wdbp, - struct db_full_path *dfp, - int (*comb_func) (struct rt_wdb *, struct db_full_path *, genptr_t), - int (*leaf_func) (struct rt_wdb *, struct db_full_path *, genptr_t), - struct resource *resp, - genptr_t client_data ) + struct db_full_path *dfp, + int (*comb_func) (struct rt_wdb *, struct db_full_path *, genptr_t), + int (*leaf_func) (struct rt_wdb *, struct db_full_path *, genptr_t), + struct resource *resp, + genptr_t client_data ) { struct directory *dp; register int i; @@ -482,7 +477,7 @@ if ( dp->d_flags & DIR_COMB ) { /* entering region */ - if ( comb_func ) + if ( comb_func ) if (comb_func( wdbp, dfp, client_data )) return 1; if ( wdbp->dbip->dbi_version < 5 ) { register union record *rp; @@ -503,10 +498,10 @@ state = db_fullpath_stateful_traverse(wdbp, dfp, comb_func, leaf_func, resp, client_data); DB_FULL_PATH_POP(dfp); if (state == 1) { - return 1; + return 1; } else { - return 0; - } + return 0; + } } } bu_free( (char *)rp, "db_preorder_traverse[]" ); @@ -542,13 +537,11 @@ } - - /* * -below expression functions -- * * Conduct the test described by expression on all objects - * below the current object in the tree. + * below the current object in the tree. */ int f_below(PLAN *plan, struct db_full_path *entry, struct rt_wdb *wdbp) @@ -564,13 +557,13 @@ if (DB_FULL_PATH_CUR_DIR(entry)->d_flags & DIR_COMB) { if ( rt_db_get_internal5( &in, DB_FULL_PATH_CUR_DIR(entry), wdbp->dbip, NULL, wdbp->wdb_resp ) < 0 ) - return 0; + return 0; - comb = (struct rt_comb_internal *)in.idb_ptr; + comb = (struct rt_comb_internal *)in.idb_ptr; - state = db_fullpath_stateful_traverse_subtree( comb->tree, db_fullpath_stateful_traverse, wdbp, &belowpath, find_execute_nested_plans, find_execute_nested_plans, wdbp->wdb_resp, plan->bl_data[0] ); + state = db_fullpath_stateful_traverse_subtree( comb->tree, db_fullpath_stateful_traverse, wdbp, &belowpath, find_execute_nested_plans, find_execute_nested_plans, wdbp->wdb_resp, plan->bl_data[0] ); - rt_db_free_internal( &in, wdbp->wdb_resp ); + rt_db_free_internal( &in, wdbp->wdb_resp ); } db_free_full_path(&belowpath); if (state >= 1) { @@ -578,7 +571,7 @@ } else { return 0; } - + } int @@ -589,9 +582,6 @@ } - - - /* * expression -o expression functions -- * @@ -671,7 +661,6 @@ } - /* * -regex regexp (and related) functions -- * @@ -866,7 +855,6 @@ } - /* * -type function -- * @@ -1009,8 +997,8 @@ type_match = 1; } } - if ( (!bu_fnmatch(plan->type_data, "c", 0)) || (!bu_fnmatch(plan->type_data, "comb", 0)) || (!bu_fnmatch(plan->type_data, "combination", 0))) { - type_match = 1; + if ( (!bu_fnmatch(plan->type_data, "c", 0)) || (!bu_fnmatch(plan->type_data, "comb", 0)) || (!bu_fnmatch(plan->type_data, "combination", 0))) { + type_match = 1; } break; default: @@ -1111,9 +1099,9 @@ struct rt_comb_internal *comb; struct directory *testdp; if (DB_FULL_PATH_CUR_DIR(entry)->d_flags & DIR_COMB) { - rt_db_get_internal5( &in, DB_FULL_PATH_CUR_DIR(entry), wdbp->dbip, (fastf_t *)NULL, &rt_uniresource); - comb = (struct rt_comb_internal *)in.idb_ptr; - if (comb->tree == NULL) { + rt_db_get_internal5( &in, DB_FULL_PATH_CUR_DIR(entry), wdbp->dbip, (fastf_t *)NULL, &rt_uniresource); + comb = (struct rt_comb_internal *)in.idb_ptr; + if (comb->tree == NULL) { rt_db_free_internal( &in, &rt_uniresource ); return 1; } else { @@ -1140,7 +1128,7 @@ * * True if the object being examined shares the pattern as * part of its path. To exclude results of certain directories - * use the -not option with this option. + * use the -not option with this option. */ int f_path(PLAN *plan, struct db_full_path *entry, struct rt_wdb *wdbp) @@ -1482,7 +1470,7 @@ /* * if we encounter an above, then snag the next node and place - * it in the not's subplan. + * it in the not's subplan. */ if (next->type == N_ABOVE) { @@ -1542,13 +1530,13 @@ /* * if we encounter a not, then snag the next node and place - * it in the not's subplan. + * it in the not's subplan. */ if (next->type == N_BELOW) { - + node = yanknode(&plan); if (node != NULL && node->type == N_BELOW) { - bu_log("Error - repeated -below node in plan.\n"); + bu_log("Error - repeated -below node in plan.\n"); return BRLCAD_ERROR; } if (node == NULL) { @@ -1579,10 +1567,6 @@ } - - - - /* * or_squish -- * compresses -o expressions in our search plan. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2008-09-18 23:24:36
|
Revision: 32686 http://brlcad.svn.sourceforge.net/brlcad/?rev=32686&view=rev Author: brlcad Date: 2008-09-19 06:24:47 +0000 (Fri, 19 Sep 2008) Log Message: ----------- quell warnings and fix a bug with case-insensitive matching (it was always matching case-insensitive). Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-19 06:18:44 UTC (rev 32685) +++ brlcad/trunk/src/libged/search.c 2008-09-19 06:24:47 UTC (rev 32686) @@ -208,7 +208,6 @@ } else { struct rt_db_internal in; struct rt_comb_internal *comb; - struct directory *ndp; if ( rt_db_get_internal5( &in, dp, wdbp->dbip, NULL, resp ) < 0 ) return; @@ -321,8 +320,8 @@ PLAN *p; int state; - for (p = plan->p_data[0]; - p && (state = (p->eval)(p, entry, wdbp)); p = p->next); + for (p = plan->p_data[0]; p && (state = (p->eval)(p, entry, wdbp)); p = p->next) + ; return (!state); } @@ -356,7 +355,6 @@ int f_above(PLAN *plan, struct db_full_path *entry, struct rt_wdb *wdbp) { - PLAN *p; int state = 0; struct db_full_path abovepath; db_full_path_init(&abovepath); @@ -508,7 +506,6 @@ } else { struct rt_db_internal in; struct rt_comb_internal *comb; - struct directory *ndp; if ( rt_db_get_internal5( &in, dp, wdbp->dbip, NULL, resp ) < 0 ) return 0; @@ -527,13 +524,16 @@ } if ( dp->d_flags & DIR_SOLID || dp->d_major_type & DB5_MAJORTYPE_BINARY_MASK ) { /* at leaf */ - if ( leaf_func ) + if ( leaf_func ) { if (leaf_func( wdbp, dfp, client_data )) { return 1; } else { return 0; } + } } + + return 0; } @@ -546,12 +546,11 @@ int f_below(PLAN *plan, struct db_full_path *entry, struct rt_wdb *wdbp) { - PLAN *p; - int state = 0; struct db_full_path belowpath; struct rt_db_internal in; struct rt_comb_internal *comb; - struct directory *ndp; + int state = 0; + db_full_path_init(&belowpath); db_dup_full_path(&belowpath, entry); @@ -680,9 +679,9 @@ regex_t reg; PLAN *new; int rv; - size_t len; + bu_log("Matching extened regular expression: %s\n", regexp); - if (icase = 1 ) { + if (icase == 1) { rv = regcomp(®, regexp, REG_NOSUB|REG_EXTENDED|REG_ICASE); } else { rv = regcomp(®, regexp, REG_NOSUB|REG_EXTENDED); @@ -1097,7 +1096,7 @@ { struct rt_db_internal in; struct rt_comb_internal *comb; - struct directory *testdp; + if (DB_FULL_PATH_CUR_DIR(entry)->d_flags & DIR_COMB) { rt_db_get_internal5( &in, DB_FULL_PATH_CUR_DIR(entry), wdbp->dbip, (fastf_t *)NULL, &rt_uniresource); comb = (struct rt_comb_internal *)in.idb_ptr; @@ -1767,13 +1766,9 @@ int argc, char *argv[]) { - register int i, k; - register struct directory *dp; - struct rt_db_internal intern; - register struct rt_comb_internal *comb=(struct rt_comb_internal *)NULL; - struct bu_vls vls; - int aflag = 0; /* look at all objects */ PLAN *dbplan; + register int i; + register struct directory *dp; struct db_full_path dfp; if (argc < 2) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-09-22 18:26:30
|
Revision: 32734 http://brlcad.svn.sourceforge.net/brlcad/?rev=32734&view=rev Author: starseeker Date: 2008-09-22 18:26:19 +0000 (Mon, 22 Sep 2008) Log Message: ----------- Deal with aboves and belows before nots. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-09-22 18:03:55 UTC (rev 32733) +++ brlcad/trunk/src/libged/search.c 2008-09-22 18:26:19 UTC (rev 32734) @@ -1709,9 +1709,9 @@ */ if(paren_squish(plan, &plan) != BRLCAD_OK) return BRLCAD_ERROR; /* ()'s */ - if(not_squish(plan, &plan) != BRLCAD_OK) return BRLCAD_ERROR; /* !'s */ if(above_squish(plan, &plan) != BRLCAD_OK) return BRLCAD_ERROR; /* above's */ if(below_squish(plan, &plan) != BRLCAD_OK) return BRLCAD_ERROR; /* below's */ + if(not_squish(plan, &plan) != BRLCAD_OK) return BRLCAD_ERROR; /* !'s */ if(or_squish(plan, &plan) != BRLCAD_OK) return BRLCAD_ERROR; /* -o's */ (*resultplan) = plan; return BRLCAD_OK; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-10-25 19:51:00
|
Revision: 33066 http://brlcad.svn.sourceforge.net/brlcad/?rev=33066&view=rev Author: starseeker Date: 2008-10-25 19:50:56 +0000 (Sat, 25 Oct 2008) Log Message: ----------- Revert inclusion of db_count_tree_leaves - need to do more work/thinking on what is needed. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2008-10-25 14:02:56 UTC (rev 33065) +++ brlcad/trunk/src/libged/search.c 2008-10-25 19:50:56 UTC (rev 33066) @@ -226,42 +226,6 @@ } } - -int db_count_tree_leaves( const union tree *tp ) -{ - if ( tp == TREE_NULL ) return 0; - - RT_CK_TREE(tp); - - switch ( tp->tr_op ) { - case OP_NOP: - return 0; - case OP_DB_LEAF: - return 1; - case OP_SOLID: - return 1; - case OP_REGION: - return db_count_tree_leaves( tp->tr_b.tb_left ) + db_count_tree_leaves( tp->tr_b.tb_right ); - case OP_NOT: - case OP_GUARD: - case OP_XNOP: - /* Unary ops */ - return db_count_tree_leaves( tp->tr_b.tb_left ); - case OP_UNION: - case OP_INTERSECT: - case OP_SUBTRACT: - case OP_XOR: - /* This node is known to be a binary op */ - return db_count_tree_leaves( tp->tr_b.tb_left ) + db_count_tree_leaves( tp->tr_b.tb_right ); - default: - bu_log("db_tree_nleaves: bad op %d\n", tp->tr_op); - bu_bomb("db_tree_nleaves\n"); - } - return( -1 ); -} - - - int typecompare(const void *, const void *); /* NB: the following table must be sorted lexically. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2010-05-18 13:54:22
|
Revision: 39306 http://brlcad.svn.sourceforge.net/brlcad/?rev=39306&view=rev Author: brlcad Date: 2010-05-18 13:54:16 +0000 (Tue, 18 May 2010) Log Message: ----------- want size_t Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2010-05-18 13:53:40 UTC (rev 39305) +++ brlcad/trunk/src/libged/search.c 2010-05-18 13:54:16 UTC (rev 39306) @@ -727,7 +727,7 @@ struct bu_vls value; struct bu_attribute_value_set avs; struct bu_attribute_value_pair *avpp; - int equalpos = 0; + size_t equalpos = 0; int checkval = 0; int strcomparison = 0; int i; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2010-05-18 20:55:40
|
Revision: 39344 http://brlcad.svn.sourceforge.net/brlcad/?rev=39344&view=rev Author: brlcad Date: 2010-05-18 20:55:31 +0000 (Tue, 18 May 2010) Log Message: ----------- bu_calloc will never return null. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2010-05-18 20:12:33 UTC (rev 39343) +++ brlcad/trunk/src/libged/search.c 2010-05-18 20:55:31 UTC (rev 39344) @@ -266,13 +266,10 @@ { PLAN *new; - if ((new = bu_calloc(1, sizeof(PLAN), "Allocate PLAN structure"))) { - new->type = t; - new->eval = f; - return new; - } - bu_exit(1, NULL); - /* NOTREACHED */ + new = bu_calloc(1, sizeof(PLAN), "Allocate PLAN structure"); + new->type = t; + new->eval = f; + return new; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-01-19 21:52:30
|
Revision: 42464 http://brlcad.svn.sourceforge.net/brlcad/?rev=42464&view=rev Author: brlcad Date: 2011-01-19 21:52:24 +0000 (Wed, 19 Jan 2011) Log Message: ----------- the typecompare() callback passed to bsearch() needs to return value <0, ==0, >0 depending on the comparison, not just a boolean. use bu_strcmp() instead of !BU_STR_EQUAL() Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-01-19 21:34:34 UTC (rev 42463) +++ brlcad/trunk/src/libged/search.c 2011-01-19 21:52:24 UTC (rev 42464) @@ -1544,7 +1544,7 @@ int typecompare(const void *a, const void *b) { - return !BU_STR_EQUAL(((OPTION *)a)->name, ((OPTION *)b)->name); + return bu_strcmp(((OPTION *)a)->name, ((OPTION *)b)->name); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-01-19 23:25:02
|
Revision: 42469 http://brlcad.svn.sourceforge.net/brlcad/?rev=42469&view=rev Author: brlcad Date: 2011-01-19 23:24:55 +0000 (Wed, 19 Jan 2011) Log Message: ----------- ws Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-01-19 23:03:14 UTC (rev 42468) +++ brlcad/trunk/src/libged/search.c 2011-01-19 23:24:55 UTC (rev 42469) @@ -1536,8 +1536,7 @@ OPTION tmp; tmp.name = name; - return ((OPTION *)bsearch(&tmp, options, - sizeof(options)/sizeof(OPTION), sizeof(OPTION), typecompare)); + return ((OPTION *)bsearch(&tmp, options, sizeof(options)/sizeof(OPTION), sizeof(OPTION), typecompare);) } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eri...@us...> - 2011-01-20 01:45:11
|
Revision: 42475 http://brlcad.svn.sourceforge.net/brlcad/?rev=42475&view=rev Author: erikgreenwald Date: 2011-01-20 01:45:04 +0000 (Thu, 20 Jan 2011) Log Message: ----------- fix some... "creative" punctuation Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-01-20 01:40:58 UTC (rev 42474) +++ brlcad/trunk/src/libged/search.c 2011-01-20 01:45:04 UTC (rev 42475) @@ -1536,7 +1536,7 @@ OPTION tmp; tmp.name = name; - return ((OPTION *)bsearch(&tmp, options, sizeof(options)/sizeof(OPTION), sizeof(OPTION), typecompare);) + return ((OPTION *)bsearch(&tmp, options, sizeof(options)/sizeof(OPTION), sizeof(OPTION), typecompare)); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2011-03-02 00:28:38
|
Revision: 43593 http://brlcad.svn.sourceforge.net/brlcad/?rev=43593&view=rev Author: starseeker Date: 2011-03-02 00:28:32 +0000 (Wed, 02 Mar 2011) Log Message: ----------- gentoo wants search_results initialized Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-03-02 00:20:00 UTC (rev 43592) +++ brlcad/trunk/src/libged/search.c 2011-03-02 00:28:32 UTC (rev 43593) @@ -110,7 +110,7 @@ struct db_full_path_list *entry; struct db_full_path_list *new_entry; struct db_full_path_list *path_list; - struct db_full_path_list *search_results; + struct db_full_path_list *search_results = NULL; struct bu_ptbl uniq_db_objs; /* COPY argv_orig to argv; */ char **argv = bu_dup_argv(argc, argv_orig); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2011-03-01 21:55:26
|
Revision: 43586 http://brlcad.svn.sourceforge.net/brlcad/?rev=43586&view=rev Author: starseeker Date: 2011-03-01 21:55:19 +0000 (Tue, 01 Mar 2011) Log Message: ----------- Re-add support for the '.' option (e.g. search . -name s*) but this time do it at the ged level with post-processing of the full search. Also doesn't print the leading '/' character for the '.' searches. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-03-01 20:52:49 UTC (rev 43585) +++ brlcad/trunk/src/libged/search.c 2011-03-01 21:55:19 UTC (rev 43586) @@ -102,13 +102,16 @@ { void *dbplan; int i; - int plan_argv, plan_found; + int plan_argv = 1; + int plan_found = 0; + int build_uniq_list = 0; struct directory *dp; struct db_full_path dfp; struct db_full_path_list *entry; struct db_full_path_list *new_entry; struct db_full_path_list *path_list; struct db_full_path_list *search_results; + struct bu_ptbl uniq_db_objs; /* COPY argv_orig to argv; */ char **argv = bu_dup_argv(argc, argv_orig); @@ -125,8 +128,12 @@ /* initialize result */ bu_vls_trunc(&gedp->ged_result_str, 0); - plan_argv = 1; - plan_found = 0; + /* Check if we're doing a unique object list */ + if ((BU_STR_EQUAL(argv[plan_argv], "."))) { + build_uniq_list = 1; + plan_argv++; + } + while (!plan_found) { if (!((argv[plan_argv][0] == '-') || (argv[plan_argv][0] == '!') || (argv[plan_argv][0] == '(')) && (!BU_STR_EQUAL(argv[plan_argv], "/")) && (!BU_STR_EQUAL(argv[plan_argv], "."))) { /* We seem to have a path - make sure it's valid */ @@ -185,16 +192,32 @@ } } - /* Assign results to string */ - while (BU_LIST_WHILE(entry, db_full_path_list, &(search_results->l))) { - bu_vls_printf(&gedp->ged_result_str, "%s\n", db_path_to_string(entry->path)); - BU_LIST_DEQUEUE(&(entry->l)); - db_free_full_path(entry->path); - bu_free(entry, "free db_full_path_list entry"); + /* Assign results to string - if we're doing a list, process the results for unique objects - otherwise + * just assemble the full path list and return it */ + if (build_uniq_list) { + bu_ptbl_init(&uniq_db_objs, 8, "initialize ptr table"); + while (BU_LIST_WHILE(entry, db_full_path_list, &(search_results->l))) { + bu_ptbl_ins_unique(&uniq_db_objs, (long *)entry->path->fp_names[entry->path->fp_len - 1]); + BU_LIST_DEQUEUE(&(entry->l)); + db_free_full_path(entry->path); + bu_free(entry, "free db_full_path_list entry"); + } + for (i=0; i < (int)BU_PTBL_LEN(&uniq_db_objs); i++) { + dp = (struct directory *)BU_PTBL_GET(&uniq_db_objs, i); + bu_vls_printf(&gedp->ged_result_str, "%s\n", dp->d_namep); + } + bu_ptbl_free(&uniq_db_objs); + } else { + while (BU_LIST_WHILE(entry, db_full_path_list, &(search_results->l))) { + bu_vls_printf(&gedp->ged_result_str, "%s\n", db_path_to_string(entry->path)); + BU_LIST_DEQUEUE(&(entry->l)); + db_free_full_path(entry->path); + bu_free(entry, "free db_full_path_list entry"); + } + db_free_full_path(&dfp); + bu_free_argv(argc, argv); + bu_free(search_results, "free search_results"); } - db_free_full_path(&dfp); - bu_free_argv(argc, argv); - bu_free(search_results, "free search_results"); } return TCL_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2011-03-04 22:08:58
|
Revision: 43708 http://brlcad.svn.sourceforge.net/brlcad/?rev=43708&view=rev Author: starseeker Date: 2011-03-04 22:08:51 +0000 (Fri, 04 Mar 2011) Log Message: ----------- Catch another odd input case Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-03-04 22:07:43 UTC (rev 43707) +++ brlcad/trunk/src/libged/search.c 2011-03-04 22:08:51 UTC (rev 43708) @@ -80,6 +80,12 @@ while (!plan_found) { if (BU_STR_EQUAL(argv[plan_argv], "/") || BU_STR_EQUAL(argv[plan_argv], ".")) { plan_argv++; + if (plan_argv == argc) { + bu_vls_printf(&gedp->ged_result_str, " [path] [expressions...]\n"); + db_free_full_path(&dfp); + bu_free_argv(argc, argv); + return TCL_OK; + } } else { if (!((argv[plan_argv][0] == '-') || (argv[plan_argv][0] == '!') || (argv[plan_argv][0] == '(')) ) { /* We seem to have a path - make sure it's valid */ @@ -95,7 +101,7 @@ db_dup_full_path(new_entry->path, (const struct db_full_path *)&dfp); BU_LIST_PUSH(&(path_list->l), &(new_entry->l)); plan_argv++; - if (plan_argv > argc) { + if (plan_argv == argc) { bu_vls_printf(&gedp->ged_result_str, " [path] [expressions...]\n"); db_free_full_path(&dfp); bu_free_argv(argc, argv); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-03-23 23:00:07
|
Revision: 43946 http://brlcad.svn.sourceforge.net/brlcad/?rev=43946&view=rev Author: brlcad Date: 2011-03-23 23:00:00 +0000 (Wed, 23 Mar 2011) Log Message: ----------- call db_search_free() to release our dbplan allocations. this should prevent/reduce memory leakness across subsequent calls. untested but testing now. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-03-23 22:57:50 UTC (rev 43945) +++ brlcad/trunk/src/libged/search.c 2011-03-23 23:00:00 UTC (rev 43946) @@ -127,6 +127,7 @@ } else { search_results = db_search_full_paths(dbplan, path_list, gedp->ged_wdbp->dbip, gedp->ged_wdbp); } + db_search_freeplan(&dbplan); } /* Assign results to string - if we're doing a list, process the results for unique objects - otherwise This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eri...@us...> - 2011-04-08 19:35:14
|
Revision: 44286 http://brlcad.svn.sourceforge.net/brlcad/?rev=44286&view=rev Author: erikgreenwald Date: 2011-04-08 19:35:08 +0000 (Fri, 08 Apr 2011) Log Message: ----------- some notes on the workaround for the "search ." bug Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-04-08 19:34:24 UTC (rev 44285) +++ brlcad/trunk/src/libged/search.c 2011-04-08 19:35:08 UTC (rev 44286) @@ -61,6 +61,12 @@ if ((BU_STR_EQUAL(argv[plan_argv], "."))) { build_uniq_list = 1; plan_argv++; + /* TODO: This is a workaround for a lower level bug. Should be removed + * when that is fixed. sh/conversion.sh will need to be fixed, as + * well (removing the + * if test "x$OBJECTS" = "x" ] ; then OBJECTS="-print"; fi + * line). + */ if (argc < 3) { bu_vls_printf(&gedp->ged_result_str, " [path] [expressions...]\n"); return TCL_OK; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2011-04-12 18:58:24
|
Revision: 44330 http://brlcad.svn.sourceforge.net/brlcad/?rev=44330&view=rev Author: starseeker Date: 2011-04-12 18:58:18 +0000 (Tue, 12 Apr 2011) Log Message: ----------- This needs more testing, but search . and the conversion.sh script seem to run with this change... Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-04-12 18:40:42 UTC (rev 44329) +++ brlcad/trunk/src/libged/search.c 2011-04-12 18:58:18 UTC (rev 44330) @@ -60,17 +60,6 @@ /* Check if we're doing a unique object list */ if ((BU_STR_EQUAL(argv[plan_argv], "."))) { build_uniq_list = 1; - plan_argv++; - /* TODO: This is a workaround for a lower level bug. Should be removed - * when that is fixed. sh/conversion.sh will need to be fixed, as - * well (removing the - * if test "x$OBJECTS" = "x" ] ; then OBJECTS="-print"; fi - * line). - */ - if (argc < 3) { - bu_vls_printf(&gedp->ged_result_str, " [path] [expressions...]\n"); - return TCL_OK; - } } /* initialize list of search paths */ @@ -84,38 +73,31 @@ bu_vls_trunc(&gedp->ged_result_str, 0); while (!plan_found) { - if (BU_STR_EQUAL(argv[plan_argv], "/") || BU_STR_EQUAL(argv[plan_argv], ".")) { - plan_argv++; - if (plan_argv == argc) { - bu_vls_printf(&gedp->ged_result_str, " [path] [expressions...]\n"); - db_free_full_path(&dfp); - bu_free_argv(argc, argv); - return TCL_OK; - } + if (!argv[plan_argv]) { + /* OK, no plan - will use default behavior */ + plan_found = 1; } else { - if (!((argv[plan_argv][0] == '-') || (argv[plan_argv][0] == '!') || (argv[plan_argv][0] == '(')) ) { - /* We seem to have a path - make sure it's valid */ - if (db_string_to_path(&dfp, gedp->ged_wdbp->dbip, argv[plan_argv]) == -1) { - bu_vls_printf(&gedp->ged_result_str, " Search path not found in database.\n"); - db_free_full_path(&dfp); - bu_free_argv(argc, argv); - return GED_ERROR; - } else { - BU_GETSTRUCT(new_entry, db_full_path_list); - new_entry->path = (struct db_full_path *) bu_malloc(sizeof(struct db_full_path), "new full path"); - db_full_path_init(new_entry->path); - db_dup_full_path(new_entry->path, (const struct db_full_path *)&dfp); - BU_LIST_PUSH(&(path_list->l), &(new_entry->l)); - plan_argv++; - if (plan_argv == argc) { - bu_vls_printf(&gedp->ged_result_str, " [path] [expressions...]\n"); + if (BU_STR_EQUAL(argv[plan_argv], "/") || BU_STR_EQUAL(argv[plan_argv], ".")) { + plan_argv++; + } else { + if (!((argv[plan_argv][0] == '-') || (argv[plan_argv][0] == '!') || (argv[plan_argv][0] == '(')) ) { + /* We seem to have a path - make sure it's valid */ + if (db_string_to_path(&dfp, gedp->ged_wdbp->dbip, argv[plan_argv]) == -1) { + bu_vls_printf(&gedp->ged_result_str, " Search path not found in database.\n"); db_free_full_path(&dfp); bu_free_argv(argc, argv); - return TCL_OK; + return GED_ERROR; + } else { + BU_GETSTRUCT(new_entry, db_full_path_list); + new_entry->path = (struct db_full_path *) bu_malloc(sizeof(struct db_full_path), "new full path"); + db_full_path_init(new_entry->path); + db_dup_full_path(new_entry->path, (const struct db_full_path *)&dfp); + BU_LIST_PUSH(&(path_list->l), &(new_entry->l)); + plan_argv++; } + } else { + plan_found = 1; } - } else { - plan_found = 1; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2011-04-12 21:19:54
|
Revision: 44331 http://brlcad.svn.sourceforge.net/brlcad/?rev=44331&view=rev Author: starseeker Date: 2011-04-12 21:19:48 +0000 (Tue, 12 Apr 2011) Log Message: ----------- Take a stab at using . and / prefixes to denote lists or full paths. This is a significant change to the search syntax and functionality, needs testing. Doesn't yet use the canonical logic to simplify paths. Modified Paths: -------------- brlcad/trunk/src/libged/search.c Modified: brlcad/trunk/src/libged/search.c =================================================================== --- brlcad/trunk/src/libged/search.c 2011-04-12 18:58:18 UTC (rev 44330) +++ brlcad/trunk/src/libged/search.c 2011-04-12 21:19:48 UTC (rev 44331) @@ -46,8 +46,10 @@ struct directory *dp; struct db_full_path dfp; struct db_full_path_list *entry; + struct db_full_path_list *result; struct db_full_path_list *new_entry; struct db_full_path_list *path_list = NULL; + struct db_full_path_list *dispatch_list = NULL; struct db_full_path_list *search_results = NULL; struct bu_ptbl *uniq_db_objs; /* COPY argv_orig to argv; */ @@ -65,7 +67,10 @@ /* initialize list of search paths */ BU_GETSTRUCT(path_list, db_full_path_list); BU_LIST_INIT(&(path_list->l)); + BU_GETSTRUCT(dispatch_list, db_full_path_list); + BU_LIST_INIT(&(dispatch_list->l)); + db_full_path_init(&dfp); db_update_nref(gedp->ged_wdbp->dbip, &rt_uniresource); @@ -77,27 +82,62 @@ /* OK, no plan - will use default behavior */ plan_found = 1; } else { - if (BU_STR_EQUAL(argv[plan_argv], "/") || BU_STR_EQUAL(argv[plan_argv], ".")) { - plan_argv++; - } else { - if (!((argv[plan_argv][0] == '-') || (argv[plan_argv][0] == '!') || (argv[plan_argv][0] == '(')) ) { - /* We seem to have a path - make sure it's valid */ - if (db_string_to_path(&dfp, gedp->ged_wdbp->dbip, argv[plan_argv]) == -1) { - bu_vls_printf(&gedp->ged_result_str, " Search path not found in database.\n"); - db_free_full_path(&dfp); - bu_free_argv(argc, argv); - return GED_ERROR; + if (!((argv[plan_argv][0] == '-') || (argv[plan_argv][0] == '!') || (argv[plan_argv][0] == '(')) ) { + /* We seem to have a path - make sure it's valid */ + if (BU_STR_EQUAL(argv[plan_argv], "/")) { + /* if we have nothing but a slash, add all toplevel objects to the list as + * full path searches */ + for (i = 0; i < RT_DBNHASH; i++) { + for (dp = gedp->ged_wdbp->dbip->dbi_Head[i]; dp != RT_DIR_NULL; dp = dp->d_forw) { + if (dp->d_nref == 0 && !(dp->d_flags & RT_DIR_HIDDEN) && (dp->d_addr != RT_DIR_PHONY_ADDR)) { + db_string_to_path(&dfp, gedp->ged_wdbp->dbip, dp->d_namep); + BU_GETSTRUCT(new_entry, db_full_path_list); + new_entry->path = (struct db_full_path *) bu_malloc(sizeof(struct db_full_path), "new full path"); + db_full_path_init(new_entry->path); + db_dup_full_path(new_entry->path, (const struct db_full_path *)&dfp); + new_entry->local = 0; + BU_LIST_PUSH(&(path_list->l), &(new_entry->l)); + } + } + } + plan_argv++; + } else if (BU_STR_EQUAL(argv[plan_argv], ".")) { + /* if we have nothing but a dot, add all toplevel objects to the list as + * local searches */ + for (i = 0; i < RT_DBNHASH; i++) { + for (dp = gedp->ged_wdbp->dbip->dbi_Head[i]; dp != RT_DIR_NULL; dp = dp->d_forw) { + if (dp->d_nref == 0 && !(dp->d_flags & RT_DIR_HIDDEN) && (dp->d_addr != RT_DIR_PHONY_ADDR)) { + db_string_to_path(&dfp, gedp->ged_wdbp->dbip, dp->d_namep); + BU_GETSTRUCT(new_entry, db_full_path_list); + new_entry->path = (struct db_full_path *) bu_malloc(sizeof(struct db_full_path), "new full path"); + db_full_path_init(new_entry->path); + db_dup_full_path(new_entry->path, (const struct db_full_path *)&dfp); + new_entry->local = 1; + BU_LIST_PUSH(&(path_list->l), &(new_entry->l)); + } + } + } + plan_argv++; + } else if (db_string_to_path(&dfp, gedp->ged_wdbp->dbip, argv[plan_argv]) == -1) { + bu_vls_printf(&gedp->ged_result_str, " Search path not found in database.\n"); + db_free_full_path(&dfp); + bu_free_argv(argc, argv); + return GED_ERROR; + } else { + BU_GETSTRUCT(new_entry, db_full_path_list); + new_entry->path = (struct db_full_path *) bu_malloc(sizeof(struct db_full_path), "new full path"); + db_full_path_init(new_entry->path); + db_dup_full_path(new_entry->path, (const struct db_full_path *)&dfp); + if (argv[plan_argv][0] == '/') { + new_entry->local = 0; } else { - BU_GETSTRUCT(new_entry, db_full_path_list); - new_entry->path = (struct db_full_path *) bu_malloc(sizeof(struct db_full_path), "new full path"); - db_full_path_init(new_entry->path); - db_dup_full_path(new_entry->path, (const struct db_full_path *)&dfp); - BU_LIST_PUSH(&(path_list->l), &(new_entry->l)); - plan_argv++; + new_entry->local = 1; } - } else { - plan_found = 1; + BU_LIST_PUSH(&(path_list->l), &(new_entry->l)); + plan_argv++; } + } else { + plan_found = 1; } } } @@ -110,28 +150,35 @@ db_free_full_path_list(path_list); return GED_ERROR; } else { - if (build_uniq_list) { - uniq_db_objs = db_search_unique_objects(dbplan, path_list, gedp->ged_wdbp->dbip, gedp->ged_wdbp); - } else { - search_results = db_search_full_paths(dbplan, path_list, gedp->ged_wdbp->dbip, gedp->ged_wdbp); + for(BU_LIST_FOR_BACKWARDS(entry, db_full_path_list, &(path_list->l))) { + BU_GETSTRUCT(new_entry, db_full_path_list); + new_entry->path = (struct db_full_path *) bu_malloc(sizeof(struct db_full_path), "new full path"); + db_full_path_init(new_entry->path); + db_dup_full_path(new_entry->path, entry->path); + BU_LIST_PUSH(&(dispatch_list->l), &(new_entry->l)); + if (entry->local) { + uniq_db_objs = db_search_unique_objects(dbplan, dispatch_list, gedp->ged_wdbp->dbip, gedp->ged_wdbp); + for (i=0; i < (int)BU_PTBL_LEN(uniq_db_objs); i++) { + dp = (struct directory *)BU_PTBL_GET(uniq_db_objs, i); + bu_vls_printf(&gedp->ged_result_str, "%s\n", dp->d_namep); + } + bu_ptbl_free(uniq_db_objs); + } else { + search_results = db_search_full_paths(dbplan, dispatch_list, gedp->ged_wdbp->dbip, gedp->ged_wdbp); + for(BU_LIST_FOR(result, db_full_path_list, &(search_results->l))) { + bu_vls_printf(&gedp->ged_result_str, "%s\n", db_path_to_string(result->path)); + } + db_free_full_path_list(search_results); + } + db_free_full_path(new_entry->path); + BU_LIST_DEQUEUE(&(new_entry->l)); + bu_free(new_entry, "free new_entry"); } db_search_freeplan(&dbplan); } /* Assign results to string - if we're doing a list, process the results for unique objects - otherwise * just assemble the full path list and return it */ - if (build_uniq_list) { - for (i=0; i < (int)BU_PTBL_LEN(uniq_db_objs); i++) { - dp = (struct directory *)BU_PTBL_GET(uniq_db_objs, i); - bu_vls_printf(&gedp->ged_result_str, "%s\n", dp->d_namep); - } - bu_ptbl_free(uniq_db_objs); - } else { - for(BU_LIST_FOR(entry, db_full_path_list, &(search_results->l))) { - bu_vls_printf(&gedp->ged_result_str, "%s\n", db_path_to_string(entry->path)); - } - db_free_full_path_list(search_results); - } db_free_full_path(&dfp); db_free_full_path_list(path_list); bu_free_argv(argc, argv); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |