/* * 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); } g_free(device); device = g_strdup_printf("/proc/ide/hd%c/geometry", iface); if (!stat(device, &st)) { gchar *tmp; proc_ide = fopen(device, "r"); fgets(buf, 64, proc_ide); for (tmp = buf; *tmp; tmp++) { if (*tmp >= '0' && *tmp <= '9') break; } ide_dev->phy_geometry = g_strdup(g_strstrip(tmp)); fgets(buf, 64, proc_ide); for (tmp = buf; *tmp; tmp++) { if (*tmp >= '0' && *tmp <= '9') break; } ide_dev->log_geometry = g_strdup(g_strstrip(tmp)); fclose(proc_ide); } g_free(device); n++; } else g_free(device); } return ide; } void hi_show_ide_info(MainWindow *mainwindow, IDEDevice *device) { static struct { char *type; char *label; char *icon; } type2icon[] = { {"cdrom", "CD-ROM", "cd.png"}, {"disk", "Hard Disk", "hdd.png"} }; int i; gchar *buf; if(!device) return; for (i = 0; type2icon[i].type != NULL; ++i) { if (!strcmp(device->media, type2icon[i].type)) break; } buf = g_strdup_printf("%s%s", IMG_PREFIX, type2icon[i].icon); detail_window_set_icon(mainwindow->det_window, buf); g_free(buf); buf = g_strdup_printf(_("ATA/IDE %s Device"), type2icon[i].label); gtk_window_set_title(GTK_WINDOW(mainwindow->det_window->window), buf); detail_window_set_dev_type(mainwindow->det_window, buf); g_free(buf); detail_window_set_dev_name(mainwindow->det_window, device->model); if (device->cache) { detail_window_append_info_int(mainwindow->det_window, _("Cache (kb)"), device->cache, FALSE); } if (device->phy_geometry) { detail_window_append_info(mainwindow->det_window, _("Physical geometry"), device->phy_geometry); } if (device->log_geometry) { detail_window_append_info(mainwindow->det_window, _("Logical geometry"), device->log_geometry); } }