diff options
Diffstat (limited to 'ide.c')
-rw-r--r-- | ide.c | 142 |
1 files changed, 142 insertions, 0 deletions
@@ -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); + } +} |