Revision: 41346
http://brlcad.svn.sourceforge.net/brlcad/?rev=41346&view=rev
Author: brlcad
Date: 2010-11-12 22:41:06 +0000 (Fri, 12 Nov 2010)
Log Message:
-----------
more mass MAXARGS/RT_MAXARGS elimination.. only a few more to go to convert to
dynamic memory.
Modified Paths:
--------------
brlcad/trunk/src/libged/dg_obj.c
brlcad/trunk/src/libged/nirt.c
brlcad/trunk/src/libged/rt.c
brlcad/trunk/src/libged/wdb_nirt.c
brlcad/trunk/src/mged/mged.h
brlcad/trunk/src/util/pl-dm.c
Modified: brlcad/trunk/src/libged/dg_obj.c
===================================================================
--- brlcad/trunk/src/libged/dg_obj.c 2010-11-12 22:39:50 UTC (rev 41345)
+++ brlcad/trunk/src/libged/dg_obj.c 2010-11-12 22:41:06 UTC (rev 41346)
@@ -162,7 +162,6 @@
static void dgo_rt_write(struct dg_obj *dgop, struct view_obj *vop, FILE *fp,
fastf_t *eye_model);
static void dgo_rt_set_eye_model(struct dg_obj *dgop, struct view_obj *vop,
fastf_t *eye_model);
void dgo_cvt_vlblock_to_solids(struct dg_obj *dgop, Tcl_Interp *interp, struct
bn_vlblock *vbp, char *name, int copy);
-int dgo_build_tops(Tcl_Interp *interp, struct solid *hsp, char **start, char
**end);
void dgo_pr_wait_status(Tcl_Interp *interp, int status);
static void dgo_print_schain(struct dg_obj *dgop, Tcl_Interp *interp, int lvl);
@@ -205,21 +204,7 @@
{(char *)0, (int (*)())0}
};
-/**
- * count the total number of solids, phony or otherwise
- */
-HIDDEN size_t
-dgo_count_tops(const struct solid *headsp)
-{
- struct solid *sp;
- size_t count = 0;
- FOR_ALL_SOLIDS(sp, &headsp->l) {
- count++;
- }
- return count;
-}
-
/*
* D G O _ C M D
*
@@ -272,7 +257,68 @@
}
+/**
+ * count the total number of solids, phony or otherwise
+ */
+size_t
+dgo_count_tops(const struct solid *headsp)
+{
+ struct solid *sp;
+ size_t count = 0;
+ FOR_ALL_SOLIDS(sp, &headsp->l) {
+ count++;
+ }
+ return count;
+}
+
+
/*
+ * D G O _ B U I L D _ T O P S
+ *
+ * Build a command line vector of the tops of all objects in view.
+ */
+int
+dgo_build_tops(Tcl_Interp *interp,
+ struct solid *hsp,
+ char **start,
+ char **end)
+{
+ char **vp = start;
+ struct solid *sp;
+
+ /*
+ * Find all unique top-level entries.
+ * Mark ones already done with s_flag == UP
+ */
+ FOR_ALL_SOLIDS(sp, &hsp->l)
+ sp->s_flag = DOWN;
+ FOR_ALL_SOLIDS(sp, &hsp->l) {
+ struct solid *forw;
+ struct directory *dp = FIRST_SOLID(sp);
+
+ if (sp->s_flag == UP)
+ continue;
+ if (dp->d_addr == RT_DIR_PHONY_ADDR)
+ continue; /* Ignore overlays, predictor, etc */
+ if (vp < end)
+ *vp++ = dp->d_namep;
+ else {
+ Tcl_AppendResult(interp, "INTERNAL ERROR: ran out of command vector
space at ",
+ dp->d_namep, "\n", (char *)NULL);
+ break;
+ }
+ sp->s_flag = UP;
+ for (BU_LIST_PFOR (forw, sp, solid, &hsp->l)) {
+ if (FIRST_SOLID(forw) == dp)
+ forw->s_flag = UP;
+ }
+ }
+ *vp = (char *) 0;
+ return vp-start;
+}
+
+
+/*
* Usage:
* procname vdraw cmd arg(s)
*/
@@ -3831,52 +3877,6 @@
/*
- * D G O _ B U I L D _ T O P S
- *
- * Build a command line vector of the tops of all objects in view.
- */
-int
-dgo_build_tops(Tcl_Interp *interp,
- struct solid *hsp,
- char **start,
- char **end)
-{
- char **vp = start;
- struct solid *sp;
-
- /*
- * Find all unique top-level entries.
- * Mark ones already done with s_flag == UP
- */
- FOR_ALL_SOLIDS(sp, &hsp->l)
- sp->s_flag = DOWN;
- FOR_ALL_SOLIDS(sp, &hsp->l) {
- struct solid *forw;
- struct directory *dp = FIRST_SOLID(sp);
-
- if (sp->s_flag == UP)
- continue;
- if (dp->d_addr == RT_DIR_PHONY_ADDR)
- continue; /* Ignore overlays, predictor, etc */
- if (vp < end)
- *vp++ = dp->d_namep;
- else {
- Tcl_AppendResult(interp, "INTERNAL ERROR: ran out of command vector
space at ",
- dp->d_namep, "\n", (char *)NULL);
- break;
- }
- sp->s_flag = UP;
- for (BU_LIST_PFOR (forw, sp, solid, &hsp->l)) {
- if (FIRST_SOLID(forw) == dp)
- forw->s_flag = UP;
- }
- }
- *vp = (char *) 0;
- return vp-start;
-}
-
-
-/*
* D G O _ R T _ W R I T E
*
* Write out the information that RT's -M option needs to show current view.
Modified: brlcad/trunk/src/libged/nirt.c
===================================================================
--- brlcad/trunk/src/libged/nirt.c 2010-11-12 22:39:50 UTC (rev 41345)
+++ brlcad/trunk/src/libged/nirt.c 2010-11-12 22:41:06 UTC (rev 41346)
@@ -111,6 +111,7 @@
const char *bin = NULL;
char nirt[256] = {0};
+ int args;
/* for bu_fgets space trimming */
struct bu_vls v;
@@ -123,6 +124,9 @@
/* initialize result */
bu_vls_trunc(&gedp->ged_result_str, 0);
+ args = argc + 20 + 2 + ged_count_tops(gedp);
+ gedp->ged_gdp->gd_rt_cmd = (char **)bu_calloc(args, sizeof(char *), "alloc
gd_rt_cmd");
+
bin = bu_brlcad_root("bin", 1);
if (bin) {
#ifdef _WIN32
@@ -264,7 +268,7 @@
/* Note - ged_build_tops sets the last vp to (char *)0 */
gedp->ged_gdp->gd_rt_cmd_len += ged_build_tops(gedp,
vp,
-
&gedp->ged_gdp->gd_rt_cmd[RT_MAXARGS]);
+
&gedp->ged_gdp->gd_rt_cmd[args]);
if (gedp->ged_gdp->gd_qray_cmd_echo) {
/* Print out the command we are about to run */
@@ -398,6 +402,7 @@
snprintf(name, 1024, "\"%s\" ", gedp->ged_gdp->gd_rt_cmd[i]);
if (rem - strlen(name) < 1) {
bu_log("Ran out of buffer space!");
+ bu_free(gedp->ged_gdp->gd_rt_cmd, "free gd_rt_cmd");
return TCL_ERROR;
}
bu_strlcat(line1, name, sizeof(line1));
@@ -547,6 +552,8 @@
gdlp = next_gdlp;
}
+ bu_free(gedp->ged_gdp->gd_rt_cmd, "free gd_rt_cmd");
+
return GED_OK;
}
Modified: brlcad/trunk/src/libged/rt.c
===================================================================
--- brlcad/trunk/src/libged/rt.c 2010-11-12 22:39:50 UTC (rev 41345)
+++ brlcad/trunk/src/libged/rt.c 2010-11-12 22:41:06 UTC (rev 41346)
@@ -58,6 +58,7 @@
int i;
int units_supplied = 0;
char pstring[32];
+ int args;
const char *bin;
char rt[256] = {0};
@@ -70,6 +71,9 @@
/* initialize result */
bu_vls_trunc(&gedp->ged_result_str, 0);
+ args = argc + 7 + 2 + ged_count_tops(gedp);
+ gedp->ged_gdp->gd_rt_cmd = (char **)bu_calloc(args, sizeof(char *), "alloc
gd_rt_cmd");
+
bin = bu_brlcad_root("bin", 1);
if (bin) {
#ifdef _WIN32
@@ -127,7 +131,7 @@
gedp->ged_gdp->gd_rt_cmd_len = vp - gedp->ged_gdp->gd_rt_cmd;
gedp->ged_gdp->gd_rt_cmd_len += ged_build_tops(gedp,
vp,
-
&gedp->ged_gdp->gd_rt_cmd[MAXARGS]);
+
&gedp->ged_gdp->gd_rt_cmd[args]);
} else {
while (i < argc)
*vp++ = (char *)argv[i++];
@@ -139,6 +143,7 @@
bu_vls_printf(&gedp->ged_result_str, "\n");
}
(void)_ged_run_rt(gedp);
+ bu_free(gedp->ged_gdp->gd_rt_cmd, "free gd_rt_cmd");
return GED_OK;
}
Modified: brlcad/trunk/src/libged/wdb_nirt.c
===================================================================
--- brlcad/trunk/src/libged/wdb_nirt.c 2010-11-12 22:39:50 UTC (rev 41345)
+++ brlcad/trunk/src/libged/wdb_nirt.c 2010-11-12 22:41:06 UTC (rev 41346)
@@ -61,6 +61,7 @@
extern void dgo_qray_data_to_vlist(struct dg_obj *dgop, struct bn_vlblock
*vbp, struct dg_qray_dataList *headp, fastf_t *dir, int do_overlaps);
/* defined in dg_obj.c */
+extern int dgo_count_tops(struct solid *headsp);
extern int dgo_build_tops(Tcl_Interp *interp, struct solid *hsp, char **start,
char **end);
extern void dgo_cvt_vlblock_to_solids(struct dg_obj *dgop, Tcl_Interp *interp,
struct bn_vlblock *vbp, char *name, int copy);
extern void dgo_pr_wait_status(Tcl_Interp *interp, int status);
@@ -112,7 +113,11 @@
struct bn_vlblock *vbp;
struct dg_qray_dataList *ndlp;
struct dg_qray_dataList HeadQRayData;
+ int args;
+ args = argc + 20 + 2 + dgo_count_tops((struct solid
*)&dgop->dgo_headSolid);
+ dgop->dgo_rt_cmd = (char **)bu_calloc(args, sizeof(char *), "alloc
dgo_rt_cmd");
+
vp = &dgop->dgo_rt_cmd[0];
*vp++ = "nirt";
@@ -243,7 +248,7 @@
dgop->dgo_rt_cmd_len += dgo_build_tops(interp,
(struct solid *)&dgop->dgo_headSolid,
vp,
- &dgop->dgo_rt_cmd[RT_MAXARGS]);
+ &dgop->dgo_rt_cmd[args]);
if (dgop->dgo_qray_cmd_echo) {
/* Print out the command we are about to run */
@@ -379,6 +384,7 @@
snprintf(name, 1024, "\"%s\" ", dgop->dgo_rt_cmd[i]);
if (rem - strlen(name) < 1) {
bu_log("Ran out of buffer space!");
+ bu_free(dgop->dgo_rt_cmd, "free dgo_rt_cmd");
return TCL_ERROR;
}
bu_strlcat(line1, name, sizeof(line1));
@@ -504,6 +510,8 @@
FOR_ALL_SOLIDS(sp, &dgop->dgo_headSolid)
sp->s_wflag = DOWN;
+ bu_free(dgop->dgo_rt_cmd, "free dgo_rt_cmd");
+
return TCL_OK;
}
Modified: brlcad/trunk/src/mged/mged.h
===================================================================
--- brlcad/trunk/src/mged/mged.h 2010-11-12 22:39:50 UTC (rev 41345)
+++ brlcad/trunk/src/mged/mged.h 2010-11-12 22:41:06 UTC (rev 41346)
@@ -445,8 +445,6 @@
/* defined in rtif.c */
extern struct run_rt head_run_rt;
-#define MAXARGS 9000 /* Maximum number of args per line */
-
#define MGED_PROMPT "\rmged> "
/* Command return codes */
Modified: brlcad/trunk/src/util/pl-dm.c
===================================================================
--- brlcad/trunk/src/util/pl-dm.c 2010-11-12 22:39:50 UTC (rev 41345)
+++ brlcad/trunk/src/util/pl-dm.c 2010-11-12 22:41:06 UTC (rev 41346)
@@ -52,7 +52,6 @@
};
-#define MAXARGS 9000
#define MOUSE_MODE_IDLE 0
#define MOUSE_MODE_ROTATE 1
#define MOUSE_MODE_TRANSLATE 3
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Centralized Desktop Delivery: Dell and VMware Reference Architecture
Simplifying enterprise desktop deployment and management using
Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
client virtualization framework. Read more!
http://p.sf.net/sfu/dell-eql-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits