/* * Hardware Information, version 0.3 * Copyright (C) 2003 Leandro Pereira * * May be modified and/or distributed under the terms of GNU GPL version 2. * */ #include "hardinfo.h" #include "ide.h" #include 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("%s", 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); } }