You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/kcontrol/info/info_hpux.cpp

786 lines
24 KiB

/*
!!!!! 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 <tqfile.h>
#include <tqfontmetrics.h>
#include <tqtextstream.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( TQListView *lBox, char *machine )
{ char *Machine;
int len;
const struct _type_LOOKUPTABLE *Entry = PA_LOOKUPTABLE;
TQString str;
TQListViewItem* 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 TQListViewItem(lBox, olditem, i18n("PA-RISC Processor"),
TQString(PA_NAME[Entry->parisc_name]));
olditem = new TQListViewItem(lBox, olditem, i18n("PA-RISC Revision"),
TQString("PA-RISC ") + TQString(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( TQListView *lBox )
{
FILE *pipe;
TQFile *model;
struct pst_dynamic psd;
struct pst_static pst;
struct pst_processor pro;
struct utsname info;
TQString str,str2;
TQListViewItem* 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 TQListViewItem(lBox, olditem, i18n("Machine"), info.machine);
model = new TQFile(INFO_CPU_MODEL);
if (model->exists())
{ if ((pipe = popen(INFO_CPU_MODEL, "r")))
{ TQTextStream *t = new TQTextStream(pipe, IO_ReadOnly);
str = t->readLine();
olditem = new TQListViewItem(lBox, olditem, i18n("Model"), str);
delete t;
}
delete pipe;
}
delete model;
olditem = new TQListViewItem(lBox, olditem, i18n("Machine Identification Number"),
strlen(info.__idnumber) ? TQString(info.__idnumber) : i18n("(none)") );
if (psd.psd_proc_cnt<=0)
psd.psd_proc_cnt=1; // Minimum one CPU !
olditem = new TQListViewItem(lBox, olditem, i18n("Number of Active Processors"),
Value(psd.psd_proc_cnt));
pstat_getprocessor( &pro, sizeof(pro), 1, 0 );
olditem = new TQListViewItem(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 TQListViewItem(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 = TQString( (i==PS_PA83_FPU) ? "PS_PA83_FPU":"PS_PA89_FPU" )
+ TQString(" (")
+ TQString(((1<<(i-1))&pro.psp_coprocessor.psc_enabled) ?
i18n("enabled") : i18n("disabled") )
+ TQString(")");
olditem = new TQListViewItem(lBox, olditem, i18n("Numerical Coprocessor (FPU)"), str);
}
}// for(coprocessor..)
str = Value(((pst.physical_memory*pst.page_size)/1024/1024))
+ TQString(" ")
+ i18n("MB"); // Mega-Byte
olditem = new TQListViewItem(lBox, olditem, i18n("Total Physical Memory"), str);
str = Value(pst.page_size) + TQString(" ") + i18n("Bytes");
olditem = new TQListViewItem(lBox, olditem, i18n("Size of One Page"), str);
return true;
}
bool GetInfo_ReadfromFile( TQListView *lBox, const char *Name )
{
char buf[2048];
TQFile *file = new TQFile(Name);
TQListViewItem* olditem = 0;
if(!file->open(IO_ReadOnly)) {
delete file;
return false;
}
while (file->readLine(buf,sizeof(buf)-1) >= 0)
{ if (strlen(buf))
olditem = new TQListViewItem(lBox, olditem, TQString::fromLocal8Bit(buf));
}
file->close();
delete file;
return (lBox->childCount());
}
bool GetInfo_IRQ( TQListView * )
{
return false;
}
bool GetInfo_DMA( TQListView * )
{
return false;
}
bool GetInfo_PCI( TQListView *lBox )
{
return( GetInfo_ReadfromFile(lBox,INFO_PCI) +
GetInfo_ReadfromFile(lBox,INFO_PCI_EISA) );
}
bool GetInfo_IO_Ports( TQListView *lBox )
{
if (GetInfo_ReadfromPipe( lBox, INFO_IOPORTS_1, false ))
return true;
else
return GetInfo_ReadfromPipe( lBox, INFO_IOPORTS_2, false );
}
bool GetInfo_Devices( TQListView *lBox )
{
return GetInfo_ReadfromPipe( lBox, INFO_DEVICES, false );
}
bool GetInfo_SCSI( TQListView *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 (TQListView *lbox)
{
#define NUMCOLS 5
TQString Title[NUMCOLS];
int n;
struct fstab *fstab_ent;
struct statvfs svfs;
long total,avail;
TQString str;
TQString 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 TQListViewItem(lbox, TQString(fstab_ent->fs_spec),
TQString(fstab_ent->fs_file) + TQString(" "),
(svfs.f_basetype[0] ? TQString(svfs.f_basetype) : i18n("n/a")),
Value((total+512)/1024,6) + MB,
Value((avail+512)/1024,6) + MB);
}
else {
new TQListViewItem(lbox, TQString(fstab_ent->fs_spec),
TQString(fstab_ent->fs_file) + TQString(" "),
(svfs.f_basetype[0] ? TQString(svfs.f_basetype) : i18n("n/a")));
}
}
endfsent();
return true;
}
bool GetInfo_XServer_and_Video( TQListView *lBox )
{
lBox = lBox;
return GetInfo_XServer_Generic( lBox );
}
#ifndef HAVE_ALIB_H
bool GetInfo_Sound( TQListView *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( TQListView *lBox )
{
Audio *audio;
long status;
char server[80];
int i;
TQString str,str2;
TQListViewItem* 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 TQListViewItem(lBox, olditem, i18n("Audio Name"), TQString(audio->audio_name));
olditem = new TQListViewItem(lBox, olditem, i18n("Vendor"), TQString(audio->vendor));
olditem = new TQListViewItem(lBox, olditem, i18n("Alib Version"),
Value(audio->alib_major_version) + TQString(".") +
Value(audio->alib_minor_version));
olditem = new TQListViewItem(lBox, olditem, i18n("Protocol Revision"),
Value(audio->proto_major_version) + TQString(".") +
Value(audio->proto_minor_version));
olditem = new TQListViewItem(lBox, olditem, i18n("Vendor Number"),
Value(audio->vnumber));
olditem = new TQListViewItem(lBox, olditem, i18n("Release"),
Value(audio->release));
olditem = new TQListViewItem(lBox, olditem, i18n("Byte Order"),
TQString((audio->byte_order==ALSBFirst)? i18n("ALSBFirst (LSB)"):
((audio->byte_order==AMSBFirst)? i18n("AMSBFirst (MSB)"):
i18n("Invalid Byteorder.")) ));
olditem = new TQListViewItem(lBox, olditem, i18n("Bit Order"),
TQString((audio->sound_bit_order==ALeastSignificant)?
i18n("ALeastSignificant (LSB)") :
((audio->sound_bit_order==AMostSignificant) ?
i18n("AMostSignificant (MSB)"):i18n("Invalid Bitorder.")) ));
olditem = new TQListViewItem(lBox, olditem, i18n("Data Formats"));
for ( i = 0; i < audio->n_data_format; i++ ) {
if (audio->data_format_list[i] <= ADFLin8Offset)
new TQListViewItem(olditem, TQString(formatNames[audio->data_format_list[i]]));
}
olditem->setOpen(true);
olditem = new TQListViewItem(lBox, olditem, i18n("Sampling Rates"));
for ( i = 0; i < audio->n_sampling_rate; i++ ) {
new TQListViewItem(olditem, Value(audio->sampling_rate_list[i]));
}
olditem->setOpen(true);
olditem = new TQListViewItem(lBox, olditem, i18n("Input Sources"));
if ( audio->input_sources & AMonoMicrophoneMask )
new TQListViewItem(olditem, i18n("Mono-Microphone"));
if ( audio->input_sources & AMonoAuxiliaryMask )
new TQListViewItem(olditem, i18n("Mono-Auxiliary"));
if ( audio->input_sources & ALeftMicrophoneMask )
new TQListViewItem(olditem, i18n("Left-Microphone"));
if ( audio->input_sources & ARightMicrophoneMask )
new TQListViewItem(olditem, i18n("Right-Microphone"));
if ( audio->input_sources & ALeftAuxiliaryMask )
new TQListViewItem(olditem, i18n("Left-Auxiliary"));
if ( audio->input_sources & ARightAuxiliaryMask )
new TQListViewItem(olditem, i18n("Right-Auxiliary"));
olditem->setOpen(true);
olditem = new TQListViewItem(lBox, olditem,i18n("Input Channels"));
if ( audio->input_channels & AMonoInputChMask )
new TQListViewItem(olditem, i18n("Mono-Channel"));
if ( audio->input_channels & ALeftInputChMask )
new TQListViewItem(olditem, i18n("Left-Channel"));
if ( audio->input_channels & ARightInputChMask )
new TQListViewItem(olditem, i18n("Right-Channel"));
olditem->setOpen(true);
olditem = new TQListViewItem(lBox, olditem, i18n("Output Destinations"));
if ( audio->output_destinations & AMonoIntSpeakerMask )
new TQListViewItem(olditem, i18n("Mono-InternalSpeaker"));
if ( audio->output_destinations & AMonoJackMask )
new TQListViewItem(olditem, i18n("Mono-Jack"));
if ( audio->output_destinations & ALeftIntSpeakerMask )
new TQListViewItem(olditem, i18n("Left-InternalSpeaker"));
if ( audio->output_destinations & ARightIntSpeakerMask )
new TQListViewItem(olditem, i18n("Right-InternalSpeaker"));
if ( audio->output_destinations & ALeftJackMask )
new TQListViewItem(olditem, i18n("Left-Jack"));
if ( audio->output_destinations & ARightJackMask )
new TQListViewItem(olditem, i18n("Right-Jack"));
olditem->setOpen(true);
olditem = new TQListViewItem(lBox, olditem, i18n("Output Channels"));
if ( audio->output_channels & AMonoOutputChMask )
new TQListViewItem(olditem, i18n("Mono-Channel"));
if ( audio->output_channels & ALeftOutputChMask )
new TQListViewItem(olditem, i18n("Left-Channel"));
if ( audio->output_channels & ARightOutputChMask )
new TQListViewItem(olditem, i18n("Right-Channel"));
olditem->setOpen(true);
olditem = new TQListViewItem(lBox, olditem, i18n("Gain"));
new TQListViewItem(olditem, i18n("Input Gain Limits"),
Value(audio->max_input_gain));
new TQListViewItem(olditem,i18n("Output Gain Limits"),
Value(audio->min_output_gain) + TQString(" ")
+ Value(audio->max_output_gain));
new TQListViewItem(olditem, i18n("Monitor Gain Limits"),
Value(audio->min_monitor_gain) + TQString(" ")
+ Value(audio->max_monitor_gain));
new TQListViewItem(olditem, i18n("Gain Restricted"),
Value(audio->gm_gain_restricted));
olditem->setOpen(true);
olditem = new TQListViewItem(lBox, olditem,i18n("Lock"),
Value(audio->lock));
olditem = new TQListViewItem(lBox, olditem, i18n("Queue Length"),
Value(audio->qlen));
olditem = new TQListViewItem(lBox, olditem, i18n("Block Size"),
Value(audio->block_size));
olditem = new TQListViewItem(lBox, olditem, i18n("Stream Port (decimal)"),
Value(audio->stream_port));
olditem = new TQListViewItem(lBox, olditem, i18n("Ev Buffer Size"),
Value(audio->ev_buf_size));
olditem = new TQListViewItem(lBox, olditem, i18n("Ext Number"),
Value(audio->ext_number));
ACloseAudio( audio, &status );
return true;
}
#endif // defined(HAVE_ALIB_H)