diff options
Diffstat (limited to 'isapnp.c')
-rw-r--r-- | isapnp.c | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/isapnp.c b/isapnp.c new file mode 100644 index 00000000..39163349 --- /dev/null +++ b/isapnp.c @@ -0,0 +1,130 @@ +/* + * Hardware Information, version 0.3.1b + * Copyright (C) 2003 Leandro Pereira <leandro@linuxmag.com.br> + * + * May be modified and/or distributed under the terms of GNU GPL version 2. + * + */ + +#include "hardinfo.h" +#include "isapnp.h" + +ISADevice *hi_scan_isapnp(void) +{ + FILE *proc_isapnp; + gchar buffer[256], *buf; + gint n=0; + ISADevice *isa_dev, *isa; + struct stat st; + + isa = NULL; + + if(stat("/proc/isapnp", &st)) return NULL; + + proc_isapnp = fopen("/proc/isapnp", "r"); + while(fgets(buffer, 256, proc_isapnp)){ + buf = g_strstrip(buffer); + if(!strncmp(buf, "Card", 4)){ + gboolean lock = FALSE; + gfloat pnpversion, prodversion; + gint card_id; + gpointer start, end; + + sscanf(buf, "Card %d", &card_id); + + for (; buf != NULL; buf++) { + if (lock && *buf == '\'') { + end = buf; + break; + } else if (!lock && *buf == ':') { + start = buf+1; + lock = TRUE; + } + } + buf+=2; + + sscanf(buf, "PnP version %f Product version %f", &pnpversion, &prodversion); + + buf = end; + *buf=0; + buf = start; + + isa_dev = g_new0(ISADevice, 1); + + isa_dev->next = isa; + isa = isa_dev; + + isa_dev->pnpversion = pnpversion; + isa_dev->prodversion = prodversion; + isa_dev->card_id = card_id; + + isa_dev->card = g_strdup(buf); + + n++; + } + } + fclose(proc_isapnp); + + return isa; +} + +void hi_show_isa_info(MainWindow *mainwindow, ISADevice *device) +{ + GtkWidget *hbox, *vbox, *label; + gchar *buf; +#ifdef GTK2 + GtkWidget *pixmap; + + pixmap = gtk_image_new_from_file(IMG_PREFIX "pci.png"); + gtk_widget_show(pixmap); +#endif + + if(!device) return; + + hbox = gtk_hbox_new(FALSE, 2); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 4); + gtk_widget_show(hbox); + + if(mainwindow->framec) + gtk_widget_destroy(mainwindow->framec); + + gtk_container_add(GTK_CONTAINER(mainwindow->frame), hbox); + mainwindow->framec = hbox; + + gtk_frame_set_label(GTK_FRAME(mainwindow->frame), _("ISA Plug and Play Device")); + +#ifdef GTK2 + gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, FALSE, 0); +#endif + + vbox = gtk_vbox_new(FALSE, 2); + gtk_widget_show(vbox); + gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); + +#ifdef GTK2 + buf = g_strdup_printf("<b>%s</b>", device->card); + label = gtk_label_new(buf); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + gtk_label_set_selectable(GTK_LABEL(label), TRUE); + + g_free(buf); +#else + label = gtk_label_new(device->card); +#endif + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + buf = g_strdup_printf(_("Card ID: %d"), device->card_id); + label = gtk_label_new(buf); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + g_free(buf); + + buf = g_strdup_printf(_("PnP version: %.2f, Product version: %.2f"), + device->pnpversion, device->prodversion); + label = gtk_label_new(buf); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + g_free(buf); +} + |