diff options
Diffstat (limited to 'kcontrol/info')
44 files changed, 9797 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/CMakeLists.txt b/kcontrol/info/CMakeLists.txt new file mode 100644 index 000000000..58f941e13 --- /dev/null +++ b/kcontrol/info/CMakeLists.txt @@ -0,0 +1,46 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + +if( WITH_OPENGL ) + add_definitions( -DINFO_OPENGL_AVAILABLE ) + set( OPENGL_DESKTOP opengl.desktop ) + set( OPENGL_SOURCES opengl.cpp ) +endif( WITH_OPENGL ) + +##### other data ################################ + +install( FILES + memory.desktop processor.desktop dma.desktop + interrupts.desktop ioports.desktop pci.desktop + sound.desktop devices.desktop scsi.desktop + partitions.desktop xserver.desktop cdinfo.desktop + ${OPENGL_DESKTOP} + DESTINATION ${XDG_APPS_INSTALL_DIR} ) + + +##### kcm_info (module) ######################### + +tde_add_kpart( kcm_info AUTOMOC + SOURCES main.cpp memory.cpp ${OPENGL_SOURCES} + LINK tdeui-shared ${GL_LIBRARIES} ${GLU_LIBRARIES} + DESTINATION ${PLUGIN_INSTALL_DIR} +) 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..30eb5ebe8 --- /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_TDEUI) $(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..588730fff --- /dev/null +++ b/kcontrol/info/cdinfo.desktop @@ -0,0 +1,166 @@ +[Desktop Entry] +Exec=tdecmshell cdinfo +Icon=kcmdevices +Type=Application +X-DocPath=kcontrol/cdinfo/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=cdinfo +X-TDE-ParentApp=kcontrol + +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;TDE;X-TDE-settings-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..2e4e6ee26 --- /dev/null +++ b/kcontrol/info/devices.desktop @@ -0,0 +1,246 @@ +[Desktop Entry] +Exec=tdecmshell devices +Icon=kcmdevices +Type=Application +X-DocPath=kcontrol/devices/index.html +Categories=Qt;TDE;X-TDE-settings-information; + + +X-TDE-Library=info +X-TDE-FactoryName=devices +X-TDE-ParentApp=kcontrol + +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..1af1bf5e6 --- /dev/null +++ b/kcontrol/info/dma.desktop @@ -0,0 +1,248 @@ +[Desktop Entry] +Exec=tdecmshell dma +Icon=kcmmemory +Type=Application +X-DocPath=kcontrol/dma/index.html +Categories=Qt;TDE;X-TDE-settings-information; + + +X-TDE-Library=info +X-TDE-FactoryName=dma +X-TDE-ParentApp=kcontrol + +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..2d79f4f54 --- /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 <tqheader.h> +#include <tqwhatsthis.h> +#include <tqlayout.h> + +#include <tdeglobalsettings.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 TQString *GetInfo_ErrorString; /* should always point to: + KInfoListWidget::ErrorString */ +static bool sorting_allowed; /* is sorting allowed by user ? */ + + + +#if defined(__linux__) +# define DEFAULT_ERRORSTRING TQString::null /* i18n("Maybe the proc-filesystem is not enabled in Linux-Kernel.") */ +#elif defined(__hpux) +# define DEFAULT_ERRORSTRING TQString::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 TQString Value( int val, int numbers=1 ) +{ + return TDEGlobal::locale()->formatNumber(val, 0).rightJustify(numbers); +} + +static const TQString HexStr(unsigned long val, int digits ) +{ + TQString hexstr; + int i; + hexstr = TQString::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 TQListViewItem* XServer_fill_screen_info( TQListViewItem *lBox, TQListViewItem *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 */ + TQListViewItem *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 TQListViewItem(lBox,last, i18n("Screen # %1").arg((int)scr,-1), + (scr==default_scr) ? i18n("(Default Screen)") : TQString::null ); + item->setExpandable(true); + if (scr==default_scr) + item->setOpen(true); + last = new TQListViewItem(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 TQListViewItem(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) { + TQString txt; + + for (i = 0; i < ndepths; i++) { + txt = txt + Value(depths[i]); + if (i < ndepths - 1) + txt = txt + TQString::fromLatin1(", "); + } + + last = new TQListViewItem(item, last, i18n("Depths (%1)").arg(ndepths,-1), txt); + XFree((char *) depths); + } + + last = new TQListViewItem(item, last, i18n("Root Window ID"), + HexStr((unsigned long)RootWindow(dpy,scr),HEXDIGITS)); + last = new TQListViewItem(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 TQListViewItem(item, last, i18n("Number of Colormaps"), + i18n("minimum %1, maximum %2") + .arg((int)MinCmapsOfScreen(s)).arg((int)MaxCmapsOfScreen(s))); + last = new TQListViewItem(item, last, i18n("Default Colormap"), + Value((int)DefaultColormap(dpy,scr))); + last = new TQListViewItem(item, last, i18n("Default Number of Colormap Cells"), + Value((int)DisplayCells(dpy, scr))); + last = new TQListViewItem(item, last, i18n("Preallocated Pixels"), + i18n("Black %1, White %2") + .arg(TDEGlobal::locale()->formatNumber(BlackPixel(dpy,scr), 0)) + .arg(TDEGlobal::locale()->formatNumber(WhitePixel(dpy,scr), 0))); + + TQString YES(i18n("Yes")); + TQString NO(i18n("No")); + last = new TQListViewItem(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 TQListViewItem(item, last, i18n("Largest Cursor"), + (width == 65535 && height == 65535) + ? i18n("unlimited") : TQString::fromLatin1("%1 x %2").arg(width).arg(height)); + + last = new TQListViewItem(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 TQListViewItem(last, item, + i18n("Event = %1").arg(HexStr(etp->value,HEXDIGITS)), + etp->name ); + } + + return item; +} + +static const TQString 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 TQString BitString( unsigned long n ) +{ + return i18n("1 Bit", "%n Bits", n); // singular & plural form of "%d Bit" +} + +static const TQString 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(TDEGlobal::locale()->formatNumber(n,0)); +} + +static bool GetInfo_XServer_Generic( TQListView *lBox ) +{ + /* Many parts of this source are taken from the X11-program "xdpyinfo" */ + + int i,n; + long req_size; + + Display *dpy; + XPixmapFormatValues *pmf; + + TQString str,txt; + TQListViewItem *last, *item, *next; + + dpy = XOpenDisplay(0); + if (!dpy) + return false; + + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + sorting_allowed = false; + + next = new TQListViewItem(lBox, i18n("Server Information")); + next->setPixmap(0, SmallIcon("kcmx")); + next->setOpen(true); + next->setSelectable(false); + next->setExpandable(false); + + last = new TQListViewItem(next, i18n("Name of the Display"), + DisplayString(dpy)); + + last = new TQListViewItem(next, last, i18n("Vendor String"), TQString::fromLatin1(ServerVendor(dpy))); + last = new TQListViewItem(next, last, i18n("Vendor Release Number"), + Value((int)VendorRelease(dpy))); + + last = new TQListViewItem(next, last, i18n("Version Number"), + TQString::fromLatin1("%1.%2").arg((int)ProtocolVersion(dpy)) + .arg((int)ProtocolRevision(dpy))); + + last = item = new TQListViewItem(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 TQListViewItem( next, last, i18n("Supported Extensions") ); + item = last; + + int extCount; + char **extensions = XListExtensions( dpy, &extCount ); + for ( i = 0; i < extCount; i++ ) { + item = new TQListViewItem( last, item, TQString::fromLatin1( extensions[i] ) ); + } + XFreeExtensionList( extensions ); + + pmf = XListPixmapFormats(dpy, &n); + last = item = new TQListViewItem(next, last, i18n("Supported Pixmap Formats")); + if (pmf) { + last->setExpandable(true); + for (i=0; i<n; i++) { + item = new TQListViewItem(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 TQListViewItem(next, last, i18n("Maximum Request Size"), + ByteString(req_size*4)); + last = new TQListViewItem(next, last, i18n("Motion Buffer Size"), + ByteString(XDisplayMotionBufferSize(dpy))); + + last = item = new TQListViewItem(next, last, i18n("Bitmap")); + last->setExpandable(true); + item = new TQListViewItem(last, item, i18n("Unit"), + Value(BitmapUnit(dpy)) ); + item = new TQListViewItem(last, item, i18n("Order"), + Order(BitmapBitOrder(dpy))); + item = new TQListViewItem(last, item, i18n("Padding"), + Value(BitmapPad(dpy))); + + last = new TQListViewItem(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) + + TQString::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(TDEGlobalSettings::generalFont()); + lBox->setShowSortIndicator(sorting_allowed); + + if (ok) + { + widgetStack->raiseWidget(lBox); + } + else + { + NoInfoText->setText(ErrorString); + widgetStack->raiseWidget(NoInfoText); + } + + emit changed(false); +} + + +TQString 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 TQString &_title, TQWidget *parent, const char *name, + bool _getlistbox(TQListView *lbox)) + : TDECModule(parent, name), + title(_title) +{ + TDEAboutData *about = + new TDEAboutData(I18N_NOOP("kcminfo"), + I18N_NOOP("TDE Panel System Information Control Module"), + 0, 0, TDEAboutData::License_GPL, + I18N_NOOP("(c) 1998 - 2002 Helge Deller")); + + about->addAuthor("Helge Deller", 0, "deller@kde.org"); + setAboutData( about ); + + setButtons(TDECModule::Help); + getlistbox = _getlistbox; + GetInfo_ErrorString = 0; + TQHBoxLayout *layout = new TQHBoxLayout(this, 0, KDialog::spacingHint()); + widgetStack = new TQWidgetStack(this); + layout->addWidget(widgetStack); + lBox = new TQListView(widgetStack); + widgetStack->addWidget(lBox, 0); + lBox->setMinimumSize(200,120); + lBox->setFont(TDEGlobalSettings::generalFont()); /* default font */ + lBox->setAllColumnsShowFocus(true); + TQWhatsThis::add( lBox, i18n( "This list displays system information on the selected category." ) ); + NoInfoText = new TQLabel(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( TQListView *lBox, const char *FileName, bool WithEmptyLines = true ) +{ + FILE *pipe; + TQListViewItem* olditem = 0L; + TQString s; + + if ((pipe = popen(FileName, "r")) == NULL) { + pclose(pipe); + return 0; + } + + TQTextStream t(pipe, IO_ReadOnly); + + while (!t.atEnd()) { + s = t.readLine(); + if (!WithEmptyLines && s.length()==0) + continue; + olditem = new TQListViewItem(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..11dcc7539 --- /dev/null +++ b/kcontrol/info/info.h @@ -0,0 +1,53 @@ +#ifndef _INFO_H_ +#define _INFO_H_ + +#include <tqwidget.h> +#include <tqwidgetstack.h> +#include <tqframe.h> +#include <tqlabel.h> +#include <tqtabdialog.h> +#include <tqpushbutton.h> +#include <tqtimer.h> +#include <tqlistview.h> +#include <tqfile.h> +#include <tqevent.h> + +#include <tdecmodule.h> +#include <tdeaboutdata.h> + +#include "config.h" + +/* function call-back-prototypes... */ + +bool GetInfo_CPU( TQListView *lBox ); +bool GetInfo_IRQ( TQListView *lBox ); +bool GetInfo_DMA( TQListView *lBox ); +bool GetInfo_PCI( TQListView *lBox ); +bool GetInfo_IO_Ports( TQListView *lBox ); +bool GetInfo_Sound( TQListView *lBox ); +bool GetInfo_Devices( TQListView *lBox ); +bool GetInfo_SCSI( TQListView *lBox ); +bool GetInfo_Partitions( TQListView *lBox ); +bool GetInfo_XServer_and_Video( TQListView *lBox ); +bool GetInfo_CD_ROM( TQListView *lBox ); /* New CD-ROM Info */ +extern bool GetInfo_OpenGL( TQListView *lBox ); + +class KInfoListWidget : public TDECModule +{ +public: + KInfoListWidget(const TQString &_title, TQWidget *parent, const char *name=0, bool _getlistbox (TQListView *)=0); + + virtual void load(); + virtual TQString quickHelp() const; + +private: + TQListView *lBox; + bool (*getlistbox) (TQListView *); + TQString title; + + TQLabel *NoInfoText; + TQString ErrorString; + TQWidgetStack *widgetStack; +}; + +#endif diff --git a/kcontrol/info/info_aix.cpp b/kcontrol/info/info_aix.cpp new file mode 100644 index 000000000..9aa0d3767 --- /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(TQListView *lBox, char *criteria) +{ + struct CuDv *cudv; /* Customized Devices */ + struct listinfo info; + int i; + char *cudv_desc; + TQString cudv_status; + TQListViewItem *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 = TQString("Defined"); break; + case AVAILABLE: cudv_status = TQString("Available"); break; + case STOPPED: cudv_status = TQString("Stopped"); break; + default: cudv_status = TQString("Unknown"); + } + cudv_desc = device_description(&cudv[i]); + + lastitem = new TQListViewItem(lBox, lastitem, + TQString(cudv[i].name), + cudv_status, + TQString(cudv[i].location), + TQString(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( TQListView *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( TQListView *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; + TQListViewItem *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 TQListViewItem(lBox, lastitem, TQString("CPU ID"), TQString(cpu_ID)); + lastitem = new TQListViewItem(lBox, lastitem, TQString("Node"), TQString(info.nodename)); + lastitem = new TQListViewItem(lBox, lastitem, TQString("OS"), TQString(info.sysname) + + TQString(" ") + TQString(info.version) + TQString(".") + TQString(info.release)); + + for (i=0; *(table[i].model_ID); i++) + if (strcmp(model_ID, table[i].model_ID) == 0) + { + lastitem = new TQListViewItem(lBox, lastitem, TQString("Machine Type"), TQString(table[i].machine_type)); + lastitem = new TQListViewItem(lBox, lastitem, TQString("Architecture"), TQString(chip_name[table[i].architecture])); + lastitem = new TQListViewItem(lBox, lastitem, TQString("Speed"), TQString(table[i].processor_speed) + TQString(" Mhz")); + break; + } + + return(true); +} + +bool GetInfo_IRQ( TQListView * ) +{ + return false; +} + +bool GetInfo_DMA( TQListView * ) +{ + return false; +} + +bool +GetInfo_PCI( TQListView *lBox ) +{ + return list_devices(lBox, (char *)"PdDvLn like '*/pci/*'"); +} + +bool GetInfo_IO_Ports( TQListView * ) +{ + return false; +} + +bool GetInfo_Sound( TQListView * ) +{ + return false; +} + +bool +GetInfo_Devices( TQListView *lBox ) +{ + return list_devices(lBox, (char *)"PdDvLn like '*'"); +} + +bool +GetInfo_SCSI( TQListView *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 ( TQListView *lbox ) +{ + #define NUMCOLS 5 + TQString Title[NUMCOLS]; + int n; + + struct fstab *fstab_ent; + struct statvfs svfs; + long total,avail; + TQString str; + TQString MB(i18n("MB")+ " "); // International Text for MB=Mega-Byte + + if (setfsent() != 1) // Try to open fstab + return false; + + Title[0] = i18n("Device"); + Title[1] = i18n("Mount Point"); + Title[2] = i18n("FS Type"); + Title[3] = i18n("Total Size"); + Title[4] = i18n("Free Size"); + + for (n=0; n<NUMCOLS; ++n) { + lbox->addColumn(Title[n] ); + } + + while ((fstab_ent=getfsent())!=NULL) { + /* fstab_ent->fs_type holds only "rw","xx","ro"... */ + memset(&svfs,0,sizeof(svfs)); + statvfs(fstab_ent->fs_file,&svfs); + get_fs_usage(fstab_ent->fs_file, &total, &avail); + + if (!strcmp(fstab_ent->fs_type,FSTAB_XX)) // valid drive ? + svfs.f_basetype[0] = 0; + + if(svfs.f_basetype[0]) { + new TQListViewItem(lbox, TQString(fstab_ent->fs_spec), + TQString(fstab_ent->fs_file) + TQString(" "), + (svfs.f_basetype[0] ? TQString(svfs.f_basetype) : i18n("n/a")), + Value((total+512)/1024,6) + MB, + Value((avail+512)/1024,6) + MB); + } + else { + new TQListViewItem(lbox, TQString(fstab_ent->fs_spec), + TQString(fstab_ent->fs_file) + TQString(" "), + (svfs.f_basetype[0] ? TQString(svfs.f_basetype) : i18n("n/a"))); + } + + } + endfsent(); + + return true; +} diff --git a/kcontrol/info/info_fbsd.cpp b/kcontrol/info/info_fbsd.cpp new file mode 100644 index 000000000..3ccd1c086 --- /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 <tqdict.h> +#include <tqfile.h> +#include <tqptrlist.h> +#include <tqstring.h> +#include <tqtextstream.h> + +class Device { +public: + Device (TQString n=TQString::null, TQString d=TQString::null) + {name=n; description=d;} + TQString name, description; +}; + +void ProcessChildren(TQString name); +TQString GetController(const TQString &line); +Device *GetDevice(const TQString &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 (TQListView *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); + + TQString 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 TQListViewItem(lBox, cpustring); + + /* Clean up after ourselves, this time I mean it ;-) */ + delete buf; + } + + return true; +} + +bool GetInfo_IRQ (TQListView *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 (TQListView *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 (TQListView *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 (TQListView *lbox) +{ + TQFile *sndstat = new TQFile("/dev/sndstat"); + TQTextStream *t; + TQString s; + TQListViewItem *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 TQListViewItem(lbox, olditem, s); + } else { + t = new TQTextStream(sndstat); + while (!(s=t->readLine()).isNull()) { + olditem = new TQListViewItem(lbox, olditem, s); + } + + delete t; + sndstat->close(); + } + + delete sndstat; + return true; +} + +bool GetInfo_SCSI (TQListView *lbox) +{ + FILE *pipe; + TQFile *camcontrol = new TQFile("/sbin/camcontrol"); + TQTextStream *t; + TQString s; + TQListViewItem *olditem = 0; + + if (!camcontrol->exists()) { + s = i18n ("SCSI subsystem could not be queried: /sbin/camcontrol could not be found"); + olditem = new TQListViewItem(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 TQListViewItem(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 TQTextStream(pipe, IO_ReadOnly); + + while (true) { + s = t->readLine(); + if ( s.isEmpty() ) + break; + olditem = new TQListViewItem(lbox, olditem, s); + } + + delete t; + pclose(pipe); + } + + delete camcontrol; + + if (!lbox->childCount()) + return false; + + return true; +} + +bool GetInfo_PCI (TQListView *lbox) +{ + FILE *pipe; + TQFile *pcicontrol; + TQString s, cmd; + TQListViewItem *olditem = 0; + + pcicontrol = new TQFile("/usr/sbin/pciconf"); + + if (!pcicontrol->exists()) { + delete pcicontrol; + pcicontrol = new TQFile("/usr/X11R6/bin/scanpci"); + if (!pcicontrol->exists()) { + delete pcicontrol; + pcicontrol = new TQFile("/usr/X11R6/bin/pcitweak"); + if (!pcicontrol->exists()) { + TQString s; + s = i18n("Could not find any programs with which to query your system's PCI information"); + (void) new TQListViewItem(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 TQListViewItem(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 TQListViewItem(lbox, olditem, s); + return true; + } + + return true; +} + +bool GetInfo_Partitions (TQListView *lbox) +{ + struct fstab *fstab_ent; + + if (setfsent() != 1) /* Try to open fstab */ { + int s_err = errno; + TQString s; + s = i18n("Could not check filesystem info: "); + s += strerror(s_err); + (void)new TQListViewItem(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 TQListViewItem(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 (TQListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} + +bool GetInfo_Devices (TQListView *lbox) +{ + TQFile *f = new TQFile("/var/run/dmesg.boot"); + if (f->open(IO_ReadOnly)) { + TQTextStream qts(f); + TQDict<TQListViewItem> lv_items; + Device *dev; + TQString 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 TQListViewItem(lbox, dev->name, dev->description) ); + } + } else { + TQListViewItem *parent=lv_items[controller]; + if (parent && !lv_items[dev->name]) { + lv_items.insert(dev->name, new TQListViewItem(parent, dev->name, dev->description) ); + } + } + } + return true; + } + return false; +} + +TQString GetController(const TQString &line) +{ + if ( ( (line.startsWith("ad")) || (line.startsWith("afd")) || (line.startsWith("acd")) ) && (line.find(":") < 6) ) { + TQString 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=TQString::null; + if (!controller.isNull()) + return controller; + } + if (line.find(" on ") != -1) { + TQString controller; + controller = line; + controller.remove(0, controller.find(" on ")+4); + if (controller.find(" ") != -1) + controller.remove(controller.find(" "), controller.length()); + return controller; + } + return TQString::null; +} + +Device *GetDevice(const TQString &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) +{ + TQListView *lbox = (TQListView *)arg; + if (strcmp(rman->dm_desc, "Interrupt request lines")==0) { + (void)new TQListViewItem(lbox, 0, rman->dm_desc); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return(0); +} + +int print_dma(struct devinfo_rman *rman, void *arg) +{ + TQListView *lbox = (TQListView *)arg; + if (strcmp(rman->dm_desc, "DMA request lines")==0) { + (void)new TQListViewItem(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) +{ + TQListView *lbox = (TQListView *)arg; + + if (strcmp(rman->dm_desc, "I/O ports")==0) { + (void)new TQListViewItem(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 TQListViewItem(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; + + TQListView *lbox; + + lbox = (TQListView *)arg; + + TQString 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 TQListViewItem(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..367e1657b --- /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( TQListView * ) +{ + return false; +} + +bool GetInfo_IRQ( TQListView * ) +{ + return false; +} + +bool GetInfo_DMA( TQListView * ) +{ + return false; +} + +bool GetInfo_PCI( TQListView * ) +{ + return false; +} + +bool GetInfo_IO_Ports( TQListView * ) +{ + return false; +} + +bool GetInfo_Sound( TQListView * ) +{ + return false; +} + +bool GetInfo_Devices( TQListView * ) +{ + return false; +} + +bool GetInfo_SCSI( TQListView * ) +{ + return false; +} + +bool GetInfo_Partitions( TQListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( TQListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + +/* Generic GetInfo? ~Jahshan */ +bool GetInfo_CD_ROM(TQListView * lBox) +{ + return false; +} diff --git a/kcontrol/info/info_hpux.cpp b/kcontrol/info/info_hpux.cpp new file mode 100644 index 000000000..82c7cbdad --- /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 <tqfile.h> +#include <tqfontmetrics.h> +#include <tqtextstream.h> + + +#define INFO_CPU_AVAILABLE +# define INFO_CPU_MODEL "/bin/model" // as pipe !! + +#define INFO_IRQ_AVAILABLE + +#define INFO_DMA_AVAILABLE + +#define INFO_PCI_AVAILABLE +# define INFO_PCI "" // Please, who know it ???? +# define INFO_PCI_EISA "/etc/eisa/system.sci" // File ! + +#define INFO_IOPORTS_AVAILABLE +# define INFO_IOPORTS_1 "/etc/dmesg" // as pipe ! +# define INFO_IOPORTS_2 "/usr/sbin/dmesg" // as pipe ! + +#define INFO_SOUND_AVAILABLE + +#define INFO_DEVICES_AVAILABLE +# define INFO_DEVICES "/etc/ioscan" // as pipe !! + +#define INFO_SCSI_AVAILABLE + +#define INFO_PARTITIONS_AVAILABLE +# define INFO_PARTITIONS_1 FSTAB // = "/etc/fstab" (in fstab.h) +# define INFO_PARTITIONS_2 "/etc/checklist" + +#define INFO_XSERVER_AVAILABLE + + + +/* The following table is from an HP-UX 10.20 System + build out of the files + "/usr/lib/sched.models" + or + "/opt/langtools/lib/sched.models" + If you have more entries, then please add them or send them to me! +*/ + +// entries for PA_REVISION[] +enum V_ENTRIES + { V_1x0, + V_1x1, V_1x1a, V_1x1b, V_1x1c, V_1x1d, V_1x1e, + V_2x0, + V_LAST }; + +static const char PA_REVISION[V_LAST][7] + = { "1.0", + "1.1", "1.1a", "1.1b", "1.1c", "1.1d", "1.1e", + "2.0" }; + +// entries for PA_NAME[] +enum PA_ENTRIES + { PA7000, + PA7100, PA7100LC, PA7200, PA7300, + PA8000, PA8200, PA8500, + PARISC_PA_LAST }; + +static const char PA_NAME[PARISC_PA_LAST][11] + = { "PA7000", + "PA7100", "PA7100LC", "PA7200", "PA7300", + "PA8000", "PA8200", "PA8500" }; + +struct _type_LOOKUPTABLE { + char Name[8]; + unsigned short parisc_rev; // = enum V_ENTRIES + unsigned short parisc_name; // = enum PA_ENTRIES +}; + + +static const struct _type_LOOKUPTABLE PA_LOOKUPTABLE[] = { +/* VERSION A.00.07 + (there seems to exist several different files with same version-number !)*/ +{ "600" ,V_1x0 ,PA7000 }, +{ "635" ,V_1x0 ,PA7000 }, +{ "645" ,V_1x0 ,PA7000 }, +{ "700" ,V_1x1 ,PA7000 }, +{ "705" ,V_1x1a ,PA7000 }, +{ "710" ,V_1x1a ,PA7000 }, +{ "712" ,V_1x1c ,PA7100LC }, +{ "715" ,V_1x1c ,PA7100LC }, +{ "720" ,V_1x1a ,PA7000 }, +{ "722" ,V_1x1c ,PA7100LC }, +{ "725" ,V_1x1c ,PA7100LC }, +{ "728" ,V_1x1d ,PA7200 }, +{ "730" ,V_1x1a ,PA7000 }, +{ "735" ,V_1x1b ,PA7100 }, +{ "742" ,V_1x1b ,PA7100 }, +{ "743" ,V_1x1b ,PA7100 }, // or a 1.1c,PA7100LC !! +{ "744" ,V_1x1e ,PA7300 }, +{ "745" ,V_1x1b ,PA7100 }, +{ "747" ,V_1x1b ,PA7100 }, +{ "750" ,V_1x1a ,PA7000 }, +{ "755" ,V_1x1b ,PA7100 }, +{ "770" ,V_1x1d ,PA7200 }, +{ "777" ,V_1x1d ,PA7200 }, +{ "778" ,V_1x1e ,PA7300 }, +{ "779" ,V_1x1e ,PA7300 }, +{ "780" ,V_2x0 ,PA8000 }, +{ "781" ,V_2x0 ,PA8000 }, +{ "782" ,V_2x0 ,PA8200 }, +{ "783" ,V_2x0 ,PA8500 }, +{ "785" ,V_2x0 ,PA8500 }, +{ "800" ,V_1x0 ,PA7000 }, // and one with: 2.0 / PA8000 +{ "801" ,V_1x1c ,PA7100LC }, +{ "802" ,V_2x0 ,PA8000 }, +{ "803" ,V_1x1e ,PA7300 }, +{ "804" ,V_2x0 ,PA8000 }, +{ "806" ,V_1x1c ,PA7100LC }, +{ "807" ,V_1x1a ,PA7000 }, +{ "808" ,V_1x0 ,PA7000 }, +{ "809" ,V_1x1d ,PA7200 }, +{ "810" ,V_2x0 ,PA8000 }, +{ "811" ,V_1x1c ,PA7100LC }, +{ "813" ,V_1x1e ,PA7300 }, +{ "815" ,V_1x0 ,PA7000 }, +{ "816" ,V_1x1c ,PA7100LC }, +{ "817" ,V_1x1a ,PA7000 }, +{ "819" ,V_1x1d ,PA7200 }, +{ "820" ,V_2x0 ,PA8000 }, +{ "821" ,V_1x1d ,PA7200 }, +{ "822" ,V_1x0 ,PA7000 }, +{ "825" ,V_1x0 ,PA7000 }, +{ "826" ,V_1x1c ,PA7100LC }, +{ "827" ,V_1x1a ,PA7000 }, +{ "829" ,V_1x1d ,PA7200 }, +{ "831" ,V_1x1d ,PA7200 }, +{ "832" ,V_1x0 ,PA7000 }, +{ "834" ,V_1x0 ,PA7000 }, +{ "835" ,V_1x0 ,PA7000 }, +{ "837" ,V_1x1a ,PA7000 }, +{ "839" ,V_1x1d ,PA7200 }, +{ "840" ,V_1x0 ,PA7000 }, +{ "841" ,V_1x1d ,PA7200 }, +{ "842" ,V_1x0 ,PA7000 }, +{ "845" ,V_1x0 ,PA7000 }, +{ "847" ,V_1x1a ,PA7000 }, +{ "849" ,V_1x1d ,PA7200 }, +{ "850" ,V_1x0 ,PA7000 }, +{ "851" ,V_1x1d ,PA7200 }, +{ "852" ,V_1x0 ,PA7000 }, +{ "855" ,V_1x0 ,PA7000 }, +{ "856" ,V_1x1c ,PA7100LC }, +{ "857" ,V_1x1a ,PA7000 }, +{ "859" ,V_1x1d ,PA7200 }, +{ "860" ,V_1x0 ,PA7000 }, +{ "861" ,V_2x0 ,PA8000 }, +{ "865" ,V_1x0 ,PA7000 }, +{ "869" ,V_1x1d ,PA7200 }, +{ "870" ,V_1x0 ,PA7000 }, +{ "871" ,V_2x0 ,PA8000 }, +{ "877" ,V_1x1a ,PA7000 }, +{ "879" ,V_2x0 ,PA8000 }, +{ "887" ,V_1x1b ,PA7100 }, +{ "889" ,V_2x0 ,PA8000 }, +{ "890" ,V_1x0 ,PA7000 }, +{ "891" ,V_1x1b ,PA7100 }, +{ "892" ,V_1x1b ,PA7100 }, +{ "893" ,V_2x0 ,PA8000 }, +{ "895" ,V_2x0 ,PA8000 }, +{ "896" ,V_2x0 ,PA8000 }, +{ "897" ,V_1x1b ,PA7100 }, +{ "898" ,V_2x0 ,PA8200 }, +{ "899" ,V_2x0 ,PA8200 }, +{ "900" ,V_1x0 ,PA7000 }, +{ "B115" ,V_1x1e ,PA7300 }, +{ "B120" ,V_1x1e ,PA7300 }, +{ "B132L" ,V_1x1e ,PA7300 }, +{ "B160L" ,V_1x1e ,PA7300 }, +{ "B180L" ,V_1x1e ,PA7300 }, +{ "C100" ,V_1x1d ,PA7200 }, +{ "C110" ,V_1x1d ,PA7200 }, +{ "C115" ,V_1x1e ,PA7300 }, +{ "C120" ,V_1x1e ,PA7300 }, +{ "C130" ,V_2x0 ,PA8000 }, +{ "C140" ,V_2x0 ,PA8000 }, +{ "C160L" ,V_1x1e ,PA7300 }, +{ "C160" ,V_2x0 ,PA8000 }, +{ "C180L" ,V_1x1e ,PA7300 }, +{ "C180-XP" ,V_2x0 ,PA8000 }, +{ "C180" ,V_2x0 ,PA8000 }, +{ "C200+" ,V_2x0 ,PA8200 }, +{ "C230+" ,V_2x0 ,PA8200 }, +{ "C240+" ,V_2x0 ,PA8200 }, +{ "CB260" ,V_2x0 ,PA8200 }, +{ "D200" ,V_1x1d ,PA7200 }, // or: 1.1c, PA7100LC +{ "D210" ,V_1x1d ,PA7200 }, // or: 1.1c, PA7100LC +{ "D220" ,V_1x1e ,PA7300 }, +{ "D230" ,V_1x1e ,PA7300 }, +{ "D250" ,V_1x1d ,PA7200 }, +{ "D260" ,V_1x1d ,PA7200 }, +{ "D270" ,V_2x0 ,PA8000 }, +{ "D280" ,V_2x0 ,PA8000 }, +{ "D310" ,V_1x1c ,PA7100LC }, +{ "D320" ,V_1x1e ,PA7300 }, +{ "D330" ,V_1x1e ,PA7300 }, +{ "D350" ,V_1x1d ,PA7200 }, +{ "D360" ,V_1x1d ,PA7200 }, +{ "D370" ,V_2x0 ,PA8000 }, +{ "D380" ,V_2x0 ,PA8000 }, +{ "D400" ,V_1x1d ,PA7200 }, +{ "D410" ,V_1x1d ,PA7200 }, +{ "D650" ,V_2x0 ,PA8000 }, +{ "DX0" ,V_1x1c ,PA7100LC }, +{ "DX5" ,V_1x1c ,PA7100LC }, +{ "DXO" ,V_1x1c ,PA7100LC }, +{ "E25" ,V_1x1c ,PA7100LC }, +{ "E35" ,V_1x1c ,PA7100LC }, +{ "E45" ,V_1x1c ,PA7100LC }, +{ "E55" ,V_1x1c ,PA7100LC }, +{ "F10" ,V_1x1a ,PA7000 }, +{ "F20" ,V_1x1a ,PA7000 }, +{ "F30" ,V_1x1a ,PA7000 }, +{ "G30" ,V_1x1a ,PA7000 }, +{ "G40" ,V_1x1a ,PA7000 }, +{ "G50" ,V_1x1b ,PA7100 }, +{ "G60" ,V_1x1b ,PA7100 }, +{ "G70" ,V_1x1b ,PA7100 }, +{ "H20" ,V_1x1a ,PA7000 }, +{ "H30" ,V_1x1a ,PA7000 }, +{ "H40" ,V_1x1a ,PA7000 }, +{ "H50" ,V_1x1b ,PA7100 }, +{ "H60" ,V_1x1b ,PA7100 }, +{ "H70" ,V_1x1b ,PA7100 }, +{ "I30" ,V_1x1a ,PA7000 }, +{ "I40" ,V_1x1a ,PA7000 }, +{ "I50" ,V_1x1b ,PA7100 }, +{ "I60" ,V_1x1b ,PA7100 }, +{ "I70" ,V_1x1b ,PA7100 }, +{ "J200" ,V_1x1d ,PA7200 }, +{ "J210XC" ,V_1x1d ,PA7200 }, +{ "J210" ,V_1x1d ,PA7200 }, +{ "J220" ,V_2x0 ,PA8000 }, +{ "J2240" ,V_2x0 ,PA8200 }, +{ "J280" ,V_2x0 ,PA8000 }, +{ "J282" ,V_2x0 ,PA8000 }, +{ "J400" ,V_2x0 ,PA8000 }, +{ "J410" ,V_2x0 ,PA8000 }, +{ "K100" ,V_1x1d ,PA7200 }, +{ "K200" ,V_1x1d ,PA7200 }, +{ "K210" ,V_1x1d ,PA7200 }, +{ "K230" ,V_1x1d ,PA7200 }, +{ "K250" ,V_2x0 ,PA8000 }, +{ "K260" ,V_2x0 ,PA8000 }, +{ "K370" ,V_2x0 ,PA8200 }, +{ "K380" ,V_2x0 ,PA8200 }, +{ "K400" ,V_1x1d ,PA7200 }, +{ "K410" ,V_1x1d ,PA7200 }, +{ "K420" ,V_1x1d ,PA7200 }, +{ "K430" ,V_1x1d ,PA7200 }, +{ "K450" ,V_2x0 ,PA8000 }, +{ "K460" ,V_2x0 ,PA8000 }, +{ "K470" ,V_2x0 ,PA8200 }, +{ "K570" ,V_2x0 ,PA8200 }, +{ "K580" ,V_2x0 ,PA8200 }, +{ "S700i" ,V_1x1e ,PA7300 }, +{ "S715" ,V_1x1e ,PA7300 }, +{ "S744" ,V_1x1e ,PA7300 }, +{ "S760" ,V_1x1e ,PA7300 }, +{ "T500" ,V_1x1c ,PA7100LC }, // or: 1.1b, PA7100 +{ "T520" ,V_1x1b ,PA7100 }, +{ "T540" ,V_2x0 ,PA8000 }, +{ "T600" ,V_2x0 ,PA8000 }, +{ "V2000" ,V_2x0 ,PA8000 }, +{ "V2200" ,V_2x0 ,PA8200 }, +{ "V2250" ,V_2x0 ,PA8200 }, +{ "V2500" ,V_2x0 ,PA8500 }, + +{ "" ,0 ,0 } /* Last Entry has to be empty. */ +}; + + + +/* Helper-Functions */ + +// Value() is defined in info.cpp !!! + +static bool Find_in_LOOKUPTABLE( TQListView *lBox, char *machine ) +{ char *Machine; + int len; + const struct _type_LOOKUPTABLE *Entry = PA_LOOKUPTABLE; + TQString str; + TQListViewItem* olditem = 0; + + + Machine = machine; // machine is like: "9000/715/D" + while ((*Machine) && (*Machine!='/')) + ++Machine; + + if (*Machine) + ++Machine; + else + Machine=machine; + + len = strlen(Machine); + + while (Entry->Name[0]) + { if (strncmp(Entry->Name,Machine,len)==0) + { + olditem = new TQListViewItem(lBox, olditem, i18n("PA-RISC Processor"), + TQString(PA_NAME[Entry->parisc_name])); + olditem = new TQListViewItem(lBox, olditem, i18n("PA-RISC Revision"), + TQString("PA-RISC ") + TQString(PA_REVISION[Entry->parisc_rev])); + return true; + } + else + ++Entry; // next Entry ! + } + + return false; +} + + +/* all following functions should return true, when the Information + was filled into the lBox-Widget. + returning false indicates, that information was not available. +*/ + + +bool GetInfo_CPU( TQListView *lBox ) +{ + FILE *pipe; + TQFile *model; + + struct pst_dynamic psd; + struct pst_static pst; + struct pst_processor pro; + struct utsname info; + TQString str,str2; + TQListViewItem* olditem = 0; + int maxwidth,i; + + if((pstat_getstatic(&pst, sizeof(pst), (size_t)1, 0) == -1) || + (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0)== -1)) { + *GetInfo_ErrorString = i18n("Could not get Information."); /* Error */ + return false; + } + + maxwidth = 0; + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + + uname(&info); + + olditem = new TQListViewItem(lBox, olditem, i18n("Machine"), info.machine); + + model = new TQFile(INFO_CPU_MODEL); + if (model->exists()) + { if ((pipe = popen(INFO_CPU_MODEL, "r"))) + { TQTextStream *t = new TQTextStream(pipe, IO_ReadOnly); + str = t->readLine(); + olditem = new TQListViewItem(lBox, olditem, i18n("Model"), str); + delete t; + } + delete pipe; + } + delete model; + + olditem = new TQListViewItem(lBox, olditem, i18n("Machine Identification Number"), + strlen(info.__idnumber) ? TQString(info.__idnumber) : i18n("(none)") ); + + if (psd.psd_proc_cnt<=0) + psd.psd_proc_cnt=1; // Minimum one CPU ! + + olditem = new TQListViewItem(lBox, olditem, i18n("Number of Active Processors"), + Value(psd.psd_proc_cnt)); + + pstat_getprocessor( &pro, sizeof(pro), 1, 0 ); + olditem = new TQListViewItem(lBox, olditem, i18n("CPU Clock"), + Value(pro.psp_iticksperclktick/10000) + " " + i18n("MHz")); + + switch(sysconf(_SC_CPU_VERSION)) + { case CPU_HP_MC68020: str2 = "Motorola 68020"; break; + case CPU_HP_MC68030: str2 = "Motorola 68030"; break; + case CPU_HP_MC68040: str2 = "Motorola 68040"; break; + case CPU_PA_RISC1_0: str2 = "PA-RISC 1.0"; break; + case CPU_PA_RISC1_1: str2 = "PA-RISC 1.1"; break; + case CPU_PA_RISC1_2: str2 = "PA-RISC 1.2"; break; + case CPU_PA_RISC2_0: +#if defined(_SC_KERNEL_BITS) + switch (sysconf(_SC_KERNEL_BITS)) { + case 64: str2 = "PA-RISC 2.0w (64 bit)"; break; + case 32: str2 = "PA-RISC 2.0n (32 bit)"; break; + default: str2 = "PA-RISC 2.0"; break; + }; break; +#else /* !defined(_SC_KERNEL_BITS) */ + str2 = "PA-RISC 2.0"; break; +#endif + default: str2 = i18n("(unknown)"); break; + } + + olditem = new TQListViewItem(lBox, olditem, i18n("CPU Architecture"), str2); + + Find_in_LOOKUPTABLE( lBox, info.machine );// try to get extended Information. + + for (i=PS_PA83_FPU; i<=PS_PA89_FPU; ++i) { + if ((1<<(i-1)) & pro.psp_coprocessor.psc_present) { + str = TQString( (i==PS_PA83_FPU) ? "PS_PA83_FPU":"PS_PA89_FPU" ) + + TQString(" (") + + TQString(((1<<(i-1))&pro.psp_coprocessor.psc_enabled) ? + i18n("enabled") : i18n("disabled") ) + + TQString(")"); + + olditem = new TQListViewItem(lBox, olditem, i18n("Numerical Coprocessor (FPU)"), str); + } + }// for(coprocessor..) + + str = Value(((pst.physical_memory*pst.page_size)/1024/1024)) + + TQString(" ") + + i18n("MB"); // Mega-Byte + olditem = new TQListViewItem(lBox, olditem, i18n("Total Physical Memory"), str); + + str = Value(pst.page_size) + TQString(" ") + i18n("Bytes"); + olditem = new TQListViewItem(lBox, olditem, i18n("Size of One Page"), str); + + return true; +} + +bool GetInfo_ReadfromFile( TQListView *lBox, const char *Name ) +{ + char buf[2048]; + + TQFile *file = new TQFile(Name); + TQListViewItem* olditem = 0; + + if(!file->open(IO_ReadOnly)) { + delete file; + return false; + } + + while (file->readLine(buf,sizeof(buf)-1) >= 0) + { if (strlen(buf)) + olditem = new TQListViewItem(lBox, olditem, TQString::fromLocal8Bit(buf)); + } + + file->close(); + delete file; + return (lBox->childCount()); +} + + +bool GetInfo_IRQ( TQListView * ) +{ + return false; +} + +bool GetInfo_DMA( TQListView * ) +{ + return false; +} + +bool GetInfo_PCI( TQListView *lBox ) +{ + return( GetInfo_ReadfromFile(lBox,INFO_PCI) + + GetInfo_ReadfromFile(lBox,INFO_PCI_EISA) ); +} + +bool GetInfo_IO_Ports( TQListView *lBox ) +{ + if (GetInfo_ReadfromPipe( lBox, INFO_IOPORTS_1, false )) + return true; + else + return GetInfo_ReadfromPipe( lBox, INFO_IOPORTS_2, false ); +} + + +bool GetInfo_Devices( TQListView *lBox ) +{ + return GetInfo_ReadfromPipe( lBox, INFO_DEVICES, false ); +} + +bool GetInfo_SCSI( TQListView *lBox ) +{ + return GetInfo_Devices( lBox ); +} +/* Parts taken from fsusage.c from the Midnight Commander (mc) + + Copyright (C) 1991, 1992 Free Software Foundation, In + + Return the number of TOSIZE-byte blocks used by + BLOCKS FROMSIZE-byte blocks, rounding away from zero. + TOSIZE must be positive. Return -1 if FROMSIZE is not positive. */ + +static long fs_adjust_blocks(long blocks, int fromsize, int tosize) +{ + if (tosize <= 0) + abort (); + if (fromsize <= 0) + return -1; + + if (fromsize == tosize) /* E.g., from 512 to 512. */ + return blocks; + else if (fromsize > tosize) /* E.g., from 2048 to 512. */ + return blocks * (fromsize / tosize); + else /* E.g., from 256 to 512. */ + return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize); +} + +/* Fill in the fields of FSP with information about space usage for + the filesystem on which PATH resides. + Return 0 if successful, -1 if not. */ + +#define CONVERT_BLOCKS(b) fs_adjust_blocks ((b), fsd.f_bsize, 512) + +static int get_fs_usage (char *path, long *l_total, long *l_avail) +{ struct statfs fsd; /* 4.3BSD, SunOS 4, HP-UX, AIX. */ + unsigned long fsu_blocks,fsu_bfree,fsu_bavail; + + *l_total = *l_avail = 0; + if (statfs (path, &fsd) < 0) + return -1; + + fsu_blocks = CONVERT_BLOCKS (fsd.f_blocks); + fsu_bfree = CONVERT_BLOCKS (fsd.f_bfree); + fsu_bavail = CONVERT_BLOCKS (fsd.f_bavail); + + *l_avail = getuid () ? fsu_bavail/2 : fsu_bfree/2; + *l_total = fsu_blocks/2; + + return 0; +} + + +// Some Ideas taken from garbazo from his source in info_fbsd.cpp + +bool GetInfo_Partitions (TQListView *lbox) +{ + #define NUMCOLS 5 + TQString Title[NUMCOLS]; + int n; + + struct fstab *fstab_ent; + struct statvfs svfs; + long total,avail; + TQString str; + TQString MB(i18n("MB")+ " "); // International Text for MB=Mega-Byte + + if (setfsent() != 1) // Try to open fstab + return false; + + Title[0] = i18n("Device"); + Title[1] = i18n("Mount Point"); + Title[2] = i18n("FS Type"); + Title[3] = i18n("Total Size"); + Title[4] = i18n("Free Size"); + + for (n=0; n<NUMCOLS; ++n) { + lbox->addColumn(Title[n] ); + } + + while ((fstab_ent=getfsent())!=NULL) { + /* fstab_ent->fs_type holds only "rw","xx","ro"... */ + memset(&svfs,0,sizeof(svfs)); + statvfs(fstab_ent->fs_file,&svfs); + get_fs_usage(fstab_ent->fs_file, &total, &avail); + + if (!strcmp(fstab_ent->fs_type,FSTAB_XX)) // valid drive ? + svfs.f_basetype[0] = 0; + + if(svfs.f_basetype[0]) { + new TQListViewItem(lbox, TQString(fstab_ent->fs_spec), + TQString(fstab_ent->fs_file) + TQString(" "), + (svfs.f_basetype[0] ? TQString(svfs.f_basetype) : i18n("n/a")), + Value((total+512)/1024,6) + MB, + Value((avail+512)/1024,6) + MB); + } + else { + new TQListViewItem(lbox, TQString(fstab_ent->fs_spec), + TQString(fstab_ent->fs_file) + TQString(" "), + (svfs.f_basetype[0] ? TQString(svfs.f_basetype) : i18n("n/a"))); + } + + } + endfsent(); + + return true; +} + + +bool GetInfo_XServer_and_Video( TQListView *lBox ) +{ + lBox = lBox; + return GetInfo_XServer_Generic( lBox ); +} + + + + + +#ifndef HAVE_ALIB_H + +bool GetInfo_Sound( TQListView *lBox ) +{ lBox = lBox; + *GetInfo_ErrorString = i18n("Audio-Support (Alib) was disabled during configuration and compile-time."); + return false; +} + +#else // defined(HAVE_ALIB_H) + +#include "Alib.h" + +static const char formatNames[6][15] = { + "ADFUnknown", "ADFMuLaw", "ADFALaw", + "ADFLin16", "ADFLin8", "ADFLin8Offset" }; + +/* handle typo in 1st release of Alib.h */ +#ifndef ARightOutputChMask +#define ARightOutputChMask ARighOutputChMask +#endif + + +bool GetInfo_Sound( TQListView *lBox ) +{ + Audio *audio; + long status; + char server[80]; + int i; + + TQString str,str2; + TQListViewItem* olditem = 0; + + // server = Hostname.... + server[0] = 0; + audio = AOpenAudio( server, &status ); + if( status ) { + *GetInfo_ErrorString = i18n("Unable to open Audio-Server (Alib)."); + return false; + } + + lBox->addColumn(i18n("Information") ); + lBox->addColumn(i18n("Value") ); + + olditem = new TQListViewItem(lBox, olditem, i18n("Audio Name"), TQString(audio->audio_name)); + olditem = new TQListViewItem(lBox, olditem, i18n("Vendor"), TQString(audio->vendor)); + olditem = new TQListViewItem(lBox, olditem, i18n("Alib Version"), + Value(audio->alib_major_version) + TQString(".") + + Value(audio->alib_minor_version)); + + olditem = new TQListViewItem(lBox, olditem, i18n("Protocol Revision"), + Value(audio->proto_major_version) + TQString(".") + + Value(audio->proto_minor_version)); + + olditem = new TQListViewItem(lBox, olditem, i18n("Vendor Number"), + Value(audio->vnumber)); + + olditem = new TQListViewItem(lBox, olditem, i18n("Release"), + Value(audio->release)); + + olditem = new TQListViewItem(lBox, olditem, i18n("Byte Order"), + TQString((audio->byte_order==ALSBFirst)? i18n("ALSBFirst (LSB)"): + ((audio->byte_order==AMSBFirst)? i18n("AMSBFirst (MSB)"): + i18n("Invalid Byteorder.")) )); + + olditem = new TQListViewItem(lBox, olditem, i18n("Bit Order"), + TQString((audio->sound_bit_order==ALeastSignificant)? + i18n("ALeastSignificant (LSB)") : + ((audio->sound_bit_order==AMostSignificant) ? + i18n("AMostSignificant (MSB)"):i18n("Invalid Bitorder.")) )); + + olditem = new TQListViewItem(lBox, olditem, i18n("Data Formats")); + for ( i = 0; i < audio->n_data_format; i++ ) { + if (audio->data_format_list[i] <= ADFLin8Offset) + new TQListViewItem(olditem, TQString(formatNames[audio->data_format_list[i]])); + } + olditem->setOpen(true); + + olditem = new TQListViewItem(lBox, olditem, i18n("Sampling Rates")); + for ( i = 0; i < audio->n_sampling_rate; i++ ) { + new TQListViewItem(olditem, Value(audio->sampling_rate_list[i])); + } + olditem->setOpen(true); + + olditem = new TQListViewItem(lBox, olditem, i18n("Input Sources")); + if ( audio->input_sources & AMonoMicrophoneMask ) + new TQListViewItem(olditem, i18n("Mono-Microphone")); + if ( audio->input_sources & AMonoAuxiliaryMask ) + new TQListViewItem(olditem, i18n("Mono-Auxiliary")); + if ( audio->input_sources & ALeftMicrophoneMask ) + new TQListViewItem(olditem, i18n("Left-Microphone")); + if ( audio->input_sources & ARightMicrophoneMask ) + new TQListViewItem(olditem, i18n("Right-Microphone")); + if ( audio->input_sources & ALeftAuxiliaryMask ) + new TQListViewItem(olditem, i18n("Left-Auxiliary")); + if ( audio->input_sources & ARightAuxiliaryMask ) + new TQListViewItem(olditem, i18n("Right-Auxiliary")); + olditem->setOpen(true); + + olditem = new TQListViewItem(lBox, olditem,i18n("Input Channels")); + if ( audio->input_channels & AMonoInputChMask ) + new TQListViewItem(olditem, i18n("Mono-Channel")); + if ( audio->input_channels & ALeftInputChMask ) + new TQListViewItem(olditem, i18n("Left-Channel")); + if ( audio->input_channels & ARightInputChMask ) + new TQListViewItem(olditem, i18n("Right-Channel")); + olditem->setOpen(true); + + olditem = new TQListViewItem(lBox, olditem, i18n("Output Destinations")); + if ( audio->output_destinations & AMonoIntSpeakerMask ) + new TQListViewItem(olditem, i18n("Mono-InternalSpeaker")); + if ( audio->output_destinations & AMonoJackMask ) + new TQListViewItem(olditem, i18n("Mono-Jack")); + if ( audio->output_destinations & ALeftIntSpeakerMask ) + new TQListViewItem(olditem, i18n("Left-InternalSpeaker")); + if ( audio->output_destinations & ARightIntSpeakerMask ) + new TQListViewItem(olditem, i18n("Right-InternalSpeaker")); + if ( audio->output_destinations & ALeftJackMask ) + new TQListViewItem(olditem, i18n("Left-Jack")); + if ( audio->output_destinations & ARightJackMask ) + new TQListViewItem(olditem, i18n("Right-Jack")); + olditem->setOpen(true); + + olditem = new TQListViewItem(lBox, olditem, i18n("Output Channels")); + if ( audio->output_channels & AMonoOutputChMask ) + new TQListViewItem(olditem, i18n("Mono-Channel")); + if ( audio->output_channels & ALeftOutputChMask ) + new TQListViewItem(olditem, i18n("Left-Channel")); + if ( audio->output_channels & ARightOutputChMask ) + new TQListViewItem(olditem, i18n("Right-Channel")); + olditem->setOpen(true); + + + olditem = new TQListViewItem(lBox, olditem, i18n("Gain")); + new TQListViewItem(olditem, i18n("Input Gain Limits"), + Value(audio->max_input_gain)); + new TQListViewItem(olditem,i18n("Output Gain Limits"), + Value(audio->min_output_gain) + TQString(" ") + + Value(audio->max_output_gain)); + new TQListViewItem(olditem, i18n("Monitor Gain Limits"), + Value(audio->min_monitor_gain) + TQString(" ") + + Value(audio->max_monitor_gain)); + new TQListViewItem(olditem, i18n("Gain Restricted"), + Value(audio->gm_gain_restricted)); + olditem->setOpen(true); + + + olditem = new TQListViewItem(lBox, olditem,i18n("Lock"), + Value(audio->lock)); + olditem = new TQListViewItem(lBox, olditem, i18n("Queue Length"), + Value(audio->qlen)); + olditem = new TQListViewItem(lBox, olditem, i18n("Block Size"), + Value(audio->block_size)); + olditem = new TQListViewItem(lBox, olditem, i18n("Stream Port (decimal)"), + Value(audio->stream_port)); + olditem = new TQListViewItem(lBox, olditem, i18n("Ev Buffer Size"), + Value(audio->ev_buf_size)); + olditem = new TQListViewItem(lBox, olditem, i18n("Ext Number"), + Value(audio->ext_number)); + + ACloseAudio( audio, &status ); + + return true; +} + +#endif // defined(HAVE_ALIB_H) diff --git a/kcontrol/info/info_linux.cpp b/kcontrol/info/info_linux.cpp new file mode 100644 index 000000000..bbda9691d --- /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 <tqregexp.h> + +#include <tdeapplication.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(TQListView * lbox, const char *FileName, + const TQChar& splitChar, + TQListViewItem * lastitem = 0, + TQListViewItem ** newlastitem = 0) +{ + bool added = false; + TQFile 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; + } + TQTextStream stream(&file); + TQString line; + + while (!stream.atEnd()) { + TQString 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 TQListViewItem(lbox, lastitem, s1, s2); + added = true; + } + + file.close(); + if (newlastitem) + *newlastitem = lastitem; + + return added; +} + + + + +bool GetInfo_CPU(TQListView * lBox) +{ + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + return GetInfo_ReadfromFile(lBox, INFO_CPU, ':'); +} + + +bool GetInfo_IRQ(TQListView * lBox) +{ + lBox->setFont(TDEGlobalSettings::fixedFont()); + return GetInfo_ReadfromFile(lBox, INFO_IRQ, 0); +} + +bool GetInfo_DMA(TQListView * lBox) +{ + TQFile file(INFO_DMA); + + lBox->addColumn(i18n("DMA-Channel")); + lBox->addColumn(i18n("Used By")); + + if (file.exists() && file.open(IO_ReadOnly)) { + TQTextStream stream(&file); + TQString line; + TQListViewItem *child=0L; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + TQRegExp rx("^\\s*(\\S+)\\s*:\\s*(\\S+)"); + if (-1 != rx.search(line)) { + child = new TQListViewItem(lBox,child,rx.cap(1),rx.cap(2)); + } + } + } + file.close(); + } else { + return false; + } + + return true; +} + +bool GetInfo_PCI(TQListView * 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(TQListView * lBox) +{ + lBox->addColumn(i18n("I/O-Range")); + lBox->addColumn(i18n("Used By")); + return GetInfo_ReadfromFile(lBox, INFO_IOPORTS, ':'); +} + +bool GetInfo_Sound(TQListView * 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(TQListView * lBox) +{ + TQFile file; + TQListViewItem *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)) { + TQTextStream stream(&file); + TQString line; + TQListViewItem *parent=0L, *child=0L; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + if (-1 != line.find("character device",0,false)) { + parent = new TQListViewItem(lBox,parent,i18n("Character Devices")); + parent->setPixmap(0,SmallIcon("chardevice")); + parent->setOpen(true); + } else if (-1 != line.find("block device",0,false)) { + parent = new TQListViewItem(lBox,parent,i18n("Block Devices")); + parent->setPixmap(0,SmallIcon("blockdevice")); + parent->setOpen(true); + } else { + TQRegExp rx("^\\s*(\\S+)\\s+(\\S+)"); + if (-1 != rx.search(line)) { + if (parent) { + child = new TQListViewItem(parent,child,rx.cap(2),rx.cap(1)); + } else { + child = new TQListViewItem(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)) { + TQTextStream stream(&file); + TQString line; + TQListViewItem *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()) { + TQRegExp rx("^\\s*(\\S+)\\s+(\\S+)"); + if (-1 != rx.search(line)) { + child = new TQListViewItem(misc,child,rx.cap(2),"10",rx.cap(1)); + } + } + } + file.close(); + } + + return true; +} + +bool GetInfo_SCSI(TQListView * lBox) +{ + return GetInfo_ReadfromFile(lBox, INFO_SCSI, 0); +} + +static void cleanPassword(TQString & str) +{ + int index = 0; + TQString 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(TQListView * 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(TQListView *lbox) +{ + int f, i, err; + int new_raw_devs = 1; + struct raw_config_request rq; + TQString devname; + TQString 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 = TQString("/dev/hd%1%2") + .arg(TQChar(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 = TQString("/dev/sd%1%2") + .arg(TQChar(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 = TQString("/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 = TQString("/dev/ida/c%1d%2") + .arg((int)rq.block_major-72) + .arg(minor&15); + break; + + default: devname = TQString("%1/%2") + .arg((int)rq.block_major) + .arg(minor); + + } + + /* TODO: get device size */ + TQString size = ""; + + new TQListViewItem(lbox, devname, + TQString(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(TQListView * lbox) +{ +#define NUMCOLS 6 + TQString Title[NUMCOLS]; + TQStringList 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; + TQString str, mountopts; + TQString 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.. */ + TQFile *file = new TQFile(INFO_MOUNTED_PARTITIONS); + if (file->open(IO_ReadOnly)) { + char buf[1024]; + while (file->readLine(buf, sizeof( buf )) > 0) { + str = TQString::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 = TQString(" ") + 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 TQListViewItem(lbox, TQString(FS_NAME) + " ", + TQString(FS_FILE) + " ", + TQString(FS_TYPE) + " ", + Value((int) (((total / 1024) + 512) / 1024), + 6) + MB, + Value((int) (((avail / 1024) + 512) / 1024), + 6) + MB, mountopts); + else + new TQListViewItem(lbox, TQString(FS_NAME), TQString(FS_FILE), + TQString(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(TQListView * lBox) +{ + return GetInfo_XServer_Generic(lBox); +} + +/* GetInfo for CD-ROM Info by Jahshan Bhatti */ +bool GetInfo_CD_ROM(TQListView * lBox) +{ + TQFile file(INFO_CD_ROM); + lBox->addColumn(i18n("Information")); + lBox->addColumn(i18n("Value")); + + if (file.exists() && file.open(IO_ReadOnly)) { + TQRegExp rx("(.+):\\s+(\\S.*)"); + TQTextStream stream(&file); + TQString line; + TQListViewItem *child = NULL; + + while (!stream.atEnd()) { + line = stream.readLine(); + if (!line.isEmpty()) { + if (-1 != rx.search(line)) { + TQString text = rx.cap(1); + TQString value = rx.cap(2); + if (!text.contains('#')) { + if (value == "0") + value = KStdGuiItem::no().plainText(); + if (value == "1") + value = KStdGuiItem::yes().plainText(); + } + child = new TQListViewItem(lBox,child,text,value); + } + } else { + child = new TQListViewItem(lBox,child,TQString::null,TQString::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..c2b7b953a --- /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 <tqfile.h> +#include <tqfontmetrics.h> +#include <tqstrlist.h> +#include <tqtextstream.h> + +#include <kdebug.h> +#include <tdeio/global.h> /* for TDEIO::convertSize() */ + +typedef struct + { + int string; + int name; + const char *title; + } hw_info_mib_list_t; + +bool GetInfo_CPU(TQListView *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; + TQString 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 = TQString::fromLocal8Bit(buf); + free(buf); + } + else { + value = TQString("Unknown"); + } + } + else { + len = sizeof(num); + sysctl(mib,2,&num,&len,NULL,0); + value = TQString::number(num); + } + new TQListViewItem(lBox, hw_info_mib->title, value); + } + + return true; +} + +// this is used to find out which devices are currently +// on system +static bool GetDmesgInfo(TQListView *lBox, const char *filter, + void func(TQListView *, TQString s)) +{ + TQFile *dmesg = new TQFile("/var/run/dmesg.boot"); + bool usepipe = false; + FILE *pipe = NULL; + TQTextStream *t; + bool seencpu = false; + TQString s; + bool found = false; + + if (dmesg->exists() && dmesg->open(IO_ReadOnly)) { + t = new TQTextStream(dmesg); + } + else { + delete dmesg; + pipe = popen("/sbin/dmesg", "r"); + if (!pipe) return false; + usepipe = true; + t = new TQTextStream(pipe, IO_ReadOnly); + } + + TQListViewItem *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 TQListViewItem(lBox, olditem, s); + found = true; + } + } + + delete t; + if (pipe) + pclose(pipe); + else { + dmesg->close(); + delete dmesg; + } + + return found; +} + + +void +AddIRQLine(TQListView *lBox, TQString 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 TQListViewItem(lBox, numstr, s); +} + +bool GetInfo_IRQ (TQListView *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 (TQListView *) +{ + return false; +} + +bool GetInfo_PCI (TQListView *lbox) +{ + if (!GetDmesgInfo(lbox, "at pci", NULL)) + new TQListViewItem(lbox, i18n("No PCI devices found.")); + return true; +} + +bool GetInfo_IO_Ports (TQListView *lbox) +{ + if (!GetDmesgInfo(lbox, "port 0x", NULL)) + new TQListViewItem(lbox, i18n("No I/O port devices found.")); + return true; +} + +bool GetInfo_Sound (TQListView *lbox) +{ + lbox->setSorting(false); + + if (!GetDmesgInfo(lbox, "audio", NULL)) + new TQListViewItem(lbox, i18n("No audio devices found.")); + + // append information for each audio devices found + TQListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + TQString 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 (TQListView *lBox) +{ + (void) GetDmesgInfo(lBox, NULL, NULL); + return true; +} + +bool GetInfo_SCSI (TQListView *lbox) +{ + if (!GetDmesgInfo(lbox, "scsibus", NULL)) + new TQListViewItem(lbox, i18n("No SCSI devices found.")); + + // remove the 'waiting %d seconds for devices to settle' message + TQListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + TQString s = lvitem->text(0); + + if (s.contains("seconds for devices to settle")) { + lbox->removeItem(lvitem); + break; + } + } + + return true; +} + +bool GetInfo_Partitions (TQListView *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]; + TQString 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] = TDEIO::convertSize(big[0]); + vv[1] = TQString::fromLatin1("%1 (%2%%)") + .arg(TDEIO::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] = TQString::number(mnt->f_files); + vv[3] = TQString::fromLatin1("%1 (%2%%) ") + .arg(mnt->f_ffree) + .arg(mnt->f_files ? mnt->f_ffree*100/mnt->f_files : 0); + + vv[4] = TQString::null; +#define MNTF(x) if (mnt->f_flags & MNT_##x) vv[4] += TQString::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 TQListViewItem(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 (TQListView *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..7b484da76 --- /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 <tqfile.h> +#include <tqfontmetrics.h> +#include <tqstrlist.h> +#include <tqtextstream.h> + +#include <kdebug.h> + +typedef struct + { + int string; + int name; + const char *title; + } hw_info_mib_list_t; + +bool GetInfo_CPU(TQListView *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; + TQString 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 = TQString::fromLocal8Bit(buf); + free(buf); + } + else { + value = TQString("Unknown"); + } + } + else { + len = sizeof(num); + sysctl(mib,2,&num,&len,NULL,0); + value.sprintf("%d", num); + } + new TQListViewItem(lBox, hw_info_mib->title, value); + } + + return true; +} + +// this is used to find out which devices are currently +// on system +static bool GetDmesgInfo(TQListView *lBox, const char *filter, + void func(TQListView *, TQString s, void **, bool)) +{ + TQFile *dmesg = new TQFile("/var/run/dmesg.boot"); + bool usepipe=false; + FILE *pipe=NULL; + TQTextStream *t; + bool seencpu=false; + void *opaque=NULL; + TQString s; + bool found=false; + + if (dmesg->exists() && dmesg->open(IO_ReadOnly)) { + t = new TQTextStream(dmesg); + } + else { + delete dmesg; + pipe = popen("/sbin/dmesg", "r"); + if (!pipe) return false; + usepipe = true; + t = new TQTextStream(pipe, IO_ReadOnly); + } + + TQListViewItem *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 TQListViewItem(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(TQListView *lBox, TQString s, void **opaque, bool ending) +{ + TQStrList *strlist = (TQStrList *) *opaque; + const char *str; + int pos, irqnum=0; + const char *p; + p = s.latin1(); + + if (!strlist) { + strlist = new TQStrList(); + *opaque = (void *) strlist; + } + if (ending) { + str = strlist->first(); + for(;str; str = strlist->next()) { + new TQListViewItem(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 (TQListView *lBox) +{ + lBox->addColumn(i18n("IRQ")); + lBox->addColumn(i18n("Device")); + (void) GetDmesgInfo(lBox, " irq ", AddIRQLine); + return true; +} + +bool GetInfo_DMA (TQListView *) +{ + return false; +} + +bool GetInfo_PCI (TQListView *lbox) +{ + if (!GetDmesgInfo(lbox, "at pci", NULL)) + new TQListViewItem(lbox, i18n("No PCI devices found.")); + return true; +} + +bool GetInfo_IO_Ports (TQListView *lbox) +{ + if (!GetDmesgInfo(lbox, "port 0x", NULL)) + new TQListViewItem(lbox, i18n("No I/O port devices found.")); + return true; +} + +bool GetInfo_Sound (TQListView *lbox) +{ + if (!GetDmesgInfo(lbox, "audio", NULL)) + new TQListViewItem(lbox, i18n("No audio devices found.")); + + // append information on any audio devices found + TQListViewItem *lvitem = lbox->firstChild(); + for(; lvitem; lvitem = lvitem->nextSibling()) { + TQString 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!=':') && (*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 (TQListView *lBox) +{ + (void) GetDmesgInfo(lBox, NULL, NULL); + return true; +} + +bool GetInfo_SCSI (TQListView *lbox) +{ + if (!GetDmesgInfo(lbox, "scsibus", NULL)) + new TQListViewItem(lbox, i18n("No SCSI devices found.")); + return true; +} + +bool GetInfo_Partitions (TQListView *lbox) +{ + TQString s; + char *line, *orig_line; + const char *device, *mountpoint, *type, *flags; + FILE *pipe = popen("/sbin/mount", "r"); + TQTextStream *t; + + if (!pipe) { + kdError(0) << i18n("Unable to run /sbin/mount.") << endl; + return false; + } + t = new TQTextStream(pipe, IO_ReadOnly); + + lbox->addColumn(i18n("Device")); + lbox->addColumn(i18n("Mount Point")); + lbox->addColumn(i18n("FS Type")); + lbox->addColumn(i18n("Mount Options")); + + TQListViewItem *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 TQListViewItem(lbox, olditem, device, mountpoint, + type, flags); + + free(orig_line); + } + + delete t; + pclose(pipe); + return true; +} + +bool GetInfo_XServer_and_Video (TQListView *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..5f18aebea --- /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 <tqdict.h> +#include <tqfile.h> +#include <tqfontmetrics.h> +#include <tqptrlist.h> +#include <tqstring.h> +#include <tqtextstream.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 (TQListView *lBox) +{ + + TQString 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 TQListViewItem(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 TQListViewItem(lBox, cpustring); + } + return true; + } + return false; +} + +bool GetInfo_IRQ (TQListView *) +{ + return false; +} + +bool GetInfo_DMA (TQListView *) +{ + return false; +} + +bool GetInfo_PCI (TQListView *) +{ + return false; +} + +bool GetInfo_IO_Ports (TQListView *) +{ + return false; +} + +bool GetInfo_Sound (TQListView *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 TQListViewItem(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 TQListViewItem(lBox, i18n("Manufacturer: %1").arg(manufacturer)); + return true; + } else { + return false; + } +#else + return false; +#endif +} + +bool GetInfo_SCSI (TQListView *lbox) +{ + return false; +} + +bool GetInfo_Partitions (TQListView *lbox) +{ + return false; +} + +bool GetInfo_XServer_and_Video (TQListView *lBox) +{ + return GetInfo_XServer_Generic( lBox ); +} + +bool GetInfo_Devices (TQListView *lbox) +{ + return false; +} diff --git a/kcontrol/info/info_sgi.cpp b/kcontrol/info/info_sgi.cpp new file mode 100644 index 000000000..7961d4e16 --- /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( TQListView *lBox ) +{ + TQString str; + char buf[256]; + + sysinfo(SI_ARCHITECTURE, buf, sizeof(buf)); + str = TQString::fromLocal8Bit(buf); + new TQListViewItem(lBox, str); + return true; +} + + +bool GetInfo_IRQ( TQListView * ) +{ + return false; +} + +bool GetInfo_DMA( TQListView * ) +{ + return false; +} + +bool GetInfo_PCI( TQListView * ) +{ + return false; +} + +bool GetInfo_IO_Ports( TQListView * ) +{ + return false; +} + +bool GetInfo_Sound( TQListView * ) +{ + return false; +} + +bool GetInfo_Devices( TQListView * ) +{ + return false; +} + +bool GetInfo_SCSI( TQListView * ) +{ + return false; +} + +bool GetInfo_Partitions( TQListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( TQListView *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..9f2b17e1b --- /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( TQListView *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 = TQString( 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 " + TQString( timetxt ); + } + } + + new TQListViewItem( lBox, inst, cputype, fputype, mhz, state ); + } + + // sorting_allowed = true; + lBox->setSorting( 0 ); + + return true; +} + +bool GetInfo_IRQ( TQListView * ) { + return false; +} + +bool GetInfo_DMA( TQListView * ) { + return false; +} + +bool GetInfo_PCI( TQListView * ) { + return false; +} + +bool GetInfo_IO_Ports( TQListView * ) { + return false; +} + +bool GetInfo_Sound( TQListView * ) { + return false; +} + +bool GetInfo_SCSI( TQListView * ) { + return false; +} + +bool GetInfo_Partitions( TQListView *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 TQListViewItem( + lBox, + mnt.mnt_special, + mnt.mnt_mountp, + mnt.mnt_fstype, + total, + avail, + TQString( timetxt ), + mnt.mnt_mntopts + ); + } + fclose( mnttab ); + + lBox->setSorting( 0 ); + // sorting_allowed = true; + + return true; +} + +bool GetInfo_XServer_and_Video( TQListView *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 + */ +TQListViewItem *mktree( TQListViewItem *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 TQListViewItem( 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 TQListViewItem( (TQListViewItem *) arg, + di_minor_name( minor )); + item->setExpandable( true ); + item->setOpen( false ); + new TQListViewItem( item, i18n( "Spectype:" ), + (di_minor_spectype( minor ) == S_IFCHR) + ? i18n( "character special" ) + : i18n( "block special" )); + type = di_minor_nodetype( minor ); + new TQListViewItem( 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 TQListViewItem( 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 + */ +TQString 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++ ) { + TQString 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++ ) { + TQString 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 = (TQListViewItem *) 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, TQString( 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 TQListViewItem( parent, + i18n( "Driver Name:" ), + (drivername == NULL) + ? i18n( "(driver not attached)" ) + : drivername ); + previous = new TQListViewItem( 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 TQListViewItem( parent, previous, + i18n( "Compatible Names:" ), compatnames ); + + previous = new TQListViewItem( parent, previous, + i18n( "Physical Path:" ), TQString( path )); + + /* + * dump the node's property list (if any) + */ + if( (prop = di_prop_next( node, DI_PROP_NIL )) != DI_PROP_NIL ) { + previous = new TQListViewItem( parent, previous, i18n( "Properties" )); + previous->setExpandable( true ); + previous->setOpen( false ); + do { + /* + * property type & value + */ + QListViewItem *tmp, + *prev; + tmp = new TQListViewItem( previous, di_prop_name( prop )); + tmp->setExpandable( true ); + tmp->setOpen( false ); + prev = new TQListViewItem( tmp, i18n( "Type:" ), + prop_type_str( prop )); + new TQListViewItem( 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 TQListViewItem( 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( TQListView *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 TQListViewItem( 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( TQListView * ) { + 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..ba491a50e --- /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( TQListView *lBox, char *Name, char splitchar ) +{ + TQString str; + char buf[512]; + + TQFile *file = new TQFile(Name); + TQListViewItem* olditem = 0; + + if(!file->open(IO_ReadOnly)) { + delete file; + return false; + } + + while (file->readLine(buf,sizeof(buf)-1) > 0) { + if (strlen(buf)) { + 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; + } + + TQString s1 = TQString::fromLocal8Bit(buf); + TQString s2 = s1.mid(s1.find(splitchar)+1); + + s1.truncate(s1.find(splitchar)); + if(!(s1.isEmpty() || s2.isEmpty())) + olditem = new TQListViewItem(lBox, olditem, s1, s2); + } + } + file->close(); + + delete file; + return true; +} + +bool GetInfo_CPU( TQListView *lBox ) +{ + char buf[256]; + + sysinfo(SI_ARCHITECTURE, buf, sizeof(buf)); + new TQListViewItem(lBox, TQString::fromLocal8Bit(buf)); + return true; +} + + +bool GetInfo_IRQ( TQListView * ) +{ + return false; +} + +bool GetInfo_DMA( TQListView * ) +{ + return false; +} + +bool GetInfo_PCI( TQListView *lBox ) +{ + char buf[256]; + + sysinfo(SI_BUSTYPES, buf, sizeof(buf)); + new TQListViewItem(lBox, TQString::fromLocal8Bit(buf)); + return true; +} + +bool GetInfo_IO_Ports( TQListView * ) +{ + return false; +} + +bool GetInfo_Sound( TQListView *lBox ) +{ + if ( GetInfo_ReadfromFile( lBox, INFO_DEV_SNDSTAT, 0 )) + return true; + else + return false; +} + +bool GetInfo_Devices( TQListView * ) +{ + return false; +} + +bool GetInfo_SCSI( TQListView * ) +{ + return false; +} + +bool GetInfo_Partitions( TQListView * ) +{ + return false; +} + +bool GetInfo_XServer_and_Video( TQListView *lBox ) +{ + return GetInfo_XServer_Generic( lBox ); +} + diff --git a/kcontrol/info/interrupts.desktop b/kcontrol/info/interrupts.desktop new file mode 100644 index 000000000..4be049dfe --- /dev/null +++ b/kcontrol/info/interrupts.desktop @@ -0,0 +1,240 @@ +[Desktop Entry] +Exec=tdecmshell interrupts +Icon=kcmmemory +Type=Application +X-DocPath=kcontrol/interrupts/index.html +Categories=Qt;TDE;X-TDE-settings-information; + + +X-TDE-Library=info +X-TDE-FactoryName=irq +X-TDE-ParentApp=kcontrol + +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..37628f71a --- /dev/null +++ b/kcontrol/info/ioports.desktop @@ -0,0 +1,242 @@ +[Desktop Entry] +Exec=tdecmshell ioports +Icon=kcmmemory +Type=Application +X-DocPath=kcontrol/ioports/index.html +Categories=Qt;TDE;X-TDE-settings-information; + + +X-TDE-Library=info +X-TDE-FactoryName=ioports +X-TDE-ParentApp=kcontrol + +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..780b6532e --- /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 TDECModule *create_cpu(TQWidget *parent, const char * /*name*/) + { +#ifdef INFO_CPU_AVAILABLE + return new KInfoListWidget(i18n("Processor(s)"), parent, "kcminfo", GetInfo_CPU); +#else + return 0; +#endif + } + + KDE_EXPORT TDECModule *create_irq(TQWidget *parent, const char * /*name*/) + { +#ifdef INFO_IRQ_AVAILABLE + return new KInfoListWidget(i18n("Interrupt"), parent, "kcminfo", GetInfo_IRQ); +#else + return 0; +#endif + } + + KDE_EXPORT TDECModule *create_pci(TQWidget *parent, const char * /*name*/) + { +#ifdef INFO_PCI_AVAILABLE + return new KInfoListWidget(i18n("PCI"), parent, "kcminfo", GetInfo_PCI); +#else + return 0; +#endif + } + + KDE_EXPORT TDECModule *create_dma(TQWidget *parent, const char * /*name*/) + { +#ifdef INFO_DMA_AVAILABLE + return new KInfoListWidget(i18n("DMA-Channel"), parent, "kcminfo", GetInfo_DMA); +#else + return 0; +#endif + } + + KDE_EXPORT TDECModule *create_ioports(TQWidget *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 TDECModule *create_sound(TQWidget *parent, const char * /*name*/) + { +#ifdef INFO_SOUND_AVAILABLE + return new KInfoListWidget(i18n("Soundcard"), parent, "kcminfo", GetInfo_Sound); +#else + return 0; +#endif + } + + KDE_EXPORT TDECModule *create_scsi(TQWidget *parent, const char * /*name*/) + { +#ifdef INFO_SCSI_AVAILABLE + return new KInfoListWidget(i18n("SCSI"), parent, "kcminfo", GetInfo_SCSI); +#else + return 0; +#endif + } + + KDE_EXPORT TDECModule *create_devices(TQWidget *parent, const char * /*name*/) + { +#ifdef INFO_DEVICES_AVAILABLE + return new KInfoListWidget(i18n("Devices"), parent, "kcminfo", GetInfo_Devices); +#else + return 0; +#endif + } + + KDE_EXPORT TDECModule *create_partitions(TQWidget *parent, const char * /*name*/) + { +#ifdef INFO_PARTITIONS_AVAILABLE + return new KInfoListWidget(i18n("Partitions"), parent, "kcminfo", GetInfo_Partitions); +#else + return 0; +#endif + } + + KDE_EXPORT TDECModule *create_xserver(TQWidget *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 TDECModule *create_memory(TQWidget *parent, const char * /*name*/) + { + return new KMemoryWidget(parent, "kcminfo"); + } + + KDE_EXPORT TDECModule *create_opengl(TQWidget *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 TDECModule *create_cdinfo(TQWidget *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..76d68d675 --- /dev/null +++ b/kcontrol/info/memory.cpp @@ -0,0 +1,475 @@ +/* + * 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 <tqlayout.h> +#include <tqpainter.h> +#include <tqdrawutil.h> +#include <tqtooltip.h> + +#include <tdeglobal.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 TQLabel *MemSizeLabel[MEM_LAST_ENTRY][2]; + +enum { MEM_RAM_AND_HDD, MEM_RAM, MEM_HDD, MEM_LAST }; +static TQWidget *Graph[MEM_LAST]; +static TQLabel *GraphLabel[MEM_LAST]; + +#define SPACING 16 + +static TQString formatted_unit(t_memsize value) +{ + if (value > (1024 * 1024)) + if (value > (1024 * 1024 * 1024)) + return i18n("%1 GB").arg(TDEGlobal::locale()->formatNumber(value / (1024 * 1024 * 1024.0), 2)); + else + return i18n("%1 MB").arg(TDEGlobal::locale()->formatNumber(value / (1024 * 1024.0), 2)); + else + return i18n("%1 KB").arg(TDEGlobal::locale()->formatNumber(value / 1024.0, 2)); +} + +KMemoryWidget::KMemoryWidget(TQWidget * parent, const char *name) +: TDECModule(parent, name) +{ + + TDEAboutData *about = + new TDEAboutData(I18N_NOOP("kcminfo"), + I18N_NOOP("TDE Panel Memory Information Control Module"), + 0, 0, TDEAboutData::License_GPL, + I18N_NOOP("(c) 1998 - 2002 Helge Deller")); + + about->addAuthor("Helge Deller", 0, "deller@gmx.de"); + setAboutData( about ); + + TQString title, initial_str; + TQLabel *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."); + + TQVBoxLayout *top = new TQVBoxLayout(this, 0, KDialog::spacingHint()); + + TQHBoxLayout *hbox = new TQHBoxLayout(); + top->addLayout(hbox); + + /* stretch the left side */ + hbox->addStretch(); + + /* first create the Informationtext-Widget */ + TQVBoxLayout *vbox = new TQVBoxLayout(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 space:"); + break; + case FREESWAP_MEM: + title = i18n("Free swap space:"); + break; + default: + title = ""; + break; + }; + Widget = new TQLabel(title, this); + Widget->setAlignment(AlignLeft); + vbox->addWidget(Widget, 1); + } + + /* then the memory-content-widgets */ + for (j = 0; j < 2; j++) { + vbox = new TQVBoxLayout(hbox, 0); + for (i = TOTAL_MEM; i < MEM_LAST_ENTRY; ++i) { + if (i == SWAP_MEM) + vbox->addSpacing(SPACING); + Widget = new TQLabel(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 */ + TQString hint; + hbox = new TQHBoxLayout(top, 1); + for (i = MEM_RAM_AND_HDD; i < MEM_LAST; i++) { + hbox->addSpacing(SPACING); + vbox = new TQVBoxLayout(hbox); + + switch (i) { + case MEM_RAM_AND_HDD: + title = i18n("Total Memory"); + hint = i18n("This graph gives you an overview of the " + "usage of <b>all available memory</b> (the sum of " + "physical memory and swap space) in your system."); + break; + case MEM_RAM: + title = i18n("Physical Memory"); + hint = i18n("This graph gives you an overview of " + "the usage of <b>physical memory</b> in your system." + "<p>Most operating systems (including Linux) " + "will use as much of the available physical " + "memory as possible for a disk cache, " + "to speed up the reading and writing of files. " + "<p>This means that if you are seeing a small amount " + "of <b>Free Physical Memory</b> and a large amount of " + "<b>Disk Cache</b>, your system is well configured."); + break; + case MEM_HDD: + title = i18n("Swap Space"); + hint = i18n("Swap space is the <b>virtual memory</b> " + "available to the system. " + "<p>It will be used when needed, and is provided " + "through one or more swap partitions and/or swap files."); + break; + default: + hint = title = TQString::null; + break; + }; + + if (hint.length()) + hint = "<qt>" + hint + "</qt>"; + + Widget = new TQLabel("<b>" + title + "</b>", this); + Widget->setAlignment(AlignCenter); + TQToolTip::add(Widget, hint); + vbox->addWidget(Widget); + vbox->addSpacing(SPACING / 2); + + TQWidget *g = new TQWidget(this); + g->setMinimumWidth(2 * SPACING); + g->setMinimumHeight(3 * SPACING); + g->setBackgroundMode(NoBackground); + TQToolTip::add(g, hint); // add the tooltip + Graph[i] = g; + vbox->addWidget(g, 2); + vbox->addSpacing(SPACING / 2); + + Widget = new TQLabel(this); /* xx MB used. */ + Widget->setAlignment(AlignCenter); + TQToolTip::add(Widget, hint); + GraphLabel[i] = Widget; + vbox->addWidget(Widget); + } + hbox->addSpacing(SPACING); + + timer = new TQTimer(this); + timer->start(100); + TQObject::connect(timer, TQT_SIGNAL(timeout()), this, + TQT_SLOT(update_Values())); + + update(); +} + +KMemoryWidget::~KMemoryWidget() +{ + /* stop the timer */ + timer->stop(); +} + + +TQString 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, + TQColor * color, + TQString *text) +{ + TQWidget *graph = Graph[widgetindex]; + int width = graph->width(); + int height = graph->height(); + TQPixmap pm(width, height); + TQPainter paint; + + paint.begin(&pm, this); + + TQPen pen(TQColor(0, 0, 0)); + + if (! ZERO_IF_NO_INFO(total)) { + paint.fillRect(1, 1, width - 2, height - 2, + TQBrush(TQColor(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) * 1000 + 5) / (total * 10); +#else + /* prevent integer overflow with usage of double type */ + percent = (int) ((((double)last_used) * 1000 + 5) / (total * 10)); +#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, + TQString("%1 %2%").arg(*text).arg(percent)); + } + } + + startline -= localheight; + + ++used; + ++color; + ++text; + } + + /* draw surrounding box */ + paint.setPen(pen); + TQRect 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; + TQLabel *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(TDEGlobal::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_DATA; /* used+shared */ + ram_text[1] = i18n("Disk Buffers"); + ram_colors[1] = COLOR_USED_BUFFER; /* buffers */ + ram_text[2] = i18n("Disk Cache"); + ram_colors[2] = COLOR_USED_CACHE; /* 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: */ + /* used[0] already contains the amount of used swap */ + used[2] = Memory_Info[FREE_MEM] + ZERO_IF_NO_INFO(Memory_Info[FREESWAP_MEM]); + used[1] = Memory_Info[TOTAL_MEM] - Memory_Info[FREE_MEM]; + if (!all_colors_initialized) { + all_colors_initialized = true; + all_text[0] = i18n("Used Memory (swap part)"); + all_colors[0] = COLOR_USED_SWAP; /* used swap */ + all_text[1] = i18n("Used Memory (physical part)"); + all_colors[1] = COLOR_USED_RAM; /* used ram */ + all_text[2] = i18n("Free Memory (total)"); + all_colors[2] = COLOR_FREE_MEMORY; /* free ram+swap*/ + } + Display_Graph(MEM_RAM_AND_HDD, 3, + ok1 ? Memory_Info[TOTAL_MEM] + ZERO_IF_NO_INFO(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..1a84db8e5 --- /dev/null +++ b/kcontrol/info/memory.desktop @@ -0,0 +1,249 @@ +[Desktop Entry] +Exec=tdecmshell memory +Icon=kcmmemory +Type=Application +X-DocPath=kcontrol/memory/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=memory +X-TDE-ParentApp=kcontrol + +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;TDE;X-TDE-settings-information; + diff --git a/kcontrol/info/memory.h b/kcontrol/info/memory.h new file mode 100644 index 000000000..6fd2cd093 --- /dev/null +++ b/kcontrol/info/memory.h @@ -0,0 +1,70 @@ +#ifndef _MEMORY_H_KDEINFO_INCLUDED_ +#define _MEMORY_H_KDEINFO_INCLUDED_ + +#include <tqwidget.h> +#include <tqframe.h> +#include <tqlabel.h> +#include <tqtabdialog.h> +#include <tqpushbutton.h> +#include <tqtimer.h> + +#include <tdecmodule.h> +#include <tdeaboutdata.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_SWAP TQColor(255,0,0) +#define COLOR_USED_DATA TQColor(255,180,88) +#define COLOR_USED_BUFFER TQColor(184,200,0) +#define COLOR_USED_CACHE TQColor(156,192,0) +#define COLOR_USED_RAM TQColor(220,200,88) +#define COLOR_FREE_MEMORY TQColor(127,255,212) + +class KMemoryWidget:public TDECModule { + Q_OBJECT + + public: + KMemoryWidget(TQWidget * parent, const char *name = 0); + ~KMemoryWidget(); + + TQString quickHelp() const; + + private: + TQString Not_Available_Text; + TQTimer *timer; + + bool ram_colors_initialized, + swap_colors_initialized, + all_colors_initialized; + + TQColor ram_colors[4]; + TQString ram_text[4]; + + TQColor swap_colors[2]; + TQString swap_text[2]; + + TQColor all_colors[3]; + TQString all_text[3]; + + void update(); + + bool Display_Graph(int widgetindex, + int count, + t_memsize total, + t_memsize *used, + TQColor *color, + TQString *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..175b2a617 --- /dev/null +++ b/kcontrol/info/memory_linux.cpp @@ -0,0 +1,39 @@ +#include <sys/sysinfo.h> +#include <unistd.h> +#include <stdlib.h> +#include <tqfile.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 + + TQFile 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..b1ae7f529 --- /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 <tqfile.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..a38aee93b --- /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 <tqregexp.h> +#include <tqlistview.h> +#include <tqfile.h> +#include <tqstring.h> + +#include <tdelocale.h> +#include <tdemessagebox.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 { + TQString module, + pci, + vendor, + device, + subvendor, + rev; +} dri_info; + +static int ReadPipe(TQString FileName, TQStringList &list) +{ + FILE *pipe; + + if ((pipe = popen(FileName.ascii(), "r")) == NULL) { + pclose(pipe); + return 0; + } + + TQTextStream 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() +{ + TQFile file; + file.setName(INFO_DRI); + if (!file.exists() || !file.open(IO_ReadOnly)) + return false; + + TQTextStream stream(&file); + TQString 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" + TQRegExp rx = TQRegExp("\\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]='.'; + + TQString cmd = TQString("lspci -m -v -s ") + dri_info.pci; + TQStringList 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(TQRegExp("[^:]*:[ ]*")); + 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() { + + TQStringList 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, TQListViewItem *l1) +{ + int i, j; + + if (!ext || !ext[0]) + return; + TQString qext = TQString::fromLatin1(ext); + TQListViewItem *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 TQListViewItem(l1, qext.mid(i, len)); + else l2 = new TQListViewItem(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(TQListViewItem *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 TQString name; + }; + + struct token_group { + int count; + int type; + const token_name *group; + const TQString descr; + const char *ext; + }; + + TQListViewItem *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 TQListViewItem(l1, l2, groups[i].descr); + else l2 = new TQListViewItem(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) { + TQString s; + if (!tfloat && count == 1) s = TQString::number(max[0]); else + if (!tfloat && count == 2) s = TQString("%1, %2").arg(max[0]).arg(max[1]); else + if (tfloat && count == 2) s = TQString("%1 - %2").arg(fmax[0],0,'f',6).arg(fmax[1],0,'f',6); else + if (tfloat && count == 1) s = TQString::number(fmax[0],'f',6); + if (l3) l3 = new TQListViewItem(l2, l3, cur_token->name, s); + else l3 = new TQListViewItem(l2, cur_token->name, s); + + } + } + + } +} + + +static TQListViewItem *print_screen_info(TQListViewItem *l1, TQListViewItem *after) +{ + TQListViewItem *l2 = NULL, *l3 = NULL; + + if (after) l1= new TQListViewItem(l1,after,IsDirect ? i18n("Direct Rendering") : i18n("Indirect Rendering")); + else l1= new TQListViewItem(l1,IsDirect ? i18n("Direct Rendering") : i18n("Indirect Rendering")); + if (IsDirect) + if (get_dri_device()) { + l2 = new TQListViewItem(l1, i18n("3D Accelerator")); + l2->setOpen(true); + l3 = new TQListViewItem(l2, l3, i18n("Vendor"), dri_info.vendor); + l3 = new TQListViewItem(l2, l3, i18n("Device"), dri_info.device); + l3 = new TQListViewItem(l2, l3, i18n("Subvendor"), dri_info.subvendor); + l3 = new TQListViewItem(l2, l3, i18n("Revision"), dri_info.rev); + } + else l2=new TQListViewItem(l1, l2, i18n("3D Accelerator"),i18n("unknown")); + if (l2) l2 = new TQListViewItem(l1, l2, i18n("Driver")); + else l2 = new TQListViewItem(l1, i18n("Driver")); + l2->setOpen(true); + + l3 = new TQListViewItem(l2, i18n("Vendor"),gli.glVendor); + l3 = new TQListViewItem(l2, l3, i18n("Renderer"), gli.glRenderer); + l3 = new TQListViewItem(l2, l3, i18n("OpenGL version"), gli.glVersion); + + if (IsDirect) { + if (!dri_info.module) dri_info.module = i18n("unknown"); + l3 = new TQListViewItem(l2, l3, i18n("Kernel module"), dri_info.module); + } + + l3 = new TQListViewItem(l2, l3, i18n("OpenGL extensions")); + print_extension_list(gli.glExtensions,l3); + + l3 = new TQListViewItem(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(TQListViewItem *l1, TQListViewItem *l2) +{ + TQListViewItem *l3; + + l2=new TQListViewItem(l1, l2, i18n("GLX")); + l3 = new TQListViewItem(l2, i18n("server GLX vendor"),gli.serverVendor); + l3 = new TQListViewItem(l2, l3, i18n("server GLX version"),gli.serverVersion); + l3 = new TQListViewItem(l2, l3, i18n("server GLX extensions")); + print_extension_list(gli.serverExtensions,l3); + + l3 = new TQListViewItem(l2, l3, i18n("client GLX vendor"),gli.clientVendor); + l3 = new TQListViewItem(l2, l3, i18n("client GLX version"),gli.clientVersion); + l3 = new TQListViewItem(l2, l3, i18n("client GLX extensions")); + print_extension_list(gli.clientExtensions,l3); + l3 = new TQListViewItem(l2, l3, i18n("GLX extensions")); + print_extension_list(gli.glxExtensions,l3); + +#ifdef KCMGL_DO_GLU + l2 = new TQListViewItem(l1, l2, i18n("GLU")); + l3 = new TQListViewItem(l2, i18n("GLU version"), gli.gluVersion); + l3 = new TQListViewItem(l2, l3, i18n("GLU extensions")); + print_extension_list(gli.gluExtensions,l3); +#endif + +} + +static TQListViewItem *get_gl_info(Display *dpy, int scrnum, Bool allowDirect,TQListViewItem *l1, TQListViewItem *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; + TQListViewItem *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( TQListView *lBox ) +{ + TQListViewItem *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 TQListViewItem(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(TQListView * 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..d8ad6af06 --- /dev/null +++ b/kcontrol/info/opengl.desktop @@ -0,0 +1,149 @@ +[Desktop Entry] +# NoDisplay=true +Exec=tdecmshell opengl +Icon=kcmopengl +Type=Application +X-DocPath=kcontrol/opengl/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=opengl +X-TDE-ParentApp=kcontrol + +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;TDE;X-TDE-settings-information; + diff --git a/kcontrol/info/partitions.desktop b/kcontrol/info/partitions.desktop new file mode 100644 index 000000000..1d911bdb3 --- /dev/null +++ b/kcontrol/info/partitions.desktop @@ -0,0 +1,247 @@ +[Desktop Entry] +Exec=tdecmshell partitions +Icon=kcmpartitions +Type=Application +X-DocPath=kcontrol/partitions/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=partitions +X-TDE-ParentApp=kcontrol + + +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;TDE;X-TDE-settings-information; + diff --git a/kcontrol/info/pci.desktop b/kcontrol/info/pci.desktop new file mode 100644 index 000000000..cf5c37ee8 --- /dev/null +++ b/kcontrol/info/pci.desktop @@ -0,0 +1,181 @@ +[Desktop Entry] +Exec=tdecmshell pci +Icon=kcmpci +Type=Application +X-DocPath=kcontrol/pci/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=pci +X-TDE-ParentApp=kcontrol + +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;TDE;X-TDE-settings-information; + diff --git a/kcontrol/info/processor.desktop b/kcontrol/info/processor.desktop new file mode 100644 index 000000000..74f8827fd --- /dev/null +++ b/kcontrol/info/processor.desktop @@ -0,0 +1,250 @@ +[Desktop Entry] +Exec=tdecmshell processor +Icon=kcmprocessor +Type=Application +X-DocPath=kcontrol/processor/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=cpu +X-TDE-ParentApp=kcontrol + +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;TDE;X-TDE-settings-information; + diff --git a/kcontrol/info/scsi.desktop b/kcontrol/info/scsi.desktop new file mode 100644 index 000000000..785b362f5 --- /dev/null +++ b/kcontrol/info/scsi.desktop @@ -0,0 +1,178 @@ +[Desktop Entry] +Exec=tdecmshell scsi +Icon=kcmscsi +Type=Application +X-DocPath=kcontrol/scsi/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=scsi +X-TDE-ParentApp=kcontrol + +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;TDE;X-TDE-settings-information; + diff --git a/kcontrol/info/sound.desktop b/kcontrol/info/sound.desktop new file mode 100644 index 000000000..fed36704b --- /dev/null +++ b/kcontrol/info/sound.desktop @@ -0,0 +1,244 @@ +[Desktop Entry] +Exec=tdecmshell sound +Icon=kcmsound +Type=Application +X-DocPath=kcontrol/sound/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=sound +X-TDE-ParentApp=kcontrol + +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;TDE;X-TDE-settings-information; + diff --git a/kcontrol/info/xserver.desktop b/kcontrol/info/xserver.desktop new file mode 100644 index 000000000..fd1b58c76 --- /dev/null +++ b/kcontrol/info/xserver.desktop @@ -0,0 +1,227 @@ +[Desktop Entry] +Exec=tdecmshell xserver +Icon=kcmx +Type=Application +X-DocPath=kcontrol/xserver/index.html + + +X-TDE-Library=info +X-TDE-FactoryName=xserver +X-TDE-ParentApp=kcontrol + +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;TDE;X-TDE-settings-information; |