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

Reply via email to