Revision: 75498
http://sourceforge.net/p/brlcad/code/75498
Author: starseeker
Date: 2020-04-21 17:16:59 +0000 (Tue, 21 Apr 2020)
Log Message:
-----------
plugin aware type recognition
Modified Paths:
--------------
brlcad/branches/dm-fb-merge/include/dm.h
brlcad/branches/dm-fb-merge/src/libdm/dm_plugins.c
brlcad/branches/dm-fb-merge/src/libdm/tests/dm_test.c
Modified: brlcad/branches/dm-fb-merge/include/dm.h
===================================================================
--- brlcad/branches/dm-fb-merge/include/dm.h 2020-04-21 16:59:05 UTC (rev
75497)
+++ brlcad/branches/dm-fb-merge/include/dm.h 2020-04-21 17:16:59 UTC (rev
75498)
@@ -182,7 +182,8 @@
/* Test plugin functions */
DM_EXPORT extern void dm_list_backends(const char *separator);
DM_EXPORT extern int dm_valid_type(const char *name, const char *dpy_string);
-DM_EXPORT struct dm* dm_popen(void *interp, const char *type, int argc, const
char *argv[]);
+DM_EXPORT struct dm * dm_popen(void *interp, const char *type, int argc, const
char *argv[]);
+DM_EXPORT const char * dm_recommend_type(const char *dpy_string);
/* functions to make a dm struct hideable - will need to
* sort these out later */
Modified: brlcad/branches/dm-fb-merge/src/libdm/dm_plugins.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/dm_plugins.c 2020-04-21 16:59:05 UTC
(rev 75497)
+++ brlcad/branches/dm-fb-merge/src/libdm/dm_plugins.c 2020-04-21 17:16:59 UTC
(rev 75498)
@@ -181,7 +181,52 @@
return is_valid;
}
+/** dm_recommend_type determines what mged will normally
+ * use as the default display manager
+ */
+const char *
+dm_recommend_type(const char *dpy_string)
+{
+ static const char *priority_list[] = {"osgl", "wgl", "ogl", "X", "tk",
"nu"};
+ struct bu_ptbl plugins = BU_PTBL_INIT_ZERO;
+ struct bu_ptbl handles = BU_PTBL_INIT_ZERO;
+ int dm_cnt = dm_load_backends(&plugins, &handles);
+ if (!dm_cnt) {
+ bu_log("No display manager implementations found!\n");
+ return NULL;
+ }
+
+ const char *ret = NULL;
+
+ int i = 0;
+ const char *b = priority_list[i];
+ while (!BU_STR_EQUAL(b, "nu")) {
+ for (size_t j = 0; j < BU_PTBL_LEN(&plugins); j++) {
+ const struct dm *d = (const struct dm *)BU_PTBL_GET(&plugins, j);
+ if (BU_STR_EQUIV(b, dm_get_name(d))) {
+ if (d->i->dm_viable(dpy_string) == 1) {
+ ret = b;
+ break;
+ }
+ }
+ }
+ if (ret) {
+ break;
+ }
+ i++;
+ b = priority_list[i];
+ }
+
+ bu_ptbl_free(&plugins);
+ if (dm_close_backends(&handles)) {
+ bu_log("bu_dlclose failed to unload plugins.\n");
+ }
+ bu_ptbl_free(&handles);
+
+ return (ret) ? ret : b;
+}
+
/*
* Local Variables:
* tab-width: 8
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
16:59:05 UTC (rev 75497)
+++ brlcad/branches/dm-fb-merge/src/libdm/tests/dm_test.c 2020-04-21
17:16:59 UTC (rev 75498)
@@ -55,6 +55,7 @@
bu_log("dmp name: %s\n", dm_get_name(dmp));
dm_close(dmp);
+ bu_log("recommended type: %s\n", dm_recommend_type(NULL));
return 0;
}
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