/* !!!!! 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 #include #include #include #include #include #include #include #include #include #include #include #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; naddColumn(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)