Thread: [brlcad-commits] SF.net SVN: brlcad:[31968] brlcad/trunk/src/libged/wdb_obj.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <br...@us...> - 2008-07-27 01:15:20
|
Revision: 31968 http://brlcad.svn.sourceforge.net/brlcad/?rev=31968&view=rev Author: brlcad Date: 2008-07-27 01:15:28 +0000 (Sun, 27 Jul 2008) Log Message: ----------- since it's happened twice now, add a basic sanity check for an infinite loop when trying to find a new object name during dbconcat Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-07-26 21:48:31 UTC (rev 31967) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-07-27 01:15:28 UTC (rev 31968) @@ -3147,11 +3147,13 @@ struct concat_data *cc_data) { struct bu_vls new_name; + struct bu_vls prev_name; Tcl_HashEntry *ptr = NULL; char *aname = NULL; char *ret_name = NULL; - int new=0; - long num=0; + int new_entry = 0; + long num = 0; + long repeat = 0; RT_CK_DBI(dbip); BU_ASSERT(name_tbl); @@ -3163,13 +3165,14 @@ name = "UNKNOWN"; } - ptr = Tcl_CreateHashEntry( name_tbl, name, &new ); + ptr = Tcl_CreateHashEntry( name_tbl, name, &new_entry ); - if ( !new ) { + if ( !new_entry ) { return( (char *)Tcl_GetHashValue( ptr ) ); } - bu_vls_init( &new_name ); + bu_vls_init(&new_name); + bu_vls_init(&prev_name); do { /* iterate until we find an object name that is not in @@ -3212,7 +3215,7 @@ bu_vls_printf( &new_name, "%ld_", num ); bu_vls_strcat( &new_name, name ); } else { - /* no custom suffix/prefix specified, use prefix */ + /* no custom suffix/prefix specified, use suffix */ if (num > 0) { bu_vls_printf( &new_name, "_%ld", num ); } @@ -3230,6 +3233,18 @@ num++; + /* basic infinite loop sanity check */ + if (bu_vls_strcmp(&new_name, &prev_name) == 0) { + if (repeat > 100) { + bu_log("ERROR: we seem to be stuck in an infinite loop generating a new name (%s)\n", bu_vls_addr(&new_name)); + return NULL; + } + repeat++; + } else { + bu_vls_trunc(&prev_name, 0); + bu_vls_vlscat(&prev_name, &new_name); + } + } while (db_lookup( dbip, aname, LOOKUP_QUIET ) != DIR_NULL || Tcl_FindHashEntry( used_names_tbl, aname ) != NULL); @@ -3247,7 +3262,7 @@ /* we should now have a unique name. store it in the hash */ ret_name = bu_vls_strgrab( &new_name ); Tcl_SetHashValue( ptr, (ClientData)ret_name ); - (void)Tcl_CreateHashEntry( used_names_tbl, ret_name, &new ); + (void)Tcl_CreateHashEntry( used_names_tbl, ret_name, &new_entry ); bu_vls_free( &new_name ); return( ret_name ); @@ -3415,6 +3430,7 @@ return TCL_ERROR; } + memset(&cc_data, 0, sizeof(struct concat_data)); bu_vls_init( &cc_data.affix ); cc_data.copy_mode = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2008-08-19 21:10:18
|
Revision: 32488 http://brlcad.svn.sourceforge.net/brlcad/?rev=32488&view=rev Author: brlcad Date: 2008-08-19 21:10:28 +0000 (Tue, 19 Aug 2008) Log Message: ----------- reword dbversion comment Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-08-19 20:34:26 UTC (rev 32487) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-08-19 21:10:28 UTC (rev 32488) @@ -4736,7 +4736,7 @@ if (wdbp->dbip->dbi_version < 5) { Tcl_DStringAppend(&ds, argv[0], -1); - Tcl_DStringAppend(&ds, " is not available prior to dbversion 5\n", -1); + Tcl_DStringAppend(&ds, " is not available prior to version 5 of the .g file format\n", -1); Tcl_DStringResult(interp, &ds); return TCL_ERROR; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-08-25 20:07:23
|
Revision: 32533 http://brlcad.svn.sourceforge.net/brlcad/?rev=32533&view=rev Author: starseeker Date: 2008-08-25 20:07:24 +0000 (Mon, 25 Aug 2008) Log Message: ----------- Check attributes as well as d_flags when determing if object is a region in wdb_attr_cmd's show option - should be handled at a lower level in some fashion since the file shows correct info without this when mged is restarted, but for now this fixes the labeling issue. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-08-25 14:59:35 UTC (rev 32532) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-08-25 20:07:24 UTC (rev 32533) @@ -7841,11 +7841,22 @@ struct bu_vls vls; int max_attr_name_len=0; int tabs1=0; - + int is_region=0; + + /* pretty print */ bu_vls_init( &vls ); + + /* Need to check attributes explicitly here - as of r32532 DIR_REGION isn't updated + * based on attributes before attr is run + */ + avpp = avs.avp; + for ( i=0; i < avs.count; i++, avpp++ ) { + if(strcmp(avpp->name, "region") && strcmp(avpp->value, "R")) is_region = 1; + } + if ( dp->d_flags & DIR_COMB ) { - if ( dp->d_flags & DIR_REGION ) { + if ( (dp->d_flags & DIR_REGION) || (is_region == 1) ) { bu_vls_printf( &vls, "%s region:\n", argv[2] ); } else { bu_vls_printf( &vls, "%s combination:\n", argv[2] ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-08-25 22:52:53
|
Revision: 32534 http://brlcad.svn.sourceforge.net/brlcad/?rev=32534&view=rev Author: starseeker Date: 2008-08-25 22:52:53 +0000 (Mon, 25 Aug 2008) Log Message: ----------- Revert previous d_flags related check - instead, explicitly set the flags for the current object when the region flag is either added with argument R or removed. This is so far robust for the attr show, tops and t -r commands Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-08-25 20:07:24 UTC (rev 32533) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-08-25 22:52:53 UTC (rev 32534) @@ -7769,8 +7769,11 @@ return TCL_ERROR; } - i = 3; + i = 3; while ( i < argc ) { + if(strcmp( argv[i], "region") == 0 && strcmp(argv[i+1], "R") == 0) { + dp->d_flags = DIR_REGION | DIR_COMB; + } (void)bu_avs_add( &avs, argv[i], argv[i+1] ); i += 2; } @@ -7787,6 +7790,9 @@ } else if ( strcmp( argv[1], "rm" ) == 0 ) { i = 3; while ( i < argc ) { + if(strcmp( argv[i], "region") == 0) { + dp->d_flags = DIR_COMB; + } (void)bu_avs_remove( &avs, argv[i] ); i++; } @@ -7812,6 +7818,9 @@ while ( i < argc ) { const char *old_val; + if(strcmp( argv[i], "region") == 0 && strcmp(argv[i+1], "R") == 0) { + dp->d_flags = DIR_REGION | DIR_COMB; + } old_val = bu_avs_get( &avs, argv[i] ); if ( !old_val ) { (void)bu_avs_add( &avs, argv[i], argv[i+1] ); @@ -7843,18 +7852,9 @@ int tabs1=0; int is_region=0; - /* pretty print */ bu_vls_init( &vls ); - /* Need to check attributes explicitly here - as of r32532 DIR_REGION isn't updated - * based on attributes before attr is run - */ - avpp = avs.avp; - for ( i=0; i < avs.count; i++, avpp++ ) { - if(strcmp(avpp->name, "region") && strcmp(avpp->value, "R")) is_region = 1; - } - if ( dp->d_flags & DIR_COMB ) { if ( (dp->d_flags & DIR_REGION) || (is_region == 1) ) { bu_vls_printf( &vls, "%s region:\n", argv[2] ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-08-26 01:36:06
|
Revision: 32536 http://brlcad.svn.sourceforge.net/brlcad/?rev=32536&view=rev Author: starseeker Date: 2008-08-26 01:36:12 +0000 (Tue, 26 Aug 2008) Log Message: ----------- Add -nonstd and -shader options to attr command to list all objects with nonstandard attributes and all objects with shaders. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-08-25 23:03:55 UTC (rev 32535) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-08-26 01:36:12 UTC (rev 32536) @@ -7650,13 +7650,17 @@ *@brief * implements the "attr" command. * - * argv[1] is a sub-command: + * argv[1] is either a sub-command: * get - get attributes * set - add a new attribute or replace an existing one * rm - remove an attribute * append - append to an existing attribute * edit - invoke an editor to edit all attributes * + * or an option: + * -nonstd - display all non-standard attributes + * -shader - display all objects with shader properties + * * argv[2] is the name of the object * * for "get" or "show", remaining args are attribute names (or none for all) @@ -7675,7 +7679,7 @@ int argc, char *argv[]) { - int i; + int i,j; struct directory *dp; struct bu_attribute_value_set avs; struct bu_attribute_value_pair *avpp; @@ -7685,8 +7689,8 @@ Tcl_AppendResult(interp, "Attributes are not available for this database format.\nPlease upgrade your database format using \"dbupgrade\" to enable attributes.", (char *)NULL ); return TCL_ERROR; } - - if (argc < 3 ) { + + if (argc < 3 && (strcmp( argv[1], "-nonstd" ) != 0) && (strcmp( argv[1], "-shader" ) != 0)) { struct bu_vls vls; bu_vls_init(&vls); @@ -7705,6 +7709,52 @@ return TCL_ERROR; } + if ( strcmp( argv[1], "-nonstd" ) == 0 ) { + Tcl_AppendResult(interp, "Object Name", "\t\t", "Attrbute Name", "\t\t", "Attribute Value", "\n", (char *)NULL); + for ( i = 0; i < RT_DBNHASH; i++ ) { + for (dp = wdbp->dbip->dbi_Head[i]; dp != DIR_NULL; dp = dp->d_forw) { + if (!(dp->d_flags & DIR_HIDDEN)) { + bu_avs_init_empty(&avs); + db5_get_attributes( wdbp->dbip, &avs, dp ); + avpp = avs.avp; + for (j=0; j < avs.count; j++, avpp++ ) { + if (strcmp(avpp->name, "region") != 0 && strcmp(avpp->name, "region_id") != 0 && + strcmp(avpp->name, "material_id") != 0 && strcmp(avpp->name, "los") != 0 && + strcmp(avpp->name, "aircode") != 0 && strcmp(avpp->name, "oshader") != 0 && + strcmp(avpp->name, "rgb") != 0 && strcmp(avpp->name, "oshader") != 0) { + Tcl_AppendResult(interp, dp->d_namep, "\t\t", avpp->name, "\t\t", avpp->value, "\n", (char *)NULL); + } + } + bu_avs_free(&avs); + } + } + } + return TCL_OK; + } + + + if ( strcmp( argv[1], "-shader" ) == 0 ) { + Tcl_AppendResult(interp, "Object Name", "\t\t", "Shader", "\n", (char *)NULL); + for ( i = 0; i < RT_DBNHASH; i++ ) { + for (dp = wdbp->dbip->dbi_Head[i]; dp != DIR_NULL; dp = dp->d_forw) { + if (!(dp->d_flags & DIR_HIDDEN)) { + bu_avs_init_empty(&avs); + db5_get_attributes( wdbp->dbip, &avs, dp ); + avpp = avs.avp; + for (j=0; j < avs.count; j++, avpp++ ) { + if (strcmp(avpp->name, "oshader") == 0 ) { + Tcl_AppendResult(interp, dp->d_namep, "\t\t", avpp->value, "\n", (char *)NULL); + } + } + bu_avs_free(&avs); + } + } + } + return TCL_OK; + } + + + if ( (dp=db_lookup( wdbp->dbip, argv[2], LOOKUP_QUIET)) == DIR_NULL ) { Tcl_AppendResult(interp, argv[2], This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-08-26 01:54:17
|
Revision: 32537 http://brlcad.svn.sourceforge.net/brlcad/?rev=32537&view=rev Author: starseeker Date: 2008-08-26 01:54:26 +0000 (Tue, 26 Aug 2008) Log Message: ----------- fine tuning the setting of the d_flags for attr Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-08-26 01:36:12 UTC (rev 32536) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-08-26 01:54:26 UTC (rev 32537) @@ -7822,7 +7822,7 @@ i = 3; while ( i < argc ) { if(strcmp( argv[i], "region") == 0 && strcmp(argv[i+1], "R") == 0) { - dp->d_flags = DIR_REGION | DIR_COMB; + dp->d_flags |= DIR_REGION; } (void)bu_avs_add( &avs, argv[i], argv[i+1] ); i += 2; @@ -7841,7 +7841,7 @@ i = 3; while ( i < argc ) { if(strcmp( argv[i], "region") == 0) { - dp->d_flags = DIR_COMB; + dp->d_flags = dp->d_flags & ~(DIR_REGION); } (void)bu_avs_remove( &avs, argv[i] ); i++; @@ -7869,7 +7869,7 @@ const char *old_val; if(strcmp( argv[i], "region") == 0 && strcmp(argv[i+1], "R") == 0) { - dp->d_flags = DIR_REGION | DIR_COMB; + dp->d_flags |= DIR_REGION; } old_val = bu_avs_get( &avs, argv[i] ); if ( !old_val ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-08-26 02:01:43
|
Revision: 32538 http://brlcad.svn.sourceforge.net/brlcad/?rev=32538&view=rev Author: starseeker Date: 2008-08-26 02:01:52 +0000 (Tue, 26 Aug 2008) Log Message: ----------- Remove -nonstd & -shader options for attr per Sean - need a more general find command as a solution. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-08-26 01:54:26 UTC (rev 32537) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-08-26 02:01:52 UTC (rev 32538) @@ -7650,16 +7650,12 @@ *@brief * implements the "attr" command. * - * argv[1] is either a sub-command: + * argv[1] is a sub-command: * get - get attributes * set - add a new attribute or replace an existing one * rm - remove an attribute * append - append to an existing attribute * edit - invoke an editor to edit all attributes - * - * or an option: - * -nonstd - display all non-standard attributes - * -shader - display all objects with shader properties * * argv[2] is the name of the object * @@ -7690,7 +7686,7 @@ return TCL_ERROR; } - if (argc < 3 && (strcmp( argv[1], "-nonstd" ) != 0) && (strcmp( argv[1], "-shader" ) != 0)) { + if (argc < 3) { struct bu_vls vls; bu_vls_init(&vls); @@ -7709,52 +7705,7 @@ return TCL_ERROR; } - if ( strcmp( argv[1], "-nonstd" ) == 0 ) { - Tcl_AppendResult(interp, "Object Name", "\t\t", "Attrbute Name", "\t\t", "Attribute Value", "\n", (char *)NULL); - for ( i = 0; i < RT_DBNHASH; i++ ) { - for (dp = wdbp->dbip->dbi_Head[i]; dp != DIR_NULL; dp = dp->d_forw) { - if (!(dp->d_flags & DIR_HIDDEN)) { - bu_avs_init_empty(&avs); - db5_get_attributes( wdbp->dbip, &avs, dp ); - avpp = avs.avp; - for (j=0; j < avs.count; j++, avpp++ ) { - if (strcmp(avpp->name, "region") != 0 && strcmp(avpp->name, "region_id") != 0 && - strcmp(avpp->name, "material_id") != 0 && strcmp(avpp->name, "los") != 0 && - strcmp(avpp->name, "aircode") != 0 && strcmp(avpp->name, "oshader") != 0 && - strcmp(avpp->name, "rgb") != 0 && strcmp(avpp->name, "oshader") != 0) { - Tcl_AppendResult(interp, dp->d_namep, "\t\t", avpp->name, "\t\t", avpp->value, "\n", (char *)NULL); - } - } - bu_avs_free(&avs); - } - } - } - return TCL_OK; - } - - if ( strcmp( argv[1], "-shader" ) == 0 ) { - Tcl_AppendResult(interp, "Object Name", "\t\t", "Shader", "\n", (char *)NULL); - for ( i = 0; i < RT_DBNHASH; i++ ) { - for (dp = wdbp->dbip->dbi_Head[i]; dp != DIR_NULL; dp = dp->d_forw) { - if (!(dp->d_flags & DIR_HIDDEN)) { - bu_avs_init_empty(&avs); - db5_get_attributes( wdbp->dbip, &avs, dp ); - avpp = avs.avp; - for (j=0; j < avs.count; j++, avpp++ ) { - if (strcmp(avpp->name, "oshader") == 0 ) { - Tcl_AppendResult(interp, dp->d_namep, "\t\t", avpp->value, "\n", (char *)NULL); - } - } - bu_avs_free(&avs); - } - } - } - return TCL_OK; - } - - - if ( (dp=db_lookup( wdbp->dbip, argv[2], LOOKUP_QUIET)) == DIR_NULL ) { Tcl_AppendResult(interp, argv[2], This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2008-08-26 02:08:54
|
Revision: 32539 http://brlcad.svn.sourceforge.net/brlcad/?rev=32539&view=rev Author: starseeker Date: 2008-08-26 02:09:03 +0000 (Tue, 26 Aug 2008) Log Message: ----------- a few more wdb_attr_cmd cleanups Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-08-26 02:01:52 UTC (rev 32538) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-08-26 02:09:03 UTC (rev 32539) @@ -7675,7 +7675,7 @@ int argc, char *argv[]) { - int i,j; + int i; struct directory *dp; struct bu_attribute_value_set avs; struct bu_attribute_value_pair *avpp; @@ -7686,7 +7686,7 @@ return TCL_ERROR; } - if (argc < 3) { + if ( argc < 3 ) { struct bu_vls vls; bu_vls_init(&vls); @@ -7705,7 +7705,6 @@ return TCL_ERROR; } - if ( (dp=db_lookup( wdbp->dbip, argv[2], LOOKUP_QUIET)) == DIR_NULL ) { Tcl_AppendResult(interp, argv[2], @@ -7851,13 +7850,11 @@ struct bu_vls vls; int max_attr_name_len=0; int tabs1=0; - int is_region=0; /* pretty print */ bu_vls_init( &vls ); - if ( dp->d_flags & DIR_COMB ) { - if ( (dp->d_flags & DIR_REGION) || (is_region == 1) ) { + if ( dp->d_flags & DIR_REGION ) { bu_vls_printf( &vls, "%s region:\n", argv[2] ); } else { bu_vls_printf( &vls, "%s combination:\n", argv[2] ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2008-11-01 19:56:34
|
Revision: 33102 http://brlcad.svn.sourceforge.net/brlcad/?rev=33102&view=rev Author: brlcad Date: 2008-11-01 19:56:29 +0000 (Sat, 01 Nov 2008) Log Message: ----------- ws Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-11-01 19:18:12 UTC (rev 33101) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-11-01 19:56:29 UTC (rev 33102) @@ -88,10 +88,10 @@ return TCL_ERROR; } /* A verbose message to attempt to soothe and advise the user */ -#define WDB_TCL_ERROR_RECOVERY_SUGGESTION\ +#define WDB_TCL_ERROR_RECOVERY_SUGGESTION\ Tcl_AppendResult(interp, "\ The in-memory table of contents may not match the status of the on-disk\n\ -database. The on-disk database should still be intact. For safety,\n\ +database. The on-disk database should still be intact. For safety, \n\ you should exit now, and resolve the I/O problem, before continuing.\n", (char *)NULL) #define WDB_READ_ERR { \ @@ -119,15 +119,15 @@ return; } /* A verbose message to attempt to soothe and advise the user */ -#define WDB_ERROR_RECOVERY_SUGGESTION\ +#define WDB_ERROR_RECOVERY_SUGGESTION\ bu_log(WDB_ERROR_RECOVERY_MESSAGE) #define WDB_ERROR_RECOVERY_MESSAGE "\ The in-memory table of contents may not match the status of the on-disk\n\ -database. The on-disk database should still be intact. For safety,\n\ +database. The on-disk database should still be intact. For safety, \n\ you should exit now, and resolve the I/O problem, before continuing.\n" -#define WDB_TCL_CHECK_READ_ONLY \ +#define WDB_TCL_CHECK_READ_ONLY \ if (interp) { \ if (wdbp->dbip->dbi_read_only) { \ Tcl_AppendResult(interp, "Sorry, this database is READ-ONLY\n", (char *)NULL); \ @@ -138,8 +138,8 @@ } struct wdb_killtree_data { - Tcl_Interp *interp; - int notify; + Tcl_Interp *interp; + int notify; }; @@ -164,26 +164,26 @@ /* Defined in wdb_cmd_std.c */ BU_EXTERN(int wdb_comb_std_tcl, - (ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[])); + (ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[])); /* Defined in dg_obj.c */ BU_EXTERN(void dgo_impending_wdb_close, - (struct rt_wdb *wdbp, - Tcl_Interp *interp)); + (struct rt_wdb *wdbp, + Tcl_Interp *interp)); BU_EXTERN(void dgo_zapall, (struct rt_wdb *wdbp, Tcl_Interp *interp)); BU_EXTERN(void dgo_eraseobjall_callback, - (struct db_i *dbip, - Tcl_Interp *interp, - struct directory *dp, - int notify)); + (struct db_i *dbip, + Tcl_Interp *interp, + struct directory *dp, + int notify)); BU_EXTERN(void dgo_notifyWdb, (struct rt_wdb *wdbp, - Tcl_Interp *interp)); + Tcl_Interp *interp)); int wdb_init_obj(Tcl_Interp *interp, struct rt_wdb *wdbp, const char *oname); @@ -475,9 +475,9 @@ * */ int -wdb_create_cmd(Tcl_Interp *interp, - struct rt_wdb *wdbp, /* pointer to object */ - const char *oname) /* object name */ +wdb_create_cmd(Tcl_Interp *interp, + struct rt_wdb *wdbp, /* pointer to object */ + const char *oname) /* object name */ { if (wdbp == RT_WDB_NULL) { Tcl_AppendResult(interp, "wdb_init_cmd ", oname, " failed", NULL); @@ -501,9 +501,9 @@ * its state. It is presumed that the wdbp has already been opened. */ int -wdb_init_obj(Tcl_Interp *interp, - struct rt_wdb *wdbp, /* pointer to object */ - const char *oname) /* object name */ +wdb_init_obj(Tcl_Interp *interp, + struct rt_wdb *wdbp, /* pointer to object */ + const char *oname) /* object name */ { if (wdbp == RT_WDB_NULL) { Tcl_AppendResult(interp, "wdb_open ", oname, " failed (wdb_init_obj)", NULL); @@ -546,17 +546,17 @@ *@n db close */ static int -wdb_open_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - const char *argv[]) +wdb_open_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + const char *argv[]) { struct rt_wdb *wdbp; int ret; if (argc == 1) { /* get list of database objects */ - for (BU_LIST_FOR(wdbp, rt_wdb, &rt_g.rtg_headwdb.l)) + for (BU_LIST_FOR (wdbp, rt_wdb, &rt_g.rtg_headwdb.l)) Tcl_AppendResult(interp, bu_vls_addr(&wdbp->wdb_name), " ", (char *)NULL); return TCL_OK; @@ -588,7 +588,7 @@ (void)Tcl_DeleteCommand(interp, argv[1]); if (argc == 3 || strcmp(argv[2], "db") == 0) { - struct db_i *dbip; + struct db_i *dbip; int i; if (argc == 3) @@ -602,20 +602,20 @@ wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_DISK); } else if (strcmp(argv[2], "file") == 0) { - wdbp = wdb_fopen( argv[3] ); + wdbp = wdb_fopen(argv[3]); } else { - struct db_i *dbip; + struct db_i *dbip; if (wdb_decode_dbip(interp, argv[3], &dbip) != TCL_OK) return TCL_ERROR; - if (strcmp( argv[2], "disk" ) == 0) + if (strcmp(argv[2], "disk") == 0) wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_DISK); else if (strcmp(argv[2], "disk_append") == 0) wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_DISK_APPEND_ONLY); - else if (strcmp( argv[2], "inmem" ) == 0) + else if (strcmp(argv[2], "inmem") == 0) wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_INMEM); - else if (strcmp( argv[2], "inmem_append" ) == 0) + else if (strcmp(argv[2], "inmem_append") == 0) wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_INMEM_APPEND_ONLY); else { Tcl_AppendResult(interp, "wdb_open ", argv[2], @@ -657,7 +657,7 @@ /* open database */ if (((dbip = db_open(filename, "r+w")) == DBI_NULL) && - ((dbip = db_open(filename, "r" )) == DBI_NULL)) { + ((dbip = db_open(filename, "r")) == DBI_NULL)) { /* * Check to see if we can access the database @@ -697,10 +697,10 @@ * */ int -wdb_reopen_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_reopen_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct db_i *dbip; struct bu_vls vls; @@ -743,10 +743,10 @@ * procname open [filename] */ static int -wdb_reopen_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_reopen_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -758,19 +758,19 @@ * */ int -wdb_match_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_match_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct bu_vls matches; + struct bu_vls matches; RT_CK_WDB_TCL(interp, wdbp); /* Verify that this wdb supports lookup operations (non-null dbip) */ if (wdbp->dbip == 0) { - Tcl_AppendResult( interp, "this database does not support lookup operations" ); + Tcl_AppendResult(interp, "this database does not support lookup operations"); return TCL_ERROR; } @@ -794,10 +794,10 @@ */ static int -wdb_match_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_match_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -809,13 +809,13 @@ * */ int -wdb_get_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_get_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - int status; - struct rt_db_internal intern; + int status; + struct rt_db_internal intern; if (argc < 2 || argc > 3) { struct bu_vls vls; @@ -867,10 +867,10 @@ * NOTE: This is called directly by gdiff/g_diff.c */ int -wdb_get_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_get_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -882,12 +882,12 @@ * */ int -wdb_get_type_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_get_type_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct rt_db_internal intern; + struct rt_db_internal intern; int type; if (argc != 2) { @@ -1048,10 +1048,10 @@ * */ int -wdb_get_type_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_get_type_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1063,16 +1063,16 @@ * */ int -wdb_put_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_put_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct rt_db_internal intern; - register const struct rt_functab *ftp; - int i; - char *name; - char type[16]; + struct rt_db_internal intern; + register const struct rt_functab *ftp; + int i; + char *name; + char type[16]; if (argc < 3) { struct bu_vls vls; @@ -1090,7 +1090,7 @@ * stdout/file wdb objects don't, but can still be written to. * If not, just skip the lookup test and write the object */ - if (wdbp->dbip && db_lookup(wdbp->dbip, argv[1], LOOKUP_QUIET) != DIR_NULL ) { + if (wdbp->dbip && db_lookup(wdbp->dbip, argv[1], LOOKUP_QUIET) != DIR_NULL) { Tcl_AppendResult(interp, argv[1], " already exists", (char *)NULL); return TCL_ERROR; @@ -1162,10 +1162,10 @@ */ static int -wdb_put_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_put_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1177,15 +1177,15 @@ * */ int -wdb_adjust_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_adjust_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - register struct directory *dp; - int status; - char *name; - struct rt_db_internal intern; + register struct directory *dp; + int status; + char *name; + struct rt_db_internal intern; if (argc < 4) { struct bu_vls vls; @@ -1204,14 +1204,14 @@ dp = db_lookup(wdbp->dbip, name, LOOKUP_QUIET); if (dp == DIR_NULL) { Tcl_AppendResult(interp, name, ": not found", - (char *)NULL ); + (char *)NULL); return TCL_ERROR; } status = rt_db_get_internal(&intern, dp, wdbp->dbip, (matp_t)NULL, &rt_uniresource); if (status < 0) { Tcl_AppendResult(interp, "rt_db_get_internal(", name, - ") failure", (char *)NULL ); + ") failure", (char *)NULL); return TCL_ERROR; } RT_CK_DB_INTERNAL(&intern); @@ -1260,10 +1260,10 @@ */ static int -wdb_adjust_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_adjust_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1275,12 +1275,12 @@ * */ int -wdb_form_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_form_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - const struct rt_functab *ftp; + const struct rt_functab *ftp; if (argc != 2) { struct bu_vls vls; @@ -1317,8 +1317,8 @@ static int wdb_form_tcl(ClientData clientData, Tcl_Interp *interp, - int argc, - char *argv[]) + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1330,26 +1330,26 @@ * */ int -wdb_tops_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_tops_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - register struct directory *dp; - register int i; - struct directory **dirp; - struct directory **dirp0 = (struct directory **)NULL; - struct bu_vls vls; - int c; + register struct directory *dp; + register int i; + struct directory **dirp; + struct directory **dirp0 = (struct directory **)NULL; + struct bu_vls vls; + int c; #ifdef NEW_TOPS_BEHAVIOR - int aflag = 0; - int hflag = 0; - int pflag = 0; + int aflag = 0; + int hflag = 0; + int pflag = 0; #else - int gflag = 0; - int uflag = 0; + int gflag = 0; + int uflag = 0; #endif - int no_decorate = 0; + int no_decorate = 0; RT_CK_WDB_TCL(interp, wdbp); RT_CK_DBI_TCL(interp, wdbp->dbip); @@ -1410,7 +1410,7 @@ for (i = 0; i < RT_DBNHASH; i++) for (dp = wdbp->dbip->dbi_Head[i]; dp != DIR_NULL; - dp = dp->d_forw) { + dp = dp->d_forw) { if (dp->d_nref == 0) *dirp++ = dp; } @@ -1418,7 +1418,7 @@ for (i = 0; i < RT_DBNHASH; i++) for (dp = wdbp->dbip->dbi_Head[i]; dp != DIR_NULL; - dp = dp->d_forw) { + dp = dp->d_forw) { #ifdef NEW_TOPS_BEHAVIOR if (dp->d_nref == 0 && (aflag || @@ -1452,10 +1452,10 @@ * NON-PARALLEL because of rt_uniresource */ static int -wdb_tops_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_tops_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1470,8 +1470,8 @@ static void wdb_deleteProc_rt(ClientData clientData) { - struct application *ap = (struct application *)clientData; - struct rt_i *rtip; + struct application *ap = (struct application *)clientData; + struct rt_i *rtip; RT_AP_CHECK(ap); rtip = ap->a_rt_i; @@ -1480,7 +1480,7 @@ rt_free_rti(rtip); ap->a_rt_i = (struct rt_i *)NULL; - bu_free( (genptr_t)ap, "struct application" ); + bu_free((genptr_t)ap, "struct application"); } /** @@ -1488,15 +1488,15 @@ * */ int -wdb_rt_gettrees_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_rt_gettrees_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct rt_i *rtip; - struct application *ap; - struct resource *resp; - char *newprocname; + struct rt_i *rtip; + struct application *ap; + struct resource *resp; + char *newprocname; RT_CK_WDB_TCL(interp, wdbp); RT_CK_DBI_TCL(interp, wdbp->dbip); @@ -1518,7 +1518,7 @@ (void)Tcl_DeleteCommand(interp, newprocname); while (argv[2][0] == '-') { - if (strcmp( argv[2], "-i") == 0) { + if (strcmp(argv[2], "-i") == 0) { rtip->rti_dont_instance = 1; argc--; argv++; @@ -1554,7 +1554,7 @@ */ BU_GETSTRUCT(resp, resource); rt_init_resource(resp, 0, rtip); - BU_ASSERT_PTR( BU_PTBL_GET(&rtip->rti_resources, 0), !=, NULL ); + BU_ASSERT_PTR(BU_PTBL_GET(&rtip->rti_resources, 0), !=, NULL); ap = (struct application *)bu_malloc(sizeof(struct application), "wdb_rt_gettrees_cmd: ap"); RT_APPLICATION_INIT(ap); @@ -1588,10 +1588,10 @@ * .inmem rt_gettrees .rt all.g light.r */ static int -wdb_rt_gettrees_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_rt_gettrees_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1603,10 +1603,10 @@ * */ struct showmats_data { - Tcl_Interp *smd_interp; - int smd_count; - char *smd_child; - mat_t smd_mat; + Tcl_Interp *smd_interp; + int smd_count; + char *smd_child; + mat_t smd_mat; }; /** @@ -1614,14 +1614,14 @@ * */ static void -Do_showmats(struct db_i *dbip, - struct rt_comb_internal *comb, - union tree *comb_leaf, - genptr_t user_ptr1, - genptr_t user_ptr2, - genptr_t user_ptr3) +Do_showmats(struct db_i *dbip, + struct rt_comb_internal *comb, + union tree *comb_leaf, + genptr_t user_ptr1, + genptr_t user_ptr2, + genptr_t user_ptr3) { - struct showmats_data *smdp; + struct showmats_data *smdp; RT_CK_DBI(dbip); RT_CK_TREE(comb_leaf); @@ -1656,10 +1656,10 @@ * */ int -wdb_showmats_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_showmats_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct showmats_data sm_data; char *parent; @@ -1681,7 +1681,7 @@ parent = strtok(argv[1], "/"); while ((sm_data.smd_child = strtok((char *)NULL, "/")) != NULL) { - struct rt_db_internal intern; + struct rt_db_internal intern; struct rt_comb_internal *comb; if ((dp = db_lookup(wdbp->dbip, parent, LOOKUP_NOISY)) == DIR_NULL) @@ -1736,10 +1736,10 @@ * */ static int -wdb_showmats_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_showmats_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1751,10 +1751,10 @@ * */ int -wdb_shells_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_shells_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct directory *old_dp, *new_dp; struct rt_db_internal old_intern, new_intern; @@ -1794,8 +1794,8 @@ NMG_CK_MODEL(m); bu_vls_init(&shell_name); - for (BU_LIST_FOR(r, nmgregion, &m->r_hd)) { - for (BU_LIST_FOR(s, shell, &r->s_hd)) { + for (BU_LIST_FOR (r, nmgregion, &m->r_hd)) { + for (BU_LIST_FOR (s, shell, &r->s_hd)) { s_tmp = nmg_dup_shell(s, &trans_tbl, &wdbp->wdb_tol); bu_free((genptr_t)trans_tbl, "trans_tbl"); @@ -1809,7 +1809,7 @@ nmg_m_reindex(m, 0); bu_vls_printf(&shell_name, "shell.%d", shell_count); - while (db_lookup(wdbp->dbip, bu_vls_addr( &shell_name), 0) != DIR_NULL) { + while (db_lookup(wdbp->dbip, bu_vls_addr(&shell_name), 0) != DIR_NULL) { bu_vls_trunc(&shell_name, 0); shell_count++; bu_vls_printf(&shell_name, "shell.%d", shell_count); @@ -1851,10 +1851,10 @@ * */ static int -wdb_shells_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_shells_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1866,13 +1866,13 @@ * */ int -wdb_dump_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_dump_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct rt_wdb *op; - int ret; + struct rt_wdb *op; + int ret; RT_CK_WDB_TCL(interp, wdbp); RT_CK_DBI_TCL(interp, wdbp->dbip); @@ -1914,10 +1914,10 @@ * .inmem dump "/tmp/foo.g" */ static int -wdb_dump_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_dump_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1928,10 +1928,10 @@ * */ int -wdb_stub_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_stub_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { if (argc != 1) { struct bu_vls vls; @@ -1953,10 +1953,10 @@ * @returns false */ static int -wdb_stub_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_stub_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -1968,10 +1968,10 @@ * */ int -wdb_dbip_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_dbip_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct bu_vls vls; @@ -1998,10 +1998,10 @@ * @return database objects dbip. */ static int -wdb_dbip_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_dbip_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -2013,10 +2013,10 @@ * */ int -wdb_ls_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_ls_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct bu_vls vls; register struct directory *dp; @@ -2081,13 +2081,13 @@ argv += bu_optind; /* create list of selected objects from database */ - if ( attr_flag ) { + if (attr_flag) { /* select objects based on attributes */ struct bu_ptbl *tbl; struct bu_attribute_value_set avs; int dir_flags; int op; - if ( (argc < 2) || (argc%2 != 0) ) { + if ((argc < 2) || (argc%2 != 0)) { /* should be even number of name/value pairs */ bu_log("ls -A option expects even number of 'name value' pairs\n"); bu_vls_printf(&vls, "helplib_alias wdb_ls %s", cmdname); @@ -2096,39 +2096,39 @@ return TCL_ERROR; } - if ( or_flag ) { + if (or_flag) { op = 2; } else { op = 1; } dir_flags = 0; - if ( aflag ) dir_flags = -1; - if ( cflag ) dir_flags = DIR_COMB; - if ( sflag ) dir_flags = DIR_SOLID; - if ( rflag ) dir_flags = DIR_REGION; - if ( !dir_flags ) dir_flags = -1 ^ DIR_HIDDEN; + if (aflag) dir_flags = -1; + if (cflag) dir_flags = DIR_COMB; + if (sflag) dir_flags = DIR_SOLID; + if (rflag) dir_flags = DIR_REGION; + if (!dir_flags) dir_flags = -1 ^ DIR_HIDDEN; - bu_avs_init( &avs, argc, "wdb_ls_cmd avs" ); + bu_avs_init(&avs, argc, "wdb_ls_cmd avs"); for (i = 0; i < argc; i += 2) { - if ( or_flag ) { - bu_avs_add_nonunique( &avs, argv[i], argv[i+1] ); + if (or_flag) { + bu_avs_add_nonunique(&avs, argv[i], argv[i+1]); } else { - bu_avs_add( &avs, argv[i], argv[i+1] ); + bu_avs_add(&avs, argv[i], argv[i+1]); } } - tbl = db_lookup_by_attr( wdbp->dbip, dir_flags, &avs, op ); - bu_avs_free( &avs ); + tbl = db_lookup_by_attr(wdbp->dbip, dir_flags, &avs, op); + bu_avs_free(&avs); - dirp = wdb_getspace(wdbp->dbip, BU_PTBL_LEN( tbl )); + dirp = wdb_getspace(wdbp->dbip, BU_PTBL_LEN(tbl)); dirp0 = dirp; - for ( i=0; i<BU_PTBL_LEN( tbl ); i++ ) { - *dirp++ = (struct directory *)BU_PTBL_GET( tbl, i ); + for (i=0; i<BU_PTBL_LEN(tbl); i++) { + *dirp++ = (struct directory *)BU_PTBL_GET(tbl, i); } - bu_ptbl_free( tbl ); - bu_free( (char *)tbl, "wdb_ls_cmd ptbl" ); + bu_ptbl_free(tbl); + bu_free((char *)tbl, "wdb_ls_cmd ptbl"); } else if (argc > 0) { /* Just list specified names */ dirp = wdb_getspace(wdbp->dbip, argc); @@ -2151,7 +2151,7 @@ */ for (i = 0; i < RT_DBNHASH; i++) for (dp = wdbp->dbip->dbi_Head[i]; dp != DIR_NULL; dp = dp->d_forw) { - if ( !aflag && (dp->d_flags & DIR_HIDDEN) ) + if (!aflag && (dp->d_flags & DIR_HIDDEN)) continue; *dirp++ = dp; } @@ -2181,10 +2181,10 @@ * @return list objects in this database object. */ static int -wdb_ls_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_ls_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -2196,18 +2196,18 @@ * */ int -wdb_list_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_list_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - register struct directory *dp; - register int arg; - struct bu_vls str; - int id; - int recurse = 0; - char *listeval = "listeval"; - struct rt_db_internal intern; + register struct directory *dp; + register int arg; + struct bu_vls str; + int id; + int recurse = 0; + char *listeval = "listeval"; + struct rt_db_internal intern; if (argc < 2 || MAXARGS < argc) { struct bu_vls vls; @@ -2246,7 +2246,7 @@ struct db_tree_state ts; struct db_full_path path; - db_full_path_init( &path ); + db_full_path_init(&path); ts = wdbp->wdb_initial_tree_state; /* struct copy */ ts.ts_dbip = wdbp->dbip; ts.ts_resp = &rt_uniresource; @@ -2255,17 +2255,17 @@ if (db_follow_path_for_state(&ts, &path, argv[arg], 1)) continue; - dp = DB_FULL_PATH_CUR_DIR( &path ); + dp = DB_FULL_PATH_CUR_DIR(&path); if ((id = rt_db_get_internal(&intern, dp, wdbp->dbip, ts.ts_mat, &rt_uniresource)) < 0) { Tcl_AppendResult(interp, "rt_db_get_internal(", dp->d_namep, - ") failure", (char *)NULL ); + ") failure", (char *)NULL); continue; } - db_free_full_path( &path ); + db_free_full_path(&path); - bu_vls_printf( &str, "%s: ", argv[arg] ); + bu_vls_printf(&str, "%s: ", argv[arg]); if (rt_functab[id].ft_describe(&str, &intern, 99, wdbp->dbip->dbi_base2local, &rt_uniresource, wdbp->dbip) < 0) Tcl_AppendResult(interp, dp->d_namep, ": describe error", (char *)NULL); @@ -2307,10 +2307,10 @@ * */ int -wdb_pathsum_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_pathsum_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { int i, pos_in; struct ged_trace_data gtd; @@ -2408,12 +2408,12 @@ * procname (WDB_LISTEVAL|paths) args(s) */ static int -wdb_pathsum_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_pathsum_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct rt_wdb *wdbp = (struct rt_wdb *)clientData; + struct rt_wdb *wdbp = (struct rt_wdb *)clientData; return wdb_pathsum_cmd(wdbp, interp, argc-1, argv+1); } @@ -2424,8 +2424,8 @@ * */ static void -wdb_scrape_escapes_AppendResult(Tcl_Interp *interp, - char *str) +wdb_scrape_escapes_AppendResult(Tcl_Interp *interp, + char *str) { char buf[2]; buf[1] = '\0'; @@ -2449,10 +2449,10 @@ * */ int -wdb_expand_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_expand_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { register char *pattern; register struct directory *dp; @@ -2549,15 +2549,15 @@ * */ int -wdb_kill_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_kill_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { register struct directory *dp; register int i; - int is_phony; - int verbose = LOOKUP_NOISY; + int is_phony; + int verbose = LOOKUP_NOISY; WDB_TCL_CHECK_READ_ONLY; @@ -2613,10 +2613,10 @@ * procname kill arg(s) */ static int -wdb_kill_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_kill_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -2628,16 +2628,16 @@ * */ int -wdb_killall_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_killall_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - register int i, k; - register struct directory *dp; - struct rt_db_internal intern; - struct rt_comb_internal *comb; - int ret; + register int i, k; + register struct directory *dp; + struct rt_db_internal intern; + struct rt_comb_internal *comb; + int ret; WDB_TCL_CHECK_READ_ONLY; @@ -2645,7 +2645,7 @@ struct bu_vls vls; bu_vls_init(&vls); - bu_vls_printf(&vls, "helplib_alias wdb_killall %s", argv[0]); + bu_vls_printf(&vls, "helplib_alias wdb_killall %s", argv[0]); Tcl_Eval(interp, bu_vls_addr(&vls)); bu_vls_free(&vls); return TCL_ERROR; @@ -2661,7 +2661,7 @@ if (rt_db_get_internal(&intern, dp, wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { Tcl_AppendResult(interp, "rt_db_get_internal(", dp->d_namep, - ") failure", (char *)NULL ); + ") failure", (char *)NULL); ret = TCL_ERROR; continue; } @@ -2669,7 +2669,7 @@ RT_CK_COMB(comb); for (k=1; k<argc; k++) { - int code; + int code; code = db_tree_del_dbleaf(&(comb->tree), argv[k], &rt_uniresource); if (code == -1) @@ -2719,10 +2719,10 @@ * procname killall arg(s) */ static int -wdb_killall_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_killall_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -2734,10 +2734,10 @@ * */ int -wdb_killtree_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_killtree_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { register struct directory *dp; register int i; @@ -2788,10 +2788,10 @@ * procname killtree arg(s) */ static int -wdb_killtree_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_killtree_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -2802,9 +2802,9 @@ * K I L L T R E E */ static void -wdb_killtree_callback(struct db_i *dbip, +wdb_killtree_callback(struct db_i *dbip, register struct directory *dp, - genptr_t ptr) { + genptr_t ptr) { struct wdb_killtree_data *ktdp = (struct wdb_killtree_data *)ptr; Tcl_Interp *interp = ktdp->interp; @@ -2829,10 +2829,10 @@ * */ int -wdb_copy_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_copy_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { register struct directory *proto; register struct directory *dp; @@ -2875,7 +2875,7 @@ return TCL_ERROR; } - if ((dp=db_diradd(wdbp->dbip, argv[2], -1, 0, proto->d_flags, (genptr_t)&proto->d_minor_type)) == DIR_NULL ) { + if ((dp=db_diradd(wdbp->dbip, argv[2], -1, 0, proto->d_flags, (genptr_t)&proto->d_minor_type)) == DIR_NULL) { if (interp) { Tcl_AppendResult(interp, "An error has occured while adding a new object to the database.", (char *)NULL); } else { @@ -2903,10 +2903,10 @@ * procname cp from to */ static int -wdb_copy_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_copy_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -2918,13 +2918,13 @@ * */ int -wdb_move_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_move_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - register struct directory *dp; - struct rt_db_internal intern; + register struct directory *dp; + struct rt_db_internal intern; WDB_TCL_CHECK_READ_ONLY; @@ -2976,10 +2976,10 @@ * procname mv from to */ static int -wdb_move_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_move_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -2990,16 +2990,16 @@ * */ int -wdb_move_all_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_move_all_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - register int i; + register int i; register struct directory *dp; - struct rt_db_internal intern; + struct rt_db_internal intern; struct rt_comb_internal *comb; - struct bu_ptbl stack; + struct bu_ptbl stack; WDB_TCL_CHECK_READ_ONLY; @@ -3025,7 +3025,7 @@ /* rename the record itself */ - if ((dp = db_lookup(wdbp->dbip, argv[1], LOOKUP_NOISY )) == DIR_NULL) + if ((dp = db_lookup(wdbp->dbip, argv[1], LOOKUP_NOISY)) == DIR_NULL) return TCL_ERROR; if (db_lookup(wdbp->dbip, argv[2], LOOKUP_QUIET) != DIR_NULL) { @@ -3059,7 +3059,7 @@ extrude = (struct rt_extrude_internal *)intern.idb_ptr; RT_EXTRUDE_CK_MAGIC(extrude); - if (! strcmp(extrude->sketch_name, argv[1]) ) { + if (! strcmp(extrude->sketch_name, argv[1])) { bu_free(extrude->sketch_name, "sketch name"); extrude->sketch_name = bu_strdup(argv[2]); @@ -3096,11 +3096,10 @@ /* Examine all COMB nodes */ for (i = 0; i < RT_DBNHASH; i++) { for (dp = wdbp->dbip->dbi_Head[i]; dp != DIR_NULL; dp = dp->d_forw) { - union tree *comb_leaf; - int done=0; - int changed=0; + union tree *comb_leaf; + int done=0; + int changed=0; - if (!(dp->d_flags & DIR_COMB)) continue; @@ -3130,7 +3129,7 @@ } comb_leaf = (union tree *)BU_PTBL_GET(&stack, BU_PTBL_END(&stack)-1); if (comb_leaf->tr_op != OP_DB_LEAF) { - bu_ptbl_rm( &stack, (long *)comb_leaf ); + bu_ptbl_rm(&stack, (long *)comb_leaf); comb_leaf = comb_leaf->tr_b.tb_right; } } @@ -3138,8 +3137,8 @@ if (changed) { if (rt_db_put_internal(dp, wdbp->dbip, &intern, &rt_uniresource)) { - bu_ptbl_free( &stack ); - rt_db_free_internal( &intern, &rt_uniresource ); + bu_ptbl_free(&stack); + rt_db_free_internal(&intern, &rt_uniresource); Tcl_AppendResult(interp, "Database write error, aborting", (char *)NULL); @@ -3201,10 +3200,10 @@ name = "UNKNOWN"; } - ptr = Tcl_CreateHashEntry( name_tbl, name, &new_entry ); + ptr = Tcl_CreateHashEntry(name_tbl, name, &new_entry); - if ( !new_entry ) { - return( (char *)Tcl_GetHashValue( ptr ) ); + if (!new_entry) { + return((char *)Tcl_GetHashValue(ptr)); } bu_vls_init(&new_name); @@ -3216,56 +3215,56 @@ * naming mode. */ - bu_vls_trunc( &new_name, 0 ); + bu_vls_trunc(&new_name, 0); if (cc_data->copy_mode & NO_AFFIX) { if (num > 0 && cc_data->copy_mode & CUSTOM_PREFIX) { /* auto-increment prefix */ - bu_vls_printf( &new_name, "%ld_", num ); + bu_vls_printf(&new_name, "%ld_", num); } - bu_vls_strcat( &new_name, name ); + bu_vls_strcat(&new_name, name); if (num > 0 && cc_data->copy_mode & CUSTOM_SUFFIX) { /* auto-increment suffix */ - bu_vls_printf( &new_name, "_%ld", num ); + bu_vls_printf(&new_name, "_%ld", num); } } else if (cc_data->copy_mode & CUSTOM_SUFFIX) { /* use custom suffix */ - bu_vls_strcpy( &new_name, name ); + bu_vls_strcpy(&new_name, name); if (num > 0) { - bu_vls_printf( &new_name, "_%ld_", num ); + bu_vls_printf(&new_name, "_%ld_", num); } - bu_vls_vlscat( &new_name, &cc_data->affix ); + bu_vls_vlscat(&new_name, &cc_data->affix); } else if (cc_data->copy_mode & CUSTOM_PREFIX) { /* use custom prefix */ - bu_vls_vlscat( &new_name, &cc_data->affix ); + bu_vls_vlscat(&new_name, &cc_data->affix); if (num > 0) { - bu_vls_printf( &new_name, "_%ld_", num ); + bu_vls_printf(&new_name, "_%ld_", num); } - bu_vls_strcat( &new_name, name ); + bu_vls_strcat(&new_name, name); } else if (cc_data->copy_mode & AUTO_SUFFIX) { /* use auto-incrementing suffix */ - bu_vls_strcat( &new_name, name ); - bu_vls_printf( &new_name, "_%ld", num ); + bu_vls_strcat(&new_name, name); + bu_vls_printf(&new_name, "_%ld", num); } else if (cc_data->copy_mode & AUTO_PREFIX) { /* use auto-incrementing prefix */ - bu_vls_printf( &new_name, "%ld_", num ); - bu_vls_strcat( &new_name, name ); + bu_vls_printf(&new_name, "%ld_", num); + bu_vls_strcat(&new_name, name); } else { /* no custom suffix/prefix specified, use suffix */ if (num > 0) { - bu_vls_printf( &new_name, "_%ld", num ); + bu_vls_printf(&new_name, "_%ld", num); } - bu_vls_strcpy( &new_name, name ); + bu_vls_strcpy(&new_name, name); } /* make sure it fits for v4 */ - if ( cc_data->old_dbip->dbi_version < 5 ) { + if (cc_data->old_dbip->dbi_version < 5) { if (bu_vls_strlen(&new_name) > V4_MAXNAME) { bu_log("ERROR: generated new name [%s] is too long (%ld > %ld)\n", bu_vls_addr(&new_name), bu_vls_strlen(&new_name), V4_MAXNAME); } return NULL; } - aname = bu_vls_addr( &new_name ); + aname = bu_vls_addr(&new_name); num++; @@ -3281,8 +3280,8 @@ bu_vls_vlscat(&prev_name, &new_name); } - } while (db_lookup( dbip, aname, LOOKUP_QUIET ) != DIR_NULL || - Tcl_FindHashEntry( used_names_tbl, aname ) != NULL); + } while (db_lookup(dbip, aname, LOOKUP_QUIET) != DIR_NULL || + Tcl_FindHashEntry(used_names_tbl, aname) != NULL); /* if they didn't get what they asked for, warn them */ if (num > 1) { @@ -3296,12 +3295,12 @@ } /* we should now have a unique name. store it in the hash */ - ret_name = bu_vls_strgrab( &new_name ); - Tcl_SetHashValue( ptr, (ClientData)ret_name ); - (void)Tcl_CreateHashEntry( used_names_tbl, ret_name, &new_entry ); - bu_vls_free( &new_name ); + ret_name = bu_vls_strgrab(&new_name); + Tcl_SetHashValue(ptr, (ClientData)ret_name); + (void)Tcl_CreateHashEntry(used_names_tbl, ret_name, &new_entry); + bu_vls_free(&new_name); - return( ret_name ); + return(ret_name); } /** @@ -3315,37 +3314,37 @@ struct db_i *dbip, Tcl_HashTable *name_tbl, Tcl_HashTable *used_names_tbl, - struct concat_data *cc_data ) + struct concat_data *cc_data) { char *new_name; - if ( trp == NULL ) { + if (trp == NULL) { return; } - switch ( trp->tr_op ) { + switch (trp->tr_op) { case OP_DB_LEAF: - new_name = get_new_name( trp->tr_l.tl_name, dbip, - name_tbl, used_names_tbl, cc_data ); - if ( new_name ) { - bu_free( trp->tr_l.tl_name, "leaf name" ); - trp->tr_l.tl_name = bu_strdup( new_name ); + new_name = get_new_name(trp->tr_l.tl_name, dbip, + name_tbl, used_names_tbl, cc_data); + if (new_name) { + bu_free(trp->tr_l.tl_name, "leaf name"); + trp->tr_l.tl_name = bu_strdup(new_name); } break; case OP_UNION: case OP_INTERSECT: case OP_SUBTRACT: case OP_XOR: - adjust_names( interp, trp->tr_b.tb_left, dbip, - name_tbl, used_names_tbl, cc_data ); - adjust_names( interp, trp->tr_b.tb_right, dbip, - name_tbl, used_names_tbl, cc_data ); + adjust_names(interp, trp->tr_b.tb_left, dbip, + name_tbl, used_names_tbl, cc_data); + adjust_names(interp, trp->tr_b.tb_right, dbip, + name_tbl, used_names_tbl, cc_data); break; case OP_NOT: case OP_GUARD: case OP_XNOP: - adjust_names( interp, trp->tr_b.tb_left, dbip, - name_tbl, used_names_tbl, cc_data ); + adjust_names(interp, trp->tr_b.tb_left, dbip, + name_tbl, used_names_tbl, cc_data); break; } } @@ -3362,7 +3361,7 @@ struct db_i *curr_dbip, Tcl_HashTable *name_tbl, Tcl_HashTable *used_names_tbl, - struct concat_data *cc_data ) + struct concat_data *cc_data) { struct rt_db_internal ip; struct rt_extrude_internal *extr; @@ -3371,61 +3370,61 @@ struct directory *new_dp; char *new_name; - if ( rt_db_get_internal( &ip, input_dp, input_dbip, NULL, &rt_uniresource) < 0 ) { + if (rt_db_get_internal(&ip, input_dp, input_dbip, NULL, &rt_uniresource) < 0) { Tcl_AppendResult(interp, "Failed to get internal form of object (", input_dp->d_namep, - ") - aborting!!!\n", (char *)NULL ); + ") - aborting!!!\n", (char *)NULL); return TCL_ERROR; } - if ( ip.idb_major_type == DB5_MAJORTYPE_BRLCAD ) { + if (ip.idb_major_type == DB5_MAJORTYPE_BRLCAD) { /* adjust names of referenced object in any object that reference other objects */ - switch ( ip.idb_minor_type ) { + switch (ip.idb_minor_type) { case DB5_MINORTYPE_BRLCAD_COMBINATION: comb = (struct rt_comb_internal *)ip.idb_ptr; - RT_CK_COMB_TCL( interp, comb ); - adjust_names( interp, comb->tree, curr_dbip, name_tbl, used_names_tbl, cc_data ); + RT_CK_COMB_TCL(interp, comb); + adjust_names(interp, comb->tree, curr_dbip, name_tbl, used_names_tbl, cc_data); break; case DB5_MINORTYPE_BRLCAD_EXTRUDE: extr = (struct rt_extrude_internal *)ip.idb_ptr; - RT_EXTRUDE_CK_MAGIC( extr ); + RT_EXTRUDE_CK_MAGIC(extr); - new_name = get_new_name( extr->sketch_name, curr_dbip, name_tbl, used_names_tbl, cc_data ); - if ( new_name ) { - bu_free( extr->sketch_name, "sketch name" ); - extr->sketch_name = bu_strdup( new_name ); + new_name = get_new_name(extr->sketch_name, curr_dbip, name_tbl, used_names_tbl, cc_data); + if (new_name) { + bu_free(extr->sketch_name, "sketch name"); + extr->sketch_name = bu_strdup(new_name); } break; case DB5_MINORTYPE_BRLCAD_DSP: dsp = (struct rt_dsp_internal *)ip.idb_ptr; - RT_DSP_CK_MAGIC( dsp ); + RT_DSP_CK_MAGIC(dsp); - if ( dsp->dsp_datasrc == RT_DSP_SRC_OBJ ) { + if (dsp->dsp_datasrc == RT_DSP_SRC_OBJ) { /* This dsp references a database object, may need to change its name */ - new_name = get_new_name( bu_vls_addr( &dsp->dsp_name ), curr_dbip, - name_tbl, used_names_tbl, cc_data ); - if ( new_name ) { - bu_vls_free( &dsp->dsp_name ); - bu_vls_strcpy( &dsp->dsp_name, new_name ); + new_name = get_new_name(bu_vls_addr(&dsp->dsp_name), curr_dbip, + name_tbl, used_names_tbl, cc_data); + if (new_name) { + bu_vls_free(&dsp->dsp_name); + bu_vls_strcpy(&dsp->dsp_name, new_name); } } break; } } - new_name = get_new_name(input_dp->d_namep, curr_dbip, name_tbl, used_names_tbl, cc_data ); - if ( !new_name ) { + new_name = get_new_name(input_dp->d_namep, curr_dbip, name_tbl, used_names_tbl, cc_data); + if (!new_name) { new_name = input_dp->d_namep; } - if ( (new_dp = db_diradd( curr_dbip, new_name, -1L, 0, input_dp->d_flags, - (genptr_t)&input_dp->d_minor_type ) ) == DIR_NULL ) { + if ((new_dp = db_diradd(curr_dbip, new_name, -1L, 0, input_dp->d_flags, + (genptr_t)&input_dp->d_minor_type)) == DIR_NULL) { Tcl_AppendResult(interp, "Failed to add new object name (", new_name, - ") to directory - aborting!!\n", (char *)NULL ); + ") to directory - aborting!!\n", (char *)NULL); return TCL_ERROR; } - if ( rt_db_put_internal( new_dp, curr_dbip, &ip, &rt_uniresource ) < 0 ) { + if (rt_db_put_internal(new_dp, curr_dbip, &ip, &rt_uniresource) < 0) { Tcl_AppendResult(interp, "Failed to write new object (", new_name, - ") to database - aborting!!\n", (char *)NULL ); + ") to database - aborting!!\n", (char *)NULL); return TCL_ERROR; } @@ -3437,28 +3436,28 @@ * */ int -wdb_concat_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_concat_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct db_i *newdbp; - int bad = 0; - struct directory *dp; - Tcl_HashTable name_tbl; - Tcl_HashTable used_names_tbl; - Tcl_HashEntry *ptr; - Tcl_HashSearch search; - struct concat_data cc_data; + struct db_i *newdbp; + int bad = 0; + struct directory *dp; + Tcl_HashTable name_tbl; + Tcl_HashTable used_names_tbl; + Tcl_HashEntry *ptr; + Tcl_HashSearch search; + struct concat_data cc_data; const char *oldfile; struct bu_vls vls; WDB_TCL_CHECK_READ_ONLY; /* expecting either 3 or 4 args */ - if ( (argc < 3) || - (argc > 4) || - (argc > 1 && argv[1][0] == '-' && argc != 4) ) { + if ((argc < 3) || + (argc > 4) || + (argc > 1 && argv[1][0] == '-' && argc != 4)) { bu_vls_init(&vls); bu_vls_printf(&vls, "helplib_alias wdb_concat %s", argv[0]); Tcl_Eval(interp, bu_vls_addr(&vls)); @@ -3467,15 +3466,15 @@ } memset(&cc_data, 0, sizeof(struct concat_data)); - bu_vls_init( &cc_data.affix ); + bu_vls_init(&cc_data.affix); cc_data.copy_mode = 0; - if ( argv[1][0] == '-' ) { + if (argv[1][0] == '-') { /* specified suffix or prefix explicitly */ oldfile = argv[2]; - if ( argv[1][1] == 'p' ) { + if (argv[1][1] == 'p') { cc_data.copy_mode |= AUTO_PREFIX; @@ -3486,7 +3485,7 @@ cc_data.copy_mode |= CUSTOM_PREFIX; } - } else if ( argv[1][1] == 's' ) { + } else if (argv[1][1] == 's') { cc_data.copy_mode |= AUTO_SUFFIX; @@ -3498,7 +3497,7 @@ } } else { - bu_vls_free( &cc_data.affix ); + bu_vls_free(&cc_data.affix); bu_vls_init(&vls); bu_vls_printf(&vls, "helplib_alias wdb_concat %s", argv[0]); @@ -3523,48 +3522,48 @@ } - if ( wdbp->dbip->dbi_version < 5 ) { - if ( bu_vls_strlen(&cc_data.affix) > V4_MAXNAME-1) { + if (wdbp->dbip->dbi_version < 5) { + if (bu_vls_strlen(&cc_data.affix) > V4_MAXNAME-1) { bu_log("ERROR: affix [%s] is too long for v%d\n", bu_vls_addr(&cc_data.affix), wdbp->dbip->dbi_version); - bu_vls_free( &cc_data.affix ); + bu_vls_free(&cc_data.affix); return TCL_ERROR; } } /* open the input file */ if ((newdbp = db_open(oldfile, "r")) == DBI_NULL) { - bu_vls_free( &cc_data.affix ); + bu_vls_free(&cc_data.affix); perror(oldfile); Tcl_AppendResult(interp, "%s: Can't open ", argv[0], oldfile, (char *)NULL); return TCL_ERROR; } - if ( newdbp->dbi_version > 4 && wdbp->dbip->dbi_version < 5 ) { - bu_vls_free( &cc_data.affix ); + if (newdbp->dbi_version > 4 && wdbp->dbip->dbi_version < 5) { + bu_vls_free(&cc_data.affix); Tcl_AppendResult(interp, argv[0], ": databases are incompatible, use dbupgrade on ", wdbp->dbip->dbi_filename, " first", - (char *)NULL ); + (char *)NULL); return TCL_ERROR; } - db_dirbuild( newdbp ); + db_dirbuild(newdbp); cc_data.new_dbip = newdbp; cc_data.old_dbip = wdbp->dbip; /* visit each directory pointer in the input database */ - Tcl_InitHashTable( &name_tbl, TCL_STRING_KEYS ); - Tcl_InitHashTable( &used_names_tbl, TCL_STRING_KEYS ); + Tcl_InitHashTable(&name_tbl, TCL_STRING_KEYS); + Tcl_InitHashTable(&used_names_tbl, TCL_STRING_KEYS); - FOR_ALL_DIRECTORY_START( dp, newdbp ) { - if ( dp->d_major_type == DB5_MAJORTYPE_ATTRIBUTE_ONLY ) { + FOR_ALL_DIRECTORY_START(dp, newdbp) { + if (dp->d_major_type == DB5_MAJORTYPE_ATTRIBUTE_ONLY) { /* skip GLOBAL object */ continue; } - copy_object( interp, dp, newdbp, wdbp->dbip, &name_tbl, &used_names_tbl, &cc_data ); + copy_object(interp, dp, newdbp, wdbp->dbip, &name_tbl, &used_names_tbl, &cc_data); } FOR_ALL_DIRECTORY_END; - bu_vls_free( &cc_data.affix ); + bu_vls_free(&cc_data.affix); rt_mempurge(&(newdbp->dbi_freep)); /* Free all the directory entries, and close the input database */ @@ -3573,13 +3572,13 @@ db_sync(wdbp->dbip); /* force changes to disk */ /* Free the Hash tables */ - ptr = Tcl_FirstHashEntry( &name_tbl, &search ); - while ( ptr ) { - bu_free( (char *)Tcl_GetHashValue( ptr ), "new name" ); - ptr = Tcl_NextHashEntry( &search ); + ptr = Tcl_FirstHashEntry(&name_tbl, &search); + while (ptr) { + bu_free((char *)Tcl_GetHashValue(ptr), "new name"); + ptr = Tcl_NextHashEntry(&search); } - Tcl_DeleteHashTable( &name_tbl ); - Tcl_DeleteHashTable( &used_names_tbl ); + Tcl_DeleteHashTable(&name_tbl); + Tcl_DeleteHashTable(&used_names_tbl); return bad ? TCL_ERROR : TCL_OK; } @@ -3592,10 +3591,10 @@ * procname concat file.g prefix */ static int -wdb_concat_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_concat_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -3607,18 +3606,18 @@ * */ int -wdb_copyeval_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_copyeval_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct directory *dp; - struct rt_db_internal internal, new_int; - mat_t start_mat; - int id; - int i; - int endpos; - struct ged_trace_data gtd; + struct directory *dp; + struct rt_db_internal internal, new_int; + mat_t start_mat; + int id; + int i; + int endpos; + struct ged_trace_data gtd; struct ged ged; WDB_TCL_CHECK_READ_ONLY; @@ -3684,7 +3683,7 @@ if (id >= ID_COMBINATION) { rt_db_free_internal(&internal, &rt_uniresource); - Tcl_AppendResult(interp, "final component on path must be a solid!!!\n", (char *)NULL ); + Tcl_AppendResult(interp, "final component on path must be a solid!!!\n", (char *)NULL); return TCL_ERROR; } @@ -3739,10 +3738,10 @@ * procname copyeval new_solid path_to_solid */ static int -wdb_copyeval_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_copyeval_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -3754,8 +3753,8 @@ * */ struct dir_check_stuff { - struct db_i *main_dbip; - struct rt_wdb *wdbp; + struct db_i *main_dbip; + struct rt_wdb *wdbp; struct directory **dup_dirp; }; @@ -3764,61 +3763,61 @@ * */ void -wdb_dir_check5(register struct db_i *input_dbip, - const struct db5_raw_internal *rip, - long addr, - genptr_t ptr) +wdb_dir_check5(register struct db_i *input_dbip, + const struct db5_raw_internal *rip, + long addr, + genptr_t ptr) { - char *name; - struct directory *dupdp; - struct bu_vls local; - struct dir_check_stuff *dcsp = (struct dir_check_stuff *)ptr; + char *name; + struct directory *dupdp; + struct bu_vls local; + struct dir_check_stuff *dcsp = (struct dir_check_stuff *)ptr; if (dcsp->main_dbip == DBI_NULL) return; RT_CK_DBI(input_dbip); - RT_CK_RIP( rip ); + RT_CK_RIP(rip); - if ( rip->h_dli == DB5HDR_HFLAGS_DLI_HEADER_OBJECT ) return; - if ( rip->h_dli == DB5HDR_HFLAGS_DLI_FREE_STORAGE ) return; + if (rip->h_dli == DB5HDR_HFLAGS_DLI_HEADER_OBJECT) return; + if (rip->h_dli == DB5HDR_HFLAGS_DLI_FREE_STORAGE) return; name = (char *)rip->name.ext_buf; - if ( name == (char *)NULL ) return; + if (name == (char *)NULL) return; /* do not compare _GLOBAL */ - if ( rip->major_type == DB5_MAJORTYPE_ATTRIBUTE_ONLY && - rip->minor_type == 0 ) + if (rip->major_type == DB5_MAJORTYPE_ATTRIBUTE_ONLY && + rip->minor_type == 0) return; /* Add the prefix, if any */ - bu_vls_init( &local ); - if ( dcsp->main_dbip->dbi_version < 5 ) { + bu_vls_init(&local); + if (dcsp->main_dbip->dbi_version < 5) { if (dcsp->wdbp->wdb_ncharadd > 0) { - bu_vls_strncpy( &local, bu_vls_addr( &dcsp->wdbp->wdb_prestr ), dcsp->wdbp->wdb_ncharadd ); - bu_vls_strcat( &local, name ); + bu_vls_strncpy(&local, bu_vls_addr(&dcsp->wdbp->wdb_prestr), dcsp->wdbp->wdb_ncharadd); + bu_vls_strcat(&local, name); } else { - bu_vls_strncpy( &local, name, V4_MAXNAME ); + bu_vls_strncpy(&local, name, V4_MAXNAME); } - bu_vls_trunc( &local, V4_MAXNAME ); + bu_vls_trunc(&local, V4_MAXNAME); } else { if (dcsp->wdbp->wdb_ncharadd > 0) { - (void)bu_vls_vlscat( &local, &dcsp->wdbp->wdb_prestr ); - (void)bu_vls_strcat( &local, name ); + (void)bu_vls_vlscat(&local, &dcsp->wdbp->wdb_prestr); + (void)bu_vls_strcat(&local, name); } else { - (void)bu_vls_strcat( &local, name ); + (void)bu_vls_strcat(&local, name); } } /* Look up this new name in the existing (main) database */ - if ((dupdp = db_lookup(dcsp->main_dbip, bu_vls_addr( &local ), LOOKUP_QUIET)) != DIR_NULL) { + if ((dupdp = db_lookup(dcsp->main_dbip, bu_vls_addr(&local), LOOKUP_QUIET)) != DIR_NULL) { /* Duplicate found, add it to the list */ dcsp->wdbp->wdb_num_dups++; *dcsp->dup_dirp++ = dupdp; } - bu_vls_free( &local ); + bu_vls_free(&local); return; } @@ -3831,9 +3830,9 @@ int wdb_dir_check(register struct db_i *input_dbip, register const char *name, long int laddr, int len, int flags, genptr_t ptr) { - struct directory *dupdp; - struct bu_vls local; - struct dir_check_stuff *dcsp = (struct dir_check_stuff *)ptr; + struct directory *dupdp; + struct bu_vls local; + struct dir_check_stuff *dcsp = (struct dir_check_stuff *)ptr; if (dcsp->main_dbip == DBI_NULL) return 0; @@ -3841,31 +3840,31 @@ RT_CK_DBI(input_dbip); /* Add the prefix, if any */ - bu_vls_init( &local ); - if ( dcsp->main_dbip->dbi_version < 5 ) { + bu_vls_init(&local); + if (dcsp->main_dbip->dbi_version < 5) { if (dcsp->wdbp->wdb_ncharadd > 0) { - bu_vls_strncpy( &local, bu_vls_addr( &dcsp->wdbp->wdb_prestr ), dcsp->wdbp->wdb_ncharadd ); - bu_vls_strcat( &local, name ); + bu_vls_strncpy(&local, bu_vls_addr(&dcsp->wdbp->wdb_prestr), dcsp->wdbp->wdb_ncharadd); + bu_vls_strcat(&local, name); } else { - bu_vls_strncpy( &local, name, V4_MAXNAME ); + bu_vls_strncpy(&local, name, V4_MAXNAME); } - bu_vls_trunc( &local, V4_MAXNAME ); + bu_vls_trunc(&local, V4_MAXNAME); } else { if (dcsp->wdbp->wdb_ncharadd > 0) { - bu_vls_vlscat( &local, &dcsp->wdbp->wdb_prestr ); - bu_vls_strcat( &local, name ); + bu_vls_vlscat(&local, &dcsp->wdbp->wdb_prestr); + bu_vls_strcat(&local, name); } else { - bu_vls_strcat( &local, name ); + bu_vls_strcat(&local, name); } } /* Look up this new name in the existing (main) database */ - if ((dupdp = db_lookup(dcsp->main_dbip, bu_vls_addr( &local ), LOOKUP_QUIET)) != DIR_NULL) { + if ((dupdp = db_lookup(dcsp->main_dbip, bu_vls_addr(&local), LOOKUP_QUIET)) != DIR_NULL) { /* Duplicate found, add it to the list */ dcsp->wdbp->wdb_num_dups++; *dcsp->dup_dirp++ = dupdp; } - bu_vls_free( &local ); + bu_vls_free(&local); return 0; } @@ -3874,15 +3873,15 @@ * */ int -wdb_dup_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_dup_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct db_i *newdbp = DBI_NULL; - struct directory **dirp0 = (struct directory **)NULL; + struct db_i *newdbp = DBI_NULL; + struct directory **dirp0 = (struct directory **)NULL; struct bu_vls vls; - struct dir_check_stuff dcs; + struct dir_check_stuff dcs; if (argc < 2 || 3 < argc) { struct bu_vls vls; @@ -3894,15 +3893,15 @@ return TCL_ERROR; } - bu_vls_trunc( &wdbp->wdb_prestr, 0 ); + bu_vls_trunc(&wdbp->wdb_prestr, 0); if (argc == 3) (void)bu_vls_strcpy(&wdbp->wdb_prestr, argv[2]); wdbp->wdb_num_dups = 0; - if ( wdbp->dbip->dbi_version < 5 ) { + if (wdbp->dbip->dbi_version < 5) { if ((wdbp->wdb_ncharadd = bu_vls_strlen(&wdbp->wdb_prestr)) > 12) { wdbp->wdb_ncharadd = 12; - bu_vls_trunc( &wdbp->wdb_prestr, 12 ); + bu_vls_trunc(&wdbp->wdb_prestr, 12); } } else { wdbp->wdb_ncharadd = bu_vls_strlen(&wdbp->wdb_prestr); @@ -3921,13 +3920,13 @@ if (wdbp->wdb_ncharadd) { Tcl_AppendResult(interp, " For comparison, all names in ", argv[1], " were prefixed with: ", - bu_vls_addr( &wdbp->wdb_prestr ), "\n", (char *)NULL); + bu_vls_addr(&wdbp->wdb_prestr), "\n", (char *)NULL); } /* Get array to hold names of duplicates */ if ((dirp0 = wdb_getspace(wdbp->dbip, 0)) == (struct directory **) 0) { Tcl_AppendResult(interp, "f_dup: unable to get memory\n", (char *)NULL); - db_close( newdbp ); + db_close(newdbp); return TCL_ERROR; } @@ -3935,7 +3934,7 @@ dcs.main_dbip = wdbp->dbip; dcs.wdbp = wdbp; dcs.dup_dirp = dirp0; - if ( newdbp->dbi_version < 5 ) { + if (newdbp->dbi_version < 5) { if (db_scan(newdbp, wdb_dir_check, 0, (genptr_t)&dcs) < 0) { Tcl_AppendResult(interp, "dup: db_scan failure", (char *)NULL); bu_free((genptr_t)dirp0, "wdb_getspace array"); @@ -3943,14 +3942,14 @@ return TCL_ERROR; } } else { - if ( db5_scan( newdbp, wdb_dir_check5, (genptr_t)&dcs) < 0) { + if (db5_scan(newdbp, wdb_dir_check5, (genptr_t)&dcs) < 0) { Tcl_AppendResult(interp, "dup: db_scan failure", (char *)NULL); bu_free((genptr_t)dirp0, "wdb_getspace array"); db_close(newdbp); return TCL_ERROR; } } - rt_mempurge( &(newdbp->dbi_freep) ); /* didn't really build a directory */ + rt_mempurge(&(newdbp->dbi_freep)); /* didn't really build a directory */ bu_vls_init(&vls); wdb_vls_col_pr4v(&vls, dirp0, (int)(dcs.dup_dirp - dirp0), 0); @@ -3980,10 +3979,10 @@ * */ int -wdb_group_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_group_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { register struct directory *dp; register int i; @@ -4017,10 +4016,10 @@ * procname g groupname object1 object2 .... objectn */ static int -wdb_group_tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_group_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { struct rt_wdb *wdbp = (struct rt_wdb *)clientData; @@ -4032,17 +4031,17 @@ * */ int -wdb_remove_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_remove_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - register struct directory *dp; - register int i; - int num_deleted; - struct rt_db_internal intern; - struct rt_comb_internal *comb; - int ret; + register struct directory *dp; + register int i; + int num_deleted; + struct rt_db_internal intern; + struct rt_comb_internal *comb; + int ret; WDB_TCL_CHECK_READ_ONLY; @@ -4061,7 +4060,7 @@ if ((dp->d_flags & DIR_COMB) == 0) { Tcl_AppendResult(interp, "rm: ", dp->d_namep, - " is not a combination", (char *)NULL ); + " is not a combination", (char *)NULL); return TCL_ERROR; } @@ -4077,7 +4076,7 @@ num_deleted = 0; ret = TCL_OK; for (i = 2; i < argc; i++) { - if (db_tree_del_dbleaf( &(comb->tree), argv[i], &rt_uniresource ) < 0) { + if (db_tree_del_dbleaf(&(comb->tree), argv[i], &rt_uniresource) < 0) { Tcl_AppendResult(interp, " ERROR_deleting ", dp->d_namep, "/", argv[i], "\n", (char *)NULL); @@ -4118,15 +4117,15 @@ * */ int -wdb_region_cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) +wdb_region_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - register struct directory *dp; - int i; - int ident, air; - char oper; + register struct directory *dp; + int i; + int ident, air; + char oper; WDB_TCL_CHECK_READ_ONLY; @@ -4171,7 +4170,7 @@ continue; } oper = argv[i][0]; - if ((dp = db_lookup(wdbp->dbip, argv[i+1], LOOKUP_NOISY )) == DIR_NULL) { + if ((dp = db_lookup(wdbp->dbip, argv[i+1], LOOKUP_NOISY)) == DIR_NULL) { Tcl_AppendResult(interp, "skipping ", argv[i+1], "\n", (char *)NULL); continue; } @@ -4181,7 +4180,7 @@ bu_vls_init(&tmp_vls); bu_vls_printf(... [truncated message content] |
From: <br...@us...> - 2008-11-01 21:03:45
|
Revision: 33103 http://brlcad.svn.sourceforge.net/brlcad/?rev=33103&view=rev Author: brlcad Date: 2008-11-01 21:03:42 +0000 (Sat, 01 Nov 2008) Log Message: ----------- more ws, fine tuning Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-11-01 19:56:29 UTC (rev 33102) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-11-01 21:03:42 UTC (rev 33103) @@ -155,12 +155,12 @@ struct bu_vls affix; }; -#define NO_AFFIX 1<<0 -#define AUTO_PREFIX 1<<1 -#define AUTO_SUFFIX 1<<2 -#define CUSTOM_PREFIX 1<<3 -#define CUSTOM_SUFFIX 1<<4 -#define V4_MAXNAME NAMESIZE +#define NO_AFFIX 1<<0 +#define AUTO_PREFIX 1<<1 +#define AUTO_SUFFIX 1<<2 +#define CUSTOM_PREFIX 1<<3 +#define CUSTOM_SUFFIX 1<<4 +#define V4_MAXNAME NAMESIZE /* Defined in wdb_cmd_std.c */ BU_EXTERN(int wdb_comb_std_tcl, @@ -541,9 +541,9 @@ *@n .inmem get box.s *@n .inmem close * - *@n wdb_open db file "bob.g" - *@n db get white.r - *@n db close + *@n wdb_open db file "bob.g" + *@n db get white.r + *@n db close */ static int wdb_open_tcl(ClientData clientData, @@ -1910,7 +1910,7 @@ *@brief * Write the current state of a database object out to a file. * - * @par Example: + * @par Example: * .inmem dump "/tmp/foo.g" */ static int This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2008-11-12 07:00:06
|
Revision: 33159 http://brlcad.svn.sourceforge.net/brlcad/?rev=33159&view=rev Author: brlcad Date: 2008-11-12 06:59:56 +0000 (Wed, 12 Nov 2008) Log Message: ----------- prevent primitives that don't have describe() implemented from crashing. this was happening with the new point primitive. the real fix is for all primitives to define all functions, but this shouldn't crash regardless. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2008-11-12 05:11:14 UTC (rev 33158) +++ brlcad/trunk/src/libged/wdb_obj.c 2008-11-12 06:59:56 UTC (rev 33159) @@ -9391,11 +9391,16 @@ return; } - bu_vls_printf(outstrp, "%s: ", dp->d_namep); + if (rt_functab[id].ft_describe) { + int ret; + bu_vls_printf(outstrp, "%s: ", dp->d_namep); + ret = rt_functab[id].ft_describe(outstrp, &intern, verbose, dbip->dbi_base2local, &rt_uniresource, dbip); + if ( ret < 0) + Tcl_AppendResult(interp, dp->d_namep, ": describe error\n", (char *)NULL); + } else { + Tcl_AppendResult(interp, dp->d_namep, ": list support unimplemented\n", (char *)NULL); + } - if (rt_functab[id].ft_describe(outstrp, &intern, - verbose, dbip->dbi_base2local, &rt_uniresource, dbip) < 0) - Tcl_AppendResult(interp, dp->d_namep, ": describe error\n", (char *)NULL); rt_db_free_internal(&intern, &rt_uniresource); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2009-02-28 00:57:03
|
Revision: 33920 http://brlcad.svn.sourceforge.net/brlcad/?rev=33920&view=rev Author: brlcad Date: 2009-02-28 00:51:49 +0000 (Sat, 28 Feb 2009) Log Message: ----------- GED_INIT_FROM_WDBP was removed. get rid of the if/else/endif wrappage. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2009-02-27 23:49:10 UTC (rev 33919) +++ brlcad/trunk/src/libged/wdb_obj.c 2009-02-28 00:51:49 UTC (rev 33920) @@ -2339,11 +2339,7 @@ } /*XXX Temporary */ -#if 1 GED_INIT(&ged, wdbp); -#else - GED_INIT_FROM_WDBP(&ged, wdbp); -#endif /* * paths are matched up to last input member @@ -3645,11 +3641,7 @@ } /*XXX Temporary */ -#if 1 GED_INIT(&ged, wdbp); -#else - GED_INIT_FROM_WDBP(&ged, wdbp); -#endif /* initialize gtd */ gtd.gtd_gedp = &ged; @@ -7084,11 +7076,7 @@ } /*XXX Temporary */ -#if 1 GED_INIT(&ged, wdbp); -#else - GED_INIT_FROM_WDBP(&ged, wdbp); -#endif i = 1; @@ -10453,12 +10441,10 @@ int ret; char flags[128]; - /*XXXX Eventually the clientData will be a "struct ged". - * In the meantime ... + /*XXX Eventually the clientData will be a "struct ged". + * In the meantime ... */ -#if 1 GED_INIT(&ged, wdbp); -#endif for (ctp = wdb_newcmds; ctp->ct_name != (char *)0; ctp++) { if (ctp->ct_name[0] == argv[1][0] && This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2009-12-22 05:23:11
|
Revision: 36969 http://brlcad.svn.sourceforge.net/brlcad/?rev=36969&view=rev Author: brlcad Date: 2009-12-22 05:23:04 +0000 (Tue, 22 Dec 2009) Log Message: ----------- bah, another ft_make with diagonal/diamter value that needs removing. also start the killage on expm. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2009-12-22 05:20:47 UTC (rev 36968) +++ brlcad/trunk/src/libged/wdb_obj.c 2009-12-22 05:23:04 UTC (rev 36969) @@ -1127,9 +1127,9 @@ return TCL_ERROR; } - ftp->ft_make(ftp, &intern, 0.0); + ftp->ft_make(ftp, &intern); } else { - rt_generic_make(ftp, &intern, 0.0); + rt_generic_make(ftp, &intern); } { @@ -7676,9 +7676,6 @@ case DB5_MAJORTYPE_ATTRIBUTE_ONLY: bu_vls_printf(&vls, "%s global:\n", argv[2]); break; - case DB5_MAJORTYPE_BINARY_EXPM: - bu_vls_printf(&vls, "%s binary(expm):\n", argv[2]); - break; case DB5_MAJORTYPE_BINARY_MIME: bu_vls_printf(&vls, "%s binary(mime):\n", argv[2]); break; @@ -9132,9 +9129,6 @@ case DB5_MAJORTYPE_BINARY_UNIF: len = strlen(binu_types[list_of_names[i]->d_minor_type]); break; - case DB5_MAJORTYPE_BINARY_EXPM: - len = strlen("binary(expm)"); - break; } } @@ -9166,11 +9160,6 @@ isSolid = 0; type = "global"; break; - case DB5_MAJORTYPE_BINARY_EXPM: - isSolid = 0; - isRegion = 0; - type = "binary(expm)"; - break; case DB5_MAJORTYPE_BINARY_MIME: isSolid = 0; isRegion = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2010-02-19 17:16:55
|
Revision: 37690 http://brlcad.svn.sourceforge.net/brlcad/?rev=37690&view=rev Author: brlcad Date: 2010-02-19 17:16:47 +0000 (Fri, 19 Feb 2010) Log Message: ----------- more DString de-stringing. bu_vls ftw. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2010-02-19 16:54:40 UTC (rev 37689) +++ brlcad/trunk/src/libged/wdb_obj.c 2010-02-19 17:16:47 UTC (rev 37690) @@ -3854,8 +3854,6 @@ struct dir_check_stuff dcs; if (argc < 2 || 3 < argc) { - struct bu_vls vls; - bu_vls_init(&vls); bu_vls_printf(&vls, "helplib_alias wdb_dup %s", argv[0]); Tcl_Eval(interp, bu_vls_addr(&vls)); @@ -4724,12 +4722,9 @@ struct wdb_id_to_names headIdName; struct wdb_id_to_names *itnp; struct wdb_id_names *inp; - Tcl_DString ds; + struct bu_vls vls; - if (argc != 1) { - struct bu_vls vls; - bu_vls_init(&vls); bu_vls_printf(&vls, "helplib_alias wdb_rmap %s", argv[0]); Tcl_Eval(interp, bu_vls_addr(&vls)); @@ -4737,12 +4732,11 @@ return TCL_ERROR; } - Tcl_DStringInit(&ds); - if (wdbp->dbip->dbi_version < 5) { - Tcl_DStringAppend(&ds, argv[0], -1); - Tcl_DStringAppend(&ds, " is not available prior to version 5 of the .g file format\n", -1); - Tcl_DStringResult(interp, &ds); + bu_vls_init(&vls); + bu_vls_printf(&vls, "%s is not available prior to version 5 of the .g file format\n", argv[0]); + Tcl_SetResult(interp, bu_vls_addr(&vls), TCL_VOLATILE); + bu_vls_free(&vls); return TCL_ERROR; } @@ -4757,13 +4751,11 @@ (dp->d_flags & DIR_HIDDEN)) continue; - if (rt_db_get_internal(&intern, - dp, - wdbp->dbip, - (fastf_t *)NULL, - &rt_uniresource) < 0) { - Tcl_DStringAppend(&ds, "Database read error, aborting", -1); - Tcl_DStringResult(interp, &ds); + if (rt_db_get_internal(&intern, dp, wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { + bu_vls_init(&vls); + bu_vls_strcat(&vls, "Database read error, aborting"); + Tcl_SetResult(interp, bu_vls_addr(&vls), TCL_VOLATILE); + bu_vls_free(&vls); return TCL_ERROR; } @@ -4803,31 +4795,37 @@ } } + bu_vls_init(&vls); + /* place data in a dynamic tcl string */ while (BU_LIST_WHILE (itnp, wdb_id_to_names, &headIdName.l)) { - char buf[32]; - /* add this id to the list */ - sprintf(buf, "%d", itnp->id); - Tcl_DStringAppendElement(&ds, buf); + bu_vls_printf(&vls, "%d {", itnp->id); /* start sublist of names associated with this id */ - Tcl_DStringStartSublist(&ds); while (BU_LIST_WHILE (inp, wdb_id_names, &itnp->headName.l)) { /* add the this name to this sublist */ - Tcl_DStringAppendElement(&ds, bu_vls_addr(&inp->name)); + if (strchr(bu_vls_addr(&inp->name), ' ')) { + bu_vls_printf(&vls, "\"%V\" ", &inp->name); + } else { + bu_vls_printf(&vls, "%V ", &inp->name); + } BU_LIST_DEQUEUE(&inp->l); bu_vls_free(&inp->name); bu_free((genptr_t)inp, "rmap: inp"); } - Tcl_DStringEndSublist(&ds); + bu_vls_strcat(&vls, "} "); BU_LIST_DEQUEUE(&itnp->l); bu_free((genptr_t)itnp, "rmap: itnp"); + } + bu_vls_trimspace(&vls); - Tcl_DStringResult(interp, &ds); + Tcl_SetResult(interp, bu_vls_addr(&vls), TCL_VOLATILE); + bu_vls_free(&vls); + return TCL_OK; } @@ -10310,6 +10308,7 @@ return wdb_rotate_arb_face_cmd(wdbp, interp, argc-1, argv+1); } +static int wdb_newcmds_tcl(ClientData clientData, Tcl_Interp *interp, int argc, @@ -10318,7 +10317,7 @@ struct bu_cmdtab *ctp; struct rt_wdb *wdbp = (struct rt_wdb *)clientData; struct ged ged; - Tcl_DString ds; + struct bu_vls vls; int ret; /*XXX Eventually the clientData will be a "struct ged". @@ -10341,16 +10340,21 @@ ret = GED_ERROR; } - Tcl_DStringInit(&ds); + bu_vls_init(&vls); if (ret == GED_HELP) - Tcl_DStringAppendElement(&ds, "1"); + bu_vls_strcat(&vls, "1 "); else - Tcl_DStringAppendElement(&ds, "0"); + bu_vls_strcat(&vls, "0 "); - Tcl_DStringAppendElement(&ds, bu_vls_addr(&ged.ged_result_str)); - Tcl_DStringResult(interp, &ds); + if (strchr(bu_vls_addr(&ged.ged_result_str), ' ')) + bu_vls_printf(&vls, "\"%V\"", &ged.ged_result_str); + else + bu_vls_vlscat(&vls, &ged.ged_result_str); + Tcl_SetResult(interp, bu_vls_addr(&vls), TCL_VOLATILE); + bu_vls_free(&vls); + if (ret == GED_ERROR) return TCL_ERROR; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2010-02-19 17:25:03
|
Revision: 37691 http://brlcad.svn.sourceforge.net/brlcad/?rev=37691&view=rev Author: brlcad Date: 2010-02-19 17:24:56 +0000 (Fri, 19 Feb 2010) Log Message: ----------- quell verbose compilation warnings about unused params, types, and shadows. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2010-02-19 17:16:47 UTC (rev 37690) +++ brlcad/trunk/src/libged/wdb_obj.c 2010-02-19 17:24:56 UTC (rev 37691) @@ -548,7 +548,7 @@ *@n db close */ static int -wdb_open_tcl(ClientData clientData, +wdb_open_tcl(ClientData clientData __attribute__((unused)), Tcl_Interp *interp, int argc, const char *argv[]) @@ -762,7 +762,7 @@ int wdb_match_cmd(struct rt_wdb *wdbp, Tcl_Interp *interp, - int argc, + int argc __attribute__((unused)), char *argv[]) { struct bu_vls matches; @@ -1279,7 +1279,7 @@ * */ int -wdb_form_cmd(struct rt_wdb *wdbp, +wdb_form_cmd(struct rt_wdb *wdbp __attribute__((unused)), Tcl_Interp *interp, int argc, char *argv[]) @@ -1597,11 +1597,11 @@ */ static void Do_showmats(struct db_i *dbip, - struct rt_comb_internal *comb, + struct rt_comb_internal *comb __attribute__((unused)), union tree *comb_leaf, genptr_t user_ptr1, - genptr_t user_ptr2, - genptr_t user_ptr3) + genptr_t user_ptr2 __attribute__((unused)), + genptr_t user_ptr3 __attribute__((unused))) { struct showmats_data *smdp; @@ -1906,7 +1906,7 @@ * */ int -wdb_stub_cmd(struct rt_wdb *wdbp, +wdb_stub_cmd(struct rt_wdb *wdbp __attribute__((unused)), Tcl_Interp *interp, int argc, char *argv[]) @@ -3735,7 +3735,7 @@ void wdb_dir_check5(struct db_i *input_dbip, const struct db5_raw_internal *rip, - long addr, + long addr __attribute__((unused)), genptr_t ptr) { char *name; @@ -3798,7 +3798,7 @@ * Check a name against the global directory. */ int -wdb_dir_check(struct db_i *input_dbip, const char *name, long int laddr, int len, int flags, genptr_t ptr) +wdb_dir_check(struct db_i *input_dbip, const char *name, long int laddr __attribute__((unused)), int len __attribute__((unused)), int flags __attribute__((unused)), genptr_t ptr) { struct directory *dupdp; struct bu_vls local; @@ -4293,8 +4293,8 @@ * */ static void -wdb_find_ref(struct db_i *dbip, - struct rt_comb_internal *comb, +wdb_find_ref(struct db_i *dbip __attribute__((unused)), + struct rt_comb_internal *comb __attribute__((unused)), union tree *comb_leaf, genptr_t object, genptr_t comb_name_ptr, @@ -4320,7 +4320,7 @@ * */ HIDDEN union tree * -facetize_region_end(struct db_tree_state *tsp, const struct db_full_path *pathp, union tree *curtree, genptr_t client_data) +facetize_region_end(struct db_tree_state *tsp __attribute__((unused)), const struct db_full_path *pathp __attribute__((unused)), union tree *curtree, genptr_t client_data) { struct bu_list vhead; union tree **facetize_tree; @@ -5436,7 +5436,7 @@ * */ int -wdb_prcolor_cmd(struct rt_wdb *wdbp, +wdb_prcolor_cmd(struct rt_wdb *wdbp __attribute__((unused)), Tcl_Interp *interp, int argc, char *argv[]) @@ -5811,10 +5811,10 @@ * A null routine that does nothing. */ static union tree * -wdb_push_region_end(struct db_tree_state *tsp, - const struct db_full_path *pathp, +wdb_push_region_end(struct db_tree_state *tsp __attribute__((unused)), + const struct db_full_path *pathp __attribute__((unused)), union tree *curtree, - genptr_t client_data) + genptr_t client_data __attribute__((unused))) { return curtree; } @@ -6001,9 +6001,9 @@ * */ static void -increment_uses(struct db_i *db_ip, +increment_uses(struct db_i *db_ip __attribute__((unused)), struct directory *dp, - genptr_t ptr) + genptr_t ptr __attribute__((unused))) { RT_CK_DIR(dp); @@ -6015,9 +6015,9 @@ * */ static void -increment_nrefs(struct db_i *db_ip, +increment_nrefs(struct db_i *db_ip __attribute__((unused)), struct directory *dp, - genptr_t ptr) + genptr_t ptr __attribute__((unused))) { RT_CK_DIR(dp); @@ -6078,7 +6078,7 @@ static void Make_new_name(struct db_i *dbip, struct directory *dp, - genptr_t ptr) + genptr_t ptr __attribute__((unused))) { struct object_use *use; int use_no; @@ -6257,7 +6257,7 @@ */ HIDDEN void Do_copy_membs(struct db_i *dbip, - struct rt_comb_internal *comb, + struct rt_comb_internal *comb __attribute__((unused)), union tree *comb_leaf, genptr_t user_ptr1, genptr_t user_ptr2, @@ -6401,11 +6401,11 @@ */ HIDDEN void Do_ref_incr(struct db_i *dbip, - struct rt_comb_internal *comb, + struct rt_comb_internal *comb __attribute__((unused)), union tree *comb_leaf, - genptr_t user_ptr1, - genptr_t user_ptr2, - genptr_t user_ptr3) + genptr_t user_ptr1 __attribute__((unused)), + genptr_t user_ptr2 __attribute__((unused)), + genptr_t user_ptr3 __attribute__((unused))) { struct directory *dp; @@ -6477,9 +6477,6 @@ struct directory *dp; for (dp=wdbp->dbip->dbi_Head[i]; dp!=DIR_NULL; dp=dp->d_forw) { - struct rt_db_internal intern; - struct rt_comb_internal *comb; - if (dp->d_flags & DIR_SOLID) continue; @@ -7471,7 +7468,7 @@ if (argc == 3) { /* just list all the attributes */ avpp = avs.avp; - for (i=0; i < avs.count; i++, avpp++) { + for (i=0; i < (int)avs.count; i++, avpp++) { Tcl_AppendResult(interp, avpp->name, " {", avpp->value, "} ", (char *)NULL); } @@ -7626,7 +7623,7 @@ if (argc == 3) { /* just display all attributes */ avpp = avs.avp; - for (i=0; i < avs.count; i++, avpp++) { + for (i=0; i < (int)avs.count; i++, avpp++) { int len; len = (int)strlen(avpp->name); @@ -7636,7 +7633,7 @@ } tabs1 = 2 + max_attr_name_len/8; avpp = avs.avp; - for (i=0; i < avs.count; i++, avpp++) { + for (i=0; i < (int)avs.count; i++, avpp++) { const char *c; int tabs2; int k; @@ -9452,11 +9449,11 @@ static void wdb_do_identitize(struct db_i *dbip, - struct rt_comb_internal *comb, + struct rt_comb_internal *comb __attribute__((unused)), union tree *comb_leaf, genptr_t user_ptr1, - genptr_t user_ptr2, - genptr_t user_ptr3) + genptr_t user_ptr2 __attribute__((unused)), + genptr_t user_ptr3 __attribute__((unused))) { struct directory *dp; Tcl_Interp *interp = (Tcl_Interp *)user_ptr1; @@ -9610,7 +9607,7 @@ * P A T H L I S T _ L E A F _ F U N C */ static union tree * -wdb_pathlist_leaf_func(struct db_tree_state *tsp, +wdb_pathlist_leaf_func(struct db_tree_state *tsp __attribute__((unused)), const struct db_full_path *pathp, struct rt_db_internal *ip, genptr_t client_data) @@ -10269,7 +10266,6 @@ (void)rt_arb_calc_points(arb, arb_type, planes, &wdbp->wdb_tol); { - int i; struct bu_vls vls; bu_vls_init(&vls); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eri...@us...> - 2010-04-22 13:50:34
|
Revision: 38721 http://brlcad.svn.sourceforge.net/brlcad/?rev=38721&view=rev Author: erikgreenwald Date: 2010-04-22 13:50:28 +0000 (Thu, 22 Apr 2010) Log Message: ----------- off_t updates to match signatures Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2010-04-22 13:41:27 UTC (rev 38720) +++ brlcad/trunk/src/libged/wdb_obj.c 2010-04-22 13:50:28 UTC (rev 38721) @@ -282,8 +282,8 @@ static struct directory ** wdb_dir_getspace(struct db_i *dbip, int num_entries); static union tree *wdb_pathlist_leaf_func(struct db_tree_state *tsp, const struct db_full_path *pathp, struct rt_db_internal *ip, genptr_t client_data); HIDDEN union tree *facetize_region_end(struct db_tree_state *tsp, const struct db_full_path *pathp, union tree *curtree, genptr_t client_data); -int wdb_dir_check(struct db_i *input_dbip, const char *name, size_t laddr, size_t len, int flags, genptr_t ptr); -void wdb_dir_check5(struct db_i *input_dbip, const struct db5_raw_internal *rip, size_t addr, genptr_t ptr); +int wdb_dir_check(struct db_i *input_dbip, const char *name, off_t laddr, size_t len, int flags, genptr_t ptr); +void wdb_dir_check5(struct db_i *input_dbip, const struct db5_raw_internal *rip, off_t addr, genptr_t ptr); static int pathListNoLeaf = 0; @@ -3736,7 +3736,7 @@ void wdb_dir_check5(struct db_i *input_dbip, const struct db5_raw_internal *rip, - size_t UNUSED(addr), + off_t UNUSED(addr), genptr_t ptr) { char *name; @@ -3799,7 +3799,7 @@ * Check a name against the global directory. */ int -wdb_dir_check(struct db_i *input_dbip, const char *name, size_t UNUSED(laddr), size_t UNUSED(len), int UNUSED(flags), genptr_t ptr) +wdb_dir_check(struct db_i *input_dbip, const char *name, off_t UNUSED(laddr), size_t UNUSED(len), int UNUSED(flags), genptr_t ptr) { struct directory *dupdp; struct bu_vls local; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2010-05-18 14:49:40
|
Revision: 39315 http://brlcad.svn.sourceforge.net/brlcad/?rev=39315&view=rev Author: brlcad Date: 2010-05-18 14:49:33 +0000 (Tue, 18 May 2010) Log Message: ----------- ws comment cleanup Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2010-05-18 14:39:54 UTC (rev 39314) +++ brlcad/trunk/src/libged/wdb_obj.c 2010-05-18 14:49:33 UTC (rev 39315) @@ -155,12 +155,13 @@ struct bu_vls affix; }; -#define NO_AFFIX 1<<0 -#define AUTO_PREFIX 1<<1 -#define AUTO_SUFFIX 1<<2 + +#define NO_AFFIX 1<<0 +#define AUTO_PREFIX 1<<1 +#define AUTO_SUFFIX 1<<2 #define CUSTOM_PREFIX 1<<3 #define CUSTOM_SUFFIX 1<<4 -#define V4_MAXNAME NAMESIZE +#define V4_MAXNAME NAMESIZE /* Defined in wdb_cmd_std.c */ BU_EXTERN(int wdb_comb_std_tcl, @@ -313,109 +314,111 @@ {(char *)NULL, (int (*)())0} }; + static struct bu_cmdtab wdb_cmds[] = { - {"adjust", wdb_adjust_tcl}, - {"arced", wdb_newcmds_tcl}, - {"attr", wdb_attr_tcl}, - {"bo", wdb_bo_tcl}, - {"bot_face_sort", wdb_bot_face_sort_tcl}, - {"bot_decimate", wdb_bot_decimate_tcl}, + {"adjust", wdb_adjust_tcl}, + {"arced", wdb_newcmds_tcl}, + {"attr", wdb_attr_tcl}, + {"bo", wdb_bo_tcl}, + {"bot_face_sort", wdb_bot_face_sort_tcl}, + {"bot_decimate", wdb_bot_decimate_tcl}, {"c", wdb_comb_std_tcl}, {"cat", wdb_cat_tcl}, - {"comb", wdb_comb_tcl}, + {"comb", wdb_comb_tcl}, {"comb_color", wdb_newcmds_tcl}, - {"concat", wdb_concat_tcl}, + {"concat", wdb_concat_tcl}, {"copyeval", wdb_copyeval_tcl}, {"cp", wdb_copy_tcl}, - {"db", wdb_stub_tcl}, - {"dbip", wdb_dbip_tcl}, - {"dump", wdb_dump_tcl}, + {"db", wdb_stub_tcl}, + {"dbip", wdb_dbip_tcl}, + {"dump", wdb_dump_tcl}, {"dup", wdb_dup_tcl}, - {"edcomb", wdb_newcmds_tcl}, - {"edmater", wdb_newcmds_tcl}, - {"expand", wdb_expand_tcl}, + {"edcomb", wdb_newcmds_tcl}, + {"edmater", wdb_newcmds_tcl}, + {"expand", wdb_expand_tcl}, {"facetize", wdb_facetize_tcl}, - {"find", wdb_find_tcl}, - {"form", wdb_form_tcl}, + {"find", wdb_find_tcl}, + {"form", wdb_form_tcl}, {"g", wdb_group_tcl}, {"get", wdb_get_tcl}, {"get_type", wdb_get_type_tcl}, - {"hide", wdb_hide_tcl}, + {"hide", wdb_hide_tcl}, {"i", wdb_instance_tcl}, - {"importFg4Section", wdb_importFg4Section_tcl}, - {"item", wdb_newcmds_tcl}, - {"keep", wdb_keep_tcl}, - {"kill", wdb_kill_tcl}, - {"killall", wdb_killall_tcl}, + {"importFg4Section", wdb_importFg4Section_tcl}, + {"item", wdb_newcmds_tcl}, + {"keep", wdb_keep_tcl}, + {"kill", wdb_kill_tcl}, + {"killall", wdb_killall_tcl}, {"killtree", wdb_killtree_tcl}, {"l", wdb_list_tcl}, {"listeval", wdb_pathsum_tcl}, {"log", wdb_newcmds_tcl}, {"ls", wdb_ls_tcl}, {"lt", wdb_lt_tcl}, - {"make", wdb_newcmds_tcl}, - {"make_bb", wdb_make_bb_tcl}, + {"make", wdb_newcmds_tcl}, + {"make_bb", wdb_make_bb_tcl}, {"make_name", wdb_newcmds_tcl}, - {"match", wdb_match_tcl}, - {"mater", wdb_newcmds_tcl}, + {"match", wdb_match_tcl}, + {"mater", wdb_newcmds_tcl}, {"mirror", wdb_newcmds_tcl}, {"move_arb_edge", wdb_move_arb_edge_tcl}, {"move_arb_face", wdb_move_arb_face_tcl}, {"mv", wdb_move_tcl}, - {"mvall", wdb_move_all_tcl}, - {"nirt", wdb_newcmds_tcl}, - {"nmg_collapse", wdb_nmg_collapse_tcl}, - {"nmg_simplify", wdb_nmg_simplify_tcl}, + {"mvall", wdb_move_all_tcl}, + {"nirt", wdb_newcmds_tcl}, + {"nmg_collapse", wdb_nmg_collapse_tcl}, + {"nmg_simplify", wdb_nmg_simplify_tcl}, {"observer", wdb_observer_tcl}, - {"ocenter", wdb_newcmds_tcl}, - {"orotate", wdb_newcmds_tcl}, - {"oscale", wdb_newcmds_tcl}, + {"ocenter", wdb_newcmds_tcl}, + {"orotate", wdb_newcmds_tcl}, + {"oscale", wdb_newcmds_tcl}, {"otranslate", wdb_newcmds_tcl}, - {"open", wdb_reopen_tcl}, + {"open", wdb_reopen_tcl}, {"pathlist", wdb_pathlist_tcl}, - {"paths", wdb_pathsum_tcl}, - {"prcolor", wdb_prcolor_tcl}, - {"push", wdb_push_tcl}, + {"paths", wdb_pathsum_tcl}, + {"prcolor", wdb_prcolor_tcl}, + {"push", wdb_push_tcl}, {"put", wdb_put_tcl}, {"r", wdb_region_tcl}, {"rm", wdb_remove_tcl}, - {"rmap", wdb_rmap_tcl}, - {"rmater", wdb_newcmds_tcl}, + {"rmap", wdb_rmap_tcl}, + {"rmater", wdb_newcmds_tcl}, {"rotate_arb_face", wdb_rotate_arb_face_tcl}, {"rt_gettrees", wdb_rt_gettrees_tcl}, - {"shader", wdb_newcmds_tcl}, - {"shells", wdb_shells_tcl}, + {"shader", wdb_newcmds_tcl}, + {"shells", wdb_shells_tcl}, {"showmats", wdb_showmats_tcl}, {"bot_smooth", wdb_bot_smooth_tcl}, - {"summary", wdb_summary_tcl}, - {"title", wdb_title_tcl}, + {"summary", wdb_summary_tcl}, + {"title", wdb_title_tcl}, {"tol", wdb_tol_tcl}, - {"tops", wdb_tops_tcl}, - {"track", wdb_track_tcl}, - {"unhide", wdb_unhide_tcl}, - {"units", wdb_units_tcl}, - {"version", wdb_version_tcl}, - {"whatid", wdb_whatid_tcl}, + {"tops", wdb_tops_tcl}, + {"track", wdb_track_tcl}, + {"unhide", wdb_unhide_tcl}, + {"units", wdb_units_tcl}, + {"version", wdb_version_tcl}, + {"whatid", wdb_whatid_tcl}, {"whichair", wdb_which_tcl}, - {"whichid", wdb_which_tcl}, - {"wmater", wdb_newcmds_tcl}, - {"xpush", wdb_xpush_tcl}, + {"whichid", wdb_which_tcl}, + {"wmater", wdb_newcmds_tcl}, + {"xpush", wdb_xpush_tcl}, #if 0 /* Commands to be added */ {"comb_color", wdb_comb_color_tcl}, - {"copymat", wdb_copymat_tcl}, - {"getmat", wdb_getmat_tcl}, - {"putmat", wdb_putmat_tcl}, + {"copymat", wdb_copymat_tcl}, + {"getmat", wdb_getmat_tcl}, + {"putmat", wdb_putmat_tcl}, {"which_shader", wdb_which_shader_tcl}, - {"rcodes", wdb_rcodes_tcl}, - {"wcodes", wdb_wcodes_tcl}, - {"rmater", wdb_rmater_tcl}, - {"analyze", wdb_analyze_tcl}, - {"inside", wdb_inside_tcl}, + {"rcodes", wdb_rcodes_tcl}, + {"wcodes", wdb_wcodes_tcl}, + {"rmater", wdb_rmater_tcl}, + {"analyze", wdb_analyze_tcl}, + {"inside", wdb_inside_tcl}, #endif {(char *)NULL, (int (*)())0 } }; + /** * @brief create the Tcl command for wdb_open * @@ -429,13 +432,14 @@ return TCL_OK; } + /** - * W D B _ C M D + * W D B _ C M D *@brief * Generic interface for database commands. * * @par Usage: - * procname cmd ?args? + * procname cmd ?args? * * @return result of wdb command. */ @@ -445,6 +449,7 @@ return bu_cmd(clientData, interp, argc, (const char **)argv, wdb_cmds, 1); } + /** * @brief * Called by Tcl when the object is destroyed. @@ -471,6 +476,7 @@ wdb_close(wdbp); } + /** * @brief * Create a command named "oname" in "interp" using "wdbp" as its state. @@ -497,6 +503,7 @@ return TCL_OK; } + /** * @brief * Create an command/object named "oname" in "interp" using "wdbp" as @@ -525,21 +532,22 @@ return TCL_OK; } + /** - * W D B _ O P E N _ T C L + * W D B _ O P E N _ T C L *@brief - * A TCL interface to wdb_fopen() and wdb_dbopen(). + * A TCL interface to wdb_fopen() and wdb_dbopen(). * - * @par Implicit return - - * Creates a new TCL proc which responds to get/put/etc. arguments - * when invoked. clientData of that proc will be rt_wdb pointer - * for this instance of the database. - * Easily allows keeping track of multiple databases. + * @par Implicit return - + * Creates a new TCL proc which responds to get/put/etc. arguments + * when invoked. clientData of that proc will be rt_wdb pointer + * for this instance of the database. + * Easily allows keeping track of multiple databases. * - * @return wdb pointer, for more traditional C-style interfacing. + * @return wdb pointer, for more traditional C-style interfacing. * - * @par Example - - * set wdbp [wdb_open .inmem inmem $dbip] + * @par Example - + * set wdbp [wdb_open .inmem inmem $dbip] *@n .inmem get box.s *@n .inmem close * @@ -632,6 +640,7 @@ return wdb_create_cmd(interp, wdbp, argv[1]); } + /** * * @@ -649,6 +658,7 @@ return TCL_OK; } + /** * @brief * Open/Create the database and build the in memory directory. @@ -693,6 +703,7 @@ return dbip; } + /****************** Database Object Methods ********************/ /** @@ -740,10 +751,11 @@ return TCL_ERROR; } + /** * * @par Usage: - * procname open [filename] + * procname open [filename] */ static int wdb_reopen_tcl(ClientData clientData, @@ -756,6 +768,7 @@ return wdb_reopen_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -788,8 +801,9 @@ return TCL_OK; } + /** - * W D B _ M A T C H _ T C L + * W D B _ M A T C H _ T C L *@brief * Returns (via interp) a list (possibly empty) of all matches to the * (possibly wildcard-containing) arguments given. Does *NOT* return @@ -807,6 +821,7 @@ return wdb_match_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -859,8 +874,9 @@ return status; } + /** - * W D B _ G E T_ T C L + * W D B _ G E T_ T C L * *@brief * For use with Tcl, this routine accepts as its first argument the name @@ -884,6 +900,7 @@ return wdb_get_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1050,6 +1067,7 @@ return TCL_OK; } + /** * * @@ -1065,6 +1083,7 @@ return wdb_get_type_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1154,8 +1173,9 @@ return TCL_OK; } + /** - * W D B _ P U T _ T C L + * W D B _ P U T _ T C L *@brief * Creates an object and stuffs it into the databse. * All arguments must be specified. Object cannot already exist. @@ -1173,6 +1193,7 @@ return wdb_put_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1249,8 +1270,9 @@ return status; } + /** - * W D B _ A D J U S T _ T C L + * W D B _ A D J U S T _ T C L * *@brief * For use with Tcl, this routine accepts as its first argument an item in @@ -1275,6 +1297,7 @@ return wdb_adjust_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1320,8 +1343,9 @@ } } + /** - * W D B _ F O R M _ T C L + * W D B _ F O R M _ T C L */ static int wdb_form_tcl(ClientData clientData, @@ -1334,6 +1358,7 @@ return wdb_form_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1429,10 +1454,11 @@ return TCL_OK; } + /** - * W D B _ T O P S _ T C L + * W D B _ T O P S _ T C L * - * NON-PARALLEL because of rt_uniresource + * NON-PARALLEL because of rt_uniresource */ static int wdb_tops_tcl(ClientData clientData, @@ -1445,10 +1471,11 @@ return wdb_tops_cmd(wdbp, interp, argc-1, argv+1); } + /** - * R T _ T C L _ D E L E T E P R O C _ R T + * R T _ T C L _ D E L E T E P R O C _ R T *@brief - * Called when the named proc created by rt_gettrees() is destroyed. + * Called when the named proc created by rt_gettrees() is destroyed. */ static void wdb_deleteProc_rt(ClientData clientData) @@ -1466,6 +1493,7 @@ bu_free((genptr_t)ap, "struct application"); } + /** * * @@ -1527,13 +1555,13 @@ rtip->rti_hasty_prep = 1; /* Tcl isn't going to fire many rays */ /* - * In case of multiple instances of the library, make sure that - * each instance has a separate resource structure, - * because the bit vector lengths depend on # of solids. - * And the "overwrite" sequence in Tcl is to create the new - * proc before running the Tcl_CmdDeleteProc on the old one, - * which in this case would trash rt_uniresource. - * Once on the rti_resources list, rt_clean() will clean 'em up. + * In case of multiple instances of the library, make sure that + * each instance has a separate resource structure, + * because the bit vector lengths depend on # of solids. + * And the "overwrite" sequence in Tcl is to create the new + * proc before running the Tcl_CmdDeleteProc on the old one, + * which in this case would trash rt_uniresource. + * Once on the rti_resources list, rt_clean() will clean 'em up. */ BU_GETSTRUCT(resp, resource); rt_init_resource(resp, 0, rtip); @@ -1559,13 +1587,14 @@ return TCL_OK; } + /** - * W D B _ R T _ G E T T R E E S _ T C L + * W D B _ R T _ G E T T R E E S _ T C L *@brief - * Given an instance of a database and the name of some treetops, - * create a named "ray-tracing" object (proc) which will respond to - * subsequent operations. - * Returns new proc name as result. + * Given an instance of a database and the name of some treetops, + * create a named "ray-tracing" object (proc) which will respond to + * subsequent operations. + * Returns new proc name as result. * * @par Example: * .inmem rt_gettrees .rt all.g light.r @@ -1581,6 +1610,7 @@ return wdb_rt_gettrees_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1592,6 +1622,7 @@ mat_t smd_mat; }; + /** * * @@ -1634,6 +1665,7 @@ } } + /** * * @@ -1710,6 +1742,7 @@ return TCL_OK; } + /** * * @@ -1725,6 +1758,7 @@ return wdb_showmats_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1825,6 +1859,7 @@ return TCL_OK; } + /** * * @@ -1840,6 +1875,7 @@ return wdb_shells_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1884,10 +1920,11 @@ return TCL_OK; } + /** - * W D B _ D U M P _ T C L + * W D B _ D U M P _ T C L *@brief - * Write the current state of a database object out to a file. + * Write the current state of a database object out to a file. * * @par Example: * .inmem dump "/tmp/foo.g" @@ -1903,6 +1940,7 @@ return wdb_dump_cmd(wdbp, interp, argc-1, argv+1); } + /** * */ @@ -1925,6 +1963,7 @@ return TCL_ERROR; } + /** * Stub command callback for commands that only exist after a database * is opened (e.g., db). @@ -1942,6 +1981,7 @@ return wdb_stub_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -1969,10 +2009,11 @@ return TCL_OK; } + /** * * @par Usage: - * procname dbip + * procname dbip * * @return database objects dbip. */ @@ -1987,6 +2028,7 @@ return wdb_dbip_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -2152,10 +2194,11 @@ return TCL_OK; } + /** * * Usage: - * procname ls [args] + * procname ls [args] * * @return list objects in this database object. */ @@ -2170,6 +2213,7 @@ return wdb_ls_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -2264,13 +2308,14 @@ return TCL_OK; } + /** * - * Usage: - * procname l [-r] arg(s) + * Usage: + * procname l [-r] arg(s) * *@brief - * List object information, verbose. + * List object information, verbose. */ static int wdb_list_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -2309,8 +2354,8 @@ GED_INIT(&ged, wdbp); /* - * paths are matched up to last input member - * ANY path the same up to this point is considered as matching + * paths are matched up to last input member + * ANY path the same up to this point is considered as matching */ /* initialize gtd */ @@ -2368,19 +2413,19 @@ /** - * W D B _ P A T H S U M _ T C L + * W D B _ P A T H S U M _ T C L *@brief - * Common code for several direct db methods: listeval, paths - * Also used as support routine for "l" (list) command. + * Common code for several direct db methods: listeval, paths + * Also used as support routine for "l" (list) command. * - * 1. produces path for purposes of matching - * 2. gives all paths matching the input path OR - * 3. gives a summary of all paths matching the input path - * including the final parameters of the solids at the bottom - * of the matching paths + * 1. produces path for purposes of matching + * 2. gives all paths matching the input path OR + * 3. gives a summary of all paths matching the input path + * including the final parameters of the solids at the bottom + * of the matching paths * * Usage: - * procname (WDB_LISTEVAL|paths) args(s) + * procname (WDB_LISTEVAL|paths) args(s) */ static int wdb_pathsum_tcl(ClientData clientData, @@ -2419,6 +2464,7 @@ } } + /** * * @@ -2503,13 +2549,14 @@ return TCL_OK; } + /** * @brief * Performs wildcard expansion (matched to the database elements) * on its given arguments. The result is returned via interp result. * * @par Usage: - * procname expand [args] + * procname expand [args] */ static int wdb_expand_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -2519,6 +2566,7 @@ return wdb_expand_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -2580,9 +2628,10 @@ return TCL_OK; } + /* * Usage: - * procname kill arg(s) + * procname kill arg(s) */ static int wdb_kill_tcl(ClientData clientData, @@ -2595,6 +2644,7 @@ return wdb_kill_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -2683,12 +2733,13 @@ return wdb_kill_cmd(wdbp, interp, argc, argv); } + /** * @brief * Kill object[s] and remove all references to the object[s]. * * Usage: - * procname killall arg(s) + * procname killall arg(s) */ static int wdb_killall_tcl(ClientData clientData, @@ -2701,6 +2752,7 @@ return wdb_killall_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -2752,12 +2804,13 @@ return TCL_OK; } + /** * @brief * Kill all paths belonging to an object. * * Usage: - * procname killtree arg(s) + * procname killtree arg(s) */ static int wdb_killtree_tcl(ClientData clientData, @@ -2770,8 +2823,9 @@ return wdb_killtree_cmd(wdbp, interp, argc-1, argv+1); } + /* - * K I L L T R E E + * K I L L T R E E */ static void wdb_killtree_callback(struct db_i *dbip, @@ -2794,6 +2848,7 @@ } } + /** * guts to the 'cp' command, used to shallow-copy an object * @@ -2869,9 +2924,10 @@ return TCL_OK; } + /** * @par Usage: - * procname cp from to + * procname cp from to */ static int wdb_copy_tcl(ClientData clientData, @@ -2884,6 +2940,7 @@ return wdb_copy_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -2922,7 +2979,7 @@ return TCL_ERROR; } - /* Change object name in the in-memory directory. */ + /* Change object name in the in-memory directory. */ if (db_rename(wdbp->dbip, dp, argv[2]) < 0) { rt_db_free_internal(&intern); Tcl_AppendResult(interp, "error in db_rename to ", argv[2], @@ -2939,12 +2996,13 @@ return TCL_OK; } + /** * @brief * Rename an object. * * @par Usage: - * procname mv from to + * procname mv from to */ static int wdb_move_tcl(ClientData clientData, @@ -2957,6 +3015,7 @@ return wdb_move_cmd(wdbp, interp, argc-1, argv+1); } + /** * */ @@ -3043,7 +3102,7 @@ } } - /* Change object name in the directory. */ + /* Change object name in the directory. */ if (db_rename(wdbp->dbip, dp, argv[2]) < 0) { Tcl_AppendResult(interp, "error in rename to ", argv[2], ", aborting", (char *)NULL); @@ -3115,8 +3174,7 @@ (char *)NULL); return TCL_ERROR; } - } - else + } else rt_db_free_internal(&intern); } } @@ -3125,12 +3183,13 @@ return TCL_OK; } + /** * @brief * Rename all occurences of an object * * @par Usage: - * procname mvall from to + * procname mvall from to */ static int wdb_move_all_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -3274,6 +3333,7 @@ return ret_name; } + /** * * @@ -3320,6 +3380,7 @@ } } + /** * * @@ -3402,6 +3463,7 @@ return TCL_OK; } + /** * * @@ -3554,12 +3616,13 @@ return bad ? TCL_ERROR : TCL_OK; } + /** * @brief - * Concatenate another GED file into the current file. + * Concatenate another GED file into the current file. * * Usage: - * procname concat file.g prefix + * procname concat file.g prefix */ static int wdb_concat_tcl(ClientData clientData, @@ -3572,6 +3635,7 @@ return wdb_concat_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -3697,11 +3761,12 @@ return TCL_OK; } + /** * * * Usage: - * procname copyeval new_solid path_to_solid + * procname copyeval new_solid path_to_solid */ static int wdb_copyeval_tcl(ClientData clientData, @@ -3714,6 +3779,7 @@ return wdb_copyeval_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -3724,6 +3790,7 @@ struct directory **dup_dirp; }; + /** * * @@ -3788,8 +3855,9 @@ return; } + /** - * W D B _ D I R _ C H E C K + * W D B _ D I R _ C H E C K *@brief * Check a name against the global directory. */ @@ -3834,6 +3902,7 @@ return 0; } + /** * * @@ -3926,9 +3995,10 @@ return TCL_OK; } + /** * @par Usage: - * procname dup file.g [prefix] + * procname dup file.g [prefix] */ static int wdb_dup_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -3938,6 +4008,7 @@ return wdb_dup_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -3975,9 +4046,10 @@ return TCL_OK; } + /** * @par Usage: - * procname g groupname object1 object2 .... objectn + * procname g groupname object1 object2 .... objectn */ static int wdb_group_tcl(ClientData clientData, @@ -3990,6 +4062,7 @@ return wdb_group_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -4061,12 +4134,13 @@ return ret; } + /** * @brief * Remove members from a combination. * * @par Usage: - * procname remove comb object(s) + * procname remove comb object(s) */ static int wdb_remove_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -4076,6 +4150,7 @@ return wdb_remove_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -4173,9 +4248,10 @@ return TCL_OK; } + /** * @par Usage: - * procname r rname object(s) + * procname r rname object(s) */ static int wdb_region_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -4185,6 +4261,7 @@ return wdb_region_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -4268,13 +4345,14 @@ return TCL_OK; } + /** * @brief * Create or add to the end of a combination, with one or more solids, * with explicitly specified operations. * * @par Usage: - * procname comb comb_name opr1 sol1 opr2 sol2 ... oprN solN + * procname comb comb_name opr1 sol1 opr2 sol2 ... oprN solN */ static int wdb_comb_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -4284,6 +4362,7 @@ return wdb_comb_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -4311,6 +4390,7 @@ Tcl_AppendElement(interp, comb_name); } + /** * * @@ -4324,7 +4404,7 @@ facetize_tree = (union tree **)client_data; BU_LIST_INIT(&vhead); - if (curtree->tr_op == OP_NOP) return curtree; + if (curtree->tr_op == OP_NOP) return curtree; if (*facetize_tree) { union tree *tr; @@ -4343,6 +4423,7 @@ return TREE_NULL; } + /** * * @@ -4472,13 +4553,11 @@ return TCL_ERROR; } - if (facetize_tree) - { + if (facetize_tree) { /* Now, evaluate the boolean tree into ONE region */ Tcl_AppendResult(interp, "facetize: evaluating boolean expressions\n", (char *)NULL); - if (BU_SETJUMP) - { + if (BU_SETJUMP) { BU_UNSETJUMP; Tcl_AppendResult(interp, "WARNING: facetization failed!!!\n", (char *)NULL); if (facetize_tree) @@ -4491,8 +4570,7 @@ failed = nmg_boolean(facetize_tree, nmg_model, &wdbp->wdb_tol, &rt_uniresource); BU_UNSETJUMP; - } - else + } else failed = 1; if (failed) { @@ -4510,11 +4588,9 @@ "\n", (char *)NULL); /* Triangulate model, if requested */ - if (triangulate && !make_bot) - { + if (triangulate && !make_bot) { Tcl_AppendResult(interp, "facetize: triangulating resulting object\n", (char *)NULL); - if (BU_SETJUMP) - { + if (BU_SETJUMP) { BU_UNSETJUMP; Tcl_AppendResult(interp, "WARNING: triangulation failed!!!\n", (char *)NULL); if (facetize_tree) @@ -4528,8 +4604,7 @@ BU_UNSETJUMP; } - if (make_bot) - { + if (make_bot) { struct rt_bot_internal *bot; struct nmgregion *r; struct shell *s; @@ -4548,9 +4623,7 @@ intern.idb_type = ID_BOT; intern.idb_meth = &rt_functab[ID_BOT]; intern.idb_ptr = (genptr_t) bot; - } - else - { + } else { Tcl_AppendResult(interp, "facetize: converting NMG to database format\n", (char *)NULL); @@ -4564,14 +4637,12 @@ } dp=db_diradd(dbip, newname, RT_DIR_PHONY_ADDR, 0, DIR_SOLID, (genptr_t)&intern.idb_type); - if (dp == DIR_NULL) - { + if (dp == DIR_NULL) { Tcl_AppendResult(interp, "Cannot add ", newname, " to directory\n", (char *)NULL); return TCL_ERROR; } - if (rt_db_put_internal(dp, dbip, &intern, &rt_uniresource) < 0) - { + if (rt_db_put_internal(dp, dbip, &intern, &rt_uniresource) < 0) { Tcl_AppendResult(interp, "Failed to write ", newname, " to database\n", (char *)NULL); rt_db_free_internal(&intern); return TCL_ERROR; @@ -4586,6 +4657,7 @@ return TCL_OK; } + /** * * @@ -4662,6 +4734,7 @@ return TCL_OK; } + /** * * @@ -4677,7 +4750,7 @@ /** * Usage: - * procname find object(s) + * procname find object(s) */ static int wdb_find_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -4687,6 +4760,7 @@ return wdb_find_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -4696,12 +4770,14 @@ struct bu_vls name; /**< name associated with region id */ }; + struct wdb_id_to_names { struct bu_list l; int id; /**< starting id (i.e. region id or air code) */ struct wdb_id_names headName; /**< head of list of names */ }; + /** * * @@ -4826,9 +4902,10 @@ return TCL_OK; } + /** * Usage: - * procname rmap + * procname rmap */ static int wdb_rmap_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -4838,6 +4915,7 @@ return wdb_rmap_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -5006,9 +5084,10 @@ return TCL_OK; } + /** * Usage: - * procname whichair/whichid [-s] id(s) + * procname whichair/whichid [-s] id(s) */ static int wdb_which_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -5018,6 +5097,7 @@ return wdb_which_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -5065,12 +5145,13 @@ return bad ? TCL_ERROR : TCL_OK; } + /** * @brief * Change or return the database title. * * Usage: - * procname title [description] + * procname title [description] */ static int wdb_title_tcl(ClientData clientData, @@ -5083,6 +5164,7 @@ return wdb_title_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -5165,6 +5247,7 @@ return TCL_OK; } + /** * * @@ -5194,9 +5277,10 @@ return TCL_ERROR; } + /* * Usage: - * procname lt object + * procname lt object */ static int wdb_lt_tcl(ClientData clientData, @@ -5209,6 +5293,7 @@ return wdb_lt_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -5237,9 +5322,10 @@ return TCL_OK; } + /** * Usage: - * procname version + * procname version */ static int wdb_version_tcl(ClientData clientData, @@ -5252,10 +5338,11 @@ return wdb_version_cmd(wdbp, interp, argc-1, argv+1); } + /** - * W D B _ P R I N T _ N O D E + * W D B _ P R I N T _ N O D E *@brief - * NON-PARALLEL due to rt_uniresource + * NON-PARALLEL due to rt_uniresource */ void wdb_print_node(struct rt_wdb *wdbp, @@ -5309,8 +5396,8 @@ return; /* - * This node is a combination (eg, a directory). - * Process all the arcs (eg, directory members). + * This node is a combination (eg, a directory). + * Process all the arcs (eg, directory members). */ if (rt_db_get_internal(&intern, dp, wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { @@ -5388,9 +5475,10 @@ rt_db_free_internal(&intern); } + /** * Usage: - * procname track args + * procname track args */ static int wdb_track_tcl(ClientData clientData, @@ -5428,6 +5516,7 @@ bu_vls_free(&vls); } + /** * * @@ -5463,9 +5552,10 @@ return TCL_OK; } + /* * Usage: - * procname prcolor + * procname prcolor */ static int wdb_prcolor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) @@ -5475,6 +5565,7 @@ return wdb_prcolor_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -5680,15 +5771,16 @@ return TCL_OK; } + /** * Usage: - * procname tol [abs|rel|norm|dist|perp [#]] + * procname tol [abs|rel|norm|dist|perp [#]] * - *@n abs # sets absolute tolerance. # > 0.0 - *@n rel # sets relative tolerance. 0.0 < # < 1.0 - *@n norm # sets normal tolerance, in degrees. - *@n dist # sets calculational distance tolerance - *@n perp # sets calculational normal tolerance. + *@n abs # sets absolute tolerance. # > 0.0 + *@n rel # sets relative tolerance. 0.0 < # < 1.0 + *@n norm # sets normal tolerance, in degrees. + *@n dist # sets calculational distance tolerance + *@n perp # sets calculational normal tolerance. * */ static int @@ -5702,6 +5794,7 @@ return wdb_tol_cmd(wdbp, interp, argc-1, argv+1); } + /** structure to hold all solids that have been pushed. */ struct wdb_push_id { long magic; @@ -5710,6 +5803,7 @@ mat_t pi_mat; }; + #define WDB_MAGIC_PUSH_ID 0x50495323 #define FOR_ALL_WDB_PUSH_SOLIDS(_p, _phead) \ for (_p=_phead.forw; _p!=&_phead; _p=_p->forw) @@ -5720,8 +5814,9 @@ int push_error; }; + /** - * P U S H _ L E A F + * P U S H _ L E A F * * This routine must be prepared to run in parallel. * @@ -5763,8 +5858,8 @@ * match and do the "right" thing. * * (There is a question as to whether dp->d_uses is reset to zero - * for each tree walk. If it is not, then d_uses is NOT a safe - * way to check and this method will always work.) + * for each tree walk. If it is not, then d_uses is NOT a safe + * way to check and this method will always work.) */ bu_semaphore_acquire(RT_SEM_WORKER); FOR_ALL_WDB_PUSH_SOLIDS(pip, wpdp->pi_head) { @@ -5816,6 +5911,7 @@ return curtree; } + /** * * @@ -5970,6 +6066,7 @@ return push_error ? TCL_ERROR : TCL_OK; } + /** * @brief * The push command is used to move matrices from combinations @@ -5980,7 +6077,7 @@ * the -P flag allows for multi-processor tree walking (not useful) * * Usage: - * procname push object(s) + * procname push object(s) */ static int wdb_push_tcl(ClientData clientData, @@ -5993,6 +6090,7 @@ return wdb_push_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -6007,6 +6105,7 @@ dp->d_uses++; } + /** * * @@ -6021,6 +6120,7 @@ dp->d_nref++; } + /** * * @@ -6033,6 +6133,7 @@ int used; }; + /** * * @@ -6068,6 +6169,7 @@ } + /** * * @@ -6164,6 +6266,7 @@ bu_vls_free(&name_v5); } + /** * * @@ -6246,6 +6349,7 @@ return found; } + static struct directory *Copy_object(struct db_i *dbip, struct directory *dp, fastf_t *xform, Tcl_Interp *interp, struct rt_wdb *wdbp); /** @@ -6302,6 +6406,7 @@ MAT_IDN(comb_leaf->tr_l.tl_mat); } + /** * * @@ -6373,6 +6478,7 @@ return found; } + /** * * @@ -6392,6 +6498,7 @@ return Copy_comb(dbip, dp, xform, interp, wdbp); } + /** * * @@ -6415,6 +6522,7 @@ dp->d_nref++; } + /** * * @@ -6565,6 +6673,7 @@ return TCL_OK; } + /** * * @@ -6580,6 +6689,7 @@ return wdb_xpush_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -6624,9 +6734,10 @@ return TCL_OK; } + /** * Usage: - * procname whatid object + * procname whatid object */ static int wdb_whatid_tcl(ClientData clientData, @@ -6639,6 +6750,7 @@ return wdb_whatid_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -6648,11 +6760,12 @@ Tcl_Interp *interp; }; + /** - * W D B _ N O D E _ W R I T E + * W D B _ N O D E _ W R I T E *@brief - * Support for the 'keep' method. - * Write each node encountered exactly once. + * Support for the 'keep' method. + * Write each node encountered exactly once. */ void wdb_node_write(struct db_i *dbip, @@ -6701,6 +6814,7 @@ WDB_WRITE_ERR_return; } + /** * * @@ -6795,9 +6909,10 @@ return TCL_OK; } + /* * Usage: - * procname keep file object(s) + * procname keep file object(s) */ static int wdb_keep_tcl(ClientData clientData, @@ -6810,6 +6925,7 @@ return wdb_keep_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -6848,9 +6964,10 @@ return TCL_OK; } + /** * Usage: - * procname cat object(s) + * procname cat object(s) */ static int wdb_cat_tcl(ClientData clientData, @@ -6863,6 +6980,7 @@ return wdb_cat_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -6913,12 +7031,13 @@ return TCL_OK; } + /** * @brief * Add instance of obj to comb. * * Usage: - * procname i obj comb [op] + * procname i obj comb [op] */ static int wdb_instance_tcl(ClientData clientData, @@ -6931,6 +7050,7 @@ return wdb_instance_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -6955,12 +7075,13 @@ return bu_observer_cmd((ClientData)&wdbp->wdb_observers, interp, argc-1, (const char **)argv+1); } + /** * @brief * Attach/detach observers to/from list. * * Usage: - * procname observer cmd [args] + * procname observer cmd [args] * */ static int @@ -7066,13 +7187,14 @@ return TCL_OK; } + /** * @brief - * Build an RPP bounding box for the list of objects - * and/or paths passed to this routine + * Build an RPP bounding box for the list of objects + * and/or paths passed to this routine * - * Usage: - * dbobjname make_bb bbname obj(s) + * Usage: + * dbobjname make_bb bbname obj(s) */ static int wdb_make_bb_tcl(ClientData clientData, @@ -7085,6 +7207,7 @@ return wdb_make_bb_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -7157,12 +7280,13 @@ return TCL_OK; } + /** *@brief * Set/get the database units. * * Usage: - * dbobjname units [str] + * dbobjname units [str] */ static int wdb_units_tcl(ClientData clientData, @@ -7175,6 +7299,7 @@ return wdb_units_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -7270,6 +7395,7 @@ return TCL_OK; } + /** * * @@ -7285,6 +7411,7 @@ return wdb_hide_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -7373,6 +7500,7 @@ return TCL_OK; } + /** * * @@ -7388,28 +7516,29 @@ return wdb_unhide_cmd(wdbp, interp, argc-1, argv+1); } -/** W D B _ A T T R _ C M D + +/** W D B _ A T T R _ C M D *@brief - * implements the "attr" command. + * implements the "attr" command. * - * argv[1] is a sub-command: + * argv[1] is a sub-command: * get - get attributes * set - add a new attribute or replace an existing one - * rm - remove an attribute + * rm - remove an attribute * append - append to an existing attribute * edit - invoke an editor to edit all attributes * - * argv[2] is the name of the object + * argv[2] is the name of the object * - * for "get" or "show", remaining args are attribute names (or none for all) + * for "get" or "show", remaining args are attribute names (or none for all) * - * for "set", remaining args are attribute name, attribute value.. + * for "set", remaining args are attribute name, attribute value.. * - * for "rm", remaining args are all attribute names + * for "rm", remaining args are all attribute names * - * for "append", remaining args are attribute name, value to append, ... + * for "append", remaining args are attribute name, value to append, ... * - * for "edit", remaining args are attribute names + * for "edit", remaining args are attribute names */ int wdb_attr_cmd(struct rt_wdb *wdbp, @@ -7720,6 +7849,7 @@ } + /** * * @@ -7735,6 +7865,7 @@ return wdb_attr_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -7920,8 +8051,7 @@ new_intern.idb_type = ID_ARB8; new_intern.idb_meth = &rt_functab[ID_ARB8]; success = 1; - } - else if (do_arb) { + } else if (do_arb) { rt_db_free_internal(&nmg_intern); Tcl_AppendResult(interp, "Failed to construct an ARB equivalent to ", nmg_name, "\n", (char *)NULL); @@ -7941,8 +8071,7 @@ new_intern.idb_type = ID_POLY; new_intern.idb_meth = &rt_functab[ID_POLY]; success = 1; - } - else if (do_poly) { + } else if (do_poly) { rt_db_free_internal(&nmg_intern); Tcl_AppendResult(interp, nmg_name, " is not a closed surface, cannot make a polysolid\n", (char *)NULL); return TCL_OK; @@ -7985,9 +8114,10 @@ return TCL_ERROR; } + /** * Usage: - * procname nmg_simplify [arb|tgc|ell|poly] new_solid nmg_solid + * procname nmg_simplify [arb|tgc|ell|poly] new_solid nmg_solid */ static int wdb_nmg_simplify_tcl(ClientData clientData, @@ -8000,6 +8130,7 @@ return wdb_nmg_simplify_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -8119,9 +8250,10 @@ return TCL_OK; } + /** * Usage: - * procname nmg_collapse nmg_solid new_solid maximum_error_distance [minimum_allowed_angle] + * procname nmg_collapse nmg_solid new_solid maximum_error_distance [minimum_allowed_angle] */ static int wdb_nmg_collapse_tcl(ClientData clientData, @@ -8134,6 +8266,7 @@ return wdb_nmg_collapse_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -8164,7 +8297,7 @@ } cp = argv[1]; - while (*cp) switch (*cp++) { + while (*cp) switch (*cp++) { case 'p': flags |= DIR_SOLID; break; @@ -8185,9 +8318,10 @@ return bad ? TCL_ERROR : TCL_OK; } + /** * Usage: - * procname + * procname */ static int wdb_summary_tcl(ClientData clientData, @@ -8200,6 +8334,7 @@ return wdb_summary_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -8240,9 +8375,10 @@ return TCL_OK; } + /** * Usage: - * procname + * procname */ static int wdb_pathlist_tcl(ClientData clientData, @@ -8255,6 +8391,7 @@ return wdb_pathlist_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -8377,6 +8514,7 @@ return TCL_OK; } + /** * * @@ -8392,6 +8530,7 @@ return wdb_bot_smooth_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -8549,7 +8688,7 @@ file_name = *argv; /* make a binunif of the entire file */ - if (rt_mk_binunif(wdbp, obj_name, file_name, minor_type, (size_t)-1)) { + if (rt_mk_binunif (wdbp, obj_name, file_name, minor_type, (size_t)-1)) { Tcl_AppendResult(interp, "Error creating ", obj_name, (char *)NULL); return TCL_ERROR; @@ -8630,9 +8769,10 @@ /* return TCL_ERROR; */ } + /** * Usage: - * procname bo args + * procname bo args */ static int wdb_bo_tcl(ClientData clientData, @@ -8645,6 +8785,7 @@ return wdb_bo_cmd(wdbp, interp, argc-1, argv+1); } + /** * * @@ -8743,9 +8884,10 @@ return TCL_OK; } + /** * Usage: - * procname + * procname */ static int wdb_bot_face_sort_tcl(ClientData clientData, @@ -8761,7 +8903,7 @@ /** * Usage: - * importFg4Section name sdata + * importFg4Section name sdata */ static int wdb_importFg4Section_tcl(ClientData clientData, @@ -8774,6 +8916,7 @@ return wdb_importFg4Section_cmd(wdbp, interp, argc-1, argv+1); } + #if 0 /** skeleton functions for wdb_obj methods */ int @@ -8784,9 +8927,10 @@ { } + /** * Usage: - * procname + * procname */ static int wdb__tcl(ClientData clientData, @@ -8819,11 +8963,12 @@ return strcmp((*dp1)->d_namep, (*dp2)->d_namep); } + #define RT_TERMINAL_WIDTH 80 #define RT_COLUMNS ((RT_TERMINAL_WIDTH + V4_MAXNAME - 1) / V4_MAXNAME) /** - * V L S _ C O L _ I T E M + * V L S _ C O L _ I T E M */ void wdb_vls_col_item(struct bu_vls *str, @@ -8853,6 +8998,7 @@ ++*ccp; } + /** * */ @@ -8867,6 +9013,7 @@ *clp = 0; } + /** * W D B _ V L S _ C O L _ P R 4 V * @@ -9013,6 +9160,7 @@ #endif } + /** * * @@ -9124,6 +9272,7 @@ } } + /** * W D B _ V L S _ L I N E _ D P P *@brief @@ -9197,7 +9346,7 @@ num_entries = 0; } - if (num_entries == 0) num_entries = db_get_directory_size(dbip); + if (num_entries == 0) num_entries = db_get_directory_size(dbip); /* Allocate and cast num_entries worth of pointers */ dir_basep = (struct directory **) bu_malloc((num_entries+1) * sizeof(struct directory *), @@ -9205,8 +9354,9 @@ return dir_basep; } + /* - * W D B _ D O _ L I S T + * W D B _ D O _ L I S T */ void wdb_do_list(struct db_i *dbip, @@ -9267,7 +9417,7 @@ int ret; bu_vls_printf(outstrp, "%s: ", dp->d_namep); ret = rt_functab[id].ft_describe(outstrp, &intern, verbose, dbip->dbi_base2local, &rt_uniresource, dbip); - if ( ret < 0) + if (ret < 0) Tcl_AppendResult(interp, dp->d_namep, ": describe error\n", (char *)NULL); } else { Tcl_AppendResult(interp, dp->d_namep, ": list support unimplemented\n", (char *)NULL); @@ -9277,14 +9427,15 @@ } } + /* - * W D B _ C O M B A D D + * W D B _ C O M B A D D * * Add an instance of object 'objp' to combination 'name'. * If the combination does not exist, it is created. * region_flag is 1 (region), or 0 (group). * - * Preserves the GIFT semantics. + * Preserves the GIFT semantics. */ struct directory * wdb_combadd(Tcl_Interp *interp, @@ -9445,6 +9596,7 @@ return dp; } + static void wdb_do_identitize(struct db_i *dbip, struct rt_comb_internal *UNUSED(comb), @@ -9469,10 +9621,11 @@ wdb_identitize(dp, dbip, interp); } + /* - * W D B _ I D E N T I T I Z E () + * W D B _ I D E N T I T I Z E () * - * Traverses an objects paths, setting all member matrices == identity + * Traverses an objects paths, setting all member matrices == identity * */ void @@ -9501,8 +9654,9 @@ } } + /* - * W D B _ D I R _ S U M M A R Y + * W D B _ D I R _ S U M M A R Y * * Summarize the contents of the directory by categories * (solid, comb, region). If flag is != 0, it is interpreted @@ -9567,13 +9721,14 @@ bu_free((genptr_t)dirp0, "dir_getspace"); } + /* - * W D B _ D I R _ G E T S P A C E + * W D B _ D I R _ G E T S P A C E * * This routine walks through the directory entry list and mallocs enough * space for pointers to hold: - * a) all of the entries if called with an argument of 0, or - * b) the number of entries specified by the argument if > 0. + * a) all of the entries if called with an argument of 0, or + * b) the number of entries specified by the argument if > 0. */ static struct directory ** wdb_dir_getspace(struct db_i *dbip, @@ -9601,8 +9756,9 @@ return dir_basep; } + /* - * P A T H L I S T _ L E A F _ F U N C + * P A T H L I S T _ L E A F _ F U N C */ static union tree * wdb_pathlist_leaf_func(struct db_tree_state *UNUSED(tsp), @@ -9633,8 +9789,9 @@ return TREE_NULL; } + /* - * W D B _ B O T _ D E C I M A T E _ C M D + * W D B _ B O T _ D E C I M A T E _ C M D */ int @@ -9762,9 +9919,10 @@ return TCL_OK; } + /* * Usage: - * procname + * procname */ static int wdb_bot_decimate_tcl(ClientData clientData, @@ -9934,12 +10092,13 @@ return TCL_OK; } + /** * Move an arb's edge so that it intersects the given point. The new * vertices are returned via interp result. * * Usage: - * procname move_arb_face arb face pt + * procname move_arb_face arb face pt */ static int wdb_move_arb_edge_tcl(ClientData clientData, @@ -9952,6 +10111,7 @@ return wdb_move_arb_edge_cmd(wdbp, interp, argc-1, argv+1); } + int wdb_move_arb_face_cmd(struct rt_wdb *wdbp, Tcl_Interp *interp, @@ -10076,12 +10236,13 @@ return TCL_OK; } + /** * Move an arb's face so that its plane intersects the given * point. The new vertices are returned via interp result. * * Usage: - * procname move_arb_face arb face pt + * procname move_arb_face arb face pt */ static int wdb_move_arb_face_tcl(ClientData clientData, @@ -10103,6 +10264,7 @@ { 1, 2, 3, 4, 5, 6, 7, 8, 1, 5, 8, 4, 2, 3, 7, 6, 1, 2, 6, 5, 4, 3, 7, 8 } /* arb8 */ }; + int wdb_rotate_arb_face_cmd(struct rt_wdb *wdbp, Tcl_Interp *interp, @@ -10284,12 +10446,13 @@ return TCL_OK; } + /** * Rotate an arb's face to the given point. The new vertices are * returned via interp result. * * Usage: - * procname rotate_arb_face arb face pt + * procname rotate_arb_face arb face pt */ static int wdb_rotate_arb_face_tcl(ClientData clientData, @@ -10302,6 +10465,7 @@ return wdb_rotate_arb_face_cmd(wdbp, interp, argc-1, argv+1); } + static int wdb_newcmds_tcl(ClientData clientData, Tcl_Interp *interp, @@ -10315,7 +10479,7 @@ int ret; /*XXX Eventually the clientData will be a "struct ged". - * In the meantime ... + * In the meantime ... */ GED_INIT(&ged, wdbp); @@ -10355,6 +10519,7 @@ return TCL_OK; } + /* * Local Variables: * mode: C This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2010-05-19 15:39:28
|
Revision: 39391 http://brlcad.svn.sourceforge.net/brlcad/?rev=39391&view=rev Author: brlcad Date: 2010-05-19 15:39:21 +0000 (Wed, 19 May 2010) Log Message: ----------- more size_t node counting Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2010-05-19 15:36:02 UTC (rev 39390) +++ brlcad/trunk/src/libged/wdb_obj.c 2010-05-19 15:39:21 UTC (rev 39391) @@ -5189,8 +5189,8 @@ if (comb->tree) { struct bu_vls vls; - int node_count; - int actual_count; + size_t node_count; + size_t actual_count; struct rt_tree_array *rt_tree_array; if (comb->tree && db_ck_v4gift_tree(comb->tree) < 0) { @@ -5207,7 +5207,7 @@ actual_count = (struct rt_tree_array *)db_flatten_tree( rt_tree_array, comb->tree, OP_UNION, 1, &rt_uniresource) - rt_tree_array; - BU_ASSERT_LONG(actual_count, ==, node_count); + BU_ASSERT_SIZE_T(actual_count, ==, node_count); comb->tree = TREE_NULL; } else { actual_count = 0; @@ -5407,8 +5407,8 @@ comb = (struct rt_comb_internal *)intern.idb_ptr; if (comb->tree) { - int node_count; - int actual_count; + size_t node_count; + size_t actual_count; struct rt_tree_array *rt_tree_array; if (comb->tree && db_ck_v4gift_tree(comb->tree) < 0) { @@ -5425,7 +5425,7 @@ actual_count = (struct rt_tree_array *)db_flatten_tree( rt_tree_array, comb->tree, OP_UNION, 1, &rt_uniresource) - rt_tree_array; - BU_ASSERT_LONG(actual_count, ==, node_count); + BU_ASSERT_SIZE_T(actual_count, ==, node_count); comb->tree = TREE_NULL; } else { actual_count = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2010-06-22 19:36:38
|
Revision: 39657 http://brlcad.svn.sourceforge.net/brlcad/?rev=39657&view=rev Author: brlcad Date: 2010-06-22 19:36:32 +0000 (Tue, 22 Jun 2010) Log Message: ----------- remove dead code. old style and at least some of the functions referenced don't exist. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2010-06-22 19:33:05 UTC (rev 39656) +++ brlcad/trunk/src/libged/wdb_obj.c 2010-06-22 19:36:32 UTC (rev 39657) @@ -194,9 +194,6 @@ int wdb_pathsum_cmd(struct rt_wdb *wdbp, Tcl_Interp *interp, int argc, char *argv[]); static int wdb_open_tcl(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[]); -#if 0 -static int wdb_close_tcl(); -#endif static int wdb_decode_dbip(Tcl_Interp *interp, const char *dbip_string, struct db_i **dbipp); struct db_i *wdb_prep_dbip(Tcl_Interp *interp, const char *filename); @@ -402,19 +399,6 @@ {"whichid", wdb_which_tcl}, {"wmater", wdb_newcmds_tcl}, {"xpush", wdb_xpush_tcl}, -#if 0 - /* Commands to be added */ - {"comb_color", wdb_comb_color_tcl}, - {"copymat", wdb_copymat_tcl}, - {"getmat", wdb_getmat_tcl}, - {"putmat", wdb_putmat_tcl}, - {"which_shader", wdb_which_shader_tcl}, - {"rcodes", wdb_rcodes_tcl}, - {"wcodes", wdb_wcodes_tcl}, - {"rmater", wdb_rmater_tcl}, - {"analyze", wdb_analyze_tcl}, - {"inside", wdb_inside_tcl}, -#endif {(char *)NULL, (int (*)())0 } }; @@ -468,10 +452,6 @@ RT_CK_WDB(wdbp); BU_LIST_DEQUEUE(&wdbp->l); bu_vls_free(&wdbp->wdb_name); -#if 0 - bu_vls_free(&wdbp->wdb_log); - bu_vls_free(&wdbp->wdb_result_str); -#endif bu_vls_free(&wdbp->wdb_prestr); wdb_close(wdbp); } @@ -2789,10 +2769,6 @@ /* ignore phony objects */ if (dp->d_addr == RT_DIR_PHONY_ADDR) continue; -#if 0 - if (i == argc-1) - ktd.notify = 1; -#endif db_functree(wdbp->dbip, dp, wdb_killtree_callback, wdb_killtree_callback, @@ -8917,33 +8893,6 @@ } -#if 0 -/** skeleton functions for wdb_obj methods */ -int -wdb__cmd(struct rt_wdb *wdbp, - Tcl_Interp *interp, - int argc, - char *argv[]) -{ -} - - -/** - * Usage: - * procname - */ -static int -wdb__tcl(ClientData clientData, - Tcl_Interp *interp, - int argc, - char *argv[]) -{ - struct rt_wdb *wdbp = (struct rt_wdb *)clientData; - - return wdb__cmd(wdbp, interp, argc-1, argv+1); -} -#endif - /****************** utility routines ********************/ /** @@ -9027,60 +8976,6 @@ int num_in_list, int no_decorate) { -#if 0 - int lines, i, j, namelen, this_one; - - qsort((genptr_t)list_of_names, - (unsigned)num_in_list, (unsigned)sizeof(struct directory *), - (int (*)(const void *, const void *))wdb_cmpdirname); - - /* - * For the number of (full and partial) lines that will be needed, - * print in vertical format. - */ - lines = (num_in_list + 3) / 4; - for (i=0; i < lines; i++) { - for (j=0; j < 4; j++) { - this_one = j * lines + i; - /* Restrict the print to 16 chars per spec. */ - bu_vls_printf(vls, "%.16s", list_of_names[this_one]->d_namep); - namelen = strlen(list_of_names[this_one]->d_namep); - if (namelen > 16) - namelen = 16; - /* - * Region and ident checks here.... Since the code - * has been modified to push and sort on pointers, - * the printing of the region and ident flags must - * be delayed until now. There is no way to make the - * decision on where to place them before now. - */ - if (list_of_names[this_one]->d_flags & DIR_COMB) { - bu_vls_putc(vls, '/'); - namelen++; - } - if (list_of_names[this_one]->d_flags & DIR_REGION) { - bu_vls_putc(vls, 'R'); - namelen++; - } - /* - * Size check (partial lines), and line termination. - * Note that this will catch the end of the lines - * that are full too. - */ - if (this_one + lines >= num_in_list) { - bu_vls_putc(vls, '\n'); - break; - } else { - /* - * Pad to next boundary as there will be - * another entry to the right of this one. - */ - while (namelen++ < 20) - bu_vls_putc(vls, ' '); - } - } - } -#else int lines, i, j, k, namelen, this_one; int maxnamelen; /* longest name in list */ int cwidth; /* column width */ @@ -9157,7 +9052,6 @@ } } } -#endif } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2010-06-22 19:38:22
|
Revision: 39658 http://brlcad.svn.sourceforge.net/brlcad/?rev=39658&view=rev Author: brlcad Date: 2010-06-22 19:38:16 +0000 (Tue, 22 Jun 2010) Log Message: ----------- quell size_t warnings Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2010-06-22 19:36:32 UTC (rev 39657) +++ brlcad/trunk/src/libged/wdb_obj.c 2010-06-22 19:38:16 UTC (rev 39658) @@ -5150,7 +5150,7 @@ Tcl_Interp *interp, struct directory *dp) { - int i; + size_t i; struct rt_db_internal intern; struct rt_comb_internal *comb; @@ -5331,7 +5331,7 @@ int displayDepth, int currdisplayDepth) { - int i; + size_t i; struct directory *nextdp; struct rt_db_internal intern; struct rt_comb_internal *comb; @@ -5340,7 +5340,7 @@ if (cflag && !(dp->d_flags & DIR_COMB)) return; - for (i=0; i<pathpos; i++) + for (i=0; i<(size_t)pathpos; i++) if (indentSize < 0) { Tcl_AppendResult(interp, "\t", (char *)NULL); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-01-20 04:26:58
|
Revision: 42487 http://brlcad.svn.sourceforge.net/brlcad/?rev=42487&view=rev Author: brlcad Date: 2011-01-20 04:26:51 +0000 (Thu, 20 Jan 2011) Log Message: ----------- woo hoo, this makes for the last strict quellage in libged. another longjmp protection, fortunately made very simple since they're just flags that get initialized every time and can just be made static. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2011-01-20 04:24:15 UTC (rev 42486) +++ brlcad/trunk/src/libged/wdb_obj.c 2011-01-20 04:26:51 UTC (rev 42487) @@ -4435,18 +4435,20 @@ { int i; int c; - int triangulate; char *newname; struct rt_db_internal intern; struct directory *dp; int failed; int nmg_use_tnurbs = 0; - int make_bot; struct db_tree_state init_state; struct db_i *dbip; union tree *facetize_tree; struct model *nmg_model; + /* static due to longjmp, keep gcc happy */ + static int triangulate; + static int make_bot; + if (argc < 3) { Tcl_AppendResult(interp, "Usage: ", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-01-27 00:06:10
|
Revision: 42631 http://brlcad.svn.sourceforge.net/brlcad/?rev=42631&view=rev Author: brlcad Date: 2011-01-27 00:06:04 +0000 (Thu, 27 Jan 2011) Log Message: ----------- match ls.c and attr.c files. ugh, duplication. when can this file die? Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2011-01-27 00:05:35 UTC (rev 42630) +++ brlcad/trunk/src/libged/wdb_obj.c 2011-01-27 00:06:04 UTC (rev 42631) @@ -270,8 +270,8 @@ void wdb_vls_col_item(struct bu_vls *str, char *cp, int *ccp, int *clp); void wdb_vls_col_eol(struct bu_vls *str, int *ccp, int *clp); void wdb_vls_col_pr4v(struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int no_decorate); -void wdb_vls_long_dpp(struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int aflag, int cflag, int rflag, int sflag); -void wdb_vls_line_dpp(struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int aflag, int cflag, int rflag, int sflag); +void wdb_vls_long_dpp(struct rt_wdb *wdbp, struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int aflag, int cflag, int rflag, int sflag); +void wdb_vls_line_dpp(struct rt_wdb *wdbp, struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int aflag, int cflag, int rflag, int sflag); void wdb_do_list(struct db_i *dbip, Tcl_Interp *interp, struct bu_vls *outstrp, struct directory *dp, int verbose); struct directory ** wdb_getspace(struct db_i *dbip, size_t num_entries); struct directory *wdb_combadd(Tcl_Interp *interp, struct db_i *dbip, struct directory *objp, char *combname, int region_flag, int relation, int ident, int air, struct rt_wdb *wdbp); @@ -2182,10 +2182,10 @@ } if (lflag) - wdb_vls_long_dpp(&vls, dirp0, (int)(dirp - dirp0), + wdb_vls_long_dpp(wdbp, &vls, dirp0, (int)(dirp - dirp0), aflag, cflag, rflag, sflag); else if (aflag || cflag || rflag || sflag) - wdb_vls_line_dpp(&vls, dirp0, (int)(dirp - dirp0), + wdb_vls_line_dpp(wdbp, &vls, dirp0, (int)(dirp - dirp0), aflag, cflag, rflag, sflag); else wdb_vls_col_pr4v(&vls, dirp0, (int)(dirp - dirp0), 0); @@ -7727,8 +7727,11 @@ bu_vls_printf(&vls, "%s combination:\n", argv[2]); } } else if (dp->d_flags & RT_DIR_SOLID) { - bu_vls_printf(&vls, "%s %s:\n", argv[2], - rt_functab[dp->d_minor_type].ft_label); + struct rt_db_internal intern; + if (rt_db_get_internal(&intern, dp, wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) >= 0) { + bu_vls_printf(&vls, "%s %s:\n", argv[2], intern.idb_meth->ft_label); + rt_db_free_internal(&intern); + } } else { switch (dp->d_major_type) { case DB5_MAJORTYPE_ATTRIBUTE_ONLY: @@ -9079,7 +9082,8 @@ * */ void -wdb_vls_long_dpp(struct bu_vls *vls, +wdb_vls_long_dpp(struct rt_wdb *wdbp, + struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int aflag, /* print all objects */ @@ -9108,12 +9112,17 @@ max_nam_len = len; if (dp->d_flags & RT_DIR_REGION) - len = 6; + len = 6; /* "region" */ else if (dp->d_flags & RT_DIR_COMB) - len = 4; - else if (dp->d_flags & RT_DIR_SOLID) - len = (int)strlen(rt_functab[dp->d_minor_type].ft_label); - else { + len = 4; /* "comb" */ + else if (dp->d_flags & RT_DIR_SOLID) { + struct rt_db_internal intern; + len = 9; /* "primitive" */ + if (rt_db_get_internal(&intern, dp, wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) >= 0) { + len = strlen(intern.idb_meth->ft_label); + rt_db_free_internal(&intern); + } + } else { switch (list_of_names[i]->d_major_type) { case DB5_MAJORTYPE_ATTRIBUTE_ONLY: len = 6; @@ -9146,9 +9155,14 @@ } else isRegion = 0; } else if (list_of_names[i]->d_flags & RT_DIR_SOLID) { + struct rt_db_internal intern; + type = "primitive"; + if (rt_db_get_internal(&intern, dp, wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) >= 0) { + type = intern.idb_meth->ft_label; + rt_db_free_internal(&intern); + } isComb = isRegion = 0; isSolid = 1; - type = rt_functab[list_of_names[i]->d_minor_type].ft_label; } else { switch (list_of_names[i]->d_major_type) { case DB5_MAJORTYPE_ATTRIBUTE_ONLY: @@ -9193,7 +9207,8 @@ * names in that list, sort and print that list on the same line. */ void -wdb_vls_line_dpp(struct bu_vls *vls, +wdb_vls_line_dpp(struct rt_wdb *UNUSED(wdbp), + struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int aflag, /* print all objects */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-04-05 17:53:22
|
Revision: 44224 http://brlcad.svn.sourceforge.net/brlcad/?rev=44224&view=rev Author: brlcad Date: 2011-04-05 17:53:15 +0000 (Tue, 05 Apr 2011) Log Message: ----------- if ged_title() is wrong, then this one is probably wrong too since it's the daddy. make title not clobber units. Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2011-04-05 17:52:21 UTC (rev 44223) +++ brlcad/trunk/src/libged/wdb_obj.c 2011-04-05 17:53:15 UTC (rev 44224) @@ -5134,7 +5134,7 @@ bu_vls_init(&title); bu_vls_from_argv(&title, argc-1, (const char **)argv+1); - if (db_update_ident(wdbp->dbip, bu_vls_addr(&title), wdbp->dbip->dbi_base2local) < 0) { + if (db_update_ident(wdbp->dbip, bu_vls_addr(&title), wdbp->dbip->dbi_local2base) < 0) { Tcl_AppendResult(interp, "Error: unable to change database title"); bad = 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-06-29 06:25:54
|
Revision: 45291 http://brlcad.svn.sourceforge.net/brlcad/?rev=45291&view=rev Author: brlcad Date: 2011-06-29 06:25:48 +0000 (Wed, 29 Jun 2011) Log Message: ----------- don't wdb_close does the dequeue and vls frees for us Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2011-06-29 06:24:29 UTC (rev 45290) +++ brlcad/trunk/src/libged/wdb_obj.c 2011-06-29 06:25:48 UTC (rev 45291) @@ -464,10 +464,7 @@ /* notify drawable geometry objects of the impending close */ dgo_impending_wdb_close(wdbp, wdbp->wdb_interp); - RT_CK_WDB(wdbp); - BU_LIST_DEQUEUE(&wdbp->l); - bu_vls_free(&wdbp->wdb_name); - bu_vls_free(&wdbp->wdb_prestr); + /* close up shop */ wdb_close(wdbp); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2011-12-06 17:54:23
|
Revision: 47798 http://brlcad.svn.sourceforge.net/brlcad/?rev=47798&view=rev Author: brlcad Date: 2011-12-06 17:54:14 +0000 (Tue, 06 Dec 2011) Log Message: ----------- more massive reordering to eliminate forward decls Modified Paths: -------------- brlcad/trunk/src/libged/wdb_obj.c Modified: brlcad/trunk/src/libged/wdb_obj.c =================================================================== --- brlcad/trunk/src/libged/wdb_obj.c 2011-12-06 17:44:06 UTC (rev 47797) +++ brlcad/trunk/src/libged/wdb_obj.c 2011-12-06 17:54:14 UTC (rev 47798) @@ -182,455 +182,1473 @@ Tcl_Interp *interp); -int wdb_init_obj(Tcl_Interp *interp, struct rt_wdb *wdbp, const char *oname); -int wdb_get_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -int wdb_get_type_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -int wdb_attr_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -int wdb_pathsum_cmd(struct rt_wdb *wdbp, Tcl_Interp *interp, int argc, char *argv[]); +static int pathListNoLeaf = 0; -static int wdb_open_tcl(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[]); -static int wdb_decode_dbip(Tcl_Interp *interp, const char *dbip_string, struct db_i **dbipp); -struct db_i *wdb_prep_dbip(Tcl_Interp *interp, const char *filename); -static int wdb_cmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_match_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_put_tcl(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[]); -static int wdb_adjust_tcl(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[]); -static int wdb_form_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_tops_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_rt_gettrees_tcl(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[]); -static int wdb_shells_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_dump_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_dbip_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_ls_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_list_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_pathsum_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_expand_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_kill_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_killall_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_killtree_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static void wdb_killtree_callback(struct db_i *dbip, struct directory *dp, genptr_t ptr); -static int wdb_copy_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_move_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_move_all_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_concat_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_copyeval_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_dup_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_group_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_remove_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_region_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_comb_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_facetize_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_find_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_which_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_title_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_track_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_prcolor_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_tol_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_push_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_whatid_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_keep_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_cat_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_instance_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_observer_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_reopen_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_make_bb_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_units_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_hide_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_unhide_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_xpush_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_bot_smooth_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_showmats_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_nmg_collapse_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_nmg_simplify_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_summary_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_pathlist_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_lt_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_version_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_bo_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_bot_face_sort_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_bot_decimate_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_move_arb_edge_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_move_arb_face_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_rotate_arb_face_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_rmap_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_importFg4Section_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_newcmds_tcl(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]); -static int wdb_stub_tcl(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[]); +/** + * W D B _ C M P D I R N A M E + * + * Given two pointers to pointers to directory entries, do a string compare + * on the respective names and return that value. + */ +int +wdb_cmpdirname(const genptr_t a, const genptr_t b) +{ + struct directory **dp1, **dp2; -void wdb_deleteProc(ClientData clientData); -static void wdb_deleteProc_rt(ClientData clientData); + dp1 = (struct directory **)a; + dp2 = (struct directory **)b; + return bu_strcmp((*dp1)->d_namep, (*dp2)->d_namep); +} -int wdb_cmpdirname(const genptr_t a, const genptr_t b); -void wdb_vls_col_item(struct bu_vls *str, char *cp, int *ccp, int *clp); -void wdb_vls_col_eol(struct bu_vls *str, int *ccp, int *clp); -void wdb_vls_col_pr4v(struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int no_decorate); -void wdb_vls_long_dpp(struct rt_wdb *wdbp, struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int aflag, int cflag, int rflag, int sflag); -void wdb_vls_line_dpp(struct rt_wdb *wdbp, struct bu_vls *vls, struct directory **list_of_names, int num_in_list, int aflag, int cflag, int rflag, int sflag); -void wdb_do_list(struct db_i *dbip, Tcl_Interp *interp, struct bu_vls *outstrp, struct directory *dp, int verbose); -struct directory ** wdb_getspace(struct db_i *dbip, size_t num_entries); -struct directory *wdb_combadd(Tcl_Interp *interp, struct db_i *dbip, struct directory *objp, char *combname, int region_flag, int relation, int ident, int air, struct rt_wdb *wdbp); -void wdb_identitize(struct directory *dp, struct db_i *dbip, Tcl_Interp *interp); -static void wdb_dir_summary(struct db_i *dbip, Tcl_Interp *interp, int flag); -static struct directory ** wdb_dir_getspace(struct db_i *dbip, int num_entries); -static union tree *wdb_pathlist_leaf_func(struct db_tree_state *tsp, const struct db_full_path *pathp, struct rt_db_internal *ip, genptr_t client_data); -HIDDEN union tree *facetize_region_end(struct db_tree_state *tsp, const struct db_full_path *pathp, union tree *curtree, genptr_t client_data); -int wdb_dir_check(struct db_i *input_dbip, const char *name, off_t laddr, size_t len, int flags, genptr_t ptr); -void wdb_dir_check5(struct db_i *input_dbip, const struct db5_raw_internal *rip, off_t addr, genptr_t ptr); -static int pathListNoLeaf = 0; +#define RT_TERMINAL_WIDTH 80 +#define RT_COLUMNS ((RT_TERMINAL_WIDTH + V4_MAXNAME - 1) / V4_MAXNAME) +/** + * V L S _ C O L _ I T E M + */ +void +wdb_vls_col_item(struct bu_vls *str, + char *cp, + int *ccp, /* column count pointer */ + int *clp) /* column length pointer */ +{ + /* Output newline if last column printed. */ + if (*ccp >= RT_COLUMNS || (*clp+V4_MAXNAME-1) >= RT_TERMINAL_WIDTH) { + /* line now full */ + bu_vls_putc(str, '\n'); + *ccp = 0; + } else if (*ccp != 0) { + /* Space over before starting new column */ + do { + bu_vls_putc(str, ' '); + ++*clp; + } while ((*clp % V4_MAXNAME) != 0); + } + /* Output string and save length for next tab. */ + *clp = 0; + while (*cp != '\0') { + bu_vls_putc(str, *cp); + ++cp; + ++*clp; + } + ++*ccp; +} -static struct bu_cmdtab wdb_newcmds[] = { - {"arced", ged_arced}, - {"cc", ged_cc}, - {"color", ged_color}, - {"comb_color", ged_comb_color}, - {"edcomb", ged_edcomb}, - {"edit", ged_edit}, - {"edmater", ged_edmater}, - {"item", ged_item}, - {"log", ged_log}, - {"make", ged_make}, - {"make_name", ged_make_name}, - {"mater", ged_mater}, - {"mirror", ged_mirror}, - {"nirt", ged_nirt}, - {"ocenter", ged_ocenter}, - {"orotate", ged_orotate}, - {"oscale", ged_oscale}, - {"otranslate", ged_otranslate}, - {"rmater", ged_rmater}, - {"shader", ged_shader}, - {"wmater", ged_wmater}, - {(char *)NULL, (int (*)())0} -}; +/** + * + */ +void +wdb_vls_col_eol(struct bu_vls *str, + int *ccp, + int *clp) +{ + if (*ccp != 0) /* partial line */ + bu_vls_putc(str, '\n'); + *ccp = 0; + *clp = 0; +} -static struct bu_cmdtab wdb_cmds[] = { - {"adjust", wdb_adjust_tcl}, - {"arced", wdb_newcmds_tcl}, - {"attr", wdb_attr_tcl}, - {"bo", wdb_bo_tcl}, - {"bot_face_sort", wdb_bot_face_sort_tcl}, - {"bot_decimate", wdb_bot_decimate_tcl}, - {"c", wdb_comb_std_tcl}, - {"cat", wdb_cat_tcl}, - {"comb", wdb_comb_tcl}, - {"comb_color", wdb_newcmds_tcl}, - {"concat", wdb_concat_tcl}, - {"copyeval", wdb_copyeval_tcl}, - {"cp", wdb_copy_tcl}, - {"db", wdb_stub_tcl}, - {"dbip", wdb_dbip_tcl}, - {"dump", wdb_dump_tcl}, - {"dup", wdb_dup_tcl}, - {"edcomb", wdb_newcmds_tcl}, - {"edit", wdb_newcmds_tcl}, - {"edmater", wdb_newcmds_tcl}, - {"expand", wdb_expand_tcl}, - {"facetize", wdb_facetize_tcl}, - {"find", wdb_find_tcl}, - {"form", wdb_form_tcl}, - {"g", wdb_group_tcl}, - {"get", wdb_get_tcl}, - {"get_type", wdb_get_type_tcl}, - {"hide", wdb_hide_tcl}, - {"i", wdb_instance_tcl}, - {"importFg4Section", wdb_importFg4Section_tcl}, - {"item", wdb_newcmds_tcl}, - {"keep", wdb_keep_tcl}, - {"kill", wdb_kill_tcl}, - {"killall", wdb_killall_tcl}, - {"killtree", wdb_killtree_tcl}, - {"l", wdb_list_tcl}, - {"listeval", wdb_pathsum_tcl}, - {"log", wdb_newcmds_tcl}, - {"ls", wdb_ls_tcl}, - {"lt", wdb_lt_tcl}, - {"make", wdb_newcmds_tcl}, - {"make_bb", wdb_make_bb_tcl}, - {"make_name", wdb_newcmds_tcl}, - {"match", wdb_match_tcl}, - {"mater", wdb_newcmds_tcl}, - {"mirror", wdb_newcmds_tcl}, - {"move_arb_edge", wdb_move_arb_edge_tcl}, - {"move_arb_face", wdb_move_arb_face_tcl}, - {"mv", wdb_move_tcl}, - {"mvall", wdb_move_all_tcl}, - {"nirt", wdb_newcmds_tcl}, - {"nmg_collapse", wdb_nmg_collapse_tcl}, - {"nmg_simplify", wdb_nmg_simplify_tcl}, - {"observer", wdb_observer_tcl}, - {"ocenter", wdb_newcmds_tcl}, - {"orotate", wdb_newcmds_tcl}, - {"oscale", wdb_newcmds_tcl}, - {"otranslate", wdb_newcmds_tcl}, - {"open", wdb_reopen_tcl}, - {"pathlist", wdb_pathlist_tcl}, - {"paths", wdb_pathsum_tcl}, - {"prcolor", wdb_prcolor_tcl}, - {"push", wdb_push_tcl}, - {"put", wdb_put_tcl}, - {"r", wdb_region_tcl}, - {"rm", wdb_remove_tcl}, - {"rmap", wdb_rmap_tcl}, - {"rmater", wdb_newcmds_tcl}, - {"rotate_arb_face", wdb_rotate_arb_face_tcl}, - {"rt_gettrees", wdb_rt_gettrees_tcl}, - {"shader", wdb_newcmds_tcl}, - {"shells", wdb_shells_tcl}, - {"showmats", wdb_showmats_tcl}, - {"bot_smooth", wdb_bot_smooth_tcl}, - {"summary", wdb_summary_tcl}, - {"title", wdb_title_tcl}, - {"tol", wdb_tol_tcl}, - {"tops", wdb_tops_tcl}, - {"track", wdb_track_tcl}, - {"unhide", wdb_unhide_tcl}, - {"units", wdb_units_tcl}, - {"version", wdb_version_tcl}, - {"whatid", wdb_whatid_tcl}, - {"whichair", wdb_which_tcl}, - {"whichid", wdb_which_tcl}, - {"wmater", wdb_newcmds_tcl}, - {"xpush", wdb_xpush_tcl}, - {(char *)NULL, (int (*)())0 } -}; +/** + * W D B _ V L S _ C O L _ P R 4 V + * + * Given a pointer to a list of pointers to names and the number of + * names in that list, sort and print that list in column order over + * four columns. + */ +void +wdb_vls_col_pr4v(struct bu_vls *vls, + struct directory **list_of_names, + int num_in_list, + int no_decorate) +{ + int lines, i, j, k, namelen, this_one; + int maxnamelen; /* longest name in list */ + int cwidth; /* column width */ + int numcol; /* number of columns */ + qsort((genptr_t)list_of_names, + (unsigned)num_in_list, (unsigned)sizeof(struct directory *), + (int (*)(const void *, const void *))wdb_cmpdirname); + + /* + * Traverse the list of names, find the longest name and set the + * the column width and number of columns accordingly. + * If the longest name is greater than 80 characters, the number of columns + * will be one. + */ + maxnamelen = 0; + for (k=0; k < num_in_list; k++) { + namelen = (int)strlen(list_of_names[k]->d_namep); + if (namelen > maxnamelen) + maxnamelen = namelen; + } + + if (maxnamelen <= 16) + maxnamelen = 16; + cwidth = maxnamelen + 4; + + if (cwidth > 80) + cwidth = 80; + numcol = RT_TERMINAL_WIDTH / cwidth; + + /* + * For the number of (full and partial) lines that will be needed, + * print in vertical format. + */ + lines = (num_in_list + (numcol - 1)) / numcol; + for (i=0; i < lines; i++) { + for (j=0; j < numcol; j++) { + this_one = j * lines + i; + bu_vls_printf(vls, "%s", list_of_names[this_one]->d_namep); + namelen = (int)strlen(list_of_names[this_one]->d_namep); + + /* + * Region and ident checks here.... Since the code + * has been modified to push and sort on pointers, + * the printing of the region and ident flags must + * be delayed until now. There is no way to make the + * decision on where to place them before now. + */ + if (!no_decorate && list_of_names[this_one]->d_flags & RT_DIR_COMB) { + bu_vls_putc(vls, '/'); + namelen++; + } + + if (!no_decorate && list_of_names[this_one]->d_flags & RT_DIR_REGION) { + bu_vls_putc(vls, 'R'); + namelen++; + } + + /* + * Size check (partial lines), and line termination. + * Note that this will catch the end of the lines + * that are full too. + */ + if (this_one + lines >= num_in_list) { + bu_vls_putc(vls, '\n'); + break; + } else { + /* + * Pad to next boundary as there will be + * another entry to the right of this one. + */ + while (namelen++ < cwidth) + bu_vls_putc(vls, ' '); + } + } + } +} + + /** - * @brief create the Tcl command for wdb_open * + * */ -int -Wdb_Init(Tcl_Interp *interp) +void +wdb_vls_long_dpp(struct rt_wdb *wdbp, + struct bu_vls *vls, + struct directory **list_of_names, + int num_in_list, + int aflag, /* print all objects */ + int cflag, /* print combinations */ + int rflag, /* print regions */ + int sflag) /* print solids */ { - (void)Tcl_CreateCommand(interp, (const char *)"wdb_open", wdb_open_tcl, - (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); + int i; + int isComb=0, isRegion=0; + int isSolid=0; + const char *type=NULL; + int max_nam_len = 0; + int max_type_len = 0; + struct directory *dp; - return TCL_OK; + qsort((genptr_t)list_of_names, + (unsigned)num_in_list, (unsigned)sizeof(struct directory *), + (int (*)(const void *, const void *))wdb_cmpdirname); + + for (i=0; i < num_in_list; i++) { + int len; + + dp = list_of_names[i]; + len = (int)strlen(dp->d_namep); + if (len > max_nam_len) + max_nam_len = len; + + if (dp->d_flags & RT_DIR_REGION) + len = 6; /* "region" */ + else if (dp->d_flags & RT_DIR_COMB) + len = 4; /* "comb" */ + else if (dp->d_flags & RT_DIR_SOLID) { + struct rt_db_internal intern; + len = 9; /* "primitive" */ + if (rt_db_get_internal(&intern, dp, wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) >= 0) { + len = strlen(intern.idb_meth->ft_label); + rt_db_free_internal(&intern); + } + } else { + switch (list_of_names[i]->d_major_type) { + case DB5_MAJORTYPE_ATTRIBUTE_ONLY: + len = 6; + break; + case DB5_MAJORTYPE_BINARY_MIME: + len = (int)strlen("binary(mime)"); + break; + case DB5_MAJORTYPE_BINARY_UNIF: + len = (int)strlen(binu_types[list_of_names[i]->d_minor_type]); + break; + } + } + + if (len > max_type_len) + max_type_len = len; + } + + /* + * i - tracks the list item + */ + for (i=0; i < num_in_list; ++i) { + if (list_of_names[i]->d_flags & RT_DIR_COMB) { + isComb = 1; + isSolid = 0; + type = "comb"; + + if (list_of_names[i]->d_flags & RT_DIR_REGION) { + isRegion = 1; + type = "region"; + } else + isRegion = 0; + } else if (list_of_names[i]->d_flags & RT_DIR_SOLID) { + struct rt_db_internal intern; + type = "primitive"; + if (rt_db_get_internal(&intern, dp, wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) >= 0) { + type = intern.idb_meth->ft_label; + rt_db_free_internal(&intern); + } + isComb = isRegion = 0; + isSolid = 1; + } else { + switch (list_of_names[i]->d_major_type) { + case DB5_MAJORTYPE_ATTRIBUTE_ONLY: + isSolid = 0; + type = "global"; + break; + case DB5_MAJORTYPE_BINARY_MIME: + isSolid = 0; + isRegion = 0; + type = "binary(mime)"; + break; + case DB5_MAJORTYPE_BINARY_UNIF: + isSolid = 0; + isRegion = 0; + type = binu_types[list_of_names[i]->d_minor_type]; + break; + } + } + + /* print list item i */ + dp = list_of_names[i]; + if (aflag || + (!cflag && !rflag && !sflag) || + (cflag && isComb) || + (rflag && isRegion) || + (sflag && isSolid)) { + bu_vls_printf(vls, "%s", dp->d_namep); + bu_vls_spaces(vls, (int)(max_nam_len - strlen(dp->d_namep))); + bu_vls_printf(vls, " %s", type); + bu_vls_spaces(vls, (int)(max_type_len - strlen(type))); + bu_vls_printf(vls, " %2d %2d %ld\n", + dp->d_major_type, dp->d_minor_type, (long)(dp->d_len)); + } + } } /** - * W D B _ C M D + * W D B _ V L S _ L I N E _ D P P *@brief - * Generic interface for database commands. + * Given a pointer to a list of pointers to names and the number of + * names in that list, sort and print that list on the same line. + */ +void +wdb_vls_line_dpp(struct rt_wdb *UNUSED(wdbp), + struct bu_vls *vls, + struct directory **list_of_names, + int num_in_list, + int aflag, /* print all objects */ + int cflag, /* print combinations */ + int rflag, /* print regions */ + int sflag) /* print solids */ +{ + int i; + int isComb, isRegion; + int isSolid; + + qsort((genptr_t)list_of_names, + (unsigned)num_in_list, (unsigned)sizeof(struct directory *), + (int (*)(const void *, const void *))wdb_cmpdirname); + + /* + * i - tracks the list item + */ + for (i=0; i < num_in_list; ++i) { + if (list_of_names[i]->d_flags & RT_DIR_COMB) { + isComb = 1; + isSolid = 0; + + if (list_of_names[i]->d_flags & RT_DIR_REGION) + isRegion = 1; + else + isRegion = 0; + } else { + isComb = isRegion = 0; + isSolid = 1; + } + + /* print list item i */ + if (aflag || + (!cflag && !rflag && !sflag) || + (cflag && isComb) || + (rflag && isRegion) || + (sflag && isSolid)) { + bu_vls_printf(vls, "%s ", list_of_names[i]->d_namep); + } + } +} + + +/** + * W D B _ G E T S P A C E * - * @par Usage: - * procname cmd ?args? + * This routine walks through the directory entry list and mallocs + * enough space for pointers to hold: * - * @return result of wdb command. + * a) all of the entries if called with an argument of 0, or + * b) the number of entries specified by the argument if > 0. */ -static int -wdb_cmd(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[]) +struct directory ** +wdb_getspace(struct db_i *dbip, + size_t num_entries) { - struct bu_cmdtab *ctp = NULL; - struct rt_wdb *wdbp = (struct rt_wdb *)clientData; - struct ged ged; - int ret; + struct directory **dir_basep; - /* look for the new libged commands too, but don't call bu_cmd() - * or wdb_newcmds_tcl() as there's no way to distinguish between - * TCL_ERROR from a found command and an unfound command. + if (num_entries == 0) + num_entries = db_directory_size(dbip); + + /* Allocate and cast num_entries worth of pointers */ + dir_basep = (struct directory **) bu_calloc((num_entries+1), sizeof(struct directory *), + "wdb_getspace *dir[]"); + return dir_basep; +} + + +/* + * W D B _ D O _ L I S T + */ +void +wdb_do_list(struct db_i *dbip, + Tcl_Interp *interp, + struct bu_vls *outstrp, + struct directory *dp, + int verbose) +{ + int id; + struct rt_db_internal intern; + + RT_CK_DBI(dbip); + + if (dp->d_major_type == DB5_MAJORTYPE_ATTRIBUTE_ONLY) { + /* this is the _GLOBAL object */ + struct bu_attribute_value_set avs; + struct bu_attribute_value_pair *avp; + + bu_vls_strcat(outstrp, dp->d_namep); + bu_vls_strcat(outstrp, ": global attributes object\n"); + bu_avs_init_empty(&avs); + if (db5_get_attributes(dbip, &avs, dp)) { + Tcl_AppendResult(interp, "Cannot get attributes for ", dp->d_namep, + "\n", (char *)NULL); + return; + } + for (BU_AVS_FOR (avp, &avs)) { + if (BU_STR_EQUAL(avp->name, "units")) { + double conv; + const char *str; + + conv = atof(avp->value); + bu_vls_strcat(outstrp, "\tunits: "); + if ((str=bu_units_string(conv)) == NULL) { + bu_vls_strcat(outstrp, "Unrecognized units\n"); + } else { + bu_vls_strcat(outstrp, str); + bu_vls_putc(outstrp, '\n'); + } + } else { + bu_vls_putc(outstrp, '\t'); + bu_vls_strcat(outstrp, avp->name); + bu_vls_strcat(outstrp, ": "); + bu_vls_strcat(outstrp, avp->value); + bu_vls_putc(outstrp, '\n'); + } + } + } else { + + if ((id = rt_db_get_internal(&intern, dp, dbip, + (fastf_t *)NULL, &rt_uniresource)) < 0) { + Tcl_AppendResult(interp, "rt_db_get_internal(", dp->d_namep, + ") failure\n", (char *)NULL); + return; + } + + if (rt_functab[id].ft_describe) { + int ret; + bu_vls_printf(outstrp, "%s: ", dp->d_namep); + ret = rt_functab[id].ft_describe(outstrp, &intern, verbose, dbip->dbi_base2local, &rt_uniresource, dbip); + if (ret < 0) + Tcl_AppendResult(interp, dp->d_namep, ": describe error\n", (char *)NULL); + } else { + Tcl_AppendResult(interp, dp->d_namep, ": list support unimplemented\n", (char *)NULL); + } + + rt_db_free_internal(&intern); + } +} + + +/* + * W D B _ C O M B A D D + * + * Add an instance of object 'objp' to combination 'name'. + * If the combination does not exist, it is created. + * region_flag is 1 (region), or 0 (group). + * + * Preserves the GIFT semantics. + */ +struct directory * +wdb_combadd(Tcl_Interp *interp, + struct db_i *dbip, + struct directory *objp, + char *combname, + int region_flag, /* true if adding region */ + int relation, /* = UNION, SUBTRACT, INTERSECT */ + int ident, /* "Region ID" */ + int air, /* Air code */ + struct rt_wdb *wdbp) +{ + struct directory *dp; + struct rt_db_internal intern; + struct rt_comb_internal *comb; + union tree *tp; + struct rt_tree_array *tree_list; + size_t node_count; + size_t actual_count; + + /* + * Check to see if we have to create a new combination */ - GED_INIT(&ged, wdbp); - for (ctp = wdb_newcmds; ctp->ct_name != (char *)0; ctp++) { - if (BU_STR_EQUAL(ctp->ct_name, argv[1])) { - ret = (*ctp->ct_func)(&ged, argc-1, argv+1); - Tcl_SetResult(interp, bu_vls_addr(ged.ged_result_str), TCL_VOLATILE); + if ((dp = db_lookup(dbip, combname, LOOKUP_QUIET)) == RT_DIR_NULL) { + int flags; - /* release any allocated memory */ - ged_free(&ged); + if (region_flag) + flags = RT_DIR_REGION | RT_DIR_COMB; + else + flags = RT_DIR_COMB; - if (ret == GED_OK) - return TCL_OK; - return TCL_ERROR; + RT_DB_INTERNAL_INIT(&intern); + intern.idb_major_type = DB5_MAJORTYPE_BRLCAD; + intern.idb_type = ID_COMBINATION; + intern.idb_meth = &rt_functab[ID_COMBINATION]; + + /* Update the in-core directory */ + dp = db_diradd(dbip, combname, RT_DIR_PHONY_ADDR, 0, flags, (genptr_t)&intern.idb_type); + if (dp == RT_DIR_NULL) { + Tcl_AppendResult(interp, "An error has occured while adding '", + combname, "' to the database.\n", (char *)NULL); + return RT_DIR_NULL; } + + BU_GETSTRUCT(comb, rt_comb_internal); + intern.idb_ptr = (genptr_t)comb; + RT_COMB_INTERNAL_INIT(comb); + + if (region_flag) { + struct bu_vls tmp_vls; + + comb->region_flag = 1; + comb->region_id = ident; + comb->aircode = air; + comb->los = wdbp->wdb_los_default; + comb->GIFTmater = wdbp->wdb_mat_default; + bu_vls_init(&tmp_vls); + bu_vls_printf(&tmp_vls, + "Creating region id=%d, air=%d, GIFTmaterial=%d, los=%d\n", + ident, air, + wdbp->wdb_mat_default, + wdbp->wdb_los_default); + Tcl_AppendResult(interp, bu_vls_addr(&tmp_vls), (char *)NULL); + bu_vls_free(&tmp_vls); + } else { + comb->region_flag = 0; + } + RT_GET_TREE(tp, &rt_uniresource); + tp->tr_l.tl_op = OP_DB_LEAF; + tp->tr_l.tl_name = bu_strdup(objp->d_namep); + tp->tr_l.tl_mat = (matp_t)NULL; + comb->tree = tp; + + if (rt_db_put_internal(dp, dbip, &intern, &rt_uniresource) < 0) { + Tcl_AppendResult(interp, "Failed to write ", dp->d_namep, (char *)NULL); + return RT_DIR_NULL; + } + return dp; + } else if (!(dp->d_flags & RT_DIR_COMB)) { + Tcl_AppendResult(interp, combname, " exists, but is not a combination\n", (char *)NULL); + return RT_DIR_NULL; } - /* release any allocated memory */ - ged_free(&ged); + /* combination exists, add a new member */ + if (rt_db_get_internal(&intern, dp, dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { + Tcl_AppendResult(interp, "read error, aborting\n", (char *)NULL); + return RT_DIR_NULL; + } - /* not a new command -- look for the command in the old command table */ - return bu_cmd(clientData, interp, argc, (const char **)argv, wdb_cmds, 1); + comb = (struct rt_comb_internal *)intern.idb_ptr; + RT_CK_COMB(comb); + + if (region_flag && !comb->region_flag) { + Tcl_AppendResult(interp, combname, ": not a region\n", (char *)NULL); + return RT_DIR_NULL; + } + + if (comb->tree && db_ck_v4gift_tree(comb->tree) < 0) { + db_non_union_push(comb->tree, &rt_uniresource); + if (db_ck_v4gift_tree(comb->tree) < 0) { + Tcl_AppendResult(interp, "Cannot flatten tree for editing\n", (char *)NULL); + rt_db_free_internal(&intern); + return RT_DIR_NULL; + } + } + + /* make space for an extra leaf */ + node_count = db_tree_nleaves(comb->tree) + 1; + tree_list = (struct rt_tree_array *)bu_calloc(node_count, sizeof(struct rt_tree_array), "tree list"); + + /* flatten tree */ + if (comb->tree) { + actual_count = 1 + (struct rt_tree_array *)db_flatten_tree(tree_list, comb->tree, OP_UNION, 1, &rt_uniresource) - tree_list; + BU_ASSERT_SIZE_T(actual_count, ==, node_count); + comb->tree = TREE_NULL; + } + + /* insert new member at end */ + switch (relation) { + case '+': + tree_list[node_count - 1].tl_op = OP_INTERSECT; + break; + case '-': + tree_list[node_count - 1].tl_op = OP_SUBTRACT; + break; + default: + Tcl_AppendResult(interp, "unrecognized relation (assume UNION)\n", + (char *)NULL); + case 'u': + tree_list[node_count - 1].tl_op = OP_UNION; + break; + } + + /* make new leaf node, and insert at end of list */ + RT_GET_TREE(tp, &rt_uniresource); + tree_list[node_count-1].tl_tree = tp; + tp->tr_l.tl_op = OP_DB_LEAF; + tp->tr_l.tl_name = bu_strdup(objp->d_namep); + tp->tr_l.tl_mat = (matp_t)NULL; + + /* rebuild the tree */ + comb->tree = (union tree *)db_mkgift_tree(tree_list, node_count, &rt_uniresource); + + /* and finally, write it out */ + if (rt_db_put_internal(dp, dbip, &intern, &rt_uniresource) < 0) { + Tcl_AppendResult(interp, "Failed to write ", dp->d_namep, (char *)NULL); + return RT_DIR_NULL; + } + + bu_free((char *)tree_list, "combadd: tree_list"); + + return dp; } -/** - * @brief - * Called by Tcl when the object is destroyed. +void wdb_identitize(struct directory *dp, struct db_i *dbip, Tcl_Interp *interp); + +static void +wdb_do_identitize(struct db_i *dbip, + struct rt_comb_internal *UNUSED(comb), + union tree *comb_leaf, + genptr_t user_ptr1, + genptr_t UNUSED(user_ptr2), + genptr_t UNUSED(user_ptr3)) +{ + struct directory *dp; + Tcl_Interp *interp = (Tcl_Interp *)user_ptr1; + + RT_CK_DBI(dbip); + RT_CK_TREE(comb_leaf); + + if (!comb_leaf->tr_l.tl_mat) { + comb_leaf->tr_l.tl_mat = (matp_t)bu_malloc(sizeof(mat_t), "tl_mat"); + } + MAT_IDN(comb_leaf->tr_l.tl_mat); + if ((dp = db_lookup(dbip, comb_leaf->tr_l.tl_name, LOOKUP_NOISY)) == RT_DIR_NULL) + return; + + wdb_identitize(dp, dbip, interp); +} + + +/* + * W D B _ I D E N T I T I Z E () + * + * Traverses an objects paths, setting all member matrices == identity + * */ void -wdb_deleteProc(ClientData clientData) +wdb_identitize(struct directory *dp, + struct db_i *dbip, + Tcl_Interp *interp) { - struct rt_wdb *wdbp = (struct rt_wdb *)clientData; + struct rt_db_internal intern; + struct rt_comb_internal *comb; - /* free observers */ - bu_observer_free(&wdbp->wdb_observers); + if (dp->d_flags & RT_DIR_SOLID) + return; + if (rt_db_get_internal(&intern, dp, dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { + Tcl_AppendResult(interp, "Database read error, aborting\n", (char *)NULL); + return; + } + comb = (struct rt_comb_internal *)intern.idb_ptr; + if (comb->tree) { + db_tree_funcleaf(dbip, comb, comb->tree, wdb_do_identitize, + (genptr_t)interp, (genptr_t)NULL, (genptr_t)NULL); + if (rt_db_put_internal(dp, dbip, &intern, &rt_uniresource) < 0) { + Tcl_AppendResult(interp, "Cannot write modified combination (", dp->d_namep, + ") to database\n", (char *)NULL); + return; + } + } +} - /* notify drawable geometry objects of the impending close */ - dgo_impending_wdb_close(wdbp, wdbp->wdb_interp); - /* close up shop */ - wdb_close(wdbp); +/* + * W D B _ D I R _ G E T S P A C E + * + * This routine walks through the directory entry list and mallocs enough + * space for pointers to hold: + * a) all of the entries if called with an argument of 0, or + * b) the number of entries specified by the argument if > 0. + */ +static struct directory ** +wdb_dir_getspace(struct db_i *dbip, + int num_entries) +{ + struct directory *dp; + int i; + struct directory **dir_basep; + + if (num_entries < 0) { + bu_log("dir_getspace: was passed %d, used 0\n", + num_entries); + num_entries = 0; + } + if (num_entries == 0) { + /* Set num_entries to the number of entries */ + for (i = 0; i < RT_DBNHASH; i++) + for (dp = dbip->dbi_Head[i]; dp != RT_DIR_NULL; dp = dp->d_forw) + num_entries++; + } + + /* Allocate and cast num_entries worth of pointers */ + dir_basep = (struct directory **) bu_malloc((num_entries+1) * sizeof(struct directory *), + "dir_getspace *dir[]"); + return dir_basep; } -/** - * @brief - * Create a command named "oname" in "interp" using "wdbp" as its state. +/* + * W D B _ D I R _ S U M M A R Y * + * Summarize the contents of the directory by categories + * (solid, comb, region). If flag is != 0, it is interpreted + * as a request to print all the names in that category (eg, RT_DIR_SOLID). */ +static void +wdb_dir_summary(struct db_i *dbip, + Tcl_Interp *interp, + int flag) +{ + struct directory *dp; + int i; + static int sol, comb, reg; + struct directory **dirp; + struct directory **dirp0 = (struct directory **)NULL; + struct bu_vls vls; + + bu_vls_init(&vls); + + sol = comb = reg = 0; + for (i = 0; i < RT_DBNHASH; i++) { + for (dp = dbip->dbi_Head[i]; dp != RT_DIR_NULL; dp = dp->d_forw) { + if (dp->d_flags & RT_DIR_SOLID) + sol++; + if (dp->d_flags & RT_DIR_COMB) { + if (dp->d_flags & RT_DIR_REGION) + reg++; + else + comb++; + } + } + } + + bu_vls_printf(&vls, "Summary:\n"); + bu_vls_printf(&vls, " %5d primitives\n", sol); + bu_vls_printf(&vls, " %5d region; %d non-region combinations\n", reg, comb); + bu_vls_printf(&vls, " %5d total objects\n\n", sol+reg+comb); + + if (flag == 0) { + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + return; + } + + /* Print all names matching the flags parameter */ + /* THIS MIGHT WANT TO BE SEPARATED OUT BY CATEGORY */ + + dirp = wdb_dir_getspace(dbip, 0); + dirp0 = dirp; + /* + * Walk the directory list adding pointers (to the directory entries + * of interest) to the array + */ + for (i = 0; i < RT_DBNHASH; i++) + for (dp = dbip->dbi_Head[i]; dp != RT_DIR_NULL; dp = dp->d_forw) + if (dp->d_flags & flag) + *dirp++ = dp; + + wdb_vls_col_pr4v(&vls, dirp0, (int)(dirp - dirp0), 0); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + bu_free((genptr_t)dirp0, "dir_getspace"); +} + + +/* + * P A T H L I S T _ L E A F _ F U N C + */ +static union tree * +wdb_pathlist_leaf_func(struct db_tree_state *UNUSED(tsp), + const struct db_full_path *pathp, + struct rt_db_internal *ip, + genptr_t client_data) +{ + Tcl_Interp *interp = (Tcl_Interp *)client_data; + char *str; + + RT_CK_FULL_PATH(pathp); + RT_CK_DB_INTERNAL(ip); + + if (pathListNoLeaf) { + struct db_full_path pp; + db_full_path_init(&pp); + db_dup_full_path(&pp, pathp); + --pp.fp_len; + str = db_path_to_string(&pp); + Tcl_AppendElement(interp, str); + db_free_full_path(&pp); + } else { + str = db_path_to_string(pathp); + Tcl_AppendElement(interp, str); + } + + bu_free((genptr_t)str, "path string"); + return TREE_NULL; +} + + +/* + * W D B _ B O T _ D E C I M A T E _ C M D + */ + int -wdb_create_cmd(Tcl_Interp *interp, - struct rt_wdb *wdbp, /* pointer to object */ - const char *oname) /* object name */ +wdb_bot_decimate_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - if (wdbp == RT_WDB_NULL) { - Tcl_AppendResult(interp, "wdb_init_cmd ", oname, " failed", NULL); + int c; + struct rt_db_internal intern; + struct rt_bot_internal *bot; + struct directory *dp; + fastf_t max_chord_error=-1.0; + fastf_t max_normal_error=-1.0; + fastf_t min_edge_length=-1.0; + + if (argc < 5 || argc > 9) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "helplib_alias wdb_bot_decimate %s", argv[0]); + Tcl_Eval(interp, bu_vls_addr(&vls)); + bu_vls_free(&vls); return TCL_ERROR; } - /* Instantiate the newprocname, with clientData of wdbp */ - /* Beware, returns a "token", not TCL_OK. */ - (void)Tcl_CreateCommand(interp, oname, (Tcl_CmdProc *)wdb_cmd, - (ClientData)wdbp, wdb_deleteProc); + /* process args */ + bu_optind = 1; + bu_opterr = 0; + while ((c=bu_getopt(argc, argv, "c:n:e:")) != -1) { + switch (c) { + case 'c': + max_chord_error = atof(bu_optarg); + if (max_chord_error < 0.0) { + Tcl_AppendResult(interp, + "Maximum chord error cannot be less than zero", + (char *)NULL); + return TCL_ERROR; + } + break; + case 'n': + max_normal_error = atof(bu_optarg); + if (max_normal_error < 0.0) { + Tcl_AppendResult(interp, + "Maximum normal error cannot be less than zero", + (char *)NULL); + return TCL_ERROR; + } + break; + case 'e': + min_edge_length = atof(bu_optarg); + if (min_edge_length < 0.0) { + Tcl_AppendResult(interp, + "minumum edge length cannot be less than zero", + (char *)NULL); + return TCL_ERROR; + } + break; + default: + { + struct bu_vls vls; - /* Return new function name as result */ - Tcl_AppendResult(interp, oname, (char *)NULL); + bu_vls_init(&vls); + bu_vls_printf(&vls, "helplib_alias wdb_bot_decimate %s", + argv[0]); + Tcl_Eval(interp, bu_vls_addr(&vls)); + bu_vls_free(&vls); + return TCL_ERROR; + } + } + } + argc -= bu_optind; + argv += bu_optind; + + /* make sure new solid does not already exist */ + if ((dp=db_lookup(wdbp->dbip, argv[0], LOOKUP_QUIET)) != RT_DIR_NULL) { + Tcl_AppendResult(interp, argv[0], " already exists!!\n", (char *)NULL); + return TCL_ERROR; + } + + /* make sure current solid does exist */ + if ((dp=db_lookup(wdbp->dbip, argv[1], LOOKUP_QUIET)) == RT_DIR_NULL) { + Tcl_AppendResult(interp, argv[1], " Does not exist\n", (char *)NULL); + return TCL_ERROR; + } + + /* import the current solid */ + RT_DB_INTERNAL_INIT(&intern); + if (rt_db_get_internal(&intern, dp, wdbp->dbip, NULL, wdbp->wdb_resp) < 0) { + Tcl_AppendResult(interp, "Failed to get internal form of ", argv[1], + "\n", (char *)NULL); + return TCL_ERROR; + } + + /* make sure this is a BOT solid */ + if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD || + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_BOT) { + Tcl_AppendResult(interp, argv[1], " is not a BOT solid\n", (char *)NULL); + rt_db_free_internal(&intern); + return TCL_ERROR; + } + + bot = (struct rt_bot_internal *)intern.idb_ptr; + + RT_BOT_CK_MAGIC(bot); + + /* convert maximum error and edge length to mm */ + max_chord_error = max_chord_error * wdbp->dbip->dbi_local2base; + min_edge_length = min_edge_length * wdbp->dbip->dbi_local2base; + + /* do the decimation */ + if (rt_bot_decimate(bot, max_chord_error, max_normal_error, min_edge_length) < 0) { + Tcl_AppendResult(interp, "Decimation Error\n", (char *)NULL); + rt_db_free_internal(&intern); + return TCL_ERROR; + } + + /* save the result to the database */ + if (wdb_put_internal(wdbp, argv[0], &intern, 1.0) < 0) { + Tcl_AppendResult(interp, "Failed to write decimated BOT back to database\n", (char *)NULL); + return TCL_ERROR; + } + return TCL_OK; } -/** - * @brief - * Create an command/object named "oname" in "interp" using "wdbp" as - * its state. It is presumed that the wdbp has already been opened. +/* + * Usage: + * procname */ +static int +wdb_bot_decimate_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) +{ + struct rt_wdb *wdbp = (struct rt_wdb *)clientData; + + return wdb_bot_decimate_cmd(wdbp, interp, argc-1, argv+1); +} + + int -wdb_init_obj(Tcl_Interp *interp, - struct rt_wdb *wdbp, /* pointer to object */ - const char *oname) /* object name */ +wdb_move_arb_edge_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) { - if (wdbp == RT_WDB_NULL) { - Tcl_AppendResult(interp, "wdb_open ", oname, " failed (wdb_init_obj)", NULL); + struct rt_db_internal intern; + struct rt_arb_internal *arb; + fastf_t planes[7][4]; /* ARBs defining plane equations */ + int arb_type; + int edge; + int bad_edge_id = 0; + point_t pt; + struct bu_vls error_msg; + + if (argc != 4) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "helplib_alias wdb_move_arb_edge %s", argv[0]); + Tcl_Eval(interp, bu_vls_addr(&vls)); + bu_vls_free(&vls); + return TCL_ERROR; } - /* initialize rt_wdb */ - bu_vls_init(&wdbp->wdb_name); - bu_vls_strcpy(&wdbp->wdb_name, oname); + if (wdbp->dbip == 0) { + Tcl_AppendResult(interp, + "db does not support lookup operations", + (char *)NULL); + return TCL_ERROR; + } - BU_LIST_INIT(&wdbp->wdb_observers.l); - wdbp->wdb_interp = interp; + if (rt_tcl_import_from_path(interp, &intern, argv[1], wdbp) == TCL_ERROR) + return TCL_ERROR; - /* append to list of rt_wdb's */ - BU_LIST_APPEND(&rt_g.rtg_headwdb.l, &wdbp->l); + if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD || + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_ARB8) { + Tcl_AppendResult(interp, "Object not an ARB", (char *)NULL); + rt_db_free_internal(&intern); + return TCL_ERROR; + } + + if (sscanf(argv[2], "%d", &edge) != 1) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad edge - %s", argv[2]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + edge -= 1; + + if (sscanf(argv[3], "%lf %lf %lf", &pt[X], &pt[Y], &pt[Z]) != 3) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad point - %s", argv[3]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + arb = (struct rt_arb_internal *)intern.idb_ptr; + RT_ARB_CK_MAGIC(arb); + + arb_type = rt_arb_std_type(&intern, &wdbp->wdb_tol); + + /* check the arb type */ + switch (arb_type) { + case ARB4: + if (edge < 0 || 4 < edge) + bad_edge_id = 1; + break; + case ARB5: + if (edge < 0 || 8 < edge) + bad_edge_id = 1; + break; + case ARB6: + if (edge < 0 || 9 < edge) + bad_edge_id = 1; + break; + case ARB7: + if (edge < 0 || 11 < edge) + bad_edge_id = 1; + break; + case ARB8: + if (edge < 0 || 11 < edge) + bad_edge_id = 1; + break; + default: + Tcl_AppendResult(interp, "unrecognized arb type", (char *)NULL); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + /* check the edge id */ + if (bad_edge_id) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad edge - %s", argv[2]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + bu_vls_init(&error_msg); + if (rt_arb_calc_planes(&error_msg, arb, arb_type, planes, &wdbp->wdb_tol)) { + Tcl_AppendResult(interp, bu_vls_addr(&error_msg), (char *)0); + rt_db_free_internal(&intern); + bu_vls_free(&error_msg); + + return TCL_ERROR; + } + + if (rt_arb_edit(&error_msg, arb, arb_type, edge, pt, planes, &wdbp->wdb_tol)) { + Tcl_AppendResult(interp, bu_vls_addr(&error_msg), (char *)0); + rt_db_free_internal(&intern); + bu_vls_free(&error_msg); + + return TCL_ERROR; + } + bu_vls_free(&error_msg); + + { + int i; + struct bu_vls vls; + + bu_vls_init(&vls); + + for (i = 0; i < 8; ++i) { + bu_vls_printf(&vls, "V%d {%g %g %g} ", + i + 1, + arb->pt[i][X], + arb->pt[i][Y], + arb->pt[i][Z]); + } + + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + } + + rt_db_free_internal(&intern); return TCL_OK; } /** - * W D B _ O P E N _ T C L - *@brief - * A TCL interface to wdb_fopen() and wdb_dbopen(). + * Move an arb's edge so that it intersects the given point. The new + * vertices are returned via interp result. * - * @par Implicit return - - * Creates a new TCL proc which responds to get/put/etc. arguments - * when invoked. clientData of that proc will be rt_wdb pointer - * for this instance of the database. - * Easily allows keeping track of multiple databases. - * - * @return wdb pointer, for more traditional C-style interfacing. - * - * @par Example - - * set wdbp [wdb_open .inmem inmem $dbip] - *@n .inmem get box.s - *@n .inmem close - * - *@n wdb_open db file "bob.g" - *@n db get white.r - *@n db close + * Usage: + * procname move_arb_face arb face pt */ static int -wdb_open_tcl(ClientData UNUSED(clientData), - Tcl_Interp *interp, - int argc, - const char *argv[]) +wdb_move_arb_edge_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { - struct rt_wdb *wdbp; - int ret; + struct rt_wdb *wdbp = (struct rt_wdb *)clientData; - if (argc == 1) { - /* get list of database objects */ - for (BU_LIST_FOR (wdbp, rt_wdb, &rt_g.rtg_headwdb.l)) - Tcl_AppendResult(interp, bu_vls_addr(&wdbp->wdb_name), " ", (char *)NULL); + return wdb_move_arb_edge_cmd(wdbp, interp, argc-1, argv+1); +} + +int +wdb_move_arb_face_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) +{ + struct rt_db_internal intern; + struct rt_arb_internal *arb; + fastf_t planes[7][4]; /* ARBs defining plane equations */ + int arb_type; + int face; + point_t pt; + struct bu_vls error_msg; + + if (argc != 4) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "helplib_alias wdb_move_arb_face %s", argv[0]); + Tcl_Eval(interp, bu_vls_addr(&vls)); + bu_vls_free(&vls); + + return TCL_ERROR; + } + + if (wdbp->dbip == 0) { + Tcl_AppendResult(interp, + "db does not support lookup operations", + (char *)NULL); + return TCL_ERROR; + } + + if (rt_tcl_import_from_path(interp, &intern, argv[1], wdbp) == TCL_ERROR) + return TCL_ERROR; + + if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD || + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_ARB8) { + Tcl_AppendResult(interp, "Object not an ARB", (char *)NULL); + rt_db_free_internal(&intern); + return TCL_OK; } - if (argc < 3 || 4 < argc) { - Tcl_AppendResult(interp, "\ -Usage: wdb_open\n\ - wdb_open newprocname file filename\n\ - wdb_open newprocname disk $dbip\n\ - wdb_open newprocname disk_append $dbip\n\ - wdb_open newprocname inmem $dbip\n\ - wdb_open newprocname inmem_append $dbip\n\ - wdb_open newprocname db filename\n\ - wdb_open newprocname filename\n", - NULL); + if (sscanf(argv[2], "%d", &face) != 1) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad face - %s", argv[2]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + return TCL_ERROR; } - /* Delete previous proc (if any) to release all that memory, first */ - (void)Tcl_DeleteCommand(interp, argv[1]); + /*XXX need better checking of the face */ + face -= 1; + if (face < 0 || 5 < face) { + struct bu_vls vls; - if (argc == 3 || BU_STR_EQUAL(argv[2], "db")) { - struct db_i *dbip; + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad face - %s", argv[2]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + if (sscanf(argv[3], "%lf %lf %lf", &pt[X], &pt[Y], &pt[Z]) != 3) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad point - %s", argv[3]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + arb = (struct rt_arb_internal *)intern.idb_ptr; + RT_ARB_CK_MAGIC(arb); + + arb_type = rt_arb_std_type(&intern, &wdbp->wdb_tol); + + bu_vls_init(&error_msg); + if (rt_arb_calc_planes(&error_msg, arb, arb_type, planes, &wdbp->wdb_tol)) { + Tcl_AppendResult(interp, bu_vls_addr(&error_msg), (char *)0); + rt_db_free_internal(&intern); + bu_vls_free(&error_msg); + + return TCL_ERROR; + } + bu_vls_free(&error_msg); + + /* change D of planar equation */ + planes[face][3] = VDOT(&planes[face][0], pt); + + /* calculate new points for the arb */ + (void)rt_arb_calc_points(arb, arb_type, planes, &wdbp->wdb_tol); + + { int i; + struct bu_vls vls; - if (argc == 3) - i = 2; - else - i = 3; + bu_vls_init(&vls); - if ((dbip = wdb_prep_dbip(interp, argv[i])) == DBI_NULL) - return TCL_ERROR; - RT_CK_DBI(dbip); + for (i = 0; i < 8; ++i) { + bu_vls_printf(&vls, "V%d {%g %g %g} ", + i + 1, + arb->pt[i][X], + arb->pt[i][Y], + arb->pt[i][Z]); + } - wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_DISK); - } else if (BU_STR_EQUAL(argv[2], "file")) { - wdbp = wdb_fopen(argv[3]); - } else { - struct db_i *dbip; + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + } - if (wdb_decode_dbip(interp, argv[3], &dbip) != TCL_OK) - return TCL_ERROR; + rt_db_free_internal(&intern); + return TCL_OK; +} - if (BU_STR_EQUAL(argv[2], "disk")) - wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_DISK); - else if (BU_STR_EQUAL(argv[2], "disk_append")) - wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_DISK_APPEND_ONLY); - else if (BU_STR_EQUAL(argv[2], "inmem")) - wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_INMEM); - else if (BU_STR_EQUAL(argv[2], "inmem_append")) - wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_INMEM_APPEND_ONLY); - else { - Tcl_AppendResult(interp, "wdb_open ", argv[2], - " target type not recognized", NULL); - return TCL_ERROR; + +/** + * Move an arb's face so that its plane intersects the given + * point. The new vertices are returned via interp result. + * + * Usage: + * procname move_arb_face arb face pt + */ +static int +wdb_move_arb_face_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) +{ + struct rt_wdb *wdbp = (struct rt_wdb *)clientData; + + return wdb_move_arb_face_cmd(wdbp, interp, argc-1, argv+1); +} + + +static short int rt_arb_vertices[5][24] = { + { 1, 2, 3, 0, 1, 2, 4, 0, 2, 3, 4, 0, 1, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* arb4 */ + { 1, 2, 3, 4, 1, 2, 5, 0, 2, 3, 5, 0, 3, 4, 5, 0, 1, 4, 5, 0, 0, 0, 0, 0 }, /* arb5 */ + { 1, 2, 3, 4, 2, 3, 6, 5, 1, 5, 6, 4, 1, 2, 5, 0, 3, 4, 6, 0, 0, 0, 0, 0 }, /* arb6 */ + { 1, 2, 3, 4, 5, 6, 7, 0, 1, 4, 5, 0, 2, 3, 7, 6, 1, 2, 6, 5, 4, 3, 7, 5 }, /* arb7 */ + { 1, 2, 3, 4, 5, 6, 7, 8, 1, 5, 8, 4, 2, 3, 7, 6, 1, 2, 6, 5, 4, 3, 7, 8 } /* arb8 */ +}; + + +int +wdb_rotate_arb_face_cmd(struct rt_wdb *wdbp, + Tcl_Interp *interp, + int argc, + char *argv[]) +{ + struct rt_db_internal intern; + struct rt_arb_internal *arb; + fastf_t planes[7][4]; /* ARBs defining plane equations */ + int arb_type; + int face; + int vi; + point_t pt; + int i; + int pnt5; /* special arb7 case */ + struct bu_vls error_msg; + + if (argc != 5) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "helplib_alias wdb_move_arb_face %s", argv[0]); + Tcl_Eval(interp, bu_vls_addr(&vls)); + bu_vls_free(&vls); + + return TCL_ERROR; + } + + if (wdbp->dbip == 0) { + Tcl_AppendResult(interp, + "db does not support lookup operations", + (char *)NULL); + return TCL_ERROR; + } + + if (rt_tcl_import_from_path(interp, &intern, argv[1], wdbp) == TCL_ERROR) + return TCL_ERROR; + + if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD || + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_ARB8) { + Tcl_AppendResult(interp, "Object not an ARB", (char *)NULL); + rt_db_free_internal(&intern); + + return TCL_OK; + } + + if (sscanf(argv[2], "%d", &face) != 1) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad face - %s", argv[2]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + /*XXX need better checking of the face */ + face -= 1; + if (face < 0 || 5 < face) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad face - %s", argv[2]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + if (sscanf(argv[3], "%d", &vi) != 1) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad vertex index - %s", argv[2]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + + /*XXX need better checking of the vertex index */ + vi -= 1; + if (vi < 0 || 7 < vi) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad vertex - %s", argv[2]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + if (sscanf(argv[4], "%lf %lf %lf", &pt[X], &pt[Y], &pt[Z]) != 3) { + struct bu_vls vls; + + bu_vls_init(&vls); + bu_vls_printf(&vls, "bad point - %s", argv[3]); + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); + rt_db_free_internal(&intern); + + return TCL_ERROR; + } + + arb = (struct rt_arb_internal *)intern.idb_ptr; + RT_ARB_CK_MAGIC(arb); + + arb_type = rt_arb_std_type(&intern, &wdbp->wdb_tol); + + bu_vls_init(&error_msg); + if (rt_arb_calc_planes(&error_msg, arb, arb_type, planes, &wdbp->wdb_tol)) { + Tcl_AppendResult(interp, bu_vls_addr(&error_msg), (char *)0); + rt_db_free_internal(&intern); + bu_vls_free(&error_msg); + + return TCL_ERROR; + } + bu_vls_free(&error_msg); + + /* check if point 5 is in the face */ + pnt5 = 0; + for (i=0; i<4; i++) { + if (rt_arb_vertices[arb_type-4][face*4+i]==5) + pnt5=1; + } + + /* special case for arb7 */ + if (arb_type == ARB7 && pnt5) + vi = 4; + + { + /* Apply incremental changes */ + vect_t tempvec; + vect_t work; + fastf_t *plane; + mat_t rmat; + + bn_mat_angles(rmat, pt[X], pt[Y], pt[Z]); + + plane = &planes[face][0]; + VMOVE(work, plane); + MAT4X3VEC(plane, rmat, work); + + /* point notation of fixed vertex */ + VMOVE(tempvec, arb->pt[vi]); + + /* set D of planar equation to anchor at fixed vertex */ + planes[face][3]=VDOT(plane, tempvec); + } + + /* calculate new points for the arb */ + (void)rt_arb_calc_points(arb, arb_type, planes, &wdbp->wdb_tol); + + { + struct bu_vls vls; + + bu_vls_init(&vls); + + for (i = 0; i < 8; ++i) { + bu_vls_printf(&vls, "V%d {%g %g %g} ", + i + 1, + arb->pt[i][X], + arb->pt[i][Y], + arb->pt[i][Z]); } + + Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); + bu_vls_free(&vls); } - if ((ret = wdb_init_obj(interp, wdbp, argv[1])) != TCL_OK) - return ret; + rt_db_free_internal(&intern); + return TCL_OK; +} - return wdb_create_cmd(interp, wdbp, argv[1]); + +/** + * Rotate an arb's face to the given point. The new vertices are + * returned via interp result. + * + * Usage: + * procname rotate_arb_face arb face pt + */ +static int +wdb_rotate_arb_face_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) +{ + struct rt_wdb *wdbp = (struct rt_wdb *)clientData; + + return wdb_rotate_arb_face_cmd(wdbp, interp, argc-1, argv+1); } @@ -2743,6 +3761,31 @@ } +/* + * K I L L T R E E + */ +static void +wdb_killtree_callback(struct db_i *dbip, + struct directory *dp, + genptr_t ptr) { + struct wdb_killtree_data *ktdp = (struct wdb_killtree_data *)ptr; + Tcl_Interp *interp = ktdp->interp; + + if (dbip == DBI_NULL) + return; + + Tcl_AppendResult(interp, "KILL ", (dp->d_flags & RT_DIR_COMB) ? "COMB" : "Solid", + ": ", dp->d_namep, "\n", (char *)NULL); + + /* notify drawable geometry objects associated with this database object */ + dgo_eraseobjall_callback(dbip, interp, dp, ktdp->notify); + + if (db_delete(dbip, dp) || db_dirdelete(dbip, dp)) { + Tcl_AppendResult(interp, "an error occurred while deleting ", dp->d_namep, "\n", (char *)NULL); + } +} + + /** * @brief * Kill object[s] and remove all references to the object[s]. @@ -2829,31 +3872,6 @@ } -/* - * K I L L T R E E - */ -static void -wdb_killtree_callback(struct db_i *dbip, - struct directory *dp, - genptr_t ptr) { - struct wdb_killtree_data *ktdp = (struct wdb_killtree_data *)ptr; - Tcl_Interp *interp = ktdp->interp; - - if (dbip == DBI_NULL) - return; - - Tcl_AppendResult(interp, "KILL ", (dp->d_flags & RT_DIR_COMB) ? "COMB" : "Solid", - ": ", dp->d_namep, "\n", (char *)NULL); - - /* notify drawable geometry objects associated with this database object */ - dgo_eraseobjall_callback(dbip, interp, dp, ktdp->notify); - - if (db_delete(dbip, dp) || db_dirdelete(dbip, dp)) { - Tcl_AppendResult(interp, "an error occurred while deleting ", dp->d_namep, "\n", (char *)NULL); - } -} - - /** * guts to the 'cp' command, used to shallow-copy an object * @@ -8968,1531 +9986,417 @@ } -/****************** utility routines ********************/ +static struct bu_cmdtab wdb_newcmds[] = { + {"arced", ged_arced}, + {"cc", ged_cc}, + {"color", ged_color}, + {"comb_color", ged_comb_color}, + {"edcomb", ged_edcomb}, + {"edit", ged_edit}, + {"edmater", ged_edmater}, + {"item", ged_item}, + {"log", ged_log}, + {"make", ged_make}, + {"make_name", ged_make_name}, + {"mater", ged_mater}, + {"mirror", ged_mirror}, + {"nirt", ged_nirt}, + {"ocenter", ged_ocenter}, + {"orotate", ged_orotate}, + {"oscale", ged_oscale}, + {"otranslate", ged_otranslate}, + {"rmater", ged_rmater}, + {"shader", ged_shader}, + {"wmater", ged_wmater}, + {(char *)NULL, (int (*)())0} +}; -/** - * W D B _ C M P D I R N A M E - * - * Given two pointers to pointers to directory entries, do a string compare - * on the respective names and return that value. - */ -int -wdb_cmpdirname(const genptr_t a, const genptr_t b) -{ - struct directory **dp1, **dp2; - dp1 = (struct directory **)a; - dp2 = (struct directory **)b; - return bu_strcmp((*dp1)->d_namep, (*dp2)->d_namep); -} - - -#define RT_TERMINAL_WIDTH 80 -#define RT_COLUMNS ((RT_TERMINAL_WIDTH + V4_MAXNAME - 1) / V4_MAXNAME) - -/** - * V L S _ C O L _ I T E M - */ -void -wdb_vls_col_item(struct bu_vls *str, - char *cp, - int *ccp, /* column count pointer */ - int *clp) /* column length pointer */ +static int +wdb_newcmds_tcl(ClientData clientData, + Tcl_Interp *interp, + int argc, + char *argv[]) { - /* Output newline if last column printed. */ - if (*ccp >= RT_COLUMNS || (*clp+V4_MAXNAME-1) >= RT_TERMINAL_WIDTH) { - /* line now full */ - bu_vls_putc(str, '\n'); - *ccp = 0; - } else if (*cc... [truncated message content] |