diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 4aed2c8219774f5d797760606b8489a92ddc5163 (patch) | |
tree | 3f8c130f7d269626bf6a9447407ef6c35954426a /kcontrol/info | |
download | tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kcontrol/info')
43 files changed, 9745 insertions, 0 deletions
diff --git a/kcontrol/info/AUTHORS b/kcontrol/info/AUTHORS new file mode 100644 index 000000000..752630926 --- /dev/null +++ b/kcontrol/info/AUTHORS @@ -0,0 +1,32 @@ +Info Module: + + Original (means: insufficient) implementation: + + Matthias Hoelzer <hoelzer@physik.uni-wuerzburg.de> + + +Various authors contributed the code for non-Linux systems, among them: + + David Brownlee <abs@NetBSD.org> [NetBSD] + Jaromir Dolecek <dolecek@ics.muni.cz> [NetBSD] + Paul Kendall <paul@orion.co.nz> [IRIX] + Vladimir Kushnir <kushn@olinet.isf.kiev.ua> [FreeBSD] + Aubert Pierre <paubert@laninsa.insa-lyon.fr> [HP-UX] + Alex Zepeda <zipzippy@sonic.net> [FreeBSD] + Sebestyen Zoltan <szoli@digo.inf.elte.hu> [FreeBSD] + +Conversion to kcontrol applet: + + Matthias Hoelzer <hoelzer@physik.uni-wuerzburg.de> + + +Added more informations for Linux and HP-UX (empty functions for the other systems): + + Helge Deller <deller@gmx.de> + (Added: pci, dma, interrupts, sound, X-server, devices, ioports, partitions, SCSI) + + Hey! FreeBSD's got Sound, XServer, devices, partitions and SCSI info for + FreeBSD now too, compliments of your truly. + Alex Zepeda <zipzippy@sonic.net> + +Have YOU seen the glove of K? diff --git a/kcontrol/info/ChangeLog b/kcontrol/info/ChangeLog new file mode 100644 index 000000000..675fc34c9 --- /dev/null +++ b/kcontrol/info/ChangeLog @@ -0,0 +1,27 @@ +1998-11-09 Alex Zepeda <alex@zippy.dyn.ml.org> + + * info_fbsd.cpp: Fix the SCSI information, so that it's actually + displayed (only if info can be found). However, either kcminfo or + camcontrol needs to be suid root. Your choice. + + * info_fbsd.cpp: Add a few (hopefully) useful comments, and tidy up + some of the code. + +1998-12-08 Helge Deller <deller@gmx.de> + + * info.cpp: + fixed the column-width of KTabListboxes, where only one column was/is visible. + If more than one column is used, then the called function should set the width ! + + * added sections to the online-help in the /doc-directory + +1998-12-08 Duncan Haldane <f.d.m.haldane@cwix.com> + + * info_linux.cpp: + made the sound info look first for /dev/sndstat, before /proc/sound. + Introduced #defines for all the hard-coded /proc/* files to make subsequent + changes easier. + + * expanded the descriptions in the online help. + + * deleted processor.xpm and memory.xpm (no longer needed) diff --git a/kcontrol/info/Makefile.am b/kcontrol/info/Makefile.am new file mode 100644 index 000000000..4b65dc07f --- /dev/null +++ b/kcontrol/info/Makefile.am @@ -0,0 +1,22 @@ +kde_module_LTLIBRARIES = kcm_info.la + +if COMPILE_GL_INFO +AM_CXXFLAGS = -DINFO_OPENGL_AVAILABLE +endif + +kcm_info_la_SOURCES = main.cpp memory.cpp opengl.cpp + +kcm_info_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined $(FRAMEWORK_COREAUDIO) +kcm_info_la_LIBADD = $(LIBALIB) $(LIB_KDEUI) $(LIB_TRU64_MACH) $(LIBCFG) $(LIBODM) $(LIBKSTAT) $(LIBDEVINFO) $(GLLIB) +METASOURCES = AUTO + +AM_CPPFLAGS= $(all_includes) $(GLINC) + +messages: + $(XGETTEXT) *.cpp -o $(podir)/kcminfo.pot + + +xdg_apps_DATA = memory.desktop processor.desktop dma.desktop \ + interrupts.desktop ioports.desktop opengl.desktop pci.desktop sound.desktop \ + devices.desktop scsi.desktop partitions.desktop xserver.desktop \ + cdinfo.desktop diff --git a/kcontrol/info/cdinfo.desktop b/kcontrol/info/cdinfo.desktop new file mode 100644 index 000000000..b5a441e47 --- /dev/null +++ b/kcontrol/info/cdinfo.desktop @@ -0,0 +1,166 @@ +[Desktop Entry] +Exec=kcmshell cdinfo +Icon=kcmdevices +Type=Application +DocPath=kinfocenter/cdinfo/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=cdinfo +X-KDE-ParentApp=kinfocenter + +Name=CD-ROM Information +Name[bg]=CD-ROM +Name[bn]=সিডি-রম তথ্য +Name[ca]=Informació del CD-ROM +Name[cs]=Informace o CD-ROM +Name[csb]=Wëdowiédzô ò CD-ROMie +Name[da]=Cd-rom-information +Name[de]=CD-ROM-Information +Name[el]=Πληροφορίες CD-ROM +Name[eo]=Lumdiska Informo +Name[es]=Información de CD-ROM +Name[et]=CD-seadme info +Name[fa]=اطلاعات دیسک فشرده +Name[fi]=CD-ROM tiedot +Name[fr]=Informations sur le CD-Rom +Name[fy]=Kompaktskiif ynformaasje +Name[gl]=Información do CD-ROM +Name[he]=מידע אודות תקליטורים +Name[hr]=CD-ROM podaci +Name[hu]=CD-ROM-jellemzők +Name[id]=Informasi CD-ROM +Name[is]=Upplýsingar um CD-ROM +Name[it]=Informazioni CD-ROM +Name[ja]=CD-ROM 情報 +Name[kk]=CD-ROM мәліметі +Name[km]=ព័ត៌មានស៊ីឌីរ៉ូម +Name[ko]=DMA 정보 +Name[lt]=CD-ROM informacija +Name[nb]=Informasjon om CD-ROM +Name[nds]=CD-ROM-Informatschonen +Name[ne]=सीडी रोम जानकारी +Name[nl]=Informatie over CD-ROM +Name[nn]=CD-ROM-informasjon +Name[pa]=CD-ROM ਜਾਣਕਾਰੀ +Name[pl]=Informacja o CD-ROM-ie +Name[pt]=Informação do CD-ROM +Name[pt_BR]=Informações do CD-ROM +Name[ro]=Informații CD-ROM +Name[ru]=Сведения о CD-ROM +Name[sk]=Informácie o CD-ROM +Name[sl]=Podatki o CD-ROMu +Name[sr]=Информације о CD-ROM-у +Name[sr@Latn]=Informacije o CD-ROM-u +Name[sv]=Cdrom-Information +Name[te]=సీడీ-రామ్ సమాచారం +Name[tg]=Иттилооти CD-ROM +Name[th]=ข้อมูลของ CD-ROM +Name[tr]=CD-ROM Bilgisi +Name[uk]=Інформація CD-ROM +Name[uz]=CD-ROM uskunasi +Name[uz@cyrillic]=CD-ROM ускунаси +Name[vi]=Thông tin đĩa CD-ROM +Name[wa]=Informåcions do CD-ROM +Name[zh_TW]=光碟機資訊 + +Comment=CD/DVD Drive Capabilites +Comment[bg]=Информация за CD/DVD устройството +Comment[bn]=সিডি/ডিভিডি ড্রাইভ-এর ক্ষমতাবলী +Comment[ca]=Capacitats del dispositiu CD/DVD +Comment[cs]=Kompatibilita CD/DVD mechaniky +Comment[csb]=Mòżlëwòtë nëka CD/DVD +Comment[da]=Cd- eller dvd-enhedens formåen +Comment[de]=CD/DVD-Laufwerkeigenschaften +Comment[el]=Δυνατότητες οδηγού CD/DVD +Comment[eo]=LD/DVDa legilaj eblecoj +Comment[es]=Posibilidades del dispositivo CD/ DVD +Comment[et]=CD/DVD-seadme omadused +Comment[fa]=قابلیتهای گردانندۀ CD/DVD +Comment[fi]=CD/DVD-aseman ominaisuudet +Comment[fr]=Capacités du lecteur de CD / DVD +Comment[fy]=Kompakt-/Dûbelskiif skriuwmooglikheden +Comment[gl]=Funcións do Dispositivo de CD/DVD +Comment[he]=מאפייני תקליטור או צורב +Comment[hr]=CD/DVD mogućnosti pogona +Comment[hu]=CD/DVD-meghajtó jellemzői +Comment[is]=Geta CD/DVD tækis +Comment[it]=Caratteristiche lettore CD/DVD +Comment[ja]=CD/DVD ドライブの機能 +Comment[kk]=CD/DVD дискжетек мүмкіндіктері +Comment[km]=សមត្ថភាពដ្រាយស៊ីឌី/ឌីវីឌី +Comment[lt]=CD/DVD įrenginio galimybės +Comment[nb]=CD/DVD-drevets muligheter +Comment[nds]=CD/DVD-Loopwarkkönen +Comment[ne]=सीडी/डीभीडी ड्राइभ क्षमता +Comment[nl]=Mogelijkheden van CD/DVD-station +Comment[nn]=Eigenskapar til CD/DVD-spelar +Comment[pa]=CD/DVD ਡਰਾਇਵ ਸਮੱਰਥਾ +Comment[pl]=Możliwości napędu CD/DVD +Comment[pt]=Capacidades da Unidade de CD/DVD +Comment[pt_BR]=Capacidades do Drive de CD/DVD +Comment[ro]=Capabilități unitate CD/DVD +Comment[ru]=Возможности привода CD/DVD +Comment[sk]=Schopnosti CD/DVD zariadenia +Comment[sl]=Zmožnosti pogona CD/DVD +Comment[sr]=Могућности CD/DVD уређаја +Comment[sr@Latn]=Mogućnosti CD/DVD uređaja +Comment[sv]=Cd- eller dvd-enhetens förmågor +Comment[te]=సీడి/డివిడి డ్రైవ్ సామర్ద్యాలు +Comment[tg]=Захираҳои дастгоҳи CD/DVD +Comment[th]=ความสามารถของไดรฟ CD/DVD +Comment[tr]=CD/DVD Sürücü Becerileri +Comment[uk]=Можливості приводу КД/DVD +Comment[uz]=CD/DVD uskunasi haqida maʼlumot +Comment[uz@cyrillic]=CD/DVD ускунаси ҳақида маълумот +Comment[vi]=Khả năng ổ đĩa CD/DVD +Comment[wa]=Usteyes di léjheu CD/DVD +Comment[zh_TW]=CD/DVD 相容性 + +Keywords=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities +Keywords[bg]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities, информация за CD-ROM, CD устройство +Keywords[ca]=Informació del CD-ROM,CD-ROM,CD,Dispositiu CD ,Capacitats d'escriptura +Keywords[cs]=Informace o CD, mechanice a možnostech vypalovačky +Keywords[csb]=Wëdowiédzô CD-ROM,CD-ROM,CD,Nëk CD,Mòżlëwòtë nagrëwôcza +Keywords[da]=Cdrom-information,cdrom,cd,cd-enhed,brænderens formåen +Keywords[de]=CD-ROM-Information,CD-ROM,CD,CD Drive,Writer Capabilities +Keywords[el]=Πληροφορίες CD-ROM,CD-ROM,CD,Οδηγός CD,Δυνατότητες εγγραφέα +Keywords[eo]=Lumdiska informoj,Lumdikso,Lumdiskigilo,Lumdiska registrilo +Keywords[es]=Información CD-ROM,CD-ROM,CD,Dispositivo CD,Capacidades de escritura +Keywords[et]=CD-seadme info,CD-ROM,CD,CD-seade,kirjuti omadused +Keywords[fa]=اطلاعات دیسک فشرده، دیسک فشرده، دیسک فشرده، گردانندۀ دیسک فشرده، قابلیتهای رایتر +Keywords[fi]=CD-ROM tiedot,CD-ROM,CD,CD-asema,Kirjoitusominaisuudet +Keywords[fr]=CD-ROM Informations,CD-ROM,CD,lecteur CD,capacités,graveur,fonctionnalités +Keywords[fy]=Kompaktskiif ynformaasje,CD-ROM,CD,CD stasjon,Skriuwmooglikheden +Keywords[gl]=Información do CD-ROM,CD-ROM,CD,Dispositivo de CD,Funcións de Gravación +Keywords[he]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities, מידע אודות תקליטורים, תקליטור, תקליטור, צורב, סידי, סידי־רום, סידי-רום +Keywords[hr]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,CD-ROM podaci, CD pogon,mogućnosti pogona +Keywords[hu]=CD-ROM-jellemzők,CD-ROM,CD,CD-meghajtó,CD-író,írási jellemzők +Keywords[is]=CD-ROM upplýsingar,CD-ROM,CD,CD drif,geta skrifara +Keywords[it]=Informazioni CD-ROM,CD-ROM,CD,Lettore CD,Caratteristiche del masterizzatore +Keywords[ja]=CD-ROM情報,CD-ROM,CD,CDドライブ,ライター機能 +Keywords[km]=ព័ត៌មានស៊ីឌីរ៉ូម,ស៊ីឌីរ៉ូម,ស៊ីឌី,ដ្រាយស៊ីឌី,សមត្ថភាពក្បាលសរសេរ +Keywords[lt]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,rašymas,diskas, CD įrenginys +Keywords[nb]=CD-ROM informasjon,CD-ROM,CD,CD-drev, skrivermuligheter +Keywords[nds]=CD-ROM-Informatschonen,CD-ROM,CD,CD-Loopwark,Loopwarkkönen,Könen +Keywords[ne]=सीडी रोम जानकारी, सीडी रोम,सीडी,सीडी ड्राइभ, लेखकको क्षमता +Keywords[nl]=Informatie over CD-ROM,CD-ROM,CD,CD station,schrijver,CD-schrijver,schrijfmogelijkheden,CD-station +Keywords[nn]=CD-ROM-informasjon,CD-ROM,CD,CD-spelar,brennareigenskapar +Keywords[pl]=Informacja CD-ROM,CD-ROM,CD,Napęd CD,Możliwości nagrywarki +Keywords[pt]=Informação do CD-ROM,CD-ROM,CD,Leitor de CD,Capacidades do Gravador +Keywords[pt_BR]=Informações do CD-ROM,CD-ROM,CD,Drive de CD,Capacidades do Gravador +Keywords[ro]=Informații CD-ROM Information,CD-ROM,CD,Unitate CD,Capabilități inscriptor +Keywords[ru]=Сведения о CD-ROM, CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,возможности привода,привод +Keywords[sk]=CD-ROM informácie,CD-ROM,CD,CD Drive,Writer Capabilities +Keywords[sl]=Podatki o CD-ROMu,CD,Pogon CD,Zmožnosti zapisovalnika,DVD +Keywords[sr]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,информације CD,уређај,могућности,писач +Keywords[sr@Latn]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,informacije CD,uređaj,mogućnosti,pisač +Keywords[sv]=cdrom-information,cdrom,cd,cd-enhet,brännarens förmåga +Keywords[tg]=Иттилооти CD-ROM,CD-ROM,CD,Дастгоҳи CD, Захираҳои сабткунӣ +Keywords[th]=-ข้อมูล CD-ROM,CD-ROM,CD,ไดรฟ CD,ความสามารถของเครื่องเขียน +Keywords[tr]=CD-ROM Bilgileri,CD-ROM,CD,CD Drive,Yazıcının Özellikleri +Keywords[uk]=CD-ROM Information,CD-ROM,CD,CD Drive,Writer Capabilities,Інформація CD-ROM,CD-ROM,КД,Привід КД,Можливості приводу запису +Keywords[vi]=Thông tin đĩa CD-ROM,CD-ROM,CD, ổ đĩa CD, Khả năng ổ ghi +Keywords[wa]=Informåcion do CD-ROM,CD-ROM,CD,léjheu d' CD,Usteyes di scrijhaedje + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/configure.in.bot b/kcontrol/info/configure.in.bot new file mode 100644 index 000000000..c66a13f88 --- /dev/null +++ b/kcontrol/info/configure.in.bot @@ -0,0 +1,13 @@ +if test x$have_gl = xno; then + echo "" + echo "You are missing" + if test "$ac_cv_header_GL_gl_h" = "no"; then + echo " - OpenGL (mesa)" + fi + if test "$ac_cv_header_GL_glu_h" = "no"; then + echo " - GLU" + fi + echo "OpenGL information module has been disabled." + echo "" + all_tests=bad +fi diff --git a/kcontrol/info/configure.in.in b/kcontrol/info/configure.in.in new file mode 100644 index 000000000..9bc6d1c4b --- /dev/null +++ b/kcontrol/info/configure.in.in @@ -0,0 +1,22 @@ +# libmach for Tru64 +# linux/raw.h for Linux +# devinfo.h, libdevinfo for the list of {IRQ,DMA,IOPORTS/MEMRANGES} for FreeBSD + +case "$host" in + *-*-osf*) + AC_CHECK_LIB(mach, vm_statistics, LIB_TRU64_MACH="-lmach")dnl + ;; + *-*-linux*) + AC_CHECK_HEADERS(linux/raw.h sys/raw.h)dnl + ;; + *-*-freebsd*) + AC_CHECK_HEADERS(devinfo.h) + AC_CHECK_LIB(devinfo, devinfo_foreach_rman, LIBDEVINFO="-ldevinfo") + ;; +esac +AC_SUBST(LIB_TRU64_MACH) + +AC_HAVE_GL( have_gl=yes, have_gl=no ) +AM_CONDITIONAL(COMPILE_GL_INFO, test x$have_gl = xyes) + +KDE_CHECK_LONG_LONG diff --git a/kcontrol/info/devices.desktop b/kcontrol/info/devices.desktop new file mode 100644 index 000000000..171224aa6 --- /dev/null +++ b/kcontrol/info/devices.desktop @@ -0,0 +1,246 @@ +[Desktop Entry] +Exec=kcmshell devices +Icon=kcmdevices +Type=Application +DocPath=kinfocenter/devices/index.html +Categories=Qt;KDE;X-KDE-information; + + +X-KDE-Library=info +X-KDE-FactoryName=devices +X-KDE-ParentApp=kinfocenter + +Name=Devices +Name[af]=Toestelle +Name[ar]=الأجهزة +Name[az]=Avadanlıqlar +Name[be]=Прылады +Name[bg]=Устройства +Name[bn]=ডিভাইস +Name[br]=Trobarzhelloù +Name[bs]=Uređaji +Name[ca]=Dispositius +Name[cs]=Zařízení +Name[csb]=Ùrządzenia +Name[cy]=Dyfeisiau +Name[da]=Enheder +Name[de]=Geräte +Name[el]=Συσκευές +Name[eo]=Aparatoj +Name[es]=Dispositivos +Name[et]=Seadmed +Name[eu]=Gailuak +Name[fa]=دستگاهها +Name[fi]=Laitteet +Name[fr]=Périphériques +Name[fy]=Apparaten +Name[ga]=Gléasanna +Name[gl]=Dispositivos +Name[he]=התקנים +Name[hi]=औज़ार +Name[hr]=Uređaji +Name[hu]=Eszközök +Name[id]=Divais +Name[is]=Tæki +Name[it]=Periferiche +Name[ja]=デバイス +Name[ka]=მოწყობილობები +Name[kk]=Құрылғылар +Name[km]=ឧបករណ៍ +Name[ko]=장치 +Name[lo]=ອຸປະກອນ +Name[lt]=Įrenginiai +Name[lv]=Iekārtas +Name[mk]=Уреди +Name[mn]=Төхөөрөмж +Name[ms]=Peranti +Name[nb]=Enheter +Name[nds]=Reedschappen +Name[ne]=यन्त्र +Name[nl]=Apparaten +Name[nn]=Einingar +Name[nso]=Maano +Name[oc]=Dispositius +Name[pa]=ਜੰਤਰ +Name[pl]=Urządzenia +Name[pt]=Dispositivos +Name[pt_BR]=Dispositivos +Name[ro]=Dispozitive +Name[ru]=Устройства +Name[rw]=Apareye +Name[se]=Ovttadagat +Name[sk]=Zariadenia +Name[sl]=Enote +Name[sr]=Уређаји +Name[sr@Latn]=Uređaji +Name[ss]=Tisetjentiswa +Name[sv]=Enheter +Name[ta]=சாதனங்கள் +Name[te]=పరికరాలు +Name[tg]=Дастгоҳҳо +Name[th]=อุปกรณ์ +Name[tr]=Aygıtlar +Name[tt]=Cıhazlar +Name[uk]=Пристрої +Name[uz]=Uskunalar +Name[uz@cyrillic]=Ускуналар +Name[ven]=Maano +Name[vi]=Thiết bị +Name[wa]=Éndjins +Name[xh]=Amacebo +Name[zh_CN]=设备 +Name[zh_TW]=設備 +Name[zu]=Amathuluzi anenjongo + +Comment=Attached devices information +Comment[af]=Gekoppelde toestelle informasie +Comment[ar]=معلومات الأجهزة المرتبطة +Comment[az]=Bağlanmış avadanlıqlar haqqında mə'lumat +Comment[be]=Інфармацыя аб далучаных прыладах +Comment[bg]=Информация за системните устройства +Comment[bn]=সংলগ্ন ডিভাইস সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn an trobarzhelloù luget +Comment[bs]=Informacije o priključenim uređajima +Comment[ca]=Informació dels dispositius connectats +Comment[cs]=Informace o připojených zařízeních +Comment[csb]=Wëdowiédzô ò włączonëch ùrządzeniach +Comment[cy]=Gwybodaeth am ddyfeisiau wedi'i gysylltu +Comment[da]=Information om tilkoblede enheder +Comment[de]=Informationen zu angeschlossenen Geräten +Comment[el]=Πληροφορίες για τις συνδεδεμένες συσκευές +Comment[eo]=Informo pri kunmetitaj aparatoj +Comment[es]=Información sobre los dispositivos conectados +Comment[et]=Info ühendatud seadmete kohta +Comment[eu]=Uztartuta dauden gailuei buruzko informazioa +Comment[fa]=اطلاعات دستگاههای پیوستشده +Comment[fi]=Tietoja liitetyistä laitteista +Comment[fr]=Informations sur les périphériques montés +Comment[fy]=Ynformaasje oer oansletten apparaten +Comment[gl]=Información dos dispositivos conectados +Comment[he]=מידע על ההתקנים המחוברים +Comment[hi]=औज़ार जानकारी संलग्न +Comment[hr]=Podaci o priključenim uređajima +Comment[hu]=A csatlakoztatott eszközök jellemzői +Comment[id]=Informasi divais terkait +Comment[is]=Upptalning á tækjum tölvu +Comment[it]=Informazioni sulle periferiche connesse +Comment[ja]=接続されているデバイスの情報 +Comment[ka]=ცნობები მიერთებულ მოწყობილობებზე +Comment[kk]=Қосылған құрылғылар туралы +Comment[km]=ព័ត៌មានឧបករណ៍ដែលបានភ្ជាប់ +Comment[ko]=장착된 장치 정보 +Comment[lo]=ຂໍ້ມູນອຸປະກອນທີ່ຕໍ່ຢູ່ +Comment[lt]=Prijungtų įrenginių informacija +Comment[lv]=Pievienoto iekārtu informācija +Comment[mk]=Информации за прикачени уреди +Comment[mn]=Залгаатай төхөөрөмжийн мэдээллүүд +Comment[ms]=Maklumat Peranti Terlampir +Comment[mt]=Informazzjoni dwar devices imwaħħlin +Comment[nb]=Informasjon om tilkoblede enheter +Comment[nds]=Informatschoon över de tokoppelten Reedschappen +Comment[ne]=सङ्लग्न गरिएका यन्त्रहरू सूचना +Comment[nl]=Informatie over aangesloten apparaten +Comment[nn]=Informasjon om tilkopla einingar +Comment[nso]=Tshedimoso ya maano yeo e kgwathisitswego +Comment[oc]=Informacion dèus dispositius connectats +Comment[pa]=ਜੁੜੇ ਜੰਤਰਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o włączonych urządzeniach +Comment[pt]=Informações sobre os Dispositivos +Comment[pt_BR]=Informações sobre dispositivos conectados +Comment[ro]=Informații despre dispozitivele instalate +Comment[ru]=Сведения о подключенных устройствах +Comment[rw]=Ibisobanuro by'amapareye afasheho +Comment[se]=Dieđuid laktašuvvon ovttadagaid birra +Comment[sk]=Informácie o pripojených zariadeniach +Comment[sl]=Informacije o priklopljenih enotah +Comment[sr]=Информације о прикаченим уређајима +Comment[sr@Latn]=Informacije o prikačenim uređajima +Comment[sv]=Information om anslutna enheter +Comment[ta]=சேர்க்கப்பட்ட சாதனங்கள் தகவல் +Comment[te]=చేర్చిన పరికరాల సమాచారం +Comment[tg]=Иттилооти дастгоҳҳои бастанд +Comment[th]=ข้อมูลอุปกรณ์ที่ต่ออยู่ +Comment[tr]=Bağlanmış aygıtlar hakkında bilgi +Comment[tt]=Totaştırılğan cıhazlar turında belem +Comment[uk]=Інформація щодо приєднаних пристроїв +Comment[uz]=Ulangan uskunalar haqida maʼlumot +Comment[uz@cyrillic]=Уланган ускуналар ҳақида маълумот +Comment[ven]=Maitele a mafhungo o kwamanywaho +Comment[vi]=Thông tin về thiết bị kèm +Comment[wa]=Informåcion des éndjins d' ataetchîs +Comment[xh]=Ulwazi lwamacebo afakelweyo +Comment[zh_CN]=附加的设备信息 +Comment[zh_TW]=附加的設備資訊 +Comment[zu]=Ulwazi lwamathuluzi anenjongo ananyathiseliwe + +Keywords=dev,Devices,System Information,Information +Keywords[ar]=dev,Devices,System Information,Information,أجهزة,معلومات النظام,معلومات +Keywords[az]=dev,Avadanlıqlar,Sistem Haqqında Mə'lumat, Mə'lumat +Keywords[be]=прылады,прылада,сістэмная інфармацыя,інфармацыя,dev,Devices,System Information,Information +Keywords[bg]=информация, система, системна, устройства, устройство, dev, Devices, System Information, Information +Keywords[br]=trobarzhell,titouroù reizhiad,titouroù +Keywords[bs]=dev,Devices,System Information,Information,uređaji,uređaj,sustav,informacije o sustavu +Keywords[ca]=dev,dispositius,Informació del sistema,Informació +Keywords[cs]=dev,Zařízení,Systémové informace,Informace +Keywords[csb]=dev,systemòwé ùrządzenia,wëdowiédzô ò systemie,wëdowiédzô, infòrmacëjô +Keywords[cy]=dyf,Dyfeisiau,Gwybodaeth Cysawd,Gwybodaeth +Keywords[da]=dev,Enheder,Systeminformation,Information +Keywords[de]=Geräte,Devices,Systeminformation,Information +Keywords[el]=dev,Συσκευές,Πληροφορίες συστήματος,Πληροφορίες +Keywords[eo]=aparato,dev,sistemo,operaciumo,informo +Keywords[es]=Dispositivos,Información del sistema +Keywords[et]=dev,Seadmed,Süsteemi informatsioon,Informatsioon +Keywords[eu]=dev,Dispositiboak,Sistemaren informazioa,informazioa +Keywords[fa]=dev،دستگاهها، اطلاعات سیستم، اطلاعات +Keywords[fi]=dev,Laitteet,Järjestelmätiedot,Tiedot +Keywords[fr]=dev,périphériques,information,informations système +Keywords[fy]=dev,devices,systeemynformaasje,ynformaasje,apparaten,apparaatbehear +Keywords[ga]=dev,Gléasanna,Eolas faoin Chóras,Eolas +Keywords[gl]=dev,Dispositivo,Información do Sistema,Información +Keywords[he]=התקנים,מידע מערכת,מידע,dev,Devices,System Information,Information +Keywords[hi]=डेव,औज़ार,तंत्र जानकारी,जानकारी +Keywords[hr]=dev,Devices,System Information,Information,uređaji,uređaj,sustav,podaci o sustavu,podaci +Keywords[hu]=dev,eszközök,rendszerinformáci,információ +Keywords[id]=dev,Devices,Informasi Sistem,Informasi +Keywords[is]=dev,tæki,jaðartæki,upplýsingar,kerfi +Keywords[it]=dev,dispositivi,periferiche,informazioni sul sistema,informazioni +Keywords[ja]=dev,デバイスシステム,システムの情報,情報 +Keywords[km]=ឧបករណ៍,ព័ត៌មានប្រព័ន្ធ,ព័ត៌មាន +Keywords[lt]=dev,Įrenginiai,Sistemos Informacija,Informacija +Keywords[lv]=iek,Iekārtas,Sistēmas Informācija,Informācija +Keywords[mk]=dev,Devices,System Information,Information,Уреди,Информации за системот,Информација +Keywords[mn]=dev,Төхөөрөмж,Системийн мэдээлэл,Мэдээлэл +Keywords[nb]=dev,enheter,systeminformasjon,Informasjon +Keywords[nds]=dev,Reedschappen,Systeeminformatschoon,Informatschoon +Keywords[ne]=डेभ, यन्त्र, प्रणाली सूचना, सूचना +Keywords[nl]=dev,devices,systeeminformatie,informatie,apparaten,apparaatbeheer +Keywords[nn]=dev,eining,einingar,systeminformasjon,informasjon +Keywords[nso]=dev,Maano,Tshedimoso ya System,Tshedimoso +Keywords[oc]=dev,dispositius,Informacion dèu sistemo,Informacion +Keywords[pa]=dev,ਜੰਤਰ,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=dev,Urządzenia systemowe,informacja o systemie,Informacja +Keywords[pt]=dev,dispositivos,informações de sistema,informação +Keywords[pt_BR]=dev,Dispositivos,Informações de sistema,Informações,Informação +Keywords[ro]=dev,dispozitive,informații sistem,informații +Keywords[rw]=dev,Apareye,Amakuru Sisitemu,Amakuru +Keywords[se]=dev,ovttadat,ovttadagat,vuogádatdiehtu,diehtu +Keywords[sk]=dev,Zariadenia,Systém Informácie +Keywords[sl]=dev,naprave,informacije o sistemu,informacije +Keywords[sr]=dev,Devices,System Information,Information,уређаји,системске информације,информације +Keywords[sr@Latn]=dev,Devices,System Information,Information,uređaji,sistemske informacije,informacije +Keywords[sv]=enhet,Enheter,Systeminformation,Information +Keywords[ta]=dev,சாதனங்கள், கணினித் தகவல், தகவல் +Keywords[tg]=dev,Дастгоҳҳо,Иттилооти система,Иттилоот +Keywords[th]=dev,อุปกรณ์,ข้อมูลระบบ,ข้อมูล +Keywords[tr]=dev,Aygıtlar,Sistem Hakkında Bilgi, Bilgi +Keywords[uk]=пристрої,інформація,dev,devices,system-information,information +Keywords[uz]=dev,Uskunalar,Maʼlumot,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=dev,Ускуналар,Маълумот,Тизим ҳақида маълумот +Keywords[ven]=dev,Maano,Mafhungo a sisitemu,Mafhungo +Keywords[vi]=dev,Thiết bị,Thông tin Hệ thống,Thông tin +Keywords[wa]=dev,Devices,System Information,Information,informåcion do sistinme, informåcion,éndjins +Keywords[xh]=dev,Amacebo,Ulwazi lwendlela,Ulwazi +Keywords[zh_CN]=dev,Devices,System Information,Information,设备,系统信息,信息 +Keywords[zh_TW]=dev,Devices,System Information,Information,設備,系統資訊,資訊 +Keywords[zu]=dev,Amathuluzi anenjongo,Ulwazi lwesistimu,Ulwazi + diff --git a/kcontrol/info/dma.desktop b/kcontrol/info/dma.desktop new file mode 100644 index 000000000..e420acaea --- /dev/null +++ b/kcontrol/info/dma.desktop @@ -0,0 +1,248 @@ +[Desktop Entry] +Exec=kcmshell dma +Icon=kcmmemory +Type=Application +DocPath=kinfocenter/dma/index.html +Categories=Qt;KDE;X-KDE-information; + + +X-KDE-Library=info +X-KDE-FactoryName=dma +X-KDE-ParentApp=kinfocenter + +Name=DMA-Channels +Name[af]=Dma-kanale +Name[az]=DMA Kanalları +Name[be]=Каналы DMA +Name[bg]=DMA канали +Name[bn]=ডি.এম.এ-চ্যানেল +Name[br]=Kanolioù DMA +Name[bs]=DMA-Kanali +Name[ca]=Canals DMA +Name[cs]=DMA kanály +Name[csb]=Kanałë DMA +Name[cy]=Sianeli DMA +Name[da]=DMA-kanaler +Name[de]=DMA-Kanäle +Name[el]=Κανάλια DMA +Name[eo]=DMA-kanaloj +Name[es]=Canales DMA +Name[et]=DMA kanalid +Name[eu]=DMA-Kanalak +Name[fa]=مجراهای دستیابی مستقیم به حافظه +Name[fi]=DMA-kanavat +Name[fr]=Canaux DMA +Name[fy]=DMA-kanalen +Name[ga]=Cainéil-DMA +Name[gl]=Canles de DMA +Name[he]=גישה ישירה לזיכרון +Name[hi]=डीएमए-चैनल्स +Name[hr]=DMA kanali +Name[hu]=DMA-csatornák +Name[id]=Channels-DMA +Name[is]=DMA-brautir +Name[it]=Canali DMA +Name[ja]=DMA チャンネル +Name[ka]=DMA არხები +Name[kk]=DMA-арналар +Name[km]=ផ្លូវ DMA +Name[ko]=DMA 채널 +Name[lo]=ຊາແນລDMA +Name[lt]=DMA-Kanalai +Name[lv]=DMA-Kanāli +Name[mk]=DMA-канали +Name[mn]=DMA-Сувгууд +Name[ms]=Saluran DMA +Name[nb]=DMA-kanaler +Name[nds]=DMA-Kanaals +Name[ne]=DMA-च्यानल +Name[nl]=DMA-kanalen +Name[nn]=DMA-kanalar +Name[nso]=Dikanale tsa DMA +Name[oc]=Canals DMA +Name[pa]=DMA-ਚੈਨਲ +Name[pl]=Kanały DMA +Name[pt]=Canais de DMA +Name[pt_BR]=Canais DMA +Name[ro]=Canale DMA +Name[ru]=Каналы DMA +Name[rw]=Imirongomakuru-DMA +Name[se]=DMA-kanálat +Name[sk]=DMA kanály +Name[sl]=Kanali DMA +Name[sr]=DMA канали +Name[sr@Latn]=DMA kanali +Name[ss]=Migudvu ye DMa +Name[sv]=DMA-kanaler +Name[ta]=DMA-வழிமுறைகள் +Name[te]=డిఎంఏ-చానెళ్ళు +Name[tg]=Каналҳои-DMA +Name[th]=ช่อง DMA +Name[tr]=DMA Kanalları +Name[tt]=DMA-Yullar +Name[uk]=Канали ПДП +Name[uz]=DMA kanallari +Name[uz@cyrillic]=DMA каналлари +Name[ven]=Tshanele ya DMA +Name[vi]=Kênh DMA +Name[wa]=Canås DMA +Name[xh]=DMA-Imijelo +Name[zh_CN]=DMA 通道 +Name[zh_TW]=DMA 通道 +Name[zu]=Imigudu-DMA + +Comment=DMA information +Comment[af]=Dma informasie +Comment[ar]=معلومات DMA +Comment[az]=DMA haqqında mə'lumat +Comment[be]=Інфармацыя аб DMA +Comment[bg]=Информация за DMA +Comment[bn]=ডি.এম.এ. সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn an DMA +Comment[bs]=DMA informacije +Comment[ca]=Informació de la DMA +Comment[cs]=Informace o DMA +Comment[csb]=Wëdowiédzô ò DMA +Comment[cy]=Gwybodaeth DMA +Comment[da]=DMA-information +Comment[de]=Informationen zu DMA +Comment[el]=Πληροφορίες για τα DMA +Comment[eo]=DMA-informo +Comment[es]=Información sobre DMA +Comment[et]=DMA kanalite info +Comment[eu]=DMAri buruzko informazioa +Comment[fa]=اطلاعات دسترسی مستقیم به حافظه +Comment[fi]=DMA-tietoja +Comment[fr]=Informations DMA +Comment[fy]=DMA-ynformatie +Comment[ga]=Eolas faoi DMA +Comment[gl]=Información de DMA +Comment[he]=מידע על ערוצי הגישה הישירה לזיכרון +Comment[hi]=डीएमए जानकारी +Comment[hr]=DMA podaci +Comment[hu]=DMA-információk +Comment[id]=Informasi DMA +Comment[is]=Upplýsingar um DMA-brautir +Comment[it]=Informazioni sul DMA +Comment[ja]=DMA 情報 +Comment[ka]=ინფორმაცია DMA–ს შესახებ +Comment[kk]=DMA мәліметі +Comment[km]=ព័ត៌មាន DMA +Comment[ko]=DMA 정보 +Comment[lt]=DMA informacija +Comment[lv]=DMA informācija +Comment[mk]=Информации за DMA +Comment[mn]=DMA-н мэдээлэл +Comment[ms]=Maklumat DMA +Comment[mt]=Informazzjoni dwar DMA +Comment[nb]=DMA-informasjon +Comment[nds]=Informatschoon över DMA +Comment[ne]=DMA सूचना +Comment[nl]=DMA-informatie +Comment[nn]=DMA-informasjon +Comment[nso]=Tshedimoso ya DMA +Comment[oc]=Informacion de DMA +Comment[pa]=DMA ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o DMA +Comment[pt]=Informação do DMA +Comment[pt_BR]=Informações de DMA +Comment[ro]=Informații despre canalele DMA +Comment[ru]=Сведения о DMA +Comment[rw]=Ibisobanuro DMA +Comment[se]=DMA-diehtu +Comment[sk]=Informácie o DMA +Comment[sl]=Informacija o neposrednem dostopu do pomnilnika (DMA) +Comment[sr]=DMA информације +Comment[sr@Latn]=DMA informacije +Comment[ss]=Imininingwaneye DMA +Comment[sv]=DMA-information +Comment[ta]=DMA தகவல் +Comment[te]=డిఎంఏ సమాచారం +Comment[tg]=Иттилооти DMA +Comment[th]=ข้อมูล DMA +Comment[tr]=DMA hakkında bilgi +Comment[tt]=DMA turında +Comment[uk]=Інформація щодо ПДП +Comment[uz]=DMA haqida maʼlumot +Comment[uz@cyrillic]=DMA ҳақида маълумот +Comment[ven]=Mafhungo a DMA +Comment[vi]=Thông tin DMA +Comment[wa]=Informåcion so les canås DMA +Comment[xh]=DMA ulwazi +Comment[zh_CN]=DMA 信息 +Comment[zh_TW]=DMA 資訊 +Comment[zu]=Ulwazi lwe-DMA + +Keywords=dma,DMA-Channels,System Information +Keywords[af]=dma,DMA-Channels,System Informasie +Keywords[az]=dma,DMA-Kanalları,Sistem Haqqında Mə'lumat +Keywords[be]=каналы DMA,сістэмная інфармацыя,dma,DMA-Channels,System Information +Keywords[bg]=информация, система, системна, канали, канал, dma, DMA-Channels, System Information +Keywords[br]=dma,kanolioù DMA,titoutoù reizhoad +Keywords[bs]=dma,DMA-Channels,System Information,DMA-kanali,informacije o sustavu +Keywords[ca]=dma,Canals DMA,informació del sistema +Keywords[cs]=dma,DMA kanály,Informace o systému +Keywords[csb]=dma,kanałë DMA,wëdowiédzô ò systemie +Keywords[cy]=dma,Sianeli DMA,Gwybodaeth Cysawd +Keywords[da]=dma,DMA-kanaler,Systeminformation +Keywords[de]=DMA,DMA-Kanäle,Systeminformation,Information +Keywords[el]=dma,Κανάλια DMA,Πληροφορίες συστήματος +Keywords[eo]=DMA,kanaloj,sistemo,operaciumo,informo +Keywords[es]=DMA,Canales DMA,Información del sistema +Keywords[et]=dma,DMA kanalid,süsteemi informatsioon +Keywords[eu]=dma,DMA-Kanalak,Sistemaren informazioa +Keywords[fa]=dma ،مجراهای دستیابی مستقیم به حافظه، اطلاعات سیستم +Keywords[fi]=dma,DMA-kanavat,Järjestelmätiedot +Keywords[fr]=dma,canaux DMA,informations système +Keywords[fy]=dma,DMA-channels,systeemynformaasje,DMA-kanalen +Keywords[ga]=dma,Cainéil-DMA,Eolas faoin Chóras +Keywords[gl]=dma,Canles de DMA,Canales DMA,Información do Sistema +Keywords[he]=ערוצי גישה ישירה לזיכרון,מידע מערכת,DMA,DMA-Channels,System Information +Keywords[hi]=डीएमए,डीएमए-चैनल्स,तंत्र जानकारी +Keywords[hr]=dma,DMA-Channels,System Information,DMA kanali,podaci o sustavu +Keywords[hu]=DMA,DMA-csatornák,DMA-csatorna,rendszerinformáció +Keywords[id]=dma,DMA-Channels,Informasi Sistem +Keywords[is]=DMA-brautir,DMA-rásir +Keywords[it]=DMA,canali DMA,informazioni sul sistema +Keywords[ja]=dma,DMA-チャンネル,システムの情報 +Keywords[ka]=dma,DMA-არხები,ინფორმაცია სისტემის შესახებ +Keywords[km]=dma,ផ្លូវ DMA,ព័ត៌មានប្រព័ន្ធ +Keywords[lo]=dma,DMA-Channels,System InformationKeywords=dma,DMA-Channels,System Information +Keywords[lt]=dma,DMA-Kanalai,Sistemos Informacija +Keywords[lv]=dma,DMA-Kanāli,Sistēmas Informācija +Keywords[mk]=dma,DMA-Channels,System Information,DMA канали,канали,Информации за системот +Keywords[mn]=DMA,DMA-сувгууд,Системийн мэдээлэл,Мэдээлэл +Keywords[nb]=dma,DMA-kanaler,Systeminformasjon +Keywords[nds]=dms,DMA-Kanaals,Systeeminformatschoon +Keywords[ne]=dma, DMA-च्यानल, प्रणाली सूचना +Keywords[nl]=dma,DMA-channels,systeeminformatie,DMA-kanalen +Keywords[nn]=dma,DMA-kanalar,systeminformasjon +Keywords[nso]=dma,Dikanale tsa DMA,Tshedimoso ya System +Keywords[oc]=dma,Canals DMA,informacion dèu sistemo +Keywords[pa]=dma,DMA-Channels,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=dma,kanały DMA,informacja o systemie +Keywords[pt]=dma,canais dma,informações de sistema +Keywords[pt_BR]=DMA,canais DMA,canal DMA,informações de sistema +Keywords[ro]=dma,canale DMA,informații despre sistem +Keywords[rw]=dma,Imirongomakuru-DMA,Amakuru Sisitemu +Keywords[se]=dma,DMA-kanálat,vuogádatdiehtu +Keywords[sk]=dma,DMA-kanály,Systémové Informácie +Keywords[sl]=dma,kanali DMA,informacije o sistemu +Keywords[sr]=dma,DMA-Channels,System Information,канали,системске информације +Keywords[sr@Latn]=dma,DMA-Channels,System Information,kanali,sistemske informacije +Keywords[sv]=dma,DMA-kanaler,Systeminformation +Keywords[ta]=dma,DMA-வழிமுறைகள்,அமைப்பு தகவல் +Keywords[tg]=dma,Каналҳои-DMA,Иттилооти система +Keywords[th]=dma,ช่อง DMA,ข้อมูลระบบ +Keywords[tr]=dma,DMA-Kanalları,Sistem Hakkında Bilgi +Keywords[uk]=dma,канал ПДП, інформація,system-information,information +Keywords[uz]=dma,DMA kanallari,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=dma,DMA каналлари,Тизим ҳақида маълумот +Keywords[ven]=dma,Dzitshanele dza DMA,Mafhungo a sisitemu +Keywords[vi]=dma,Kênh DMA,Thông tin Hệ thống +Keywords[wa]=informåcion do sistinme,dma,Canås DMA +Keywords[xh]=dma,DMA-Imijelo,Ulwazi Lwendlela yokusebenza +Keywords[zh_CN]=dma,DMA-Channels,System Information,DMA 通道,系统信息 +Keywords[zh_TW]=dma,DMA-Channels,System Information,DMA通道,系統資訊 +Keywords[zu]=dma,Imigudu-DMA,Ulwazi lwesistimu + diff --git a/kcontrol/info/info.cpp b/kcontrol/info/info.cpp new file mode 100644 index 000000000..ea74ed9ac --- /dev/null +++ b/kcontrol/info/info.cpp @@ -0,0 +1,495 @@ +/* + Main Widget for showing system-dependent information. + (But all functions in THIS FILE should be system independent !) + + (C) 1998-2003 by Helge Deller <deller@kde.org> + + ** main.cpp includes this file ! ** + + This source-file includes another system-dependet sourcefile called + info_<systemname>.cpp + which should define one or more of the following defines to + indicate, that this information is really available. + + #define INFO_CPU_AVAILABLE + #define INFO_IRQ_AVAILABLE + #define INFO_DMA_AVAILABLE + #define INFO_PCI_AVAILABLE + #define INFO_IOPORTS_AVAILABLE + #define INFO_SOUND_AVAILABLE + #define INFO_DEVICES_AVAILABLE + #define INFO_SCSI_AVAILABLE + #define INFO_PARTITIONS_AVAILABLE + #define INFO_XSERVER_AVAILABLE + + right now, there is the problem, that also the .desktop-files should + depend on the systemname, so that only available .desktop-files will + be copied to kde/applnk/Settings/Information !! +*/ + +#include <qheader.h> +#include <qwhatsthis.h> +#include <qlayout.h> + +#include <kglobalsettings.h> +#include <kiconloader.h> +#include <kdialog.h> + +#include "info.h" /* include the forward declares... */ + +#include <X11/Xlib.h> + +/* All Functions GetInfo_xyz() can set GetInfo_ErrorString, when a special + error-message should be shown to the user.... + If GetInfo_ErrorString is not modified in the function, the default string + DEFAULT_ERRORSTRING will be used... +*/ + +static QString *GetInfo_ErrorString; /* should always point to: + KInfoListWidget::ErrorString */ +static bool sorting_allowed; /* is sorting allowed by user ? */ + + + +#if defined(__linux__) +# define DEFAULT_ERRORSTRING QString::null /* i18n("Maybe the proc-filesystem is not enabled in Linux-Kernel.") */ +#elif defined(__hpux) +# define DEFAULT_ERRORSTRING QString::null +#else +#define DEFAULT_ERRORSTRING i18n("Maybe this system is not completely supported yet :-(") +#endif + + + + + +/* easier to read with such a define ! */ +#define I18N_MAX(txt,in,fm,maxw) \ + { int n = fm.width(txt=in); if (n>maxw) maxw=n; } + +#define PIXEL_ADD 20 // add x Pixel to multicolumns.. + +#define HEXDIGITS (sizeof(int)*8/4) /* 4 Bytes = 32 Bits = 8 Hex-Digits */ + +static const QString Value( int val, int numbers=1 ) +{ + return KGlobal::locale()->formatNumber(val, 0).rightJustify(numbers); +} + +static const QString HexStr(unsigned long val, int digits ) +{ + QString hexstr; + int i; + hexstr = QString::fromLatin1("0x%1").arg(val, digits, 16/*=HEX*/); + for (i=hexstr.length()-1; i>0; --i) + if (hexstr[i]==' ') + hexstr[i] = '0'; + return hexstr; +} + +static struct _event_table { + const char *name; + long value; +} event_table[] = { + { "KeyPressMask", KeyPressMask }, + { "KeyReleaseMask", KeyReleaseMask }, + { "ButtonPressMask", ButtonPressMask }, + { "ButtonReleaseMask", ButtonReleaseMask }, + { "EnterWindowMask", EnterWindowMask }, + { "LeaveWindowMask", LeaveWindowMask }, + { "PointerMotionMask", PointerMotionMask }, + { "PointerMotionHintMask", PointerMotionHintMask }, + { "Button1MotionMask", Button1MotionMask }, + { "Button2MotionMask", Button2MotionMask }, + { "Button3MotionMask", Button3MotionMask }, + { "Button4MotionMask", Button4MotionMask }, + { "Button5MotionMask", Button5MotionMask }, + { "ButtonMotionMask", ButtonMotionMask }, + { "KeymapStateMask", KeymapStateMask }, + { "ExposureMask", ExposureMask }, + { "VisibilityChangeMask", VisibilityChangeMask }, + { "StructureNotifyMask", StructureNotifyMask }, + { "ResizeRedirectMask", ResizeRedirectMask }, + { "SubstructureNotifyMask", SubstructureNotifyMask }, + { "SubstructureRedirectMask",SubstructureRedirectMask }, + { "FocusChangeMask", FocusChangeMask }, + { "PropertyChangeMask", PropertyChangeMask }, + { "ColormapChangeMask", ColormapChangeMask }, + { "OwnerGrabButtonMask", OwnerGrabButtonMask }, + { 0L, 0 }}; + + +static QListViewItem* XServer_fill_screen_info( QListViewItem *lBox, QListViewItem *last, + Display *dpy, int scr, int default_scr) +{ + unsigned width, height; + double xres, yres; + int i, + ndepths, + *depths; + Screen *s = ScreenOfDisplay(dpy,scr); /* opaque structure */ + QListViewItem *item; + + /* + * there are 2.54 centimeters to an inch; so there are 25.4 millimeters. + * + * dpi = N pixels / (M millimeters / (25.4 millimeters / 1 inch)) + * = N pixels / (M inch / 25.4) + * = N * 25.4 pixels / M inch + */ + + xres = ((double)(DisplayWidth(dpy,scr) *25.4)/DisplayWidthMM(dpy,scr) ); + yres = ((double)(DisplayHeight(dpy,scr)*25.4)/DisplayHeightMM(dpy,scr)); + + item = new QListViewItem(lBox,last, i18n("Screen # %1").arg((int)scr,-1), + (scr==default_scr) ? i18n("(Default Screen)") : QString::null ); + item->setExpandable(true); + if (scr==default_scr) + item->setOpen(true); + last = new QListViewItem(item, i18n("Dimensions"), + i18n("%1 x %2 Pixel (%3 x %4 mm)") + .arg( (int)DisplayWidth(dpy,scr) ) + .arg( (int)DisplayHeight(dpy,scr) ) + .arg( (int)DisplayWidthMM(dpy,scr) ) + .arg( (int)DisplayHeightMM (dpy,scr) )); + + last = new QListViewItem(item, last, i18n("Resolution"), + i18n("%1 x %2 dpi") + .arg( (int)(xres+0.5) ) + .arg( (int)(yres+0.5) )); + + ndepths = 0; + depths = 0; + depths = XListDepths (dpy, scr, &ndepths); + if (depths) { + QString txt; + + for (i = 0; i < ndepths; i++) { + txt = txt + Value(depths[i]); + if (i < ndepths - 1) + txt = txt + QString::fromLatin1(", "); + } + + last = new QListViewItem(item, last, i18n("Depths (%1)").arg(ndepths,-1), txt); + XFree((char *) depths); + } + + last = new QListViewItem(item, last, i18n("Root Window ID"), + HexStr((unsigned long)RootWindow(dpy,scr),HEXDIGITS)); + last = new QListViewItem(item, last, i18n("Depth of Root Window"), + (DisplayPlanes (dpy, scr) == 1) + ? i18n("%1 plane").arg(DisplayPlanes(dpy,scr)) /*singular*/ + : i18n("%1 planes").arg(DisplayPlanes(dpy,scr)));/*plural*/ + last = new QListViewItem(item, last, i18n("Number of Colormaps"), + i18n("minimum %1, maximum %2") + .arg((int)MinCmapsOfScreen(s)).arg((int)MaxCmapsOfScreen(s))); + last = new QListViewItem(item, last, i18n("Default Colormap"), + Value((int)DefaultColormap(dpy,scr))); + last = new QListViewItem(item, last, i18n("Default Number of Colormap Cells"), + Value((int)DisplayCells(dpy, scr))); + last = new QListViewItem(item, last, i18n("Preallocated Pixels"), + i18n("Black %1, White %2") + .arg(KGlobal::locale()->formatNumber(BlackPixel(dpy,scr), 0)) + .arg(KGlobal::locale()->formatNumber(WhitePixel(dpy,scr), 0))); + + QString YES(i18n("Yes")); + QString NO(i18n("No")); + last = new QListViewItem(item, last, i18n("Options"), + i18n("backing-store: %1, save-unders: %2") + .arg( (DoesBackingStore(s) == NotUseful) ? NO : + ((DoesBackingStore(s) == Always) ? YES : i18n("When mapped")) ) + .arg( DoesSaveUnders(s) ? YES : NO )); + + XQueryBestSize (dpy, CursorShape, RootWindow(dpy,scr), 65535, 65535, + &width, &height); + last = new QListViewItem(item, last, i18n("Largest Cursor"), + (width == 65535 && height == 65535) + ? i18n("unlimited") : QString::fromLatin1("%1 x %2").arg(width).arg(height)); + + last = new QListViewItem(item, last, i18n("Current Input Event Mask"), + HexStr((unsigned long)EventMaskOfScreen(s),HEXDIGITS)); + item = last; + struct _event_table *etp; + for (etp=event_table; etp->name; etp++) { + if (EventMaskOfScreen(s) & etp->value) + item = new QListViewItem(last, item, + i18n("Event = %1").arg(HexStr(etp->value,HEXDIGITS)), + etp->name ); + } + + return item; +} + +static const QString Order( int order ) +{ + if (order==LSBFirst) return i18n("LSBFirst"); else + if (order==MSBFirst) return i18n("MSBFirst"); else + return i18n("Unknown Order %1").arg(order); +} + +static const QString BitString( unsigned long n ) +{ + return i18n("1 Bit", "%n Bits", n); // singular & plural form of "%d Bit" +} + +static const QString ByteString( unsigned long n ) +{ + /* explanation in BR #52640 (http://bugs.kde.org/show_bug.cgi?id=52640) */ + if (n == 1) + return i18n("1 Byte"); // singular form: "1 Byte" (yes, it's "1", not "%1"!) + + return i18n("%1 Bytes") // plural form: "%1 Bytes" + .arg(KGlobal::locale()->formatNumber(n,0)); +} + +static bool GetInfo_XServer_Generic( QListView *lBox ) +{ + /* Many parts of this source are taken from the X11-program "xdpyinfo" */ + + int i,n; + long req_size; + + Display *dpy; + XPixmapFormatValues *pmf; + + QString str,txt; + QListViewItem *last, *item, *next; + + dpy = XOpenDisplay(0); + if (!dpy) + return false; + + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + sorting_allowed = false; + + next = new QListViewItem(lBox, i18n("Server Information")); + next->setPixmap(0, SmallIcon("kcmx")); + next->setOpen(true); + next->setSelectable(false); + next->setExpandable(false); + + last = new QListViewItem(next, i18n("Name of the Display"), + DisplayString(dpy)); + + last = new QListViewItem(next, last, i18n("Vendor String"), QString::fromLatin1(ServerVendor(dpy))); + last = new QListViewItem(next, last, i18n("Vendor Release Number"), + Value((int)VendorRelease(dpy))); + + last = new QListViewItem(next, last, i18n("Version Number"), + QString::fromLatin1("%1.%2").arg((int)ProtocolVersion(dpy)) + .arg((int)ProtocolRevision(dpy))); + + last = item = new QListViewItem(next, last, i18n("Available Screens")); + last->setOpen(true); + last->setExpandable(true); + for (i=0; i<ScreenCount(dpy); i++) { + item = XServer_fill_screen_info(last, item, dpy, i, (int)DefaultScreen(dpy)); + if (i==0) item->setOpen(true); + } + + last = new QListViewItem( next, last, i18n("Supported Extensions") ); + item = last; + + int extCount; + char **extensions = XListExtensions( dpy, &extCount ); + for ( i = 0; i < extCount; i++ ) { + item = new QListViewItem( last, item, QString::fromLatin1( extensions[i] ) ); + } + XFreeExtensionList( extensions ); + + pmf = XListPixmapFormats(dpy, &n); + last = item = new QListViewItem(next, last, i18n("Supported Pixmap Formats")); + if (pmf) { + last->setExpandable(true); + for (i=0; i<n; i++) { + item = new QListViewItem(last, item, + i18n("Pixmap Format #%1").arg(i+1), + i18n("%1 BPP, Depth: %2, Scanline padding: %3") + .arg(pmf[i].bits_per_pixel) + .arg(BitString(pmf[i].depth)) + .arg(BitString(pmf[i].scanline_pad))); + } + XFree ((char *)pmf); + } + + req_size = XExtendedMaxRequestSize(dpy); + if (!req_size) req_size = XMaxRequestSize(dpy); + last = new QListViewItem(next, last, i18n("Maximum Request Size"), + ByteString(req_size*4)); + last = new QListViewItem(next, last, i18n("Motion Buffer Size"), + ByteString(XDisplayMotionBufferSize(dpy))); + + last = item = new QListViewItem(next, last, i18n("Bitmap")); + last->setExpandable(true); + item = new QListViewItem(last, item, i18n("Unit"), + Value(BitmapUnit(dpy)) ); + item = new QListViewItem(last, item, i18n("Order"), + Order(BitmapBitOrder(dpy))); + item = new QListViewItem(last, item, i18n("Padding"), + Value(BitmapPad(dpy))); + + last = new QListViewItem(next, last, i18n("Image Byte Order"), + Order(ImageByteOrder(dpy))); + + XCloseDisplay (dpy); + return true; +} + + + +/* +*************************************************************************** +*************************************************************************** +*************************************************************************** +*/ + + + +void KInfoListWidget::load() +{ + bool ok = false; + + lBox->clear(); + + /* Delete the user-visible ErrorString, before calling the + retrieve-function. If the function wants the widget to show + another string, then it change *GetInfo_ErrorString ! */ + ErrorString = i18n("No information available about %1.").arg(title) + + QString::fromLatin1("\n\n") + DEFAULT_ERRORSTRING; + GetInfo_ErrorString = &ErrorString; /* save the address of ErrorString */ + + sorting_allowed = true; /* the functions may set that */ + lBox->setSorting(-1); /* No Sorting per default */ + + if (getlistbox) + ok = (*getlistbox)(lBox); /* retrieve the information */ + + if (lBox->header()->count()<=1) + lBox->addColumn(title); /* set default title */ + + /* is the user allowed to use sorting ? */ + lBox->header()->setClickEnabled(sorting_allowed); + lBox->header()->setFont(KGlobalSettings::generalFont()); + lBox->setShowSortIndicator(sorting_allowed); + + if (ok) + { + widgetStack->raiseWidget(lBox); + } + else + { + NoInfoText->setText(ErrorString); + widgetStack->raiseWidget(NoInfoText); + } + + emit changed(false); +} + + +QString KInfoListWidget::quickHelp() const +{ + return i18n("<h1>System Information</h1>" + " All the information modules return information about a certain" + " aspect of your computer hardware or your operating system." + " Not all modules are available on all hardware architectures" + " and/or operating systems." ); +} + + +KInfoListWidget::KInfoListWidget(const QString &_title, QWidget *parent, const char *name, + bool _getlistbox(QListView *lbox)) + : KCModule(parent, name), + title(_title) +{ + KAboutData *about = + new KAboutData(I18N_NOOP("kcminfo"), + I18N_NOOP("KDE Panel System Information Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1998 - 2002 Helge Deller")); + + about->addAuthor("Helge Deller", 0, "deller@kde.org"); + setAboutData( about ); + + setButtons(KCModule::Help); + getlistbox = _getlistbox; + GetInfo_ErrorString = 0; + QHBoxLayout *layout = new QHBoxLayout(this, 0, KDialog::spacingHint()); + widgetStack = new QWidgetStack(this); + layout->addWidget(widgetStack); + lBox = new QListView(widgetStack); + widgetStack->addWidget(lBox, 0); + lBox->setMinimumSize(200,120); + lBox->setFont(KGlobalSettings::generalFont()); /* default font */ + lBox->setAllColumnsShowFocus(true); + QWhatsThis::add( lBox, i18n( "This list displays system information on the selected category." ) ); + NoInfoText = new QLabel(widgetStack); + widgetStack->addWidget(NoInfoText, 1); + NoInfoText->setAlignment(AlignCenter | WordBreak); + widgetStack->raiseWidget(NoInfoText); + load(); +} + + + +/* Helper-function to read output from an external program */ +static int GetInfo_ReadfromPipe( QListView *lBox, const char *FileName, bool WithEmptyLines = true ) +{ + FILE *pipe; + QListViewItem* olditem = 0L; + QString s; + + if ((pipe = popen(FileName, "r")) == NULL) { + pclose(pipe); + return 0; + } + + QTextStream t(pipe, IO_ReadOnly); + + while (!t.atEnd()) { + s = t.readLine(); + if (!WithEmptyLines && s.length()==0) + continue; + olditem = new QListViewItem(lBox, olditem, s); + } + + pclose(pipe); + + return (lBox->childCount()); +} + +/* +*************************************************************************** +** Include system-specific code ** +*************************************************************************** +*/ + +#ifdef __linux__ +#include "info_linux.cpp" +#elif defined(sgi) && sgi +#include "info_sgi.cpp" +#elif defined(__FreeBSD__) || defined (__DragonFly__) +#include "info_fbsd.cpp" +#elif __hpux +#include "info_hpux.cpp" +#elif __NetBSD__ +#include "info_netbsd.cpp" +#elif __OpenBSD__ +#include "info_openbsd.cpp" +#elif defined(__svr4__) && defined(sun) +#include "info_solaris.cpp" +#elif __svr4__ +#include "info_svr4.cpp" +#elif _AIX +#include "info_aix.cpp" +#elif defined(__APPLE__) +#include "info_osx.cpp" +#else +#include "info_generic.cpp" /* Default for unsupportet systems.... */ +#endif + +/* +*************************************************************************** +** End of: Include system-specific code ** +*************************************************************************** +*/ diff --git a/kcontrol/info/info.h b/kcontrol/info/info.h new file mode 100644 index 000000000..c55c1b2a5 --- /dev/null +++ b/kcontrol/info/info.h @@ -0,0 +1,53 @@ +#ifndef _INFO_H_ +#define _INFO_H_ + +#include <qwidget.h> +#include <qwidgetstack.h> +#include <qframe.h> +#include <qlabel.h> +#include <qtabdialog.h> +#include <qpushbutton.h> +#include <qtimer.h> +#include <qlistview.h> +#include <qfile.h> +#include <qevent.h> + +#include <kcmodule.h> +#include <kaboutdata.h> + +#include "config.h" + +/* function call-back-prototypes... */ + +bool GetInfo_CPU( QListView *lBox ); +bool GetInfo_IRQ( QListView *lBox ); +bool GetInfo_DMA( QListView *lBox ); +bool GetInfo_PCI( QListView *lBox ); +bool GetInfo_IO_Ports( QListView *lBox ); +bool GetInfo_Sound( QListView *lBox ); +bool GetInfo_Devices( QListView *lBox ); +bool GetInfo_SCSI( QListView *lBox ); +bool GetInfo_Partitions( QListView *lBox ); +bool GetInfo_XServer_and_Video( QListView *lBox ); +bool GetInfo_CD_ROM( QListView *lBox ); /* New CD-ROM Info */ +extern bool GetInfo_OpenGL( QListView *lBox ); + +class KInfoListWidget : public KCModule +{ +public: + KInfoListWidget(const QString &_title, QWidget *parent, const char *name=0, bool _getlistbox (QListView *)=0); + + virtual void load(); + virtual QString quickHelp() const; + +private: + QListView *lBox; + bool (*getlistbox) (QListView *); + QString title; + + QLabel *NoInfoText; + QString ErrorString; + QWidgetStack *widgetStack; +}; + +#endif diff --git a/kcontrol/info/info_aix.cpp b/kcontrol/info/info_aix.cpp new file mode 100644 index 000000000..8aaee4f6d --- /dev/null +++ b/kcontrol/info/info_aix.cpp @@ -0,0 +1,486 @@ +/* + * info_aix.cpp + * + * Reza Arbab <arbab@austin.ibm.com> + * + * GetInfo_Partitions() and its helpers (get_fs_usage, fs_adjust_blocks) + * taken from info_hpux.cpp. + * + */ + +#include <cf.h> +#define class _class +#include <odmi.h> +#include <sys/cfgodm.h> +#include <sys/cfgdb.h> +#undef class +#include <nl_types.h> +#include <string.h> +#include <kdebug.h> +#include <stdlib.h> + +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PCI_AVAILABLE + +#include <sys/statfs.h> +#include <sys/statvfs.h> +#include <sys/types.h> +#include <unistd.h> +#include <fstab.h> + +#define INFO_PARTITIONS_AVAILABLE + +#include <errno.h> +#include <sys/utsname.h> + +#define INFO_CPU_AVAILABLE + +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_XSERVER_AVAILABLE + +char * +device_description(struct CuDv *cudv) +{ + char *desc = NULL; + struct PdDv *pddv = cudv->PdDvLn; /* link to Predefined Devices database */ + nl_catd cat; + + cat = catopen("/usr/lib/methods/devices.cat", NL_CAT_LOCALE); + if ((int)cat == -1) + return NULL; + + desc = strdup( catgets(cat, pddv->setno, pddv->msgno, "N/A") ); + catclose(cat); + + return desc; +} + +bool +list_devices(QListView *lBox, char *criteria) +{ + struct CuDv *cudv; /* Customized Devices */ + struct listinfo info; + int i; + char *cudv_desc; + QString cudv_status; + QListViewItem *lastitem = NULL; + + lBox->addColumn(i18n("Name")); + lBox->addColumn(i18n("Status")); + lBox->addColumn(i18n("Location")); + lBox->addColumn(i18n("Description")); + + if (odm_initialize() == -1) + { + kdError(0) << "odm_initialize() failed: odmerrno = " << odmerrno << endl; + return(false); + } + + cudv = (struct CuDv *) odm_get_list(CuDv_CLASS, criteria, &info, 100, 2); + + if ((int)cudv == -1) + { + odm_terminate(); + kdError(0) << "odm_get_list() failed: odmerrno = " << odmerrno << endl; + return(false); + } + else if (!cudv) /* empty list */ + { + odm_terminate(); + return(true); + } + + for (i=0; i<info.num; i++) + { + switch(cudv[i].status) + { + case DEFINED: cudv_status = QString("Defined"); break; + case AVAILABLE: cudv_status = QString("Available"); break; + case STOPPED: cudv_status = QString("Stopped"); break; + default: cudv_status = QString("Unknown"); + } + cudv_desc = device_description(&cudv[i]); + + lastitem = new QListViewItem(lBox, lastitem, + QString(cudv[i].name), + cudv_status, + QString(cudv[i].location), + QString(cudv_desc ? cudv_desc : "N/A") ); + + if (cudv_desc) free(cudv_desc); + } + + if (odm_free_list(cudv, &info) == -1) + { + odm_terminate(); + kdError(0) << "odm_free_list() failed: odmerrno = " << odmerrno << endl; + return(false); + } + + odm_terminate(); + return true; +} + +enum CHIP +{ + P2SC, Power, Power2, Power3, Power3_II, PowerPC, + PowerPC_604e, PowerPersonal, RD64_II, RS_III, RS64, RS64_II, + RS64_III, RS64_IV, RSC, ThinkPad, unknown, + NUM_CHIPS +}; +static const char chip_name[NUM_CHIPS][16] = +{ + "P2SC", "Power", "Power2", "Power3", "Power3-II", "PowerPC", + "PowerPC 604e", "PowerPersonal", "RD64-II", "RS-III", "RS64", "RS64-II", + "RS64-III", "RS64-IV", "RSC", "ThinkPad", "unknown" +}; + +struct model +{ + char model_ID[21]; + char machine_type[21]; + char processor_speed[21]; + unsigned short architecture; /* enum CHIP */ +}; + +struct model _models[] = +{ + { "02", "7015-930", "25", Power }, + { "10", "7013-530", "25", Power }, + { "10", "7016-730", "25", Power }, + { "11", "7013-540", "30", Power }, + { "14", "7013-540", "30", Power }, + { "18", "7013-53H", "33", Power }, + { "1C", "7013-550", "41.6", Power }, + { "20", "7015-930", "25", Power }, + { "2E", "7015-950", "41", Power }, + { "30", "7013-520", "20", Power }, + { "31", "7012-320", "20", Power }, + { "34", "7013-52H", "25", Power }, + { "35", "7012-32H", "25", Power }, + { "37", "7012-340", "33", Power }, + { "38", "7012-350", "41", Power }, + { "41", "7011-20", "33", PowerPC }, + { "45", "7011-220", "33", PowerPC }, + { "42", "7006-41T/41W", "80", PowerPC }, + { "43", "7008-M20", "33", Power }, + { "43", "7008-M2A", "33", Power }, + { "46", "7011-250", "66", PowerPC }, + { "47", "7011-230", "45", RSC }, + { "48", "7009-C10", "80", PowerPC }, +/* 4C models use a different table -- see below */ + { "4C", "70XX", "(unknown)", unknown }, + { "57", "7012-390", "67", Power2 }, + { "57", "7030-3BT", "67", Power2 }, + { "57", "9076-SP2 Thin", "67", Power2 }, + { "58", "7012-380", "59", Power2 }, + { "58", "7030-3AT", "59", Power2 }, + { "59", "7012-39H", "67", Power2 }, + { "59", "9076-SP2 Thin w/L2", "67", Power2 }, + { "5C", "7013-560", "50", Power }, + { "63", "7015-970", "50", Power }, + { "63", "7015-97B", "50", Power }, + { "64", "7015-980", "62.5", Power }, + { "64", "7015-98B", "62.5", Power }, + { "66", "7013-580", "62.5", Power }, + { "67", "7013-570", "50", Power }, + { "67", "7015-R10", "50", Power }, + { "70", "7013-590", "66", Power2 }, + { "70", "9076-SP2 Wide", "66", Power2 }, + { "71", "7013-58H", "55", Power2 }, + { "72", "7013-59H", "66", Power2 }, + { "72", "7015-R20", "66", Power2 }, + { "72", "9076-SP2 Wide", "66", Power2 }, + { "75", "7012-370", "62", Power }, + { "75", "7012-375", "62", Power }, + { "75", "9076-SP1 Thin", "62", Power }, + { "76", "7012-360", "50", Power }, + { "76", "7012-365", "50", Power }, + { "77", "7012-350", "41", Power }, + { "77", "7012-355", "41", Power }, + { "77", "7013-55L", "41.6", Power }, + { "79", "7013-591", "77", Power2 }, + { "79", "9076-SP2 Wide", "77", Power2 }, + { "80", "7015-990", "71.5", Power2 }, + { "81", "7015-R24", "71.5", P2SC }, + { "89", "7013-595", "135", P2SC }, + { "89", "9076-SP2 Wide", "135", P2SC }, + { "90", "7009-C20", "120", PowerPC }, + { "91", "7006-42W/42T", "120", PowerPC }, + { "94", "7012-397", "160", P2SC }, + { "94", "9076-SP2 Thin", "160", P2SC }, + { "A0", "7013-J30", "75", PowerPC }, + { "A1", "7013-J40", "112", PowerPC }, + { "A3", "7015-R30", "(unknown)", PowerPC }, + { "A4", "7015-R40", "(unknown)", PowerPC }, + { "A4", "7015-R50", "(unknown)", PowerPC }, + { "A4", "9076-SP2 High", "(unknown)", PowerPC }, + { "A6", "7012-G30", "(unknown)", PowerPC }, + { "A7", "7012-G40", "(unknown)", PowerPC }, + { "C0", "7024-E20", "(unknown)", PowerPC }, + { "C0", "7024-E30", "(unknown)", PowerPC }, + { "C4", "7025-F30", "(unknown)", PowerPC }, + { "F0", "7007-N40", "50", ThinkPad }, + { "", "", "0", 0 } +}; + +struct model _4C_models[] = +{ + { "IBM,7017-S70", "7017-S70", "125", RS64 }, + { "IBM,7017-S7A", "7017-S7A", "262", RD64_II }, + { "IBM,7017-S80", "7017-S80", "450", RS_III }, + { "IBM,7017-S85", "pSeries 680", "600", RS64_IV }, + { "IBM,7025-F40", "7025-F40", "166/233", PowerPC_604e }, + { "IBM,7025-F50", "7025-F50", "(unknown)", PowerPC_604e }, + { "IBM,7025-F80", "7025-F80", "(unknown)", RS64_III }, + { "IBM,7026-H10", "7025-H10", "166/233", PowerPC_604e }, + { "IBM,7026-H50", "7025-H50", "(unknown)", PowerPC_604e }, + { "IBM,7026-H80", "7025-H80", "(unknown)", RS64_III }, + { "IBM,7026-M80", "7026-M80", "500", RS64_III }, + { "IBM,7025-F40", "7025-F40", "166/233", PowerPC }, + { "IBM,7025-F50", "7025-F50", "(unknown)", PowerPC }, + { "IBM,7025-F80", "7025-F80", "450", PowerPC }, + { "IBM,7026-B80", "pSeries 640", "375", Power3_II }, + { "IBM,7026-H10", "7026-H10", "166/233", PowerPC }, + { "IBM,7026-H50", "7026-H50", "(unknown)", PowerPC }, + { "IBM,7026-H70", "7026-H70", "340", RS64_II }, + { "IBM,7026-H80", "7026-H80", "450", PowerPC }, + { "IBM,7026-M80", "7026-M80", "500", PowerPC }, + { "IBM,7042-140", "7043-140", "166/200/233/332", PowerPC }, + { "IBM,7042-150", "7043-150", "375", PowerPC }, + { "IBM,7042-240", "7043-240", "166/233", PowerPC }, + { "IBM,7043-140", "7043-140", "166/200/233/332", PowerPC }, + { "IBM,7043-150", "7043-150", "375", PowerPC }, + { "IBM,7043-240", "7043-240", "166/233", PowerPC }, + { "IBM,7043-260", "7043-260", "200", Power3 }, + { "IBM,7248", "7248-100", "100", PowerPersonal }, + { "IBM,7248", "7248-120", "120", PowerPersonal }, + { "IBM,7248", "7248-132", "132", PowerPersonal }, + { "IBM,9076-270", "9076-SP Silver Node", "(unknown)", PowerPC }, + { "", "", "", 0 }, +}; + + +/* all GetInfo_ functions should return TRUE, when the Information + was filled into the lBox-Widget. + returning false indicates, that information was not available. +*/ + +bool +GetInfo_XServer_and_Video( QListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + +/* + * Written using information from: + * + * http://service.software.ibm.com/cgi-bin/support/rs6000.support/techbrowse/tbgaus?gaus_mode=8&documents=B93576892313352&database=task + * + * Not fully implemented. In particular there are ways to resolve the + * "(unknown)" clock speeds of many of these models. See page for details. + * + */ +bool +GetInfo_CPU( QListView *lBox ) +{ + struct utsname info; + struct model *table = _models; /* table of model information */ + char model_ID[21] = ""; /* information for table lookup */ + char cpu_ID[7] = ""; /* unique CPU ID */ + int i; + QListViewItem *lastitem = NULL; + + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + if (uname(&info) == -1) + { + kdError(0) << "uname() failed: errno = " << errno << endl; + return false; + } + + strncat(model_ID, info.machine+8, 2); /* we want the ninth and tenth digits */ + strncat(cpu_ID, info.machine+2, 6); + + if (strcmp(model_ID, "4C") == 0) /* need to use a different model_ID and model table */ + { + if (odm_initialize() == -1) + kdError(0) << "odm_initialize() failed: odmerrno = " << odmerrno << endl; + else + { + struct CuAt cuat; /* Customized Device attribute */ + + /* equivalent to uname -M */ + if ( odm_get_first(CuAt_CLASS, (char *)"name='sys0' and attribute='modelname'", &cuat) ) + { + strcpy(model_ID, cuat.value); + table = _4C_models; + } + + odm_terminate(); + } + } + + lastitem = new QListViewItem(lBox, lastitem, QString("CPU ID"), QString(cpu_ID)); + lastitem = new QListViewItem(lBox, lastitem, QString("Node"), QString(info.nodename)); + lastitem = new QListViewItem(lBox, lastitem, QString("OS"), QString(info.sysname) + + QString(" ") + QString(info.version) + QString(".") + QString(info.release)); + + for (i=0; *(table[i].model_ID); i++) + if (strcmp(model_ID, table[i].model_ID) == 0) + { + lastitem = new QListViewItem(lBox, lastitem, QString("Machine Type"), QString(table[i].machine_type)); + lastitem = new QListViewItem(lBox, lastitem, QString("Architecture"), QString(chip_name[table[i].architecture])); + lastitem = new QListViewItem(lBox, lastitem, QString("Speed"), QString(table[i].processor_speed) + QString(" Mhz")); + break; + } + + return(true); +} + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool +GetInfo_PCI( QListView *lBox ) +{ + return list_devices(lBox, (char *)"PdDvLn like '*/pci/*'"); +} + +bool GetInfo_IO_Ports( QListView * ) +{ + return false; +} + +bool GetInfo_Sound( QListView * ) +{ + return false; +} + +bool +GetInfo_Devices( QListView *lBox ) +{ + return list_devices(lBox, (char *)"PdDvLn like '*'"); +} + +bool +GetInfo_SCSI( QListView *lBox ) +{ + return list_devices(lBox, (char *)"PdDvLn like '*/scsi/*'"); +} + +/* 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; +} diff --git a/kcontrol/info/info_fbsd.cpp b/kcontrol/info/info_fbsd.cpp new file mode 100644 index 000000000..6e936801a --- /dev/null +++ b/kcontrol/info/info_fbsd.cpp @@ -0,0 +1,457 @@ +/* + * info_fbsd.cpp is part of the KDE program kcminfo. This displays + * various information about the system (hopefully a FreeBSD system) + * it's running on. + * + * All of the devinfo bits were blatantly stolen from the devinfo utility + * provided with FreeBSD 5.0 (and later). No gross hacks were harmed + * during the creation of info_fbsd.cpp. Thanks Mike. + */ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +/* + * all following functions should return TRUE, when the Information + * was filled into the lBox-Widget. Returning FALSE indicates that + * information was not available. + */ + +#ifdef HAVE_CONFIG_H + #include <config.h> +#endif + +#include <sys/types.h> +#include <sys/sysctl.h> + +//#if __FreeBSD_version >= 500042 +// #define we should have devinfo.h +//#else +// #define we probably don't have devinfo.h +//#endif + +#ifdef HAVE_DEVINFO_H + extern "C" { + #include <devinfo.h> + } +#endif + +#include <errno.h> +#include <fstab.h> +#include <string.h> + +#include <qdict.h> +#include <qfile.h> +#include <qptrlist.h> +#include <qstring.h> +#include <qtextstream.h> + +class Device { +public: + Device (QString n=QString::null, QString d=QString::null) + {name=n; description=d;} + QString name, description; +}; + +void ProcessChildren(QString name); +QString GetController(const QString &line); +Device *GetDevice(const QString &line); + +#ifdef HAVE_DEVINFO_H +extern "C" { + int print_irq(struct devinfo_rman *rman, void *arg); + int print_dma(struct devinfo_rman *rman, void *arg); + int print_ioports(struct devinfo_rman *rman, void *arg); + int print_resource(struct devinfo_res *res, void *arg); +} +#endif + +bool GetInfo_CPU (QListView *lBox) +{ + // Modified 13 July 2000 for SMP by Brad Hughes - bhughes@trolltech.com + + int ncpu; + size_t len; + + len = sizeof(ncpu); + sysctlbyname("hw.ncpu", &ncpu, &len, NULL, 0); + + QString cpustring; + for (int i = ncpu; i > 0; i--) { + /* Stuff for sysctl */ + char *buf; + int i_buf; + + // get the processor model + sysctlbyname("hw.model", NULL, &len, NULL, 0); + buf = new char[len]; + sysctlbyname("hw.model", buf, &len, NULL, 0); + + // get the TSC speed if we can + len = sizeof(i_buf); + if (sysctlbyname("machdep.tsc_freq", &i_buf, &len, NULL, 0) != -1) { + cpustring = i18n("CPU %1: %2, %3 MHz").arg(i).arg(buf).arg(i_buf/1000000); + } else { + cpustring = i18n("CPU %1: %2, unknown speed").arg(i).arg(buf); + } + + /* Put everything in the listbox */ + new QListViewItem(lBox, cpustring); + + /* Clean up after ourselves, this time I mean it ;-) */ + delete buf; + } + + return true; +} + +bool GetInfo_IRQ (QListView *lbox) +{ +#ifdef HAVE_DEVINFO_H + /* systat lists the interrupts assigned to devices as well as how many were + generated. Parsing its output however is about as fun as a sandpaper + enema. The best idea would probably be to rip out the guts of systat. + Too bad it's not very well commented */ + /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) + return false; + devinfo_foreach_rman(print_irq, lbox); + return true; +#else + return false; +#endif +} + +bool GetInfo_DMA (QListView *lbox) +{ +#ifdef HAVE_DEVINFO_H + /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) + return false; + devinfo_foreach_rman(print_dma, lbox); + return true; +#else + return false; +#endif +} + +bool GetInfo_IO_Ports (QListView *lbox) +{ +#ifdef HAVE_DEVINFO_H + /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) + return false; + devinfo_foreach_rman(print_ioports, lbox); + return true; +#else + return false; +#endif +} + +bool GetInfo_Sound (QListView *lbox) +{ + QFile *sndstat = new QFile("/dev/sndstat"); + QTextStream *t; + QString s; + QListViewItem *olditem = 0; + + if (!sndstat->exists() || !sndstat->open(IO_ReadOnly)) { + + s = i18n("Your sound system could not be queried. /dev/sndstat does not exist or is not readable."); + olditem = new QListViewItem(lbox, olditem, s); + } else { + t = new QTextStream(sndstat); + while (!(s=t->readLine()).isNull()) { + olditem = new QListViewItem(lbox, olditem, s); + } + + delete t; + sndstat->close(); + } + + delete sndstat; + return true; +} + +bool GetInfo_SCSI (QListView *lbox) +{ + FILE *pipe; + QFile *camcontrol = new QFile("/sbin/camcontrol"); + QTextStream *t; + QString s; + QListViewItem *olditem = 0; + + if (!camcontrol->exists()) { + s = i18n ("SCSI subsystem could not be queried: /sbin/camcontrol could not be found"); + olditem = new QListViewItem(lbox, olditem, s); + } else if ((pipe = popen("/sbin/camcontrol devlist 2>&1", "r")) == NULL) { + s = i18n ("SCSI subsystem could not be queried: /sbin/camcontrol could not be executed"); + olditem = new QListViewItem(lbox, olditem, s); + } else { + + /* This prints out a list of all the scsi devies, perhaps eventually we could + parse it as opposed to schlepping it into a listbox */ + + t = new QTextStream(pipe, IO_ReadOnly); + + while (true) { + s = t->readLine(); + if ( s.isEmpty() ) + break; + olditem = new QListViewItem(lbox, olditem, s); + } + + delete t; + pclose(pipe); + } + + delete camcontrol; + + if (!lbox->childCount()) + return false; + + return true; +} + +bool GetInfo_PCI (QListView *lbox) +{ + FILE *pipe; + QFile *pcicontrol; + QString s, cmd; + QListViewItem *olditem = 0; + + pcicontrol = new QFile("/usr/sbin/pciconf"); + + if (!pcicontrol->exists()) { + delete pcicontrol; + pcicontrol = new QFile("/usr/X11R6/bin/scanpci"); + if (!pcicontrol->exists()) { + delete pcicontrol; + pcicontrol = new QFile("/usr/X11R6/bin/pcitweak"); + if (!pcicontrol->exists()) { + QString s; + s = i18n("Could not find any programs with which to query your system's PCI information"); + (void) new QListViewItem(lbox, 0, s); + delete pcicontrol; + return true; + } else { + cmd = "/usr/X11R6/bin/pcitweak -l 2>&1"; + } + } else { + cmd = "/usr/X11R6/bin/scanpci"; + } + } else { + cmd = "/usr/sbin/pciconf -l -v 2>&1"; + } + delete pcicontrol; + + if ((pipe = popen(cmd.latin1(), "r")) == NULL) { + s = i18n ("PCI subsystem could not be queried: %1 could not be executed").arg(cmd); + olditem = new QListViewItem(lbox, olditem, s); + } else { + + /* This prints out a list of all the pci devies, perhaps eventually we could + parse it as opposed to schlepping it into a listbox */ + + pclose(pipe); + GetInfo_ReadfromPipe(lbox, cmd.latin1(), true); + } + + if (!lbox->childCount()) { + s = i18n("The PCI subsystem could not be queried, this may need root privileges."); + olditem = new QListViewItem(lbox, olditem, s); + return true; + } + + return true; +} + +bool GetInfo_Partitions (QListView *lbox) +{ + struct fstab *fstab_ent; + + if (setfsent() != 1) /* Try to open fstab */ { + int s_err = errno; + QString s; + s = i18n("Could not check filesystem info: "); + s += strerror(s_err); + (void)new QListViewItem(lbox, 0, s); + } else { + lbox->addColumn(i18n("Device")); + lbox->addColumn(i18n("Mount Point")); + lbox->addColumn(i18n("FS Type")); + lbox->addColumn(i18n("Mount Options")); + + while ((fstab_ent=getfsent())!=NULL) { + new QListViewItem(lbox, fstab_ent->fs_spec, + fstab_ent->fs_file, fstab_ent->fs_vfstype, + fstab_ent->fs_mntops); + } + + lbox->setSorting(0); + lbox->header()->setClickEnabled(true); + + endfsent(); /* Close fstab */ + } + return true; +} + +bool GetInfo_XServer_and_Video (QListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} + +bool GetInfo_Devices (QListView *lbox) +{ + QFile *f = new QFile("/var/run/dmesg.boot"); + if (f->open(IO_ReadOnly)) { + QTextStream qts(f); + QDict<QListViewItem> lv_items; + Device *dev; + QString line, controller; + lbox->setRootIsDecorated(true); + lbox->addColumn("Device"); + lbox->addColumn("Description"); + while ( !(line=qts.readLine()).isNull() ) { + controller = GetController(line); + if (controller.isNull()) + continue; + dev=GetDevice(line); + if (!dev) + continue; + // Ewww assuing motherboard is the only toplevel controller is rather gross + if (controller == "motherboard") { + if (!lv_items[dev->name]) { + lv_items.insert(dev->name, new QListViewItem(lbox, dev->name, dev->description) ); + } + } else { + QListViewItem *parent=lv_items[controller]; + if (parent && !lv_items[dev->name]) { + lv_items.insert(dev->name, new QListViewItem(parent, dev->name, dev->description) ); + } + } + } + return true; + } + return false; +} + +QString GetController(const QString &line) +{ + if ( ( (line.startsWith("ad")) || (line.startsWith("afd")) || (line.startsWith("acd")) ) && (line.find(":") < 6) ) { + QString controller = line; + controller.remove(0, controller.find(" at ")+4); + if (controller.find("-slave") != -1) { + controller.remove(controller.find("-slave"), controller.length()); + } else if (controller.find("-master") != -1) { + controller.remove(controller.find("-master"), controller.length()); + } else + controller=QString::null; + if (!controller.isNull()) + return controller; + } + if (line.find(" on ") != -1) { + QString controller; + controller = line; + controller.remove(0, controller.find(" on ")+4); + if (controller.find(" ") != -1) + controller.remove(controller.find(" "), controller.length()); + return controller; + } + return QString::null; +} + +Device *GetDevice(const QString &line) +{ + Device *dev; + int colon = line.find(":"); + if (colon == -1) + return 0; + dev = new Device; + dev->name = line.mid(0, colon); + dev->description = line.mid(line.find("<")+1, line.length()); + dev->description.remove(dev->description.find(">"), dev->description.length()); + return dev; +} + +#ifdef HAVE_DEVINFO_H + +int print_irq(struct devinfo_rman *rman, void *arg) +{ + QListView *lbox = (QListView *)arg; + if (strcmp(rman->dm_desc, "Interrupt request lines")==0) { + (void)new QListViewItem(lbox, 0, rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return(0); +} + +int print_dma(struct devinfo_rman *rman, void *arg) +{ + QListView *lbox = (QListView *)arg; + if (strcmp(rman->dm_desc, "DMA request lines")==0) { + (void)new QListViewItem(lbox, lbox->lastItem(), rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return(0); +} + +int print_ioports(struct devinfo_rman *rman, void *arg) +{ + QListView *lbox = (QListView *)arg; + + if (strcmp(rman->dm_desc, "I/O ports")==0) { + (void)new QListViewItem(lbox, lbox->lastItem(), rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + else if (strcmp(rman->dm_desc, "I/O memory addresses")==0) { + (void)new QListViewItem(lbox, lbox->lastItem(), rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return(0); +} + +int print_resource(struct devinfo_res *res, void *arg) +{ + struct devinfo_dev *dev; + struct devinfo_rman *rman; + int hexmode; + + QListView *lbox; + + lbox = (QListView *)arg; + + QString s, tmp; + + rman = devinfo_handle_to_rman(res->dr_rman); + hexmode = (rman->dm_size > 100) || (rman->dm_size == 0); + tmp.sprintf(hexmode ? "0x%lx" : "%lu", res->dr_start); + s += tmp; + if (res->dr_size > 1) { + tmp.sprintf(hexmode ? "-0x%lx" : "-%lu", + res->dr_start + res->dr_size - 1); + s += tmp; + } + + dev = devinfo_handle_to_device(res->dr_device); + if ((dev != NULL) && (dev->dd_name[0] != 0)) { + tmp.sprintf(" (%s)", dev->dd_name); + } else { + tmp.sprintf(" ----"); + } + s += tmp; + + (void)new QListViewItem(lbox, lbox->lastItem(), s); + return(0); +} + +#endif diff --git a/kcontrol/info/info_generic.cpp b/kcontrol/info/info_generic.cpp new file mode 100644 index 000000000..5ef80dcca --- /dev/null +++ b/kcontrol/info/info_generic.cpp @@ -0,0 +1,88 @@ +/* + + 1998 by Helge Deller (deller@gmx.de) + free source under GPL + + !!!!! this file will be included by info.cpp !!!!! +*/ + + +// Default for unsupportet systems + +// the following defines are not really ok here, but maybe we should show, what +// Information could be displayed here.... + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE +#define INFO_CD_ROM_AVAILABLE + + +/* 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 * ) +{ + return false; +} + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool GetInfo_PCI( QListView * ) +{ + return false; +} + +bool GetInfo_IO_Ports( QListView * ) +{ + return false; +} + +bool GetInfo_Sound( QListView * ) +{ + return false; +} + +bool GetInfo_Devices( QListView * ) +{ + return false; +} + +bool GetInfo_SCSI( QListView * ) +{ + return false; +} + +bool GetInfo_Partitions( QListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( QListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + +/* Generic GetInfo? ~Jahshan */ +bool GetInfo_CD_ROM(QListView * lBox) +{ + return false; +} 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) diff --git a/kcontrol/info/info_linux.cpp b/kcontrol/info/info_linux.cpp new file mode 100644 index 000000000..9d29e890e --- /dev/null +++ b/kcontrol/info/info_linux.cpp @@ -0,0 +1,595 @@ +/* + + Linux-specific Information about the Hardware. + + (C) Copyright 1998-2006 by Helge Deller <deller@gmx.de> + (C) Copyright 2006 by Jahshan Bhatti <jabhatti91@gmail.com> (CD-ROM Info) + + To do (maybe?): + - include Information about XFree86 and/or Accelerated X + (needs to change configure-skript, to see, if Header-files are available !) + - maybe also include information about the video-framebuffer devices + - rewrite detection-routines (maybe not to use the /proc-fs) + - more & better sound-information + + /dev/sndstat support added: 1998-12-08 Duncan Haldane (f.d.m.haldane@cwix.com) + +*/ + +#include <unistd.h> +#include <syscall.h> +#include <stdio.h> +#include <sys/stat.h> +#include <linux/kernel.h> +#include <ctype.h> +#include <config.h> + +#ifdef HAVE_FSTAB_H /* some Linux-versions don't have fstab.h */ +# include <fstab.h> +# include <sys/statfs.h> +# define INFO_PARTITIONS_FULL_INFO /* show complete info */ +#elif defined HAVE_MNTENT_H /* but maybe they have mntent.h ? */ +# include <mntent.h> +# include <sys/vfs.h> +# define INFO_PARTITIONS_FULL_INFO /* show complete info */ +#else +# undef INFO_PARTITIONS_FULL_INFO /* no partitions-info */ +#endif + +#include <qregexp.h> + +#include <kapplication.h> +#include <kiconloader.h> +#include <kstdguiitem.h> + +#define INFO_CPU_AVAILABLE +#define INFO_CPU "/proc/cpuinfo" + +#define INFO_IRQ_AVAILABLE +#define INFO_IRQ "/proc/interrupts" + +#define INFO_DMA_AVAILABLE +#define INFO_DMA "/proc/dma" + +#define INFO_PCI_AVAILABLE +#define INFO_PCI "/proc/pci" + +#define INFO_IOPORTS_AVAILABLE +#define INFO_IOPORTS "/proc/ioports" + +#define INFO_SOUND_AVAILABLE +#define INFO_DEV_SNDSTAT "/dev/sndstat" +#define INFO_SOUND "/proc/sound" +#define INFO_ASOUND "/proc/asound/oss/sndstat" +#define INFO_ASOUND09 "/proc/asound/sndstat" + +#define INFO_DEVICES_AVAILABLE +#define INFO_DEVICES "/proc/devices" +#define INFO_MISC "/proc/misc" + +#define INFO_SCSI_AVAILABLE +#define INFO_SCSI "/proc/scsi/scsi" + +#define INFO_PARTITIONS_AVAILABLE +#define INFO_PARTITIONS "/proc/partitions" +#define INFO_MOUNTED_PARTITIONS "/etc/mtab" /* on Linux... */ + +#define INFO_XSERVER_AVAILABLE + +#define INFO_CD_ROM_AVAILABLE +#define INFO_CD_ROM "/proc/sys/dev/cdrom/info" /* Feature 47242 */ + + +#define MAXCOLUMNWIDTH 600 + +bool GetInfo_ReadfromFile(QListView * lbox, const char *FileName, + const QChar& splitChar, + QListViewItem * lastitem = 0, + QListViewItem ** newlastitem = 0) +{ + bool added = false; + QFile file(FileName); + + if (!file.exists()) { + return false; + } + + if (!file.open(IO_ReadOnly)) { + /* *GetInfo_ErrorString = + i18n("You do not have read-access for the file %1!\nPlease ask your system-administrator for advice!") + .arg(FileName); + */ + return false; + } + QTextStream stream(&file); + QString line; + + while (!stream.atEnd()) { + QString s1, s2; + line = stream.readLine(); + if (!line.isEmpty()) { + if (!splitChar.isNull()) { + int pos = line.find(splitChar); + s1 = line.left(pos-1).stripWhiteSpace(); + s2 = line.mid(pos+1).stripWhiteSpace(); + } + else + s1 = line; + } + lastitem = new QListViewItem(lbox, lastitem, s1, s2); + added = true; + } + + file.close(); + if (newlastitem) + *newlastitem = lastitem; + + return added; +} + + + + +bool GetInfo_CPU(QListView * lBox) +{ + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + return GetInfo_ReadfromFile(lBox, INFO_CPU, ':'); +} + + +bool GetInfo_IRQ(QListView * lBox) +{ + lBox->setFont(KGlobalSettings::fixedFont()); + return GetInfo_ReadfromFile(lBox, INFO_IRQ, 0); +} + +bool GetInfo_DMA(QListView * lBox) +{ + QFile file(INFO_DMA); + + lBox->addColumn(i18n("DMA-Channel")); + lBox->addColumn(i18n("Used By")); + + if (file.exists() && file.open(IO_ReadOnly)) { + QTextStream stream(&file); + QString line; + QListViewItem *child=0L; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + QRegExp rx("^\\s*(\\S+)\\s*:\\s*(\\S+)"); + if (-1 != rx.search(line)) { + child = new QListViewItem(lBox,child,rx.cap(1),rx.cap(2)); + } + } + } + file.close(); + } else { + return false; + } + + return true; +} + +bool GetInfo_PCI(QListView * lBox) +{ + int num; + sorting_allowed = false; /* no sorting by user */ + + /* ry to get the output of the lspci package first */ + if ((num = GetInfo_ReadfromPipe(lBox, "lspci -v", true)) || + (num = GetInfo_ReadfromPipe(lBox, "/sbin/lspci -v", true)) || + (num = GetInfo_ReadfromPipe(lBox, "/usr/sbin/lspci -v", true)) || + (num = GetInfo_ReadfromPipe(lBox, "/usr/local/sbin/lspci -v", true))) + return num; + + /* if lspci failed, read the contents of /proc/pci */ + return GetInfo_ReadfromFile(lBox, INFO_PCI, 0); +} + +bool GetInfo_IO_Ports(QListView * lBox) +{ + lBox->addColumn(i18n("I/O-Range")); + lBox->addColumn(i18n("Used By")); + return GetInfo_ReadfromFile(lBox, INFO_IOPORTS, ':'); +} + +bool GetInfo_Sound(QListView * lBox) +{ + sorting_allowed = false; /* no sorting by user */ + if (GetInfo_ReadfromFile(lBox, INFO_DEV_SNDSTAT, 0)) + return true; + else if (GetInfo_ReadfromFile(lBox, INFO_SOUND, 0)) + return true; + else if (GetInfo_ReadfromFile(lBox, INFO_ASOUND, 0)) + return true; + else + return GetInfo_ReadfromFile(lBox, INFO_ASOUND09, 0); +} + +bool GetInfo_Devices(QListView * lBox) +{ + QFile file; + QListViewItem *misc=0L; + + lBox->setRootIsDecorated(true); + lBox->addColumn(i18n("Devices")); + lBox->addColumn(i18n("Major Number")); + lBox->addColumn(i18n("Minor Number")); + + file.setName(INFO_DEVICES); + if (file.exists() && file.open(IO_ReadOnly)) { + QTextStream stream(&file); + QString line; + QListViewItem *parent=0L, *child=0L; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + if (-1 != line.find("character device",0,false)) { + parent = new QListViewItem(lBox,parent,i18n("Character Devices")); + parent->setPixmap(0,SmallIcon("chardevice")); + parent->setOpen(true); + } else if (-1 != line.find("block device",0,false)) { + parent = new QListViewItem(lBox,parent,i18n("Block Devices")); + parent->setPixmap(0,SmallIcon("blockdevice")); + parent->setOpen(true); + } else { + QRegExp rx("^\\s*(\\S+)\\s+(\\S+)"); + if (-1 != rx.search(line)) { + if (parent) { + child = new QListViewItem(parent,child,rx.cap(2),rx.cap(1)); + } else { + child = new QListViewItem(lBox,parent,rx.cap(2),rx.cap(1)); + } + if (rx.cap(2)=="misc") { + misc=child; + } + } + } + } + } + file.close(); + } else { + return false; + } + + file.setName(INFO_MISC); + if (misc && file.exists() && file.open(IO_ReadOnly)) { + QTextStream stream(&file); + QString line; + QListViewItem *child=0L; + + misc->setText(0,i18n("Miscellaneous Devices")); + misc->setPixmap(0,SmallIcon("memory")); + misc->setOpen(true); + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + QRegExp rx("^\\s*(\\S+)\\s+(\\S+)"); + if (-1 != rx.search(line)) { + child = new QListViewItem(misc,child,rx.cap(2),"10",rx.cap(1)); + } + } + } + file.close(); + } + + return true; +} + +bool GetInfo_SCSI(QListView * lBox) +{ + return GetInfo_ReadfromFile(lBox, INFO_SCSI, 0); +} + +static void cleanPassword(QString & str) +{ + int index = 0; + QString passwd("password="); + + while (index >= 0) + { + index = str.find(passwd, index, FALSE); + if (index >= 0) { + index += passwd.length(); + while (index < (int) str.length() && + str[index] != ' ' && str[index] != ',') + str[index++] = '*'; + } + } +} + +#ifndef INFO_PARTITIONS_FULL_INFO + +bool GetInfo_Partitions(QListView * lBox) +{ + return GetInfo_ReadfromFile(lBox, INFO_PARTITIONS, 0); +} + +#else /* INFO_PARTITIONS_FULL_INFO */ + +// Some Ideas taken from garbazo from his source in info_fbsd.cpp + +#if SIZEOF_LONG > 4 +#define LONG_TYPE unsigned long +#else +#ifdef HAVE_LONG_LONG +#define LONG_TYPE unsigned long long +#else +/* On 32-bit systems we would get an overflow in unsigned int for + drives bigger than 4GB. Let's use the ugly type double ! */ +#define LONG_TYPE double +#endif +#endif + + + +#if ( defined(HAVE_LINUX_RAW_H) || defined(HAVE_SYS_RAW_H) ) && defined(HAVE_SYS_IOCTL_H) && defined(__GNUC__) && !defined(__STRICT_ANSI__) +#include <sys/ioctl.h> +#include <fcntl.h> + +#if defined(HAVE_SYS_RAW_H) +#include <sys/raw.h> +#elif defined(HAVE_LINUX_RAW_H) +#include <linux/raw.h> +#endif + +/* + * get raw device bindings and information + */ +void Get_LinuxRawDevices(QListView *lbox) +{ + int f, i, err; + int new_raw_devs = 1; + struct raw_config_request rq; + QString devname; + QString MB(i18n("MB")); /* "MB" = "Mega-Byte" */ + + /* try to open the raw device control file */ + f = open("/dev/rawctl", O_RDWR); + if (f == -1) { + f = open("/dev/raw", O_RDWR); + new_raw_devs = 0; + } + if (f == -1) + return; + + for (i=1; i<256; i++) { + rq.raw_minor = i; + if (ioctl(f, RAW_GETBIND, &rq)) + continue; + if (!rq.block_major) /* unbound ? */ + continue; + unsigned int minor = rq.block_minor; + char first_letter; + switch ((int)rq.block_major) { + + /* IDE drives */ + case 3: first_letter = 'a'; + set_ide_name: + devname = QString("/dev/hd%1%2") + .arg(QChar(first_letter + minor/64)) + .arg(minor&63); + break; + case 22:first_letter = 'c'; goto set_ide_name; + case 33:first_letter = 'e'; goto set_ide_name; + case 34:first_letter = 'g'; goto set_ide_name; + case 56:first_letter = 'i'; goto set_ide_name; + case 57:first_letter = 'k'; goto set_ide_name; + case 88:first_letter = 'm'; goto set_ide_name; + case 89:first_letter = 'o'; goto set_ide_name; + case 90:first_letter = 'q'; goto set_ide_name; + case 91:first_letter = 's'; goto set_ide_name; + + /* SCSI drives */ + case 8: first_letter = 'a'; + set_scsi_name: + devname = QString("/dev/sd%1%2") + .arg(QChar(first_letter + minor/16)) + .arg(minor&15); + break; + case 65:first_letter = 'q'; goto set_scsi_name; + + /* Compaq /dev/cciss devices */ + case 104: case 105: case 106: + case 107: case 108: case 109: + devname = QString("/dev/cciss/c%1d%2") + .arg((int)rq.block_major-104) + .arg(minor&15); + break; + + /* Compaq Intelligent Drive Array (ida) */ + case 72: case 73: case 74: case 75: + case 76: case 77: case 78: case 79: + devname = QString("/dev/ida/c%1d%2") + .arg((int)rq.block_major-72) + .arg(minor&15); + break; + + default: devname = QString("%1/%2") + .arg((int)rq.block_major) + .arg(minor); + + } + + /* TODO: get device size */ + QString size = ""; + + new QListViewItem(lbox, devname, + QString(new_raw_devs ? "/dev/raw/raw%1" : "/dev/raw%1").arg(i), + "raw", size, " ", ""); + } + close(f); +} +#else +#define Get_LinuxRawDevices(x) /* nothing */ +#endif + +bool GetInfo_Partitions(QListView * lbox) +{ +#define NUMCOLS 6 + QString Title[NUMCOLS]; + QStringList Mounted_Partitions; + bool found_in_List; + int n; + +#ifdef HAVE_FSTAB_H + struct fstab *fstab_ent; +# define FS_NAME fstab_ent->fs_spec // device-name +# define FS_FILE fstab_ent->fs_file // mount-point +# define FS_TYPE fstab_ent->fs_vfstype // fs-type +# define FS_MNTOPS fstab_ent->fs_mntops // mount-options +#else + struct mntent *mnt_ent; + FILE *fp; +# define FS_NAME mnt_ent->mnt_fsname // device-name +# define FS_FILE mnt_ent->mnt_dir // mount-point +# define FS_TYPE mnt_ent->mnt_type // fs-type +# define FS_MNTOPS mnt_ent->mnt_opts // mount-options +#endif + + struct statfs sfs; + LONG_TYPE total, avail; + QString str, mountopts; + QString MB(i18n("MB")); /* "MB" = "Mega-Byte" */ + + +#ifdef HAVE_FSTAB_H + if (setfsent() == 0) /* Try to open fstab */ + return false; +#else + if (!(fp = setmntent("/etc/fstab", "r"))) + return false; +#endif + + /* read the list of already mounted file-systems.. */ + QFile *file = new QFile(INFO_MOUNTED_PARTITIONS); + if (file->open(IO_ReadOnly)) { + char buf[1024]; + while (file->readLine(buf, sizeof( buf )) > 0) { + str = QString::fromLocal8Bit(buf); + if (str.length()) { + int p = str.find(' '); /* find first space. */ + if (p) + str.remove(p, 1024); /* erase all chars including space. */ + Mounted_Partitions.append(str); + } + } + file->close(); + } + delete file; + + /* create the header-tables */ + MB = QString(" ") + MB; + Title[0] = i18n("Device"); + Title[1] = i18n("Mount Point"); + Title[2] = i18n("FS Type"); + Title[3] = i18n("Total Size"); + Title[4] = i18n("Free Size"); + Title[5] = i18n("Mount Options"); + + for (n = 0; n < NUMCOLS; ++n) + lbox->addColumn(Title[n]); + + /* loop through all partitions... */ +#ifdef HAVE_FSTAB_H + while ((fstab_ent = getfsent()) != NULL) +#else + while ((mnt_ent = getmntent(fp)) != NULL) +#endif + { + total = avail = 0; /* initialize size.. */ + found_in_List = (Mounted_Partitions.contains(FS_NAME) > 0); + if (found_in_List && statfs(FS_FILE, &sfs) == 0) { + total = ((LONG_TYPE) sfs.f_blocks) * sfs.f_bsize; + avail = (getuid()? sfs.f_bavail : sfs.f_bfree) + * ((LONG_TYPE) sfs.f_bsize); + }; + /* + if (stat(fstab_ent->fs_file,&st)!=0) + total = 0; + if (!S_ISDIR(st.st_mode)) + total = 0; + */ + mountopts = FS_MNTOPS; + cleanPassword(mountopts); + if (total) + new QListViewItem(lbox, QString(FS_NAME) + " ", + QString(FS_FILE) + " ", + QString(FS_TYPE) + " ", + Value((int) (((total / 1024) + 512) / 1024), + 6) + MB, + Value((int) (((avail / 1024) + 512) / 1024), + 6) + MB, mountopts); + else + new QListViewItem(lbox, QString(FS_NAME), QString(FS_FILE), + QString(FS_TYPE), " ", " ", mountopts); + } + +#ifdef HAVE_FSTAB_H + endfsent(); /* close fstab.. */ +#else + endmntent(fp); /* close fstab.. */ +#endif + + /* get raw device entires if available... */ + Get_LinuxRawDevices(lbox); + + sorting_allowed = true; /* sorting by user allowed ! */ + lbox->setSorting(1); + + return true; +} +#endif /* INFO_PARTITIONS_FULL_INFO */ + + + + +bool GetInfo_XServer_and_Video(QListView * lBox) +{ + return GetInfo_XServer_Generic(lBox); +} + +/* GetInfo for CD-ROM Info by Jahshan Bhatti */ +bool GetInfo_CD_ROM(QListView * lBox) +{ + QFile file(INFO_CD_ROM); + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + if (file.exists() && file.open(IO_ReadOnly)) { + QRegExp rx("(.+):\\s+(\\S.*)"); + QTextStream stream(&file); + QString line; + QListViewItem *child = NULL; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + if (-1 != rx.search(line)) { + QString text = rx.cap(1); + QString value = rx.cap(2); + if (!text.contains('#')) { + if (value == "0") + value = KStdGuiItem::no().plainText(); + if (value == "1") + value = KStdGuiItem::yes().plainText(); + } + child = new QListViewItem(lBox,child,text,value); + } + } else { + child = new QListViewItem(lBox,child,QString::null,QString::null); + } + } + file.close(); + } else { + return false; + } + + return true; +} + diff --git a/kcontrol/info/info_netbsd.cpp b/kcontrol/info/info_netbsd.cpp new file mode 100644 index 000000000..228e32fb0 --- /dev/null +++ b/kcontrol/info/info_netbsd.cpp @@ -0,0 +1,353 @@ +/* + * info_netbsd.cpp is part of the KDE program kcminfo. This displays + * various information about the NetBSD system it's running on. + * + * Originally written by Jaromir Dolecek <dolecek@ics.muni.cz>. CPU info + * code has been imported from implementation of processor.cpp for KDE 1.0 + * by David Brownlee <abs@NetBSD.org> as found in NetBSD packages collection. + * Hubert Feyer <hubertf@NetBSD.org> enhanced the sound information printing + * quite a lot, too. + * + * The code is placed into public domain. Do whatever you want with it. + */ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +/* + * all following functions should return TRUE, when the Information + * was filled into the lBox-Widget. Returning FALSE indicates that + * information was not available. + */ + +#include <sys/types.h> +#include <sys/param.h> +#include <sys/sysctl.h> +#include <sys/mount.h> +#include <stdio.h> /* for NULL */ +#include <stdlib.h> /* for malloc(3) */ +#include <fstab.h> + +#include <qfile.h> +#include <qfontmetrics.h> +#include <qstrlist.h> +#include <qtextstream.h> + +#include <kdebug.h> +#include <kio/global.h> /* for KIO::convertSize() */ + +typedef struct + { + int string; + int name; + const char *title; + } hw_info_mib_list_t; + +bool GetInfo_CPU(QListView *lBox) +{ + static hw_info_mib_list_t hw_info_mib_list[]= { + { 1, HW_MODEL, "Model" }, + { 1, HW_MACHINE, "Machine" }, + { 1, HW_MACHINE_ARCH, "Architecture" }, + { 0, HW_NCPU, "Number of CPUs" }, + { 0, HW_PAGESIZE, "Pagesize" }, + { 0,0,0 } + }; + hw_info_mib_list_t *hw_info_mib; + + int mib[2], num; + char *buf; + size_t len; + QString value; + + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + for ( hw_info_mib = hw_info_mib_list ; hw_info_mib->title ; ++hw_info_mib ) + { + mib[0] = CTL_HW; + mib[1] = hw_info_mib->name; + if ( hw_info_mib->string ) { + sysctl(mib,2,NULL,&len,NULL,0); + if ( (buf = (char*)malloc(len)) ) { + sysctl(mib,2,buf,&len,NULL,0); + value = QString::fromLocal8Bit(buf); + free(buf); + } + else { + value = QString("Unknown"); + } + } + else { + len = sizeof(num); + sysctl(mib,2,&num,&len,NULL,0); + value = QString::number(num); + } + new QListViewItem(lBox, hw_info_mib->title, value); + } + + return true; +} + +// this is used to find out which devices are currently +// on system +static bool GetDmesgInfo(QListView *lBox, const char *filter, + void func(QListView *, QString s)) +{ + QFile *dmesg = new QFile("/var/run/dmesg.boot"); + bool usepipe = false; + FILE *pipe = NULL; + QTextStream *t; + bool seencpu = false; + QString s; + bool found = false; + + if (dmesg->exists() && dmesg->open(IO_ReadOnly)) { + t = new QTextStream(dmesg); + } + else { + delete dmesg; + pipe = popen("/sbin/dmesg", "r"); + if (!pipe) return false; + usepipe = true; + t = new QTextStream(pipe, IO_ReadOnly); + } + + QListViewItem *olditem = NULL; + while(!(s = t->readLine().local8Bit()).isEmpty()) { + if (!seencpu) { + if (s.contains("cpu")) + seencpu = true; + else + continue; + } + if (s.contains("boot device") || + s.contains("WARNING: old BSD partition ID!")) + break; + + if (!filter + || (filter[0] == '^' && s.find(&filter[1]) == 0) + || (filter[0] != '^' && s.contains(filter))) { + if (func) + func(lBox, s); + else + olditem = new QListViewItem(lBox, olditem, s); + found = true; + } + } + + delete t; + if (pipe) + pclose(pipe); + else { + dmesg->close(); + delete dmesg; + } + + return found; +} + + +void +AddIRQLine(QListView *lBox, QString s) +{ + int pos, irqnum; + char numstr[3]; + + pos = s.find(" irq "); + irqnum = (pos < 0) ? 0 : atoi(&s.ascii()[pos+5]); + if (irqnum) + snprintf(numstr, 3, "%02d", irqnum); + else { + // this should never happen + strcpy(numstr, "??"); + } + + new QListViewItem(lBox, numstr, s); +} + +bool GetInfo_IRQ (QListView *lBox) +{ + lBox->addColumn(i18n("IRQ")); + lBox->addColumn(i18n("Device")); + lBox->setSorting(0); + lBox->setShowSortIndicator(FALSE); + (void) GetDmesgInfo(lBox, " irq ", AddIRQLine); + return true; +} + +bool GetInfo_DMA (QListView *) +{ + return false; +} + +bool GetInfo_PCI (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "at pci", NULL)) + new QListViewItem(lbox, i18n("No PCI devices found.")); + return true; +} + +bool GetInfo_IO_Ports (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "port 0x", NULL)) + new QListViewItem(lbox, i18n("No I/O port devices found.")); + return true; +} + +bool GetInfo_Sound (QListView *lbox) +{ + lbox->setSorting(false); + + if (!GetDmesgInfo(lbox, "audio", NULL)) + new QListViewItem(lbox, i18n("No audio devices found.")); + + // append information for each audio devices found + QListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + QString s; + int pos, len; + const char *start; + char *dev; + + s = lvitem->text(0); + // The autoconf message is in form 'audio0 at auvia0: ...' + if (s.find("audio") == 0 && (pos = s.find(" at ")) > 0) { + pos += 4; // skip " at " + start = s.ascii() + pos; + len = (int) strcspn(start, ":\n\t "); + dev = (char *) malloc(1 + len + 1); + sprintf(dev, "^%.*s", len, start); /* safe */ + + GetDmesgInfo(lbox, dev, NULL); + + free(dev); + } + } + + return true; +} + +bool GetInfo_Devices (QListView *lBox) +{ + (void) GetDmesgInfo(lBox, NULL, NULL); + return true; +} + +bool GetInfo_SCSI (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "scsibus", NULL)) + new QListViewItem(lbox, i18n("No SCSI devices found.")); + + // remove the 'waiting %d seconds for devices to settle' message + QListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + QString s = lvitem->text(0); + + if (s.contains("seconds for devices to settle")) { + lbox->removeItem(lvitem); + break; + } + } + + return true; +} + +bool GetInfo_Partitions (QListView *lbox) +{ + int num; // number of mounts + // FIXME: older pkgsrc patches checked ST_RDONLY for this declaration + // what is ST_RDONLY and how does it affect getmntinfo? + struct statfs *mnt; // mount data pointer + + // get mount info + if (!(num=getmntinfo(&mnt, MNT_WAIT))) { + kdError() << "getmntinfo failed" << endl; + return false; + } + + // table headers + lbox->addColumn(i18n("Device")); + lbox->addColumn(i18n("Mount Point")); + lbox->addColumn(i18n("FS Type")); + lbox->addColumn(i18n("Total Size")); + lbox->addColumn(i18n("Free Size")); + lbox->addColumn(i18n("Total Nodes")); + lbox->addColumn(i18n("Free Nodes")); + lbox->addColumn(i18n("Flags")); + + // mnt points into a static array (no need to free it) + for(; num--; ++mnt) { + unsigned long long big[2]; + QString vv[5]; + + big[0] = big[1] = mnt->f_bsize; // coerce the product + big[0] *= mnt->f_blocks; + big[1] *= mnt->f_bavail; // FIXME: use f_bfree if root? + + // convert to strings + vv[0] = KIO::convertSize(big[0]); + vv[1] = QString::fromLatin1("%1 (%2%%)") + .arg(KIO::convertSize(big[1])) + .arg(mnt->f_blocks ? mnt->f_bavail*100/mnt->f_blocks : 0); + + // FIXME: these two are large enough to punctuate + vv[2] = QString::number(mnt->f_files); + vv[3] = QString::fromLatin1("%1 (%2%%) ") + .arg(mnt->f_ffree) + .arg(mnt->f_files ? mnt->f_ffree*100/mnt->f_files : 0); + + vv[4] = QString::null; +#define MNTF(x) if (mnt->f_flags & MNT_##x) vv[4] += QString::fromLatin1(#x " "); + MNTF(ASYNC) + MNTF(DEFEXPORTED) + MNTF(EXKERB) + MNTF(EXNORESPORT) + MNTF(EXPORTANON) + MNTF(EXPORTED) + MNTF(EXPUBLIC) + MNTF(EXRDONLY) + MNTF(IGNORE) + MNTF(LOCAL) + MNTF(NOATIME) + MNTF(NOCOREDUMP) + MNTF(NODEV) + MNTF(NODEVMTIME) + MNTF(NOEXEC) + MNTF(NOSUID) + MNTF(QUOTA) + MNTF(RDONLY) + MNTF(ROOTFS) + MNTF(SOFTDEP) + MNTF(SYMPERM) + MNTF(SYNCHRONOUS) + MNTF(UNION) +#undef MNTF + + // put it in the table + // FIXME: there're more data but we have limited args (this is wrong! just add!) + new QListViewItem(lbox, + // FIXME: names need pad space + mnt->f_mntfromname, + mnt->f_mntonname, + mnt->f_fstypename, + vv[0], vv[1], vv[2], vv[3], vv[4]); + } + + // job well done + return true; +} + +bool GetInfo_XServer_and_Video (QListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} diff --git a/kcontrol/info/info_openbsd.cpp b/kcontrol/info/info_openbsd.cpp new file mode 100644 index 000000000..92995fd78 --- /dev/null +++ b/kcontrol/info/info_openbsd.cpp @@ -0,0 +1,313 @@ +/* + * info_netbsd.cpp is part of the KDE program kcminfo. This displays + * various information about the OpenBSD system it's running on. + * + * Originally written by Jaromir Dolecek <dolecek@ics.muni.cz>. CPU info + * code has been imported from implementation of processor.cpp for KDE 1.0 + * by David Brownlee <abs@NetBSD.org> as found in NetBSD packages collection. + * Hubert Feyer <hubertf@NetBSD.org> enhanced the sound information printing + * quite a lot, too. + * + * The code is placed into public domain. Do whatever you want with it. + */ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +/* + * all following functions should return TRUE, when the Information + * was filled into the lBox-Widget. Returning FALSE indicates that + * information was not available. + */ + +#include <sys/types.h> +#include <sys/param.h> +#include <sys/sysctl.h> +#include <stdio.h> /* for NULL */ +#include <stdlib.h> /* for malloc(3) */ + +#include <qfile.h> +#include <qfontmetrics.h> +#include <qstrlist.h> +#include <qtextstream.h> + +#include <kdebug.h> + +typedef struct + { + int string; + int name; + const char *title; + } hw_info_mib_list_t; + +bool GetInfo_CPU(QListView *lBox) +{ + static hw_info_mib_list_t hw_info_mib_list[]= { + { 1, HW_MODEL, "Model" }, + { 1, HW_MACHINE, "Machine" }, + { 0, HW_NCPU, "Number of CPUs" }, + { 0, HW_PAGESIZE, "Pagesize" }, + { 0,0,0 } + }; + hw_info_mib_list_t *hw_info_mib; + + int mib[2], num; + char *buf; + size_t len; + QString value; + + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + for ( hw_info_mib = hw_info_mib_list ; hw_info_mib->title ; ++hw_info_mib ) + { + mib[0] = CTL_HW; + mib[1] = hw_info_mib->name; + if ( hw_info_mib->string ) { + sysctl(mib,2,NULL,&len,NULL,0); + if ( (buf = (char*)malloc(len)) ) { + sysctl(mib,2,buf,&len,NULL,0); + value = QString::fromLocal8Bit(buf); + free(buf); + } + else { + value = QString("Unknown"); + } + } + else { + len = sizeof(num); + sysctl(mib,2,&num,&len,NULL,0); + value.sprintf("%d", num); + } + new QListViewItem(lBox, hw_info_mib->title, value); + } + + return true; +} + +// this is used to find out which devices are currently +// on system +static bool GetDmesgInfo(QListView *lBox, const char *filter, + void func(QListView *, QString s, void **, bool)) +{ + QFile *dmesg = new QFile("/var/run/dmesg.boot"); + bool usepipe=false; + FILE *pipe=NULL; + QTextStream *t; + bool seencpu=false; + void *opaque=NULL; + QString s; + bool found=false; + + if (dmesg->exists() && dmesg->open(IO_ReadOnly)) { + t = new QTextStream(dmesg); + } + else { + delete dmesg; + pipe = popen("/sbin/dmesg", "r"); + if (!pipe) return false; + usepipe = true; + t = new QTextStream(pipe, IO_ReadOnly); + } + + QListViewItem *olditem = NULL; + while(!(s = t->readLine()).isNull()) { + if (!seencpu) { + if (s.contains("cpu")) + seencpu = true; + else + continue; + } + if (s.contains("boot device") || + s.contains("WARNING: old BSD partition ID!")) + break; + + if (!filter || s.contains(filter)) { + if (func) { + func(lBox, s, &opaque, false); + } + else { + olditem = new QListViewItem(lBox, olditem, s); + } + found = true; + } + } + if (func) { + func(lBox, s, &opaque, true); + } + //lBox->triggerUpdate(); + + delete t; + if (pipe) { + pclose(pipe); + } + else { + dmesg->close(); + delete dmesg; + } + + return found; +} + + +void AddIRQLine(QListView *lBox, QString s, void **opaque, bool ending) +{ + QStrList *strlist = (QStrList *) *opaque; + const char *str; + int pos, irqnum=0; + const char *p; + p = s.latin1(); + + if (!strlist) { + strlist = new QStrList(); + *opaque = (void *) strlist; + } + if (ending) { + str = strlist->first(); + for(;str; str = strlist->next()) { + new QListViewItem(lBox, str); + } + delete strlist; + return; + } + + pos = s.find(" irq "); + irqnum = (pos < 0) ? 0 : atoi(&p[pos+5]); + if (irqnum) { + s.sprintf("%02d%s", irqnum, p); + } + else { + s.sprintf("??%s", p); + } + strlist->inSort(s.latin1()); +} + +bool GetInfo_IRQ (QListView *lBox) +{ + lBox->addColumn(i18n("IRQ")); + lBox->addColumn(i18n("Device")); + (void) GetDmesgInfo(lBox, " irq ", AddIRQLine); + return true; +} + +bool GetInfo_DMA (QListView *) +{ + return false; +} + +bool GetInfo_PCI (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "at pci", NULL)) + new QListViewItem(lbox, i18n("No PCI devices found.")); + return true; +} + +bool GetInfo_IO_Ports (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "port 0x", NULL)) + new QListViewItem(lbox, i18n("No I/O port devices found.")); + return true; +} + +bool GetInfo_Sound (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "audio", NULL)) + new QListViewItem(lbox, i18n("No audio devices found.")); + + // append information on any audio devices found + QListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + QString s; + int pos, len; + const char *start, *end; + char *dev; + + s = lvitem->text(0); + if ((pos = s.find("at ")) >= 0) { + pos += 3; // skip "at " + start = end = s.ascii(); + for(; (*end!=':') && (*end!='\n'); end++); + len = end - start; + dev = (char *) malloc(len + 1); + strncpy(dev, start, len); + dev[len] = '\0'; + + GetDmesgInfo(lbox, dev, NULL); + + free(dev); + } + } + + return true; +} + +bool GetInfo_Devices (QListView *lBox) +{ + (void) GetDmesgInfo(lBox, NULL, NULL); + return true; +} + +bool GetInfo_SCSI (QListView *lbox) +{ + if (!GetDmesgInfo(lbox, "scsibus", NULL)) + new QListViewItem(lbox, i18n("No SCSI devices found.")); + return true; +} + +bool GetInfo_Partitions (QListView *lbox) +{ + QString s; + char *line, *orig_line; + const char *device, *mountpoint, *type, *flags; + FILE *pipe = popen("/sbin/mount", "r"); + QTextStream *t; + + if (!pipe) { + kdError(0) << i18n("Unable to run /sbin/mount.") << endl; + return false; + } + t = new QTextStream(pipe, IO_ReadOnly); + + lbox->addColumn(i18n("Device")); + lbox->addColumn(i18n("Mount Point")); + lbox->addColumn(i18n("FS Type")); + lbox->addColumn(i18n("Mount Options")); + + QListViewItem *olditem = 0; + while (!(s = t->readLine()).isNull()) { + orig_line = line = strdup(s.latin1()); + + device = strsep(&line, " "); + + (void) strsep(&line, " "); // consume word "on" + mountpoint = strsep(&line, " "); + + (void) strsep(&line, " "); // consume word "type" + type = strsep(&line, " "); + + flags = line; + + olditem = new QListViewItem(lbox, olditem, device, mountpoint, + type, flags); + + free(orig_line); + } + + delete t; + pclose(pipe); + return true; +} + +bool GetInfo_XServer_and_Video (QListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} diff --git a/kcontrol/info/info_osx.cpp b/kcontrol/info/info_osx.cpp new file mode 100644 index 000000000..25f23c2d9 --- /dev/null +++ b/kcontrol/info/info_osx.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2003 Benjamin Reed <ranger@befunk.com> + * + * info_osx.cpp is part of the KDE program kcminfo. Copied wholesale + * from info_fbsd.cpp =) + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#define INFO_CPU_AVAILABLE +//#define INFO_IRQ_AVAILABLE +//#define INFO_DMA_AVAILABLE +//#define INFO_PCI_AVAILABLE +//#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + +/* + * all following functions should return TRUE, when the Information + * was filled into the lBox-Widget. Returning FALSE indicates that + * information was not available. + */ + +#include <sys/types.h> +#include <sys/sysctl.h> + +#include <fstab.h> +#include <stdio.h> +#include <stdlib.h> + +#include <iostream.h> + +#include <qdict.h> +#include <qfile.h> +#include <qfontmetrics.h> +#include <qptrlist.h> +#include <qstring.h> +#include <qtextstream.h> + +#include <kdebug.h> + +#include <mach/mach.h> +#include <mach-o/arch.h> + +#ifdef HAVE_COREAUDIO +#include <CoreAudio/CoreAudio.h> +#endif + +#include <machine/limits.h> + +bool GetInfo_CPU (QListView *lBox) +{ + + QString cpustring; + + kern_return_t ret; + struct host_basic_info basic_info; + unsigned int count=HOST_BASIC_INFO_COUNT; + + ret=host_info(mach_host_self(), HOST_BASIC_INFO, + (host_info_t)&basic_info, &count); + if (ret != KERN_SUCCESS) { + kdDebug() << "unable to get host information from mach" << endl; + return false; + } else { + kdDebug() << "got Host Info: (" << basic_info.avail_cpus << ") CPUs available" << endl; + const NXArchInfo *archinfo; + archinfo=NXGetArchInfoFromCpuType(basic_info.cpu_type, basic_info.cpu_subtype); + new QListViewItem(lBox, i18n("Kernel is configured for %1 CPUs").arg(basic_info.max_cpus)); + for (int i = 1; i <= basic_info.avail_cpus; i++) { + cpustring = i18n("CPU %1: %2").arg(i).arg(archinfo->description); + new QListViewItem(lBox, cpustring); + } + return true; + } + return false; +} + +bool GetInfo_IRQ (QListView *) +{ + return false; +} + +bool GetInfo_DMA (QListView *) +{ + return false; +} + +bool GetInfo_PCI (QListView *) +{ + return false; +} + +bool GetInfo_IO_Ports (QListView *) +{ + return false; +} + +bool GetInfo_Sound (QListView *lBox) +{ +#ifdef HAVE_COREAUDIO +#define kMaxStringSize 1024 + OSStatus status; + AudioDeviceID gOutputDeviceID; + unsigned long propertySize; + char deviceName[kMaxStringSize]; + char manufacturer[kMaxStringSize]; + propertySize = sizeof(gOutputDeviceID); + status = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &propertySize, &gOutputDeviceID); + if (status) { + kdDebug() << "get default output device failed, status = " << (int)status << endl; + return false; + } + + if (gOutputDeviceID != kAudioDeviceUnknown) { + + propertySize = kMaxStringSize; + + /* Device Name */ + status = AudioDeviceGetProperty(gOutputDeviceID, 1, 0, kAudioDevicePropertyDeviceName, &propertySize, deviceName); + if (status) { + kdDebug() << "get device name failed, status = " << (int)status << endl; + return false; + } + new QListViewItem(lBox, i18n("Device Name: %1").arg(deviceName)); + + /* Manufacturer */ + status = AudioDeviceGetProperty(gOutputDeviceID, 1, 0, kAudioDevicePropertyDeviceManufacturer, &propertySize, manufacturer); + if (status) { + kdDebug() << "get manufacturer failed, status = " << (int)status << endl; + return false; + } + new QListViewItem(lBox, i18n("Manufacturer: %1").arg(manufacturer)); + return true; + } else { + return false; + } +#else + return false; +#endif +} + +bool GetInfo_SCSI (QListView *lbox) +{ + return false; +} + +bool GetInfo_Partitions (QListView *lbox) +{ + return false; +} + +bool GetInfo_XServer_and_Video (QListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} + +bool GetInfo_Devices (QListView *lbox) +{ + return false; +} diff --git a/kcontrol/info/info_sgi.cpp b/kcontrol/info/info_sgi.cpp new file mode 100644 index 000000000..2cd1a1e30 --- /dev/null +++ b/kcontrol/info/info_sgi.cpp @@ -0,0 +1,82 @@ +/* info_sgi.cpp + + !!!!! this file will be included by info.cpp !!!!! +*/ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +/* all following functions should return TRUE, when the Information + was filled into the lBox-Widget. + returning false indicates, that information was not available. +*/ + + +#include <sys/systeminfo.h> + +bool GetInfo_CPU( QListView *lBox ) +{ + QString str; + char buf[256]; + + sysinfo(SI_ARCHITECTURE, buf, sizeof(buf)); + str = QString::fromLocal8Bit(buf); + new QListViewItem(lBox, str); + return true; +} + + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool GetInfo_PCI( QListView * ) +{ + return false; +} + +bool GetInfo_IO_Ports( QListView * ) +{ + return false; +} + +bool GetInfo_Sound( QListView * ) +{ + return false; +} + +bool GetInfo_Devices( QListView * ) +{ + return false; +} + +bool GetInfo_SCSI( QListView * ) +{ + return false; +} + +bool GetInfo_Partitions( QListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( QListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + diff --git a/kcontrol/info/info_solaris.cpp b/kcontrol/info/info_solaris.cpp new file mode 100644 index 000000000..761200e75 --- /dev/null +++ b/kcontrol/info/info_solaris.cpp @@ -0,0 +1,705 @@ +/* + * info_solaris.cpp + * + * Torsten Kasch <tk@Genetik.Uni-Bielefeld.DE> + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/mnttab.h> +#include <kstat.h> +#include <sys/types.h> +#include <sys/statvfs.h> +#include <time.h> + +#ifdef HAVE_LIBDEVINFO_H +#include <ctype.h> +#include <string.h> +#include <unistd.h> +#include <sys/mkdev.h> +#include <sys/stat.h> +#include <devid.h> +#include <libdevinfo.h> +#endif /* HAVE_LIBDEVINFO_H */ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + + +bool GetInfo_CPU( QListView *lBox ) { + + kstat_ctl_t *kctl; + kstat_t *ksp; + kstat_named_t *kdata; + char cputype[16], + fputype[16]; + char *timetxt; + char *ptr; + uint32_t i, ncpus; + unsigned long state_begin; + QString state; + QString mhz; + QString inst; + + /* + * get a kstat handle first and update the user's kstat chain + */ + if( (kctl = kstat_open()) == NULL ) { + return false; + } + while( kstat_chain_update( kctl ) != 0 ) + ; + + /* + * get the # of CPUs + */ + if( (ksp = kstat_lookup( kctl, "unix", 0, "system_misc" )) == NULL ) { + return false; + } + if( kstat_read( kctl, ksp, NULL ) == -1 ) { + return false; + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "ncpus" ); + if( kdata != NULL ) { + ncpus = kdata->value.ui32; + } else { + ncpus = 0; + } + + lBox->addColumn( i18n( "Instance" )); + lBox->addColumn( i18n( "CPU Type" )); + lBox->addColumn( i18n( "FPU Type" )); + lBox->addColumn( i18n( "MHz" )); + lBox->addColumn( i18n( "State" )); + + /* + * get the per-processor info + */ + for( i = 0; i < ncpus; i++ ) { + + if( (ksp = kstat_lookup( kctl, "cpu_info", i, NULL )) == NULL ){ + return false; + } + + if( kstat_read( kctl, ksp, NULL ) == -1 ) { + return false; + } + + inst.setNum( i ); + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "cpu_type" ); + if( kdata != NULL ) { + strcpy( cputype, kdata->value.c ); + } else { + sprintf( cputype, "???" ); + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "fpu_type" ); + if( kdata != NULL ) { + strcpy( fputype, kdata->value.c ); + } else { + sprintf( fputype, "???" ); + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "clock_MHz" ); + if( kdata != NULL ) { + mhz.setNum( kdata->value.ul ); + } else { + mhz.setNum( 0 ); + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "state" ); + if( kdata != NULL ) { + state = QString( kdata->value.c ); + } else { + state = "???"; + } + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "state_begin" ); + if( kdata != NULL ) { + state_begin = kdata->value.i32; + if( (timetxt = ctime( (time_t *) &state_begin )) != NULL ) { + ptr = strrchr( timetxt, '\n' ); + *ptr = '\0'; + state += " since " + QString( timetxt ); + } + } + + new QListViewItem( lBox, inst, cputype, fputype, mhz, state ); + } + + // sorting_allowed = true; + lBox->setSorting( 0 ); + + return true; +} + +bool GetInfo_IRQ( QListView * ) { + return false; +} + +bool GetInfo_DMA( QListView * ) { + return false; +} + +bool GetInfo_PCI( QListView * ) { + return false; +} + +bool GetInfo_IO_Ports( QListView * ) { + return false; +} + +bool GetInfo_Sound( QListView * ) { + return false; +} + +bool GetInfo_SCSI( QListView * ) { + return false; +} + +bool GetInfo_Partitions( QListView *lBox ) { + + FILE *mnttab; + struct mnttab mnt; + struct statvfs statbuf; + fsblkcnt_t tmp; + QString total; + QString avail; + time_t mnttime; + char *timetxt; + char *ptr; + + if( (mnttab = fopen( MNTTAB, "r" )) == NULL ) { + return false; + } + + /* + * set up column headers + */ + lBox->addColumn( i18n( "Device" )); + lBox->addColumn( i18n( "Mount Point" )); + lBox->addColumn( i18n( "FS Type" )); + lBox->addColumn( i18n( "Total Size" )); + // XXX: FIXME: how do I set column alignment correctly? + lBox->setColumnAlignment( 3, 2 ); + lBox->addColumn( i18n( "Free Size" )); + // XXX: FIXME: how do I set column alignment correctly? + lBox->setColumnAlignment( 4, 2 ); + lBox->addColumn( i18n( "Mount Time" )); + lBox->addColumn( i18n( "Mount Options" )); + + /* + * get info about mounted file systems + */ + rewind( mnttab ); + while( getmntent( mnttab, &mnt ) == 0 ) { + /* + * skip fstype "nfs" and "autofs" for two reasons: + * o if the mountpoint is visible, the fs is not + * necessarily available (autofs option "-nobrowse") + * and we don't want to mount every remote fs just + * to get its size, do we? + * o the name "Partitions" for this statistics implies + * "local file systems only" + */ + if( (strcmp( mnt.mnt_fstype, "nfs" ) == 0) + || (strcmp( mnt.mnt_fstype, "autofs" ) == 0) ) + continue; + if( statvfs( mnt.mnt_mountp, &statbuf ) == 0 ) { + if( statbuf.f_blocks > 0 ) { + /* + * produce output in KB, MB, or GB for + * readability -- unfortunately, this + * breaks sorting for these columns... + */ + tmp = statbuf.f_blocks + * (statbuf.f_frsize / 1024); + if( tmp > 9999 ) { + tmp /= 1024; + if( tmp > 9999 ) { + tmp /= 1024; + total.setNum( tmp ); + total += " G"; + } else { + total.setNum( tmp ); + total += " M"; + } + } else { + total.setNum( tmp ); + total += " K"; + } +// avail.setNum( statbuf.f_bavail ); +// avail += " K"; + tmp = statbuf.f_bavail + * (statbuf.f_frsize / 1024); + if( tmp > 9999 ) { + tmp /= 1024; + if( tmp > 9999 ) { + tmp /= 1024; + avail.setNum( tmp ); + avail += " G"; + } else { + avail.setNum( tmp ); + avail += " M"; + } + } else { + avail.setNum( tmp ); + avail += " K"; + } + } else { + total = "-"; + avail = "-"; + } + } else { + total = "???"; + avail = "???"; + } + /* + * ctime() adds a '\n' which we have to remove + * so that we get a one-line output for the QListViewItem + */ + mnttime = (time_t) atol( mnt.mnt_time ); + if( (timetxt = ctime( &mnttime )) != NULL ) { + ptr = strrchr( timetxt, '\n' ); + *ptr = '\0'; + } + + new QListViewItem( + lBox, + mnt.mnt_special, + mnt.mnt_mountp, + mnt.mnt_fstype, + total, + avail, + QString( timetxt ), + mnt.mnt_mntopts + ); + } + fclose( mnttab ); + + lBox->setSorting( 0 ); + // sorting_allowed = true; + + return true; +} + +bool GetInfo_XServer_and_Video( QListView *lBox ) { + return GetInfo_XServer_Generic( lBox ); +} + +#ifdef HAVE_LIBDEVINFO_H +/* + * get Solaris' device configuration data through libdevinfo(3) + * and display it in a prtconf(1M) style tree + * + * NOTE: though the devinfo library seems to be present on earlier + * Solaris releases, this interface is documented to be available + * since Solaris 7 (libdevinfo.h is missing on pre-Solaris 7 systems) + * + * documentation for libdevinfo(3) including code samples on which + * this implementation is based on is available at + * http://soldc.sun.com/developer/support/driver/wps/libdevinfo/ + */ + +/* + * we start with various helper routines for GetInfo_Devices() + */ + +/* + * mktree() -- break up the device path and place its components + * into the tree widget + */ +QListViewItem *mktree( QListViewItem *top, const char *path ) { + + QListViewItem *parent, + *previous, + *result; + char *str = strdup( path ), + *token; + + /* + * start at "/" + */ + parent = top; + result = (*top).firstChild(); + previous = (*top).firstChild(); + + token = strtok( str, "/" ); + while( token != NULL ) { + /* + * find insert pos: + * try to match the node at the current level + * + * NOTE: this implementation assumes that there are + * no two nodes with identical names at the + * same level of the device tree + */ + while( result != NULL ) { + if( strcmp( token, (*result).text( 0 ).latin1()) == 0 ) + break; + previous = result; + result = (*result).nextSibling(); + } + if( result == NULL ) { + /* + * we haven't found the node, create a new one + */ + result = new QListViewItem( parent, + previous, + token ); + } else { + /* + * we've found the node + */ + parent = result; + previous = NULL; + if( (*result).firstChild() == NULL ) { + /* + * create new node during next iteration + */ + result->setExpandable( true ); + result->setOpen( false ); + } else { + /* + * follow the child path + */ + result = (*result).firstChild(); + } + } + token = strtok( NULL, "/" ); + } + free( str ); + + return( result ); +} + +/* + * prop_type_str() -- return the property type as a string + */ +char *prop_type_str( di_prop_t prop ) { + + switch( di_prop_type( prop )) { + case DI_PROP_TYPE_UNDEF_IT: + return( "undefined" ); + case DI_PROP_TYPE_BOOLEAN: + return( "BOOL" ); + case DI_PROP_TYPE_INT: + return( "INT" ); + case DI_PROP_TYPE_STRING: + return( "STRING" ); + case DI_PROP_TYPE_BYTE: + return( "BYTE" ); + default: + return( "unknown" ); + } +} + +/* + * prop_type_guess() -- guess the property type + */ +int prop_type_guess( uchar_t *data, int len ) { + + int slen; + int guess; + int i, c; + + if( len < 0 ) + return( -1 ); + else if( len == 0 ) + return( DI_PROP_TYPE_BOOLEAN ); + + slen = 0; + guess = DI_PROP_TYPE_STRING; + + for( i = 0; i < len; i++ ) { + c = (int) data[i]; + switch( c ) { + case 0: + if( i == (len - 1 )) + break; + if( slen == 0 ) + guess = DI_PROP_TYPE_BYTE; + else + guess = slen = 0; + break; + default: + if( ! isprint( c )) + guess = DI_PROP_TYPE_BYTE; + else + slen++; + } + if( guess != DI_PROP_TYPE_STRING ) + break; + } + +// if( (guess == DI_PROP_TYPE_BYTE) && (len % sizeof( int ) == 0 )) +// guess = DI_PROP_TYPE_INT; + + return( guess ); +} + +/* + * dump_minor_node() -- examine a device minor node + * this routine gets passed to di_walk_node() + */ +int dump_minor_node( di_node_t node, di_minor_t minor, void *arg ) { + + QListViewItem *item; + QString majmin; + char *type; + dev_t dev; + + item = new QListViewItem( (QListViewItem *) arg, + di_minor_name( minor )); + item->setExpandable( true ); + item->setOpen( false ); + new QListViewItem( item, i18n( "Spectype:" ), + (di_minor_spectype( minor ) == S_IFCHR) + ? i18n( "character special" ) + : i18n( "block special" )); + type = di_minor_nodetype( minor ); + new QListViewItem( item, i18n( "Nodetype:" ), + (type == NULL) ? "NULL" : type ); + + if( (dev = di_minor_devt( minor )) != DDI_DEV_T_NONE ) { + majmin.sprintf( "%ld/%ld", major( dev ), minor( dev )); + new QListViewItem( item, i18n( "Major/Minor:" ), majmin ); + } + + if( di_minor_next( node, minor ) == DI_MINOR_NIL ) + return( DI_WALK_TERMINATE ); + else + return( DI_WALK_CONTINUE ); +} + +/* + * propvalue() -- return the property value + */ +QString propvalue( di_prop_t prop ) { + + int type; + int i, n; + char *strp; + int *intp; + uchar_t *bytep; + QString result; + + /* + * Since a lot of printable strings seem to be tagged as 'byte', + * we're going to guess, if the property is not STRING or INT + * The actual type is shown in the info tree, though. + */ + type = di_prop_type( prop ); + if( (type != DI_PROP_TYPE_STRING) && (type != DI_PROP_TYPE_INT) ) { + n = di_prop_bytes( prop, &bytep ); + type = prop_type_guess( bytep, n ); + } + + result = ""; + switch( type ) { + case DI_PROP_TYPE_STRING: + if( (n = di_prop_strings( prop, &strp )) < 0 ) { + result = "(error)"; + } else { + for( i = 0; i < n; i++ ) { + result += "\""; + result += strp; + result += "\" "; + strp += strlen( strp ) + 1; + } + } + break; + case DI_PROP_TYPE_INT: + if( (n = di_prop_ints( prop, &intp )) < 0 ) { + result = "(error)"; + } else { + for( i = 0; i < n; i++ ) { + QString tmp; + tmp.setNum( intp[i] ); + result += tmp; + result += " "; + } + } + break; + case DI_PROP_TYPE_BOOLEAN: + /* + * hmm, Sun's sample code handles the existence + * of a boolean property as "true", whereas + * prtconf(1M) obviously does not (Sol8, at least) + * -- we're doing the same and handle "bool" as "byte" + */ + case DI_PROP_TYPE_BYTE: + if( (n = di_prop_bytes( prop, &bytep )) < 0 ) { + result = "(error)"; + } else { + if( n == 0 ) { + result = i18n( "(no value)" ); + break; + } + result = "0x"; + for( i = 0; i < n; i++ ) { + QString tmp; + unsigned byte = (unsigned) bytep[i]; + tmp.sprintf( "%2.2x", byte ); + result += tmp; + } + } + break; + default: + result = "???"; + } + + return( result ); +} + +/* + * dump_node() -- examine a device node and its children + * this routine gets passed to di_walk_node() + */ +int dump_node( di_node_t node, void *arg ) { + + QListViewItem *top = (QListViewItem *) arg, + *parent, + *previous; + char *path; + char *drivername; + char *names; + QString compatnames; + int i, n; + di_prop_t prop; + + path = di_devfs_path( node ); + + /* + * if this is the root node ("/"), initialize the tree + */ + if( strlen( path ) == 1 ) { + top->setText( 0, QString( di_binding_name( node ))); + top->setPixmap( 0, SmallIcon( "kcmdevices" )); + top->setOpen( true ); + top->setSelectable( false ); + top->setExpandable( false ); + } + + /* + * place the node in the tree + */ + parent = mktree( top, path ); + + /* + * we have to handle the root node differently... + */ + if( strlen( path ) > 1 ) { + parent->setExpandable( true ); + parent->setOpen( false ); + } else { + previous = parent; + parent = top; + } + + /* + * node name and physical device path + */ + drivername = di_driver_name( node ); + previous = new QListViewItem( parent, + i18n( "Driver Name:" ), + (drivername == NULL) + ? i18n( "(driver not attached)" ) + : drivername ); + previous = new QListViewItem( parent, previous, + i18n( "Binding Name:" ), di_binding_name( node )); + + n = di_compatible_names( node, &names ); + if( n < 1 ) { + compatnames = i18n( "(none)" ); + } else { + for( i = 0; i < n; i++ ) { + compatnames += names; + compatnames += " "; + names += strlen( names ) + 1; + } + } + + previous = new QListViewItem( parent, previous, + i18n( "Compatible Names:" ), compatnames ); + + previous = new QListViewItem( parent, previous, + i18n( "Physical Path:" ), QString( path )); + + /* + * dump the node's property list (if any) + */ + if( (prop = di_prop_next( node, DI_PROP_NIL )) != DI_PROP_NIL ) { + previous = new QListViewItem( parent, previous, i18n( "Properties" )); + previous->setExpandable( true ); + previous->setOpen( false ); + do { + /* + * property type & value + */ + QListViewItem *tmp, + *prev; + tmp = new QListViewItem( previous, di_prop_name( prop )); + tmp->setExpandable( true ); + tmp->setOpen( false ); + prev = new QListViewItem( tmp, i18n( "Type:" ), + prop_type_str( prop )); + new QListViewItem( tmp, prev, i18n( "Value:" ), + propvalue( prop )); + } while( (prop = di_prop_next( node, prop )) != DI_PROP_NIL ); + } + + /* + * if there are minor nodes, expand the tree appropriately + */ + if( di_minor_next( node, DI_MINOR_NIL ) != DI_MINOR_NIL ) { + previous = new QListViewItem( parent, previous, i18n( "Minor Nodes" )); + previous->setExpandable( true ); + previous->setOpen( false ); + di_walk_minor( node, NULL, 0, previous, dump_minor_node ); + } + + return( DI_WALK_CONTINUE ); +} + +bool GetInfo_Devices( QListView *lBox ) { + + QListViewItem *top; + di_node_t root_node; + + /* + * create a snapshot of the device tree + */ + if( (root_node = di_init( "/", DINFOCPYALL )) == DI_NODE_NIL ) { + return( false ); + } + // XXX: might try to di_prom_init() here as well (if we're setgid sys) + + /* + * prepare the tree widget + */ + lBox->addColumn( i18n( "Device Information" )); + lBox->addColumn( i18n( "Value" )); + + top = new QListViewItem( lBox ); + + /* + * traverse the device tree + */ + di_walk_node( root_node, DI_WALK_CLDFIRST, top, dump_node ); + + di_fini( root_node ); + + sorting_allowed = false; + return true; +} + +#else /* ! HAVE_LIBDEVINFO_H */ +bool GetInfo_Devices( QListView * ) { + return false; +} +#endif /* ! HAVE_LIBDEVINFO_H */ diff --git a/kcontrol/info/info_svr4.cpp b/kcontrol/info/info_svr4.cpp new file mode 100644 index 000000000..2509aa062 --- /dev/null +++ b/kcontrol/info/info_svr4.cpp @@ -0,0 +1,132 @@ +/* + info_svr4.cpp + + UNIX System V Release 4 specific Information about the Hardware. + Appropriate for SCO OpenServer and UnixWare. + Written 20-Feb-99 by Ronald Joe Record (rr@sco.com) + Initially based on info_sgi.cpp +*/ + +#define INFO_CPU_AVAILABLE +#define INFO_IRQ_AVAILABLE +#define INFO_DMA_AVAILABLE +#define INFO_PCI_AVAILABLE +#define INFO_IOPORTS_AVAILABLE +#define INFO_SOUND_AVAILABLE +#define INFO_DEVICES_AVAILABLE +#define INFO_SCSI_AVAILABLE +#define INFO_PARTITIONS_AVAILABLE +#define INFO_XSERVER_AVAILABLE + +#define INFO_DEV_SNDSTAT "/dev/sndstat" + +#include <sys/systeminfo.h> + +/* 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_ReadfromFile( QListView *lBox, char *Name, char splitchar ) +{ + QString str; + char buf[512]; + + 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)) { + char *p=buf; + if (splitchar!=0) /* remove leading spaces between ':' and the following text */ + while (*p) { + if (*p==splitchar) { + *p++ = ' '; + while (*p==' ') ++p; + *(--p) = splitchar; + ++p; + } + else ++p; + } + + QString s1 = QString::fromLocal8Bit(buf); + QString s2 = s1.mid(s1.find(splitchar)+1); + + s1.truncate(s1.find(splitchar)); + if(!(s1.isEmpty() || s2.isEmpty())) + olditem = new QListViewItem(lBox, olditem, s1, s2); + } + } + file->close(); + + delete file; + return true; +} + +bool GetInfo_CPU( QListView *lBox ) +{ + char buf[256]; + + sysinfo(SI_ARCHITECTURE, buf, sizeof(buf)); + new QListViewItem(lBox, QString::fromLocal8Bit(buf)); + return true; +} + + +bool GetInfo_IRQ( QListView * ) +{ + return false; +} + +bool GetInfo_DMA( QListView * ) +{ + return false; +} + +bool GetInfo_PCI( QListView *lBox ) +{ + char buf[256]; + + sysinfo(SI_BUSTYPES, buf, sizeof(buf)); + new QListViewItem(lBox, QString::fromLocal8Bit(buf)); + return true; +} + +bool GetInfo_IO_Ports( QListView * ) +{ + return false; +} + +bool GetInfo_Sound( QListView *lBox ) +{ + if ( GetInfo_ReadfromFile( lBox, INFO_DEV_SNDSTAT, 0 )) + return true; + else + return false; +} + +bool GetInfo_Devices( QListView * ) +{ + return false; +} + +bool GetInfo_SCSI( QListView * ) +{ + return false; +} + +bool GetInfo_Partitions( QListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( QListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + diff --git a/kcontrol/info/interrupts.desktop b/kcontrol/info/interrupts.desktop new file mode 100644 index 000000000..a18bde656 --- /dev/null +++ b/kcontrol/info/interrupts.desktop @@ -0,0 +1,240 @@ +[Desktop Entry] +Exec=kcmshell interrupts +Icon=kcmmemory +Type=Application +DocPath=kinfocenter/interrupts/index.html +Categories=Qt;KDE;X-KDE-information; + + +X-KDE-Library=info +X-KDE-FactoryName=irq +X-KDE-ParentApp=kinfocenter + +Name=Interrupts +Name[ar]=مفاتيح الإنقطاع +Name[az]=Kəsmələr +Name[be]=Перапыненні +Name[bg]=Прекъсвания +Name[bn]=ইনটরাপ্ট +Name[br]=Spanoù +Name[bs]=Interapti +Name[ca]=Interrupcions +Name[cs]=Přerušení +Name[csb]=Przerwania +Name[cy]=Ymyriadau +Name[el]=Διακοπές +Name[eo]=Interrompoj +Name[es]=Interrupciones +Name[et]=Katkestused +Name[eu]=Etenaldiak +Name[fa]=وقفهها +Name[fi]=Keskeytykset +Name[fr]=Interruptions +Name[fy]=Underbrekkings +Name[ga]=Idirbhristeacha +Name[gl]=Interrupcións +Name[he]=פסיקה +Name[hi]=इंटरप्ट +Name[hr]=Presretanja +Name[hu]=Megszakítások +Name[is]=Ígrip +Name[it]=Interrupt +Name[ja]=割り込み +Name[ka]=წყვიტავს +Name[kk]=Үзілімдер +Name[km]=រំខាន +Name[ko]=인터럽트 +Name[lo]=ອິນເຕີຣັບ +Name[lt]=Pertrauktys +Name[lv]=Pārtraukumi +Name[mk]=Прекини +Name[mn]=Тасалдлууд +Name[ms]=Sampukan +Name[nb]=Avbruddslinjer +Name[ne]=रोकावट +Name[nn]=Avbrot +Name[nso]=Ditshitiso +Name[oc]=Interrupcions +Name[pa]=ਰੁਕਾਵਟ +Name[pl]=Przerwania +Name[pt]=Interrupções +Name[pt_BR]=Interrupções +Name[ro]=Întreruperi +Name[ru]=Прерывания +Name[rw]=Amarogoya +Name[se]=Gaskkaldumit +Name[sk]=Prerušenia +Name[sl]=Prekinitve +Name[sr]=Прекиди +Name[sr@Latn]=Prekidi +Name[sv]=Avbrott +Name[ta]=குறுக்கீடுகள் +Name[te]=ఇంటెరప్టులు +Name[tg]=Қатъ шудан +Name[th]=อินเตอร์รัพต์ +Name[tr]=Kesmeler +Name[tt]=Özderülär +Name[uk]=Перепини +Name[uz]=Toʻxtalishlar +Name[uz@cyrillic]=Тўхталишлар +Name[ven]=Dzithithiso +Name[vi]=Gián đoạn +Name[xh]=Iziphazamiso +Name[zh_CN]=中断 +Name[zh_TW]=中斷 +Name[zu]=Iziphazamiso + +Comment=Interrupt information +Comment[af]=Interrupt informasie +Comment[ar]=معلومات مفاتيح الإنقطاع +Comment[az]=Kəsmələr haqqında mə'lumat +Comment[be]=Інфармацыя аб перапыненнях +Comment[bg]=Информация за прекъсванията в системата +Comment[bn]=ইনটরাপ্ট তথ্য +Comment[br]=Titouroù diwar-benn ar spanoù +Comment[bs]=Informacije o interaptima +Comment[ca]=Informació de les interrupcions +Comment[cs]=Informace o přerušeních +Comment[csb]=Wëdowiédzô ò przerwaniach +Comment[cy]=Gwybodaeth Ymyriadau +Comment[da]=Interrupt-information +Comment[de]=Informationen zu Interrupts +Comment[el]=Πληροφορίες για τις διακοπές +Comment[eo]=Informo pri interrompoj +Comment[es]=Información sobre las interrupciones +Comment[et]=Katkestuste info +Comment[eu]=Etenaldiei buruzko informazioa +Comment[fa]=اطلاعات وقفه +Comment[fi]=Keskeytystietoja +Comment[fr]=Informations sur les interruptions +Comment[fy]=Underbrekking ynformaasje +Comment[gl]=Información das interrupcións +Comment[he]=מידע על בקשת הפסיקה +Comment[hi]=इंटरप्ट जानकारी +Comment[hr]=Podaci o presretanjima +Comment[hu]=A megszakítások jellemzői +Comment[id]=Informasi interrupt +Comment[is]=Upplýsingar um ígrip (IRQ) +Comment[it]=Informazioni sugli interrupt +Comment[ja]=割り込みの情報 +Comment[ka]=ინფორმაცია შეწყვეტყის შესახებ +Comment[kk]=Үзілім мәліметі +Comment[km]=ព័ត៌មានរំខាន +Comment[ko]=인터럽트 정보 +Comment[lo]=ຂໍ້ມູນອິນເຕີຣັບ +Comment[lt]=Pertraukčių informacija +Comment[lv]=Pārtraukumu informācija +Comment[mk]=Информации за прекините +Comment[mn]=Тасалдлын мэдээллүүд +Comment[ms]=Maklumat Sampukan +Comment[mt]=Informazzjoni dwar l-interrupts +Comment[nb]=Avbruddslinjeinformasjon +Comment[nds]=Interruptinformatschoon +Comment[ne]=रोकावट सूचना +Comment[nl]=Interrupt-informatie +Comment[nn]=Avbrotsinformasjon +Comment[nso]=Tshedimoso ya Tshitiso +Comment[oc]=Informacion de les interrupcions +Comment[pa]=ਰੁਕਾਵਟ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o przerwaniach +Comment[pt]=Informação das interrupções +Comment[pt_BR]=Informações sobre as interrupções +Comment[ro]=Informații despre întreruperile alocate +Comment[ru]=Сведения о прерываниях +Comment[rw]=Ibisobanuro by'irogoya +Comment[se]=Dieđut gaskkaldumiid birra +Comment[sk]=Informácie o prerušeniach +Comment[sl]=Podatki o prekinitvah +Comment[sr]=Информације о прекидима +Comment[sr@Latn]=Informacije o prekidima +Comment[sv]=Avbrottsinformation +Comment[ta]=குறுக்கீட்டுத தகவல் +Comment[te]=ఇంటెరప్ట్ సమాచారం +Comment[tg]=Ахборот дар бораи қатъ шавӣ +Comment[th]=ข้อมูลอินเตอร์รัพต์ +Comment[tr]=Kesmeler hakkında bilgi +Comment[tt]=Özgeçlär turında +Comment[uk]=Інформація щодо перепини +Comment[uz]=Toʻxtalish haqida maʼlumot +Comment[uz@cyrillic]=Тўхталиш ҳақида маълумот +Comment[ven]=U thithisa mafhungo +Comment[vi]=Thông tin về các gián đoạn +Comment[wa]=Informåcion so Interrupt +Comment[xh]=Phazamisa ulwazi +Comment[zh_CN]=中断信息 +Comment[zh_TW]=中斷資訊 +Comment[zu]=Ulwazi lweziphazamiso + +Keywords=Interrupts,IRQ,System Information +Keywords[af]=Interrupts,IRQ,System Informasie +Keywords[az]=Kəsmələr,IRQ,Sistem haqqında mə'lumat +Keywords[be]=Перапыненні,сістэмная інфармацыя,Interrupts,IRQ,System Information +Keywords[bg]=информация, система, системна, прекъсване, прекъсвания, програмни, Interrupts, IRQ, System Information +Keywords[br]=spanoù,IRQ,titouroù reizhiad +Keywords[bs]=Interrupts,IRQ,System Information,informacije o sustavu,interupti +Keywords[ca]=Interrupcions, IRQ, informació del sistema +Keywords[cs]=Přerušení,IRQ,Informace o systému +Keywords[csb]=Przerwania,IRQ,wëdowiédzô ò systemie +Keywords[cy]=Ymyriadau,IRQ,Gwybodaeth Cysawd +Keywords[da]=Interrupts,IRQ,Systeminformation +Keywords[de]=Interrupts,IRQ,Systeminformation +Keywords[el]=Διακοπές,IRQ,Πληροφορίες συστήματος +Keywords[eo]=Interrompoj,IRQ,sistemo,informo,operaciumo +Keywords[es]=Interrupciones,IRQ,Información del sistema +Keywords[et]=Katkestused,IRQ,Süsteemi informatsioon +Keywords[eu]=Etenaldiak,IRQ,Sistemaren informazioa +Keywords[fa]=وقفهها، IRQ، اطلاعات سیستم +Keywords[fi]=Keskeytykset,IRQ,Järjestelmätiedot +Keywords[fr]=interruptions,IRQ,informations système,irq +Keywords[fy]=Underbrekkings,IRQ,systeemynformaasje +Keywords[gl]=Interrupcións,IRQ,Información do Sistema +Keywords[he]=בקשת פסיקה,מידע מערכת,IRQ,פסיקה,Interrupts,IRQ,System Information +Keywords[hi]=इंटरप्ट्स,आईआरक्यू,तंत्र जानकारी +Keywords[hr]=Interrupts,IRQ,System Information,Presretanja,Podaci o sustavu +Keywords[hu]=megszakítások,IRQ,rendszerinformáció +Keywords[id]=Interrupts,IRQ,Informasi Sistem +Keywords[is]=rofbeiðni,ígrip,IRQ,Interrupt,kerfi,upplýsingar +Keywords[it]=interrupt,IRQ,informazioni sul sistema +Keywords[ja]=割り込み,IRQ,システムの情報 +Keywords[ka]=წყვიტავს,IRQ,ინფორმაცია სისტემის შესახებ +Keywords[km]=រំខាន,IRQ,ព័ត៌មានប្រព័ន្ធ +Keywords[ko]=인터럽트,IRQ,시스템 정보 +Keywords[lo]=ອິນເຕີຣັບ,IRQ,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=Pertrauktys,IRQ,Sistemos Informacija +Keywords[lv]=Pārtraukumi,IRQ,Sistēmas Informācija +Keywords[mk]=Interrupts,IRQ,System Information,Прекини,Информации за системот +Keywords[mn]=Тасалдлууд,IRQ,Системийн мэдээлэл +Keywords[nb]=Avbrudd,IRQ,Systeminformasjon +Keywords[nds]=Interrupts,IRQ,Systeeminformatschoon +Keywords[ne]=रोकावट, IRQ, प्रणाली सूचना +Keywords[nl]=interrupts,IRQ,systeeminformatie +Keywords[nn]=avbrot,IRQ,systeminformasjon +Keywords[nso]=Ditshitiso,IRQ,Tshedimoso ya System +Keywords[oc]=Interrupcions, IRQ, informacion dèu sistemo +Keywords[pa]=Interrupts,IRQ,ਸਿਸਟਮ ਜਾਣਕਾਰੀ,ਰੁਕਾਵਟ +Keywords[pl]=Przerwania,IRQ,informacja o systemie +Keywords[pt]=interrupções,IRQ,informações sobre o sistema +Keywords[pt_BR]=Interrupções,IRQ,Informações do sistema +Keywords[ro]=întreruperi,IRQ,informații despre sistem +Keywords[rw]=Amarogoya,IRQ,Amakuru Sisitemu +Keywords[se]=Gaskkaldumit,IRQ,vuogádatdieđut +Keywords[sk]=Prerušenia,IRQ,Systémové informácie +Keywords[sl]=prekinitve,IRQ,sistemski podatki +Keywords[sr]=Interrupts,IRQ,System Information,прекиди,системске информације +Keywords[sr@Latn]=Interrupts,IRQ,System Information,prekidi,sistemske informacije +Keywords[sv]=Avbrott,IRQ,Systeminformation +Keywords[ta]=குறுக்கீடுகள்,IRQ, கணினித் தகவல் +Keywords[te]=ఇంటెరప్ట్, ఐ ఆర్ క్యు, వ్యవస్థ సమాచారం +Keywords[th]=อินเตอร์รัพต์,IRQ,ข้อมูลระบบ +Keywords[tr]=Kesmeler,IRQ,Sistem hakkında bilgi +Keywords[uk]=перепини,interrupts,irq,system-information +Keywords[uz]=Toʻxtalishlar,IRQ,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=Тўхталишлар,IRQ,Тизим ҳақида маълумот +Keywords[ven]=U thithisa,IRQ,Mafhungo a Sisitemu +Keywords[vi]=Gián đoạn,IRQ,Thông tin Hệ thống +Keywords[wa]=Interrupts,IRQ,informåcion do sistinme +Keywords[xh]=Iziphazamiso,IRQ,Ulwazi lwendlela +Keywords[zh_CN]=Interrupts,中断,IRQ,System Information,系统信息 +Keywords[zh_TW]=Interrupts,IRQ,System Information,中斷,系統資訊 +Keywords[zu]=Iziphazamiso,IRQ,Ulwazi lwesistimu + diff --git a/kcontrol/info/ioports.desktop b/kcontrol/info/ioports.desktop new file mode 100644 index 000000000..f66b81288 --- /dev/null +++ b/kcontrol/info/ioports.desktop @@ -0,0 +1,242 @@ +[Desktop Entry] +Exec=kcmshell ioports +Icon=kcmmemory +Type=Application +DocPath=kinfocenter/ioports/index.html +Categories=Qt;KDE;X-KDE-information; + + +X-KDE-Library=info +X-KDE-FactoryName=ioports +X-KDE-ParentApp=kinfocenter + +Name=IO-Ports +Name[af]=Io-poorte +Name[ar]=منافذ الإدخال و الإخراج +Name[az]=G/Ç Qapıları +Name[be]=Парты ўводу/вываду +Name[bg]=Вход/изход +Name[br]=Porzhioù ED +Name[bs]=IO-Portovi +Name[ca]=Ports E/S +Name[cs]=Vstupně/výstupní-porty +Name[csb]=Pòrtë wéńdzeniô/wińdzeniô +Name[cy]=Pyrth-IO +Name[da]=IO-porte +Name[de]=Ein/Ausgabe-Ports +Name[el]=Θύρες Ι/Ο +Name[eo]=Eneligaj-pordoj +Name[es]=Puertos de E/S +Name[et]=IO pordid +Name[eu]=IO-atakak +Name[fa]=درگاههای ورودی خروجی +Name[fi]=IO-portit +Name[fr]=Ports d'entrées / sorties +Name[fy]=IO-Poarten +Name[ga]=Poirt I/A +Name[gl]=Portos de E/S +Name[he]=קלט־פלט +Name[hi]=आईओ-पोर्ट् +Name[hr]=IO portovi +Name[hu]=IO-portok +Name[id]=Port-IO +Name[is]=Inn-/úttaksport +Name[it]=Porte di I/O +Name[ja]=IO ポート +Name[ka]=IO–პორტები +Name[kk]=Енгізу-шығару порттары +Name[km]=ច្រក IO +Name[ko]=IO 포트 +Name[lo]=ພອດ IO +Name[lt]=IO-portai +Name[lv]=IO-Porti +Name[mk]=В/И-порти +Name[mn]=Оролт/Гаралтын-портууд +Name[ms]=Port IO +Name[nb]=IO-porter +Name[nds]=IO-Porten +Name[ne]=IO-पोर्ट +Name[nl]=IO-Poorten +Name[nn]=IU-portar +Name[nso]=Maboemong a IO +Name[oc]=Ports E/S +Name[pa]=IO-ਪੋਰਟ +Name[pl]=Porty wejścia/wyjścia +Name[pt]=Portos de E/S +Name[pt_BR]=Portas de E/S +Name[ro]=Porturi I/O +Name[ru]=Порты ввода/вывода +Name[rw]=Imiyoboro-IO +Name[se]=SO-verráhat +Name[sk]=V/V porty +Name[sl]=V/I vrata +Name[sr]=IO портови +Name[sr@Latn]=IO portovi +Name[ss]=Tikhungo te-IO +Name[sv]=I/O-portar +Name[ta]=IO-முனையங்கள் +Name[te]=ఐఓ-పోర్టులు +Name[tg]=Даргоҳҳои дохил/баромад +Name[th]=พอร์ตข้อมูลเข้า/ออก +Name[tr]=G/Ç Portları +Name[tt]=Kerü/Çığu Portları +Name[uk]=Порти В/В +Name[uz]=K/Ch portlar +Name[uz@cyrillic]=К/Ч портлар +Name[vi]=Cổng vào ra (VR) +Name[wa]=Pôrts I/R +Name[xh]=IO-Ufako +Name[zh_CN]=IO 端口 +Name[zu]=Izikhumulo-IO + +Comment=IO-port information +Comment[af]=Io-poort informasie +Comment[ar]=معلومات منافذ الإدخال و الإخارج +Comment[az]=Giriş Çıktı portları haqqında mə'lumat +Comment[be]=Інфармацыя аб партах уводу/вываду +Comment[bg]=Информация за входно-изходните портове +Comment[bn]=আই-ও পোর্ট সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar porzhioù ED +Comment[bs]=Informacije o IO-portovima +Comment[ca]=Informació dels ports E/S +Comment[cs]=Informace o vstupně/výstupních-portech +Comment[csb]=Wëdowiédzô ò pòrtach wéńdzeniô/wińdzeniô +Comment[cy]=Gwybodaeth Porth-IO +Comment[da]=IO-portinformation +Comment[de]=Informationen zu benutzten Ein/Ausgabe-Ports +Comment[el]=Πληροφορίες για τις θύρες εισόδου-εξόδου +Comment[eo]=Informo pri Eneligaj-pordoj +Comment[es]=Información sobre los puertos de E/S +Comment[et]=IO portide info +Comment[eu]=IO-atakei buruzko informazioa +Comment[fa]=اطلاعات درگاههای ورودی خروجی +Comment[fi]=IO-porttitiedot +Comment[fr]=Informations sur les ports d'entrées / sorties +Comment[fy]=IO-poarteynformaasje +Comment[ga]=Eolas faoi Phoirt I/A +Comment[gl]=Información dos portos de E/S +Comment[he]=מידע על יציאות הקלט־פלט +Comment[hi]=आईओ-पोर्ट् जानकारी +Comment[hr]=Podaci o IO portovima +Comment[hu]=A ki- és bemeneti portok jellemzői +Comment[id]=Informasi Port-IO +Comment[is]=Upplýsingar um inn-/úttaksport +Comment[it]=Informazioni sulle porte di I/O +Comment[ja]=IO ポートの情報 +Comment[ka]=ინფორმაცია IO–პორტების შესახებ +Comment[kk]=Енгізу-шығару порттар мәліметі +Comment[km]=ព័ត៌មានច្រក IO +Comment[ko]=IO-주소 정보 +Comment[lo]=ຂໍ້ມູນພັອດ IO +Comment[lt]=IO-porto informacija +Comment[lv]=IO-portu informācija +Comment[mk]=Информации за влезно/излезните порти +Comment[mn]=Хэрэглэгдсэн Оролт/Гаралтын-портын мэдээлэл +Comment[ms]=Maklumat port IO +Comment[mt]=Informazzjoni dwar IO-port +Comment[nb]=IO-portinformasjon +Comment[nds]=IO-Port-Informatschoon +Comment[ne]=IO-पोर्ट सूचना +Comment[nl]=IO-poortinformatie +Comment[nn]=IU-port-informasjon +Comment[nso]=Tshedimoso ya maboemong a IO +Comment[oc]=Informacion dèus ports E/S +Comment[pa]=IO-ਪੋਰਟ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o portach wejścia/wyjścia +Comment[pt]=Informação sobre os portos de E/S +Comment[pt_BR]=Informações sobre as portas de E/S +Comment[ro]=Informații despre porturile I/O +Comment[ru]=Сведения о портах ввода/вывода +Comment[rw]=Ibisobanuro by'umuyoboro-IO +Comment[se]=SO-verráhatdieđut +Comment[sk]=Informácie o IO portoch +Comment[sl]=Podatki o vhodno/izhodnih vratih +Comment[sr]=Информације о IO портовима +Comment[sr@Latn]=Informacije o IO portovima +Comment[sv]=Information om I/O-portar +Comment[ta]=IO-முனைய தகவல் +Comment[te]=ఐఓ-పోర్టుల సమాచారం +Comment[tg]=Иттилооти даргоҳиҳои дохил/баромад +Comment[th]=ข้อมูลพอร์ตข้อมูลเข้า/ออก +Comment[tr]=Girdi Çıktı portları hakkında bilgi +Comment[tt]=Kerü/çığu portları turında +Comment[uk]=Інформація щодо портів вводу/виводу +Comment[uz]=Kirish/chiqish portlar haqida maʼlumot +Comment[uz@cyrillic]=Кириш/чиқиш портлар ҳақида маълумот +Comment[ven]=Mafhungo a IO-port +Comment[vi]=Thông tin về cổng VR +Comment[wa]=Informåcion so les pôrts d' Intrêye/Rexhowe +Comment[xh]=IO-ulwazi lwezibuko +Comment[zh_CN]=IO 端口信息 +Comment[zh_TW]=IO-Port 資訊 +Comment[zu]=Ulwazi lwe-isikhumulo-IO + +Keywords=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information +Keywords[af]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Informasie +Keywords[az]=GÇ,G/Ç,GÇ Qapıları,G/Ç Qapıları, Qapılar,GÇ-Aralığı,G/Ç-Aralığı,Sistem +Keywords[be]=Увод'вывад,парты ўводу/вываду,парты,сістэмная інфармацыя,IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information +Keywords[bg]=информация, система, системна, вход, входно, изход, изходно, порт, портове, IO, I/O, IO-Ports, I/O-Ports, Ports, IO-Range, I/O-Range, System Information +Keywords[br]=ED,E/D,porzhioù E/D,porzhioù,rummad ED,rummadE/D,titouroù ar reizhiad +Keywords[bs]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,IO-portovi,I/O-portovi,portovi,IO-raspon,I/O-raspon,informacije o sustavu +Keywords[ca]=ES,E/S,Ports d'ES,Ports d'E/S,Ports,Abast d'ES,Abast d'E/S,Informació del sistema +Keywords[cs]=IO,I/O,IO-porty,I/O-porty,Porty,Rozsah IO,Rozsah I/O,Informace o systému +Keywords[csb]=IO,I/O,pòrtë IO,pòrtë I/O,portë,òbjim IO,òbjim I/O,wëdowiédzô ò systemie +Keywords[cy]=IO,I/O,Pyrth-IO,Pyrth-I/O,Pyrth,Amrediad-IO,Amrediad-I/O,Gwybodaeth Cysawd +Keywords[da]=IO,I/O,IO-porte,I/O-Porte,Porte,IO-område,I/O-område,Systeminformation +Keywords[de]=Ein/Ausgabe,IO,I/O,IO-ports,I/O-Ports,Ports,IO-Bereich,I/O-Bereich,Systeminformation +Keywords[el]=ΕΕ,Ε/Ε,Θύρες ΕΕ,Θύρες Ε/Ε,Θύρες,Εύρος ΕΕ,Εύρος Ε/Ε,Πληροφορίες συστήματος +Keywords[eo]=IO,I/O,en,el,eneligo,pordoj,sistemo,operaciumo,informo +Keywords[es]=ES,E/S,Puertos de ES,Puertos de E/S,Puertos,Intervalo de ES,Intervalo de E/S,Información del sistema +Keywords[et]=IO,I/O,IO pordid,I/O pordid,pordid,IO piirkond,I/O piirkond,Süsteemi info +Keywords[eu]=IO,I/O,IO-atakak,Atakak,IO-barrutia,I/O-barrutia,Sistemaren informazioa +Keywords[fa]=ورودی خروجی، ورودی/خروجی، درگاههای ورودی خروجی، درگاهها، گسترۀ ورودی خروجی، گسترۀ ورودی/خروجی، اطلاعات سیستم +Keywords[fi]=IO,I/O,IO-Portit,I/O-Portit,Portit,I/O-alue,Järjestelmätiedot +Keywords[fr]=io,i/o,entrées-sorties,ports,ports d'entrées-sorties,informations système,plage d'entrées-sorties +Keywords[fy]=IO,I/O,IO-Ports,I/O-Ports,ports,IO-Range,I/O-Range,systeemynformaasje,IO-poarten +Keywords[gl]=IO,I/O,E/S,Portos IO,Portos E/S,Rango IO,Rango E/S,Información do Sistema +Keywords[he]=קלט־פלט,יציאות קלט־פלט,יציאות,טווח קלט־פלט,מידע,מערכת,IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information +Keywords[hi]=आईओ,आई/ओ,आईओ-पोर्ट्,आई/ओ-पोर्ट्,पोर्ट्,आईओ-रेंज,आई/ओ-रेंज,तंत्र जानकारी +Keywords[hr]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,IO portovi,IO raspon,Podaci o sustavu +Keywords[hu]=IO,I/O,IO-portok,I/O-portok,portok,IO-tartomány,I/O tartomány,rendszerinformáció +Keywords[id]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,Informasi Sistem +Keywords[is]=Inntak,úttak,I/O,Port,upplýsingar,kerfi +Keywords[it]=IO,I/O,porte di IO,porte di I/O,porte,intervallo di IO,intervallo di I/O,informazioni sul sistema +Keywords[ja]=IO,I/O,IO-ポート,I/O-ポート,ポート,IO-レンジ,I/O-レンジ,システムの情報 +Keywords[km]=IO,I/O,ច្រក IO,ច្រក I/O,ច្រក,ជួរ IO,ជួរ I/O,ព័ត៌មានប្រព័ន្ធ +Keywords[lt]=IO,I/O,IO-Ports,IO-portai,I/O-Ports,I/O-prievadai,Ports,prievadai,IO-Range,IO zona,I/O-Range,I/O zona,System Information,sisteminė informacija +Keywords[lv]=IO,I/O,IO-Porti,I/O-Porti,Porti,IO-Diapazons,I/O-Diapazons,Sistēmas Informācija +Keywords[mk]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,ВИ,В/И,ВИ-порти,В/И-порти,Порти,В/И-опсег,В/И-опсег,Информации за системот +Keywords[mn]=Оролт/Гаралт,IO,I/O,IO-порт,I/O-Порт,Портууд,IO-талбар,I/O-талбар, Системийн мэдээлэл +Keywords[nb]=IO,I/O,IO-porter,I/O-porter,port,IO-område,I/O-område,IU,I/U,IU-porter,I/U-porter,port,IU-område,I/U-område,Systeminformasjon +Keywords[nds]=IO,I/O,IO-Porten,I/O-Porten,Porten,IO-Range,I/O-Range,IO-Rebeet,I/O-Rebeet,Systeeminformatschoon +Keywords[ne]=IO, I/O, IO-पोर्टहरू, I/O-पोर्टहरू, पोर्टहरू, IO-दायरा, आगत/निर्गत दायरा, प्रणाली सूचना +Keywords[nl]=IO,I/O,IO-Ports,I/O-Ports,ports,IO-Range,I/O-Range,systeeminformatie,IO-poorten +Keywords[nn]=IU,I/U,IO,I/O,IU-portar,I/U-portar,portar,IU-område,I/U-område,systeminformasjon +Keywords[nso]=IO,I/O,Maboemong a IO,Maboemong a I/O,Maboemong,IO-Range, Tshedimoso ya I/O-Range,Tshedimoso ya System +Keywords[oc]=ES,E/S,Ports d'ES,Ports d'E/S,Ports,Rang d'ES,Rang d'E/S,Informacion dèu sistemo +Keywords[pa]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=IO,I/O,porty IO,porty I/O,porty,zakres IO,zakres I/O,informacja o systemie +Keywords[pt]=ES,E/S,portos E/S,portos,gama de E/S,informações de sistema +Keywords[pt_BR]=ES,E/S,Portas E/S,Portas de E/S,Portas,Faixa de E/S,Faixa de E/S,Informações de sistema +Keywords[ro]=I/E,IE,IO,I/O,porturi IO,porturi,domeniu IO,domeniu I/O,informații despre sistem +Keywords[rw]=IO,I/O,Imiyoboro-IO,Imiyoboro-I/O,Imiyoboro,Igice-IO,Igice-I/O, Amakuru Sisitemu +Keywords[se]=SO,S/O,IO,I/O,SO-verráhat,S/O-verráhat,verráhat,SO-gaska,S/O-gaska, vuogádatdiehtu +Keywords[sk]=IO,I/O,IO-Ports,I/O-Porty,Porty,IO-Range,I/O-Range,Systém Informácie +Keywords[sl]=VI,V/I,V/I-vrata,VI-vrata,vrata,VI-obseg,V/I-obseg,informacije o sistemu +Keywords[sr]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,портови,порт,системске информације +Keywords[sr@Latn]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,portovi,port,sistemske informacije +Keywords[sv]=IO,I/O,IO-portar,I/O-portar,Ports,IO-område,I/O-område,Systeminformation +Keywords[ta]=IO,I/O,IO-முனையங்கள்,I/O-முனையங்கள்,முனையங்கள்,IO-நிலை,I/O-நிலை,அமைப்பு தகவல் +Keywords[th]=นำเข้านำออก,นำเข้า/นำออก,พอร์ตนำเข้านำออก,พอร์ตนำเข้า/นำออก,พอร์ต, แนวการนำเข้านำออก,แนวการนำเข้า/นำออก,ข้อมูลระบบ +Keywords[tr]=GÇ,G/Ç,GÇ Portları,G/Ç Portları, Portlar,GÇ-Aralığı,G/Ç-Aralığı,Sistem +Keywords[uk]=порти вводу/виводу,ВВ,в/в,порти,io,i/o,io-ports,i/p-ports,ports,system information +Keywords[uz]=K/Ch portlar,Portlar,K/Ch chegarasi,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=К/Ч портлар,Портлар,К/Ч чегараси,Тизим ҳақида маълумот +Keywords[ven]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,Mafhungo a Sisitemu +Keywords[vi]=VR,V/R,Cổng VR,Cổng V/R,Cổng,Vùng VR,Vùng VR,Thông tin Hệ thống +Keywords[wa]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,Sinformåcion do sistinme,I/R,poirts I/R,pôrts I/R,pôrts,poirts +Keywords[xh]=IO,I/O,IO-Amazibuko,I/O-Amazibuko,Amazibuko,IO-Beka ngendlela,Ulwazi lwendlela +Keywords[zh_CN]=IO,I/O,IO-Ports,I/O-Ports,Ports,IO-Range,I/O-Range,System Information,IO 端口,I/O 端口,端口,IO 范围,I/O 范围,系统信息 +Keywords[zh_TW]=IO,I/O,IO-Ports,Ports,IO-Range,I/O-Range,System Information,IO 範圍,I/O 範圍,系統資訊 +Keywords[zu]=IO,I/O,Izikhumulo-IO,Izikhumulo-I/O,Izikhumulo,IO-Umbandela,I/O-Umbandela, Ulwazi Lwesistimu + diff --git a/kcontrol/info/main.cpp b/kcontrol/info/main.cpp new file mode 100644 index 000000000..7992fbc37 --- /dev/null +++ b/kcontrol/info/main.cpp @@ -0,0 +1,151 @@ +/* + * main.cpp + * + * Copyright (c) 1999 Matthias Hoelzer-Kluepfel <hoelzer@kde.org> + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + + +#include "memory.h" + + +/* we have to include the info.cpp-file, to get the DEFINES about possible properties. + example: we need the "define INFO_CPU_AVAILABLE" */ +#include "info.cpp" + + +extern "C" +{ + + KDE_EXPORT KCModule *create_cpu(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_CPU_AVAILABLE + return new KInfoListWidget(i18n("Processor(s)"), parent, "kcminfo", GetInfo_CPU); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_irq(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_IRQ_AVAILABLE + return new KInfoListWidget(i18n("Interrupt"), parent, "kcminfo", GetInfo_IRQ); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_pci(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_PCI_AVAILABLE + return new KInfoListWidget(i18n("PCI"), parent, "kcminfo", GetInfo_PCI); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_dma(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_DMA_AVAILABLE + return new KInfoListWidget(i18n("DMA-Channel"), parent, "kcminfo", GetInfo_DMA); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_ioports(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_IOPORTS_AVAILABLE + return new KInfoListWidget(i18n("I/O-Port"), parent, "kcminfo", GetInfo_IO_Ports); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_sound(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_SOUND_AVAILABLE + return new KInfoListWidget(i18n("Soundcard"), parent, "kcminfo", GetInfo_Sound); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_scsi(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_SCSI_AVAILABLE + return new KInfoListWidget(i18n("SCSI"), parent, "kcminfo", GetInfo_SCSI); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_devices(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_DEVICES_AVAILABLE + return new KInfoListWidget(i18n("Devices"), parent, "kcminfo", GetInfo_Devices); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_partitions(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_PARTITIONS_AVAILABLE + return new KInfoListWidget(i18n("Partitions"), parent, "kcminfo", GetInfo_Partitions); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_xserver(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_XSERVER_AVAILABLE + return new KInfoListWidget(i18n("X-Server"), parent, "kcminfo", GetInfo_XServer_and_Video); +#else + return 0; +#endif + } + + KDE_EXPORT KCModule *create_memory(QWidget *parent, const char * /*name*/) + { + return new KMemoryWidget(parent, "kcminfo"); + } + + KDE_EXPORT KCModule *create_opengl(QWidget *parent, const char * ) + { +#ifdef INFO_OPENGL_AVAILABLE + return new KInfoListWidget(i18n("OpenGL"), parent, "kcminfo", GetInfo_OpenGL); +#else + return 0; +#endif + } + +/* create_cdinfo function for CD-ROM Info ~Jahshan */ + KDE_EXPORT KCModule *create_cdinfo(QWidget *parent, const char * /*name*/) + { +#ifdef INFO_CD_ROM_AVAILABLE + return new KInfoListWidget(i18n("CD-ROM Info"), parent, "kcminfo", GetInfo_CD_ROM); +#else + return 0; +#endif + } + +} diff --git a/kcontrol/info/memory.cpp b/kcontrol/info/memory.cpp new file mode 100644 index 000000000..9743087dd --- /dev/null +++ b/kcontrol/info/memory.cpp @@ -0,0 +1,480 @@ +/* + * memory.cpp + * + * prints memory-information and shows a graphical display. + * + * Copyright (c) 1999-2002 Helge Deller <deller@gmx.de> + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * + */ + +#include <sys/param.h> /* for BSD */ + +#include <qlayout.h> +#include <qpainter.h> +#include <qdrawutil.h> +#include <qtooltip.h> + +#include <kglobal.h> +#include <kdialog.h> +#include <kseparator.h> + +#include "memory.h" + +enum { /* entries for Memory_Info[] */ + TOTAL_MEM = 0, /* total physical memory (without swaps) */ + FREE_MEM, /* total free physical memory (without swaps) */ +#if !defined(__svr4__) || !defined(sun) +#if !defined(__NetBSD__) && !defined(__OpenBSD__) + SHARED_MEM, /* shared memory size */ + BUFFER_MEM, /* buffered memory size */ +#else + ACTIVE_MEM, + INACTIVE_MEM, +#endif +#endif + CACHED_MEM, /* cache memory size (located in ram) */ + SWAP_MEM, /* total size of all swap-partitions */ + FREESWAP_MEM, /* free memory in swap-partitions */ + MEM_LAST_ENTRY +}; + +/* + all update()-functions should put either + their results _OR_ the value NO_MEMORY_INFO into Memory_Info[] +*/ +static t_memsize Memory_Info[MEM_LAST_ENTRY]; + +#define MEMORY(x) ((t_memsize) (x)) /* it's easier... */ +#define NO_MEMORY_INFO MEMORY(-1) /* DO NOT CHANGE */ +#define ZERO_IF_NO_INFO(value) ((value) != NO_MEMORY_INFO ? (value) : 0) + + +/******************/ +/* Implementation */ +/******************/ + +static QLabel *MemSizeLabel[MEM_LAST_ENTRY][2]; + +enum { MEM_RAM_AND_HDD, MEM_RAM, MEM_HDD, MEM_LAST }; +static QWidget *Graph[MEM_LAST]; +static QLabel *GraphLabel[MEM_LAST]; + +#define SPACING 16 + +static QString formatted_unit(t_memsize value) +{ + if (value > (1024 * 1024)) + if (value > (1024 * 1024 * 1024)) + return i18n("%1 GB").arg(KGlobal::locale()->formatNumber(value / (1024 * 1024 * 1024.0), 2)); + else + return i18n("%1 MB").arg(KGlobal::locale()->formatNumber(value / (1024 * 1024.0), 2)); + else + return i18n("%1 KB").arg(KGlobal::locale()->formatNumber(value / 1024.0, 2)); +} + +KMemoryWidget::KMemoryWidget(QWidget * parent, const char *name) +: KCModule(parent, name) +{ + + KAboutData *about = + new KAboutData(I18N_NOOP("kcminfo"), + I18N_NOOP("KDE Panel Memory Information Control Module"), + 0, 0, KAboutData::License_GPL, + I18N_NOOP("(c) 1998 - 2002 Helge Deller")); + + about->addAuthor("Helge Deller", 0, "deller@gmx.de"); + setAboutData( about ); + + QString title, initial_str; + QLabel *Widget = 0; + int i, j; + + ram_colors_initialized = + swap_colors_initialized = + all_colors_initialized = false; + + setButtons(Help); + + /* default string for no Information... */ + Not_Available_Text = i18n("Not available."); + + QVBoxLayout *top = new QVBoxLayout(this, 0, KDialog::spacingHint()); + + QHBoxLayout *hbox = new QHBoxLayout(); + top->addLayout(hbox); + + /* stretch the left side */ + hbox->addStretch(); + + /* first create the Informationtext-Widget */ + QVBoxLayout *vbox = new QVBoxLayout(hbox, 0); + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; ++i) { + switch (i) { + case TOTAL_MEM: + title = i18n("Total physical memory:"); + break; + case FREE_MEM: + title = i18n("Free physical memory:"); + break; +#if !defined(__svr4__) || !defined(sun) +#if !defined(__NetBSD__) && !defined(__OpenBSD__) + case SHARED_MEM: + title = i18n("Shared memory:"); + break; + case BUFFER_MEM: + title = i18n("Disk buffers:"); + break; +#else + case ACTIVE_MEM: + title = i18n("Active memory:"); + break; + case INACTIVE_MEM: + title = i18n("Inactive memory:"); + break; +#endif +#endif + case CACHED_MEM: + title = i18n("Disk cache:"); + break; + case SWAP_MEM: + vbox->addSpacing(SPACING); + title = i18n("Total swap memory:"); + break; + case FREESWAP_MEM: + title = i18n("Free swap memory:"); + break; + default: + title = ""; + break; + }; + Widget = new QLabel(title, this); + Widget->setAlignment(AlignLeft); + vbox->addWidget(Widget, 1); + } + + /* then the memory-content-widgets */ + for (j = 0; j < 2; j++) { + vbox = new QVBoxLayout(hbox, 0); + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; ++i) { + if (i == SWAP_MEM) + vbox->addSpacing(SPACING); + Widget = new QLabel(this); + Widget->setAlignment(AlignRight); + MemSizeLabel[i][j] = Widget; + vbox->addWidget(Widget, 1); + } + } + + /* stretch the right side */ + hbox->addStretch(); + + KSeparator *line = new KSeparator(KSeparator::HLine, this); + top->addWidget(line); + + /* now the Graphics */ + QString hint; + hbox = new QHBoxLayout(top, 1); + for (i = MEM_RAM_AND_HDD; i < MEM_LAST; i++) { + hbox->addSpacing(SPACING); + vbox = new QVBoxLayout(hbox); + + switch (i) { + case MEM_RAM_AND_HDD: + title = i18n("Total Memory"); + hint = i18n("This graph gives you an overview of the " + "<b>total sum of physical and virtual memory</b> " + "in your system."); + break; + case MEM_RAM: + title = i18n("Physical Memory"); + hint = i18n("This graph gives you an overview of " + "the <b>usage of physical memory</b> in your system." + "<p>Most operating systems (including Linux) " + "will use as much of the available physical " + "memory as possible as disk cache, " + "to speed up the system performance. " + "<p>This means that if you have a small amount " + "of <b>Free Physical Memory</b> and a large amount of " + "<b>Disk Cache Memory</b>, your system is well " + "configured."); + break; + case MEM_HDD: + title = i18n("Swap Space"); + hint = i18n("The swap space is the <b>virtual memory</b> " + "available to the system. " + "<p>It will be used on demand and is provided " + "through one or more swap partitions and/or swap files."); + break; + default: + hint = title = QString::null; + break; + }; + + if (hint.length()) + hint = "<qt>" + hint + "</qt>"; + + Widget = new QLabel("<b>" + title + "</b>", this); + Widget->setAlignment(AlignCenter); + QToolTip::add(Widget, hint); + vbox->addWidget(Widget); + vbox->addSpacing(SPACING / 2); + + QWidget *g = new QWidget(this); + g->setMinimumWidth(2 * SPACING); + g->setMinimumHeight(3 * SPACING); + g->setBackgroundMode(NoBackground); + QToolTip::add(g, hint); // add the tooltip + Graph[i] = g; + vbox->addWidget(g, 2); + vbox->addSpacing(SPACING / 2); + + Widget = new QLabel(this); /* xx MB used. */ + Widget->setAlignment(AlignCenter); + QToolTip::add(Widget, hint); + GraphLabel[i] = Widget; + vbox->addWidget(Widget); + } + hbox->addSpacing(SPACING); + + timer = new QTimer(this); + timer->start(100); + QObject::connect(timer, SIGNAL(timeout()), this, + SLOT(update_Values())); + + update(); +} + +KMemoryWidget::~KMemoryWidget() +{ + /* stop the timer */ + timer->stop(); +} + + +QString KMemoryWidget::quickHelp() const +{ + return i18n("<h1>Memory Information</h1>" + " This display shows you the current memory usage of your system." + " The values are updated on a regular basis and give you an" + " overview of the physical and virtual used memory." ); +} + + +/* Graphical Memory Display */ +bool KMemoryWidget::Display_Graph(int widgetindex, + int count, + t_memsize total, + t_memsize * used, + QColor * color, + QString *text) +{ + QWidget *graph = Graph[widgetindex]; + int width = graph->width(); + int height = graph->height(); + QPixmap pm(width, height); + QPainter paint; + + paint.begin(&pm, this); + + QPen pen(QColor(0, 0, 0)); + + if (! ZERO_IF_NO_INFO(total)) { + paint.fillRect(1, 1, width - 2, height - 2, + QBrush(QColor(128, 128, 128))); + paint.setPen(pen); + paint.drawRect(graph->rect()); + GraphLabel[widgetindex]->setText(Not_Available_Text); + paint.end(); + bitBlt(graph, 0, 0, &pm); + return false; + } + + int startline = height-2; + int percent, localheight; + t_memsize last_used = 0; + + while (count--) { + last_used = *used; + +#ifdef HAVE_LONG_LONG + percent = (((long long)last_used) * 100) / total; +#else + /* prevent integer overflow with usage of double type */ + percent = (int) ((((double)last_used) * 100) / total); +#endif + + if (count) + localheight = ((height-2) * percent) / 100; + else + localheight = startline; + + if (localheight>0) { + paint.fillRect(1, startline, width-2, -localheight, *color); + + if (localheight >= SPACING) { + paint.drawText(0, startline-localheight, width, localheight, + AlignCenter | WordBreak, + QString("%1 %2%").arg(*text).arg(percent)); + } + } + + startline -= localheight; + + ++used; + ++color; + ++text; + } + + /* draw surrounding box */ + paint.setPen(pen); + QRect r = graph->rect(); + qDrawShadePanel(&paint, r.x(), r.y(), r.width(), r.height(), palette().active(), true, 1); + paint.end(); + bitBlt(graph, 0, 0, &pm); + + GraphLabel[widgetindex]->setText(i18n("%1 free").arg(formatted_unit(last_used))); + + return true; +} + +/* update_Values() is the main-loop for updating the Memory-Information */ +void KMemoryWidget::update_Values() +{ + int i; + bool ok1; + QLabel *label; + t_memsize used[5]; + + update(); /* get the Information from memory_linux, memory_fbsd */ + + /* update the byte-strings */ + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; i++) { + label = MemSizeLabel[i][0]; + if (Memory_Info[i] == NO_MEMORY_INFO) + label->clear(); + else + label->setText(i18n("%1 bytes ="). + arg(KGlobal::locale()-> + formatNumber(Memory_Info[i], 0))); + } + + /* update the MB-strings */ + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; i++) { + label = MemSizeLabel[i][1]; + label->setText((Memory_Info[i] != NO_MEMORY_INFO) + ? formatted_unit(Memory_Info[i]) + : Not_Available_Text); + } + + /* display graphical output (ram, hdd, at last: HDD+RAM) */ + /* be careful ! Maybe we have not all info available ! */ + + /* RAM usage: */ + /* don't rely on the SHARED_MEM value since it may refer to + * the size of the System V sharedmem in 2.4.x. Calculate instead! */ + + used[1] = 0; +#if !defined(__svr4__) || !defined(sun) +#if !defined(__NetBSD__) && !defined(__OpenBSD__) + used[1] = ZERO_IF_NO_INFO(Memory_Info[BUFFER_MEM]); +#endif +#endif + used[2] = ZERO_IF_NO_INFO(Memory_Info[CACHED_MEM]); + used[3] = ZERO_IF_NO_INFO(Memory_Info[FREE_MEM]); + used[0] = ZERO_IF_NO_INFO(Memory_Info[TOTAL_MEM]) - used[1] - used[2] - used[3]; + if (!ram_colors_initialized) { + ram_colors_initialized = true; + ram_text[0] = i18n("Application Data"); + ram_colors[0] = COLOR_USED_MEMORY; /* used+shared */ + ram_text[1] = i18n("Disk Buffers"); + ram_colors[1] = QColor(24,131,5); /* buffer */ + ram_text[2] = i18n("Disk Cache"); + ram_colors[2] = QColor(33,180,7); /* cached */ + ram_text[3] = i18n("Free Physical Memory"); + ram_colors[3] = COLOR_FREE_MEMORY; /* free */ + } + ok1 = Display_Graph(MEM_RAM, 4, Memory_Info[TOTAL_MEM], + used, ram_colors, ram_text); + + /* SWAP usage: */ + used[1] = ZERO_IF_NO_INFO(Memory_Info[FREESWAP_MEM]); + used[0] = ZERO_IF_NO_INFO(Memory_Info[SWAP_MEM]) - used[1]; + if (!swap_colors_initialized) { + swap_colors_initialized = true; + swap_text[0] = i18n("Used Swap"); + swap_colors[0] = COLOR_USED_SWAP; /* used */ + swap_text[1] = i18n("Free Swap"); + swap_colors[1] = COLOR_FREE_MEMORY; /* free */ + } + Display_Graph(MEM_HDD, 2, Memory_Info[SWAP_MEM], + used, swap_colors, swap_text); + + /* RAM + SWAP usage: */ + if (Memory_Info[SWAP_MEM] == NO_MEMORY_INFO || + Memory_Info[FREESWAP_MEM] == NO_MEMORY_INFO) + Memory_Info[SWAP_MEM] = Memory_Info[FREESWAP_MEM] = 0; + + used[1] = Memory_Info[SWAP_MEM] - Memory_Info[FREESWAP_MEM]; + used[2] = Memory_Info[FREE_MEM] + Memory_Info[FREESWAP_MEM]; + used[0] = (Memory_Info[TOTAL_MEM]+Memory_Info[SWAP_MEM])-used[1]-used[2]; + if (!all_colors_initialized) { + all_colors_initialized = true; + all_text[0] = i18n("Used Physical Memory"); + all_colors[0] = COLOR_USED_MEMORY; /* used ram */ + all_text[1] = i18n("Used Swap"); + all_colors[1] = COLOR_USED_SWAP; /* used swap */ + all_text[2] = i18n("Total Free Memory"); + all_colors[2] = COLOR_FREE_MEMORY; /* free ram+swap*/ + } + Display_Graph(MEM_RAM_AND_HDD, 3, + ok1 ? Memory_Info[TOTAL_MEM] + Memory_Info[SWAP_MEM] + : NO_MEMORY_INFO, + used, all_colors, all_text); +} + + +/* Include system-specific code */ + +#ifdef __linux__ +#include "memory_linux.cpp" +#elif defined(__APPLE__) +#include "memory_osx.cpp" +#elif defined(sgi) && sgi +#include "memory_sgi.cpp" +#elif defined(__svr4__) && defined(sun) +#include "memory_solaris.cpp" +#elif defined(__FreeBSD__) || defined(__DragonFly__) +#include "memory_fbsd.cpp" +#elif defined(__hpux) +#include "memory_hpux.cpp" +#elif defined(__NetBSD__) || defined(__OpenBSD__) +#include "memory_netbsd.cpp" +#elif __osf__ +#include "memory_tru64.cpp" +#else + +/* Default for unsupported systems */ +void KMemoryWidget::update() +{ + int i; + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; ++i) + Memory_Info[i] = NO_MEMORY_INFO; +} + +#endif +#include "memory.moc" diff --git a/kcontrol/info/memory.desktop b/kcontrol/info/memory.desktop new file mode 100644 index 000000000..f9aca9869 --- /dev/null +++ b/kcontrol/info/memory.desktop @@ -0,0 +1,248 @@ +[Desktop Entry] +Exec=kcmshell memory +Icon=kcmmemory +Type=Application +DocPath=kinfocenter/memory/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=memory +X-KDE-ParentApp=kinfocenter + +Name=Memory +Name[af]=Geheue +Name[ar]=الذاكرة +Name[az]=Yaddaş +Name[be]=Памяць +Name[bg]=Памет +Name[bn]=মেমরি +Name[br]=Memor +Name[bs]=Memorija +Name[ca]=Memòria +Name[cs]=Paměť +Name[csb]=Pamiãc +Name[cy]=Cof +Name[da]=Hukommelse +Name[de]=Speicher +Name[el]=Μνήμη +Name[eo]=Memoro +Name[es]=Memoria +Name[et]=Mälu +Name[eu]=Memoria +Name[fa]=حافظه +Name[fi]=Muisti +Name[fr]=Mémoire +Name[fy]=Unthâld +Name[ga]=Cuimhne +Name[gl]=Memória +Name[he]=זיכרון +Name[hi]=मेमोरी +Name[hr]=Memorija +Name[hu]=Memória +Name[is]=Minni +Name[it]=Memoria +Name[ja]=メモリ +Name[ka]=მეხსიერება +Name[kk]=Жады +Name[km]=សតិ +Name[ko]=메모리 +Name[lo]=ຫນ່ວຍຄວາມຈຳ +Name[lt]=Atmintis +Name[lv]=Atmiņa +Name[mk]=Меморија +Name[mn]=Санах ой +Name[ms]=Ingatan +Name[mt]=Memorja +Name[nb]=Minne +Name[nds]=Spieker +Name[ne]=स्मृति +Name[nl]=Geheugen +Name[nn]=Minne +Name[nso]=Kelelo +Name[oc]=Memòria +Name[pa]=ਮੈਮੋਰੀ +Name[pl]=Pamięć +Name[pt]=Memória +Name[pt_BR]=Memória +Name[ro]=Memorie +Name[ru]=Память +Name[rw]=Umwanyabubiko +Name[se]=Muitu +Name[sk]=Pamäť +Name[sl]=Pomnilnik +Name[sr]=Меморија +Name[sr@Latn]=Memorija +Name[ss]=Inkhumbulo +Name[sv]=Minne +Name[ta]=நினைவு +Name[te]=మెమొరి +Name[tg]=Хотира +Name[th]=หน่วยความจำ +Name[tr]=Bellek +Name[tt]=Xäter +Name[uk]=Пам'ять +Name[uz]=Xotira +Name[uz@cyrillic]=Хотира +Name[ven]=Muhumbulo +Name[vi]=Bộ nhớ +Name[wa]=Memwere +Name[xh]=Inkumbulo +Name[zh_CN]=内存 +Name[zh_TW]=記憶體 +Name[zu]=Inkumbulo + +Comment=Memory information +Comment[af]=Geheue informasie +Comment[ar]=معلومات الذاكرة +Comment[az]=Yaddaş haqqında mə'lumat +Comment[be]=Інфармацыя аб памяці +Comment[bg]=Информация за системната памет +Comment[bn]=মেমরি সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar memor +Comment[bs]=Informacije o memoriji +Comment[ca]=Informació de la memòria +Comment[cs]=Informace o paměti +Comment[csb]=Wëdowiédzô ò pamiãcë +Comment[cy]=Gwybodaeth Cof +Comment[da]=Information om hukommelsen +Comment[de]=Informationen zum Speicher +Comment[el]=Πληροφορίες για τη Μνήμη +Comment[eo]=Informo pri memoro +Comment[es]=Información sobre la memoria +Comment[et]=Mäluga seotud info +Comment[eu]=Memoriari buruzko informazioa +Comment[fa]=اطلاعات حافظه +Comment[fi]=Tietoja muistista +Comment[fr]=Informations sur la mémoire +Comment[fy]=Unthâld ynformaasje +Comment[gl]=Información da memória +Comment[he]=מידע על הזיכרון +Comment[hi]=मेमोरी जानकारी +Comment[hr]=Podaci o memoriji +Comment[hu]=A memória jellemzői +Comment[id]=Informasi Memory +Comment[is]=Upplýsingar um vinnsluminni +Comment[it]=Informazioni sulla memoria +Comment[ja]=メモリの情報 +Comment[ka]=ინფორმაცია მეხსიერების შესახებ +Comment[kk]=Жад мәліметі +Comment[km]=ព័ត៌មានសតិ +Comment[ko]=메모리 정보 +Comment[lo]=ຂໍ້ມູນຫນ່ວຍຄວາມຈຳ +Comment[lt]=Atminties informacija +Comment[lv]=Atmiņas informācija +Comment[mk]=Информации за меморијата +Comment[mn]=Санах ойн мэдээлэл +Comment[ms]=Maklumat ingatan +Comment[mt]=Informazzjoni dwar memorja +Comment[nb]=Minneinformasjon +Comment[nds]=Informatschoon över den Spieker +Comment[ne]=स्मृति सूचना +Comment[nl]=Geheugeninformatie +Comment[nn]=Minneinformasjon +Comment[nso]=Tshedimoso ya Kelelo +Comment[oc]=Informacion de la memòria +Comment[pa]=ਮੈਮੋਰੀ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o pamięci +Comment[pt]=Informações sobre a memória +Comment[pt_BR]=Informações sobre memória +Comment[ro]=Informații despre utilizarea memoriei +Comment[ru]=Сведения о использовании памяти +Comment[rw]=Ibisobanuro by'umwanyabubiko +Comment[se]=Muitodiehtu +Comment[sk]=Informácie o pamäti +Comment[sl]=Podatki o pomnilniku +Comment[sr]=Информације о меморији +Comment[sr@Latn]=Informacije o memoriji +Comment[ss]=Umniningwane wenkhumbulo +Comment[sv]=Minnesinformation +Comment[ta]=நினைவுத் தகவல் +Comment[te]=మెమొరి సమాచారం +Comment[tg]=Иттилооти хотира +Comment[th]=ข้อมูลหน่วยความจำ +Comment[tr]=Bellek hakkında bilgi +Comment[tt]=Xäter turında +Comment[uk]=Інформація щодо пам'яті +Comment[uz]=Xotira haqida maʼlumot +Comment[uz@cyrillic]=Хотира ҳақида маълумот +Comment[ven]=Muhumbulo wa mafhungo +Comment[vi]=Thông tin về bộ nhớ +Comment[wa]=Informåcion sol memwere +Comment[xh]=Ulwazi lwenkumbulo +Comment[zh_CN]=内存信息 +Comment[zh_TW]=記憶體資訊資訊 +Comment[zu]=Ulwazi lwenkumbulo + +Keywords=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information +Keywords[af]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Informasie +Keywords[ar]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,الذاكرة,ذاكرة,لاذاكرة العشوائية,الذاكرة الافتراضية,الذاكرة المادية,الذاكرة المشتركة,التبديل, معلومات النظام +Keywords[az]=Yaddaş,RAM,Virtual yaddaş,Fiziki yaddaş,Paylaşılan yaddaş,Dəyiş-toqquş Haqqında Mə'lumat +Keywords[be]=Памяць,віртуальная памяць,фізічная памяць,падкачка,сістэмная інфармацыя,Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information +Keywords[bg]=информация, система, системна, памет, физическа, виртуална, кеш, реална, Memory, RAM, Virtual memory, Physical memory, Shared memory, Swap, System Information +Keywords[br]=memor,RAM,memor c'halloudel,memor fizikel,memor rannet,disloañ,titouroù reizhiad +Keywords[bs]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,memorija,fizička memorija,informacije o sustavu,dijeljena memorija +Keywords[ca]=Memòria,RAM,Memòria virtual,memòria física,memòria compartida,intercanvi,Informació del sistema +Keywords[cs]=Paměť,RAM,Virtuální paměť,Fyzická paměť,Sdílená paměť,Swap,Informace o systému +Keywords[csb]=pamiãc,RAM,wirtualnô pamiãc,fizycznô pamiãc,zbiérnô pamiãc,lopk wëmianë,particëjô wëmianë,wëdowiédzô ò systemie +Keywords[cy]=Cof,RAM,Cof rhith,Cof corfforol,Cof cyfrannol,Swap,Gwybodaeth Cysawd +Keywords[da]=Hukommelse,Ram,Virtuel hukommelse,Fysisk hukommelse,Delt hukommelse,Swap,Systeminformation +Keywords[de]=Speicher,RAM,Virtueller Speicher,Physischer Speicher,Shared Memory,Auslagerung,Swap,Systeminformation +Keywords[el]=Μνήμη,RAM,Εικονική μνήμη,Φυσική μνήμη,Μοιρασμένη μνήμη,Αντιμετάθεση,Πληροφορίες συστήματος +Keywords[eo]=memoro,RAM,virtuala,fizika,komunuza,sistemo,operaciumo,informo +Keywords[es]=Memoria,RAM,Memoria virtual,Memoria física,Memoria compartida,Swap,Intercambio,Información del sistema +Keywords[et]=Mälu,RAM,Virtuaalmälu,Füüsiline mälu,Jagatud mälu,Swap,Saaleala,Süsteemi info +Keywords[eu]=Memoria,RAM,Memoria birtuala,Memoria fisikoa,Partekatutako memoria, Swap,Sistemaren informazioa +Keywords[fa]=حافظه، حافظه با دستیابی تصادفی، حافظۀ مجازی، حافظۀ فیزیکی، حافظۀ مشترک، مبادله کردن، اطلاعات سیستم +Keywords[fi]=Muisti,RAM,Virtuaalimuisti,Fyysinen muisti,Jaettu muisti,Järjestelmätiedot +Keywords[fr]=mémoire,RAM,mémoire virtuelle,mémoire physique,mémoire partagée,swap,partition d'échange,informations système,ram +Keywords[fy]=memory,RAM,virtual memory,physical memory,shared memory,swap,systeemynformaasje,ûnthâld,wikselûnthâld,,virtueel ûnthâld,fysiek ûnthâld,dield ûnthâld, +Keywords[ga]=Cuimhne,RAM,Cuimhne fhíorúil,Cuimhne ábhartha,Comhchuimhne,Cuimhne bhabhtála,Eolas faoin Chóras +Keywords[gl]=Memória,RAM,Memória virtual,Memória física,Memória compartida,Swap,Intercámbio,Información do Sistema +Keywords[he]=זיכרון פנימי,זיכרון וירטואלי,זיכרון משותף,תחלופה,מידע, מערכת,RAM,זיכרון,Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information +Keywords[hi]=मेमोरी,रैम,आभासी मेमोरी,वास्तविक मेमोरी,साझेदारी मेमोरी,अदला-बदली(स्वैप),तंत्र जानकारी +Keywords[hr]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,Memorija,Virtualana memorija,Fizička memorija,Dijeljena memorija,Podaci o sustavu +Keywords[hu]=memória,RAM,virtuális memória,fizikai memória,megosztott memória,lapozómemória,lapozó,swap,rendszerinformáció +Keywords[id]=Memory,RAM,Memory Virtual,Memory fisik,memory shared,Swap,Informasi Sistem +Keywords[is]=Minni,vinnsluminni,sýndarminni,samnýtt minni,biðminni,diskminni,kerfi,upplýsingar +Keywords[it]=memoria,RAM,memoria virtuale,memoria fisica,memoria condivisa,swap,informazioni sul sistema +Keywords[ja]=メモリ,RAM,仮想メモリ,物理メモリ,共有メモリ, スワップ, システム情報 +Keywords[ka]=მეხსიერება,RAM,ვირტუალური მეხსეირება,ფიზიკური მეხსიერება,საერთო მეხსიერება,მიმოცვლის ფაილია,ინფორმაცია სისტემის შესახებ +Keywords[km]=សតិ,RAM,សតិនិមិត្ត,សតិពិត,សតិរួម,Swap,ព័ត៌មានប្រព័ន្ធ +Keywords[lo]=ຫນ່ວຍຄວາມຈຳ,ແຣມ,ຫນ່ວຍຄວາມຈຳສະເຫມືອນ,ຫນ່ວຍຄວາມຈຳຈິງ,ຫນ່ວຍຄວາມຈຳທີ່ໃໍຊ້ຮ່ວມກັນ,ສະວອປ,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=Memory,atmintis,RAM,atmintinė,Virtual memory,virtuali atmintis,Physical memory,fizinė atmintis,Shared memory,bendro naudojimo atmintis,Swap,System Information,sisteminė informacija +Keywords[lv]=Atmiņa,RAM,Virtuālā atmiņa,Fiziskā atmiņa,Koplietošanas atmiņa,Svaps,Sistēmas Informācija +Keywords[mk]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,Меморија,Виртуелна меморија,Физичка меморија,Заедничка меморија,Информации за системот +Keywords[mn]=Санах ой,RAM,Виртуал санах ой,Физик санах ой,Хамтарсан санах ой,Хадгалалт,Зөөлт,Системийн мэдээлэл +Keywords[nb]=Minne,RAM,Kunstig minne,Fysisk minne,Delt minne,Vekselsminne,Systeminformasjon +Keywords[nds]=Spieker,RAM,Virtuell Spieker,Physikaalsch Spieker,Deelt Spieker,Swap,Utlager-Spieker,utlagern,Systeeminformatschoon +Keywords[ne]=स्मृति, RAM, अवास्तविक स्मृति, भौतीक स्मृति, साझेदारी स्मृति, स्वाप, प्रणाली सूचना +Keywords[nl]=memory,RAM,virtual memory,physical memory,shared memory,swap,systeeminformatie,geheugen,wisselgeheugen,virtueel geheugen,fysiek geheugen,gedeeld geheugen +Keywords[nn]=minne,RAM,virtuelt minne,fysisk minne,delt minne,veksleminne,systeminformasjon +Keywords[nso]=Kelelo,RAM,Kelelo ye Maatla,Kelelo ya kantle,Kelelo yeo e abaganwego,Swap,Tshedimoso ya System +Keywords[oc]=Memòria,RAM,Memòria virtual,memòria fÃsica,memòria compartida,intercanvi,Informacion dèu sistemo +Keywords[pa]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,ਮੈਮੋਰੀ,ਭੌਤਿਕ ਮੈਮੋਰੀ,ਸਾਂਝੀ ਮੈਮੋਰੀ,ਸਵੈਪ,ਸਿਸਟਮ ਜਾਣਕਾਰੀ,ਰੈਮ +Keywords[pl]=pamięć,RAM,pamięć wirtualna,pamięć fizyczna,pamięć współdzielona,plik wymiany,partycja wymiany,informacja o systemie +Keywords[pt]=memória,RAM,memória virtual,memória física,memória partilhada,swap,informações do sistema +Keywords[pt_BR]=Memória,RAM,Memória virtual,Memória física,Memória compartilhada,Swap,Troca,Informações de sistema +Keywords[ro]=memorie,RAM,memorie virtuală,memorie fizică,memorie partajată,swap,informații despre sistem +Keywords[rw]=Umwanyabubiko,RAM,Umwanyabubiko utagaragara,Ububiko bufatika,Ububiko busangiwe,Guhinduranya,Ibisobanuro Sisitemu +Keywords[se]=muitu,RAM,virtuella muitu,fysálaš muitu,juohkojuvvon muitu,vuorromuitu, vuogádatdiehtu +Keywords[sk]=Pamäť,RAM,Virtuálna pamäť,zdieľaná pamäť,swap,Systémové informácie +Keywords[sl]=pomnilnik,RAM,navidezni pomnilnik,fizični pomnilnik,deljeni pomnilnik,izmenjalni prostor,informacije o sistemu +Keywords[sr]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,меморија,виртуелна меморија,физичка меморија,дељена меморија,системске информације +Keywords[sr@Latn]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,memorija,virtuelna memorija,fizička memorija,deljena memorija,sistemske informacije +Keywords[sv]=Minne,RAM,Virtuellt minne,Fysiskt minne,Delat minne,Swapp,Systeminformation +Keywords[ta]=நினைவகம், RAM,மய் நிகர் நினைவகம், பருநிலை நினைவகம், பகிர்வு நினைவகம், மாறுகொள், அமைப்புத்தகவல் +Keywords[th]=หน่วยความจำ,แรม,หน่วยความจำเสมือน,หน่วยความจำจริง,หน่วยความจำที่ใช้ร่วมกัน,สว้อป,ข้อมูลระบบ +Keywords[tr]=Bellek,RAM,Sanal bellek,Fiziksel bellek,Paylaşılan bellek,Takas,Sistem Hakkında Bilgi +Keywords[uk]=пам'ять,RAM,віртуальна пам'ять,фізична пам'ять,спільна пам'ять,свопінг,swap,інформація,система +Keywords[uz]=Xotira,RAM,Virtual xotira,Physical memory,Boʻlishilgan xotira,Svop,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=Хотира,RAM,Виртуал хотира,Physical memory,Бўлишилган хотира,Своп,Тизим ҳақида маълумот +Keywords[ven]=Muhumbulo,RAM,Muhumbulo wa vitshuala,muhumbulo zwao,muhumbulo wo kovhekanywaho,swap,mafhungo a sisitemu +Keywords[vi]=Bộ nhớ,RAM,Bộ nhớ ảo,Bộ nhớ vật lý,Bộ nhớ dùng chung,Bộ nhỡ tráo đổi,Thông tin Hệ thống +Keywords[wa]=memwere,RAM,forveyowememwere,memwere fizike,pårtaedjeye memwere,Swap,informåcion do sistinme +Keywords[xh]=Inkumbulo,RAM,Inkumbulo yobume,Inkumbulo yomzimba,Inkumbulo yokwahlulelana,Ukutshintshiselana,Ulwazi lwendlela +Keywords[zh_CN]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,内存,虚拟存储,物理存储,共享内存,交换,系统信息 +Keywords[zh_TW]=Memory,RAM,Virtual memory,Physical memory,Shared memory,Swap,System Information,記憶體,虛擬記憶體,實體記憶體,共享記憶體,系統資訊 +Keywords[zu]=Inkumbulo,RAM,Inkumbulo yamanga,Inkumbulo siqu,Inkumbulo yokwabelana,Shintshanisa,Ulwazi Lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/memory.h b/kcontrol/info/memory.h new file mode 100644 index 000000000..7f6778c75 --- /dev/null +++ b/kcontrol/info/memory.h @@ -0,0 +1,67 @@ +#ifndef _MEMORY_H_KDEINFO_INCLUDED_ +#define _MEMORY_H_KDEINFO_INCLUDED_ + +#include <qwidget.h> +#include <qframe.h> +#include <qlabel.h> +#include <qtabdialog.h> +#include <qpushbutton.h> +#include <qtimer.h> + +#include <kcmodule.h> +#include <kaboutdata.h> +#include <config.h> + +#ifdef HAVE_LONG_LONG +/* better to use long-long, because some 32bit-machines have more total + memory (with swap) than just the 4GB which fits into a 32bit-long */ +typedef unsigned long long t_memsize; +#else +typedef unsigned long t_memsize; +#endif + +#define COLOR_USED_MEMORY QColor(255,0,0) +#define COLOR_USED_SWAP QColor(255,134,64) +#define COLOR_FREE_MEMORY QColor(127,255,212) + +class KMemoryWidget:public KCModule { + Q_OBJECT + + public: + KMemoryWidget(QWidget * parent, const char *name = 0); + ~KMemoryWidget(); + + QString quickHelp() const; + + private: + QString Not_Available_Text; + QTimer *timer; + + bool ram_colors_initialized, + swap_colors_initialized, + all_colors_initialized; + + QColor ram_colors[4]; + QString ram_text[4]; + + QColor swap_colors[2]; + QString swap_text[2]; + + QColor all_colors[3]; + QString all_text[3]; + + void update(); + + bool Display_Graph(int widgetindex, + int count, + t_memsize total, + t_memsize *used, + QColor *color, + QString *text); + public slots: + void update_Values(); +}; + + +#endif // _MEMORY_H_KDEINFO_INCLUDED_ + diff --git a/kcontrol/info/memory_fbsd.cpp b/kcontrol/info/memory_fbsd.cpp new file mode 100644 index 000000000..80a28749e --- /dev/null +++ b/kcontrol/info/memory_fbsd.cpp @@ -0,0 +1,89 @@ + +#include <sys/types.h> +#include <sys/sysctl.h> +#include <sys/vmmeter.h> + +#include <vm/vm_param.h> + +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> + +void KMemoryWidget::update() +{ + char blah[10], buf[80], *used_str, *total_str; + /* Stuff for sysctl */ + int memory; + size_t len; + /* Stuff for swap display */ + int used, total, _free; + FILE *pipe; + + len=sizeof(memory); + sysctlbyname("hw.physmem", &memory, &len, NULL, 0); + + snprintf(blah, 10, "%d", memory); + // Numerical values + + // total physical memory (without swap space) + Memory_Info[TOTAL_MEM] = MEMORY(memory); + + // added by Brad Hughes bhughes@trolltech.com + struct vmtotal vmem; + + #warning "FIXME: Memory_Info[CACHED_MEM]" + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; + + // The sysctls don't work in a nice manner under FreeBSD v2.2.x + // so we assume that if sysctlbyname doesn't return what we + // prefer, assume it's the old data types. FreeBSD prior + // to 4.0-R isn't supported by the rest of KDE, so what is + // this code doing here. + + len = sizeof(vmem); + if (sysctlbyname("vm.vmmeter", &vmem, &len, NULL, 0) == 0) + Memory_Info[SHARED_MEM] = MEMORY(vmem.t_armshr) * PAGE_SIZE; + else + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; + + int buffers; + len = sizeof (buffers); + if ((sysctlbyname("vfs.bufspace", &buffers, &len, NULL, 0) == -1) || !len) + Memory_Info[BUFFER_MEM] = NO_MEMORY_INFO; + else + Memory_Info[BUFFER_MEM] = MEMORY(buffers); + + // total free physical memory (without swap space) + int free; + len = sizeof (buffers); + if ((sysctlbyname("vm.stats.vm.v_free_count", &free, &len, NULL, 0) == -1) || !len) + Memory_Info[FREE_MEM] = NO_MEMORY_INFO; + else + Memory_Info[FREE_MEM] = MEMORY(free) * getpagesize(); + + // Q&D hack for swap display. Borrowed from xsysinfo-1.4 + if ((pipe = popen("/usr/sbin/pstat -ks", "r")) == NULL) { + used = total = 1; + return; + } + + fgets(buf, sizeof(buf), pipe); + fgets(buf, sizeof(buf), pipe); + fgets(buf, sizeof(buf), pipe); + fgets(buf, sizeof(buf), pipe); + pclose(pipe); + + strtok(buf, " "); + total_str = strtok(NULL, " "); + used_str = strtok(NULL, " "); + used = atoi(used_str); + total = atoi(total_str); + + _free=total-used; + + // total size of all swap-partitions + Memory_Info[SWAP_MEM] = MEMORY(total) * 1024; + + // free memory in swap-partitions + Memory_Info[FREESWAP_MEM] = MEMORY(_free) * 1024; +} diff --git a/kcontrol/info/memory_hpux.cpp b/kcontrol/info/memory_hpux.cpp new file mode 100644 index 000000000..4fefdfb35 --- /dev/null +++ b/kcontrol/info/memory_hpux.cpp @@ -0,0 +1,92 @@ +/* + + This file will be included by memory.cpp ! + + HP-UX is really ugly to retrieve information from ! + Implemented on 24.04.1999 by Helge Deller (deller@gmx.de) + Tested on an HP9000/715/64 under HPUX-10.20. + Updated for QT 2.0 on 27.04.1999 (deller) + + Sorry, but I don't know, who implemented the first (little) version of + update(), but it showed wrong sizes ! + + Many thanks goes also to Mike Romberg, who implemented such functions in + the program "xosview". Here's his copyright: + Copyright (c) 1994, 1995 by Mike Romberg ( romberg@fsl.noaa.gov ) + +*/ + +#include <stdio.h> +#include <unistd.h> +#include <sys/param.h> +#include <sys/pstat.h> + + +#define MAX_SWAP_AREAS 16 + +void KMemoryWidget::update() +{ + int page_size,i; + unsigned long total_mem, total_free, + total_physical, total_swap, free_physical, + used_physical, used_swap, free_swap; + + struct pst_static pststatic; + struct pst_dynamic stats; + struct pst_vminfo vmstats; + unsigned long fields_[4]; + struct pst_swapinfo swapinfo; + + pstat_getstatic( &pststatic, sizeof( struct pst_static ), (size_t)1, 0); + total_physical = pststatic.physical_memory; + page_size = (int)pststatic.page_size; + + pstat_getdynamic(&stats, sizeof( pst_dynamic ), (size_t)1, 0); + pstat_getvminfo(&vmstats, sizeof(vmstats), (size_t)1, 0); + + fields_[0] = stats.psd_rmtxt + stats.psd_arm; // TEXT + fields_[1] = stats.psd_rm - stats.psd_rmtxt; // USED + fields_[2] = total_physical - fields_[0] - fields_[1] - stats.psd_free; //OTHER + fields_[3] = stats.psd_free; // FREE + + used_physical = (total_physical - fields_[3]) * page_size; + total_physical *= page_size; + free_physical = (total_physical - used_physical); + + + /* Now check the SWAP-AREAS !! */ + + total_swap = free_swap = 0; + + for (i = 0 ; i < MAX_SWAP_AREAS ; i++) + { + pstat_getswap(&swapinfo, sizeof(swapinfo), (size_t)1, i); + if (swapinfo.pss_idx == (unsigned)i) + { + swapinfo.pss_nfpgs *= 4; // nfpgs is in 512 Byte Blocks.... + if (swapinfo.pss_nblksenabled == 0) // == 0 ?? + swapinfo.pss_nblksenabled = swapinfo.pss_nfpgs; + total_swap += (((unsigned long)swapinfo.pss_nblksenabled) * 1024); + free_swap += (((unsigned long)swapinfo.pss_nfpgs ) * 1024); + } + } + + used_swap = total_swap - free_swap; + + + /* Now display the results */ + + total_mem = total_physical; // + total_swap; + total_free = (total_physical - used_physical);// + free_swap; + + Memory_Info[TOTAL_MEM] = MEMORY(total_mem); // total physical memory (without swaps) + Memory_Info[FREE_MEM] = MEMORY(total_free);// total free physical memory (without swaps) + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; /* FIXME ?? */ + Memory_Info[BUFFER_MEM] = MEMORY(fields_[2])*page_size; /* FIXME ?? */ + Memory_Info[SWAP_MEM] = MEMORY(total_swap); // total size of all swap-partitions + Memory_Info[FREESWAP_MEM] = MEMORY(free_swap); // free memory in swap-partitions +#ifdef __GNUC__ +#warning "FIXME: Memory_Info[CACHED_MEM]" +#endif + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; // cached memory in ram +} diff --git a/kcontrol/info/memory_linux.cpp b/kcontrol/info/memory_linux.cpp new file mode 100644 index 000000000..c393c01e7 --- /dev/null +++ b/kcontrol/info/memory_linux.cpp @@ -0,0 +1,39 @@ +#include <sys/sysinfo.h> +#include <unistd.h> +#include <stdlib.h> +#include <qfile.h> + +void KMemoryWidget::update() +{ + struct sysinfo info; + + sysinfo(&info); /* Get Information from system... */ + + /* + * The sysinfo.mem_unit member variable is not available in older 2.4 kernels. + * If you have troubles compiling this code, set mem_unit to "1". + */ + + const int mem_unit = info.mem_unit; + + Memory_Info[TOTAL_MEM] = MEMORY(info.totalram) * mem_unit; // total physical memory (without swaps) + Memory_Info[FREE_MEM] = MEMORY(info.freeram) * mem_unit; // total free physical memory (without swaps) + Memory_Info[SHARED_MEM] = MEMORY(info.sharedram) * mem_unit; + Memory_Info[BUFFER_MEM] = MEMORY(info.bufferram) * mem_unit; + Memory_Info[SWAP_MEM] = MEMORY(info.totalswap) * mem_unit; // total size of all swap-partitions + Memory_Info[FREESWAP_MEM] = MEMORY(info.freeswap) * mem_unit; // free memory in swap-partitions + + QFile file("/proc/meminfo"); + if (file.open(IO_ReadOnly)) { + char buf[512]; + while (file.readLine(buf, sizeof(buf) - 1) > 0) { + if (strncmp(buf,"Cached:",7)==0) { + unsigned long v; + v = strtoul(&buf[7],NULL,10); + Memory_Info[CACHED_MEM] = MEMORY(v) * 1024; // Cached memory in RAM + } + } + file.close(); + } +} + diff --git a/kcontrol/info/memory_netbsd.cpp b/kcontrol/info/memory_netbsd.cpp new file mode 100644 index 000000000..39beeaa33 --- /dev/null +++ b/kcontrol/info/memory_netbsd.cpp @@ -0,0 +1,114 @@ + +#include <sys/param.h> +#if __NetBSD_Version__ > 103080000 +#define UVM +#endif +#if defined(__OpenBSD__) +#define UVM +#endif + +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/sysctl.h> +#ifdef UVM +#include <uvm/uvm_extern.h> +#else +#include <vm/vm_swap.h> +#endif + +void KMemoryWidget::update() +{ + int mib[2]; + size_t len; +#ifdef UVM +#if __NetBSD_Version__ > 499000100 /* 4.99.2+ */ + struct uvmexp_sysctl uvmexp; +#else + struct uvmexp uvmexp; +#endif +#else /* !UVM */ + struct swapent *swaplist; + int64_t nswap, rnswap, totalswap, freeswap, usedswap; +#endif +#if __NetBSD_Version__ > 106170000 /* 1.6Q+ */ + quad_t memory; +#else + int memory; +#endif + + /* memory */ +#if __NetBSD_Version__ > 106170000 /* 1.6Q+ */ + mib[0] = CTL_HW; + mib[1] = HW_PHYSMEM64; +#else + mib[0] = CTL_HW; + mib[1] = HW_PHYSMEM; +#endif + len = sizeof(memory); + if( sysctl(mib,2,&memory,&len,NULL,0)< 0 ) + Memory_Info[TOTAL_MEM] = NO_MEMORY_INFO; + else + Memory_Info[TOTAL_MEM] = memory; + +#ifdef UVM + mib[0] = CTL_VM; +#if __NetBSD_Version__ > 499000100 /* 4.99.2+ */ + mib[1] = VM_UVMEXP2; +#else + mib[1] = VM_UVMEXP; +#endif + len = sizeof(uvmexp); + if ( sysctl(mib, 2, &uvmexp, &len, NULL, 0) < 0 ) { + Memory_Info[FREE_MEM] = NO_MEMORY_INFO; + Memory_Info[ACTIVE_MEM] = NO_MEMORY_INFO; + Memory_Info[INACTIVE_MEM] = NO_MEMORY_INFO; + Memory_Info[SWAP_MEM] = NO_MEMORY_INFO; + Memory_Info[FREESWAP_MEM] = NO_MEMORY_INFO; + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; + } else { + t_memsize pgsz = MEMORY(uvmexp.pagesize); + Memory_Info[FREE_MEM] = pgsz * uvmexp.free; + Memory_Info[ACTIVE_MEM] = pgsz * uvmexp.active; + Memory_Info[INACTIVE_MEM] = pgsz * uvmexp.inactive; + Memory_Info[SWAP_MEM] = pgsz * uvmexp.swpages; + Memory_Info[FREESWAP_MEM] = pgsz * (uvmexp.swpages - uvmexp.swpginuse); +#if __NetBSD_Version__ > 106000000 + Memory_Info[CACHED_MEM] = pgsz * (uvmexp.filepages + uvmexp.execpages); +#else + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; +#endif + } +#else + Memory_Info[FREE_MEM] = NO_MEMORY_INFO; + Memory_Info[ACTIVE_MEM] = NO_MEMORY_INFO; + Memory_Info[INACTIVE_MEM] = NO_MEMORY_INFO; + + /* swap */ + totalswap = freeswap = usedswap = 0; + nswap = swapctl(SWAP_NSWAP,0,0); + if ( nswap > 0 ) { + if ( (swaplist = (struct swapent *)malloc(nswap * sizeof(*swaplist))) ) { + rnswap = swapctl(SWAP_STATS,swaplist,nswap); + if ( rnswap < 0 || rnswap > nswap ) + totalswap = freeswap = -1; /* Error */ + else { + while ( rnswap-- > 0 ) { + totalswap += swaplist[rnswap].se_nblks; + usedswap += swaplist[rnswap].se_inuse; + } + freeswap = totalswap - usedswap; + } + } else + totalswap = freeswap = -1; /* Error */ + + if ( totalswap == -1 ) { + Memory_Info[SWAP_MEM] = NO_MEMORY_INFO; + Memory_Info[FREESWAP_MEM] = NO_MEMORY_INFO; + } else { + Memory_Info[SWAP_MEM] = MEMORY(totalswap); + Memory_Info[FREESWAP_MEM] = MEMORY(freeswap); + } + } +#endif +} diff --git a/kcontrol/info/memory_osx.cpp b/kcontrol/info/memory_osx.cpp new file mode 100644 index 000000000..9c18c4a6e --- /dev/null +++ b/kcontrol/info/memory_osx.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2003 Benjamin Reed <ranger@befunk.com> + * + * memory_osx.cpp is part of the KDE program kcminfo. Copied wholesale + * from memory_fbsd.cpp =) + * + * 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; either version 2 of the License, or + * (at your option) any later version. + * + * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <unistd.h> +#include <stdlib.h> +#include <qfile.h> +#include <mach/mach_init.h> +#include <mach/mach_host.h> +#include <mach/host_info.h> +#include <sys/stat.h> +#include <dirent.h> +#include <kdebug.h> + +void KMemoryWidget::update() +{ + + vm_statistics_data_t vm_info; + mach_msg_type_number_t info_count; + DIR *dirp; + struct dirent *dp; + t_memsize total; + + info_count = HOST_VM_INFO_COUNT; + if (host_statistics(mach_host_self (), HOST_VM_INFO, (host_info_t)&vm_info, &info_count)) { + kdDebug() << "could not get memory statistics" << endl; + return; + } + + Memory_Info[TOTAL_MEM] = MEMORY(vm_info.active_count + vm_info.inactive_count + + vm_info.free_count + vm_info.wire_count) * vm_page_size; + Memory_Info[FREE_MEM] = MEMORY(vm_info.free_count) * vm_page_size; + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; + Memory_Info[BUFFER_MEM] = NO_MEMORY_INFO; + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; + + dirp = opendir("/private/var/vm"); + if (!dirp) { + kdDebug() << "unable to open /private/var/vm" << endl; + return; + } + + total = 0; + + while ((dp = readdir (dirp)) != NULL) { + struct stat sb; + char fname [MAXNAMLEN]; + + if (strncmp (dp->d_name, "swapfile", 8)) + continue; + + strcpy (fname, "/private/var/vm/"); + strcat (fname, dp->d_name); + if (stat (fname, &sb) < 0) + continue; + + total += sb.st_size; + } + closedir (dirp); + + info_count = HOST_VM_INFO_COUNT; + if (host_statistics (mach_host_self (), HOST_VM_INFO, + (host_info_t) &vm_info, &info_count)) { + kdDebug() << "unable to get VM info" << endl; + } + + Memory_Info[SWAP_MEM] = total; + // off_t used = (vm_info.pageouts - vm_info.pageins) * vm_page_size; + Memory_Info[FREESWAP_MEM] = NO_MEMORY_INFO; + + /* free = MEMORY(vm_info.free_count) * vm_page_size; + used = MEMORY(vm_info.active_count) * vm_page_size; + total = MEMORY(vm_info.active_count + vm_info.inactive_count + + vm_info.free_count + vm_info.wire_count) * vm_page_size; */ + +} diff --git a/kcontrol/info/memory_sgi.cpp b/kcontrol/info/memory_sgi.cpp new file mode 100644 index 000000000..2bc0d0c65 --- /dev/null +++ b/kcontrol/info/memory_sgi.cpp @@ -0,0 +1,75 @@ + +#include <stdio.h> +#include <unistd.h> +#include <sys/sysmp.h> +#include <sys/ipc.h> + +// The following define is needed for SGI IRIX 6.2 +#define _KMEMUSER +#include <sys/shm.h> + +#include <sys/param.h> +#include <sys/swap.h> + +#ifndef UBSIZE +#define UBSIZE 512 +#endif + + +void KMemoryWidget::update() +{ + int pagesize = getpagesize(); + + struct rminfo rmi; + if( sysmp(MP_SAGET, MPSA_RMINFO, &rmi, sizeof(rmi)) == -1 ) + return; + Memory_Info[TOTAL_MEM] = MEMORY(rmi.physmem) * pagesize; // total physical memory (without swaps) + Memory_Info[FREE_MEM] = MEMORY(rmi.freemem) * pagesize; // total free physical memory (without swaps) + Memory_Info[BUFFER_MEM] = MEMORY(rmi.bufmem) * pagesize; + + + //FIXME: Memory_Info[CACHED_MEM]" + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; // cached memory in ram + + long val; + swapctl(SC_GETSWAPTOT, &val); + Memory_Info[SWAP_MEM] = MEMORY(val) * UBSIZE; // total size of all swap-partitions + + swapctl(SC_GETFREESWAP, &val); + Memory_Info[FREESWAP_MEM] = MEMORY(val) * UBSIZE; // free memory in swap-partitions + +#ifndef MPKA_SHMINFO + /* Irix 6.5 (also 6.4?) */ + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; +#else + FILE *kmem = fopen("/dev/kmem", "r"); + if( kmem == 0 ) { + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; + return; + } + + long shmip = sysmp(MP_KERNADDR, MPKA_SHMINFO); + fseek( kmem, shmip, 0 ); + struct shminfo shmi; + fread( &shmi, sizeof(shmi), 1, kmem ); + + long shmem = sysmp(MP_KERNADDR, MPKA_SHM); + + val = 0; + long pos; + struct shmid_ds shmid; + for( int i=0 ; i<shmi.shmmni ; i++ ) { + fseek( kmem, shmem, 0 ); + shmem += sizeof(shmem); + fread( &pos, sizeof(shmem), 1, kmem ); + if(pos != 0) { + fseek( kmem, pos, 0 ); + fread( &shmid, sizeof(shmid), 1, kmem ); + val += shmid.shm_segsz; + } + } + Memory_Info[SHARED_MEM] = MEMORY(val); + + fclose(kmem); +#endif +} diff --git a/kcontrol/info/memory_solaris.cpp b/kcontrol/info/memory_solaris.cpp new file mode 100644 index 000000000..a82b830d4 --- /dev/null +++ b/kcontrol/info/memory_solaris.cpp @@ -0,0 +1,94 @@ +/* + * memory_solaris.cpp + * + * Torsten Kasch <tk@Genetik.Uni-Bielefeld.DE> + */ + +#include <unistd.h> +#include <stdlib.h> +#include <kstat.h> + +/* Stop <sys/swap.h> from crapping out on 32-bit architectures. */ + +#if !defined(_LP64) && _FILE_OFFSET_BITS == 64 +# undef _FILE_OFFSET_BITS +# define _FILE_OFFSET_BITS 32 +#endif + +#include <sys/stat.h> +#include <sys/swap.h> +#include <vm/anon.h> + +#define PAGETOK(a) (( (t_memsize) sysconf( _SC_PAGESIZE )) * (t_memsize) a) + +void KMemoryWidget::update() { + + kstat_ctl_t *kctl; + kstat_t *ksp; + kstat_named_t *kdata; + + /* + * get a kstat handle first and update the user's kstat chain + */ + if( (kctl = kstat_open()) == NULL ) + return; + while( kstat_chain_update( kctl ) != 0 ) + ; + + /* + * traverse the kstat chain to find the appropriate kstat + */ + if( (ksp = kstat_lookup( kctl, "unix", 0, "system_pages" )) == NULL ) + return; + + if( kstat_read( kctl, ksp, NULL ) == -1 ) + return; + + /* + * lookup the data + */ +#if 0 + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "physmem" ); + if( kdata != NULL ) { + Memory_Info[TOTAL_MEM] = PAGETOK(kdata->value.ui32); + } +#endif + Memory_Info[TOTAL_MEM] = PAGETOK(sysconf(_SC_PHYS_PAGES)); + + kdata = (kstat_named_t *) kstat_data_lookup( ksp, "freemem" ); + if( kdata != NULL ) + Memory_Info[FREE_MEM] = PAGETOK(kdata->value.ui32); + +#warning "FIXME: Memory_Info[CACHED_MEM]" + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; // cached memory in ram + + kstat_close( kctl ); + + /* + * Swap Info + */ + + struct anoninfo am_swap; + long swaptotal; + long swapfree; + long swapused; + + swaptotal = swapused = swapfree = 0L; + + /* + * Retrieve overall swap information from anonymous memory structure - + * which is the same way "swap -s" retrieves it's statistics. + * + * swapctl(SC_LIST, void *arg) does not return what we are looking for. + */ + + if (swapctl(SC_AINFO, &am_swap) == -1) + return; + + swaptotal = am_swap.ani_max; + swapused = am_swap.ani_resv; + swapfree = swaptotal - swapused; + + Memory_Info[SWAP_MEM] = PAGETOK(swaptotal); + Memory_Info[FREESWAP_MEM] = PAGETOK(swapfree); +} diff --git a/kcontrol/info/memory_tru64.cpp b/kcontrol/info/memory_tru64.cpp new file mode 100644 index 000000000..667ffbcca --- /dev/null +++ b/kcontrol/info/memory_tru64.cpp @@ -0,0 +1,83 @@ +/* + * This is memory_tru64.cpp to retrieve memory information under Tru64/Alpha. + * + * Implemented by Tom Leitner, Tom@radar.tu-graz.ac.at + * + * WARNING: This module requires linking with -lmach + * + * This routine is based on m_decosf1.c from the "top" program written by: + * + * AUTHOR: Anthony Baxter, <anthony@aaii.oz.au> + * + */ + +#include <stdio.h> +#include <unistd.h> +#include <sys/socket.h> +#include <sys/mbuf.h> +#include <net/route.h> +#include <sys/table.h> +extern "C" { +#include <mach/mach_traps.h> +} +#include <mach/vm_statistics.h> + +#define pagetob(size) (MEMORY(1024L) * ((long) (size) << (long) pageshift)) +#define LOG1024 10 + +extern "C" void vm_statistics(task_t, vm_statistics_data_t*); + +void KMemoryWidget::update() +{ + int pageshift; /* log base 2 of the pagesize */ + register int pagesize; + vm_statistics_data_t vmstats; + int swap_pages=0,swap_free=0,i; + struct tbl_swapinfo swbuf; + + /* get the page size with "getpagesize" and calculate pageshift from it */ + + pagesize = getpagesize(); + pageshift = 0; + while (pagesize > 1) { + pageshift++; + pagesize >>= 1; + } + + /* we only need the amount of log(2)1024 for our conversion */ + + pageshift -= LOG1024; + + /* memory information */ + /* this is possibly bogus - we work out total # pages by */ + /* adding up the free, active, inactive, wired down, and */ + /* zero filled. Anyone who knows a better way, TELL ME! */ + /* Change: dont use zero filled. */ + + (void) ::vm_statistics(::task_self(), &vmstats); + + /* thanks DEC for the table() command. No thanks at all for */ + /* omitting the man page for it from OSF/1 1.2, and failing */ + /* to document SWAPINFO in the 1.3 man page. Lets hear it for */ + /* include files. */ + + i=0; + while(table(TBL_SWAPINFO,i,&swbuf,1,sizeof(struct tbl_swapinfo))>0) { + swap_pages += swbuf.size; + swap_free += swbuf.free; + i++; + } + Memory_Info[TOTAL_MEM] = pagetob((vmstats.free_count + + vmstats.active_count + + vmstats.inactive_count + + vmstats.wire_count)); + Memory_Info[FREE_MEM] = pagetob(vmstats.free_count); + Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; /* FIXME ?? */ + Memory_Info[BUFFER_MEM] = NO_MEMORY_INFO; /* FIXME ?? */ +#ifdef __GNUC__ +#warning "FIXME: Memory_Info[CACHED_MEM]" +#endif + Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; /* cached memory in ram */ + Memory_Info[SWAP_MEM] = pagetob(swap_pages); + Memory_Info[FREESWAP_MEM] = pagetob(swap_free); +} diff --git a/kcontrol/info/opengl.cpp b/kcontrol/info/opengl.cpp new file mode 100644 index 000000000..66266abdf --- /dev/null +++ b/kcontrol/info/opengl.cpp @@ -0,0 +1,673 @@ +/*************************************************************************** + * * + * Copyright (C) 2004 by Ilya Korniyko <k_ilya@ukr.net> * + * Adapted from Brian Paul's glxinfo from Mesa demos (http:/www.mesa3d.org) + * Copyright (C) 1999-2002 Brian Paul * + * * + * 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; either version 2 of the License, or * + * (at your option) any later version. * + * * + * 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#if defined(INFO_OPENGL_AVAILABLE) + +#define KCMGL_DO_GLU + +#include <qregexp.h> +#include <qlistview.h> +#include <qfile.h> +#include <qstring.h> + +#include <klocale.h> +#include <kmessagebox.h> +#include <kdebug.h> + +#include <X11/Xlib.h> +#include <X11/Xutil.h> + +#ifdef KCMGL_DO_GLU +#include <GL/glu.h> +#endif + +#include <GL/gl.h> +#include <GL/glext.h> +#include <GL/glx.h> + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +static bool IsDirect; + +static struct glinfo { + const char *serverVendor; + const char *serverVersion; + const char *serverExtensions; + const char *clientVendor; + const char *clientVersion; + const char *clientExtensions; + const char *glxExtensions; + const char *glVendor; + const char *glRenderer; + const char *glVersion; + const char *glExtensions; + const char *gluVersion; + const char *gluExtensions; + char *displayName; +} gli; + +static struct { + QString module, + pci, + vendor, + device, + subvendor, + rev; +} dri_info; + +static int ReadPipe(QString FileName, QStringList &list) +{ + FILE *pipe; + + if ((pipe = popen(FileName.ascii(), "r")) == NULL) { + pclose(pipe); + return 0; + } + + QTextStream t(pipe, IO_ReadOnly); + + while (!t.atEnd()) list.append(t.readLine()); + + pclose(pipe); + return list.count(); +} + +#if defined(Q_OS_LINUX) + +#define INFO_DRI "/proc/dri/0/name" + +static bool get_dri_device() +{ + QFile file; + file.setName(INFO_DRI); + if (!file.exists() || !file.open(IO_ReadOnly)) + return false; + + QTextStream stream(&file); + QString line = stream.readLine(); + if (!line.isEmpty()) { + dri_info.module = line.mid(0, line.find(0x20)); + + // possible formats, for regression testing + // line = " PCI:01:00:0"; + // line = " pci:0000:01:00.0" + QRegExp rx = QRegExp("\\b[Pp][Cc][Ii][:]([0-9a-fA-F]+[:])?([0-9a-fA-F]+[:][0-9a-fA-F]+[:.][0-9a-fA-F]+)\\b"); + if (rx.search(line)>0) { + dri_info.pci = rx.cap(2); + int end = dri_info.pci.findRev(':'); + int end2 = dri_info.pci.findRev('.'); + if (end2>end) end=end2; + dri_info.pci[end]='.'; + + QString cmd = QString("lspci -m -v -s ") + dri_info.pci; + QStringList pci_info; + int num; + if (((num = ReadPipe(cmd, pci_info)) || + (num = ReadPipe("/sbin/"+cmd, pci_info)) || + (num = ReadPipe("/usr/sbin/"+cmd, pci_info)) || + (num = ReadPipe("/usr/local/sbin/"+cmd, pci_info))) && num>=7) { + for (int i=2; i<=6; i++) { + line = pci_info[i]; + line.remove(QRegExp("[^:]*:[ ]*")); + switch (i){ + case 2: dri_info.vendor = line; break; + case 3: dri_info.device = line; break; + case 4: dri_info.subvendor = line; break; + case 6: dri_info.rev = line; break; + } + } + return true; + } + } + } + + return false; +} + +#elif defined(Q_OS_FREEBSD) + +static bool get_dri_device() { + + QStringList pci_info; + if (ReadPipe("sysctl -n hw.dri.0.name",pci_info)) { + dri_info.module = pci_info[0].mid(0, pci_info[0].find(0x20)); + } + return false; +} + +#else + +static bool get_dri_device() { return false; } + +#endif + +static void +mesa_hack(Display *dpy, int scrnum) +{ + static int attribs[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_DEPTH_SIZE, 1, + GLX_STENCIL_SIZE, 1, + GLX_ACCUM_RED_SIZE, 1, + GLX_ACCUM_GREEN_SIZE, 1, + GLX_ACCUM_BLUE_SIZE, 1, + GLX_ACCUM_ALPHA_SIZE, 1, + GLX_DOUBLEBUFFER, + None + }; + XVisualInfo *visinfo; + + visinfo = glXChooseVisual(dpy, scrnum, attribs); + if (visinfo) + XFree(visinfo); +} + + +static void +print_extension_list(const char *ext, QListViewItem *l1) +{ + int i, j; + + if (!ext || !ext[0]) + return; + QString qext = QString::fromLatin1(ext); + QListViewItem *l2 = NULL; + + i = j = 0; + while (1) { + if (ext[j] == ' ' || ext[j] == 0) { + /* found end of an extension name */ + const int len = j - i; + /* print the extension name between ext[i] and ext[j] */ + if (!l2) l2 = new QListViewItem(l1, qext.mid(i, len)); + else l2 = new QListViewItem(l1, l2, qext.mid(i, len)); + i=j; + if (ext[j] == 0) { + break; + } + else { + i++; + j++; + if (ext[j] == 0) + break; + } + } + j++; + } +} + +#if defined(GLX_ARB_get_proc_address) && defined(__GLXextFuncPtr) +extern "C" { + extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *); +} +#endif + +static void +print_limits(QListViewItem *l1, const char * glExtensions, bool GetProcAddress) +{ + /* TODO + GL_SAMPLE_BUFFERS + GL_SAMPLES + GL_COMPRESSED_TEXTURE_FORMATS +*/ + + if (!glExtensions) + return; + + struct token_name { + GLuint type; // count and flags, !!! count must be <=2 for now + GLenum token; + const QString name; + }; + + struct token_group { + int count; + int type; + const token_name *group; + const QString descr; + const char *ext; + }; + + QListViewItem *l2 = NULL, *l3 = NULL; +#if defined(PFNGLGETPROGRAMIVARBPROC) + PFNGLGETPROGRAMIVARBPROC kcm_glGetProgramivARB = NULL; +#endif + + #define KCMGL_FLOAT 128 + #define KCMGL_PROG 256 + #define KCMGL_COUNT_MASK(x) (x & 127) + #define KCMGL_SIZE(x) (sizeof(x)/sizeof(x[0])) + + const struct token_name various_limits[] = { + { 1, GL_MAX_LIGHTS, i18n("Max. number of light sources") }, + { 1, GL_MAX_CLIP_PLANES, i18n("Max. number of clipping planes") }, + { 1, GL_MAX_PIXEL_MAP_TABLE, i18n("Max. pixel map table size") }, + { 1, GL_MAX_LIST_NESTING, i18n("Max. display list nesting level") }, + { 1, GL_MAX_EVAL_ORDER, i18n("Max. evaluator order") }, + { 1, GL_MAX_ELEMENTS_VERTICES, i18n("Max. recommended vertex count") }, + { 1, GL_MAX_ELEMENTS_INDICES, i18n("Max. recommended index count") }, +#ifdef GL_QUERY_COUNTER_BITS + { 1, GL_QUERY_COUNTER_BITS, i18n("Occlusion query counter bits")}, +#endif +#ifdef GL_MAX_VERTEX_UNITS_ARB + { 1, GL_MAX_VERTEX_UNITS_ARB, i18n("Max. vertex blend matrices") }, +#endif +#ifdef GL_MAX_PALETTE_MATRICES_ARB + { 1, GL_MAX_PALETTE_MATRICES_ARB, i18n("Max. vertex blend matrix palette size") }, +#endif + {0,0,0} + }; + + const struct token_name texture_limits[] = { + { 1, GL_MAX_TEXTURE_SIZE, i18n("Max. texture size") }, + { 1, GL_MAX_TEXTURE_UNITS_ARB, i18n("Num. of texture units") }, + { 1, GL_MAX_3D_TEXTURE_SIZE, i18n("Max. 3D texture size") }, +#ifdef GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB + { 1, GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, i18n("Max. cube map texture size") }, +#endif +#ifdef GL_MAX_RECTANGLE_TEXTURE_SIZE_NV + { 1, GL_MAX_RECTANGLE_TEXTURE_SIZE_NV, i18n("Max. rectangular texture size") }, +#endif +#ifdef GL_MAX_TEXTURE_LOD_BIAS_EXT + { 1 | KCMGL_FLOAT, GL_MAX_TEXTURE_LOD_BIAS_EXT, i18n("Max. texture LOD bias") }, +#endif +#ifdef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT + { 1, GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, i18n("Max. anisotropy filtering level") }, +#endif +#ifdef GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB + { 1, GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB, i18n("Num. of compressed texture formats") }, +#endif + {0,0,0} + }; + + const struct token_name float_limits[] = { + { 2 | KCMGL_FLOAT, GL_ALIASED_POINT_SIZE_RANGE, "ALIASED_POINT_SIZE_RANGE" }, + { 2 | KCMGL_FLOAT, GL_SMOOTH_POINT_SIZE_RANGE, "SMOOTH_POINT_SIZE_RANGE" }, + { 1 | KCMGL_FLOAT, GL_SMOOTH_POINT_SIZE_GRANULARITY,"SMOOTH_POINT_SIZE_GRANULARITY"}, + { 2 | KCMGL_FLOAT, GL_ALIASED_LINE_WIDTH_RANGE, "ALIASED_LINE_WIDTH_RANGE" }, + { 2 | KCMGL_FLOAT, GL_SMOOTH_LINE_WIDTH_RANGE, "SMOOTH_LINE_WIDTH_RANGE" }, + { 1 | KCMGL_FLOAT, GL_SMOOTH_LINE_WIDTH_GRANULARITY,"SMOOTH_LINE_WIDTH_GRANULARITY"}, + {0,0,0} + }; + + const struct token_name stack_depth[] = { + { 1, GL_MAX_MODELVIEW_STACK_DEPTH, "MAX_MODELVIEW_STACK_DEPTH" }, + { 1, GL_MAX_PROJECTION_STACK_DEPTH, "MAX_PROJECTION_STACK_DEPTH" }, + { 1, GL_MAX_TEXTURE_STACK_DEPTH, "MAX_TEXTURE_STACK_DEPTH" }, + { 1, GL_MAX_NAME_STACK_DEPTH, "MAX_NAME_STACK_DEPTH" }, + { 1, GL_MAX_ATTRIB_STACK_DEPTH, "MAX_ATTRIB_STACK_DEPTH" }, + { 1, GL_MAX_CLIENT_ATTRIB_STACK_DEPTH, "MAX_CLIENT_ATTRIB_STACK_DEPTH" }, + { 1, GL_MAX_COLOR_MATRIX_STACK_DEPTH, "MAX_COLOR_MATRIX_STACK_DEPTH" }, +#ifdef GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB + { 1, GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB,"MAX_MATRIX_PALETTE_STACK_DEPTH"}, +#endif + {0,0,0} + }; + +#ifdef GL_ARB_fragment_program + const struct token_name arb_fp[] = { + { 1, GL_MAX_TEXTURE_COORDS_ARB, "MAX_TEXTURE_COORDS" }, + { 1, GL_MAX_TEXTURE_IMAGE_UNITS_ARB, "MAX_TEXTURE_IMAGE_UNITS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, "MAX_PROGRAM_ENV_PARAMETERS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, "MAX_PROGRAM_LOCAL_PARAMETERS" }, + { 1, GL_MAX_PROGRAM_MATRICES_ARB, "MAX_PROGRAM_MATRICES" }, + { 1, GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB, "MAX_PROGRAM_MATRIX_STACK_DEPTH" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_INSTRUCTIONS_ARB, "MAX_PROGRAM_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB, "MAX_PROGRAM_ALU_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, "MAX_PROGRAM_TEX_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB, "MAX_PROGRAM_TEX_INDIRECTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_TEMPORARIES_ARB, "MAX_PROGRAM_TEMPORARIES" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_PARAMETERS_ARB, "MAX_PROGRAM_PARAMETERS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_ATTRIBS_ARB, "MAX_PROGRAM_ATTRIBS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, "MAX_PROGRAM_NATIVE_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, "MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB, "MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB, "MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, "MAX_PROGRAM_NATIVE_TEMPORARIES" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, "MAX_PROGRAM_NATIVE_PARAMETERS" }, + { 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, "MAX_PROGRAM_NATIVE_ATTRIBS" }, + {0,0,0} + }; +#endif + +#ifdef GL_ARB_vertex_program + const struct token_name arb_vp[] = { +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB,"MAX_PROGRAM_ENV_PARAMETERS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB,"MAX_PROGRAM_LOCAL_PARAMETERS"}, +{ 1, GL_MAX_VERTEX_ATTRIBS_ARB, "MAX_VERTEX_ATTRIBS"}, +{ 1, GL_MAX_PROGRAM_MATRICES_ARB,"MAX_PROGRAM_MATRICES"}, +{ 1, GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB,"MAX_PROGRAM_MATRIX_STACK_DEPTH"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_INSTRUCTIONS_ARB,"MAX_PROGRAM_INSTRUCTIONS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_TEMPORARIES_ARB,"MAX_PROGRAM_TEMPORARIES"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_PARAMETERS_ARB,"MAX_PROGRAM_PARAMETERS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_ATTRIBS_ARB,"MAX_PROGRAM_ATTRIBS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB,"MAX_PROGRAM_ADDRESS_REGISTERS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB,"MAX_PROGRAM_NATIVE_INSTRUCTIONS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB,"MAX_PROGRAM_NATIVE_TEMPORARIES"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB,"MAX_PROGRAM_NATIVE_PARAMETERS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB,"MAX_PROGRAM_NATIVE_ATTRIBS"}, +{ 1 | KCMGL_PROG, GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB ,"MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS"}, +{0,0,0} +}; +#endif + +#ifdef GL_ARB_vertex_shader + const struct token_name arb_vs[] = { + { 1, GL_MAX_VERTEX_ATTRIBS_ARB,"MAX_VERTEX_ATTRIBS"}, + { 1, GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB,"MAX_VERTEX_UNIFORM_COMPONENTS"}, + { 1, GL_MAX_VARYING_FLOATS_ARB,"MAX_VARYING_FLOATS"}, + { 1, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB,"MAX_COMBINED_TEXTURE_IMAGE_UNITS"}, + { 1, GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB,"MAX_VERTEX_TEXTURE_IMAGE_UNITS"}, + { 1, GL_MAX_TEXTURE_IMAGE_UNITS_ARB,"MAX_TEXTURE_IMAGE_UNITS"}, + { 1, GL_MAX_TEXTURE_COORDS_ARB,"MAX_TEXTURE_COORDS"}, + {0,0,0} + }; +#endif + +#ifdef GL_ARB_fragment_shader + const struct token_name arb_fs[] = { + { 1, GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB,"MAX_FRAGMENT_UNIFORM_COMPONENTS"}, + { 1, GL_MAX_TEXTURE_IMAGE_UNITS_ARB,"MAX_TEXTURE_IMAGE_UNITS"}, + { 1, GL_MAX_TEXTURE_COORDS_ARB,"MAX_TEXTURE_COORDS"}, + {0,0,0} + }; +#endif + + const struct token_name frame_buffer_props[] = { + { 2, GL_MAX_VIEWPORT_DIMS, i18n("Max. viewport dimensions") }, + { 1, GL_SUBPIXEL_BITS, i18n("Subpixel bits") }, + { 1, GL_AUX_BUFFERS, i18n("Aux. buffers")}, + {0,0,0} + }; + + const struct token_group groups[] = + { + {KCMGL_SIZE(frame_buffer_props), 0, frame_buffer_props, i18n("Frame buffer properties"), NULL}, + {KCMGL_SIZE(various_limits), 0, texture_limits, i18n("Texturing"), NULL}, + {KCMGL_SIZE(various_limits), 0, various_limits, i18n("Various limits"), NULL}, + {KCMGL_SIZE(float_limits), 0, float_limits, i18n("Points and lines"), NULL}, + {KCMGL_SIZE(stack_depth), 0, stack_depth, i18n("Stack depth limits"), NULL}, +#ifdef GL_ARB_vertex_program + {KCMGL_SIZE(arb_vp), GL_VERTEX_PROGRAM_ARB, arb_vp, "ARB_vertex_program", "GL_ARB_vertex_program"}, +#endif +#ifdef GL_ARB_fragment_program + {KCMGL_SIZE(arb_fp), GL_FRAGMENT_PROGRAM_ARB, arb_fp, "ARB_fragment_program", "GL_ARB_fragment_program"}, +#endif +#ifdef GL_ARB_vertex_shader + {KCMGL_SIZE(arb_vs), 0, arb_vs, "ARB_vertex_shader", "GL_ARB_vertex_shader"}, +#endif +#ifdef GL_ARB_fragment_shader + {KCMGL_SIZE(arb_fs), 0, arb_fs, "ARB_fragment_shader", "GL_ARB_fragment_shader"}, +#endif + }; + +#if defined(GLX_ARB_get_proc_address) && defined(PFNGLGETPROGRAMIVARBPROC) + if (GetProcAddress && strstr(glExtensions, "GL_ARB_vertex_program")) + kcm_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC) glXGetProcAddressARB((const GLubyte *)"glGetProgramivARB"); +#endif + + for (uint i = 0; i<KCMGL_SIZE(groups); i++) { + if (groups[i].ext && !strstr(glExtensions, groups[i].ext)) continue; + + if (l2) l2 = new QListViewItem(l1, l2, groups[i].descr); + else l2 = new QListViewItem(l1, groups[i].descr); + l3 = NULL; + const struct token_name *cur_token; + for (cur_token = groups[i].group; cur_token->type; cur_token++) { + + bool tfloat = cur_token->type & KCMGL_FLOAT; + int count = KCMGL_COUNT_MASK(cur_token->type); + GLint max[2]={0,0}; + GLfloat fmax[2]={0.0,0.0}; + +#if defined(PFNGLGETPROGRAMIVARBPROC) && defined(GL_ARB_vertex_program) + bool tprog = cur_token->type & KCMGL_PROG; + if (tprog && kcm_glGetProgramivARB) + kcm_glGetProgramivARB(groups[i].type, cur_token->token, max); + else +#endif + if (tfloat) glGetFloatv(cur_token->token, fmax); + else glGetIntegerv(cur_token->token, max); + + if (glGetError() == GL_NONE) { + QString s; + if (!tfloat && count == 1) s = QString::number(max[0]); else + if (!tfloat && count == 2) s = QString("%1, %2").arg(max[0]).arg(max[1]); else + if (tfloat && count == 2) s = QString("%1 - %2").arg(fmax[0],0,'f',6).arg(fmax[1],0,'f',6); else + if (tfloat && count == 1) s = QString::number(fmax[0],'f',6); + if (l3) l3 = new QListViewItem(l2, l3, cur_token->name, s); + else l3 = new QListViewItem(l2, cur_token->name, s); + + } + } + + } +} + + +static QListViewItem *print_screen_info(QListViewItem *l1, QListViewItem *after) +{ + QListViewItem *l2 = NULL, *l3 = NULL; + + if (after) l1= new QListViewItem(l1,after,IsDirect ? i18n("Direct Rendering") : i18n("Indirect Rendering")); + else l1= new QListViewItem(l1,IsDirect ? i18n("Direct Rendering") : i18n("Indirect Rendering")); + if (IsDirect) + if (get_dri_device()) { + l2 = new QListViewItem(l1, i18n("3D Accelerator")); + l2->setOpen(true); + l3 = new QListViewItem(l2, l3, i18n("Vendor"), dri_info.vendor); + l3 = new QListViewItem(l2, l3, i18n("Device"), dri_info.device); + l3 = new QListViewItem(l2, l3, i18n("Subvendor"), dri_info.subvendor); + l3 = new QListViewItem(l2, l3, i18n("Revision"), dri_info.rev); + } + else l2=new QListViewItem(l1, l2, i18n("3D Accelerator"),i18n("unknown")); + if (l2) l2 = new QListViewItem(l1, l2, i18n("Driver")); + else l2 = new QListViewItem(l1, i18n("Driver")); + l2->setOpen(true); + + l3 = new QListViewItem(l2, i18n("Vendor"),gli.glVendor); + l3 = new QListViewItem(l2, l3, i18n("Renderer"), gli.glRenderer); + l3 = new QListViewItem(l2, l3, i18n("OpenGL version"), gli.glVersion); + + if (IsDirect) { + if (!dri_info.module) dri_info.module = i18n("unknown"); + l3 = new QListViewItem(l2, l3, i18n("Kernel module"), dri_info.module); + } + + l3 = new QListViewItem(l2, l3, i18n("OpenGL extensions")); + print_extension_list(gli.glExtensions,l3); + + l3 = new QListViewItem(l2, l3, i18n("Implementation specific")); + print_limits(l3, gli.glExtensions, strstr(gli.clientExtensions, "GLX_ARB_get_proc_address") != NULL); + + return l1; +} + +void print_glx_glu(QListViewItem *l1, QListViewItem *l2) +{ + QListViewItem *l3; + + l2=new QListViewItem(l1, l2, i18n("GLX")); + l3 = new QListViewItem(l2, i18n("server GLX vendor"),gli.serverVendor); + l3 = new QListViewItem(l2, l3, i18n("server GLX version"),gli.serverVersion); + l3 = new QListViewItem(l2, l3, i18n("server GLX extensions")); + print_extension_list(gli.serverExtensions,l3); + + l3 = new QListViewItem(l2, l3, i18n("client GLX vendor"),gli.clientVendor); + l3 = new QListViewItem(l2, l3, i18n("client GLX version"),gli.clientVersion); + l3 = new QListViewItem(l2, l3, i18n("client GLX extensions")); + print_extension_list(gli.clientExtensions,l3); + l3 = new QListViewItem(l2, l3, i18n("GLX extensions")); + print_extension_list(gli.glxExtensions,l3); + +#ifdef KCMGL_DO_GLU + l2 = new QListViewItem(l1, l2, i18n("GLU")); + l3 = new QListViewItem(l2, i18n("GLU version"), gli.gluVersion); + l3 = new QListViewItem(l2, l3, i18n("GLU extensions")); + print_extension_list(gli.gluExtensions,l3); +#endif + +} + +static QListViewItem *get_gl_info(Display *dpy, int scrnum, Bool allowDirect,QListViewItem *l1, QListViewItem *after) +{ + Window win; + int attribSingle[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + None }; + int attribDouble[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_DOUBLEBUFFER, + None }; + + XSetWindowAttributes attr; + unsigned long mask; + Window root; + GLXContext ctx; + XVisualInfo *visinfo; + int width = 100, height = 100; + QListViewItem *result = after; + + root = RootWindow(dpy, scrnum); + + visinfo = glXChooseVisual(dpy, scrnum, attribSingle); + if (!visinfo) { + visinfo = glXChooseVisual(dpy, scrnum, attribDouble); + if (!visinfo) { + kdDebug() << "Error: couldn't find RGB GLX visual\n"; + return result; + } + } + + attr.background_pixel = 0; + attr.border_pixel = 0; + attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone); + attr.event_mask = StructureNotifyMask | ExposureMask; + mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; + win = XCreateWindow(dpy, root, 0, 0, width, height, + 0, visinfo->depth, InputOutput, + visinfo->visual, mask, &attr); + + ctx = glXCreateContext( dpy, visinfo, NULL, allowDirect ); + if (!ctx) { + kdDebug() << "Error: glXCreateContext failed\n"; + XDestroyWindow(dpy, win); + return result; + } + + if (glXMakeCurrent(dpy, win, ctx)) { + gli.serverVendor = glXQueryServerString(dpy, scrnum, GLX_VENDOR); + gli.serverVersion = glXQueryServerString(dpy, scrnum, GLX_VERSION); + gli.serverExtensions = glXQueryServerString(dpy, scrnum, GLX_EXTENSIONS); + gli.clientVendor = glXGetClientString(dpy, GLX_VENDOR); + gli.clientVersion = glXGetClientString(dpy, GLX_VERSION); + gli.clientExtensions = glXGetClientString(dpy, GLX_EXTENSIONS); + gli.glxExtensions = glXQueryExtensionsString(dpy, scrnum); + gli.glVendor = (const char *) glGetString(GL_VENDOR); + gli.glRenderer = (const char *) glGetString(GL_RENDERER); + gli.glVersion = (const char *) glGetString(GL_VERSION); + gli.glExtensions = (const char *) glGetString(GL_EXTENSIONS); + gli.displayName = NULL; +#ifdef KCMGL_DO_GLU + gli.gluVersion = (const char *) gluGetString(GLU_VERSION); + gli.gluExtensions = (const char *) gluGetString(GLU_EXTENSIONS); +#endif + IsDirect = glXIsDirect(dpy, ctx); + + result = print_screen_info(l1, after); + } + else { + kdDebug() << "Error: glXMakeCurrent failed\n"; + } + + glXDestroyContext(dpy, ctx); + XDestroyWindow(dpy, win); + return result; + +} + + +static bool GetInfo_OpenGL_Generic( QListView *lBox ) +{ + QListViewItem *l1, *l2 = NULL; + + char *displayName = NULL; + Display *dpy; + int numScreens, scrnum; + + dpy = XOpenDisplay(displayName); + if (!dpy) { +// kdDebug() << "Error: unable to open display " << displayName << endl; + return false; + } + + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + + l1 = new QListViewItem(lBox, i18n("Name of the Display"), DisplayString(dpy)); + l1->setOpen(true); + l1->setSelectable(false); + l1->setExpandable(false); + + numScreens = ScreenCount(dpy); + + scrnum = 0; +#ifdef KCMGL_MANY_SCREENS + for (; scrnum < numScreens; scrnum++) +#endif + { + mesa_hack(dpy, scrnum); + + l2 = get_gl_info(dpy, scrnum, true, l1, l2); + if (l2) l2->setOpen(true); + + if (IsDirect) l2 = get_gl_info(dpy, scrnum, false, l1, l2); + +// TODO print_visual_info(dpy, scrnum, mode); + } + if (l2) + print_glx_glu(l1, l2); + else + KMessageBox::error(0, i18n("Could not initialize OpenGL")); + + XCloseDisplay(dpy); + return true; + } + +bool GetInfo_OpenGL(QListView * lBox) +{ + return GetInfo_OpenGL_Generic(lBox); +} + +#endif /* INFO_OPENGL_AVAILABLE */ + diff --git a/kcontrol/info/opengl.desktop b/kcontrol/info/opengl.desktop new file mode 100644 index 000000000..07d6b76ce --- /dev/null +++ b/kcontrol/info/opengl.desktop @@ -0,0 +1,147 @@ +[Desktop Entry] +Exec=kcmshell opengl +Icon=kcmopengl +Type=Application +DocPath=kinfocenter/opengl/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=opengl +X-KDE-ParentApp=kinfocenter + +Name=OpenGL +Name[bn]=ওপেন-জি-এল +Name[hi]=ओपन-जीएल +Name[ne]=खुला GL +Name[rw]=GufunguraGL +Name[ta]=ஓபன் ஜிஎல் +Name[te]=ఓపెన్ జిఎల్ + +Comment=OpenGL information +Comment[af]=OpenGL informasie +Comment[ar]=معلومات OpenGL +Comment[az]=OpenGL mə'lumatı +Comment[be]=Інфармацыя аб OpenGL +Comment[bg]=Информация за OpenGL +Comment[bn]=ওপেন-জি-এল সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn OpenGL +Comment[bs]=Informacije o OpenGL-u +Comment[ca]=Informació OpenGL +Comment[cs]=Informace o OpenGL +Comment[csb]=Wëdowiédzô ò OpenGL +Comment[da]=OpenGL-information +Comment[de]=Informationen zu OpenGL +Comment[el]=Πληροφορίες OpenGL +Comment[eo]=OpenGLa informo +Comment[es]=Información OpenGL +Comment[et]=OpenGL info +Comment[eu]=OpenGL informazioa +Comment[fa]=اطلاعات OpenGL +Comment[fi]=OpenGL-tiedot +Comment[fr]=Informations OpenGL +Comment[fy]=OpenGL-ynformaasje +Comment[ga]=Eolas faoi OpenGL +Comment[gl]=Información de OpenGL +Comment[he]=מידע אודות OpenGL +Comment[hi]=ओपन-जीएल जानकारी +Comment[hr]=OpenGL podaci +Comment[hu]=OpenGL-jellemzők +Comment[id]=Informasi OpenGL +Comment[is]=OpenGL upplýsingar +Comment[it]=Informazioni sull'OpenGL +Comment[ja]=OpenGL 情報 +Comment[ka]=ცნობები OpenGL -ს შესახებ +Comment[kk]=OpenGL мәліметі +Comment[km]=ព័ត៌មាន OpenGL +Comment[ko]=OpenGL 정보 +Comment[lt]=OpenGL informacija +Comment[lv]=OpenGL informācija +Comment[mk]=Информации за OpenGL +Comment[ms]=Maklumat OpenGL +Comment[mt]=Informazzjoni dwar OpenGL +Comment[nb]=OpenGL-informasjon +Comment[nds]=OpenGL-Informatschoon +Comment[ne]=खुला GL सूचना +Comment[nl]=OpenGL-informatie +Comment[nn]=OpenGL-informasjon +Comment[pa]=OpenGL ਜਾਣਕਾਰੀ +Comment[pl]=Informacje OpenGL +Comment[pt]=Informação sobre OpenGL +Comment[pt_BR]=Informações sobre OpenGL +Comment[ro]=Informații OpenGL +Comment[ru]=Сведения о OpenGL +Comment[rw]= Ibisobanuro GufunguraGL +Comment[se]=OpenGL-diehtu +Comment[sk]=Informácie o OpenGL +Comment[sl]=Informacije o OpenGL +Comment[sr]=Информације о OpenGL-у +Comment[sr@Latn]=Informacije o OpenGL-u +Comment[sv]=Information om OpenGL +Comment[ta]=ஓபன் ஜிஎல் தகவல் +Comment[te]=ఓపెన్ జిఎల్ సమాచారం +Comment[tg]=КушоданGL ахбор +Comment[th]=ข้อมูล OpenGL +Comment[tr]=OpenGL Bilgisi +Comment[tt]=OpenGL turında +Comment[uk]=Інформація про OpenGL +Comment[uz]=OpenGL haqida maʼlumot +Comment[uz@cyrillic]=OpenGL ҳақида маълумот +Comment[vi]=Thông tin về OpenGL +Comment[wa]=Informåcion so OpenGL +Comment[zh_CN]=OpenGL 信息 +Comment[zh_TW]=OpenGL 資訊 + +Keywords=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display +Keywords[az]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display, Displey, Avadanlıq,Qrafika +Keywords[be]=Відэакарта,паскарэнне,графіка,сервер X,дысплей,экран,OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display +Keywords[bg]=видеокарта, хардуер,екран, ускорение, графика, OpenGL, DRI, GLX, 3D, VideoCard, Hardware Acceleration, Graphics, X, X11, Xserver, X-Server, XFree86, Display +Keywords[bs]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Grafika +Keywords[ca]=OpenGL,DRI,GLX,3D,Targeta de vídeo,Hardware Acceleració,Gràfics,X,X11,Xserver,Servidor X,XFree86,Pantalla +Keywords[cs]=OpenGL,DRI,GLX,3D,videokarta,akcelerace,grafika,X,X11,Xserver,X-Server,XFree86,Display +Keywords[csb]=OpenGL,DRI,GLX,3D,graficznô karta,grafika,X,X11,Xserver,X-Server,XFree86,ekran +Keywords[da]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Grafik,X,X11,Xserver,X-Server,XFree86,Skærm +Keywords[el]=OpenGL,DRI,GLX,3D,Κάρτα Γραφικών,Υλικό Επιτάχυνση,Γραφικά,X,X11,Xserver,X-Server,XFree86,Οθόνη +Keywords[eo]=OpenGL,DRI,GLX,3D,VideoCard,Hardware akcelo,grafikoj,X,X11,Xserver,X-Server,XFree86,ekrano +Keywords[es]=OpenGL,DRI,GLX,3D,Tarjeta, Grafica,Hardware Aceleradora,Gráficos,X,X11,Xserver,X-Server,XFree86,Monitor +Keywords[et]=OpenGL,DRI,GLX,3D,Videokaart,Riistvaraline kiirendus,Graafika,X,X11,Xserver,X-Server,XFree86,Kuva +Keywords[fa]=OpenGL، DRI، GLX، سه بعدی، کارت ویدیو، شتابدهی سختافزار، نگارهای ، X، X11، Xserver، کارساز، XFree86، صفحه نمایش +Keywords[fr]=OpenGL,DRI,GLX,3D,carte graphique,carte vidéo,accélération matérielle,graphismes,X,X11,serveur X,XServer,XFree86,affichage +Keywords[fy]=OpenGL,DRI,GLX,3D,grafyske kaart,hurd guod -fersnelling,grafysk,graphics,X,X11,Xserver,X-Server,XFree86,display,byldskerm +Keywords[ga]=OpenGL,DRI,GLX,3D,FísChárta,Luasú Crua-Earraí,Grafaic,X,X11,Freastalaí-X,XFree86,Scáileán +Keywords[gl]=OpenGL,DRI,GLX,3D,Tarxeta de Vídeo,Aceleración por Hardware,Graficos,X,X11,Xserver,X-Server,XFree86,Display,Pantalla +Keywords[he]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration, Graphics,X,X11,Xserver,X-Server,XFree86,Display,האצה, כרטיס, כרטיס מסך, מסך, תצוגה +Keywords[hi]=ओपन-जीएल,डीआरआई,जीएलएक्स,3डी,वीडियो-कार्ड,हार्डवेयर एस्सेलरेशन,ग्राफिक्स,एक्स,एक्स11,एक्स-सर्वर,एक्ससर्वर,एक्सफ्री86,प्रदर्शक +Keywords[hr]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Video kartica,Grafička kartica,Hradversko ubrzavanje,Grafika,X poslužitelj,Zaslon +Keywords[hu]=OpenGL,DRI,GLX,3D,videokártya,hardveres gyorsítás,grafika,X,X11,Xserver,X-Server,XFree86,képernyő +Keywords[is]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,vélbúnaðarhröðun,Graphics,grafík,X,X11,Xserver,Xþjónn, X-Server,X-þjónn,XFree86,Display,skjár +Keywords[it]=OpenGL,DRI,GLX,3D,SchedaVideo,Video,Accelerazione Hardware,Grafica,X,X11,Xserver,X-Server,XFree86,Display,Server X +Keywords[ka]=OpenGL,DRI,GLX,3D,ვიდეოდაფა,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display +Keywords[km]=OpenGL,DRI,GLX,3D,ប័ណ្ណវីដេអូ,បន្ទះបង្កើនល្បឿនផ្នែករឹង,Graphics,X,X11,Xserver,X-Server,XFree86,បង្ហាញ +Keywords[lt]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Video plokštė,aparatūros greitinimas,grafika +Keywords[lv]=OpenGL,DRI,GLX,3D,VideoKarte,Dzelžu paātrināšana,Grafika,X,X11,Xserveris,X-Serveris,XFree86,Ekrāns +Keywords[mk]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,Видео-картичка,Хардверско забрзување,Графика,екран,приказ +Keywords[nb]=OpenGL,DRI,GLX,3D,skjermkort,maskinvareakselerasjon,bilde,X,X11,X-tenar,XFree86,skjerm +Keywords[nds]=OpenGL,DRI,GLX,3D,Videokort,Hardware Acceleration,Grafik,X,X11,Xserver,X-Server,XFree86,Display,Dorstellen,Beslünigen +Keywords[ne]=खुला GL, DRI, GLX, 3D,भिडियो कार्ड, हार्डवेयर गतिवर्धन, ग्राफिक्स, X, X11, Xसर्भर, X-सर्भर, X स्वतन्त्र 86, प्रदर्शन गर्नुहोस् +Keywords[nl]=OpenGL,DRI,GLX,3D,videokaart,hardware-acceleratie,grafisch,graphics,X,X11,Xserver,X-Server,XFree86,display,beeldscherm +Keywords[nn]=OpenGL,DRI,GLX,3D,skjermkort,maskinvareakselerasjon,grafikk,X,X11,X-tenar,XFree86,skjerm +Keywords[pa]=OpenGL,DRI,GLX,3D,ਵੀਡਿਓਕਾਰਡ, ਹਾਰਡਵੇਅਰ ਪਰਵੇਸ਼ਕ,ਗਰਾਫਿਕਸ,X,X11,Xserver,X-Server,XFree86,ਦਰਿਸ਼ +Keywords[pl]=OpenGL,DRI,GLX,3D,karta graficzna,grafika,X,X11,Xserver,X-Server,XFree86,ekran +Keywords[pt]=OpenGL,DRI,GLX,3D,Placa Vídeo,Aceleração por Hardware,Gráficos,X,X11,Servidor X,XFree86,Ecrã +Keywords[pt_BR]=OpenGL,DRI,GLX,3D,Placa de Vídeo,Aceleração de Hardware,Gráficos,X,X11,Servidor X,X Server,XFree86,Display +Keywords[ro]=OpenGL,DRI,GLX,3D,placă video,accelerare hardware,grafică,X,X11,Xserver,X-Server,XFree86,monitor +Keywords[rw]=GufunguraGL,DRI,GLX,3D,IkaritaVidewo,Ukwihutisha Imashini,Ibishushanyo,X,X11,Xseriveri,X-Seriveri,XFree86,Kwerekana +Keywords[sl]=OpenGL,DRI,GLX,3D,Strojna pospešitev,Grafika,X,X11,Xserver,X-Server,X-stežnik,X,XFree86,Zaslon +Keywords[sr]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,видео картица,хардверско убрзање,графика +Keywords[sr@Latn]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,video kartica,hardversko ubrzanje,grafika +Keywords[sv]=OpenGL,DRI,GLX,3D,videokort,hårdvaruacceleration,grafik,X,X11,Xserver,X-server,Xfree86,skärm +Keywords[ta]=ஓபன் ஜிஎல்,டிஆரை,ஜிஎல்X,முப்பரிமாணம்,வீடியோஅட்டை,வன்பொருள் முடுக்கம்,சித்திரங்கள்,X,X11,Xசேவகன்,X-சேவகன்,XFree86,காட்டு +Keywords[th]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,จอแสดงผล +Keywords[tr]=OpenGL,DRI,GLX,3D,VideoCard,Video kartı,Donanım Hızlandırma,Grafik,X,X11,Xserver,X-Server,X-Sunucu,Xsunucu,XFree86,Görüntü +Keywords[uk]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,відео карта,3D акселерація,графіка,X сервер,монітор +Keywords[vi]=OpenGL,DRI,GLX,3D,Bo mạch Video,Tăng tốc Phần cứng,Đồ hoạ,X,X11,Trình phục vụ Xserver,Trình phục vụ - X,XFree86,Hiển thị +Keywords[wa]=OpenGL,DRI,GLX,3D,VideoCard,cåte videyo,Hardware Acceleration,Graphike,X,X11,Xserver,sierveu X,X-Server,XFree86,Display,håynaedje +Keywords[zh_CN]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,显卡,硬件加速,图形,X 服务器,显示 +Keywords[zh_TW]=OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,顯示卡,硬體加速,圖形,顯示 + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/partitions.desktop b/kcontrol/info/partitions.desktop new file mode 100644 index 000000000..89851a34e --- /dev/null +++ b/kcontrol/info/partitions.desktop @@ -0,0 +1,246 @@ +[Desktop Entry] +Exec=kcmshell partitions +Icon=kcmpartitions +Type=Application +DocPath=kinfocenter/partitions/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=partitions +X-KDE-ParentApp=kinfocenter + + +Name=Partitions +Name[af]=Partisies +Name[ar]=أقسام القرص الصلب +Name[az]=Sabit Disk Bölmələri +Name[be]=Раздзелы +Name[bg]=Дялове +Name[bn]=পার্টিশন +Name[br]=Parzhadurioù +Name[bs]=Particije +Name[ca]=Particions +Name[cs]=Oddíly disků +Name[csb]=Particëje +Name[cy]=Rhaniadau +Name[da]=Partitioner +Name[de]=Partitionen +Name[el]=Κατατμήσεις +Name[eo]=Subdiskoj +Name[es]=Particiones +Name[et]=Partitsioonid +Name[eu]=Zatiketak +Name[fa]=افرازها +Name[fi]=Osiot +Name[fy]=Partities +Name[ga]=Deighiltí +Name[gl]=Particións +Name[he]=מחיצות +Name[hi]=पार्टीशन्स +Name[hr]=Particije +Name[hu]=Partíciók +Name[id]=Partisi +Name[is]=Disksneiðar +Name[it]=Partizioni +Name[ja]=パーティション +Name[ka]=განაყოფები +Name[kk]=Бөлімдері +Name[km]=ភាគ +Name[ko]=파티션 +Name[lo]=ພາຕີຊັນ +Name[lt]=Skirsniai +Name[lv]=Partīcijas +Name[mk]=Партиции +Name[mn]=Хуваалтууд +Name[ms]=Petak +Name[mt]=Partitizzjonijiet +Name[nb]=Partisjoner +Name[nds]=Partitschonen +Name[ne]=विभाजन +Name[nl]=Partities +Name[nn]=Partisjonar +Name[nso]=Dikaroganyo +Name[oc]=Particions +Name[pa]=ਭਾਗ +Name[pl]=Partycje +Name[pt]=Partições +Name[pt_BR]=Partições +Name[ro]=Partiții +Name[ru]=Разделы +Name[rw]=Ibicedisiki +Name[se]=Partišuvnnat +Name[sk]=Diskové oddiely +Name[sl]=Particije +Name[sr]=Партиције +Name[sr@Latn]=Particije +Name[sv]=Partitioner +Name[ta]=பகுதிகள்(பங்கீடுகள்) +Name[te]=విభజనలు +Name[tg]=Тақсимоти диски сахт +Name[th]=พาร์ติชัน +Name[tr]=Disk Bölümleri +Name[tt]=Bülemnär +Name[uk]=Розділи диску +Name[uz]=Diskning qismlari +Name[uz@cyrillic]=Дискнинг қисмлари +Name[vi]=Phân vùng +Name[wa]=Pårticions +Name[xh]=Ulwahlulo ngokwamaqhekeza +Name[zh_CN]=分区 +Name[zh_TW]=磁碟分割區 +Name[zu]=Izahluko + +Comment=Partition information +Comment[af]=Partisie informasie +Comment[ar]=معلومات أقسام القرص الصلب +Comment[az]=Bölmələr Haqqında Mə'lumat +Comment[be]=Інфармацыя аб раздзелах +Comment[bg]=Информация за дяловете и дисковете +Comment[bn]=পার্টিশন সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar parzhadur +Comment[bs]=Informacije o particijama +Comment[ca]=Informació de particions +Comment[cs]=Informace o oddílech disků +Comment[csb]=Wëdowiédzô ò particëjach +Comment[cy]=Gwybodaeth rhaniad +Comment[da]=Information om partitionerne +Comment[de]=Informationen zur Partitionierung +Comment[el]=Πληροφορίες για τις κατατμήσεις +Comment[eo]=Informo pri subdiskoj +Comment[es]=Información sobre las particiones +Comment[et]=Partitsioonide info +Comment[eu]=Zatiketei buruzko informazioa +Comment[fa]=اطلاعات افرازها +Comment[fi]=Osiotiedot +Comment[fr]=Informations sur les partitions +Comment[fy]=Partitie-ynformaasje +Comment[gl]=Información das particións +Comment[he]=מידע על מחיצות +Comment[hi]=पार्टीशन जानकारी +Comment[hr]=Podaci o particijama +Comment[hu]=A partíciók adatai +Comment[id]=Informasi partisi +Comment[is]=Upplýsingar um skipulag disksneiða +Comment[it]=Informazioni sulle partizioni +Comment[ja]=パーティションの情報 +Comment[ka]=ცნობები გამოყენებული რესურსების შესახებ +Comment[kk]=Диск бөлімдер мәліметі +Comment[km]=ព័ត៌មានភាគ +Comment[ko]=파티션 정보 +Comment[lo]=ຂໍ້ມູນພາຕີຊັນ +Comment[lt]=Skirsnių informacija +Comment[lv]=Partīciju informācija +Comment[mk]=Информации за партициите +Comment[mn]=Хуваалтын мэдээлэл +Comment[ms]=Maklumat petak +Comment[mt]=Informazzjoni dwar partizzjonijiet +Comment[nb]=Partisjoninformasjon +Comment[nds]=Informatschoon över de Partitschonen +Comment[ne]=विभाजन सूचना +Comment[nl]=Partitie-informatie +Comment[nn]=Partisjonsinformasjon +Comment[nso]=Tshedimoso ya Dikaroganyo +Comment[oc]=Informacion de particions +Comment[pa]=ਭਾਗ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o partycjach dyskowych +Comment[pt]=Informação sobre as partições +Comment[pt_BR]=Informações sobre partições +Comment[ro]=Informații despre partiții +Comment[ru]=Сведения о использовании разделов +Comment[rw]=Ibisobanuro Igicedisiki +Comment[se]=Partišuvdnadiehtu +Comment[sk]=Informácie o diskových oddieloch +Comment[sl]=Podatki o particijah +Comment[sr]=Информације о партицијама +Comment[sr@Latn]=Informacije o particijama +Comment[sv]=Partitionsinformation +Comment[ta]=பகுதி தகவல் +Comment[te]=విభజనల సమాచారం +Comment[tg]=Иттилооти тақсимот +Comment[th]=ข้อมูลพาร์ติชัน +Comment[tr]=Bölümleme hakkında bilgi +Comment[tt]=Bülemnär turında +Comment[uk]=Інформація щодо розділів диску +Comment[uz]=Diskning qismlari haqida maʼlumot +Comment[uz@cyrillic]=Дискнинг қисмлари ҳақида маълумот +Comment[ven]=Mafhungo au kovhekana +Comment[vi]=Thông tin về phân vùng +Comment[wa]=Informåcion sol pårtixhaedje del deure plake +Comment[xh]=Ulwazi lowahlulelwano ngokwamaqhekeza +Comment[zh_CN]=分区信息 +Comment[zh_TW]=磁碟分割區資訊 +Comment[zu]=Ulwazi Lokwehlukanisa + +Keywords=Partitions,Harddrive,HD,System Information +Keywords[af]=Partitions,Harddrive,HD,System Informasie +Keywords[ar]=Partitions,Harddrive,HD,System Information,القرص الصلب,الأقراص الصلبة,معلومات النظام +Keywords[az]=Partitions,Harddrive,HD,System Information,Bölmələr,Sabit disk,HD,Sistem Haqqında Mə'lumat +Keywords[be]=Раздзелы,Жорсткі дыск,Сістэмная інфармацыя,Partitions,Harddrive,HD,System Information +Keywords[bg]=информация, система, системна, дял, дялове, диск, твърд, хард, Partitions, Harddrive, HD, System Information +Keywords[br]=Parzhadur,pladenn galet,HD,titouroù reizhiad +Keywords[bs]=Partitions,Harddrive,HD,System Information,Particije,hard disk,informacije o sustavu +Keywords[ca]=Particions,disc dur,HD,Informació del sistema +Keywords[cs]=Oddíly disku,Pevný disk,HD,Informace o systému +Keywords[csb]=particëje,cwiardi disk,HD,wëdowiédzô ò systemie +Keywords[cy]=Rhaniadau,Disg Caled,DC,Gwybodaeth Cysawd +Keywords[da]=Partitioner,Harddisk,HD,Systeminformation +Keywords[de]=Partitionen,Festplatten,Laufwerke,HD,Systeminformation +Keywords[el]=Κατατμήσεις,Σκληρός Δίσκος,HD,Πληροφορίες συστήματος +Keywords[eo]=subdisko,disko,sistemo,operaciumo,informo +Keywords[es]=Particiones,Disco duro,Información del sistema +Keywords[et]=Partitsioonid,kõvaketas,HD,Süsteemi info +Keywords[eu]=Zatiketak,Disko gogorra,HD,Sistemaren informazioa +Keywords[fa]=افرازها، گردانندۀ سخت ،HD ،اطلاعات سیستم +Keywords[fi]=Osiot,Kiintolevy,HD,Järjestelmätiedot +Keywords[fr]=partitions,disque dur,HD,DD,informations système +Keywords[fy]=partities,Hardrive, HD,systeemynformaasje,fêste skiif +Keywords[ga]=Deighiltí,Tiomántán Crua,HD,Eolas faoin Chóras +Keywords[gl]=Particións,Disco duro,HD,Información do Sistema +Keywords[he]=מחיצות,כונן קשיח,מידע מערכת, Partitions,Harddrive,HD,System Information +Keywords[hi]=पार्टीशन्स,हार्डड्राइव,एचडी,तंत्र जानकारी +Keywords[hr]=Partitions,Harddrive,HD,System Information,Particije,hard disk,Podaci o sustavu,Tvrdi disk +Keywords[hu]=partíciók,merevlemez,HD,rendszerinformáció +Keywords[id]=Partisi,Harddrive,HD,Informasi Sistem +Keywords[is]=Sneiðar,Disksneiðar,Harðir diskar,Harður diskur,kerfi,upplýsingar +Keywords[it]=partizioni,disco rigido,hard disk,HD,informazioni sul sistema +Keywords[ja]=パーティション,ハードドライブ,HD,システムの情報 +Keywords[km]=ភាគ,ដ្រាយរឹង,HD,ព័ត៌មានប្រព័ន្ធ +Keywords[lo]=ພາຕີຊັນ,ຮາດໄດຣຟ์,HD,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=Skirsniai,Kietasis diskas,HD,Sistemos Informacija +Keywords[lv]=Partīcijas,CietaisDisks,HD,Sistēmas Informācija +Keywords[mk]=Partitions,Harddrive,HD,System Information,Партиции,Тврд диск,Информации за системот +Keywords[mn]=Хуваалтууд,Хатуу диск,Диск хөтлөгч,HD,Системийн мэдээлэл +Keywords[nb]=Partisjoner,Platelager,Harddisk,HD,Systeminformasjon +Keywords[nds]=Partitschonen,Fastplaat,HD,Systeeminformatschoon +Keywords[ne]=विभाजन, हार्ड ड्राइभ,HD, प्रणाली सूचना +Keywords[nl]=partities,harddrive,HD,systeeminformatie,harde schijf +Keywords[nn]=partisjonar,harddisk,HD,systeminformasjon +Keywords[nso]=Dikaroganyo,Kotlelo ye Bothata,HD,Tshedimoso ya System +Keywords[oc]=Particions,disc dur,HD,Informacion dèu sistemo +Keywords[pa]=Partitions,Harddrive,HD,ਸਿਸਟਮ ਜਾਣਕਾਰੀ,ਭਾਗ,ਹਾਰਡ ਡਿਸਕ +Keywords[pl]=partycje,twardy dysk,HD,informacja o systemie +Keywords[pt]=partições,disco rígido,HD,informações do sistema +Keywords[pt_BR]=Partições,Disco Rígido,Informações de sistema +Keywords[ro]=partiții,harddisk,hard-disk,HD,hdd,informații despre sistem +Keywords[rw]=Ibicedisiki,Ububikodisiki,HD,Amakuru Sisitemu +Keywords[se]=partišuvnnat,garraskearru,HD,vuogádatdieđut +Keywords[sk]=Partície,oddiely,Pevný disk,HD,Systémové informácie +Keywords[sl]=particije,trdi disk,HD,informacije o sistemu +Keywords[sr]=Partitions,Harddrive,HD,System Information,партиције,харддиск,системске информације +Keywords[sr@Latn]=Partitions,Harddrive,HD,System Information,particije,harddisk,sistemske informacije +Keywords[sv]=Partitioner,Hårddisk,HD,Systeminformation +Keywords[ta]=பகுதிகள், வன் சாதனம்,எச்டி,அமைப்பு தகவல் +Keywords[th]=พาร์ติชัน,ฮาร์ดไดรฟ์,HD,ข้อมูลระบบ +Keywords[tr]=Bölümleme,Sabitdisk,HD,Sistem Hakkında Bilgi +Keywords[uk]=розділи диску,жорсткий диск,HD,системна інформація +Keywords[uz]=Diskning qismlari,qattiq disk,HD,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=Дискнинг қисмлари,қаттиқ диск,HD,Тизим ҳақида маълумот +Keywords[ven]=Partitions,Harddrive,HD,Mafhungo a sisitemu +Keywords[vi]=Phân vùng,Ổ cứng,HD,Thông tin Hệ thống +Keywords[wa]=pårticions,deure plake,HD,informåcion do sistinme +Keywords[xh]=Ulwahlulelwano ngokwamaqhekeza,Harddrive,HD,Ulwazi lwendlela yokusebenza +Keywords[zh_CN]=Partitions,Harddrive,HD,System Information,分区,硬盘,系统信息 +Keywords[zh_TW]=Partitions,Harddrive,HD,System Information,磁碟分割區,硬式磁碟機,硬碟,系統資訊 +Keywords[zu]=Izahluko,Harddrive,HD,Ulwazi Lwesistimu + +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/pci.desktop b/kcontrol/info/pci.desktop new file mode 100644 index 000000000..9ee4452b3 --- /dev/null +++ b/kcontrol/info/pci.desktop @@ -0,0 +1,180 @@ +[Desktop Entry] +Exec=kcmshell pci +Icon=kcmpci +Type=Application +DocPath=kinfocenter/pci/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=pci +X-KDE-ParentApp=kinfocenter + +Name=PCI +Name[bn]=পি-সি-আই +Name[cs]=PCI sběrnice +Name[he]=התקני PCI +Name[hi]=पीसीआई +Name[is]=PCI-braut +Name[lo]=ອຸປະກອນ PCI +Name[ne]=पीसीआई +Name[ro]=Magistrala PCI +Name[ru]=Шина PCI +Name[te]=పిసిఐ +Name[th]=อุปกรณ์ PCI +Name[uk]=Шина PCI + +Comment=PCI information +Comment[af]=PCI informasie +Comment[ar]=معلومات PCI +Comment[az]=PCI haqqında mə'lumat +Comment[be]=Інфармацыя аб PCI +Comment[bg]=Информация за PCI шината +Comment[bn]=পি-সি-আই তথ্য +Comment[br]=Titouroù diwar-benn ar PCI +Comment[bs]=Informacije o PCI uređajima +Comment[ca]=Informació de PCI +Comment[cs]=Informace o PCI +Comment[csb]=Wëdowiédzô ò PCI +Comment[cy]=Gwybodaeth PCI +Comment[da]=PCI-information +Comment[de]=Informationen zu PCI +Comment[el]=Πληροφορίες PCI +Comment[eo]=Informo pri PCI +Comment[es]=Información sobre los dispositivos PCI +Comment[et]=PCI info +Comment[eu]=PCIri buruzko informazioa +Comment[fa]=اطلاعات PCI +Comment[fi]=PCI-tietoja +Comment[fr]=Informations PCI +Comment[fy]=PCI-Ynformaasje +Comment[ga]=Eolas PCI +Comment[gl]=Información de PCI +Comment[he]=מידע על התקני PCI +Comment[hi]=पीसीआई जानकारी +Comment[hr]=Podaci o PCI sabirnici +Comment[hu]=PCI-információk +Comment[id]=Informasi PCI +Comment[is]=Upplýsingar um PCI-braut +Comment[it]=Informazioni sul bus PCI +Comment[ja]=PCI の情報 +Comment[ka]=ცნობები PCI მოწყობილობების შესახებ +Comment[kk]=PCI құрылғылар мәліметі +Comment[km]=ព័ត៌មាន PCI +Comment[ko]=PCI 정보 +Comment[lo]=ຂໍ້ມູນອຸປະກອນ PCI +Comment[lt]=PCI informacija +Comment[lv]=PCI informācija +Comment[mk]=Информации за PCI +Comment[mn]=PCI-н мэдээлэл +Comment[ms]=Maklumat PCI +Comment[mt]=Informazzjoni dwar PCI +Comment[nb]=PCI-informasjon +Comment[nds]=Informatschoon över PCI +Comment[ne]=पीसीआई सूचना +Comment[nl]=PCI-informatie +Comment[nn]=PCI-informasjon +Comment[nso]=Tshedimoso ya PCI +Comment[oc]=Informacion de PCI +Comment[pa]=PCI ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o PCI +Comment[pt]=Informação sobre o PCI +Comment[pt_BR]=Informações PCI +Comment[ro]=Informații despre magistrala PCI +Comment[ru]=Сведения о устройствах PCI +Comment[rw]= Ibisobanuro PCI +Comment[se]=PCI-diehtu +Comment[sk]=Informácie o PCI +Comment[sl]=Podatki o vodilu PCI +Comment[sr]=PCI информације +Comment[sr@Latn]=PCI informacije +Comment[ss]=Umniningwane we PCI +Comment[sv]=PCI-information +Comment[ta]=PCI தகவல் +Comment[te]=పిసిఐ సమాచారం +Comment[tg]=Иттилооти PCI +Comment[th]=ข้อมูลอุปกรณ์ PCI +Comment[tr]=PCI hakkında bilgi +Comment[tt]=PCI turında +Comment[uk]=Інформація щодо шини PCI +Comment[uz]=PCI uskunalar haqida maʼlumot +Comment[uz@cyrillic]=PCI ускуналар ҳақида маълумот +Comment[ven]=Mafhungo a PCI +Comment[vi]=Thông tin về PCI +Comment[wa]=Informåcion so PCI +Comment[xh]=Inkcukacha ye PCI +Comment[zh_CN]=PCI 信息 +Comment[zh_TW]=PCI 資訊 +Comment[zu]=Ulwazi lwe-PCI + +Keywords=PCI,PCI-Devices,PCI-Bus,System Information +Keywords[af]=PCI,PCI-Devices,PCI-Bus,System Informasie +Keywords[ar]=PCI,أجهزة PCI,PCI-Bus,معلومات النظام +Keywords[az]=PCI,PCI-Avadanlıqları,PCI-Bus,Sistem Haqqında Mə'lumat +Keywords[be]=Прылады PCI,Сістэмная інфармацыя,PCI,PCI-Devices,PCI-Bus,System Information +Keywords[bg]=информация, система, системна, шина, PCI, PCI-Devices, PCI-Bus, System Information +Keywords[br]=PCI,trobarzhelloù PCI,bus PCI,titouroù reizhiad +Keywords[bs]=PCI,PCI-Devices,PCI-Bus,System Information,PCI uređaji,PCI-uređaji,PCI-sabirnica,informacije o sustavu +Keywords[ca]=PCI,Dispositius PCI,Bus PCI,Informació del sistema +Keywords[cs]=PCI,PCI-zařízení,PCI-sběrnice,Informace o systému +Keywords[csb]=PCI,ùrządzenia PCI,magistrala PCI,wëdowiédzô ò systemie +Keywords[cy]=PCI,Dyfeisiau-PCI,Bws-PCI,Gwybodaeth Cysawd +Keywords[da]=PCI,PCI-enheder,PCI-bus,Systeminformation +Keywords[de]=PCI,PCI-Geräte,PCI-Bus,Systeminformation +Keywords[el]=PCI,Συσκευές PCI,Δίαυλος PCI,Πληροφορίες συστήματος +Keywords[eo]=PCI,aparato,buso,sistemo,operaciumo,informo +Keywords[es]=PCI,Dispositivos PCI,Bus PCI,Información del sistema +Keywords[et]=PCI,PCi seadmed,PCI siin,Süsteemi info +Keywords[eu]=PCI,PCI-gailuak,PCI busa,Sistemaren informazioa +Keywords[fa]=PCI ،دستگاههای PCI ،گذرگاه PCI ،اطلاعات سیستم +Keywords[fi]=PCI,PCI-Laitteet,PCI-Väylä,Järjestelmätiedot +Keywords[fr]=PCI,périphériques PCI,bus PCI,informations système,pci +Keywords[fy]=PCI,PCI-devices,PCI-bus,systeemynformaasje,PCI-apparaten +Keywords[gl]=PCI,Dispositivos PCI,Bus PCI,Información do Sistema +Keywords[he]=מידע מערכת,אפיק PCI,התקני PCI,PCI,System Information +Keywords[hi]=पीसीआई,पीसीआई-औज़ार,पीसीआई-बस,तंत्र जानकारी +Keywords[hr]=PCI,PCI-Devices,PCI-Bus,System Information,PCI uređaji,PCI sabirnica,Podaci o sustavu +Keywords[hu]=PCI,PCI-eszközök,PCI-busz,rendszerinformáció +Keywords[id]=PCI,PCI-Divais,PCI-Bus,Informasi Sistem +Keywords[is]=PCI-tæki,PCI-braut,kerfi,upplýsingar +Keywords[it]=PCI,dispositivi PCI,bus PCI,informazioni sul sistema +Keywords[ja]=PCI,PCI-デバイス,PCI-バス,システムの情報 +Keywords[km]=PCI,ឧបករណ៍ PCI,ខ្សែបញ្ជូន PCI,ព័ត៌មានប្រព័ន្ធ +Keywords[lo]=ອຸປະກອນ PCI,ບັສ PCI,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=PCI,PCI-įrenginiai,PCI-Bus,Sistemos Informacija +Keywords[lv]=PCI,PCI-Iekārtas,PCI-Šina,Sistēmas Informācija +Keywords[mk]=PCI,PCI-Devices,PCI-Bus,System Information,PCI уреди,PCI магистрала,PCI собирница,Информации за системот +Keywords[mn]=PCI,PCI-төхөөрөмж,PCI-Bus,Системийн мэдээлэл +Keywords[nb]=PCI,PCI-enheter,PCI-buss,Systeminformasjon +Keywords[nds]=PCI,PCI-Reedschappen,PCI Bus,Systeeminformatschoon +Keywords[ne]=पीसीआई, पीसीआई-यन्त्र, पीसीआई-बस, प्रणाली सूचना +Keywords[nl]=PCI,PCI-devices,PCI-bus,systeeminformatie,PCI-apparaten +Keywords[nn]=PCI,PCI-einingar,PCI-buss,systeminformasjon +Keywords[nso]=PCI,Maano a PCI,PCI-Bus,Tshedimoso ya System +Keywords[oc]=PCI,Dispositius PCI,Bus PCI,Informacion dèu sistemo +Keywords[pa]=PCI,PCI-ਜੰਤਰ,PCI-Bus,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=PCI,urządzenia PCI,magistrala PCI,informacja o systemie +Keywords[pt]=PCI,dispositivos PCI,bus PCI,informações do sistema +Keywords[pt_BR]=PCI,dispositivos PCI,Barramento PCI,Barramento PCI,Informações de sistema +Keywords[ro]=PCI,dispozitive PCI,bus PCI,informații despre sistem +Keywords[rw]=PCI,Apareye-PCI,Bisi-PCI,Amakuru Sisitemu +Keywords[se]=PCI,PCI-ovttadagat,PCI-bussa,vuogádatdiehtu +Keywords[sk]=PCI,PCI-zariadenia,PCI-zbernica,Systémové informácie +Keywords[sl]=PCI,naprave PCI,vodilo PCI,informacije o sistemu +Keywords[sr]=PCI,PCI-Devices,PCI-Bus,System Information,PCI уређаји,PCI магистрала,системске информације +Keywords[sr@Latn]=PCI,PCI-Devices,PCI-Bus,System Information,PCI uređaji,PCI magistrala,sistemske informacije +Keywords[sv]=PCI,PCI-enheter,PCI-buss,Systeminformation +Keywords[ta]=PCI,PCI-சாதனங்கள்,PCI-பஸ்,சாதன தகவல் +Keywords[te]=పిసిఐ,పిసిఐ-పరికరాలు,పిసిఐ-బస్, వ్యవస్థ సమాచారం +Keywords[th]=อุปกรณ์ PCI,บัส PCI,ข้อมูลระบบ +Keywords[tr]=PCI,PCI-Aygıtları,PCI-Bus,Sistem Hakkında Bilgi +Keywords[uk]=PCI,пристрої PCI,шина PCI,системна інформація +Keywords[uz]=PCI,PCI uskunalari,PCI-Bus,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=PCI,PCI ускуналари,PCI-Bus,Тизим ҳақида маълумот +Keywords[ven]=PCI,Maano a PCI,PCI Bus,Mafhungo a sisitemu +Keywords[vi]=PCI,Thiết bị PCI,Thông tin Hệ thống +Keywords[wa]=PCI,éndjins PCI,Bus PCI,informåcion do sistinme +Keywords[xh]=PCI,PCI-Amacebo,PCI-Ibhasi,Ulwazi lwendlela +Keywords[zh_CN]=PCI,PCI-Devices,PCI-Bus,System Information,PCI 设备,PCI 总线,系统信息 +Keywords[zh_TW]=PCI,PCI-Devices,PCI-Bus,System Information,PCI 設備,PCI 匯流排,系統資訊 +Keywords[zu]=PCI,Amathuluzi-PCI,Ibhasi-PCI,Ulwaz Lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/processor.desktop b/kcontrol/info/processor.desktop new file mode 100644 index 000000000..580aa7e3a --- /dev/null +++ b/kcontrol/info/processor.desktop @@ -0,0 +1,249 @@ +[Desktop Entry] +Exec=kcmshell processor +Icon=kcmprocessor +Type=Application +DocPath=kinfocenter/processor/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=cpu +X-KDE-ParentApp=kinfocenter + +Name=Processor +Name[af]=Verwerker +Name[ar]=المعالج +Name[az]=İşlədici +Name[be]=Працэсар +Name[bg]=Процесор +Name[bn]=প্রসেসর +Name[br]=Kewerier +Name[bs]=Procesor +Name[ca]=Processador +Name[cs]=Procesor +Name[csb]=Procesora +Name[cy]=Prosesydd +Name[de]=Prozessor +Name[el]=Επεξεργαστής +Name[eo]=Procezilo +Name[es]=Procesador +Name[et]=Protsessor +Name[eu]=Prozesagailua +Name[fa]=پردازنده +Name[fi]=Prosessori +Name[fr]=Processeur +Name[fy]=Ferwurkingsienheid +Name[ga]=Próiseálaí +Name[gl]=Procesador +Name[he]=מעבד +Name[hi]=प्रोसेसर +Name[hr]=Procesor +Name[hu]=Processzor +Name[id]=Prosesor +Name[is]=Örgjörvi +Name[it]=Processore +Name[ja]=プロセッサ +Name[ka]=პროცესორი +Name[kk]=Процессор +Name[km]=ខួរក្បាល +Name[ko]=프로세서 +Name[lo]=ໂພຣເຊັດເຊີ +Name[lt]=Procesorius +Name[lv]=Procesors +Name[mk]=Процесор +Name[mn]=Процессор +Name[ms]=Pemproses +Name[mt]=CPU +Name[nb]=Prosessor +Name[nds]=Perzesser +Name[ne]=प्रोसेसर +Name[nn]=Prosessor +Name[nso]=Mophethagatsi +Name[oc]=Processador +Name[pa]=ਪਰੋਸੈਸਰ +Name[pl]=Procesor +Name[pt]=Processador +Name[pt_BR]=Processador +Name[ro]=Procesor +Name[ru]=Процессор +Name[rw]=Munonosora +Name[se]=Doaimmár +Name[sk]=Procesor +Name[sl]=Procesor +Name[sr]=Процесор +Name[sr@Latn]=Procesor +Name[ss]=Sichubi +Name[ta]=செயல்முறையாக்கம் +Name[te]=ప్రాసెసర్ +Name[tg]=Протсессор +Name[th]=หน่วยประมวลผล +Name[tr]=İşlemci +Name[tt]=Prosessor +Name[uk]=Процесор +Name[uz]=Protsessor +Name[uz@cyrillic]=Процессор +Name[ven]=Mubveledzi +Name[vi]=Bộ vi xử lý +Name[wa]=Processeu +Name[xh]=Umqhubekekisi phambili +Name[zh_CN]=处理器 +Name[zh_TW]=處理器 +Name[zu]=Umqhubekisi + +Comment=Processor information +Comment[af]=Verwerker informasie +Comment[ar]=معلومات المعالج +Comment[az]=İşlədici haqqında mə'lumat +Comment[be]=Інфармацыя аб працэсары +Comment[bg]=Информация за процесора(ите) на системата +Comment[bn]=প্রসেসর তথ্য +Comment[br]=Titouroù diwar-benn ar c'hewerier +Comment[bs]=Informacije o procesoru +Comment[ca]=Informació del processador +Comment[cs]=Informace o procesoru +Comment[csb]=Wëdowiédzô ò procesorze +Comment[cy]=Gwybodaeth prosesydd +Comment[da]=Information om processoren +Comment[de]=Informationen zum Prozessor +Comment[el]=Πληροφορίες για τον επεξεργαστή +Comment[eo]=Informo pri procezilo +Comment[es]=Información sobre el procesador +Comment[et]=Protsessori info +Comment[eu]=Prozesagailuari buruzko informazioa +Comment[fa]=اطلاعات پردازنده +Comment[fi]=Tietoja prosessorista +Comment[fr]=Informations sur le processeur +Comment[fy]=Ferwurkingsienheid ynformaasje +Comment[ga]=Eolas faoin phróiseálaí +Comment[gl]=Información do Procesador +Comment[he]=מידע על המעבד +Comment[hi]=प्रोसेसर जानकारी +Comment[hr]=Podaci o procesoru +Comment[hu]=A processzor jellemzői +Comment[id]=Informasi Prosesor +Comment[is]=Upplýsingar um örgjörva +Comment[it]=Informazioni sul processore +Comment[ja]=プロセッサの情報 +Comment[ka]=ინფორმაცია პროცესორის შესახებ +Comment[kk]=Процессор мәліметі +Comment[km]=ព័ត៌មានខួរក្បាល +Comment[ko]=프로세서 정보 +Comment[lo]=ຂໍ້ມູນໂພຣເຊັດເຊີ +Comment[lt]=Procesoriaus informacija +Comment[lv]=Procesora informācija +Comment[mk]=Информации за процесорот +Comment[mn]=Процессорын мэдээлэл +Comment[ms]=Maklumat pemproses +Comment[mt]=Informazzjoni dwar CPU +Comment[nb]=Prosessorinformasjon +Comment[nds]=Informatschoon över den Perzesser +Comment[ne]=प्रोसेसर सूचना +Comment[nl]=Processorinformatie +Comment[nn]=Prosessorinformasjon +Comment[nso]=Tshedimoso ya Mophethagatsi +Comment[oc]=Informacion dèu processador +Comment[pa]=ਪਰੋਸੈਸਰ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o procesorze +Comment[pt]=Informação sobre o processador +Comment[pt_BR]=Informações sobre o processador +Comment[ro]=Informații despre parametrii microprocesorului +Comment[ru]=Сведения о процессоре +Comment[rw]= Ibisobanuro bya Munonosora +Comment[se]=Doaimmárdieđut +Comment[sk]=Informácie o procesore +Comment[sl]=Podatki o procesorju +Comment[sr]=Информације о процесору +Comment[sr@Latn]=Informacije o procesoru +Comment[ss]=Umniningwane wesichubi +Comment[sv]=Processorinformation +Comment[ta]=செயல்முறை தகவல் +Comment[te]=ప్రాసెసర్ సమాచారం +Comment[tg]=Иттилооти Протсессор +Comment[th]=ข้อมูลหน่วยประมวลผล +Comment[tr]=İşlemci hakkında bilgi +Comment[tt]=Processor turında +Comment[uk]=Інформація щодо процесора +Comment[uz]=Protsessor haqida maʼlumot +Comment[uz@cyrillic]=Процессор ҳақида маълумот +Comment[ven]=Mafhungo a mubveledzi +Comment[vi]=Thông tin về bộ vi xử lý +Comment[wa]=Informåcion sol processeu +Comment[xh]=Inkcukacha yenkcukacha +Comment[zh_CN]=处理器信息 +Comment[zh_TW]=處理器資訊 +Comment[zu]=Ulwazi lomqhubekisi + +Keywords=Processor,CPU,FPU,MHz,System Information +Keywords[af]=Processor,CPU,FPU,MHz,System Informasie +Keywords[ar]=المعالج,CPU,FPU,MHz,معلومات النظام +Keywords[az]=İşlədici,MİB,FPU,MHz,Sistem Haqqında Mə'lumat +Keywords[be]=Працэсар,МГц,Сістэмная інфармацыя,Processor,CPU,FPU,MHz,System Information +Keywords[bg]=информация, система, системна, процесор, Processor, CPU, FPU, MHz, System Information +Keywords[br]=Kewerier,UTK,UNS,MHz,titouroù reizhiad +Keywords[bs]=Processor,CPU,FPU,MHz,System Information,procesor,informacije o sustavu +Keywords[ca]=Processador,CPU,FPU,MHz,Informació del sistema +Keywords[cs]=Procesor,CPU,FPU,MHz,Informace o systému +Keywords[csb]=procesora,CPU,JAL,FPU,MHz,wëdowiédzô ò systemie +Keywords[cy]=Prosesydd,CPU,FPU,MHz,Gwybodaeth Cysawd +Keywords[da]=Processor,CPU,FPU,MHz,Systeminformation +Keywords[de]=Prozessor,CPU,FPU,MHz,Systeminformation +Keywords[el]=Επεξεργαστής,KME,FPU,Πληροφορίες συστήματος +Keywords[eo]=procezilo,CPU,FPU,MHz,frekvenco,sistemo,operaciumo,informo +Keywords[es]=Procesador,CPU,FPU,MHz,Información del sistema +Keywords[et]=Protsessor,CPU,FPU,MHz,Süsteemi info +Keywords[eu]=Prozesagailua,CPU,FPU,MHz,Sistemaren informazioa +Keywords[fa]=پردازنده، واحد پردازش مرکزی، FPU، مگاهرتز، اطلاعات سیستم +Keywords[fi]=Prosessori,CPU,FPU,MHz,Järjestelmätiedot +Keywords[fr]=processeur,CPU,FPU,MHz,informations système,cpu +Keywords[fy]=Processor,Ferwurkingsienheid,CPU,FPU,MHz,Systeemynformaasje +Keywords[ga]=Próiseálaí,CPU,LAP,FPU,MHz,Eolas faoin Chóras +Keywords[gl]=Procesador,CPU,FPU,MHz,Información do Sistema +Keywords[he]=FPU,מעבד,מעבד מתמטי,מגה־הרץ,מידע מערכת,System Information +Keywords[hi]=प्रोसेसर,सीपीयू,एफपीयू,एमएचज़ेड,तंत्र जानकारी +Keywords[hr]=Processor,CPU,FPU,MHz,System Information,procesor,Podaci o sustavu +Keywords[hu]=processzor,CPU,FPU,MHz,rendszerinformáció +Keywords[id]=Prosesor,CPU,FPU,MHz,Informasi Sistem +Keywords[is]=örgjörvi,örgjörfi,Gjörvi,kerfi,upplýsingar,CPU,MHz,FPUz +Keywords[it]=processore,CPU,FPU,MHz,informazioni sul sistema +Keywords[ja]=プロセッサ,CPU,FPU,MHz,システムの情報 +Keywords[ka]=პროცესორი,CPU,FPU,MHz,ინფორმაცია სისტემის შესახებ +Keywords[km]=ខួរក្បាល,CPU,FPU,MHz,ព័ត៌មានប្រព័ន្ធ +Keywords[lo]=ໂພຣເຊັດເຊີ,CPU,FPU,MHz,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=Procesorius,CPU,FPU,MHz,Sistemos Informacija +Keywords[lv]=Procesors,CPU,FPU,MHz,Sistēmas Informācija +Keywords[mk]=Processor,CPU,FPU,MHz,System Information,Процесор,Информации за системот +Keywords[mn]=Процессор,CPU,FPU,MHz,Системийн мэдээлэл +Keywords[ms]=Pemproses,CPU,FPU,MHz,Maklumat Sistem +Keywords[nb]=Prosessor,CPU,FPU,Sentralenhet,MHz,Systeminformasjon +Keywords[nds]=Perzesser,CPU,FPU,MHz,Systeeminformatschoon +Keywords[ne]=प्रोसेसर, सीपीयू, एफपीयू, एमएचजेड, प्रणाली सूचना +Keywords[nl]=processor,CPU,FPU,MHz,systeeminformatie +Keywords[nn]=prosessor,CPU,FPU,MHz,systeminformasjon +Keywords[nso]=Mophethagatsi,CPU,FPU,MHz,Tshedimoso ya System +Keywords[oc]=Processador,CPU,FPU,MHz,Informacion dèu sistemo +Keywords[pa]=ਪਰੋਸੈਸਰ,CPU,FPU,MHz,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=procesor,CPU,JAL,FPU,MHz,informacja o systemie +Keywords[pt]=processador,CPU,FPU,MHz,informações do sistema +Keywords[pt_BR]=Processador,CPU,FPU,MHz,Informações de sistema +Keywords[ro]=procesor,microprocesor,CPU,FPU,MHz,informații despre sistem +Keywords[rw]=Munonosora,CPU,FPU,MHz,Amakuru Sisitemu +Keywords[se]=Doaimmár,CPU,FPU,MHz,vuogádatdieđut +Keywords[sk]=Procesor,CPU,FPU,MHz,Systémové Informácie +Keywords[sl]=procesor,CPE,CPU,FPU,MHz,informacije o sistemu +Keywords[sr]=Processor,CPU,FPU,MHz,System Information,процесор,системске информације +Keywords[sr@Latn]=Processor,CPU,FPU,MHz,System Information,procesor,sistemske informacije +Keywords[sv]=Processor,CPU,FPU,MHz,Systeminformation +Keywords[ta]=செயலி,CPU,FPU,MHz,அமைப்புத் தகவல் +Keywords[te]=ప్రాసెసర్, సిపియు, ఎఫ్ పి యు, ఎం హెర్జ్, వ్యవస్థ సమాచారం +Keywords[th]=โพรเซสเซอร์,หน่วยประมวลผล,CPU,FPU,MHz,ข้อมูลระบบ +Keywords[tr]=İşlemci,MİB,FPU,MHz,Sistem Hakkında Bilgi +Keywords[uk]=процесор,CPU,FPU,МГц,системна інформація +Keywords[uz]=Protsessor,CPU,FPU,MGs,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=Процессор,CPU,FPU,МГц,Тизим ҳақида маълумот +Keywords[ven]=Mubveledzi,CPU,FPU,MHz,Mafhungo a sisitemu +Keywords[vi]=Bộ vi xử lý,CPU,FPU,Mhz,Thông tin Hệ thống +Keywords[wa]=Processeu,CPU,FPU,MHz,informåcion do sistinme +Keywords[xh]=Umqhubekekisi,CPU,FPU,MHz,Inkcukacha Yendlela yokusebenza +Keywords[zh_CN]=Processor,CPU,FPU,MHz,System Information,处理器,系统信息 +Keywords[zh_TW]=Processor,CPU,FPU,MHz,System Information,處理器,中央處理器,浮點運算器,系統資訊 +Keywords[zu]=Umqhubekisi,CPU,FPU,MHz,Ulwazi Lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/scsi.desktop b/kcontrol/info/scsi.desktop new file mode 100644 index 000000000..9b62edbf7 --- /dev/null +++ b/kcontrol/info/scsi.desktop @@ -0,0 +1,177 @@ +[Desktop Entry] +Exec=kcmshell scsi +Icon=kcmscsi +Type=Application +DocPath=kinfocenter/scsi/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=scsi +X-KDE-ParentApp=kinfocenter + +Name=SCSI +Name[af]=Scsi +Name[bn]=স্কাসি +Name[fa]=اسکازی +Name[he]=התקני SCSI +Name[hi]=एससीएसआई +Name[is]=SCSI-tæki +Name[lo]=ອຸປະກອນ SCSI +Name[ne]=एससीएसआई +Name[ro]=Magistrala SCSI +Name[th]=อุปกรณ์ SCSI + +Comment=SCSI information +Comment[af]=Scsi informasie +Comment[ar]=معلومات SCSI +Comment[az]=SCSI haqqında mə'lumat +Comment[be]=Інфармацыя аб SCSI +Comment[bg]=Информация за SCSI шината +Comment[bn]=স্কাসি (SCSI) তথ্য +Comment[br]=Titouroù diwar-benn ar SCSI +Comment[bs]=Informacije o SCSI uređajima +Comment[ca]=Informació de SCSI +Comment[cs]=Informace o SCSI +Comment[csb]=Wëdowiédzô ò SCSI +Comment[cy]=Gwybodaeth SCSI +Comment[da]=SCSI-information +Comment[de]=Informationen zu SCSI-Geräten +Comment[el]=Πληροφορίες SCSI +Comment[eo]=Informo pri SCSI +Comment[es]=Información sobre los dispositivos SCSI +Comment[et]=SCSI info +Comment[eu]=SCSIri buruzko informazioa +Comment[fa]=اطلاعات اسکازی +Comment[fi]=SCSI-tietoja +Comment[fr]=Informations SCSI +Comment[fy]=SCSI-ynformaasje +Comment[ga]=Eolas SCSI +Comment[gl]=Información de SCSI +Comment[he]=מידע על SCSI +Comment[hi]=एससीएसआई जानकारी +Comment[hr]=Podaci o SCSI sabirnici +Comment[hu]=SCSI-információk +Comment[id]=Informasi SCSI +Comment[is]=Upplýsingar um SCSI-tæki +Comment[it]=Informazioni sul bus SCSI +Comment[ja]=SCSI の情報 +Comment[ka]=ინფორმაცია SCSI–ს შესახებ +Comment[kk]=SCSI құрылғылар мәліметі +Comment[km]=ព័ត៌មាន SCSI +Comment[ko]=SCSI 정보 +Comment[lo]=ຂໍ້ມູນອຸປະກອນ SCSI +Comment[lt]=SCSI informacija +Comment[lv]=SCSI informācija +Comment[mk]=Информации за SCSI +Comment[mn]=SCSI-төхөөрөмжийн мэдээлэл +Comment[ms]=Maklumat SCSI +Comment[mt]=Informazzjoni dwar SCSI +Comment[nb]=SCSI-informasjon +Comment[nds]=Informatschoon över SCSI +Comment[ne]=एससीएसआई सूचना +Comment[nl]=SCSI-informatie +Comment[nn]=SCSI-informasjon +Comment[nso]=Tshedimoso ya SCSI +Comment[oc]=Informacion de SCSI +Comment[pa]=SCSI ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o SCSI +Comment[pt]=Informação sobre o SCSI +Comment[pt_BR]=Informações sobre SCSI +Comment[ro]=Informații despre magistrala SCSI +Comment[ru]=Сведения о устройствах SCSI +Comment[rw]= Ibisobanuro SCSI +Comment[se]=SCSI-diehtu +Comment[sk]=Informácie o SCSI +Comment[sl]=Podatki o vodilu SCSI +Comment[sr]=Информације о SCSI уређајима +Comment[sr@Latn]=Informacije o SCSI uređajima +Comment[ss]=Umniningwane weSCSI +Comment[sv]=SCSI-information +Comment[ta]=SCSI தகவல் +Comment[te]=SCSI సమాచారం +Comment[tg]=Иттилооти SCSI +Comment[th]=ข้อมูลอุปกรณ์ SCSI +Comment[tr]=SCSI hakkında bilgi +Comment[tt]=SCSI turında +Comment[uk]=Інформація щодо SCSI +Comment[uz]=SCSI uskunalar haqida maʼlumot +Comment[uz@cyrillic]=SCSI ускуналар ҳақида маълумот +Comment[ven]=Mafhungo a SCSI +Comment[vi]=Thông tin về SCSI +Comment[wa]=Informåcion so SCSI +Comment[xh]=Inkcukacha ye SCSI +Comment[zh_CN]=SCSI 信息 +Comment[zh_TW]=SCSI 資訊 +Comment[zu]=Ulwazi lwe-SCSI + +Keywords=SCSI,SCSI-Bus,System Information +Keywords[af]=SCSI,SCSI-Bus,System Informasie +Keywords[az]=SCSI,SCSI-Bus,Sistem Haqqında Mə'lumat +Keywords[be]=Шына SCSI,Сістэмная інфармацыя,SCSI,SCSI-Bus,System Information +Keywords[bg]=информация, система, системна, шина, SCSI, SCSI-Bus, System Information +Keywords[br]=SCSI,bus SCSI,titouroù reizhiad +Keywords[bs]=SCSI,SCSI-Bus,System Information,SCSI-sabirnica,informacije o sustavu +Keywords[ca]=SCSI,Bus SCSI,Informació del sistema +Keywords[cs]=SCSI,SCSI-sběrnice,Informace o systému +Keywords[csb]=SCSI,magistrala SCSI,wëdowiédzô ò systemie +Keywords[cy]=SCSI,Bws-SCSI,Gwybodaeth Cysawd +Keywords[da]=SCSI,SCSI-bus,Systeminformation +Keywords[de]=SCSI,SCSI-Bus,Systeminformation +Keywords[el]=SCSI,Δίαυλος SCSI,Πληροφορίες συστήματος +Keywords[eo]=SCSI,buso,sistemo,operaciumo,informo +Keywords[es]=SCSI,Bus SCSI,Información del sistema +Keywords[et]=SCSI,SCSI siin,Süsteemi info +Keywords[eu]=SCSI,SCSI busa,Sistemaren informazioa +Keywords[fa]=اسکازی، گذرگاه اسکازی، اطلاعات سیستم +Keywords[fi]=SCSI,SCSI-Väylä,Järjestelmätiedot +Keywords[fr]=SCSI,bus SCSI,informations système,scsi +Keywords[fy]=SCSI,SCSI-bus,systeemynformaasje +Keywords[ga]=SCSI,Bus SCSI,Eolas faoin Chóras +Keywords[gl]=SCSI,Bus SCSI,Información do Sistema +Keywords[he]=מידע מערכת,אפיק SCSI,SCSI,SCSI-Bus,System Information +Keywords[hi]=एससीएसआई,एससीएसआई-बस,तंत्र जानकारी +Keywords[hr]=SCSI,SCSI-Bus,System Information,Podaci o sustavu,SCSI sabirnica +Keywords[hu]=SCSI,SCSI-busz,rendszerinformáció +Keywords[id]=SCSI,SCSI-Bus,Informasi Sistem +Keywords[is]=SCSI-braut,kerfi,upplýsingar +Keywords[it]=SCSI,bus SCSI,informazioni sul sistema +Keywords[ja]=SCSI,SCSI-バス,システムの情報 +Keywords[km]=SCSI,ខ្សែបញ្ជូន SCSI,ព័ត៌មានប្រព័ន្ធ +Keywords[lo]=ອຸູປະກອນ SCSI,ບັສ SCSI,ຂໍ້ມູນຂອງລະບົບ +Keywords[lt]=SCSI,SCSI-Bus,Sistemos Informacija +Keywords[lv]=SCSI,SCSI-Šina,Sistēmas Informācija +Keywords[mk]=SCSI,SCSI-Bus,System Information,SCSI магистрала, SCSI собирница,Информации за системот, +Keywords[mn]=SCSI,SCSI-Bus,Системийн мэдээлэл +Keywords[nb]=SCSI,SCSI-buss,Systeminformasjon +Keywords[nds]=SCSI,SCSI-Bus,Systeeminformatschoon +Keywords[ne]=एससीएसआई, एससीएसआई-बस, प्रणाली सूचना +Keywords[nl]=SCSI,SCSI-bus,systeeminformatie +Keywords[nn]=SCSI,SCSI-buss,systeminformasjon +Keywords[nso]=SCSI,SCSI-Bus,Tshedimoso ya System +Keywords[oc]=SCSI,Bus SCSI,Informacion dèu sistemo +Keywords[pa]=SCSI,SCSI-Bus,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=SCSI,magistrala SCSI,informacja o systemie +Keywords[pt]=SCSI,bus SCSI,informações do sistema +Keywords[pt_BR]=SCSI,Barramento SCSI,Informações de sistema +Keywords[ro]=SCSI,magistrala SCSI,bus SCSI,informații despre sistem +Keywords[rw]=SCSI,Bisi-SCSI,Amakuru Sisitemu +Keywords[se]=SCSI,SCSI-bussa,vuogádatdiehtu +Keywords[sk]=SCSI,SCSI-zbernica,Systémové Informácie +Keywords[sl]=SCSI,vodilo SCSI,informacije o sistemu +Keywords[sr]=SCSI,SCSI-Bus,System Information,SCSI магистрала,системске информације +Keywords[sr@Latn]=SCSI,SCSI-Bus,System Information,SCSI magistrala,sistemske informacije +Keywords[sv]=SCSI,SCSI-buss,Systeminformation +Keywords[ta]=SCSI,SCSI-பஸ்,அமைப்பு தகவல் +Keywords[th]=อุปกรณ์ SCSI,บัส SCSI,ข้อมูลระบบ +Keywords[tr]=SCSI,SCSI-Bus,Sistem Hakkında Bilgi +Keywords[uk]=SCSI,шина SCSI,системна інформація +Keywords[uz]=SCSI,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=SCSI,Тизим ҳақида маълумот +Keywords[ven]=SCSI,SCSI-Bus,Mafhungo a sisitemu +Keywords[vi]=SCSI,SCSI-Bus,Thông tin Hệ thống +Keywords[wa]=SCSI,Bus SCSI,informåcion do sistinme +Keywords[xh]=SCSI,SCSI-Ibhasi,Ulwazi lwendlela +Keywords[zh_CN]=SCSI,SCSI-Bus,System Information,SCSI 总线,系统信息 +Keywords[zh_TW]=SCSI,SCSI-Bus,System Information,系統資訊 +Keywords[zu]=SCSI,Ibhasi-SCSI,Ulwazi Lwesistimu +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/sound.desktop b/kcontrol/info/sound.desktop new file mode 100644 index 000000000..6a96da85d --- /dev/null +++ b/kcontrol/info/sound.desktop @@ -0,0 +1,243 @@ +[Desktop Entry] +Exec=kcmshell sound +Icon=kcmsound +Type=Application +DocPath=kinfocenter/sound/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=sound +X-KDE-ParentApp=kinfocenter + +Name=Sound +Name[af]=Klank +Name[ar]=الصوت +Name[az]=Səs +Name[be]=Гук +Name[bg]=Аудио +Name[bn]=সাউণ্ড +Name[br]=Son +Name[bs]=Zvuk +Name[ca]=So +Name[cs]=Zvuk +Name[csb]=Zwãk +Name[cy]=Sain +Name[da]=Lyd +Name[el]=Ήχος +Name[eo]=Sono +Name[es]=Sonido +Name[et]=Heli +Name[eu]=Soinua +Name[fa]=صوت +Name[fi]=Ääni +Name[fo]=Ljóð +Name[fr]=Son +Name[fy]=Lûd +Name[ga]=Fuaim +Name[gl]=Son +Name[he]=צליל +Name[hi]=ध्वनि +Name[hr]=Zvuk +Name[hu]=Hang +Name[id]=Suara +Name[is]=Hljóð +Name[it]=Suono +Name[ja]=サウンド +Name[ka]=ხმა +Name[kk]=Дыбыс +Name[km]=សំឡេង +Name[ko]=소리 +Name[lo]=ລະບົບສງງ +Name[lt]=Garsas +Name[lv]=Skaņa +Name[mk]=Звук +Name[mn]=Чимээ +Name[ms]=Bunyi +Name[mt]=Ħsejjes +Name[nb]=Lyd +Name[nds]=Kläng +Name[ne]=ध्वनि +Name[nl]=Geluid +Name[nn]=Lyd +Name[nso]=Modumo +Name[oc]=Son +Name[pa]=ਧੁਨੀ +Name[pl]=Dźwięk +Name[pt]=Som +Name[pt_BR]=Som +Name[ro]=Sunet +Name[ru]=Звук +Name[rw]=ijwi +Name[se]=Jietna +Name[sk]=Zvuk +Name[sl]=Zvok +Name[sr]=Звук +Name[sr@Latn]=Zvuk +Name[ss]=Umsindvo +Name[sv]=Ljud +Name[ta]=ஒலி +Name[te]=శబ్దం +Name[tg]=Садо +Name[th]=ระบบเสียง +Name[tr]=Ses +Name[tt]=Tawış +Name[uk]=Звук +Name[uz]=Tovush +Name[uz@cyrillic]=Товуш +Name[ven]=Mubvumo +Name[vi]=Âm thanh +Name[wa]=Son +Name[xh]=Isandi +Name[zh_CN]=音效 +Name[zh_TW]=音效 +Name[zu]=Umsindo + +Comment=Sound information +Comment[af]=Klank informasie +Comment[ar]=معلومات الصوت +Comment[az]=Səs haqqında mə'lumat +Comment[be]=Інфармацыя аб гуку +Comment[bg]=Информация за аудио системата +Comment[bn]=শব্দ সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar son +Comment[bs]=Informacije o zvuku +Comment[ca]=Informació del so +Comment[cs]=Informace o zvuku +Comment[csb]=Wëdowiédzô ò nastôwach zwãkù +Comment[cy]=Gwybodaeth Sain +Comment[da]=Information om lyd +Comment[de]=Informationen zur Soundkarte +Comment[el]=Πληροφορίες για τον Ήχο +Comment[eo]=Informo pri Sono +Comment[es]=Información sobre el sonido +Comment[et]=Heliseadmete info +Comment[eu]=Soinuari buruzko informazioa +Comment[fa]=اطلاعات صوتی +Comment[fi]=Äänitiedot +Comment[fr]=Informations sur le son +Comment[fy]=Lûdssysteemynformaasje +Comment[ga]=Eolas fuaime +Comment[gl]=Información do Son +Comment[he]=מידע על צליל +Comment[hi]=ध्वनि जानकारी +Comment[hr]=Podaci o zvuku +Comment[hu]=A hangkezelés jellemzői +Comment[id]=Informasi Suara +Comment[is]=Upplýsingar um hljóð +Comment[it]=Informazioni sul suono +Comment[ja]=サウンドの情報 +Comment[ka]=ინფორმაცია ხმის შესახებ +Comment[kk]=Дыбыс мәліметі +Comment[km]=ព័ត៌មានសំឡេង +Comment[ko]=소리 정보 +Comment[lo]=ຂໍ້ມູນລະບົບສງງ +Comment[lt]=Garso informacija +Comment[lv]=Skaņas informācija +Comment[mk]=Информации за звукот +Comment[mn]=Дууны картын мэдээлэл +Comment[ms]=Maklumat bunyi +Comment[mt]=Informazzjoni dwar Ħsejjes +Comment[nb]=Lydinformasjon +Comment[nds]=Klang-Informatschoon +Comment[ne]=ध्वनि सूचना +Comment[nl]=Geluidssysteeminformatie +Comment[nn]=Lydinformasjon +Comment[nso]=Tshedimoso ya Modumo +Comment[oc]=Informacion dèu son +Comment[pa]=ਧੁਨੀ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o ustawieniach dźwięku +Comment[pt]=Informação sobre o som +Comment[pt_BR]=Informações sobre o Som +Comment[ro]=Informații despre placa de sunet +Comment[ru]=Сведения о звуке +Comment[rw]= Ibisobanuro by'Ijwi +Comment[se]=Jietnadiehtu +Comment[sk]=Informácie o zvuku +Comment[sl]=Podatki o zvoku +Comment[sr]=Информације о звуку +Comment[sr@Latn]=Informacije o zvuku +Comment[ss]=Umniningwane wemsidvo +Comment[sv]=Ljudinformation +Comment[ta]=ஒலித் தகவல் +Comment[te]=శబ్ద సమాచారం +Comment[tg]=Иттилооти садо +Comment[th]=ข้อมูลระบบเสียง +Comment[tr]=Ses hakkında bilgi +Comment[tt]=Tawış turında +Comment[uk]=Інформація щодо звукової карти +Comment[uz]=Tovush haqida maʼlumot +Comment[uz@cyrillic]=Товуш ҳақида маълумот +Comment[ven]=Mafhungo a mubvumo +Comment[vi]=Thông tin về âm thanh +Comment[wa]=Informåcion sol son +Comment[xh]=Inkcukacha yesandi +Comment[zh_CN]=音响效果信息 +Comment[zh_TW]=音效資訊 +Comment[zu]=Ulwazi Lomsindo + +Keywords=Sound,Audio,Soundcard,MIDI,OSS,System Information +Keywords[af]=Sound,Audio,Soundcard,Midi,OSS,System Informasie +Keywords[az]=Sound,Audio,Soundcard,MIDI,OSS,System Information,Səs,Səskartı,Midi,OSS,Sistem Haqqında Mə'lumat +Keywords[be]=Гук,Аўдыё,Гукавая карта,Сістэмная інфармацыя,Сінтэзатар,Sound,Audio,Soundcard,MIDI,OSS,System Information +Keywords[bg]=информация, система, системна, аудио, звук Sound, Audio, Soundcard, MIDI, OSS, System Information +Keywords[br]=Son,klevet,kartenn son,MIDI,OSS,titouroù reizhiad +Keywords[bs]=Sound,Audio,Soundcard,Midi,OSS,System Information,Zvuk,Informacije o sistemu,Zvučna kartica +Keywords[ca]=So,Àudio,tarja de so,MIDI,OSS,Informació del sistema +Keywords[cs]=Zvuk,Audio,Zvuková karta,Midi,OSS,Informace o systému +Keywords[csb]=zwãk,audio,zwãkòwô karta,Midi,OSS,wëdowiédzô ò systemie +Keywords[cy]=Sain,Swn,Cerdyn Sain,Midi,OSS,Gwybodaeth Gysawd +Keywords[da]=Lyd,Audio,Lydkort,MIDI,OSS,Systeminformation +Keywords[de]=Klänge,Sound,Audio,Soundkarte,Systemklänge,Midi,OSS,Systeminformation +Keywords[el]=Ήχος,Μουσική,Κάρτα ήχου,MIDI,OSS,Πληροφορίες συστήματος +Keywords[eo]=Sonoro,Sono,Aŭdio,Sonorkarto,MIDI,OSS,sistemo,informo,operaciumo +Keywords[es]=Sonido,Audio,Tarjeta de sonido,MIDI,OSS,Información del sistema +Keywords[et]=Heli,Audio,Helikaart,MIDI,OSS,Süsteemi info +Keywords[eu]=Soinua,Audioa,Soinu txartela,Midi,OSS,Sistemaren informazioa +Keywords[fa]=صوت، صوتی، کارت صوتی ،MIDI ،OSS ،اطلاعات سیستم +Keywords[fi]=Ääni,Äänikortti,Midi,OSS,Järjestelmätiedot +Keywords[fr]=son,audio,carte son,midi,OSS,informations système +Keywords[fy]=lûd,audio,soundcard,midi,OSS,systeemynformaasje,ALSA,lûdskaart +Keywords[ga]=Fuaim,Cárta Fuaime,MIDI,OSS,Eolas faoin Chóras +Keywords[gl]=Son,Audio,Tarxeta de son,Midi,OSS,Información do Sistema +Keywords[he]=מידע מערכת,OSS,Midi,צליל,שמע,כרטיס קול,מידי,Sound, Audio,Soundcard,MIDI,OSS,System Information +Keywords[hi]=ध्वनि,ऑडियो,साउंडकार्ड,मिडी,ओएसएस,तंत्र जानकारी +Keywords[hr]=Sound,Audio,Soundcard,Midi,OSS,System Information,Zvuk,Podaci o sustavu,Zvučna kartica +Keywords[hu]=hang,audió,hangkártya,MIDI,OSS,rendszerinformáció +Keywords[id]=Sound,Audio,KartuSuara,Midi,OSS,Informasi Sistem +Keywords[is]=Hljóð,Hljóðkort,kerfi,upplýsingar,OSS,MIDI +Keywords[it]=suono,audio,scheda sonora,MIDI,OSS,informazioni sul sistema +Keywords[ja]=サウンド,オーディオ,サウンドカード,MIDI,OSS,システムの情報 +Keywords[ka]=ხმა,აუდიო,აუდიოდაბა,MIDI,OSS,ინფორმაცია სისტემის შესახებ +Keywords[km]=សំឡេង,សោត,បន្ទះសំឡេង,MIDI,OSS,ព័ត៌មានប្រព័ន្ធ +Keywords[lt]=Garsas,Audio,Garso korta,Midi,OSS,Sistemos informacija +Keywords[lv]=Skaņa,Audio,Skaņaskarte,MIDI,OSS,Sistēmas Informācija +Keywords[mk]=Sound,Audio,Soundcard,MIDI,OSS,System Information,Звук,Аудио,Звучна картичка,Информации за системот +Keywords[mt]=Sound,Audio,Soundcard,MIDI,OSS,System Information,Ħsejjes +Keywords[nb]=Lyd,Lydkort,Midi,OSS,Systeminformasjon +Keywords[nds]=Klang,Audio,Soundkort,Midi,OSS,Systeeminformatschoon +Keywords[ne]=ध्वनि, अडियो, ध्वनि कार्ड, MIDI, OSS, प्रणाली सूचना +Keywords[nl]=geluid,audio,soundcard,midi,OSS,systeeminformatie,ALSA,geluidskaart +Keywords[nn]=lyd,lydkort,MIDI,OSS,systeminformasjon +Keywords[pa]=Sound,Audio,Soundcard,MIDI,OSS,ਸਿਸਟਮ ਜਾਣਕਾਰੀ,ਆਡੀਓ,ਸਾਊਂਡਕਾਰਡ +Keywords[pl]=dźwięk,audio,karta dźwiekowa,Midi,OSS,informacja o systemie +Keywords[pt]=som,áudio,placa de som,midi,oss,informações de sistema +Keywords[pt_BR]=Som,Áudio,placa de som,MIDI,OSS,Informações de sistema +Keywords[ro]=sunet,audio,placă de sunet,card de sunet,MIDI,OSS,informații despre sistem +Keywords[rw]=Ijwi,Inyumvo,Ikaritaijwi,MIDI,OSS,Amakuru Sisitemu +Keywords[se]=jietna,jietnagoarta,midi,OSS,vuogádatdiehtu +Keywords[sk]=Zvuk,Zvuky,Zvuková karta,MIDI,OSS,Systémové Informácie +Keywords[sl]=zvok,glasba,zvočna kartica,avdio,midi,OSS,informacije o sistemu +Keywords[sr]=Sound,Аудио,Soundcard,Midi,OSS,System Information,Звук,Аудио,звучна карта,звучна картица,миди,системске информације +Keywords[sr@Latn]=Sound,Audio,Soundcard,Midi,OSS,System Information,Zvuk,Audio,zvučna karta,zvučna kartica,midi,sistemske informacije +Keywords[sv]=Ljud,Ljudkort,Midi,OSS,Systeminformation +Keywords[ta]=ஒலி,ஒலி அமைப்பு,ஒலி அட்டை,மிடி,OSS,சாதன தகவல் +Keywords[th]=เสียง,ระบบเสียง,แผงวงจรเสียง,มิดี้,OSS,ข้อมูลระบบ +Keywords[tr]=Ses,Seskartı,Midi,OSS,Sistem Bilgisi,MIDI +Keywords[uk]=звук,аудіо,sound,audio,звукова плата,midi,oss,системна інформація +Keywords[uz]=MIDI,OSS,Tovush,Audio,Tovush kartasi,Tizm haqida maʼlumot +Keywords[uz@cyrillic]=MIDI,OSS,Товуш,Аудио,Товуш картаси,Тизм ҳақида маълумот +Keywords[vi]=Âm thanh,âm,Bo mạch âm thanh,Midi,OSS,Thông tin Hệ thống +Keywords[wa]=Son,Audiocåte son,MIDI,OSS,informåcion do sistinme +Keywords[zh_CN]=Sound,Audio,Soundcard,MIDI,OSS,System Information,音频,音响,声卡,系统信息 +Keywords[zh_TW]=Sound,Audio,Soundcard,Midi,OSS,系統資訊 +Categories=Qt;KDE;X-KDE-information; diff --git a/kcontrol/info/xserver.desktop b/kcontrol/info/xserver.desktop new file mode 100644 index 000000000..1751a4b6e --- /dev/null +++ b/kcontrol/info/xserver.desktop @@ -0,0 +1,227 @@ +[Desktop Entry] +Exec=kcmshell xserver +Icon=kcmx +Type=Application +DocPath=kinfocenter/xserver/index.html + + +X-KDE-Library=info +X-KDE-FactoryName=xserver +X-KDE-ParentApp=kinfocenter + +Name=X-Server +Name[af]=X-bediener +Name[ar]=خادم X +Name[az]=X-Vericisi +Name[be]=Сервер X +Name[bg]=Сървър X +Name[bn]=এক্স-সার্ভার +Name[br]=Servijer X +Name[ca]=Servidor X +Name[csb]=X-Serwera +Name[cy]=Gweinydd-X +Name[da]=X-server +Name[el]=Εξυπηρετητής-X +Name[eo]=X-servilo +Name[es]=Servidor X +Name[et]=X'i server +Name[eu]=X zerbitzaria +Name[fa]=کارساز X +Name[fi]=X-palvelin +Name[fr]=Serveur X +Name[ga]=Freastalaí X +Name[gl]=Servidor X +Name[he]=שרת X +Name[hi]=एक्स-सर्वर +Name[hr]=X-poslužitelj +Name[hu]=X-kiszolgáló +Name[id]=Server-X +Name[is]=X-þjónn +Name[it]=Server X +Name[ja]=X サーバ +Name[ka]=X-სერვერი +Name[kk]=X-сервер +Name[ko]=X 서버 +Name[lo]=ເຊີຟເວີ X +Name[lt]=X-Serveris +Name[lv]=X-Serveris +Name[mk]=X-сервер +Name[mn]=X-Сервер +Name[ms]=Pelayan X +Name[nb]=X-tjener +Name[ne]=X-सर्भर +Name[nl]=X-server +Name[nn]=X-tenar +Name[nso]=Moabi wa X +Name[oc]=Servor X +Name[pa]=X-ਸਰਵਰ +Name[pl]=X-Serwer +Name[pt]=Servidor X +Name[pt_BR]=Servidor X +Name[ro]=Server X +Name[ru]=X-сервер +Name[rw]=X-Seriveri +Name[se]=X-bálvá +Name[sl]=Strežnik X +Name[sr]=X-Сервер +Name[ss]=Sigcini X +Name[sv]=X-server +Name[ta]=X-சேவகன் +Name[te]=ఎక్స్-సెర్వర్ +Name[tg]=Сервери-X +Name[th]=เซิร์ฟเวอร์ X +Name[tr]=X-Sunucusu +Name[uz@cyrillic]=X-Сервер +Name[ven]=Siva ya X +Name[vi]=Trình phục vụ X +Name[wa]=Siervieu X +Name[xh]=Umncedisi we-X +Name[zh_CN]=X 服务器 +Name[zh_TW]=X 伺服器 +Name[zu]=Umlekeleli we-X + +Comment=X-Server information +Comment[af]=X-bediener informasie +Comment[ar]=معلومات عن خادم X +Comment[az]=X-Vericisi haqqında mə'lumat +Comment[be]=Інфармацыя аб серверы X +Comment[bg]=Информация за сървъра X +Comment[bn]=এক্স-সার্ভার সংক্রান্ত তথ্য +Comment[br]=Titouroù diwar-benn ar servijer X +Comment[bs]=Informacije o X-Serveru +Comment[ca]=Informació del servidor X +Comment[cs]=Informace o X-Serveru +Comment[csb]=Wëdowiédzô ò X-serwerze +Comment[cy]=Gwybodaeth Gweinydd-X +Comment[da]=Information om X-serveren +Comment[de]=Informationen zum X-Server +Comment[el]=Πληροφορίες εξυπηρετητή X +Comment[eo]=Informo pri X-servilo +Comment[es]=Información sobre el servidor X +Comment[et]=X'i serveri info +Comment[eu]=X zerbitzariari buruzko informazioa +Comment[fa]=اطلاعات کارساز X +Comment[fi]=X-palvelimen tiedot +Comment[fr]=Informations sur le serveur X +Comment[fy]=X-Server-ynformaasje +Comment[ga]=Eolas faoin bhfreastalaí X +Comment[gl]=Información do Servidor X +Comment[he]=מידע על שרת ה־X +Comment[hi]=एक्स-सर्वर जानकारी +Comment[hr]=Podaci o X-poslužitelju +Comment[hu]=Az X-kiszolgáló jellemzői +Comment[id]=Informasi Server-X +Comment[is]=Upplýsingar um X-þjón +Comment[it]= Informazioni sul server X +Comment[ja]=X サーバの情報 +Comment[ka]=ინფორმაცია X-სერვერის შესახებ +Comment[kk]=X-сервер мәліметі +Comment[km]=ព័ត៌មាន X-Server +Comment[ko]=X 서버 정보 +Comment[lo]=ຂໍ້ມູນເຊີຟເວີ X +Comment[lt]=X-Serverio informacija +Comment[lv]=X-Servera informācija +Comment[mk]=Информации за X-серверот +Comment[mn]=X-серверийн мэдээлэл +Comment[ms]=Maklumat Pelayan X +Comment[mt]=Informazzjoni dwar X-Server +Comment[nb]=X-tjenerinformasjon +Comment[nds]=Informatschoon över den X-Server +Comment[ne]=X-सर्भर सूचना +Comment[nl]=X-Server-informatie +Comment[nn]=X-tenarinformasjon +Comment[nso]=Moabi wa Tshedimoso ya X +Comment[oc]=Informacion dèu servor X +Comment[pa]=X-ਸਰਵਰ ਜਾਣਕਾਰੀ +Comment[pl]=Informacje o X-serwerze +Comment[pt]=Informações sobre o servidor X +Comment[pt_BR]=Informações do servidor X +Comment[ro]=Informații despre serverul X +Comment[ru]=Сведения об X-сервере +Comment[rw]=Ibisobanuro bya X-Seriveri +Comment[se]=X-bálvádiehtu +Comment[sk]=Informácie o X serveri +Comment[sl]=Podatki o strežniku X +Comment[sr]=Информације о X серверу +Comment[sr@Latn]=Informacije o X serveru +Comment[ss]=Umniningwane wesigcini X +Comment[sv]=X-serverinformation +Comment[ta]=X-சேவகன் தகவல் +Comment[te]=ఎక్స్-సెర్వర్ సమాచారం +Comment[tg]=Иттилооти Сервери-X +Comment[th]=ข้อมูลเซิร์ฟเวอร์ X +Comment[tr]=X-Sunucusu hakkında bilgi +Comment[tt]=X-Server turında +Comment[uk]=Інформація щодо X-Server +Comment[uz]=X-Server haqida maʼlumot +Comment[uz@cyrillic]=X-Сервер ҳақида маълумот +Comment[ven]=Mafhungo a siva ya X +Comment[vi]=Thông tin về trình phục vụ X +Comment[wa]=Informåcion sol sierveu X +Comment[xh]=Ulwazi lomncedisi we-X +Comment[zh_CN]=X 服务器信息 +Comment[zh_TW]=X 伺服器資訊 +Comment[zu]=Ulwazi lomlekeleli we-X + +Keywords=X,X-Server,XServer,XFree86,Display,VideoCard,System Information +Keywords[az]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,X-Verici,XVerici,XFree86,Displey,Sistem Haqqında Mə'lumat +Keywords[be]=Сервер X,Дысплей,Відэакарта,Сістэмная інфармацыя,X,X-Server,XServer,XFree86,Display,VideoCard,System Information +Keywords[bg]=екран, видеокарта, системна информация, сървър, X, X-Server, XServer, XFree86, Display, VideoCard, System Information +Keywords[br]=X,servijer X,XServer,XFree86,diskwel,kartenn video,titouroù reizhiad +Keywords[bs]=X,X-Server,XServer,XFree86,VideoCard,Display,System Information, Ekran, Informacije o sistemu +Keywords[ca]=X,Servidor X,XServer,XFree86,Monitor,Targeta de video,Informació del sistema +Keywords[cs]=X,X-server,XServer,XFree86,Obrazovka,Informace o systému,Videokarta +Keywords[csb]=X,X serwera,Xserwera,XFree86,graficznô karta,grafika,wëdowiédzô ò systemie +Keywords[da]=X,X-server,Xserver,XFree86,Skærm,Videokort,Systeminformation +Keywords[el]=X,Εξυπηρετητής-X,XServer,XFree86,Οθόνη,Κάρτα Γραφικών, Πληροφορίες συστήματος +Keywords[eo]=X,X-servilo,XFree86,ekrano,fenestroj,sistemo,operaciumo,informo +Keywords[es]=X,X-Server,XServer,XFree86,Monitor,Tarjeta, Gráfica,Sistema,Información +Keywords[et]=X,X'i server,X Server,XFree86,Ekraan,Videokaart,Süsteemi info +Keywords[eu]=X,X-Server,XServer,XFree86,Display,VideoCard,sistema informazioa +Keywords[fa]=X، کارساز، X، XServer، XFree86، صفحه نمایش، کارت ویدیو، اطلاعات سیستم +Keywords[fr]=X,serveur X,XFree86,XServer,moniteur,affichage,informations système,xfree,carte vidéo,carte graphique +Keywords[fy]=X,X-Server,XServer,XFree86,display,systeemynformaasje,byldskerm,grafyske kaart +Keywords[ga]=X,Freastalaí-X,XFree86,Scáileán,Físchárta,Eolas faoin Chóras +Keywords[gl]=X,Servidor X,XServer,XFree86,Pantalla,Display,Información do Sistema +Keywords[he]=תצוגה,מידע מערכת,XFree86,שרת X,X, כרטיס מסך,X-Server,XServer,XFree86,Display,VideoCard, System Information, Xorg +Keywords[hi]=एक्स,एक्स-सर्वर,एक्ससर्वर,एक्सफ्री86,प्रदर्शक,वीडियोकार्ड,तंत्र जानकारी +Keywords[hr]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,X-poslužitelj,X poslužitelj,Zaslon,Video kartica,Grafička kartica,Podaci o sustavu +Keywords[hu]=X,X-kiszolgáló,XServer,XFree86,képernyő,videokártya,rendszerinformáció +Keywords[id]=X,Server-X,XServer,XFree86,Tampilan,KartuVideo,Informasi Sistem +Keywords[is]=X,X-Server,X-þjónn,XServer,Xþjónn,XFree86,Display,skjár, VideoCard,skjákort,System Information,kerfisupplýsingar +Keywords[it]=X,Server X,XServer,XFree86,display,schermo,informazioni sul sistema,SchedaVideo +Keywords[ja]=X,X-サーバ,Xサーバ,XFree86,ディスプレイ,システム情報 +Keywords[ka]=X,X-სერვერი,Xსერვერი,XFree86,დსიპლეი, ვიდეოდაფა,ინფორმაცია სისტების შესახებ +Keywords[km]=X,X-Server,XServer,XFree86,បង្ហាញ,បន្ទះវីដេអូ,ព័ត៌មានប្រព័ន្ធ +Keywords[lt]=X,X-Serveris,XServer,XFree86,Displėjus,Video plokštė,Sistemos informacija +Keywords[lv]=X,X-Serveris,XServeris,XFree86,Ekrāns,Sistēmas Informācija +Keywords[mk]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,X сервер,Екран,Видеокартичка,Информации за системот +Keywords[mt]=X,X-Server,XServer,XFree86,Display,System Information +Keywords[nb]=X,X-tjener,Xtjener,XFree86,skjerm,videokort,systeminformasjon +Keywords[nds]=X,X-Server,XServer,XFree86,Display,Dorstellen,Videokort,Systeeminformatschoon +Keywords[ne]=X, X-सर्भर, Xसर्भर, Xस्वतन्त्र 86, प्रदर्शन गर्नुहोस्, भिडियो कार्ड, प्रणाली सूचना +Keywords[nl]=X,X-Server,XServer,XFree86,display,systeeminformatie,beeldscherm,videokaart +Keywords[nn]=X,X-tenar,XServer,XFree86,skjerm,skjermkort,systeminformasjon +Keywords[pa]=X,X-Server,XServer,XFree86,ਦਰਿਸ਼,ਵੀਡਿਓ ਕਾਰਡ,ਸਿਸਟਮ ਜਾਣਕਾਰੀ +Keywords[pl]=X,X serwer,Xserwer,XFree86,karta graficzna,grafika,informacja o systemie +Keywords[pt]=X,servidor X,XServer,XFree86,ecrã,placa de vídeo,informações de sistema +Keywords[pt_BR]=X,Servidor X,XFree,XFree86,Display,Tela,Placa de Vídeo,Informações do sistema +Keywords[ro]=X,server X,XServer,XFree86,ecran,afișare,placă video,informații despre sistem +Keywords[rw]=X,X-Seriveri,XSeriveri,XFree86,Kwerekana,IkaritaVidewo,Amakuru Sisitemu +Keywords[sk]=X,X-Server,XServer,XFree86,Display,VideoCard,Systémové Information +Keywords[sl]=X,strežnik X,X-strežnik,XServer,XFree86,zaslon,grafična kartica,Podatki o sistemu,sistemske informacije +Keywords[sr]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,екран,видео картица +Keywords[sr@Latn]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,ekran,video kartica +Keywords[sv]=X,X-server,Xserver,Xfree86,skärm,videokort,systeminformation +Keywords[ta]=X,X-சேவகன்,Xசேவகன்,XFree86, காட்சி,படக்காட்சிஅட்டை,அமைப்பு தகவல் +Keywords[th]=X,เซิร์ฟเวอร์ X,XServer,XFree86,จอแสดงผล,แผงวงจรวิดีโอ,ข้อมูลระบบ +Keywords[tr]=X,X-Server,XServer,X sunucu, X-sunucu,Xsunucu,XFree86,Görüntü,Video Kartı,Sistem Bilgisi +Keywords[uk]=X,X-Server,XServer,XFree86,Display,системна інформація,монітор,X сервер,відео карта +Keywords[uz]=X,X server,XFree86,xorg,X-Server,Displey,video karta,Tizim haqida maʼlumot +Keywords[uz@cyrillic]=X,X сервер,XFree86,xorg,X-Сервер,Дисплей,видео карта,Тизим ҳақида маълумот +Keywords[vi]=X,Trình phục vụ X,XServer,XFree86,Màn hình,Thông tin Hệ thống +Keywords[wa]=X,X-Server,XServer,sierveu X,XFree86,håynaedje,Display,cåte videyo,informåcion do sistinme +Keywords[zh_CN]=X,X-Server,XServer,XFree86,Display,VideoCard,System InformationX 服务器,显示器,显卡,系统信息 +Keywords[zh_TW]=X,X-Server,XServer,XFree86,Display,VideoCard,System Information,X 伺服器,X伺服器,顯示器,顯示卡,系統資訊 + +Categories=Qt;KDE;X-KDE-information; |