Revision: 76935
          http://sourceforge.net/p/brlcad/code/76935
Author:   starseeker
Date:     2020-08-25 02:29:42 +0000 (Tue, 25 Aug 2020)
Log Message:
-----------
Switch MGED's display set from using bu_list to using a bu_ptbl.

Modified Paths:
--------------
    brlcad/trunk/src/mged/adc.c
    brlcad/trunk/src/mged/attach.c
    brlcad/trunk/src/mged/axes.c
    brlcad/trunk/src/mged/buttons.c
    brlcad/trunk/src/mged/chgview.c
    brlcad/trunk/src/mged/cmd.c
    brlcad/trunk/src/mged/color_scheme.c
    brlcad/trunk/src/mged/doevent.c
    brlcad/trunk/src/mged/dozoom.c
    brlcad/trunk/src/mged/edsol.c
    brlcad/trunk/src/mged/fbserv.c
    brlcad/trunk/src/mged/grid.c
    brlcad/trunk/src/mged/menu.c
    brlcad/trunk/src/mged/mged.c
    brlcad/trunk/src/mged/mged_dm.h
    brlcad/trunk/src/mged/rect.c
    brlcad/trunk/src/mged/set.c
    brlcad/trunk/src/mged/share.c

Modified: brlcad/trunk/src/mged/adc.c
===================================================================
--- brlcad/trunk/src/mged/adc.c 2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/adc.c 2020-08-25 02:29:42 UTC (rev 76935)
@@ -76,11 +76,12 @@
 void
 adc_set_dirty_flag(void)
 {
-    struct mged_dm *m_dmp;
 
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
i);
        if (m_dmp->dm_adc_state == adc_state)
            m_dmp->dm_dirty = 1;
+    }
 }
 
 
@@ -87,17 +88,17 @@
 void
 adc_set_scroll(void)
 {
-    struct mged_dm *m_dmp;
     struct mged_dm *save_m_dmp;
-
     save_m_dmp = mged_curr_dm;
 
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
i);
        if (m_dmp->dm_adc_state == adc_state) {
            set_curr_dm(m_dmp);
            set_scroll();
            DMP_dirty = 1;
        }
+    }
 
     set_curr_dm(save_m_dmp);
 }

Modified: brlcad/trunk/src/mged/attach.c
===================================================================
--- brlcad/trunk/src/mged/attach.c      2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/attach.c      2020-08-25 02:29:42 UTC (rev 76935)
@@ -53,8 +53,9 @@
 #include "./mged_dm.h"
 
 /* Geometry display instances used by MGED */
-struct mged_dm active_dm_set;  /* set of active display managers */
+struct bu_ptbl active_dm_set = BU_PTBL_INIT_ZERO;  /* set of active display 
managers */
 struct mged_dm *mged_curr_dm = NULL;
+struct mged_dm *mged_dm_init_state = NULL;
 
 
 extern struct _color_scheme default_color_scheme;
@@ -67,7 +68,7 @@
 void set_curr_dm(struct mged_dm *nc)
 {
     mged_curr_dm = nc;
-    if (nc != DM_LIST_NULL) {
+    if (nc != MGED_DM_NULL) {
        GEDP->ged_gvp = nc->dm_view_state->vs_gvp;
        GEDP->ged_gvp->gv_grid = *nc->dm_grid_state; /* struct copy */
     } else {
@@ -78,7 +79,7 @@
 }
 
 int
-mged_dm_init(struct mged_dm *o_dm_list,
+mged_dm_init(struct mged_dm *o_dm,
        const char *dm_type,
        int argc,
        const char *argv[])
@@ -85,7 +86,7 @@
 {
     struct bu_vls vls = BU_VLS_INIT_ZERO;
 
-    dm_var_init(o_dm_list);
+    dm_var_init(o_dm);
 
     /* register application provided routines */
     cmd_hook = dm_commands;
@@ -153,34 +154,36 @@
 int
 release(char *name, int need_close)
 {
-    struct mged_dm *save_dm_list = DM_LIST_NULL;
+    struct mged_dm *save_dm_list = MGED_DM_NULL;
     struct bu_vls *cpathname = dm_get_pathname(DMP);
+    struct bu_vls *pathname = NULL;
 
     if (name != NULL) {
-       struct mged_dm *p;
+       struct mged_dm *p = MGED_DM_NULL;
 
        if (BU_STR_EQUAL("nu", name))
            return TCL_OK;  /* Ignore */
 
-       FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
-           struct bu_vls *pathname = dm_get_pathname(p->dm_dmp);
-           if (pathname && bu_vls_strlen(pathname) && !BU_STR_EQUAL(name, 
bu_vls_cstr(pathname)))
+       for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) {
+           struct mged_dm *m_dmp = (struct mged_dm 
*)BU_PTBL_GET(&active_dm_set, i);
+           pathname = dm_get_pathname(m_dmp->dm_dmp);
+           if (!BU_STR_EQUAL(name, bu_vls_cstr(pathname)))
                continue;
 
            /* found it */
            if (p != mged_curr_dm) {
                save_dm_list = mged_curr_dm;
+               p = m_dmp;
                set_curr_dm(p);
            }
            break;
        }
 
-       if (p == &active_dm_set) {
-           Tcl_AppendResult(INTERP, "release: ", name,
-                            " not found\n", (char *)NULL);
+       if (p == MGED_DM_NULL) {
+           Tcl_AppendResult(INTERP, "release: ", name, " not found\n", (char 
*)NULL);
            return TCL_ERROR;
        }
-    } else if (cpathname && bu_vls_strlen(cpathname) && BU_STR_EQUAL("nu", 
bu_vls_cstr(cpathname)))
+    } else if (BU_STR_EQUAL("nu", bu_vls_cstr(cpathname)))
        return TCL_OK;  /* Ignore */
 
     if (fbp) {
@@ -199,10 +202,9 @@
      * This saves the state of the resources to the "nu" display
      * manager, which is beneficial only if closing the last display
      * manager. So when another display manager is opened, it looks
-     * like the last one the user had open. This depends on "nu"
-     * always being last in the list.
+     * like the last one the user had open.
      */
-    usurp_all_resources(BU_LIST_LAST(mged_dm, &active_dm_set.l), mged_curr_dm);
+    usurp_all_resources(mged_dm_init_state, mged_curr_dm);
 
     /* If this display is being referenced by a command window, then
      * remove the reference.
@@ -214,15 +216,19 @@
        dm_close(DMP);
 
     RT_FREE_VLIST(&mged_curr_dm->dm_p_vlist);
-    BU_LIST_DEQUEUE(&mged_curr_dm->l);
+    bu_ptbl_rm(&active_dm_set, (long *)mged_curr_dm);
     mged_slider_free_vls(mged_curr_dm);
     bu_free((void *)mged_curr_dm, "release: mged_curr_dm");
 
-    if (save_dm_list != DM_LIST_NULL)
+    if (save_dm_list != MGED_DM_NULL)
        set_curr_dm(save_dm_list);
-    else
-       set_curr_dm((struct mged_dm *)active_dm_set.l.forw);
-
+    else {
+       if (BU_PTBL_LEN(&active_dm_set) > 0) {
+           set_curr_dm((struct mged_dm *)BU_PTBL_GET(&active_dm_set, 0));
+       } else {
+           set_curr_dm(MGED_DM_NULL);
+       }
+    }
     return TCL_OK;
 }
 
@@ -384,13 +390,13 @@
 {
     int opt_argc;
     char **opt_argv;
-    struct mged_dm *o_dm_list;
+    struct mged_dm *o_dm;
 
     if (!wp_name) {
        return TCL_ERROR;
     }
 
-    o_dm_list = mged_curr_dm;
+    o_dm = mged_curr_dm;
     BU_ALLOC(mged_curr_dm, struct mged_dm);
 
     /* initialize predictor stuff */
@@ -414,7 +420,7 @@
        if (dname && bu_vls_strlen(dname)) {
            if (gui_setup(bu_vls_cstr(dname)) == TCL_ERROR) {
                bu_free((void *)mged_curr_dm, "f_attach: dm_list");
-               set_curr_dm(o_dm_list);
+               set_curr_dm(o_dm);
                bu_vls_free(&tmp_vls);
                dm_put(tmp_dmp);
                return TCL_ERROR;
@@ -421,7 +427,7 @@
            }
        } else if (gui_setup((char *)NULL) == TCL_ERROR) {
            bu_free((void *)mged_curr_dm, "f_attach: dm_list");
-           set_curr_dm(o_dm_list);
+           set_curr_dm(o_dm);
            bu_vls_free(&tmp_vls);
            dm_put(tmp_dmp);
            return TCL_ERROR;
@@ -431,13 +437,13 @@
        dm_put(tmp_dmp);
     }
 
-    BU_LIST_APPEND(&active_dm_set.l, &mged_curr_dm->l);
+    bu_ptbl_ins(&active_dm_set, (long *)mged_curr_dm);
 
     if (!wp_name) {
        return TCL_ERROR;
     }
 
-    if (mged_dm_init(o_dm_list, wp_name, argc, argv) == TCL_ERROR) {
+    if (mged_dm_init(o_dm, wp_name, argc, argv) == TCL_ERROR) {
        goto Bad;
     }
 
@@ -614,27 +620,27 @@
 int
 is_dm_null(void)
 {
-    return mged_curr_dm == &active_dm_set;
+    return mged_curr_dm == mged_dm_init_state;
 }
 
 
 void
-dm_var_init(struct mged_dm *initial_dm_list)
+dm_var_init(struct mged_dm *target_dm)
 {
     BU_ALLOC(adc_state, struct _adc_state);
-    *adc_state = *initial_dm_list->dm_adc_state;               /* struct copy 
*/
+    *adc_state = *target_dm->dm_adc_state;             /* struct copy */
     adc_state->adc_rc = 1;
 
     BU_ALLOC(menu_state, struct _menu_state);
-    *menu_state = *initial_dm_list->dm_menu_state;             /* struct copy 
*/
+    *menu_state = *target_dm->dm_menu_state;           /* struct copy */
     menu_state->ms_rc = 1;
 
     BU_ALLOC(rubber_band, struct _rubber_band);
-    *rubber_band = *initial_dm_list->dm_rubber_band;           /* struct copy 
*/
+    *rubber_band = *target_dm->dm_rubber_band;         /* struct copy */
     rubber_band->rb_rc = 1;
 
     BU_ALLOC(mged_variables, struct _mged_variables);
-    *mged_variables = *initial_dm_list->dm_mged_variables;     /* struct copy 
*/
+    *mged_variables = *target_dm->dm_mged_variables;   /* struct copy */
     mged_variables->mv_rc = 1;
     mged_variables->mv_dlist = mged_default_dlist;
     mged_variables->mv_listen = 0;
@@ -644,16 +650,18 @@
     BU_ALLOC(color_scheme, struct _color_scheme);
 
     /* initialize using the nu display manager */
-    *color_scheme = *BU_LIST_LAST(mged_dm, &active_dm_set.l)->dm_color_scheme;
+    if (mged_dm_init_state && mged_dm_init_state->dm_color_scheme) {
+       *color_scheme = *mged_dm_init_state->dm_color_scheme;
+    }
 
     color_scheme->cs_rc = 1;
 
     BU_ALLOC(grid_state, struct bview_grid_state);
-    *grid_state = *initial_dm_list->dm_grid_state;             /* struct copy 
*/
+    *grid_state = *target_dm->dm_grid_state;           /* struct copy */
     grid_state->rc = 1;
 
     BU_ALLOC(axes_state, struct _axes_state);
-    *axes_state = *initial_dm_list->dm_axes_state;             /* struct copy 
*/
+    *axes_state = *target_dm->dm_axes_state;           /* struct copy */
     axes_state->ax_rc = 1;
 
     BU_ALLOC(dlist_state, struct _dlist_state);
@@ -660,12 +668,12 @@
     dlist_state->dl_rc = 1;
 
     BU_ALLOC(view_state, struct _view_state);
-    *view_state = *initial_dm_list->dm_view_state;                     /* 
struct copy */
+    *view_state = *target_dm->dm_view_state;                   /* struct copy 
*/
     BU_ALLOC(view_state->vs_gvp, struct bview);
     BU_GET(view_state->vs_gvp->callbacks, struct bu_ptbl);
     bu_ptbl_init(view_state->vs_gvp->callbacks, 8, "bview callbacks");
 
-    *view_state->vs_gvp = *initial_dm_list->dm_view_state->vs_gvp;     /* 
struct copy */
+    *view_state->vs_gvp = *target_dm->dm_view_state->vs_gvp;   /* struct copy 
*/
     view_state->vs_gvp->gv_clientData = (void *)view_state;
     view_state->vs_gvp->gv_adaptive_plot = 0;
     view_state->vs_gvp->gv_redraw_on_zoom = 0;
@@ -703,8 +711,6 @@
 int
 f_get_dm_list(ClientData UNUSED(clientData), Tcl_Interp *interpreter, int 
argc, const char *argv[])
 {
-    struct mged_dm *dlp;
-
     if (argc != 1 || !argv) {
        struct bu_vls vls = BU_VLS_INIT_ZERO;
 
@@ -715,7 +721,8 @@
        return TCL_ERROR;
     }
 
-    FOR_ALL_DISPLAYS(dlp, &active_dm_set.l) {
+    for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) {
+       struct mged_dm *dlp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, i);
        struct bu_vls *pn = dm_get_pathname(dlp->dm_dmp);
        if (pn && bu_vls_strlen(pn))
            Tcl_AppendElement(interpreter, bu_vls_cstr(pn));

Modified: brlcad/trunk/src/mged/axes.c
===================================================================
--- brlcad/trunk/src/mged/axes.c        2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/axes.c        2020-08-25 02:29:42 UTC (rev 76935)
@@ -85,11 +85,11 @@
                  const char *UNUSED(value),
                  void *UNUSED(data))
 {
-    struct mged_dm *m_dmp;
-
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
i);
        if (m_dmp->dm_axes_state == axes_state)
            m_dmp->dm_dirty = 1;
+    }
 }
 
 

Modified: brlcad/trunk/src/mged/buttons.c
===================================================================
--- brlcad/trunk/src/mged/buttons.c     2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/buttons.c     2020-08-25 02:29:42 UTC (rev 76935)
@@ -704,8 +704,6 @@
 int
 be_accept()
 {
-    struct mged_dm *m_dmp;
-
     if (STATE == ST_S_EDIT) {
        /* Accept a solid edit */
        edsol = 0;
@@ -740,9 +738,11 @@
        return TCL_OK;
     }
 
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
i);
        if (m_dmp->dm_mged_variables->mv_transform == 'e')
            m_dmp->dm_mged_variables->mv_transform = 'v';
+    }
 
     {
        struct bu_vls vls = BU_VLS_INIT_ZERO;
@@ -758,8 +758,6 @@
 int
 be_reject()
 {
-    struct mged_dm *m_dmp;
-
     update_views = 1;
 
     /* Reject edit */
@@ -804,9 +802,11 @@
     mged_color_soltab();
     (void)chg_state(STATE, ST_VIEW, "Edit Reject");
 
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
i);
        if (m_dmp->dm_mged_variables->mv_transform == 'e')
            m_dmp->dm_mged_variables->mv_transform = 'v';
+    }
 
     {
        struct bu_vls vls = BU_VLS_INIT_ZERO;
@@ -939,7 +939,6 @@
 int
 chg_state(int from, int to, char *str)
 {
-    struct mged_dm *p;
     struct mged_dm *save_dm_list;
     struct bu_vls vls = BU_VLS_INIT_ZERO;
 
@@ -953,7 +952,8 @@
     stateChange(from, to);
 
     save_dm_list = mged_curr_dm;
-    FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
+    for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, i);
        set_curr_dm(p);
 
        new_mats();

Modified: brlcad/trunk/src/mged/chgview.c
===================================================================
--- brlcad/trunk/src/mged/chgview.c     2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/chgview.c     2020-08-25 02:29:42 UTC (rev 76935)
@@ -246,7 +246,6 @@
 {
     struct display_list *gdlp;
     struct display_list *next_gdlp;
-    struct mged_dm *m_dmp;
     struct mged_dm *save_m_dmp;
     struct cmd_list *save_cmd_list;
     int ret;
@@ -444,7 +443,8 @@
 
     save_m_dmp = mged_curr_dm;
     save_cmd_list = curr_cmd_list;
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        int non_empty = 0; /* start out empty */
 
        set_curr_dm(m_dmp);
@@ -570,7 +570,6 @@
 int
 cmd_autoview(ClientData UNUSED(clientData), Tcl_Interp *interp, int argc, 
const char *argv[])
 {
-    struct mged_dm *m_dmp;
     struct mged_dm *save_m_dmp;
     struct cmd_list *save_cmd_list;
 
@@ -591,7 +590,8 @@
 
     save_m_dmp = mged_curr_dm;
     save_cmd_list = curr_cmd_list;
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        struct view_ring *vrp;
 
        set_curr_dm(m_dmp);
@@ -2815,7 +2815,6 @@
 f_svbase(ClientData UNUSED(clientData), Tcl_Interp *interp, int argc, const 
char *argv[])
 {
     int status;
-    struct mged_dm *m_dmp;
 
     if (argc < 1 || 1 < argc) {
        struct bu_vls vls = BU_VLS_INIT_ZERO;
@@ -2833,7 +2832,8 @@
 
     status = mged_svbase();
 
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        /* if sharing view while faceplate and original gui (i.e. button menu, 
sliders) are on */
        if (m_dmp->dm_view_state == view_state &&
            m_dmp->dm_mged_variables->mv_faceplate &&

Modified: brlcad/trunk/src/mged/cmd.c
===================================================================
--- brlcad/trunk/src/mged/cmd.c 2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/cmd.c 2020-08-25 02:29:42 UTC (rev 76935)
@@ -1298,7 +1298,7 @@
 {
     int uflag = 0;             /* untie flag */
     struct cmd_list *clp;
-    struct mged_dm *dlp;
+    struct mged_dm *dlp = MGED_DM_NULL;
     struct bu_vls vls = BU_VLS_INIT_ZERO;
 
     if (argc < 1 || 3 < argc) {
@@ -1393,13 +1393,16 @@
     else
        bu_vls_strcpy(&vls, argv[2]);
 
-    FOR_ALL_DISPLAYS(dlp, &active_dm_set.l) {
-       struct bu_vls *pn = dm_get_pathname(dlp->dm_dmp);
-       if (pn && !bu_vls_strcmp(&vls, pn))
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
+       struct bu_vls *pn = dm_get_pathname(m_dmp->dm_dmp);
+       if (pn && !bu_vls_strcmp(&vls, pn)) {
+           dlp = m_dmp;
            break;
+       }
     }
 
-    if (dlp == &active_dm_set) {
+    if (dlp == MGED_DM_NULL) {
        Tcl_AppendResult(interpreter, "f_tie: unrecognized path name - ",
                         bu_vls_addr(&vls), "\n", (char *)NULL);
        bu_vls_free(&vls);
@@ -1476,8 +1479,6 @@
 int
 f_winset(ClientData UNUSED(clientData), Tcl_Interp *interpreter, int argc, 
const char *argv[])
 {
-    struct mged_dm *p;
-
     if (argc < 1 || 2 < argc) {
        struct bu_vls vls = BU_VLS_INIT_ZERO;
 
@@ -1497,7 +1498,8 @@
     }
 
     /* change primary focus to window argv[1] */
-    FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        struct bu_vls *pn = dm_get_pathname(p->dm_dmp);
        if (pn && BU_STR_EQUAL(argv[1], bu_vls_cstr(pn))) {
            set_curr_dm(p);
@@ -1830,10 +1832,10 @@
     /* update and resize the views */
     struct mged_dm *save_m_dmp = mged_curr_dm;
     struct cmd_list *save_cmd_list = curr_cmd_list;
-    struct mged_dm *m_dmp;
     struct display_list *gdlp;
     struct display_list *next_gdlp;
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        int non_empty = 0; /* start out empty */
 
        set_curr_dm(m_dmp);

Modified: brlcad/trunk/src/mged/color_scheme.c
===================================================================
--- brlcad/trunk/src/mged/color_scheme.c        2020-08-25 01:51:25 UTC (rev 
76934)
+++ brlcad/trunk/src/mged/color_scheme.c        2020-08-25 02:29:42 UTC (rev 
76935)
@@ -243,11 +243,11 @@
                  const char *UNUSED(value),
                  void *UNUSED(data))
 {
-    struct mged_dm *m_dmp;
-
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        if (m_dmp->dm_color_scheme == color_scheme)
            m_dmp->dm_dirty = 1;
+    }
 }
 
 
@@ -286,7 +286,6 @@
          const char *UNUSED(value),
          void *UNUSED(data))
 {
-    struct mged_dm *m_dmp;
     struct mged_dm *save_curr_m_dmp = mged_curr_dm;
     struct bu_vls vls = BU_VLS_INIT_ZERO;
 
@@ -302,7 +301,8 @@
     // where we act on all dm instances.  set_curr_dm
     // should probably be replaced with get_next_dm
     struct bview *cbv = GEDP->ged_gvp;
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        if (m_dmp->dm_color_scheme == color_scheme) {
            m_dmp->dm_dirty = 1;
            set_curr_dm(m_dmp);

Modified: brlcad/trunk/src/mged/doevent.c
===================================================================
--- brlcad/trunk/src/mged/doevent.c     2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/doevent.c     2020-08-25 02:29:42 UTC (rev 76935)
@@ -125,10 +125,10 @@
        return TCL_OK;
 
     save_dm_list = mged_curr_dm;
-    GET_DM_LIST(mged_curr_dm, (unsigned long)eventPtr->xany.window);
+    GET_MGED_DM(mged_curr_dm, (unsigned long)eventPtr->xany.window);
 
     /* it's an event for a window that I'm not handling */
-    if (mged_curr_dm == DM_LIST_NULL) {
+    if (mged_curr_dm == MGED_DM_NULL) {
        set_curr_dm(save_dm_list);
        return TCL_OK;
     }

Modified: brlcad/trunk/src/mged/dozoom.c
===================================================================
--- brlcad/trunk/src/mged/dozoom.c      2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/dozoom.c      2020-08-25 02:29:42 UTC (rev 76935)
@@ -249,12 +249,12 @@
 void
 createDListSolid(struct solid *sp)
 {
-    struct mged_dm *dlp;
     struct mged_dm *save_dlp;
 
     save_dlp = mged_curr_dm;
 
-    FOR_ALL_DISPLAYS(dlp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *dlp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        if (dlp->dm_mapped &&
                dm_get_displaylist(dlp->dm_dmp) &&
                dlp->dm_mged_variables->mv_dlist) {
@@ -305,9 +305,8 @@
 void
 freeDListsAll(unsigned int dlist, int range)
 {
-    struct mged_dm *dlp;
-
-    FOR_ALL_DISPLAYS(dlp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *dlp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        if (dm_get_displaylist(dlp->dm_dmp) &&
            dlp->dm_mged_variables->mv_dlist) {
            (void)dm_make_current(DMP);

Modified: brlcad/trunk/src/mged/edsol.c
===================================================================
--- brlcad/trunk/src/mged/edsol.c       2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/edsol.c       2020-08-25 02:29:42 UTC (rev 76935)
@@ -750,7 +750,6 @@
        set e_axes_pos and curr_e_axes_pos */
 {
     int i;
-    struct mged_dm *m_dmp;
     const short earb8[12][18] = earb8_edit_array;
     const short earb7[12][18] = earb7_edit_array;
     const short earb6[10][18] = earb6_edit_array;
@@ -920,8 +919,10 @@
 
        MAT_IDN(acc_rot_sol);
 
-       FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+       for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+           struct mged_dm *m_dmp = (struct mged_dm 
*)BU_PTBL_GET(&active_dm_set, di);
            m_dmp->dm_mged_variables->mv_transform = 'e';
+       }
     }
 }
 

Modified: brlcad/trunk/src/mged/fbserv.c
===================================================================
--- brlcad/trunk/src/mged/fbserv.c      2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/fbserv.c      2020-08-25 02:29:42 UTC (rev 76935)
@@ -120,13 +120,16 @@
     int i;
     int fd = (int)((long)clientData & 0xFFFF); /* fd's will be small */
     int npp;                   /* number of processed packages */
-    struct mged_dm *dlp;
+    struct mged_dm *dlp = MGED_DM_NULL;
     struct mged_dm *scdlp;  /* save current dm_list pointer */
 
-    FOR_ALL_DISPLAYS(dlp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        for (i = MAX_CLIENTS-1; i >= 0; i--)
-           if (fd == dlp->dm_clients[i].c_fd)
+           if (fd == m_dmp->dm_clients[i].c_fd) {
+               dlp = m_dmp;
                goto found;
+           }
     }
 
     return;
@@ -388,9 +391,13 @@
     struct mged_dm *dlp;
     struct mged_dm *scdlp;  /* save current dm_list pointer */
 
-    FOR_ALL_DISPLAYS(dlp, &active_dm_set.l)
-       if (fd == dlp->dm_netfd)
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
+       if (fd == m_dmp->dm_netfd) {
+           dlp = m_dmp;
            goto found;
+       }
+    }
 
     return;
 

Modified: brlcad/trunk/src/mged/grid.c
===================================================================
--- brlcad/trunk/src/mged/grid.c        2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/grid.c        2020-08-25 02:29:42 UTC (rev 76935)
@@ -77,11 +77,12 @@
                    const char *UNUSED(value),
                    void *UNUSED(data))
 {
-    struct mged_dm *m_dmp;
 
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        if (m_dmp->dm_grid_state == grid_state)
            m_dmp->dm_dirty = 1;
+    }
 }
 
 
@@ -92,8 +93,6 @@
              const char *value,
              void *data)
 {
-    struct mged_dm *dlp;
-
     if (DBIP == DBI_NULL) {
        grid_state->draw = 0;
        return;
@@ -107,9 +106,11 @@
 
        grid_state->res_h = res;
        grid_state->res_v = res;
-       FOR_ALL_DISPLAYS(dlp, &active_dm_set.l)
+       for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+           struct mged_dm *dlp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
            if (dlp->dm_grid_state == grid_state)
                dlp->dm_grid_auto_size = 0;
+       }
     }
 }
 
@@ -121,14 +122,16 @@
             const char *value,
             void *data)
 {
-    struct mged_dm *dlp;
-
     grid_set_dirty_flag(sdp, name, base, value, data);
 
-    if (grid_auto_size)
-       FOR_ALL_DISPLAYS(dlp, &active_dm_set.l)
+    if (!grid_auto_size)
+       return;
+
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *dlp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
            if (dlp->dm_grid_state == grid_state)
                dlp->dm_grid_auto_size = 0;
+    }
 }
 
 
@@ -420,11 +423,11 @@
 void
 update_grids(fastf_t sf)
 {
-    struct mged_dm *dlp;
     struct bu_vls save_result = BU_VLS_INIT_ZERO;
     struct bu_vls cmd = BU_VLS_INIT_ZERO;
 
-    FOR_ALL_DISPLAYS(dlp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *dlp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        dlp->dm_grid_state->res_h *= sf;
        dlp->dm_grid_state->res_v *= sf;
        VSCALE(dlp->dm_grid_state->anchor, dlp->dm_grid_state->anchor, sf);

Modified: brlcad/trunk/src/mged/menu.c
===================================================================
--- brlcad/trunk/src/mged/menu.c        2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/menu.c        2020-08-25 02:29:42 UTC (rev 76935)
@@ -103,8 +103,6 @@
 void
 mmenu_set(int index, struct menu_item *value)
 {
-    struct mged_dm *dlp;
-
     Tcl_DString ds_menu;
     struct bu_vls menu_string = BU_VLS_INIT_ZERO;
 
@@ -119,7 +117,8 @@
     Tcl_DStringFree(&ds_menu);
     bu_vls_free(&menu_string);
 
-    FOR_ALL_DISPLAYS(dlp, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *dlp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        if (menu_state == dlp->dm_menu_state &&
            dlp->dm_mged_variables->mv_faceplate &&
            dlp->dm_mged_variables->mv_orig_gui)
@@ -131,13 +130,13 @@
 void
 mmenu_set_all(int index, struct menu_item *value)
 {
-    struct mged_dm *p;
     struct cmd_list *save_cmd_list;
     struct mged_dm *save_dm_list;
 
     save_cmd_list = curr_cmd_list;
     save_dm_list = mged_curr_dm;
-    FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        if (p->dm_tie)
            curr_cmd_list = p->dm_tie;
 

Modified: brlcad/trunk/src/mged/mged.c
===================================================================
--- brlcad/trunk/src/mged/mged.c        2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/mged.c        2020-08-25 02:29:42 UTC (rev 76935)
@@ -343,11 +343,11 @@
 void
 new_edit_mats(void)
 {
-    struct mged_dm *p;
     struct mged_dm *save_dm_list;
 
     save_dm_list = mged_curr_dm;
-    FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        if (!p->dm_owner)
            continue;
 
@@ -1261,11 +1261,10 @@
     bu_vls_strcpy(&head_cmd_list.cl_name, "mged");
     curr_cmd_list = &head_cmd_list;
 
-    memset((void *)&active_dm_set, 0, sizeof(struct mged_dm));
-    BU_LIST_INIT(&active_dm_set.l);
-
     BU_ALLOC(mged_curr_dm, struct mged_dm);
-    BU_LIST_APPEND(&active_dm_set.l, &mged_curr_dm->l);
+    bu_ptbl_init(&active_dm_set, 8, "dm set");
+    bu_ptbl_ins(&active_dm_set, (long *)mged_curr_dm);
+    mged_dm_init_state = mged_curr_dm;
     netfd = -1;
 
     /* initialize predictor stuff */
@@ -1954,7 +1953,6 @@
 int
 event_check(int non_blocking)
 {
-    struct mged_dm *p;
     struct mged_dm *save_dm_list;
     int save_edflag;
     int handled = 0;
@@ -2183,7 +2181,8 @@
            edobj = save_edflag;
     }
 
-    FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        if (!p->dm_owner)
            continue;
 
@@ -2271,7 +2270,6 @@
 void
 refresh(void)
 {
-    struct mged_dm *p;
     struct mged_dm *save_dm_list;
     struct bu_vls overlay_vls = BU_VLS_INIT_ZERO;
     struct bu_vls tmp_vls = BU_VLS_INIT_ZERO;
@@ -2279,7 +2277,8 @@
     int64_t elapsed_time, start_time = bu_gettime();
     int do_time = 0;
 
-    FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        if (!p->dm_view_state)
            continue;
        if (update_views || p->dm_view_state->vs_flag)
@@ -2290,7 +2289,8 @@
      * This needs to be done separately because dm_view_state may be
      * shared.
      */
-    FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        if (!p->dm_view_state)
            continue;
        p->dm_view_state->vs_flag = 0;
@@ -2299,7 +2299,8 @@
     update_views = 0;
 
     save_dm_list = mged_curr_dm;
-    FOR_ALL_DISPLAYS(p, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
        /*
         * if something has changed, then go update the display.
         * Otherwise, we are happy with the view we have
@@ -2454,7 +2455,6 @@
 mged_finish(int exitcode)
 {
     char place[64];
-    struct mged_dm *p;
     struct cmd_list *c;
     int ret;
 
@@ -2461,11 +2461,10 @@
     (void)sprintf(place, "exit_status=%d", exitcode);
 
     /* Release all displays */
-    while (BU_LIST_WHILE(p, mged_dm, &(active_dm_set.l))) {
-       if (!p)
-           bu_bomb("dm list entry is null? aborting!\n");
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *p = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, di);
 
-       BU_LIST_DEQUEUE(&(p->l));
+       bu_ptbl_rm(&active_dm_set, (long *)p);
 
        if (p && p->dm_dmp) {
            dm_close(p->dm_dmp);
@@ -2474,8 +2473,9 @@
            bu_free(p, "release: mged_curr_dm");
        }
 
-       set_curr_dm(DM_LIST_NULL);
+       set_curr_dm(MGED_DM_NULL);
     }
+    bu_ptbl_free(&active_dm_set);
 
     for (BU_LIST_FOR (c, cmd_list, &head_cmd_list.l)) {
        bu_vls_free(&c->cl_name);

Modified: brlcad/trunk/src/mged/mged_dm.h
===================================================================
--- brlcad/trunk/src/mged/mged_dm.h     2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/mged_dm.h     2020-08-25 02:29:42 UTC (rev 76935)
@@ -378,7 +378,6 @@
 
 
 struct mged_dm {
-    struct bu_list      l;
     struct dm          *dm_dmp;
     struct fb          *dm_fbp;
     int                        dm_netfd;                       /* socket used 
to listen for connections */
@@ -441,7 +440,7 @@
  * libged also gets the word. */
 extern void set_curr_dm(struct mged_dm *nl);
 
-#define DM_LIST_NULL ((struct mged_dm *)NULL)
+#define MGED_DM_NULL ((struct mged_dm *)NULL)
 #define DMP mged_curr_dm->dm_dmp
 #define DMP_dirty mged_curr_dm->dm_dirty
 #define fbp mged_curr_dm->dm_fbp
@@ -542,28 +541,25 @@
 
 #define BV_MAXFUNC     64      /* largest code used */
 
-#define FOR_ALL_DISPLAYS(p, hp) \
-       for (BU_LIST_FOR(p, mged_dm, hp))
+#define GET_MGED_DM(p, id) { \
+    \
+    (p) = MGED_DM_NULL; \
+    for (size_t dm_ind = 0; dm_ind < BU_PTBL_LEN(&active_dm_set); dm_ind++) { \
+       struct mged_dm *tp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
dm_ind); \
+       if ((id) == dm_get_id(tp->dm_dmp)) { \
+           (p) = tp; \
+           break; \
+       } \
+    } \
+    \
+}
 
-#define GET_DM_LIST(p, id) { \
-               struct mged_dm *tp; \
-\
-               FOR_ALL_DISPLAYS(tp, &active_dm_set.l) { \
-                       if ((id) == dm_get_id(tp->dm_dmp)) { \
-                               (p) = tp; \
-                               break; \
-                       } \
-               } \
-\
-               if (BU_LIST_IS_HEAD(tp, &active_dm_set.l)) \
-                       (p) = DM_LIST_NULL; \
-       }
-
 extern double frametime;               /* defined in mged.c */
 extern int dm_pipe[];                  /* defined in mged.c */
 extern int update_views;               /* defined in mged.c */
-extern struct mged_dm active_dm_set;   /* defined in attach.c */
+extern struct bu_ptbl active_dm_set;   /* defined in attach.c */
 extern struct mged_dm *mged_curr_dm;   /* defined in attach.c */
+extern struct mged_dm *mged_dm_init_state;
 
 /* defined in doevent.c */
 #ifdef HAVE_X11_TYPES
@@ -573,7 +569,7 @@
 #endif
 
 /* defined in attach.c */
-extern void dm_var_init(struct mged_dm *initial_dm_list);
+extern void dm_var_init(struct mged_dm *target_dm);
 
 /* defined in dm-generic.c */
 extern int common_dm(int argc, const char *argv[]);

Modified: brlcad/trunk/src/mged/rect.c
===================================================================
--- brlcad/trunk/src/mged/rect.c        2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/rect.c        2020-08-25 02:29:42 UTC (rev 76935)
@@ -71,11 +71,11 @@
                  const char *UNUSED(value),
                  void *UNUSED(data))
 {
-    struct mged_dm *m_dmp;
-
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        if (m_dmp->dm_rubber_band == rubber_band)
            m_dmp->dm_dirty = 1;
+    }
 }
 
 

Modified: brlcad/trunk/src/mged/set.c
===================================================================
--- brlcad/trunk/src/mged/set.c 2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/set.c 2020-08-25 02:29:42 UTC (rev 76935)
@@ -138,11 +138,11 @@
               const char *UNUSED(value),
               void *UNUSED(data))
 {
-    struct mged_dm *m_dmp;
-
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        if (m_dmp->dm_mged_variables == mged_variables)
            m_dmp->dm_dirty = 1;
+    }
 }
 
 
@@ -306,12 +306,12 @@
                   const char *UNUSED(value),
                   void *UNUSED(data))
 {
-    struct mged_dm *m_dmp;
     struct mged_dm *save_m_dmp;
 
     save_m_dmp = mged_curr_dm;
 
-    FOR_ALL_DISPLAYS(m_dmp, &active_dm_set.l)
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        if (m_dmp->dm_mged_variables == save_m_dmp->dm_mged_variables) {
            set_curr_dm(m_dmp);
 
@@ -323,6 +323,7 @@
                DMP_dirty = 1;
            }
        }
+    }
 
     set_curr_dm(save_m_dmp);
 }
@@ -371,8 +372,6 @@
          const char *UNUSED(value),
          void *UNUSED(data))
 {
-    struct mged_dm *dlp1;
-    struct mged_dm *dlp2;
     struct mged_dm *save_dlp;
 
     /* save current display manager */
@@ -382,7 +381,10 @@
        /* create display lists */
 
        /* for each display manager dlp1 that shares its dm_mged_variables with 
save_dlp */
-       FOR_ALL_DISPLAYS(dlp1, &active_dm_set.l) {
+       for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+
+           struct mged_dm *dlp1 = (struct mged_dm 
*)BU_PTBL_GET(&active_dm_set, di);
+
            if (dlp1->dm_mged_variables != save_dlp->dm_mged_variables) {
                continue;
            }
@@ -401,24 +403,32 @@
         */
 
        /* for each display manager dlp1 that shares its dm_mged_variables with 
save_dlp */
-       FOR_ALL_DISPLAYS(dlp1, &active_dm_set.l) {
+       for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+
+           struct mged_dm *dlp1 = (struct mged_dm 
*)BU_PTBL_GET(&active_dm_set, di);
+
            if (dlp1->dm_mged_variables != save_dlp->dm_mged_variables)
                continue;
 
            if (dlp1->dm_dlist_state->dl_active) {
                /* for each display manager dlp2 that is sharing display lists 
with dlp1 */
-               FOR_ALL_DISPLAYS(dlp2, &active_dm_set.l) {
-                   if (dlp2->dm_dlist_state != dlp1->dm_dlist_state) {
+               struct mged_dm *dlp2 = MGED_DM_NULL;
+               for (size_t dj = 0; dj < BU_PTBL_LEN(&active_dm_set); dj++) {
+                   struct mged_dm *m_dmp = (struct mged_dm 
*)BU_PTBL_GET(&active_dm_set, di);
+
+                   if (m_dmp->dm_dlist_state != dlp1->dm_dlist_state) {
                        continue;
                    }
 
                    /* found a dlp2 that is actively using dlp1's display lists 
*/
-                   if (dlp2->dm_mged_variables->mv_dlist)
+                   if (dlp2->dm_mged_variables->mv_dlist) {
+                       dlp2 = m_dmp;
                        break;
+                   }
                }
 
                /* these display lists are not being used, so free them */
-               if (BU_LIST_IS_HEAD(dlp2, &active_dm_set.l)) {
+               if (dlp2 == MGED_DM_NULL) {
                    struct display_list *gdlp;
                    struct display_list *next_gdlp;
 

Modified: brlcad/trunk/src/mged/share.c
===================================================================
--- brlcad/trunk/src/mged/share.c       2020-08-25 01:51:25 UTC (rev 76934)
+++ brlcad/trunk/src/mged/share.c       2020-08-25 02:29:42 UTC (rev 76935)
@@ -95,8 +95,8 @@
 f_share(ClientData UNUSED(clientData), Tcl_Interp *interpreter, int argc, 
const char *argv[])
 {
     int uflag = 0;             /* unshare flag */
-    struct mged_dm *dlp1 = (struct mged_dm *)NULL;
-    struct mged_dm *dlp2 = (struct mged_dm *)NULL;
+    struct mged_dm *dlp1 = MGED_DM_NULL;
+    struct mged_dm *dlp2 = MGED_DM_NULL;
     struct bu_vls vls = BU_VLS_INIT_ZERO;
 
     if (argc != 4) {
@@ -113,27 +113,33 @@
        ++argv;
     }
 
-    FOR_ALL_DISPLAYS(dlp1, &active_dm_set.l)
-       if (dm_get_pathname(dlp1->dm_dmp) && BU_STR_EQUAL(argv[2], 
bu_vls_addr(dm_get_pathname(dlp1->dm_dmp))))
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
+       struct bu_vls *pname = dm_get_pathname(m_dmp->dm_dmp);
+       if (BU_STR_EQUAL(argv[2], bu_vls_cstr(pname))) {
+           dlp1 = m_dmp;
            break;
+       }
+    }
 
-    if (dlp1 == &active_dm_set) {
-       Tcl_AppendResult(interpreter, "share: unrecognized path name - ",
-                        argv[2], "\n", (char *)NULL);
-
+    if (dlp1 == MGED_DM_NULL) {
+       Tcl_AppendResult(interpreter, "share: unrecognized path name - ", 
argv[2], "\n", (char *)NULL);
        bu_vls_free(&vls);
        return TCL_ERROR;
     }
 
     if (!uflag) {
-       FOR_ALL_DISPLAYS(dlp2, &active_dm_set.l)
-           if (dm_get_pathname(dlp2->dm_dmp) && BU_STR_EQUAL(argv[3], 
bu_vls_addr(dm_get_pathname(dlp2->dm_dmp))))
+       for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+           struct mged_dm *m_dmp = (struct mged_dm 
*)BU_PTBL_GET(&active_dm_set, di);
+           struct bu_vls *pname = dm_get_pathname(m_dmp->dm_dmp);
+           if (BU_STR_EQUAL(argv[3], bu_vls_cstr(pname))) {
+               dlp2 = m_dmp;
                break;
+           }
+       }
 
-       if (dlp2 == &active_dm_set) {
-           Tcl_AppendResult(interpreter, "share: unrecognized path name - ",
-                            argv[3], "\n", (char *)NULL);
-
+       if (dlp2 == MGED_DM_NULL) {
+           Tcl_AppendResult(interpreter, "share: unrecognized path name - ", 
argv[3], "\n", (char *)NULL);
            bu_vls_free(&vls);
            return TCL_ERROR;
        }
@@ -429,12 +435,11 @@
 void
 share_dlist(struct mged_dm *dlp2)
 {
-    struct mged_dm *dlp1;
-
     if (!dm_get_displaylist(dlp2->dm_dmp))
        return;
 
-    FOR_ALL_DISPLAYS(dlp1, &active_dm_set.l) {
+    for (size_t di = 0; di < BU_PTBL_LEN(&active_dm_set); di++) {
+       struct mged_dm *dlp1 = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, 
di);
        if (dlp1 != dlp2 &&
            dm_get_type(dlp1->dm_dmp) == dm_get_type(dlp2->dm_dmp) && 
dm_get_dname(dlp1->dm_dmp) && dm_get_dname(dlp2->dm_dmp) &&
            !bu_vls_strcmp(dm_get_dname(dlp1->dm_dmp), 
dm_get_dname(dlp2->dm_dmp))) {

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