Revision: 76097
          http://sourceforge.net/p/brlcad/code/76097
Author:   starseeker
Date:     2020-06-10 00:34:25 +0000 (Wed, 10 Jun 2020)
Log Message:
-----------
Set up help reporting for the commands

Modified Paths:
--------------
    brlcad/branches/bioh/src/burst2/burst.cpp

Modified: brlcad/branches/bioh/src/burst2/burst.cpp
===================================================================
--- brlcad/branches/bioh/src/burst2/burst.cpp   2020-06-09 23:39:47 UTC (rev 
76096)
+++ brlcad/branches/bioh/src/burst2/burst.cpp   2020-06-10 00:34:25 UTC (rev 
76097)
@@ -49,6 +49,25 @@
 
 #define DEFAULT_BURST_PROMPT "burst> "
 
+
+#define PURPOSEFLAG "--print-purpose"
+#define HELPFLAG "--print-help"
+static int
+_burst_cmd_msgs(void *UNUSED(bs), int argc, const char **argv, const char *us, 
const char *ps)
+{
+    //struct burst_state *s = (struct burst_state *)bs;
+    if (argc == 2 && BU_STR_EQUAL(argv[1], HELPFLAG)) {
+        printf("Usage: %s\n%s\n", us, ps);
+        return 1;
+    }
+    if (argc == 2 && BU_STR_EQUAL(argv[1], PURPOSEFLAG)) {
+        printf("%s\n", ps);
+        return 1;
+    }
+    return 0;
+}
+
+
 void
 burst_state_init(struct burst_state *s)
 {
@@ -171,6 +190,12 @@
 extern "C" int
 _burst_cmd_attack_dir(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "attack-direction azim_angle elev_angle";
+    const char *purpose_string = "specify azimuth and elevation of attack 
relative to target";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
@@ -202,6 +227,12 @@
 extern "C" int
 _burst_cmd_critical_comp_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "critical-comp-file file";
+    const char *purpose_string = "input critical component idents from file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -234,6 +265,12 @@
 extern "C" int
 _burst_cmd_deflect_spall_cone (void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "deflect-spall-cone flag";
+    const char *purpose_string = "deflect axis of spall cone half way towards 
exit normal";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -259,6 +296,12 @@
 extern "C" int
 _burst_cmd_dither_cells(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "dither-cells flag";
+    const char *purpose_string = "if yes, randomly offset shotline within grid 
cell";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -282,8 +325,14 @@
 }
 
 extern "C" int
-_burst_cmd_enclose_target(void *bs, int UNUSED(argc), const char 
**UNUSED(argv))
+_burst_cmd_enclose_target(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "enclose-target";
+    const char *purpose_string = "generate rectangular grid of shotlines for 
full target envelope";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
     s->firemode = FM_GRID;
     return BRLCAD_OK;
@@ -292,6 +341,12 @@
 extern "C" int
 _burst_cmd_enclose_portion(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "enclose-portion left right bottom top";
+    const char *purpose_string = "generate partial envelope by specifying grid 
boundaries";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -338,6 +393,12 @@
 extern "C" int
 _burst_cmd_error_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "error-file file";
+    const char *purpose_string = "divert all diagnostics to file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -371,8 +432,14 @@
 }
 
 extern "C" int
-_burst_cmd_execute(void *bs, int UNUSED(argc), const char **UNUSED(argv))
+_burst_cmd_execute(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "execute";
+    const char *purpose_string = "initiate a run (no output produced without 
this command)";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s) return BRLCAD_ERROR;
@@ -391,6 +458,12 @@
 extern "C" int
 _burst_cmd_grid_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "grid-file file";
+    const char *purpose_string = "save shotline locations (Y' Z') in file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -425,6 +498,12 @@
 extern "C" int
 _burst_cmd_ground_plane(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "ground-plane flag [Z +X -X +Y -Y]";
+    const char *purpose_string = "if yes, burst on ground";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -494,12 +573,37 @@
 {
     struct burst_state *s = (struct burst_state *)bs;
 
-    if (!s || !argc || !argv) return BRLCAD_ERROR;
+    if (argc == 1 || BU_STR_EQUAL(argv[1], "help")) {
+       printf("Available commands:\n");
+       const struct bu_cmdtab *ctp = NULL;
+       int ret;
+       const char *helpflag[2];
+       helpflag[1] = PURPOSEFLAG;
+       size_t maxcmdlen = 0;
+       for (ctp = s->cmds; ctp->ct_name != (char *)NULL; ctp++) {
+           maxcmdlen = (maxcmdlen > strlen(ctp->ct_name)) ? maxcmdlen : 
strlen(ctp->ct_name);
+       }
+       for (ctp = s->cmds; ctp->ct_name != (char *)NULL; ctp++) {
+           printf("  %s%*s", ctp->ct_name, (int)(maxcmdlen - 
strlen(ctp->ct_name)) + 2, " ");
+           if (!BU_STR_EQUAL(ctp->ct_name, "help")) {
+               helpflag[0] = ctp->ct_name;
+               bu_cmd(s->cmds, 2, helpflag, 0, (void *)s, &ret);
+           } else {
+               printf("print help\n");
+           }
+       }
+    } else {
+       int ret;
+       const char **helpargv = (const char **)bu_calloc(argc+1, sizeof(char 
*), "help argv");
+       helpargv[0] = argv[1];
+       helpargv[1] = HELPFLAG;
+       for (int i = 2; i < argc; i++) {
+           helpargv[i+1] = argv[i];
+       }
+       bu_cmd(s->cmds, argc, helpargv, 0, (void *)s, &ret);
+       bu_free(helpargv, "help argv");
+    }
 
-    const struct bu_cmdtab *ctp = NULL;
-    for (ctp = s->cmds; ctp->ct_name != (char *)NULL; ctp++) {
-       printf("%s\n", ctp->ct_name);
-    }
     return BRLCAD_OK;
 }
 
@@ -506,6 +610,12 @@
 extern "C" int
 _burst_cmd_burst_air_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "burst-air-file file";
+    const char *purpose_string = "input burst air idents from file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -537,6 +647,12 @@
 extern "C" int
 _burst_cmd_histogram_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "histogram-file file";
+    const char *purpose_string = "write hit frequency histogram to file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -572,6 +688,12 @@
 extern "C" int
 _burst_cmd_image_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "image-file file";
+    const char *purpose_string = "generate frame buffer image on a specified 
file or device";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -588,6 +710,12 @@
 extern "C" int
 _burst_cmd_input_2d_shot(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "input-2d-shot Y' Z'";
+    const char *purpose_string = "input single shotline location as grid 
offsets";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -621,6 +749,12 @@
 extern "C" int
 _burst_cmd_input_3d_shot(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "input-3d-shot X Y Z";
+    const char *purpose_string = "input single shotline location in target 
coordinates";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -661,6 +795,12 @@
 extern "C" int
 _burst_cmd_max_barriers(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "max-barriers count";
+    const char *purpose_string = "specify the maximum number of components to 
report along spall ray";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -683,6 +823,12 @@
 extern "C" int
 _burst_cmd_max_spall_rays(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "max-spall-rays count";
+    const char *purpose_string = "specify the desired number of spall rays 
generated per burst point";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -705,6 +851,12 @@
 extern "C" int
 _burst_cmd_plot_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "plot-file file";
+    const char *purpose_string = "generate plot data in file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -715,7 +867,7 @@
     }
 
     bu_vls_sprintf(&s->plotfile, "%s", argv[1]);
-    
+
     return BRLCAD_OK;
 }
 
@@ -722,6 +874,12 @@
 extern "C" int
 _burst_cmd_quit(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "quit";
+    const char *purpose_string = "quit the appliation";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -734,6 +892,12 @@
 extern "C" int
 _burst_cmd_read_2d_shot_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "read-2d-shot-file file";
+    const char *purpose_string = "read shot locations from file as grid 
offsets (see input-2d-shot)";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -770,6 +934,12 @@
 extern "C" int
 _burst_cmd_read_3d_shot_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "read-3d-shot-file file";
+    const char *purpose_string = "read shot locations from file in target 
coordinates (see input-3d-shot)";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -799,7 +969,7 @@
     }
 
     s->firemode = FM_SHOT | FM_FILE | FM_3DIM;
-    
+
     return BRLCAD_OK;
 }
 
@@ -806,6 +976,12 @@
 extern "C" int
 _burst_cmd_burst_armor_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "burst-armor-file file";
+    const char *purpose_string = "input burst armor idents from file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -837,6 +1013,12 @@
 extern "C" int
 _burst_cmd_read_burst_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "read-burst-file file";
+    const char *purpose_string = "read burst point locations from file (see 
burst-coordinates)";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -873,6 +1055,12 @@
 extern "C" int
 _burst_cmd_read_input_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "read-input-file file";
+    const char *purpose_string = "read key word commands from file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -893,6 +1081,12 @@
 extern "C" int
 _burst_cmd_report_overlaps(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "report-overlaps file";
+    const char *purpose_string = "if yes, log overlap diagnostics";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -918,6 +1112,12 @@
 extern "C" int
 _burst_cmd_shotline_burst(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "shotline-burst flag";
+    const char *purpose_string = "if yes, generate burst points along 
shotlines";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -963,6 +1163,12 @@
 extern "C" int
 _burst_cmd_shotline_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "shotline-file file";
+    const char *purpose_string = "output shot line data to file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -999,6 +1205,12 @@
 extern "C" int
 _burst_cmd_target_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "target-file file";
+    const char *purpose_string = "read BRL-CAD database from file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -1015,6 +1227,12 @@
 extern "C" int
 _burst_cmd_target_objects(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "target-objects object0 [object1 object2 ...]";
+    const char *purpose_string = "list objects from BRL-CAD database to 
interrogate";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -1031,6 +1249,12 @@
 extern "C" int
 _burst_cmd_units(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "units name";
+    const char *purpose_string = "linear units (inches, feet, millimeters, 
centimeters,meters)";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -1053,6 +1277,12 @@
 extern "C" int
 _burst_cmd_write_input_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "write-input-file file";
+    const char *purpose_string = "save script of commands in file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -1076,6 +1306,12 @@
 extern "C" int
 _burst_cmd_burst_coordinates(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "burst-coordinates X Y Z";
+    const char *purpose_string = "input single burst point location in target 
coordinates";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -1115,6 +1351,12 @@
 extern "C" int
 _burst_cmd_burst_distance(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "burst-distance distance";
+    const char *purpose_string = "offset burst point along shotline";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -1139,6 +1381,12 @@
 extern "C" int
 _burst_cmd_burst_file(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "burst-file file";
+    const char *purpose_string = "output burst point library to file";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
@@ -1174,6 +1422,12 @@
 extern "C" int
 _burst_cmd_cell_size(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "cell-size distance";
+    const char *purpose_string = "specify shotline separation (equidistant 
horizontal and vertical)";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -1198,7 +1452,13 @@
 extern "C" int
 _burst_cmd_color_file(void *bs, int argc, const char **argv)
 {
-    int ret = BRLCAD_OK;
+    const char *usage_string = "color-file file";
+    const char *purpose_string = "input ident to color mapping from file (for 
graphics)";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
+   int ret = BRLCAD_OK;
     struct burst_state *s = (struct burst_state *)bs;
 
     if (!s || !argc || !argv) return BRLCAD_ERROR;
@@ -1217,7 +1477,7 @@
     // TODO readColors
 
     printf("Reading ident-to-color mappings... done.\n");
-    
+
     fclose(colorfp);
 
     return ret;
@@ -1226,6 +1486,12 @@
 extern "C" int
 _burst_cmd_cone_half_angle(void *bs, int argc, const char **argv)
 {
+    const char *usage_string = "cone-half-angle angle";
+    const char *purpose_string = "specify limiting angle for spall ray 
generation";
+    if (_burst_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) {
+        return BRLCAD_OK;
+    }
+
     int ret = BRLCAD_OK;
     struct bu_vls msg = BU_VLS_INIT_ZERO;
     struct burst_state *s = (struct burst_state *)bs;
@@ -1266,6 +1532,8 @@
     { "max-spall-rays"    ,  _burst_cmd_max_spall_rays },
     { "plot-file"         ,  _burst_cmd_plot_file },
     { "quit"              ,  _burst_cmd_quit },
+    { "q"                 ,  _burst_cmd_quit },
+    { "exit"              ,  _burst_cmd_quit },
     { "read-2d-shot-file" ,  _burst_cmd_read_2d_shot_file },
     { "read-3d-shot-file" ,  _burst_cmd_read_3d_shot_file },
     { "burst-armor-file"  ,  _burst_cmd_burst_armor_file },

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to