Revision: 75503
          http://sourceforge.net/p/brlcad/code/75503
Author:   starseeker
Date:     2020-04-21 19:20:48 +0000 (Tue, 21 Apr 2020)
Log Message:
-----------
Enable all the plugin functions

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_plugins.cpp
    brlcad/branches/dm-fb-merge/src/libdm/tcl.c
    brlcad/branches/dm-fb-merge/src/libdm/tests/dm_test.c
    brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c

Modified: brlcad/branches/dm-fb-merge/include/dm.h
===================================================================
--- brlcad/branches/dm-fb-merge/include/dm.h    2020-04-21 18:56:17 UTC (rev 
75502)
+++ brlcad/branches/dm-fb-merge/include/dm.h    2020-04-21 19:20:48 UTC (rev 
75503)
@@ -99,10 +99,6 @@
 DM_EXPORT extern struct dm dm_osgl;
 
 DM_EXPORT extern int Dm_Init(void *interp);
-DM_EXPORT extern struct dm *dm_open(void *interp,
-                            const char *type,
-                            int argc,
-                            const char *argv[]);
 DM_EXPORT extern void *dm_interp(struct dm *dmp);
 DM_EXPORT extern int dm_share_dlist(struct dm *dmp1,
                                    struct dm *dmp2);
@@ -179,12 +175,17 @@
 DM_EXPORT extern const char *dm_version(void);
 
 
-/* Test plugin functions */
-DM_EXPORT extern void dm_list_backends(const char *separator);
+/* Plugin related functions */
 DM_EXPORT extern int dm_valid_type(const char *name, const char *dpy_string);
-DM_EXPORT const char * dm_recommend_type(const char *dpy_string);
 DM_EXPORT const char * dm_init_msgs();
+DM_EXPORT extern struct dm *dm_open(void *interp,
+                            const char *type,
+                            int argc,
+                            const char *argv[]);
+DM_EXPORT extern struct bu_vls *dm_list_types(const char *separator); /* free 
return list with bu_vls_free(list); BU_PUT(list, struct bu_vls); */
+DM_EXPORT const char *dm_bestXType(const char *dpy_string);
 
+
 /* functions to make a dm struct hideable - will need to
  * sort these out later */
 
@@ -201,7 +202,6 @@
 DM_EXPORT extern void dm_internal_var(struct bu_vls *result, struct dm *dmp, 
const char *key); // ick
 DM_EXPORT extern fastf_t dm_get_aspect(struct dm *dmp);
 DM_EXPORT extern const char *dm_get_type(struct dm *dmp);
-DM_EXPORT extern struct bu_vls *dm_list_types(const char separator); /* free 
return list with bu_vls_free(list); BU_PUT(list, struct bu_vls); */
 DM_EXPORT extern unsigned long dm_get_id(struct dm *dmp);
 DM_EXPORT extern void dm_set_id(struct dm *dmp, unsigned long new_id);
 DM_EXPORT extern int dm_get_displaylist(struct dm *dmp);

Modified: brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c  2020-04-21 18:56:17 UTC 
(rev 75502)
+++ brlcad/branches/dm-fb-merge/src/libdm/dm-generic.c  2020-04-21 19:20:48 UTC 
(rev 75503)
@@ -45,204 +45,6 @@
     return (void *)dmp->i->dm_interp;
 }
 
-/* TODO - in a plugin system, this iterates over all supplied plugins
- * and assembles the list */
-struct bu_vls *
-dm_list_types(const char separator)
-{
-    struct bu_vls *list;
-    char sep = ' ';
-    if (separator) sep = separator;
-    BU_GET(list, struct bu_vls);
-    bu_vls_init(list);
-
-    bu_vls_trunc(list, 0);
-
-#ifdef DM_OSGL
-    if (strlen(bu_vls_addr(list)) > 0) bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "osgl");
-#endif /* DM_OSGL*/
-
-#ifdef DM_WGL
-    if (strlen(bu_vls_addr(list)) > 0) bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "wgl");
-#endif /* DM_WGL */
-
-#ifdef DM_OGL
-    if (strlen(bu_vls_addr(list)) > 0) bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "ogl");
-#endif /* DM_OGL */
-
-#ifdef DM_QT
-    if (strlen(bu_vls_addr(list)) > 0) bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "Qt");
-#endif /* DM_QT */
-
-#ifdef DM_X
-    if (strlen(bu_vls_addr(list)) > 0) bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "X");
-#endif /* DM_X */
-
-#ifdef DM_X
-    if (strlen(bu_vls_addr(list)) > 0) bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "tk");
-#endif /* DM_X */
-
-    if (strlen(bu_vls_addr(list)) > 0) bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "txt");
-    bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "plot");
-    bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "ps");
-    bu_vls_printf(list, "%c", sep);
-    bu_vls_printf(list, "null");
-    return list;
-}
-
-/* TODO - in a plugin system, this will search available plugins to see
- * of there is one that provides the requested name */
-int
-dm_validXType(const char *dpy_string, const char *name)
-{
-    if (BU_STR_EQUIV(name, "null")) {
-       return dm_null.i->dm_viable(dpy_string);
-    }
-    if (BU_STR_EQUIV(name, "txt")) {
-       return dm_txt.i->dm_viable(dpy_string);
-    }
-    if (BU_STR_EQUIV(name, "plot")) {
-       return dm_plot.i->dm_viable(dpy_string);
-    }
-    if (BU_STR_EQUIV(name, "ps")) {
-       return dm_ps.i->dm_viable(dpy_string);
-    }
-#if defined(DM_X)
-    if (BU_STR_EQUIV(name, "X")) {
-       return dm_X.i->dm_viable(dpy_string);
-    }
-#endif
-#if defined(DM_TK)
-    if (BU_STR_EQUIV(name, "tk")) {
-       return dm_tk.i->dm_viable(dpy_string);
-    }
-#endif
-#if defined(DM_OGL)
-    if (BU_STR_EQUIV(name, "ogl")) {
-       return dm_ogl.i->dm_viable(dpy_string);
-    }
-#endif
-#if defined(DM_OSGL)
-    if (BU_STR_EQUIV(name, "osgl")) {
-       return dm_osgl.i->dm_viable(dpy_string);
-    }
-#endif
-#if defined(DM_WGL)
-    if (BU_STR_EQUIV(name, "wgl")) {
-       return dm_wgl.i->dm_viable(dpy_string);
-    }
-#endif
-#if defined(DM_QT)
-    if (BU_STR_EQUIV(name, "qt")) {
-       return dm_qt.i->dm_viable(dpy_string);
-    }
-#endif
-    return 0;
-}
-
-
-/** dm_bestXType determines what mged will normally
-  * use as the default display manager
-  */
-const char *
-dm_bestXType(const char *dpy_string)
-{
-    static const char *priority_list[] = {"osgl", "wgl", "ogl", "X", "tk", 
"nu"};
-
-    int i = 0;
-    const char *b = priority_list[i];
-    while (!BU_STR_EQUAL(b, "nu")) {
-
-       if (BU_STR_EQUIV(b, "txt")) {
-           if (dm_txt.i->dm_viable(dpy_string) == 1) return b;
-       }
-       if (BU_STR_EQUIV(b, "plot")) {
-           if (dm_plot.i->dm_viable(dpy_string) == 1) return b;
-       }
-       if (BU_STR_EQUIV(b, "ps")) {
-           if (dm_ps.i->dm_viable(dpy_string) == 1) return b;
-       }
-#if defined(DM_OGL)
-       if (BU_STR_EQUIV(b, "ogl")) {
-           if (dm_ogl.i->dm_viable(dpy_string) == 1) return b;
-       }
-#endif
-#ifdef DM_OSGL
-       if (BU_STR_EQUAL(b, "osgl")) {
-           if (dm_osgl.i->dm_viable(dpy_string) == 1) return b;
-       }
-#endif
-#if defined(DM_QT)
-       if (BU_STR_EQUIV(b, "qt")) {
-           if (dm_qt.i->dm_viable(dpy_string) == 1) return b;
-       }
-#endif
-#if defined(DM_TK)
-       if (BU_STR_EQUIV(b, "tk")) {
-           if (dm_tk.i->dm_viable(dpy_string) == 1) return b;
-       }
-#endif
-#if defined(DM_X)
-       if (BU_STR_EQUIV(b, "X")) {
-           if (dm_X.i->dm_viable(dpy_string) == 1) return b;
-       }
-#endif
-#if defined(DM_WGL)
-       if (BU_STR_EQUIV(b, "wgl")) {
-           if (dm_wgl.i->dm_viable(dpy_string) == 1) return b;
-       }
-#endif
-
-       i++;
-       b = priority_list[i];
-    }
-
-    return b;
-}
-
-/**
- * dm_default_type suggests a display manager
- *
- * TODO - in a plugin system, this will check available plugins
- * to see if an availble dm matches a preferred dm_name - if
- * so, that name is returned.  May be able to consolidate with
- * dm_bestXType - not sure yet.
- */
-const char *
-dm_default_type()
-{
-#ifdef DM_OSGL
-    return "osgl";
-#endif
-
-#ifdef DM_WGL
-    return "wgl";
-#endif
-
-#ifdef DM_OGL
-    return "ogl";
-#endif
-
-#ifdef DM_X
-    return "X";
-#endif
-
-#ifdef DM_TK
-    return "tk";
-#endif
-    return "null";
-}
-
-
 void
 dm_fogHint(struct dm *dmp, int fastfog)
 {

Modified: brlcad/branches/dm-fb-merge/src/libdm/dm_plugins.cpp
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/dm_plugins.cpp        2020-04-21 
18:56:17 UTC (rev 75502)
+++ brlcad/branches/dm-fb-merge/src/libdm/dm_plugins.cpp        2020-04-21 
19:20:48 UTC (rev 75503)
@@ -25,8 +25,8 @@
     return dmp;
 }
 
-void
-dm_list_backends(const char *separator)
+extern "C" struct bu_vls *
+dm_list_types(const char *separator)
 {
     struct bu_vls *list;
     BU_GET(list, struct bu_vls);
@@ -47,16 +47,14 @@
        std::string key = d_it->first;
        const struct dm *d = d_it->second;
        if (strlen(bu_vls_cstr(list)) > 0) bu_vls_printf(list, "%s", 
bu_vls_cstr(&sep));
-       bu_vls_printf(list, "%s: %s", key.c_str(), dm_get_name(d));
+       bu_vls_printf(list, "%s", dm_get_name(d));
     }
 
-    bu_log("%s\n", bu_vls_cstr(list));
-    bu_vls_free(list);
-    BU_PUT(list, struct bu_vls);
+    return list;
 }
 
-int
-dm_valid_type(const char *name, const char *dpy_string)
+extern "C" int
+dm_validXType(const char *dpy_string, const char *name)
 {
     std::map<std::string, const struct dm *> *dmb = (std::map<std::string, 
const struct dm *> *)dm_backends;
     std::map<std::string, const struct dm *>::iterator d_it = 
dmb->find(std::string(name));
@@ -67,12 +65,22 @@
     int is_valid = d->i->dm_viable(dpy_string);
     return is_valid;
 }
+extern "C" int
+dm_valid_type(const char *name, const char *dpy_string)
+{
+    return dm_validXType(dpy_string, name);
+}
 
-/** dm_recommend_type determines what mged will normally
-  * use as the default display manager
+
+/**
+ * dm_bestXType determines what mged will normally use as the default display
+ * manager.  Checks if the display manager backend can work at runtime, if the
+ * backend supports that check, and will report the "best" available WORKING
+ * backend rather than simply the first one present in the list that is also
+ * in the plugins directory.
   */
-const char *
-dm_recommend_type(const char *dpy_string)
+extern "C" const char *
+dm_bestXType(const char *dpy_string)
 {
     static const char *priority_list[] = {"osgl", "wgl", "ogl", "X", "tk", 
"nu"};
     std::map<std::string, const struct dm *> *dmb = (std::map<std::string, 
const struct dm *> *)dm_backends;
@@ -99,6 +107,34 @@
     return (ret) ? ret : b;
 }
 
+/**
+ * dm_default_type suggests a display manager.  Checks if a plugin supplies the
+ * specified backend type before reporting it, but does NOT perform a runtime
+ * test to verify its suggestion will work (unlike dm_bestXType) before
+ * reporting back.
+  */
+extern "C" const char *
+dm_default_type()
+{
+    static const char *priority_list[] = {"osgl", "wgl", "ogl", "X", "tk", 
"nu"};
+    std::map<std::string, const struct dm *> *dmb = (std::map<std::string, 
const struct dm *> *)dm_backends;
+    const char *ret = NULL;
+
+    int i = 0;
+    const char *b = priority_list[i];
+    while (!BU_STR_EQUAL(b, "nu")) {
+       std::map<std::string, const struct dm *>::iterator d_it = 
dmb->find(std::string(b));
+       if (d_it == dmb->end()) {
+           i++;
+           b = priority_list[i];
+           continue;
+       }
+       ret = b;
+    }
+
+    return (ret) ? ret : b;
+}
+
 /*
  * Local Variables:
  * tab-width: 8

Modified: brlcad/branches/dm-fb-merge/src/libdm/tcl.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/tcl.c 2020-04-21 18:56:17 UTC (rev 
75502)
+++ brlcad/branches/dm-fb-merge/src/libdm/tcl.c 2020-04-21 19:20:48 UTC (rev 
75503)
@@ -47,7 +47,6 @@
 
 /* from libdm/query.c */
 extern int dm_validXType(const char *dpy_string, const char *name);
-extern char *dm_bestXType(const char *dpy_string);
 
 /* from libdm/dm_obj.c */
 extern int Dmo_Init(Tcl_Interp *interp);

Modified: brlcad/branches/dm-fb-merge/src/libdm/tests/dm_test.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/tests/dm_test.c       2020-04-21 
18:56:17 UTC (rev 75502)
+++ brlcad/branches/dm-fb-merge/src/libdm/tests/dm_test.c       2020-04-21 
19:20:48 UTC (rev 75503)
@@ -34,7 +34,11 @@
 
     bu_log("load msgs: %s\n", dm_init_msgs());
 
-    dm_list_backends(NULL);
+    struct bu_vls *blist = dm_list_types("\n   ");
+    bu_log("Available types:\n %s\n", bu_vls_cstr(blist));
+    bu_vls_free(blist);
+    BU_PUT(blist, struct bu_vls);
+
     int vtype;
     vtype = dm_valid_type("nu", NULL);
     bu_log("nu valid: %d\n", vtype);
@@ -58,7 +62,7 @@
     bu_log("dmp name: %s\n", dm_get_name(dmp));
     dm_close(dmp);
 
-    bu_log("recommended type: %s\n", dm_recommend_type(NULL));
+    bu_log("recommended type: %s\n", dm_bestXType(NULL));
 
     return 0;
 }

Modified: brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c      2020-04-21 
18:56:17 UTC (rev 75502)
+++ brlcad/branches/dm-fb-merge/src/libtclcad/tclcad_obj.c      2020-04-21 
19:20:48 UTC (rev 75503)
@@ -1487,7 +1487,7 @@
            int UNUSED(argc),
            const char **UNUSED(argv))
 {
-    struct bu_vls *list = dm_list_types(',');
+    struct bu_vls *list = dm_list_types(",");
     Tcl_SetResult(interp, bu_vls_addr(list), TCL_VOLATILE);
     bu_vls_free(list);
     BU_PUT(list, struct bu_vls);

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