diff options
Diffstat (limited to 'hardinfo/vendor.c')
-rw-r--r-- | hardinfo/vendor.c | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/hardinfo/vendor.c b/hardinfo/vendor.c new file mode 100644 index 00000000..86dba97a --- /dev/null +++ b/hardinfo/vendor.c @@ -0,0 +1,195 @@ +/* + * HardInfo - Displays System Information + * Copyright (C) 2003-2009 Leandro A. F. Pereira <leandro@hardinfo.org> + * + * List of vendors based on GtkSysInfo (c) Pissens Sebastien. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <string.h> +#include <gtk/gtk.h> + +#include "vendor.h" +#include "syncmanager.h" +#include "config.h" +#include "hardinfo.h" + +static const Vendor vendors[] = { + {"ATI", "ATI Technologies", "www.ati.com"}, + {"nVidia", "NVIDIA", "www.nvidia.com"}, + {"3Com", "3Com", "www.3com.com"}, + {"Intel", "Intel", "www.intel.com"}, + {"Cirrus Logic", "Cirrus Logic", "www.cirrus.com"}, + {"VIA Technologies", "VIA Technologies", "www.via.com.tw"}, + {"VIA", "VIA Technologies", "www.via.com.tw"}, + {"hp", "Hewlett-Packard", "www.hp.com"}, + {"NEC Corporation", "NEC Coporation", "www.nec.com"}, + {"MAXTOR", "MAXTOR", "www.maxtor.com"}, + {"SAMSUNG", "SAMSUNG", "www.samsung.com"}, + {"PIONEER", "PIONEER", "www.pioneer-eur.com"}, + {"PLEXTOR", "PLEXTOR", "www.plextor.be"}, + {"Realtek Semiconductor", "Realtek", "www.realtek.com.tw"}, + {"TOSHIBA", "TOSHIBA", "www.toshiba.com"}, + {"LITE-ON", "LITE-ON", "www.liteonit.com"}, + {"WDC", "Western Digital", "www.wdc.com"}, + {"HL-DT-ST", "LG Electronics", "www.lge.com"}, + {"ST", "SEAGATE", "www.seagate.com"}, + {"Lexmark", "Lexmark", "www.lexmark.com"}, + {"_NEC", "NEC Corporation", "www.nec.com"}, + {"Creative Labs", "Creative Labs", "www.creative.com"}, + {"Brooktree", "Conexant", "www.brooktree.com"}, + {"Atheros", "Atheros Communications", "www.atheros.com"}, + {"MATSHITA", "Panasonic", "www.panasonic.com"}, + {"Silicon Image", "Silicon Image", "www.siliconimage.com"}, + {"Silicon Integrated Image", "Silicon Image", "www.siliconimage.com"}, + {"KYE", "KYE Systems", "www.genius-kye.com"}, + {"Broadcom", "Broadcom", "www.broadcom.com"}, + {"Apple", "Apple", "www.apple.com"}, + {"IBM", "IBM", "www.ibm.com"}, + {"Dell", "Dell Computer", "www.dell.com"}, + {"Logitech", "Logitech International", "www.logitech.com"}, + {"FUJITSU", "Fujitsu", "www.fujitsu.com"}, + {"CDU", "Sony", "www.sony.com"}, + {"SanDisk", "SanDisk", "www.sandisk.com"}, + {"ExcelStor", "ExcelStor Technology", "www.excelstor.com"}, + {"D-Link", "D-Link", "www.dlink.com.tw"}, + {"Giga-byte", "Gigabyte Technology", "www.gigabyte.com.tw"}, + {"Gigabyte", "Gigabyte Technology", "www.gigabyte.com.tw"}, + {"C-Media", "C-Media Electronics", "www.cmedia.com.tw"}, + {"Avermedia", "AVerMedia Technologies", "www.aver.com"}, + {"Philips", "Philips", "www.philips.com"}, + {"RaLink", "Ralink Technology", "www.ralinktech.com"}, + {"Siemens", "Siemens AG", "www.siemens.com"}, + {"HP", "Hewlett-Packard", "www.hp.com"}, + {"Hewlett-Packard", "Hewlett-Packard", "www.hp.com"}, + {"TEAC", "TEAC America", "www.teac.com"}, + {"Microsoft", "Microsoft", "www.microsoft.com"}, + {"Memorex", "Memorex Products", "www.memorex.com"}, + {"eMPIA", "eMPIA Technology", "www.empiatech.com.tw"}, + {"Canon", "Canon", "www.canon.com"}, + {"A4Tech", "A4tech", "www.a4tech.com"}, + {"ALCOR", "Alcor", "www.alcor.org"}, + {"Vimicro", "Vimicro", "www.vimicro.com"}, + {"OTi", "Ours Technology", "www.oti.com.tw"}, + {"BENQ", "BenQ", "www.benq.com"}, + {"Acer", "Acer", "www.acer.com"}, + {"QUANTUM", "Quantum", "www.quantum.com"}, + {"Kingston", "Kingston", "www.kingston.com"}, + {"Chicony", "Chicony", "www.chicony.com.tw"}, + {"Genius", "Genius", "www.genius.ru"}, + /* BIOS manufacturers */ + {"American Megatrends", "American Megatrends", "www.ami.com"}, + {"Award", "Award Software International", "www.award-bios.com"}, + {"Phoenix", "Phoenix Technologies", "www.phoenix.com"}, +}; + +static GSList *vendor_list = NULL; + +void vendor_init(void) +{ + gint i; + gchar *path; + static SyncEntry se = { + .fancy_name = "Update vendor list", + .name = "RecvVendorList", + .save_to = "vendor.conf", + .get_data = NULL + }; + + DEBUG("initializing vendor list"); + sync_manager_add_entry(&se); + + path = g_build_filename(g_get_home_dir(), ".hardinfo", "vendor.conf", NULL); + if (!g_file_test(path, G_FILE_TEST_EXISTS)) { + DEBUG("local vendor.conf not found, trying system-wise"); + g_free(path); + path = g_build_filename(params.path_data, "vendor.conf", NULL); + } + + if (g_file_test(path, G_FILE_TEST_EXISTS)) { + GKeyFile *vendors; + gchar *tmp; + gint num_vendors; + + DEBUG("loading %s", path); + + vendors = g_key_file_new(); + if (g_key_file_load_from_file(vendors, path, 0, NULL)) { + num_vendors = g_key_file_get_integer(vendors, "vendors", "number", NULL); + + for (i = num_vendors - 1; i >= 0; i--) { + Vendor *v = g_new0(Vendor, 1); + + tmp = g_strdup_printf("vendor%d", i); + + v->id = g_key_file_get_string(vendors, tmp, "id", NULL); + v->name = g_key_file_get_string(vendors, tmp, "name", NULL); + v->url = g_key_file_get_string(vendors, tmp, "url", NULL); + + vendor_list = g_slist_prepend(vendor_list, v); + + g_free(tmp); + } + } + + g_key_file_free(vendors); + } else { + DEBUG("system-wise vendor.conf not found, using internal database"); + + for (i = G_N_ELEMENTS(vendors) - 1; i >= 0; i--) { + vendor_list = g_slist_prepend(vendor_list, (gpointer) &vendors[i]); + } + } + + g_free(path); +} + +const gchar *vendor_get_name(const gchar * id) +{ + GSList *vendor; + + if (!id) { + return NULL; + } + + for (vendor = vendor_list; vendor; vendor = vendor->next) { + Vendor *v = (Vendor *)vendor->data; + + if (v && v->id && strstr(id, v->id)) { + return g_strdup(v->name); + } + } + + return id; +} + +const gchar *vendor_get_url(const gchar * id) +{ + GSList *vendor; + + if (!id) { + return NULL; + } + + for (vendor = vendor_list; vendor; vendor = vendor->next) { + Vendor *v = (Vendor *)vendor->data; + + if (v && v->id && strstr(id, v->id)) { + return g_strdup(v->url); + } + } + + return NULL; +} |