summaryrefslogtreecommitdiff
path: root/ide.c
diff options
context:
space:
mode:
Diffstat (limited to 'ide.c')
-rw-r--r--ide.c142
1 files changed, 142 insertions, 0 deletions
diff --git a/ide.c b/ide.c
new file mode 100644
index 00000000..c24305ec
--- /dev/null
+++ b/ide.c
@@ -0,0 +1,142 @@
+/*
+ * 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 "hardinfo.h"
+#include "ide.h"
+
+#include <stdlib.h>
+
+IDEDevice *hi_scan_ide(void)
+{
+ FILE *proc_ide;
+ gchar *device, iface;
+ gint n=0, i=0;
+ struct stat st;
+ IDEDevice *ide_dev, *ide;
+
+ ide = NULL;
+
+ for (i=0; i<=16; i++) {
+ iface='a'+i;
+ device = g_strdup_printf("/proc/ide/hd%c/model", iface);
+ if (!stat(device, &st)) {
+ gchar buf[64];
+
+ ide_dev = g_new0(IDEDevice, 1);
+ ide_dev->next = ide;
+ ide = ide_dev;
+
+ proc_ide = fopen(device, "r");
+ fgets(buf, 64, proc_ide);
+ fclose(proc_ide);
+
+ buf[strlen(buf)-1]=0;
+
+ ide_dev->model = g_strdup(buf);
+
+ g_free(device);
+
+ device = g_strdup_printf("/proc/ide/hd%c/media", iface);
+ proc_ide = fopen(device, "r");
+ fgets(buf, 64, proc_ide);
+ fclose(proc_ide);
+ buf[strlen(buf)-1]=0;
+
+ ide_dev->media = g_strdup(buf);
+
+ g_free(device);
+
+ device = g_strdup_printf("/proc/ide/hd%c/cache", iface);
+ if (!stat(device, &st)) {
+ proc_ide = fopen(device, "r");
+ fgets(buf, 64, proc_ide);
+ fclose(proc_ide);
+
+ ide_dev->cache = atoi(buf);
+ }
+ n++;
+ }
+ g_free(device);
+ }
+
+ return ide;
+}
+
+void hi_show_ide_info(MainWindow *mainwindow, IDEDevice *device)
+{
+ GtkWidget *hbox, *vbox, *label;
+ static struct {
+ char *type;
+ char *label;
+ char *icon;
+ } type2icon[] = {
+ {"cdrom", "CD-ROM", "cd.png"},
+ {"disk", "Hard Disk", "hdd.png"}
+ };
+ int i;
+ gchar *buf;
+#ifdef GTK2
+ GtkWidget *pixmap;
+#endif
+
+ if(!device) return;
+
+ for (i = 0; type2icon[i].type != NULL; ++i) {
+ if (!strcmp(device->media, type2icon[i].type)) break;
+ }
+
+#ifdef GTK2
+ buf = g_strdup_printf("%s%s", IMG_PREFIX, type2icon[i].icon);
+ pixmap = gtk_image_new_from_file(buf);
+ gtk_widget_show(pixmap);
+
+ g_free(buf);
+#endif
+ 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;
+
+ buf = g_strdup_printf(_("ATA/IDE %s Device"), type2icon[i].label);
+ gtk_frame_set_label(GTK_FRAME(mainwindow->frame), buf);
+ g_free(buf);
+
+#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->model);
+ 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->model);
+#endif
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+
+ if (device->cache) {
+ buf = g_strdup_printf(_("Cache: %d KB"), device->cache);
+ label = gtk_label_new(buf);
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+ g_free(buf);
+ }
+}