summaryrefslogtreecommitdiffstats
path: root/kcontrol/info/info_hpux.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/info/info_hpux.cpp')
-rw-r--r--kcontrol/info/info_hpux.cpp785
1 files changed, 785 insertions, 0 deletions
diff --git a/kcontrol/info/info_hpux.cpp b/kcontrol/info/info_hpux.cpp
new file mode 100644
index 000000000..dc0684ab5
--- /dev/null
+++ b/kcontrol/info/info_hpux.cpp
@@ -0,0 +1,785 @@
+
+/*
+ !!!!! this file will be included by info.cpp !!!!!
+
+ Mostly written 1998-1999 by Helge Deller (deller@gmx.de),
+ with some pieces of code from Aubert Pierre.
+
+ Last modified: done:
+ 1999-06-21 added more models to the lookup-table (deller)
+ 1999-06-18 added support for 64-Bit HP-UX in CPU-detection(deller)
+ 1999-05-04 added audio(alib)-support (deller)
+ 1999-04-27 [tested with HP-UX 10.20 (HP9000/715/64-EISA)]
+ added support for nearly all categories
+ (means: not finished!)
+ 1998-11-01 first, nearly empty version (deller)
+ with a little source for CPU from Aubert Pierre
+*/
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/pstat.h>
+#include <sys/utsname.h>
+#include <sys/statvfs.h>
+#include <sys/vfs.h>
+#include <fstab.h>
+#include <stdlib.h>
+#include <qfile.h>
+#include <qfontmetrics.h>
+#include <qtextstream.h>
+
+
+#define INFO_CPU_AVAILABLE
+# define INFO_CPU_MODEL "/bin/model" // as pipe !!
+
+#define INFO_IRQ_AVAILABLE
+
+#define INFO_DMA_AVAILABLE
+
+#define INFO_PCI_AVAILABLE
+# define INFO_PCI "" // Please, who know it ????
+# define INFO_PCI_EISA "/etc/eisa/system.sci" // File !
+
+#define INFO_IOPORTS_AVAILABLE
+# define INFO_IOPORTS_1 "/etc/dmesg" // as pipe !
+# define INFO_IOPORTS_2 "/usr/sbin/dmesg" // as pipe !
+
+#define INFO_SOUND_AVAILABLE
+
+#define INFO_DEVICES_AVAILABLE
+# define INFO_DEVICES "/etc/ioscan" // as pipe !!
+
+#define INFO_SCSI_AVAILABLE
+
+#define INFO_PARTITIONS_AVAILABLE
+# define INFO_PARTITIONS_1 FSTAB // = "/etc/fstab" (in fstab.h)
+# define INFO_PARTITIONS_2 "/etc/checklist"
+
+#define INFO_XSERVER_AVAILABLE
+
+
+
+/* The following table is from an HP-UX 10.20 System
+ build out of the files
+ "/usr/lib/sched.models"
+ or
+ "/opt/langtools/lib/sched.models"
+ If you have more entries, then please add them or send them to me!
+*/
+
+// entries for PA_REVISION[]
+enum V_ENTRIES
+ { V_1x0,
+ V_1x1, V_1x1a, V_1x1b, V_1x1c, V_1x1d, V_1x1e,
+ V_2x0,
+ V_LAST };
+
+static const char PA_REVISION[V_LAST][7]
+ = { "1.0",
+ "1.1", "1.1a", "1.1b", "1.1c", "1.1d", "1.1e",
+ "2.0" };
+
+// entries for PA_NAME[]
+enum PA_ENTRIES
+ { PA7000,
+ PA7100, PA7100LC, PA7200, PA7300,
+ PA8000, PA8200, PA8500,
+ PARISC_PA_LAST };
+
+static const char PA_NAME[PARISC_PA_LAST][11]
+ = { "PA7000",
+ "PA7100", "PA7100LC", "PA7200", "PA7300",
+ "PA8000", "PA8200", "PA8500" };
+
+struct _type_LOOKUPTABLE {
+ char Name[8];
+ unsigned short parisc_rev; // = enum V_ENTRIES
+ unsigned short parisc_name; // = enum PA_ENTRIES
+};
+
+
+static const struct _type_LOOKUPTABLE PA_LOOKUPTABLE[] = {
+/* VERSION A.00.07
+ (there seems to exist several different files with same version-number !)*/
+{ "600" ,V_1x0 ,PA7000 },
+{ "635" ,V_1x0 ,PA7000 },
+{ "645" ,V_1x0 ,PA7000 },
+{ "700" ,V_1x1 ,PA7000 },
+{ "705" ,V_1x1a ,PA7000 },
+{ "710" ,V_1x1a ,PA7000 },
+{ "712" ,V_1x1c ,PA7100LC },
+{ "715" ,V_1x1c ,PA7100LC },
+{ "720" ,V_1x1a ,PA7000 },
+{ "722" ,V_1x1c ,PA7100LC },
+{ "725" ,V_1x1c ,PA7100LC },
+{ "728" ,V_1x1d ,PA7200 },
+{ "730" ,V_1x1a ,PA7000 },
+{ "735" ,V_1x1b ,PA7100 },
+{ "742" ,V_1x1b ,PA7100 },
+{ "743" ,V_1x1b ,PA7100 }, // or a 1.1c,PA7100LC !!
+{ "744" ,V_1x1e ,PA7300 },
+{ "745" ,V_1x1b ,PA7100 },
+{ "747" ,V_1x1b ,PA7100 },
+{ "750" ,V_1x1a ,PA7000 },
+{ "755" ,V_1x1b ,PA7100 },
+{ "770" ,V_1x1d ,PA7200 },
+{ "777" ,V_1x1d ,PA7200 },
+{ "778" ,V_1x1e ,PA7300 },
+{ "779" ,V_1x1e ,PA7300 },
+{ "780" ,V_2x0 ,PA8000 },
+{ "781" ,V_2x0 ,PA8000 },
+{ "782" ,V_2x0 ,PA8200 },
+{ "783" ,V_2x0 ,PA8500 },
+{ "785" ,V_2x0 ,PA8500 },
+{ "800" ,V_1x0 ,PA7000 }, // and one with: 2.0 / PA8000
+{ "801" ,V_1x1c ,PA7100LC },
+{ "802" ,V_2x0 ,PA8000 },
+{ "803" ,V_1x1e ,PA7300 },
+{ "804" ,V_2x0 ,PA8000 },
+{ "806" ,V_1x1c ,PA7100LC },
+{ "807" ,V_1x1a ,PA7000 },
+{ "808" ,V_1x0 ,PA7000 },
+{ "809" ,V_1x1d ,PA7200 },
+{ "810" ,V_2x0 ,PA8000 },
+{ "811" ,V_1x1c ,PA7100LC },
+{ "813" ,V_1x1e ,PA7300 },
+{ "815" ,V_1x0 ,PA7000 },
+{ "816" ,V_1x1c ,PA7100LC },
+{ "817" ,V_1x1a ,PA7000 },
+{ "819" ,V_1x1d ,PA7200 },
+{ "820" ,V_2x0 ,PA8000 },
+{ "821" ,V_1x1d ,PA7200 },
+{ "822" ,V_1x0 ,PA7000 },
+{ "825" ,V_1x0 ,PA7000 },
+{ "826" ,V_1x1c ,PA7100LC },
+{ "827" ,V_1x1a ,PA7000 },
+{ "829" ,V_1x1d ,PA7200 },
+{ "831" ,V_1x1d ,PA7200 },
+{ "832" ,V_1x0 ,PA7000 },
+{ "834" ,V_1x0 ,PA7000 },
+{ "835" ,V_1x0 ,PA7000 },
+{ "837" ,V_1x1a ,PA7000 },
+{ "839" ,V_1x1d ,PA7200 },
+{ "840" ,V_1x0 ,PA7000 },
+{ "841" ,V_1x1d ,PA7200 },
+{ "842" ,V_1x0 ,PA7000 },
+{ "845" ,V_1x0 ,PA7000 },
+{ "847" ,V_1x1a ,PA7000 },
+{ "849" ,V_1x1d ,PA7200 },
+{ "850" ,V_1x0 ,PA7000 },
+{ "851" ,V_1x1d ,PA7200 },
+{ "852" ,V_1x0 ,PA7000 },
+{ "855" ,V_1x0 ,PA7000 },
+{ "856" ,V_1x1c ,PA7100LC },
+{ "857" ,V_1x1a ,PA7000 },
+{ "859" ,V_1x1d ,PA7200 },
+{ "860" ,V_1x0 ,PA7000 },
+{ "861" ,V_2x0 ,PA8000 },
+{ "865" ,V_1x0 ,PA7000 },
+{ "869" ,V_1x1d ,PA7200 },
+{ "870" ,V_1x0 ,PA7000 },
+{ "871" ,V_2x0 ,PA8000 },
+{ "877" ,V_1x1a ,PA7000 },
+{ "879" ,V_2x0 ,PA8000 },
+{ "887" ,V_1x1b ,PA7100 },
+{ "889" ,V_2x0 ,PA8000 },
+{ "890" ,V_1x0 ,PA7000 },
+{ "891" ,V_1x1b ,PA7100 },
+{ "892" ,V_1x1b ,PA7100 },
+{ "893" ,V_2x0 ,PA8000 },
+{ "895" ,V_2x0 ,PA8000 },
+{ "896" ,V_2x0 ,PA8000 },
+{ "897" ,V_1x1b ,PA7100 },
+{ "898" ,V_2x0 ,PA8200 },
+{ "899" ,V_2x0 ,PA8200 },
+{ "900" ,V_1x0 ,PA7000 },
+{ "B115" ,V_1x1e ,PA7300 },
+{ "B120" ,V_1x1e ,PA7300 },
+{ "B132L" ,V_1x1e ,PA7300 },
+{ "B160L" ,V_1x1e ,PA7300 },
+{ "B180L" ,V_1x1e ,PA7300 },
+{ "C100" ,V_1x1d ,PA7200 },
+{ "C110" ,V_1x1d ,PA7200 },
+{ "C115" ,V_1x1e ,PA7300 },
+{ "C120" ,V_1x1e ,PA7300 },
+{ "C130" ,V_2x0 ,PA8000 },
+{ "C140" ,V_2x0 ,PA8000 },
+{ "C160L" ,V_1x1e ,PA7300 },
+{ "C160" ,V_2x0 ,PA8000 },
+{ "C180L" ,V_1x1e ,PA7300 },
+{ "C180-XP" ,V_2x0 ,PA8000 },
+{ "C180" ,V_2x0 ,PA8000 },
+{ "C200+" ,V_2x0 ,PA8200 },
+{ "C230+" ,V_2x0 ,PA8200 },
+{ "C240+" ,V_2x0 ,PA8200 },
+{ "CB260" ,V_2x0 ,PA8200 },
+{ "D200" ,V_1x1d ,PA7200 }, // or: 1.1c, PA7100LC
+{ "D210" ,V_1x1d ,PA7200 }, // or: 1.1c, PA7100LC
+{ "D220" ,V_1x1e ,PA7300 },
+{ "D230" ,V_1x1e ,PA7300 },
+{ "D250" ,V_1x1d ,PA7200 },
+{ "D260" ,V_1x1d ,PA7200 },
+{ "D270" ,V_2x0 ,PA8000 },
+{ "D280" ,V_2x0 ,PA8000 },
+{ "D310" ,V_1x1c ,PA7100LC },
+{ "D320" ,V_1x1e ,PA7300 },
+{ "D330" ,V_1x1e ,PA7300 },
+{ "D350" ,V_1x1d ,PA7200 },
+{ "D360" ,V_1x1d ,PA7200 },
+{ "D370" ,V_2x0 ,PA8000 },
+{ "D380" ,V_2x0 ,PA8000 },
+{ "D400" ,V_1x1d ,PA7200 },
+{ "D410" ,V_1x1d ,PA7200 },
+{ "D650" ,V_2x0 ,PA8000 },
+{ "DX0" ,V_1x1c ,PA7100LC },
+{ "DX5" ,V_1x1c ,PA7100LC },
+{ "DXO" ,V_1x1c ,PA7100LC },
+{ "E25" ,V_1x1c ,PA7100LC },
+{ "E35" ,V_1x1c ,PA7100LC },
+{ "E45" ,V_1x1c ,PA7100LC },
+{ "E55" ,V_1x1c ,PA7100LC },
+{ "F10" ,V_1x1a ,PA7000 },
+{ "F20" ,V_1x1a ,PA7000 },
+{ "F30" ,V_1x1a ,PA7000 },
+{ "G30" ,V_1x1a ,PA7000 },
+{ "G40" ,V_1x1a ,PA7000 },
+{ "G50" ,V_1x1b ,PA7100 },
+{ "G60" ,V_1x1b ,PA7100 },
+{ "G70" ,V_1x1b ,PA7100 },
+{ "H20" ,V_1x1a ,PA7000 },
+{ "H30" ,V_1x1a ,PA7000 },
+{ "H40" ,V_1x1a ,PA7000 },
+{ "H50" ,V_1x1b ,PA7100 },
+{ "H60" ,V_1x1b ,PA7100 },
+{ "H70" ,V_1x1b ,PA7100 },
+{ "I30" ,V_1x1a ,PA7000 },
+{ "I40" ,V_1x1a ,PA7000 },
+{ "I50" ,V_1x1b ,PA7100 },
+{ "I60" ,V_1x1b ,PA7100 },
+{ "I70" ,V_1x1b ,PA7100 },
+{ "J200" ,V_1x1d ,PA7200 },
+{ "J210XC" ,V_1x1d ,PA7200 },
+{ "J210" ,V_1x1d ,PA7200 },
+{ "J220" ,V_2x0 ,PA8000 },
+{ "J2240" ,V_2x0 ,PA8200 },
+{ "J280" ,V_2x0 ,PA8000 },
+{ "J282" ,V_2x0 ,PA8000 },
+{ "J400" ,V_2x0 ,PA8000 },
+{ "J410" ,V_2x0 ,PA8000 },
+{ "K100" ,V_1x1d ,PA7200 },
+{ "K200" ,V_1x1d ,PA7200 },
+{ "K210" ,V_1x1d ,PA7200 },
+{ "K230" ,V_1x1d ,PA7200 },
+{ "K250" ,V_2x0 ,PA8000 },
+{ "K260" ,V_2x0 ,PA8000 },
+{ "K370" ,V_2x0 ,PA8200 },
+{ "K380" ,V_2x0 ,PA8200 },
+{ "K400" ,V_1x1d ,PA7200 },
+{ "K410" ,V_1x1d ,PA7200 },
+{ "K420" ,V_1x1d ,PA7200 },
+{ "K430" ,V_1x1d ,PA7200 },
+{ "K450" ,V_2x0 ,PA8000 },
+{ "K460" ,V_2x0 ,PA8000 },
+{ "K470" ,V_2x0 ,PA8200 },
+{ "K570" ,V_2x0 ,PA8200 },
+{ "K580" ,V_2x0 ,PA8200 },
+{ "S700i" ,V_1x1e ,PA7300 },
+{ "S715" ,V_1x1e ,PA7300 },
+{ "S744" ,V_1x1e ,PA7300 },
+{ "S760" ,V_1x1e ,PA7300 },
+{ "T500" ,V_1x1c ,PA7100LC }, // or: 1.1b, PA7100
+{ "T520" ,V_1x1b ,PA7100 },
+{ "T540" ,V_2x0 ,PA8000 },
+{ "T600" ,V_2x0 ,PA8000 },
+{ "V2000" ,V_2x0 ,PA8000 },
+{ "V2200" ,V_2x0 ,PA8200 },
+{ "V2250" ,V_2x0 ,PA8200 },
+{ "V2500" ,V_2x0 ,PA8500 },
+
+{ "" ,0 ,0 } /* Last Entry has to be empty. */
+};
+
+
+
+/* Helper-Functions */
+
+// Value() is defined in info.cpp !!!
+
+static bool Find_in_LOOKUPTABLE( QListView *lBox, char *machine )
+{ char *Machine;
+ int len;
+ const struct _type_LOOKUPTABLE *Entry = PA_LOOKUPTABLE;
+ QString str;
+ QListViewItem* olditem = 0;
+
+
+ Machine = machine; // machine is like: "9000/715/D"
+ while ((*Machine) && (*Machine!='/'))
+ ++Machine;
+
+ if (*Machine)
+ ++Machine;
+ else
+ Machine=machine;
+
+ len = strlen(Machine);
+
+ while (Entry->Name[0])
+ { if (strncmp(Entry->Name,Machine,len)==0)
+ {
+ olditem = new QListViewItem(lBox, olditem, i18n("PA-RISC Processor"),
+ QString(PA_NAME[Entry->parisc_name]));
+ olditem = new QListViewItem(lBox, olditem, i18n("PA-RISC Revision"),
+ QString("PA-RISC ") + QString(PA_REVISION[Entry->parisc_rev]));
+ return true;
+ }
+ else
+ ++Entry; // next Entry !
+ }
+
+ return false;
+}
+
+
+/* all following functions should return true, when the Information
+ was filled into the lBox-Widget.
+ returning false indicates, that information was not available.
+*/
+
+
+bool GetInfo_CPU( QListView *lBox )
+{
+ FILE *pipe;
+ QFile *model;
+
+ struct pst_dynamic psd;
+ struct pst_static pst;
+ struct pst_processor pro;
+ struct utsname info;
+ QString str,str2;
+ QListViewItem* olditem = 0;
+ int maxwidth,i;
+
+ if((pstat_getstatic(&pst, sizeof(pst), (size_t)1, 0) == -1) ||
+ (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0)== -1)) {
+ *GetInfo_ErrorString = i18n("Could not get Information."); /* Error */
+ return false;
+ }
+
+ maxwidth = 0;
+ lBox->addColumn(i18n("Information") );
+ lBox->addColumn(i18n("Value") );
+
+ uname(&info);
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Machine"), info.machine);
+
+ model = new QFile(INFO_CPU_MODEL);
+ if (model->exists())
+ { if ((pipe = popen(INFO_CPU_MODEL, "r")))
+ { QTextStream *t = new QTextStream(pipe, IO_ReadOnly);
+ str = t->readLine();
+ olditem = new QListViewItem(lBox, olditem, i18n("Model"), str);
+ delete t;
+ }
+ delete pipe;
+ }
+ delete model;
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Machine Identification Number"),
+ strlen(info.__idnumber) ? QString(info.__idnumber) : i18n("(none)") );
+
+ if (psd.psd_proc_cnt<=0)
+ psd.psd_proc_cnt=1; // Minimum one CPU !
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Number of Active Processors"),
+ Value(psd.psd_proc_cnt));
+
+ pstat_getprocessor( &pro, sizeof(pro), 1, 0 );
+ olditem = new QListViewItem(lBox, olditem, i18n("CPU Clock"),
+ Value(pro.psp_iticksperclktick/10000) + " " + i18n("MHz"));
+
+ switch(sysconf(_SC_CPU_VERSION))
+ { case CPU_HP_MC68020: str2 = "Motorola 68020"; break;
+ case CPU_HP_MC68030: str2 = "Motorola 68030"; break;
+ case CPU_HP_MC68040: str2 = "Motorola 68040"; break;
+ case CPU_PA_RISC1_0: str2 = "PA-RISC 1.0"; break;
+ case CPU_PA_RISC1_1: str2 = "PA-RISC 1.1"; break;
+ case CPU_PA_RISC1_2: str2 = "PA-RISC 1.2"; break;
+ case CPU_PA_RISC2_0:
+#if defined(_SC_KERNEL_BITS)
+ switch (sysconf(_SC_KERNEL_BITS)) {
+ case 64: str2 = "PA-RISC 2.0w (64 bit)"; break;
+ case 32: str2 = "PA-RISC 2.0n (32 bit)"; break;
+ default: str2 = "PA-RISC 2.0"; break;
+ }; break;
+#else /* !defined(_SC_KERNEL_BITS) */
+ str2 = "PA-RISC 2.0"; break;
+#endif
+ default: str2 = i18n("(unknown)"); break;
+ }
+
+ olditem = new QListViewItem(lBox, olditem, i18n("CPU Architecture"), str2);
+
+ Find_in_LOOKUPTABLE( lBox, info.machine );// try to get extended Information.
+
+ for (i=PS_PA83_FPU; i<=PS_PA89_FPU; ++i) {
+ if ((1<<(i-1)) & pro.psp_coprocessor.psc_present) {
+ str = QString( (i==PS_PA83_FPU) ? "PS_PA83_FPU":"PS_PA89_FPU" )
+ + QString(" (")
+ + QString(((1<<(i-1))&pro.psp_coprocessor.psc_enabled) ?
+ i18n("enabled") : i18n("disabled") )
+ + QString(")");
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Numerical Coprocessor (FPU)"), str);
+ }
+ }// for(coprocessor..)
+
+ str = Value(((pst.physical_memory*pst.page_size)/1024/1024))
+ + QString(" ")
+ + i18n("MB"); // Mega-Byte
+ olditem = new QListViewItem(lBox, olditem, i18n("Total Physical Memory"), str);
+
+ str = Value(pst.page_size) + QString(" ") + i18n("Bytes");
+ olditem = new QListViewItem(lBox, olditem, i18n("Size of One Page"), str);
+
+ return true;
+}
+
+bool GetInfo_ReadfromFile( QListView *lBox, const char *Name )
+{
+ char buf[2048];
+
+ QFile *file = new QFile(Name);
+ QListViewItem* olditem = 0;
+
+ if(!file->open(IO_ReadOnly)) {
+ delete file;
+ return false;
+ }
+
+ while (file->readLine(buf,sizeof(buf)-1) >= 0)
+ { if (strlen(buf))
+ olditem = new QListViewItem(lBox, olditem, QString::fromLocal8Bit(buf));
+ }
+
+ file->close();
+ delete file;
+ return (lBox->childCount());
+}
+
+
+bool GetInfo_IRQ( QListView * )
+{
+ return false;
+}
+
+bool GetInfo_DMA( QListView * )
+{
+ return false;
+}
+
+bool GetInfo_PCI( QListView *lBox )
+{
+ return( GetInfo_ReadfromFile(lBox,INFO_PCI) +
+ GetInfo_ReadfromFile(lBox,INFO_PCI_EISA) );
+}
+
+bool GetInfo_IO_Ports( QListView *lBox )
+{
+ if (GetInfo_ReadfromPipe( lBox, INFO_IOPORTS_1, false ))
+ return true;
+ else
+ return GetInfo_ReadfromPipe( lBox, INFO_IOPORTS_2, false );
+}
+
+
+bool GetInfo_Devices( QListView *lBox )
+{
+ return GetInfo_ReadfromPipe( lBox, INFO_DEVICES, false );
+}
+
+bool GetInfo_SCSI( QListView *lBox )
+{
+ return GetInfo_Devices( lBox );
+}
+/* Parts taken from fsusage.c from the Midnight Commander (mc)
+
+ Copyright (C) 1991, 1992 Free Software Foundation, In
+
+ Return the number of TOSIZE-byte blocks used by
+ BLOCKS FROMSIZE-byte blocks, rounding away from zero.
+ TOSIZE must be positive. Return -1 if FROMSIZE is not positive. */
+
+static long fs_adjust_blocks(long blocks, int fromsize, int tosize)
+{
+ if (tosize <= 0)
+ abort ();
+ if (fromsize <= 0)
+ return -1;
+
+ if (fromsize == tosize) /* E.g., from 512 to 512. */
+ return blocks;
+ else if (fromsize > tosize) /* E.g., from 2048 to 512. */
+ return blocks * (fromsize / tosize);
+ else /* E.g., from 256 to 512. */
+ return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize);
+}
+
+/* Fill in the fields of FSP with information about space usage for
+ the filesystem on which PATH resides.
+ Return 0 if successful, -1 if not. */
+
+#define CONVERT_BLOCKS(b) fs_adjust_blocks ((b), fsd.f_bsize, 512)
+
+static int get_fs_usage (char *path, long *l_total, long *l_avail)
+{ struct statfs fsd; /* 4.3BSD, SunOS 4, HP-UX, AIX. */
+ unsigned long fsu_blocks,fsu_bfree,fsu_bavail;
+
+ *l_total = *l_avail = 0;
+ if (statfs (path, &fsd) < 0)
+ return -1;
+
+ fsu_blocks = CONVERT_BLOCKS (fsd.f_blocks);
+ fsu_bfree = CONVERT_BLOCKS (fsd.f_bfree);
+ fsu_bavail = CONVERT_BLOCKS (fsd.f_bavail);
+
+ *l_avail = getuid () ? fsu_bavail/2 : fsu_bfree/2;
+ *l_total = fsu_blocks/2;
+
+ return 0;
+}
+
+
+// Some Ideas taken from garbazo from his source in info_fbsd.cpp
+
+bool GetInfo_Partitions (QListView *lbox)
+{
+ #define NUMCOLS 5
+ QString Title[NUMCOLS];
+ int n;
+
+ struct fstab *fstab_ent;
+ struct statvfs svfs;
+ long total,avail;
+ QString str;
+ QString MB(i18n("MB")+ " "); // International Text for MB=Mega-Byte
+
+ if (setfsent() != 1) // Try to open fstab
+ return false;
+
+ Title[0] = i18n("Device");
+ Title[1] = i18n("Mount Point");
+ Title[2] = i18n("FS Type");
+ Title[3] = i18n("Total Size");
+ Title[4] = i18n("Free Size");
+
+ for (n=0; n<NUMCOLS; ++n) {
+ lbox->addColumn(Title[n] );
+ }
+
+ while ((fstab_ent=getfsent())!=NULL) {
+ /* fstab_ent->fs_type holds only "rw","xx","ro"... */
+ memset(&svfs,0,sizeof(svfs));
+ statvfs(fstab_ent->fs_file,&svfs);
+ get_fs_usage(fstab_ent->fs_file, &total, &avail);
+
+ if (!strcmp(fstab_ent->fs_type,FSTAB_XX)) // valid drive ?
+ svfs.f_basetype[0] = 0;
+
+ if(svfs.f_basetype[0]) {
+ new QListViewItem(lbox, QString(fstab_ent->fs_spec),
+ QString(fstab_ent->fs_file) + QString(" "),
+ (svfs.f_basetype[0] ? QString(svfs.f_basetype) : i18n("n/a")),
+ Value((total+512)/1024,6) + MB,
+ Value((avail+512)/1024,6) + MB);
+ }
+ else {
+ new QListViewItem(lbox, QString(fstab_ent->fs_spec),
+ QString(fstab_ent->fs_file) + QString(" "),
+ (svfs.f_basetype[0] ? QString(svfs.f_basetype) : i18n("n/a")));
+ }
+
+ }
+ endfsent();
+
+ return true;
+}
+
+
+bool GetInfo_XServer_and_Video( QListView *lBox )
+{
+ lBox = lBox;
+ return GetInfo_XServer_Generic( lBox );
+}
+
+
+
+
+
+#ifndef HAVE_ALIB_H
+
+bool GetInfo_Sound( QListView *lBox )
+{ lBox = lBox;
+ *GetInfo_ErrorString = i18n("Audio-Support (Alib) was disabled during configuration and compile-time.");
+ return false;
+}
+
+#else // defined(HAVE_ALIB_H)
+
+#include "Alib.h"
+
+static const char formatNames[6][15] = {
+ "ADFUnknown", "ADFMuLaw", "ADFALaw",
+ "ADFLin16", "ADFLin8", "ADFLin8Offset" };
+
+/* handle typo in 1st release of Alib.h */
+#ifndef ARightOutputChMask
+#define ARightOutputChMask ARighOutputChMask
+#endif
+
+
+bool GetInfo_Sound( QListView *lBox )
+{
+ Audio *audio;
+ long status;
+ char server[80];
+ int i;
+
+ QString str,str2;
+ QListViewItem* olditem = 0;
+
+ // server = Hostname....
+ server[0] = 0;
+ audio = AOpenAudio( server, &status );
+ if( status ) {
+ *GetInfo_ErrorString = i18n("Unable to open Audio-Server (Alib).");
+ return false;
+ }
+
+ lBox->addColumn(i18n("Information") );
+ lBox->addColumn(i18n("Value") );
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Audio Name"), QString(audio->audio_name));
+ olditem = new QListViewItem(lBox, olditem, i18n("Vendor"), QString(audio->vendor));
+ olditem = new QListViewItem(lBox, olditem, i18n("Alib Version"),
+ Value(audio->alib_major_version) + QString(".") +
+ Value(audio->alib_minor_version));
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Protocol Revision"),
+ Value(audio->proto_major_version) + QString(".") +
+ Value(audio->proto_minor_version));
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Vendor Number"),
+ Value(audio->vnumber));
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Release"),
+ Value(audio->release));
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Byte Order"),
+ QString((audio->byte_order==ALSBFirst)? i18n("ALSBFirst (LSB)"):
+ ((audio->byte_order==AMSBFirst)? i18n("AMSBFirst (MSB)"):
+ i18n("Invalid Byteorder.")) ));
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Bit Order"),
+ QString((audio->sound_bit_order==ALeastSignificant)?
+ i18n("ALeastSignificant (LSB)") :
+ ((audio->sound_bit_order==AMostSignificant) ?
+ i18n("AMostSignificant (MSB)"):i18n("Invalid Bitorder.")) ));
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Data Formats"));
+ for ( i = 0; i < audio->n_data_format; i++ ) {
+ if (audio->data_format_list[i] <= ADFLin8Offset)
+ new QListViewItem(olditem, QString(formatNames[audio->data_format_list[i]]));
+ }
+ olditem->setOpen(true);
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Sampling Rates"));
+ for ( i = 0; i < audio->n_sampling_rate; i++ ) {
+ new QListViewItem(olditem, Value(audio->sampling_rate_list[i]));
+ }
+ olditem->setOpen(true);
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Input Sources"));
+ if ( audio->input_sources & AMonoMicrophoneMask )
+ new QListViewItem(olditem, i18n("Mono-Microphone"));
+ if ( audio->input_sources & AMonoAuxiliaryMask )
+ new QListViewItem(olditem, i18n("Mono-Auxiliary"));
+ if ( audio->input_sources & ALeftMicrophoneMask )
+ new QListViewItem(olditem, i18n("Left-Microphone"));
+ if ( audio->input_sources & ARightMicrophoneMask )
+ new QListViewItem(olditem, i18n("Right-Microphone"));
+ if ( audio->input_sources & ALeftAuxiliaryMask )
+ new QListViewItem(olditem, i18n("Left-Auxiliary"));
+ if ( audio->input_sources & ARightAuxiliaryMask )
+ new QListViewItem(olditem, i18n("Right-Auxiliary"));
+ olditem->setOpen(true);
+
+ olditem = new QListViewItem(lBox, olditem,i18n("Input Channels"));
+ if ( audio->input_channels & AMonoInputChMask )
+ new QListViewItem(olditem, i18n("Mono-Channel"));
+ if ( audio->input_channels & ALeftInputChMask )
+ new QListViewItem(olditem, i18n("Left-Channel"));
+ if ( audio->input_channels & ARightInputChMask )
+ new QListViewItem(olditem, i18n("Right-Channel"));
+ olditem->setOpen(true);
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Output Destinations"));
+ if ( audio->output_destinations & AMonoIntSpeakerMask )
+ new QListViewItem(olditem, i18n("Mono-InternalSpeaker"));
+ if ( audio->output_destinations & AMonoJackMask )
+ new QListViewItem(olditem, i18n("Mono-Jack"));
+ if ( audio->output_destinations & ALeftIntSpeakerMask )
+ new QListViewItem(olditem, i18n("Left-InternalSpeaker"));
+ if ( audio->output_destinations & ARightIntSpeakerMask )
+ new QListViewItem(olditem, i18n("Right-InternalSpeaker"));
+ if ( audio->output_destinations & ALeftJackMask )
+ new QListViewItem(olditem, i18n("Left-Jack"));
+ if ( audio->output_destinations & ARightJackMask )
+ new QListViewItem(olditem, i18n("Right-Jack"));
+ olditem->setOpen(true);
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Output Channels"));
+ if ( audio->output_channels & AMonoOutputChMask )
+ new QListViewItem(olditem, i18n("Mono-Channel"));
+ if ( audio->output_channels & ALeftOutputChMask )
+ new QListViewItem(olditem, i18n("Left-Channel"));
+ if ( audio->output_channels & ARightOutputChMask )
+ new QListViewItem(olditem, i18n("Right-Channel"));
+ olditem->setOpen(true);
+
+
+ olditem = new QListViewItem(lBox, olditem, i18n("Gain"));
+ new QListViewItem(olditem, i18n("Input Gain Limits"),
+ Value(audio->max_input_gain));
+ new QListViewItem(olditem,i18n("Output Gain Limits"),
+ Value(audio->min_output_gain) + QString(" ")
+ + Value(audio->max_output_gain));
+ new QListViewItem(olditem, i18n("Monitor Gain Limits"),
+ Value(audio->min_monitor_gain) + QString(" ")
+ + Value(audio->max_monitor_gain));
+ new QListViewItem(olditem, i18n("Gain Restricted"),
+ Value(audio->gm_gain_restricted));
+ olditem->setOpen(true);
+
+
+ olditem = new QListViewItem(lBox, olditem,i18n("Lock"),
+ Value(audio->lock));
+ olditem = new QListViewItem(lBox, olditem, i18n("Queue Length"),
+ Value(audio->qlen));
+ olditem = new QListViewItem(lBox, olditem, i18n("Block Size"),
+ Value(audio->block_size));
+ olditem = new QListViewItem(lBox, olditem, i18n("Stream Port (decimal)"),
+ Value(audio->stream_port));
+ olditem = new QListViewItem(lBox, olditem, i18n("Ev Buffer Size"),
+ Value(audio->ev_buf_size));
+ olditem = new QListViewItem(lBox, olditem, i18n("Ext Number"),
+ Value(audio->ext_number));
+
+ ACloseAudio( audio, &status );
+
+ return true;
+}
+
+#endif // defined(HAVE_ALIB_H)