summaryrefslogtreecommitdiff
path: root/modules.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules.c')
-rw-r--r--modules.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/modules.c b/modules.c
new file mode 100644
index 00000000..ddee1def
--- /dev/null
+++ b/modules.c
@@ -0,0 +1,137 @@
+/*
+ * Hardware Information, version 0.3
+ * Copyright (C) 2003 Leandro Pereira <leandro@linuxmag.com.br>
+ *
+ * May be modified and/or distributed under the terms of GNU GPL version 2.
+ *
+ */
+
+#include <gtk/gtk.h>
+
+#include "hardinfo.h"
+#include "modules.h"
+
+void hi_show_module_info(MainWindow *mainwindow, ModInfo *device)
+{
+ if(!device) return;
+
+ gtk_window_set_title(GTK_WINDOW(mainwindow->det_window->window), device->description);
+ detail_window_set_icon(mainwindow->det_window, IMG_PREFIX "module.png");
+ detail_window_set_dev_name(mainwindow->det_window, device->name);
+ detail_window_set_dev_type(mainwindow->det_window, device->description);
+
+ if (device->author && strlen(device->author)) {
+ detail_window_append_info(mainwindow->det_window, _("Author"),
+ device->author);
+ detail_window_append_separator(mainwindow->det_window);
+ }
+
+ if (device->license && strlen(device->license))
+ detail_window_append_info(mainwindow->det_window, _("License"),
+ device->license);
+
+ if (device->depends &&strlen(device->depends))
+ detail_window_append_info(mainwindow->det_window, _("Depends on"),
+ device->depends);
+
+}
+
+GtkWidget *module_get_widget(void)
+{
+#if 0
+ GtkWidget *vbox, *hbbox, *scroll, *clist, *btn;
+
+ vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
+ gtk_widget_show(vbox);
+
+ hbbox = gtk_hbutton_box_new();
+ gtk_container_set_border_width(GTK_CONTAINER(hbbox), 4);
+ gtk_widget_show(hbbox);
+ gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
+ gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbbox), 6);
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_END);
+
+ btn = gtk_button_new_from_stock(HI_DETAILS);
+ g_signal_connect(G_OBJECT(btn), "clicked",
+ (GCallback) detail_window_show, mainwindow);
+ gtk_widget_show(btn);
+ gtk_box_pack_end(GTK_BOX(hbbox), btn, FALSE, FALSE, 0);
+ mainwindow->details_button = btn;
+
+ scroll = gtk_scrolled_window_new(NULL, NULL);
+ gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ ctree = gtk_ctree_new(2, 0);
+ gtk_container_add(GTK_CONTAINER(scroll), ctree);
+ gtk_widget_set_usize(GTK_WIDGET(ctree), 400, 300);
+ gtk_ctree_set_expander_style(GTK_CTREE(ctree),
+ GTK_CTREE_EXPANDER_TRIANGLE);
+ gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_NONE);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), 0, 32);
+ gtk_clist_set_column_width(GTK_CLIST(ctree), 1, 32);
+ gtk_clist_set_row_height(GTK_CLIST(ctree), 18);
+ g_signal_connect(G_OBJECT(ctree), "tree-select-row",
+ (GCallback) hi_enable_details_button, mainwindow);
+ g_signal_connect(G_OBJECT(ctree), "tree-unselect-row",
+ (GCallback) hi_disable_details_button, mainwindow);
+
+
+ return vbox;
+#endif
+
+ return NULL;
+}
+
+#define SET_VAR(vname,var) \
+ if (!strncmp(buffer, vname, strlen(vname))) { \
+ gchar *_b = buffer; \
+ while (*_b && *_b != ':') _b++; _b++; \
+ while (*_b && (*_b == ' ' || *_b == '\t')) _b++; \
+ modinfo->var = g_strdup(g_strstrip(_b)); \
+ }
+
+ModInfo *hi_scan_modules(void)
+{
+ FILE *lsmod;
+ gchar buffer[256];
+ ModInfo *modinfo = NULL, *mod = NULL;
+
+ lsmod = popen("/sbin/lsmod", "r");
+ if(!lsmod) return NULL;
+
+ fgets(buffer, 256, lsmod); /* Discards the first line */
+
+ while(fgets(buffer, 256, lsmod)){
+ gchar *start, *buf;
+ FILE *modi;
+
+ start = buf = buffer;
+
+ walk_until_inclusive(' ');
+ *buf = 0;
+
+ modinfo = g_new0(ModInfo, 1);
+
+ modinfo->name = g_strdup(start);
+
+ buf = g_strdup_printf("/sbin/modinfo %s", start);
+ modi = popen(buf, "r");
+ while (fgets(buffer, 256, modi)) {
+ SET_VAR("author", author);
+ SET_VAR("description", description);
+ SET_VAR("license", license);
+ SET_VAR("depends", depends);
+ }
+ pclose(modi);
+
+ modinfo->next = mod;
+ mod = modinfo;
+ }
+ pclose(lsmod);
+
+ return mod;
+}