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