Revision: 75454
          http://sourceforge.net/p/brlcad/code/75454
Author:   starseeker
Date:     2020-04-18 01:52:26 +0000 (Sat, 18 Apr 2020)
Log Message:
-----------
Use strings for dm backend specification - the type defines aren't very flexible

Modified Paths:
--------------
    brlcad/branches/dm-fb-merge/include/dm.h
    brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c
    brlcad/branches/dm-fb-merge/src/libdm/dm_obj.c
    brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c
    brlcad/branches/dm-fb-merge/src/mged/attach.c
    brlcad/branches/dm-fb-merge/src/mged/mged_dm.h
    brlcad/branches/dm-fb-merge/src/util/plot3-dm.c

Modified: brlcad/branches/dm-fb-merge/include/dm.h
===================================================================
--- brlcad/branches/dm-fb-merge/include/dm.h    2020-04-18 01:14:56 UTC (rev 
75453)
+++ brlcad/branches/dm-fb-merge/include/dm.h    2020-04-18 01:52:26 UTC (rev 
75454)
@@ -59,21 +59,6 @@
 #define DM_TYPE_OSG    12
 #define DM_TYPE_OSGL   13
 
-#define IS_DM_TYPE_NULL(_t) ((_t) == DM_TYPE_NULL)
-#define IS_DM_TYPE_PLOT(_t) ((_t) == DM_TYPE_PLOT)
-#define IS_DM_TYPE_PS(_t) ((_t) == DM_TYPE_PS)
-#define IS_DM_TYPE_X(_t) ((_t) == DM_TYPE_X)
-#define IS_DM_TYPE_TK(_t) ((_t) == DM_TYPE_TK)
-#define IS_DM_TYPE_OGL(_t) ((_t) == DM_TYPE_OGL)
-#define IS_DM_TYPE_GLX(_t) ((_t) == DM_TYPE_GLX)
-#define IS_DM_TYPE_PEX(_t) ((_t) == DM_TYPE_PEX)
-#define IS_DM_TYPE_WGL(_t) ((_t) == DM_TYPE_WGL)
-#define IS_DM_TYPE_RTGL(_t) ((_t) == DM_TYPE_RTGL)
-#define IS_DM_TYPE_TXT(_t) ((_t) == DM_TYPE_TXT)
-#define IS_DM_TYPE_QT(_t) ((_t) == DM_TYPE_QT)
-#define IS_DM_TYPE_OSG(_t) ((_t) == DM_TYPE_OSG)
-#define IS_DM_TYPE_OSGL(_t) ((_t) == DM_TYPE_OSGL)
-
 /* the font used depends on the size of the window opened */
 #define FONTBACK "-adobe-courier-medium-r-normal--10-100-75-75-m-60-iso8859-1"
 #define FONT5 "5x7"
@@ -126,7 +111,7 @@
 
 DM_EXPORT extern int Dm_Init(void *interp);
 DM_EXPORT extern struct dm *dm_open(void *interp,
-                            int type,
+                            const char *type,
                             int argc,
                             const char *argv[]);
 DM_EXPORT extern void *dm_interp(struct dm *dmp);
@@ -328,7 +313,7 @@
                                          int mv_dlist
                                         );
 
-DM_EXPORT extern int dm_default_type();
+DM_EXPORT extern const char *dm_default_type();
 
 /*
  * Needed for fd_set, avoid including sys/select.h outright since it

Modified: brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c  2020-04-18 01:14:56 UTC 
(rev 75453)
+++ brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c  2020-04-18 01:52:26 UTC 
(rev 75454)
@@ -94,53 +94,56 @@
 
 
 struct dm *
-dm_open(void *interp, int type, int argc, const char *argv[])
+dm_open(void *interp, const char *type, int argc, const char *argv[])
 {
-    switch (type) {
-       case DM_TYPE_NULL:
-           return null_dm_open(interp, argc, argv);
-       case DM_TYPE_TXT:
-           return txt_open(interp, argc, argv);
-       case DM_TYPE_PLOT:
-           return plot_open(interp, argc, argv);
-       case DM_TYPE_PS:
-           return ps_open(interp, argc, argv);
-#ifdef DM_X
-#  if defined(HAVE_TK)
-       case DM_TYPE_X:
-           return X_open_dm(interp, argc, argv);
-#  endif
+    if (BU_STR_EQUIV(type, "null")) {
+       return null_dm_open(interp, argc, argv);
+    }
+    if (BU_STR_EQUIV(type, "txt")) {
+       return txt_open(interp, argc, argv);
+    }
+    if (BU_STR_EQUIV(type, "plot")) {
+       return plot_open(interp, argc, argv);
+    }
+    if (BU_STR_EQUIV(type, "plot")) {
+       return plot_open(interp, argc, argv);
+    }
+    if (BU_STR_EQUIV(type, "ps")) {
+       return ps_open(interp, argc, argv);
+    }
+    if (BU_STR_EQUIV(type, "plot")) {
+       return plot_open(interp, argc, argv);
+    }
+#if defined(DM_X) && defined(HAVE_TK)
+    if (BU_STR_EQUIV(type, "X")) {
+       return X_open_dm(interp, argc, argv);
+    }
 #endif
-#ifdef DM_TK
-       case DM_TYPE_TK:
-           return tk_open_dm(interp, argc, argv);
+#if defined(DM_TK)
+    if (BU_STR_EQUIV(type, "tk")) {
+       return tk_open_dm(interp, argc, argv);
+    }
 #endif
-#ifdef DM_OGL
-#  if defined(HAVE_TK)
-       case DM_TYPE_OGL:
-           return ogl_open(interp, argc, argv);
-#  endif
+#if defined(DM_OGL) && defined(HAVE_TK)
+    if (BU_STR_EQUIV(type, "ogl")) {
+       return ogl_open(interp, argc, argv);
+    }
 #endif
-#ifdef DM_OSG
-       case DM_TYPE_OSG:
-           return osg_open(interp, argc, argv);
+#if defined(DM_OSGL)
+    if (BU_STR_EQUIV(type, "osgl")) {
+       return osgl_open(interp, argc, argv);
+    }
 #endif
-#ifdef DM_OSGL
-       case DM_TYPE_OSGL:
-           return osgl_open(interp, argc, argv);
+#if defined(DM_WGL)
+    if (BU_STR_EQUIV(type, "wgl")) {
+       return wgl_open(interp, argc, argv);
+    }
 #endif
-#ifdef DM_WGL
-       case DM_TYPE_WGL:
-           return wgl_open(interp, argc, argv);
+#if defined(DM_QT)
+    if (BU_STR_EQUIV(type, "qt")) {
+       return qt_open(interp, argc, argv);
+    }
 #endif
-#ifdef DM_QT
-       case DM_TYPE_QT:
-           return qt_open(interp, argc, argv);
-#endif
-       default:
-           break;
-    }
-
     return DM_NULL;
 }
 
@@ -361,30 +364,30 @@
  * dm_default_type suggests a display manager
  */
 
-int
+const char *
 dm_default_type()
 {
 
 #ifdef DM_OSGL
-    return DM_TYPE_OSGL;
+    return "osgl";
 #endif
 
 #ifdef DM_WGL
-    return DM_TYPE_WGL;
+    return "wgl";
 #endif
 
 #ifdef DM_OGL
-    return DM_TYPE_OGL;
+    return "ogl";
 #endif
 
 #ifdef DM_X
-    return DM_TYPE_X;
+    return "X";
 #endif
 
 #ifdef DM_TK
-    return DM_TYPE_TK;
+    return "tk";
 #endif
-    return DM_TYPE_NULL;
+    return "null";
 }
 
 

Modified: brlcad/branches/dm-fb-merge/src/libdm/dm_obj.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/dm_obj.c      2020-04-18 01:14:56 UTC 
(rev 75453)
+++ brlcad/branches/dm-fb-merge/src/libdm/dm_obj.c      2020-04-18 01:52:26 UTC 
(rev 75454)
@@ -2618,7 +2618,7 @@
     struct dm *dmp;
     struct bu_vls vls = BU_VLS_INIT_ZERO;
     int name_index = 1;
-    int type = DM_TYPE_BAD;
+    const char *type = NULL;
     Tcl_Obj *obj;
 
     obj = Tcl_GetObjResult(interp);
@@ -2652,27 +2652,19 @@
     }
 
     /* find display manager type */
-#ifdef DM_X
     if (argv[2][0] == 'X' || argv[2][0] == 'x')
-       type = DM_TYPE_X;
-#endif /* DM_X */
+       type = argv[2];
 
-#ifdef DM_TK
     if (BU_STR_EQUAL(argv[2], "tk"))
-       type = DM_TYPE_TK;
-#endif /* DM_TK */
+       type = argv[2];
 
-#ifdef DM_OGL
     if (BU_STR_EQUAL(argv[2], "ogl"))
-       type = DM_TYPE_OGL;
-#endif /* DM_OGL */
+       type = argv[2];
 
-#ifdef DM_WGL
     if (BU_STR_EQUAL(argv[2], "wgl"))
-       type = DM_TYPE_WGL;
-#endif /* DM_WGL */
+       type = argv[2];
 
-    if (type == DM_TYPE_BAD) {
+    if (!type) {
        Tcl_AppendStringsToObj(obj,
                               "Unsupported display manager type - ",
                               argv[2], "\n",

Modified: brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c      2020-04-18 
01:14:56 UTC (rev 75453)
+++ brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c      2020-04-18 
01:52:26 UTC (rev 75454)
@@ -11473,7 +11473,7 @@
 {
     struct ged_dm_view *new_gdvp;
     HIDDEN const int name_index = 1;
-    int type = DM_TYPE_BAD;
+    const char *type = NULL;
     struct bu_vls event_vls = BU_VLS_INIT_ZERO;
 
     GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
@@ -11496,42 +11496,28 @@
        type = DM_TYPE_NULL;
 
     /* find display manager type */
-#ifdef DM_X
     if (argv[2][0] == 'X' || argv[2][0] == 'x')
-       type = DM_TYPE_X;
-#endif /* DM_X */
+       type = argv[2];
 
-#ifdef DM_TK
     if (BU_STR_EQUAL(argv[2], "tk"))
-       type = DM_TYPE_TK;
-#endif /* DM_TK */
+       type = argv[2];
 
-#ifdef DM_OGL
     if (BU_STR_EQUAL(argv[2], "ogl"))
-       type = DM_TYPE_OGL;
-#endif /* DM_OGL */
+       type = argv[2];
 
-#ifdef DM_OSG
     if (BU_STR_EQUAL(argv[2], "osg"))
-       type = DM_TYPE_OSG;
-#endif /* DM_OSG */
+       type = argv[2];
 
-#ifdef DM_OSGL
     if (BU_STR_EQUAL(argv[2], "osgl"))
-       type = DM_TYPE_OSGL;
-#endif /* DM_OSGL */
+       type = argv[2];
 
-#ifdef DM_WGL
     if (BU_STR_EQUAL(argv[2], "wgl"))
-       type = DM_TYPE_WGL;
-#endif /* DM_WGL */
+       type = argv[2];
 
-#ifdef DM_QT
     if (BU_STR_EQUAL(argv[2], "qt"))
-       type = DM_TYPE_QT;
-#endif /* DM_QT */
+       type = argv[2];
 
-    if (type == DM_TYPE_BAD) {
+    if (!type) {
        bu_vls_printf(gedp->ged_result_str, "ERROR:  Requisite display manager 
is not available.\nBRL-CAD may need to be recompiled with support for:  %s\nRun 
'fbhelp' for a list of available display managers.\n", argv[2]);
        return GED_ERROR;
     }

Modified: brlcad/branches/dm-fb-merge/src/mged/attach.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/mged/attach.c       2020-04-18 01:14:56 UTC 
(rev 75453)
+++ brlcad/branches/dm-fb-merge/src/mged/attach.c       2020-04-18 01:52:26 UTC 
(rev 75454)
@@ -50,18 +50,15 @@
 #include "./sedit.h"
 #include "./mged_dm.h"
 
-#define NEED_GUI(_type) (\
-       IS_DM_TYPE_WGL(_type) || \
-       IS_DM_TYPE_OGL(_type) || \
-       IS_DM_TYPE_OSG(_type) || \
-       IS_DM_TYPE_GLX(_type) || \
-       IS_DM_TYPE_TK(_type) || \
-       IS_DM_TYPE_X(_type) || \
-       IS_DM_TYPE_TXT(_type) || \
-       IS_DM_TYPE_OSGL(_type) || \
-       IS_DM_TYPE_QT(_type))
+#define NEED_GUI(_name) (\
+       BU_STR_EQUIV(_name, "wgl") || \
+       BU_STR_EQUIV(_name, "ogl") || \
+       BU_STR_EQUIV(_name, "osgl") || \
+       BU_STR_EQUIV(_name, "tk") || \
+       BU_STR_EQUIV(_name, "X") || \
+       BU_STR_EQUIV(_name, "txt") || \
+       BU_STR_EQUIV(_name, "qt"))
 
-
 /* All systems can compile these! */
 extern int Plot_dm_init(struct dm_list *o_dm_list, int argc, const char 
*argv[]);
 extern int PS_dm_init(struct dm_list *o_dm_list, int argc, const char *argv[]);
@@ -194,42 +191,39 @@
 typedef int (*eventfptr)();
 
 struct w_dm which_dm[] = {
-    { DM_TYPE_PLOT, "plot", NULL},  /* DM_PLOT_INDEX defined in mged_dm.h */
-    { DM_TYPE_PS, "ps", NULL},      /* DM_PS_INDEX defined in mged_dm.h */
-    { DM_TYPE_TXT, "txt", NULL},
+    { "plot", NULL},  /* DM_PLOT_INDEX defined in mged_dm.h */
+    { "ps", NULL},      /* DM_PS_INDEX defined in mged_dm.h */
+    { "txt", NULL},
 #ifdef DM_X
-    { DM_TYPE_X, "X", x_doevent },
+    { "X", x_doevent },
 #endif /* DM_X */
 #ifdef DM_TK
-    { DM_TYPE_TK, "tk", NULL},
+    { "tk", NULL},
 #endif /* DM_TK */
 #ifdef DM_WGL
-    { DM_TYPE_WGL, "wgl", wgl_doevent },
+    { "wgl", wgl_doevent },
 #endif /* DM_WGL */
 #ifdef DM_OGL
 #  if defined(HAVE_TK)
-    { DM_TYPE_OGL, "ogl", ogl_doevent },
+    { "ogl", ogl_doevent },
 #  endif
 #endif /* DM_OGL */
-#ifdef DM_OSG
-    { DM_TYPE_OSG, "osg", NULL},
-#endif /* DM_OSG */
 #ifdef DM_OSGL
 #  if defined(HAVE_TK)
-    { DM_TYPE_OSGL, "osgl", osgl_doevent },
+    { "osgl", osgl_doevent },
 #  endif
 #endif /* DM_OSGL */
 #ifdef DM_QT
-    { DM_TYPE_QT, "qt", x_doevent },
+    { "qt", x_doevent },
 #endif /* DM_QT */
-    { -1, (char *)NULL, (int (*)())NULL}
+    { (char *)NULL, (int (*)())NULL}
 };
 
 static eventfptr
-dm_doevent(int dm_type) {
+dm_doevent(const char *dm_type) {
     int i = 0;
-    while (which_dm[i].type != -1) {
-       if (dm_type == which_dm[i].type) {
+    while (which_dm[i].name != NULL) {
+       if (dm_type == which_dm[i].name) {
            return which_dm[i].doevent;
        }
        i++;
@@ -239,7 +233,7 @@
 
 int
 mged_dm_init(struct dm_list *o_dm_list,
-       int dm_type,
+       const char *dm_type,
        int argc,
        const char *argv[])
 {
@@ -486,11 +480,11 @@
     }
 
     /* Look at last argument, skipping over any options which precede it */
-    for (wp = &which_dm[2]; wp->type != -1; wp++)
+    for (wp = &which_dm[2]; wp->name != NULL; wp++)
        if (BU_STR_EQUAL(argv[argc - 1], wp->name))
            break;
 
-    if (wp->type == -1) {
+    if (wp->name == NULL) {
        Tcl_AppendResult(interpreter, "attach(", argv[argc - 1], "): BAD\n", 
(char *)NULL);
        print_valid_dm(interpreter);
        return TCL_ERROR;
@@ -591,7 +585,7 @@
     predictor_init();
 
     /* Only need to do this once */
-    if (tkwin == NULL && NEED_GUI(wp->type)) {
+    if (tkwin == NULL && NEED_GUI(wp->name)) {
        struct dm *tmp_dmp;
        struct bu_vls tmp_vls = BU_VLS_INIT_ZERO;
 
@@ -629,7 +623,7 @@
        return TCL_ERROR;
     }
 
-    if (mged_dm_init(o_dm_list, wp->type, argc, argv) == TCL_ERROR) {
+    if (mged_dm_init(o_dm_list, wp->name, argc, argv) == TCL_ERROR) {
        goto Bad;
     }
 
@@ -692,7 +686,7 @@
 
        /* print all the available display manager types, skipping plot and ps 
*/
        wp = &which_dm[2];
-       for (; wp->type != -1; wp++) {
+       for (; wp->name != NULL; wp++) {
            bu_log("|%s", wp->name);
        }
        bu_log(")[nu]? ");
@@ -714,13 +708,13 @@
        /* trim whitespace before comparisons (but not before checking empty) */
        bu_vls_trimspace(&type);
 
-       for (wp = &which_dm[2]; wp->type != -1; wp++) {
+       for (wp = &which_dm[2]; wp->name != NULL; wp++) {
            if (BU_STR_EQUAL(bu_vls_addr(&type), wp->name)) {
                break;
            }
        }
 
-       if (wp->type != -1) {
+       if (wp->name != NULL) {
            break;
        }
 

Modified: brlcad/branches/dm-fb-merge/src/mged/mged_dm.h
===================================================================
--- brlcad/branches/dm-fb-merge/src/mged/mged_dm.h      2020-04-18 01:14:56 UTC 
(rev 75453)
+++ brlcad/branches/dm-fb-merge/src/mged/mged_dm.h      2020-04-18 01:52:26 UTC 
(rev 75454)
@@ -600,8 +600,7 @@
 extern void mged_rtCmdNotify();
 
 struct w_dm {
-    int        type;
-    char       *name;
+    char *name;
     int        (*doevent)();
 };
 extern struct w_dm which_dm[];  /* defined in attach.c */

Modified: brlcad/branches/dm-fb-merge/src/util/plot3-dm.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/util/plot3-dm.c     2020-04-18 01:14:56 UTC 
(rev 75453)
+++ brlcad/branches/dm-fb-merge/src/util/plot3-dm.c     2020-04-18 01:52:26 UTC 
(rev 75454)
@@ -1047,7 +1047,7 @@
     av[2] = "sampler_bind_dm";
     av[3] = (char *)NULL;
 
-    if ((dmp = dm_open(INTERP, DM_TYPE_X, 3, av)) == DM_NULL) {
+    if ((dmp = dm_open(INTERP, "X", 3, av)) == DM_NULL) {
        Tcl_AppendResult(INTERP, "Failed to open a display manager\n", (char 
*)NULL);
        return TCL_ERROR;
     }
@@ -1073,7 +1073,7 @@
     av[2] = "sampler_bind_dm";
     av[3] = (char *)NULL;
 
-    if ((dmp = dm_open(INTERP, DM_TYPE_OGL, 3, (const char **)av)) == DM_NULL) 
{
+    if ((dmp = dm_open(INTERP, "ogl", 3, (const char **)av)) == DM_NULL) {
        Tcl_AppendResult(INTERP, "Failed to open a display manager\n", (char 
*)NULL);
        return TCL_ERROR;
     }

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