diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 2bda8f7717adf28da4af0d34fb82f63d2868c31d (patch) | |
tree | 8d927b7b47a90c4adb646482a52613f58acd6f8c /kdf | |
download | tdeutils-2bda8f7717adf28da4af0d34fb82f63d2868c31d.tar.gz tdeutils-2bda8f7717adf28da4af0d34fb82f63d2868c31d.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeutils@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kdf')
54 files changed, 5466 insertions, 0 deletions
diff --git a/kdf/Makefile.am b/kdf/Makefile.am new file mode 100644 index 0000000..b9a81ad --- /dev/null +++ b/kdf/Makefile.am @@ -0,0 +1,37 @@ +SUBDIRS = pics + +INCLUDES= $(all_includes) + +bin_PROGRAMS = kdf kwikdisk + +noinst_LTLIBRARIES = libkdf_common.la +libkdf_common_la_SOURCES = kdfwidget.cpp kdfconfig.cpp mntconfig.cpp disklist.cpp \ + disks.cpp listview.cpp optiondialog.cpp stdoption.cpp + +kdf_SOURCES = kdf.cpp +kdf_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kdf_LDADD = libkdf_common.la $(LIB_KFILE) + +kwikdisk_SOURCES = kwikdisk.cpp +kwikdisk_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kwikdisk_LDADD = libkdf_common.la $(LIB_KFILE) + +kde_module_LTLIBRARIES = kcm_kdf.la + +kcm_kdf_la_SOURCES = kcmdf.cpp +kcm_kdf_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_kdf_la_LIBADD = libkdf_common.la $(LIB_KFILE) + +noinst_HEADERS = kdfwidget.h kcmdf.h kdfconfig.h mntconfig.h \ +disks.h kdf.h disklist.h kwikdisk.h listview.h optiondialog.h stdoption.h + +METASOURCES = AUTO + +xdg_apps_DATA = kdf.desktop kwikdisk.desktop kcmdf.desktop + +rc_DATA = kdfui.rc + +rcdir = $(kde_datadir)/kdf + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kdf.pot diff --git a/kdf/disklist.cpp b/kdf/disklist.cpp new file mode 100644 index 0000000..b2718ac --- /dev/null +++ b/kdf/disklist.cpp @@ -0,0 +1,506 @@ +/* + * disklist.cpp + * + * Copyright (c) 1999 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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 <config.h> + +#include <math.h> +#include <stdlib.h> +#include <kdebug.h> +#include <kapplication.h> + +#include "disklist.h" + +#define BLANK ' ' +#define DELIMITER '#' +#define FULL_PERCENT 95.0 + +/*************************************************************************** + * constructor +**/ +DiskList::DiskList(QObject *parent, const char *name) + : QObject(parent,name) +{ + kdDebug() << k_funcinfo << endl; + + updatesDisabled = false; + + if (NO_FS_TYPE) { + kdDebug() << "df gives no FS_TYPE" << endl; + } + + disks = new Disks; + disks->setAutoDelete(TRUE); + + // BackgroundProcesses **************************************** + dfProc = new KProcess(); Q_CHECK_PTR(dfProc); + connect( dfProc, SIGNAL(receivedStdout(KProcess *, char *, int) ), + this, SLOT (receivedDFStdErrOut(KProcess *, char *, int)) ); + connect(dfProc,SIGNAL(processExited(KProcess *) ), + this, SLOT(dfDone() ) ); + + readingDFStdErrOut=FALSE; + config = kapp->config(); + loadSettings(); +} + + +/*************************************************************************** + * destructor +**/ +DiskList::~DiskList() +{ + kdDebug() << k_funcinfo << endl; +} + +/** +Updated need to be disabled sometimes to avoid pulling the DiskEntry out from the popupmenu handler +*/ +void DiskList::setUpdatesDisabled(bool disable) +{ + updatesDisabled = disable; +} + +/*************************************************************************** + * saves the KConfig for special mount/umount scripts +**/ +void DiskList::applySettings() +{ + kdDebug() << k_funcinfo << endl; + + QString oldgroup=config->group(); + config->setGroup("DiskList"); + QString key; + DiskEntry *disk; + for (disk=disks->first();disk!=0;disk=disks->next()) { + key.sprintf("Mount%s%s%s%s",SEPARATOR,disk->deviceName().latin1() + ,SEPARATOR,disk->mountPoint().latin1()); + config->writePathEntry(key,disk->mountCommand()); + + key.sprintf("Umount%s%s%s%s",SEPARATOR,disk->deviceName().latin1() + ,SEPARATOR,disk->mountPoint().latin1()); + config->writePathEntry(key,disk->umountCommand()); + + key.sprintf("Icon%s%s%s%s",SEPARATOR,disk->deviceName().latin1() + ,SEPARATOR,disk->mountPoint().latin1()); + config->writePathEntry(key,disk->realIconName()); + } + config->sync(); + config->setGroup(oldgroup); +} + + +/*************************************************************************** + * reads the KConfig for special mount/umount scripts +**/ +void DiskList::loadSettings() +{ + kdDebug() << k_funcinfo << endl; + + config->setGroup("DiskList"); + QString key; + DiskEntry *disk; + for (disk=disks->first();disk!=0;disk=disks->next()) { + key.sprintf("Mount%s%s%s%s",SEPARATOR,disk->deviceName().latin1() + ,SEPARATOR,disk->mountPoint().latin1()); + disk->setMountCommand(config->readPathEntry(key)); + + key.sprintf("Umount%s%s%s%s",SEPARATOR,disk->deviceName().latin1() + ,SEPARATOR,disk->mountPoint().latin1()); + disk->setUmountCommand(config->readPathEntry(key)); + + key.sprintf("Icon%s%s%s%s",SEPARATOR,disk->deviceName().latin1() + ,SEPARATOR,disk->mountPoint().latin1()); + QString icon=config->readPathEntry(key); + if (!icon.isEmpty()) disk->setIconName(icon); + } +} + + +static QString expandEscapes(const QString& s) { +QString rc; + for (unsigned int i = 0; i < s.length(); i++) { + if (s[i] == '\\') { + i++; + switch(s[i]) { + case '\\': // backslash '\' + rc += '\\'; + break; + case '0': // octal 0nn + rc += static_cast<char>(s.mid(i,3).toInt(0, 8)); + i += 2; + break; + default: + // give up and not process anything else because I'm too lazy + // to implement other escapes + rc += '\\'; + rc += s[i]; + break; + } + } else { + rc += s[i]; + } + } +return rc; +} + +/*************************************************************************** + * tries to figure out the possibly mounted fs +**/ +int DiskList::readFSTAB() +{ + kdDebug() << k_funcinfo << endl; + + if (readingDFStdErrOut || dfProc->isRunning()) return -1; + +QFile f(FSTAB); + if ( f.open(IO_ReadOnly) ) { + QTextStream t (&f); + QString s; + DiskEntry *disk; + + //disks->clear(); // ############ + + while (! t.eof()) { + s=t.readLine(); + s=s.simplifyWhiteSpace(); + if ( (!s.isEmpty() ) && (s.find(DELIMITER)!=0) ) { + // not empty or commented out by '#' + // kdDebug() << "GOT: [" << s << "]" << endl; + disk = new DiskEntry();// Q_CHECK_PTR(disk); + disk->setMounted(FALSE); + disk->setDeviceName(expandEscapes(s.left(s.find(BLANK)))); + s=s.remove(0,s.find(BLANK)+1 ); + // kdDebug() << " deviceName: [" << disk->deviceName() << "]" << endl; +#ifdef _OS_SOLARIS_ + //device to fsck + s=s.remove(0,s.find(BLANK)+1 ); +#endif + disk->setMountPoint(expandEscapes(s.left(s.find(BLANK)))); + s=s.remove(0,s.find(BLANK)+1 ); + //kdDebug() << " MountPoint: [" << disk->mountPoint() << "]" << endl; + //kdDebug() << " Icon: [" << disk->iconName() << "]" << endl; + disk->setFsType(s.left(s.find(BLANK)) ); + s=s.remove(0,s.find(BLANK)+1 ); + //kdDebug() << " FS-Type: [" << disk->fsType() << "]" << endl; + disk->setMountOptions(s.left(s.find(BLANK)) ); + s=s.remove(0,s.find(BLANK)+1 ); + //kdDebug() << " Mount-Options: [" << disk->mountOptions() << "]" << endl; + if ( (disk->deviceName() != "none") + && (disk->fsType() != "swap") + && (disk->fsType() != "sysfs") + && (disk->mountPoint() != "/dev/swap") + && (disk->mountPoint() != "/dev/pts") + && (disk->mountPoint() != "/dev/shm") + && (disk->mountPoint().find("/proc") == -1 ) ) + replaceDeviceEntry(disk); + else + delete disk; + + } //if not empty + } //while + f.close(); + } //if f.open + + loadSettings(); //to get the mountCommands + + // kdDebug() << "DiskList::readFSTAB DONE" << endl; + return 1; +} + + +/*************************************************************************** + * is called, when the df-command writes on StdOut or StdErr +**/ +void DiskList::receivedDFStdErrOut(KProcess *, char *data, int len ) +{ + kdDebug() << k_funcinfo << endl; + + + /* ATTENTION: StdERR no longer connected to this... + * Do we really need StdErr?? on HP-UX there was eg. a line + * df: /home_tu1/ijzerman/floppy: Stale NFS file handle + * but this shouldn't cause a real problem + */ + + + QString tmp = QString::fromLatin1(data, len); + dfStringErrOut.append(tmp); +} + +/*************************************************************************** + * reads the df-commands results +**/ +int DiskList::readDF() +{ + kdDebug() << k_funcinfo << endl; + + if (readingDFStdErrOut || dfProc->isRunning()) return -1; + setenv("LANG", "en_US", 1); + setenv("LC_ALL", "en_US", 1); + setenv("LC_MESSAGES", "en_US", 1); + setenv("LC_TYPE", "en_US", 1); + setenv("LANGUAGE", "en_US", 1); + dfStringErrOut=""; // yet no data received + dfProc->clearArguments(); + (*dfProc) << "env" << "LC_ALL=POSIX" << DF_COMMAND << DF_ARGS; + if (!dfProc->start( KProcess::NotifyOnExit, KProcess::AllOutput )) + qFatal(i18n("could not execute [%s]").local8Bit().data(), DF_COMMAND); + return 1; +} + + +/*************************************************************************** + * is called, when the df-command has finished +**/ +void DiskList::dfDone() +{ + kdDebug() << k_funcinfo << endl; + + if (updatesDisabled) + return; //Don't touch the data for now.. + + readingDFStdErrOut=TRUE; + for ( DiskEntry *disk=disks->first(); disk != 0; disk=disks->next() ) + disk->setMounted(FALSE); // set all devs unmounted + + QTextStream t (dfStringErrOut, IO_ReadOnly); + QString s=t.readLine(); + if ( ( s.isEmpty() ) || ( s.left(10) != "Filesystem" ) ) + qFatal("Error running df command... got [%s]",s.latin1()); + while ( !t.atEnd() ) { + QString u,v; + DiskEntry *disk; + s=t.readLine(); + s=s.simplifyWhiteSpace(); + if ( !s.isEmpty() ) { + disk = new DiskEntry(); Q_CHECK_PTR(disk); + + if (s.find(BLANK)<0) // devicename was too long, rest in next line + if ( !t.eof() ) { // just appends the next line + v=t.readLine(); + s=s.append(v.latin1() ); + s=s.simplifyWhiteSpace(); + //kdDebug() << "SPECIAL GOT: [" << s << "]" << endl; + }//if silly linefeed + + //kdDebug() << "EFFECTIVELY GOT " << s.length() << " chars: [" << s << "]" << endl; + + disk->setDeviceName(s.left(s.find(BLANK)) ); + s=s.remove(0,s.find(BLANK)+1 ); + //kdDebug() << " DeviceName: [" << disk->deviceName() << "]" << endl; + + if (NO_FS_TYPE) { + //kdDebug() << "THERE IS NO FS_TYPE_FIELD!" << endl; + disk->setFsType("?"); + } else { + disk->setFsType(s.left(s.find(BLANK)) ); + s=s.remove(0,s.find(BLANK)+1 ); + }; + //kdDebug() << " FS-Type: [" << disk->fsType() << "]" << endl; + //kdDebug() << " Icon: [" << disk->iconName() << "]" << endl; + + u=s.left(s.find(BLANK)); + disk->setKBSize(u.toInt() ); + s=s.remove(0,s.find(BLANK)+1 ); + //kdDebug() << " Size: [" << disk->kBSize() << "]" << endl; + + u=s.left(s.find(BLANK)); + disk->setKBUsed(u.toInt() ); + s=s.remove(0,s.find(BLANK)+1 ); + //kdDebug() << " Used: [" << disk->kBUsed() << "]" << endl; + + u=s.left(s.find(BLANK)); + disk->setKBAvail(u.toInt() ); + s=s.remove(0,s.find(BLANK)+1 ); + //kdDebug() << " Avail: [" << disk->kBAvail() << "]" << endl; + + + s=s.remove(0,s.find(BLANK)+1 ); // delete the capacity 94% + disk->setMountPoint(s); + //kdDebug() << " MountPoint: [" << disk->mountPoint() << "]" << endl; + + if ( (disk->kBSize() > 0) + && (disk->deviceName() != "none") + && (disk->fsType() != "swap") + && (disk->fsType() != "sysfs") + && (disk->mountPoint() != "/dev/swap") + && (disk->mountPoint() != "/dev/pts") + && (disk->mountPoint() != "/dev/shm") + && (disk->mountPoint().find("/proc") == -1 ) ) { + disk->setMounted(TRUE); // its now mounted (df lists only mounted) + replaceDeviceEntry(disk); + } else + delete disk; + + }//if not header + }//while further lines available + + readingDFStdErrOut=FALSE; + loadSettings(); //to get the mountCommands + emit readDFDone(); +} + + +void DiskList::deleteAllMountedAt(const QString &mountpoint) +{ + kdDebug() << k_funcinfo << endl; + + + for ( DiskEntry *item = disks->first(); item; ) + { + if (item->mountPoint() == mountpoint ) { + kdDebug() << "delete " << item->deviceName() << endl; + disks->remove(item); + item = disks->current(); + } else + item = disks->next(); + } +} + +/*************************************************************************** + * updates or creates a new DiskEntry in the KDFList and TabListBox +**/ +void DiskList::replaceDeviceEntry(DiskEntry *disk) +{ + //kdDebug() << k_funcinfo << disk->deviceRealName() << " " << disk->realMountPoint() << endl; + + // + // The 'disks' may already already contain the 'disk'. If it do + // we will replace some data. Otherwise 'disk' will be added to the list + // + + // + // 1999-27-11 Espen Sand: + // I can't get find() to work. The Disks::compareItems(..) is + // never called. + // + //int pos=disks->find(disk); + + QString deviceRealName = disk->deviceRealName(); + QString realMountPoint = disk->realMountPoint(); + + int pos = -1; + for( u_int i=0; i<disks->count(); i++ ) + { + DiskEntry *item = disks->at(i); + int res = deviceRealName.compare( item->deviceRealName() ); + if( res == 0 ) + { + res = realMountPoint.compare( item->realMountPoint() ); + } + if( res == 0 ) + { + pos = i; + break; + } + } + + if ((pos == -1) && (disk->mounted()) ) + // no matching entry found for mounted disk + if ((disk->fsType() == "?") || (disk->fsType() == "cachefs")) { + //search for fitting cachefs-entry in static /etc/vfstab-data + DiskEntry* olddisk = disks->first(); + while (olddisk != 0) { + int p; + // cachefs deviceNames have no / behind the host-column + // eg. /cache/cache/.cfs_mnt_points/srv:_home_jesus + // ^ ^ + QString odiskName = olddisk->deviceName(); + int ci=odiskName.find(':'); // goto host-column + while ((ci =odiskName.find('/',ci)) > 0) { + odiskName.replace(ci,1,"_"); + }//while + // check if there is something that is exactly the tail + // eg. [srv:/tmp3] is exact tail of [/cache/.cfs_mnt_points/srv:_tmp3] + if ( ( (p=disk->deviceName().findRev(odiskName + ,disk->deviceName().length()) ) + != -1) + && (p + odiskName.length() + == disk->deviceName().length()) ) + { + pos = disks->at(); //store the actual position + disk->setDeviceName(olddisk->deviceName()); + olddisk=0; + } else + olddisk=disks->next(); + }// while + }// if fsType == "?" or "cachefs" + + +#ifdef NO_FS_TYPE + if (pos != -1) { + DiskEntry * olddisk = disks->at(pos); + if (olddisk) + disk->setFsType(olddisk->fsType()); + } +#endif + + if (pos != -1) { // replace + DiskEntry * olddisk = disks->at(pos); + if ( (-1!=olddisk->mountOptions().find("user")) && + (-1==disk->mountOptions().find("user")) ) { + // add "user" option to new diskEntry + QString s=disk->mountOptions(); + if (s.length()>0) s.append(","); + s.append("user"); + disk->setMountOptions(s); + } + disk->setMountCommand(olddisk->mountCommand()); + disk->setUmountCommand(olddisk->umountCommand()); + + // Same device name, but maybe one is a symlink and the other is its target + // Keep the shorter one then, /dev/hda1 looks better than /dev/ide/host0/bus0/target0/lun0/part1 + if ( disk->deviceName().length() > olddisk->deviceName().length() ) + disk->setDeviceName(olddisk->deviceName()); + + //FStab after an older DF ... needed for critFull + //so the DF-KBUsed survive a FStab lookup... + //but also an unmounted disk may then have a kbused set... + if ( (olddisk->mounted()) && (!disk->mounted()) ) { + disk->setKBSize(olddisk->kBSize()); + disk->setKBUsed(olddisk->kBUsed()); + disk->setKBAvail(olddisk->kBAvail()); + } + if ( (olddisk->percentFull() != -1) && + (olddisk->percentFull() < FULL_PERCENT) && + (disk->percentFull() >= FULL_PERCENT) ) { + kdDebug() << "Device " << disk->deviceName() + << " is critFull! " << olddisk->percentFull() + << "--" << disk->percentFull() << endl; + emit criticallyFull(disk); + } + disks->remove(pos); // really deletes old one + disks->insert(pos,disk); + } else { + disks->append(disk); + }//if + +} + +#include "disklist.moc" + + + + + + diff --git a/kdf/disklist.h b/kdf/disklist.h new file mode 100644 index 0000000..7a99841 --- /dev/null +++ b/kdf/disklist.h @@ -0,0 +1,138 @@ +/* + * disklist.h + * + * Copyright (c) 1999 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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. + */ + + +#ifndef __DISKLIST_H__ +#define __DISKLIST_H__ + +#include <kdebug.h> +#include <kconfig.h> +#include <klocale.h> +//#include <kcontrol.h> + +// defines the os-type +#include <qglobal.h> + +#include "disks.h" + +#define DF_COMMAND "df" +// be pessimistic: df -T only works under linux !?? +#if defined(_OS_LINUX_) +#define DF_ARGS "-kT" +#define NO_FS_TYPE false +#else +#define DF_ARGS "-k" +#define NO_FS_TYPE true +#endif + +#ifdef _OS_SOLARIS_ +#define CACHEFSTAB "/etc/cachefstab" +#define FSTAB "/etc/vfstab" +#else +#define FSTAB "/etc/fstab" +#endif + +#define SEPARATOR "|" + +/***************************************************************************/ +typedef QPtrList<DiskEntry> DisksBase; +typedef QPtrListIterator<DiskEntry> DisksIterator; + +/***************************************************************************/ +class Disks : public DisksBase +{ + public: + Disks(bool deepCopies=TRUE) { dc = deepCopies;} + ~Disks() { clear(); } +private: + int compareItems( DiskEntry s1, DiskEntry s2 ) + { + int ret = s1.deviceName().compare(s2.deviceName()); + if( ret == 0 ) + { + ret = s1.mountPoint().compare(s2.mountPoint()); + } + + kdDebug() << "compareDISKS " << s1.deviceName() << " vs " << s2.deviceName() << " (" << ret << ")" << endl; + return( ret ); + } + + /* + int compareItems( DiskEntry* s1, DiskEntry* s2 ) { + int ret; + ret = strcmp (static_cast<DiskEntry*>(s1)->deviceName(), + static_cast<DiskEntry*>(s2)->deviceName() ); + if (0 == ret) + ret = strcmp (static_cast<DiskEntry*>(s1)->mountPoint(), + static_cast<DiskEntry*>(s2)->mountPoint()); + return ret; + }; + */ + + bool dc; +}; + +/***************************************************************************/ +class DiskList : public QObject +{ Q_OBJECT +public: + DiskList( QObject *parent=0, const char *name=0 ); + ~DiskList(); + int readFSTAB(); + int readDF(); + int find(const DiskEntry* disk) {return disks->find(disk);} + DiskEntry* at(uint index) {return disks->at(index);} + DiskEntry* first() {return disks->first();} + DiskEntry* next() {return disks->next();} + uint count() { return disks->count(); } + + void deleteAllMountedAt(const QString &mountpoint); + void setUpdatesDisabled(bool disable); + +signals: + void readDFDone(); + void criticallyFull(DiskEntry *disk); + +public slots: + void loadSettings(); + void applySettings(); + +private slots: + void receivedDFStdErrOut(KProcess *, char *data, int len); + void dfDone(); + +private: + void replaceDeviceEntry(DiskEntry *disk); + + Disks *disks; + KProcess *dfProc; + QString dfStringErrOut; + bool readingDFStdErrOut; + KConfig *config; + bool updatesDisabled; + +}; +/***************************************************************************/ + + +#endif diff --git a/kdf/disks.cpp b/kdf/disks.cpp new file mode 100644 index 0000000..c1a4a0e --- /dev/null +++ b/kdf/disks.cpp @@ -0,0 +1,335 @@ +/* + * disks.cpp + * + * Copyright (c) 1998 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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 <qfileinfo.h> +#include <qdir.h> + +#include <kglobal.h> +#include <kdebug.h> + +#include "disks.h" +#include "disks.moc" + +/****************************************************/ +/********************* DiskEntry ********************/ +/****************************************************/ + +/** + * Constructor +**/ +void DiskEntry::init() +{ + device=""; + type=""; + mountedOn=""; + options=""; + size=0; + used=0; + avail=0; + isMounted=FALSE; + mntcmd=""; + umntcmd=""; + iconSetByUser=FALSE; + icoName=""; + + + // BackgroundProcesses **************************************** + + sysProc = new KShellProcess(); Q_CHECK_PTR(sysProc); + connect( sysProc, SIGNAL(receivedStdout(KProcess *, char *, int) ), + this, SLOT (receivedSysStdErrOut(KProcess *, char *, int)) ); + connect( sysProc, SIGNAL(receivedStderr(KProcess *, char *, int) ), + this, SLOT (receivedSysStdErrOut(KProcess *, char *, int)) ); + readingSysStdErrOut=FALSE; + + +} + +DiskEntry::DiskEntry(QObject *parent, const char *name) + : QObject (parent, name) +{ + init(); +} + +DiskEntry::DiskEntry(const QString & deviceName, QObject *parent, const char *name) + : QObject (parent, name) +{ + init(); + + setDeviceName(deviceName); +} +DiskEntry::~DiskEntry() +{ + disconnect(this); + delete sysProc; +} + +int DiskEntry::toggleMount() +{ + if (!mounted()) + return mount(); + else + return umount(); +} + +int DiskEntry::mount() +{ + QString cmdS=mntcmd; + if (cmdS.isEmpty()) // generate default mount cmd + if (getuid()!=0 ) // user mountable + { + cmdS="mount %d"; + } + else // root mounts with all params/options + { + // FreeBSD's mount(8) is picky: -o _must_ go before + // the device and mountpoint. + cmdS=QString::fromLatin1("mount -t%t -o%o %d %m"); + } + + cmdS.replace(QString::fromLatin1("%d"),deviceName()); + cmdS.replace(QString::fromLatin1("%m"),mountPoint()); + cmdS.replace(QString::fromLatin1("%t"),fsType()); + cmdS.replace(QString::fromLatin1("%o"),mountOptions()); + + kdDebug() << "mount-cmd: [" << cmdS << "]" << endl; + int e=sysCall(cmdS); + if (!e) setMounted(TRUE); + kdDebug() << "mount-cmd: e=" << e << endl; + return e; +} + +int DiskEntry::umount() +{ + kdDebug() << "umounting" << endl; + QString cmdS=umntcmd; + if (cmdS.isEmpty()) // generate default umount cmd + cmdS="umount %d"; + + cmdS.replace(QString::fromLatin1("%d"),deviceName()); + cmdS.replace(QString::fromLatin1("%m"),mountPoint()); + + kdDebug() << "umount-cmd: [" << cmdS << "]" << endl; + int e=sysCall(cmdS); + if (!e) setMounted(FALSE); + kdDebug() << "umount-cmd: e=" << e << endl; + + return e; +} + +int DiskEntry::remount() +{ + if (mntcmd.isEmpty() && umntcmd.isEmpty() // default mount/umount commands + && (getuid()==0)) // you are root + { + QString oldOpt=options; + if (options.isEmpty()) + options="remount"; + else + options+=",remount"; + int e=mount(); + options=oldOpt; + return e; + } else { + if (int e=umount()) + return mount(); + else return e; + } +} + +void DiskEntry::setMountCommand(const QString & mnt) +{ + mntcmd=mnt; +} + +void DiskEntry::setUmountCommand(const QString & umnt) +{ + umntcmd=umnt; +} + +void DiskEntry::setIconName(const QString & iconName) +{ + iconSetByUser=TRUE; + icoName=iconName; + if (icoName.right(6) == "_mount") + icoName.truncate(icoName.length()-6); + else if (icoName.right(8) == "_unmount") + icoName.truncate(icoName.length()-8); + + emit iconNameChanged(); +} + +QString DiskEntry::iconName() +{ + QString iconName=icoName; + if (iconSetByUser) { + mounted() ? iconName+="_mount" : iconName+="_unmount"; + return iconName; + } else + return guessIconName(); +} + +QString DiskEntry::guessIconName() +{ + QString iconName; + // try to be intelligent + if (-1!=mountPoint().find("cdrom",0,FALSE)) iconName+="cdrom"; + else if (-1!=deviceName().find("cdrom",0,FALSE)) iconName+="cdrom"; + else if (-1!=mountPoint().find("writer",0,FALSE)) iconName+="cdwriter"; + else if (-1!=deviceName().find("writer",0,FALSE)) iconName+="cdwriter"; + else if (-1!=mountPoint().find("mo",0,FALSE)) iconName+="mo"; + else if (-1!=deviceName().find("mo",0,FALSE)) iconName+="mo"; + else if (-1!=deviceName().find("fd",0,FALSE)) { + if (-1!=deviceName().find("360",0,FALSE)) iconName+="5floppy"; + if (-1!=deviceName().find("1200",0,FALSE)) iconName+="5floppy"; + else iconName+="3floppy"; + } + else if (-1!=mountPoint().find("floppy",0,FALSE)) iconName+="3floppy"; + else if (-1!=mountPoint().find("zip",0,FALSE)) iconName+="zip"; + else if (-1!=fsType().find("nfs",0,FALSE)) iconName+="nfs"; + else iconName+="hdd"; + mounted() ? iconName+="_mount" : iconName+="_unmount"; +// if ( -1==mountOptions().find("user",0,FALSE) ) +// iconName.prepend("root_"); // special root icon, normal user can´t mount + + //debug("device %s is %s",deviceName().latin1(),iconName.latin1()); + + //emit iconNameChanged(); + return iconName; +} + + +/*************************************************************************** + * starts a command on the underlying system via /bin/sh +**/ +int DiskEntry::sysCall(const QString & command) +{ + if (readingSysStdErrOut || sysProc->isRunning() ) return -1; + + sysStringErrOut=i18n("Called: %1\n\n").arg(command); // put the called command on ErrOut + sysProc->clearArguments(); + (*sysProc) << command; + if (!sysProc->start( KProcess::Block, KProcess::AllOutput )) + kdFatal() << i18n("could not execute %1").arg(command.local8Bit().data()) << endl; + + if (sysProc->exitStatus()!=0) emit sysCallError(this, sysProc->exitStatus()); + + return (sysProc->exitStatus()); +} + + +/*************************************************************************** + * is called, when the Sys-command writes on StdOut or StdErr +**/ +void DiskEntry::receivedSysStdErrOut(KProcess *, char *data, int len) +{ + QString tmp = QString::fromLocal8Bit(data, len); + sysStringErrOut.append(tmp); +} + +float DiskEntry::percentFull() const +{ + if (size != 0) { + return 100 - ( ((float)avail / (float)size) * 100 ); + } else { + return -1; + } +} + +void DiskEntry::setDeviceName(const QString & deviceName) +{ + device=deviceName; + emit deviceNameChanged(); +} + +QString DiskEntry::deviceRealName() const +{ + QFileInfo inf( device ); + QDir dir( inf.dirPath( true ) ); + QString relPath = inf.fileName(); + if ( inf.isSymLink() ) { + QString link = inf.readLink(); + if ( link.startsWith( "/" ) ) + return link; + relPath = link; + } + return dir.canonicalPath() + "/" + relPath; +} + +void DiskEntry::setMountPoint(const QString & mountPoint) +{ + mountedOn=mountPoint; + emit mountPointChanged(); +} + +QString DiskEntry::realMountPoint() const +{ + QDir dir( mountedOn ); + return dir.canonicalPath(); +} + +void DiskEntry::setMountOptions(const QString & mountOptions) +{ + options=mountOptions; + emit mountOptionsChanged(); +} + +void DiskEntry::setFsType(const QString & fsType) +{ + type=fsType; + emit fsTypeChanged(); +} + +void DiskEntry::setMounted(bool nowMounted) +{ + isMounted=nowMounted; + emit mountedChanged(); +} + +void DiskEntry::setKBSize(int kb_size) +{ + size=kb_size; + emit kBSizeChanged(); +} + +void DiskEntry::setKBUsed(int kb_used) +{ + used=kb_used; + if ( size < (used+avail) ) { //adjust kBAvail + kdWarning() << "device " << device << ": kBAvail(" << avail << ")+*kBUsed(" << used << ") exceeds kBSize(" << size << ")" << endl; + setKBAvail(size-used); + } + emit kBUsedChanged(); +} + +void DiskEntry::setKBAvail(int kb_avail) +{ + avail=kb_avail; + if ( size < (used+avail) ) { //adjust kBUsed + kdWarning() << "device " << device << ": *kBAvail(" << avail << ")+kBUsed(" << used << ") exceeds kBSize(" << size << ")" << endl; + setKBUsed(size-avail); + } + emit kBAvailChanged(); +} + + diff --git a/kdf/disks.h b/kdf/disks.h new file mode 100644 index 0000000..9899927 --- /dev/null +++ b/kdf/disks.h @@ -0,0 +1,148 @@ +/* + * disks.h + * + * Copyright (c) 1998 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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. + */ + + +#ifndef __DISKS_H__ +#define __DISKS_H__ + +#include <qobject.h> +#include <qstring.h> +#include <qlabel.h> +#include <qpushbutton.h> +#include <qprogressbar.h> +#include <qfile.h> + +#include <kio/global.h> +#include <kprogress.h> +#include <kprocess.h> +#include <klocale.h> + +class DiskEntry : public QObject +{ + Q_OBJECT +public: + DiskEntry(QObject *parent=0, const char *name=0); + DiskEntry(const QString & deviceName, QObject *parent=0, const char *name=0); + ~DiskEntry(); + QString lastSysError() {return sysStringErrOut; } + QString deviceName() const { return device; } + // The real device (in case deviceName() is a symlink) + QString deviceRealName() const; + QString mountPoint() const { return mountedOn; } + QString mountOptions() const { return options; } + // The real device (in case deviceName() is a symlink) + QString realMountPoint() const; + /** + * sets the used mountCommand for the actual DiskEntry. + * @param mntcmd is a string containing the executable file and + * special codes which will be filled in when used: <BR> + * %m : mountpoint <BR> + * %d : deviceName <BR> + * %t : filesystem type <BR> + * %o : mount options <BR> + * all this information is gained from the objects' data + * if no mountCommand is set it defaults to "mount %d" + **/ + QString mountCommand() const { return mntcmd; } + /** + * sets the used umountCommand for the actual DiskEntry. + * @param mntcmd is a string containing the executable file and + * special codes which will be filled in when used: <BR> + * %m : mountpoint <BR> + * %d : deviceName <BR> + * all this information is gained from the objects' data + * if no umountCommand is set it defaults to "umount %d" + **/ + QString umountCommand() const { return umntcmd; } + QString fsType() const { return type; } + bool mounted() const { return isMounted; } + int kBSize() const { return size; } + QString iconName(); + QString realIconName() { return icoName; } + QString prettyKBSize() const { return KIO::convertSizeFromKB(size); } + int kBUsed() const { return used; } + QString prettyKBUsed() const { return KIO::convertSizeFromKB(used); } + int kBAvail() const { return avail; } + QString prettyKBAvail() const { return KIO::convertSizeFromKB(avail); } + float percentFull() const; + +signals: + void sysCallError(DiskEntry *disk, int err_no); + void deviceNameChanged(); + void mountPointChanged(); + void mountOptionsChanged(); + void fsTypeChanged(); + void mountedChanged(); + void kBSizeChanged(); + void kBUsedChanged(); + void kBAvailChanged(); + void iconNameChanged(); + +public slots: + + int toggleMount(); + int mount(); + int umount(); + int remount(); + void setMountCommand(const QString & mnt); + void setUmountCommand(const QString & umnt); + void setDeviceName(const QString & deviceName); + void setMountPoint(const QString & mountPoint); + void setIconName(const QString & iconName); + void setMountOptions(const QString & mountOptions); + void setFsType(const QString & fsType); + void setMounted(bool nowMounted); + void setKBSize(int kb_size); + void setKBUsed(int kb_used); + void setKBAvail(int kb_avail); + QString guessIconName(); + +private slots: + void receivedSysStdErrOut(KProcess *, char *data, int len); + +private: + void init(); + int sysCall(const QString & command); + QString prettyPrint(int kBValue) const; + + KShellProcess *sysProc; + QString sysStringErrOut; + bool readingSysStdErrOut; + + QString device, + type, + mountedOn, + options, + icoName, + mntcmd, + umntcmd; + + int size, + used, + avail; // ATTENTION: used+avail != size (clustersize!) + + bool isMounted, + iconSetByUser; +}; + +#endif diff --git a/kdf/kcmdf.cpp b/kdf/kcmdf.cpp new file mode 100644 index 0000000..3c30a01 --- /dev/null +++ b/kdf/kcmdf.cpp @@ -0,0 +1,66 @@ +/* + kcmdf.cpp - KcmDiskFree + + Copyright (C) 1998 by Michael Kropfberger <michael.kropfberger@gmx.net> + + 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. + + */ + +// +// 1999-12-05 Espen Sand +// Modified to use KCModule instead of the old and obsolete +// KControlApplication +// + + +#include <kdialog.h> + +#include <qlayout.h> + +#include "kcmdf.h" + +KDiskFreeWidget::KDiskFreeWidget( QWidget *parent, const char *name ) + : KCModule( parent, name ) +{ + setButtons(Help); + + QVBoxLayout *topLayout = new QVBoxLayout( this, 0, KDialog::spacingHint() ); + + mKdf = new KDFWidget( this, "kdf", false ); + topLayout->addWidget( mKdf ); +} + +KDiskFreeWidget::~KDiskFreeWidget() +{ + mKdf->applySettings(); +} + +QString KDiskFreeWidget::quickHelp() const +{ + return i18n("<h3>Hardware Information</h3><br> 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."); +} + +extern "C" +{ + KDE_EXPORT KCModule* create_kdf( QWidget *parent, const char * /*name*/ ) + { + return new KDiskFreeWidget( parent , "kdf" ); + } +} + +#include "kcmdf.moc" diff --git a/kdf/kcmdf.desktop b/kdf/kcmdf.desktop new file mode 100644 index 0000000..3513576 --- /dev/null +++ b/kdf/kcmdf.desktop @@ -0,0 +1,138 @@ +[Desktop Entry] +X-KDE-ModuleType=Library +X-KDE-Library=kdf +X-KDE-FactoryName=kdf +X-KDE-LocalUser=false +Exec=kcmshell kcmdf +Icon=kcmdf +Type=Application +Name=Storage Devices +Name[af]=Stoorplek Toestelle +Name[ar]=أجهزة تخزين +Name[bg]=Твърди диÑкове +Name[bs]=UreÄ‘aji za smjeÅ¡taj +Name[ca]=Dispositius d'emmagatzemament +Name[cs]=Úložná zaÅ™Ãzenà +Name[cy]=Dyfeisiau Storio +Name[da]=Opbevaringsenheder +Name[de]=Speichergeräte +Name[el]=ΣυσκευÎÏ‚ αποθήκευσης +Name[eo]=Memor-aparatoj +Name[es]=Dispositivos de almacenamiento +Name[et]=Salvestusseadmed +Name[eu]=Biltegiratze Gailuak +Name[fa]=دستگاههای ذخیره +Name[fi]=Tallennuslaitteet +Name[fr]=Périphériques de stockage +Name[ga]=Gléasanna Stórais +Name[gl]=Dispositivos de Almaceamento +Name[he]=×”×ª×§× ×™ ×יחסון +Name[hi]=à¤à¤‚डारण औज़ार +Name[hr]=SkladiÅ¡ni ureÄ‘aji +Name[hu]=Tárolóeszközök +Name[is]=Minnisbúnaður +Name[it]=Dispositivi di memorizzazione +Name[ja]=ストレージデãƒã‚¤ã‚¹ +Name[ka]=ინფáƒáƒ მáƒáƒªáƒ˜áƒ˜áƒ¡ შემნáƒáƒ®áƒ•áƒ”ლი მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ები +Name[kk]=Жинақтаушы құрылғылар +Name[km]=ឧបករណáŸâ€‹áž•áŸ’ទុក +Name[lt]=Saugojimo įrenginiai +Name[mk]=Уреди за Ñкладирање +Name[mt]=Apparat għas-sarr ta' informazzjoni +Name[nb]=Lagringsenheter +Name[nds]=Spiekerreedschappen +Name[ne]=यनà¥à¤¤à¥à¤° à¤à¤£à¥à¤¡à¤¾à¤°à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ +Name[nl]=Opslagapparaten +Name[nn]=Lagringseiningar +Name[pa]=ਸਟੋਰੇਜ਼ ਜੰਤਰ +Name[pl]=UrzÄ…dzenia do przechowywania danych +Name[pt]=Dispositivos de Armazenamento +Name[pt_BR]=Dispositivos de Armazenamento +Name[ro]=Dispozitive de stocare +Name[ru]=УÑтройÑтва Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… +Name[sk]=Disky +Name[sl]=Naprave za shranjevanje +Name[sr]=Складишни уређаји +Name[sr@Latn]=SkladiÅ¡ni ureÄ‘aji +Name[sv]=Lagringsenheter +Name[ta]= சேமிபà¯à®ªà¯ சாதனஙà¯à®•à®³à¯ +Name[tg]=ДаÑтгоҳҳои Захиракунӣ +Name[th]=à¸à¸¸à¸›à¸à¸£à¸“์เà¸à¹‡à¸šà¸‚้à¸à¸¡à¸¹à¸¥ +Name[tr]=Depolama Aygıtları +Name[uk]=ПриÑтрої Ð½Ð°ÐºÐ¾Ð¿Ð¸Ñ‡ÐµÐ½Ð½Ñ +Name[uz]=Saqlash uskunalari +Name[uz@cyrillic]=Сақлаш уÑкуналари +Name[wa]=Éndjins di wÃ¥rdaedje +Name[xh]=Amacebo Okugcina +Name[zh_CN]=å˜å‚¨è®¾å¤‡ +Name[zh_TW]=儲å˜è£ç½® +Name[zu]=Amathuluzi Ethala +DocPath=kinfocenter/blockdevices/index.html +Comment=Shows the disk usage of the mounted devices +Comment[af]=Vertoon die disket gebruik van die gekoppelde toestelle +Comment[ar]=يعرض المساØØ© المستخدمة من الأقراص المضمومة +Comment[az]=BaÄŸlı avadanlıqların disk istifadÉ™sini göstÉ™rir +Comment[bg]=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° използваното проÑтранÑтво на монтираните уÑтройÑтва +Comment[br]=Diskouez an egor implijet gant an trobarzhelloù marc'het +Comment[bs]=Prikazuje iskoriÅ¡tenost diskova na montiranim ureÄ‘ajima +Comment[ca]=Mostra l'ús de disc dels dispositius muntats +Comment[cs]=Zobrazuje využità pÅ™ipojených diskových zaÅ™Ãzenà +Comment[cy]=Dangos defnydd disg y dyfeisiau mowntiedig +Comment[da]=Viser monterede enheders diskforbrug +Comment[de]=Zeigt die Speicherbelegung eingebundener Geräte +Comment[el]=Εμφανίζει τη χÏήση Î±Ï€Î¿Î¸Î·ÎºÎµÏ…Ï„Î¹ÎºÎ¿Ï Ï‡ÏŽÏου των Ï€ÏοσαÏτημÎνων συσκευών +Comment[eo]=Montras la kapacitojn de la kroĉitaj aparatoj +Comment[es]=Muestra el uso del disco en los dispositivos montados +Comment[et]=Ãœhendatud seadmete kettakasutuse vaatamine +Comment[eu]=Muntatutako diskoen erabilera erakusten du +Comment[fa]=استÙادۀ دیسک دستگاههای سوار‌شده را نمایش می‌دهد +Comment[fi]=Näyttää levynkäytön liitetyillä laitteilla +Comment[fr]=Affiche l'espace utilisé sur les périphériques montés +Comment[ga]=Taispeánann úsáid diosca na ngléasanna feistithe +Comment[gl]=Amosa o uso do disco dos dispositivos montados +Comment[he]=מידע על השימוש ×‘× ×¤×— ×”×יחסון של ×”×”×ª×§× ×™× ×”×ž×—×•×‘×¨×™× +Comment[hi]=माउनà¥à¤Ÿà¥‡à¤¡ औज़ारों के डिसà¥à¤• उपयोग दिखाता है +Comment[hr]=Prikazuje iskoriÅ¡tenost diskova +Comment[hu]=Megmutatja a csatlakoztatott (mountolt) eszközök kihasználtságát +Comment[id]=Perlihatkan penggunanan disk yang sedang dimount +Comment[is]=Sýnir nýtingu diskanna sem eru tengdir skráarkerfinu +Comment[it]=Mostra l'uso del disco dei dispositivi montati +Comment[ja]=マウントã•ã‚Œã¦ã„るデãƒã‚¤ã‚¹ã®ãƒ‡ã‚£ã‚¹ã‚¯ä½¿ç”¨çŠ¶æ³ã‚’表示 +Comment[ka]=მáƒáƒœáƒ¢áƒ˜áƒ ებული დისკების გáƒáƒ›áƒáƒ§áƒ”ნებáƒáƒ¡ +Comment[kk]=Тіркеген құрылғыларда бар орынды көрÑетеді +Comment[km]=បង្ហាញ​ការប្រើប្រាស់​ážáž¶ážŸâ€‹ážšáž”ស់​ឧបករណáŸâ€‹ážŠáŸ‚ល​បាន​ម៉ោន +Comment[ko]=ë§ˆìš´íŠ¸ëœ ìž¥ì¹˜ì˜ ë””ìŠ¤í¬ ì‚¬ìš©ì„ ë³´ì—¬ì¤ë‹ˆë‹¤. +Comment[lt]=Rodo sumontuotų įrenginių disko vietos panaudojimÄ… +Comment[lv]=RÄda piemontÄ“to iekÄrtu diska izlietoÅ¡anu +Comment[mk]=Ја покажува иÑкориÑтеноÑта на монтираните уреди +Comment[ms]=Memaparkan penggunaan cakera pada peranti yang dilekapkan +Comment[mt]=Juri kemm qed jintuża mid-diski mmuntati +Comment[nb]=Viser brukt diskplass pÃ¥ de monterte enhetene +Comment[nds]=Wiest den Fastplattbruuk vun inhangt Reedschappen +Comment[ne]=माउनà¥à¤Ÿ गरिà¤à¤•à¥‹ यनà¥à¤¤à¥à¤°à¤•à¤¾ डिसà¥à¤• उपयोग देखाउà¤à¤¦à¤› +Comment[nl]=Toont het schijfgebruik van de aangekoppelde bestandssystemen +Comment[nn]=Viser diskbruken for monterte einingar +Comment[pa]=ਮਾਊਟ ਕੀਤੇ ਜੰਤਰ ਵੇਖਾਉਦਾ ਹੈ +Comment[pl]=Pokazuje wykorzystanie przestrzeni dyskowej na zamontowanych urzÄ…dzeniach +Comment[pt]=Mostra o espaço ocupado nos dispositivos montados +Comment[pt_BR]=Mostra a utilização do disco nos dispositivos montados +Comment[ro]=AfiÅŸează utilizarea spaÅ£iului pentru dispozitivele montate +Comment[ru]=Показывает Ñвободное меÑто на Ñмонтированных уÑтройÑтвах +Comment[sk]=Ukazuje využité miesto na pripojených diskových zariadeniach +Comment[sl]=Prikaže porabo diska v priklopljenih napravah +Comment[sr]=Приказује иÑкоришћеноÑÑ‚ капацитета монтираних диÑкова +Comment[sr@Latn]=Prikazuje iskorišćenost kapaciteta montiranih diskova +Comment[sv]=Visar diskanvändning för monterade enheter +Comment[ta]= à®à®±à¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿ சாதனஙà¯à®•à®³à®¿à®©à¯ வடà¯à®Ÿà¯ பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ காடà¯à®Ÿà¯à®•à®¿à®±à®¤à¯ +Comment[tg]=Фазоҳои хомро дар даÑтгоҳи наÑбшуда нишон диҳед +Comment[th]=à¹à¸ªà¸”งà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸žà¸·à¹‰à¸™à¸—ีี่ขà¸à¸‡à¸”ิสà¸à¹Œà¸—ี่เมานท์ใช้งานà¸à¸¢à¸¹à¹ˆ +Comment[tr]=BaÄŸlı aygıtların disk kullanımını gösterir +Comment[uk]=Показує Ñтупінь викориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð¼Ð¾Ð½Ñ‚Ð¾Ð²Ð°Ð½Ð¸Ñ… приÑтроїв +Comment[ven]=I sumbedza mashumisele a maano o gonyiswaho +Comment[vi]=Hiển thá»Etrạng thái sá» dụng Ä‘Ä©a của các thiết bá»Eđã được mount +Comment[wa]=Mostere l' eployaedje des deurès plakes ki sont montêyes +Comment[zh_CN]=显示挂接设备的ç£ç›˜ä½¿ç”¨çŽ‡ +Comment[zh_TW]=顯示連接的è¨å‚™çš„ç£ç¢Ÿä½¿ç”¨çŽ‡ +Comment[zu]=Ikhombisa ukusebenziswa kwediski yamathuluzi okunyuka + +Categories=Qt;KDE;X-KDE-information; diff --git a/kdf/kcmdf.h b/kdf/kcmdf.h new file mode 100644 index 0000000..c3e2b58 --- /dev/null +++ b/kdf/kcmdf.h @@ -0,0 +1,49 @@ +/* + kcmdf.h - KDiskFree + + Copyright (C) 1999 by Michael Kropfberger <michael.kropfberger@gmx.net> + + 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. + + */ + + +#ifndef __KCMDF_H__ +#define __KCMDF_H__ + +#include "kdfwidget.h" +#include "kdfconfig.h" +#include "mntconfig.h" + +#include <kcmodule.h> +#include <qtabwidget.h> + +class KDiskFreeWidget : public KCModule +{ + Q_OBJECT + + public: + KDiskFreeWidget( QWidget *parent=0, const char *name=0 ); + ~KDiskFreeWidget(); + + QString quickHelp() const; + + private: + KDFWidget *mKdf; + KDFConfigWidget *mMcw; + MntConfigWidget *mKcw; +}; + +#endif diff --git a/kdf/kconftest.cpp b/kdf/kconftest.cpp new file mode 100644 index 0000000..75d13fd --- /dev/null +++ b/kdf/kconftest.cpp @@ -0,0 +1,80 @@ +/* +** +** Copyright (C) 1999 by Michael Kropfberger +** +*/ + +/* +** 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 in a file called COPYING; if not, write to +** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +** MA 02110-1301, USA. +*/ + +/* +** Bug reports and questions can be sent to kde-devel@kde.org +*/ + + +/* compile with +* gcc -I$QTDIR/include -I$KDEDIR/include -L/opt/kde/lib -L/usr/X11R6/lib -lkfm -lkdeui -lkdecore -lqt -lX11 -lXext -fno-rtti kconftest.cpp +*/ + + +#include <iostream> +#include <qstring.h> +#include <qdict.h> +#include <kconfig.h> +#include <kdebug.h> +#include <kapplication.h> +#include <klocale.h> +#include <kcmdlineargs.h> + +static const char description[] = + I18N_NOOP("A test application"); + +static const char version[] = "v0.0.1"; + +main(int argc, char ** argv) +{ + KCmdLineArgs::init(argc, argv, "test", description, version); + + KApplication app; + KConfig * cfg = kapp->config(); + + QDict<char> dict; + + dict.insert("Blah", "Arse"); + dict.insert("Blah", "Smack"); + dict.insert("Blah", "Monkey"); + + QDictIterator<char> it(dict); + + QString key = "TestConfigItem"; + + for (; it.current(); ++it) { + + cerr << "Before saving: " << endl; + cerr << "key : \"" << key << "\"" << endl; + cerr << "val : \"" << it.current() << "\"" << endl; + + debug("got back [%s]",cfg->writeEntry(key, it.current())); +// debug("got back [%s]",s.data()); + + cerr << "After saving: " << endl; + cerr << "key : \"" << key << "\"" << endl; + cerr << "val : \"" << it.current() << "\"" << endl; + + cerr << endl; + } +} diff --git a/kdf/kdf.cpp b/kdf/kdf.cpp new file mode 100644 index 0000000..f48cf48 --- /dev/null +++ b/kdf/kdf.cpp @@ -0,0 +1,96 @@ +/* + * kdf.cpp - KDiskFree + * + * written 1998-2001 by Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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 <kapplication.h> +#include <kstdaccel.h> +#include <kcmdlineargs.h> +#include <kaboutdata.h> +#include <kstdaction.h> +#include <kaction.h> + +#include "kdf.h" +#include <kpopupmenu.h> + +static const char description[] = + I18N_NOOP("KDE free disk space utility"); + +static const char version[] = "v0.5"; + + +/***************************************************************/ +KDFTopLevel::KDFTopLevel(QWidget *, const char *name) + : KMainWindow(0, name) +{ + kdf = new KDFWidget(this,"kdf",FALSE); + Q_CHECK_PTR(kdf); + (void) new KAction( i18n( "&Update" ), 0, kdf, SLOT( updateDF() ), actionCollection(), "updatedf" ); + + KStdAction::quit(this, SLOT(close()), actionCollection()); + KStdAction::preferences(kdf, SLOT(settingsBtnClicked()), actionCollection()); + KStdAction::keyBindings(guiFactory(), SLOT(configureShortcuts()), +actionCollection()); + setCentralWidget(kdf); + // kdf->setMinimumSize(kdf->sizeHint()); + kdf->resize(kdf->sizeHint()); + setupGUI(KMainWindow::Keys | StatusBar | Save | Create); +} + + +bool KDFTopLevel::queryExit( void ) +{ + kdf->applySettings(); + return( true ); +} + + +/***************************************************************/ +int main(int argc, char **argv) +{ + KAboutData aboutData( "kdf", I18N_NOOP("KDiskFree"), + version, description, KAboutData::License_GPL, + "(c) 1998-2001, Michael Kropfberger"); + aboutData.addAuthor("Michael Kropfberger",0, "michael.kropfberger@gmx.net"); + KCmdLineArgs::init( argc, argv, &aboutData ); + + KApplication app; + + if( app.isRestored() ) //SessionManagement + { + for( int n=1; KDFTopLevel::canBeRestored(n); n++ ) + { + KDFTopLevel *ktl = new KDFTopLevel(); + Q_CHECK_PTR(ktl); + app.setMainWidget(ktl); + ktl->restore(n); + } + } + else + { + KDFTopLevel *ktl = new KDFTopLevel(); + Q_CHECK_PTR(ktl); + ktl->show(); + } + + return app.exec(); +} + +#include "kdf.moc" + diff --git a/kdf/kdf.desktop b/kdf/kdf.desktop new file mode 100644 index 0000000..89eb513 --- /dev/null +++ b/kdf/kdf.desktop @@ -0,0 +1,88 @@ +[Desktop Entry] +Name=KDiskFree +Name[af]=Kdiskfree +Name[eo]=Diskuzo +Name[hi]=के-डिसà¥à¤•-फà¥à¤°à¥€ +Name[lv]=KDiskÄBrÄ«vs +Name[ne]=केडीई डिसà¥à¤• खाली +Name[pa]=ਕੇਡਿਸਕ ਥਾਂ +Name[pl]=Wolna przestrzeÅ„ na dyskach +Name[pt_BR]=Disco Livre +Name[sl]=Prosti disk +Name[sv]=Kdiskfree +Name[ta]= கேடிஸà¯à®•à¯ இலà¯à®µà®šà®®à¯ +Name[tg]=KДиÑки Озод +Name[th]=à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸žà¸·à¹‰à¸™à¸—ี่ดิสà¸à¹Œ +Name[tr]=K Disk BoÅŸluÄŸu +Name[ven]=KDisiki ya mahala +Name[zh_TW]=ç£ç¢Ÿå‰©é¤˜ç©ºé–“ +Exec=kdf -caption "%c" +Icon=kdf +Type=Application +GenericName=View Disk Usage +GenericName[af]=Besigtig Disket Gebruik +GenericName[ar]=عرض المستخدم من القرص +GenericName[bg]=Свободно мÑÑто на диÑка +GenericName[bs]=Pregled iskoriÅ¡tenosti diska +GenericName[ca]=Veure l'ús de disc +GenericName[cs]=Zobrazenà využità disku +GenericName[cy]=Gweld Defnydd y Disg +GenericName[da]=Se diskforbrug +GenericName[de]=Festplattenbelegung etc. anzeigen +GenericName[el]=Î Ïοβολή χÏήσης του δίσκου +GenericName[eo]=Montras la okupitan kaj liberan spacon sur la diskoj +GenericName[es]=Muestra el uso del disco +GenericName[et]=Kettakasutus +GenericName[eu]=Erakutsi Diskoaren Erabilera +GenericName[fa]=مشاهدۀ کاربرد دیسک +GenericName[fi]=Näytä levynkäyttö +GenericName[fr]=Affiche l'utilisation de l'espace disque +GenericName[ga]=Taispeáin úsáid diosca +GenericName[he]=הצגת שיעור השימוש ×‘×“×™×¡×§×™× +GenericName[hi]=डिसà¥à¤• उपयोग देखें +GenericName[hr]=Prikazuje iskoriÅ¡tenost diska +GenericName[hu]=Lemezterület-kijelzÅ‘ +GenericName[is]=Skoða nýtni á diskum +GenericName[it]=Mostra lo spazio disco libero +GenericName[ja]=ディスク使用状æ³ã‚’表示 +GenericName[ka]=იხილეთ დისკის გáƒáƒ›áƒáƒ§áƒ”ნებრ+GenericName[kk]=ДиÑкідегі орынды көрÑету +GenericName[km]=មើល​ការប្រើប្រាស់​ážáž¶ážŸ +GenericName[lt]=ŽiÅ«rÄ—ti disko panaudojimÄ… +GenericName[lv]=SkatÄ«t Diska IzmantoÅ¡anu +GenericName[mk]=Видете ја иÑкориÑтеноÑта на диÑкот +GenericName[ms]=Lihat Penggunaan Cakera +GenericName[mt]=Uri l-użu tad-diski +GenericName[nb]=Vis diskplass +GenericName[nds]=Fastplattbruuk wiesen +GenericName[ne]=डिसà¥à¤• उपयोग हेरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ +GenericName[nl]=Schijfgebruik bekijken +GenericName[nn]=Vis diskbruk +GenericName[pa]=ਡਿਸਕ ਦੀ ਵਰਤੀ ਥਾਂ ਵੇਖੋ +GenericName[pl]=Informacja o wolnym miejscu na dyskach +GenericName[pt]=Utilização do Disco +GenericName[pt_BR]=Ver Uso do Disco +GenericName[ro]=AfiÅŸează utilizarea discului +GenericName[ru]=ИÑпользование диÑков +GenericName[sk]=Využitie disku +GenericName[sl]=Pokaže porabo diska +GenericName[sr]=Приказ иÑкоришћеноÑти диÑкова +GenericName[sr@Latn]=Prikaz iskorišćenosti diskova +GenericName[sv]=Visa diskanvändning +GenericName[ta]=வடà¯à®Ÿà¯ பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ பாரà¯à®•à¯à®•à®µà¯à®®à¯ +GenericName[tg]=Ðазари ИÑтифодабарии ДиÑк +GenericName[th]=à¹à¸ªà¸”งà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸žà¸·à¹‰à¸™à¸—ี่ดิสà¸à¹Œ +GenericName[tr]=Disk Kullanımını Görüntüle +GenericName[uk]=ПереглÑд викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð¸Ñку +GenericName[ven]=Sedzani mashumisele a Disk +GenericName[vi]=Xem Ä‘Ä©a trống +GenericName[wa]=Vey l' eployaedje del deure plake +GenericName[xh]=Jonga Ukusebenziseka KweDiskic +GenericName[zh_CN]=查看ç£ç›˜ä½¿ç”¨çŠ¶å†µ +GenericName[zh_TW]=檢視ç£ç¢Ÿä½¿ç”¨æƒ…å½¢ +GenericName[zu]= Buka Ukusetshenziswa Kwediski +Terminal=false +DocPath=kdf/index.html +X-KDE-StartupNotify=true +X-DCOP-ServiceType=Multi +Categories=Qt;KDE;System;X-KDE-More; diff --git a/kdf/kdf.h b/kdf/kdf.h new file mode 100644 index 0000000..9cae3c7 --- /dev/null +++ b/kdf/kdf.h @@ -0,0 +1,45 @@ +/* + kdf.h - KDiskFree + + Copyright (C) 1998 by Michael Kropfberger <michael.kropfberger@gmx.net> + + 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. + + */ + +#ifndef __KDF_H__ +#define __KDF_H__ + +#include <kmainwindow.h> +#include <kmenubar.h> + +#include "kdfwidget.h" + +/***************************************************************/ +class KDFTopLevel : public KMainWindow +{ + Q_OBJECT + + public: + KDFTopLevel(QWidget *parent=0, const char *name=0); + ~KDFTopLevel() { }; + + protected slots: + virtual bool queryExit( void ); + protected: + KDFWidget* kdf; +}; + +#endif diff --git a/kdf/kdfconfig.cpp b/kdf/kdfconfig.cpp new file mode 100644 index 0000000..499e2e3 --- /dev/null +++ b/kdf/kdfconfig.cpp @@ -0,0 +1,263 @@ +/* + * kdfconfig.cpp + * + * Copyright (c) 1999 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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. + */ + + +// +// 1999-11-29 Espen Sand +// Converted to QLayout and QListView + cleanups +// + + +#include <qcheckbox.h> +#include <qheader.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qlcdnumber.h> +#include <qlineedit.h> + +#include <kapplication.h> +#include <kconfig.h> +#include <kdialog.h> +#include <klocale.h> +#include <kiconloader.h> + +#include "listview.h" +#include "kdfconfig.h" + +#ifndef GUI_DEFINED +static bool GUI; +#define GUI_DEFINED +#endif + + +KDFConfigWidget::KDFConfigWidget(QWidget *parent, const char *name, bool init) + : QWidget( parent, name) +{ + + mTabName.resize(8); + mTabName[0] = new CTabName( "Icon", i18n("Icon") ); + mTabName[1] = new CTabName( "Device", i18n("Device") ); + mTabName[2] = new CTabName( "Type", i18n("Type") ); + mTabName[3] = new CTabName( "Size", i18n("Size") ); + mTabName[4] = new CTabName( "MountPoint", i18n("Mount Point") ); + mTabName[5] = new CTabName( "Free", i18n("Free") ); + // xgettext:no-c-format + mTabName[6] = new CTabName( "Full%", i18n("Full %") ); + mTabName[7] = new CTabName( "UsageBar", i18n("Usage") ); + + GUI = !init; + if(GUI) + { + QString text; + QVBoxLayout *topLayout = new QVBoxLayout( this, 0, KDialog::spacingHint()); + + mList = new CListView( this, "list", 1 ); + mList->setAllColumnsShowFocus(true); + mList->setFrameStyle( QFrame::WinPanel + QFrame::Sunken ); + mList->header()->setMovingEnabled(false); + for( uint i=0; i < mTabName.size(); i++ ) + { + mList->addColumn( mTabName[i]->mName ); + } + connect( mList, SIGNAL(clicked(QListViewItem *, const QPoint &, int)), + this, SLOT(toggleListText(QListViewItem *,const QPoint &,int))); + connect( mList, SIGNAL(clicked(QListViewItem *, const QPoint &, int)), + this, SLOT(slotChanged())); + topLayout->addWidget( mList ); + + QListViewItem *mListItem = new QListViewItem( mList ); + for( uint i=mList->header()->count(); i>0; i-- ) + { + mListItem->setText(i-1, i18n("visible") ); + mListItem->setPixmap( i-1, UserIcon ( "tick" ) ); + } + mList->setSelected( mListItem, true ); + + QGridLayout *gl = new QGridLayout( 2, 2 ); + topLayout->addLayout( gl ); + gl->setColStretch( 1, 10 ); + + mScroll = new QScrollBar( this ); + Q_CHECK_PTR(mScroll); + mScroll->setOrientation( QScrollBar::Horizontal ); + mScroll->setSteps(1,20); + mScroll->setRange(0, 180 ); + gl->addWidget( mScroll, 1, 1 ); + connect(mScroll,SIGNAL(valueChanged(int)),this,SLOT(slotChanged())); + + mLCD = new QLCDNumber( this ); + Q_CHECK_PTR(mLCD); + mLCD->setNumDigits( 3 ); + mLCD->setSegmentStyle(QLCDNumber::Filled); + connect(mScroll,SIGNAL(valueChanged(int)),mLCD,SLOT(display(int))); + gl->addMultiCellWidget( mLCD, 0, 1, 0, 0 ); + + text = i18n("Update frequency [seconds]. The value 0 disables update" ); + QLabel *label = new QLabel( text, this ); + Q_CHECK_PTR(label); + gl->addWidget( label, 0, 1 ); + + + label = new QLabel( i18n("File manager (e.g. konsole -e mc %m):") ,this); + Q_CHECK_PTR(label); + topLayout->addWidget( label ); + + mFileManagerEdit = new QLineEdit( this ); + Q_CHECK_PTR(mFileManagerEdit); + topLayout->addWidget( mFileManagerEdit ); + connect(mFileManagerEdit,SIGNAL(textChanged (const QString &)),this,SLOT(slotChanged())); + + text = i18n("Open file manager automatically on mount"); + mOpenMountCheck = new QCheckBox(text, this ); + Q_CHECK_PTR(mOpenMountCheck); + topLayout->addWidget( mOpenMountCheck ); + connect(mOpenMountCheck,SIGNAL(toggled(bool)),this,SLOT(slotChanged())); + + text = i18n("Pop up a window when a disk gets critically full"); + mPopupFullCheck = new QCheckBox( text, this ); + Q_CHECK_PTR(mPopupFullCheck); + topLayout->addWidget( mPopupFullCheck ); + connect(mPopupFullCheck,SIGNAL(toggled(bool)),this,SLOT(slotChanged())); + } + + loadSettings(); + if( init ) + { + applySettings(); + } +} + + +KDFConfigWidget::~KDFConfigWidget() +{ +} + + +void KDFConfigWidget::closeEvent(QCloseEvent *) +{ + applySettings(); + kapp->quit(); +} + + +void KDFConfigWidget::applySettings( void ) +{ + KConfig &config = *kapp->config(); + config.setGroup("KDFConfig"); + + if( GUI ) + { + //config.writeEntry( "Width", width() ); + //config.writeEntry( "Height", height() ); + + mStd.setFileManager( mFileManagerEdit->text() ); + mStd.setUpdateFrequency( mScroll->value() ); + mStd.setPopupIfFull( mPopupFullCheck->isChecked() ); + mStd.setOpenFileManager( mOpenMountCheck->isChecked() ); + mStd.writeConfiguration(); + + QListViewItem *item = mList->firstChild(); + if( item != 0 ) + { + for( int i=mList->header()->count(); i>0; i-- ) + { + bool state = item->text(i-1) == i18n("visible") ? true : false; + config.writeEntry( mTabName[i-1]->mRes, state ); + } + } + } + else + { + mStd.writeDefaultFileManager(); + } + config.sync(); +} + + +void KDFConfigWidget::loadSettings( void ) +{ + KConfig &config = *kapp->config(); + config.setGroup("KDFConfig"); + + if( GUI ) + { + mStd.updateConfiguration(); + mScroll->setValue( mStd.updateFrequency() ); + mLCD->display( mStd.updateFrequency() ); + mPopupFullCheck->setChecked( mStd.popupIfFull() ); + mOpenMountCheck->setChecked( mStd.openFileManager() ); + mFileManagerEdit->setText( mStd.fileManager() ); + + QListViewItem *item = mList->firstChild(); + if( item != 0 ) + { + for( int i=mList->header()->count(); i>0; i-- ) + { + int j = config.readNumEntry( mTabName[i-1]->mRes, 1 ); + item->setText( i-1, j==0 ? i18n("hidden") : i18n("visible") ); + item->setPixmap( i-1, j==0 ? UserIcon ( "delete" ) + : UserIcon ( "tick" ) ); + } + } + } + +} + +void KDFConfigWidget::defaultsBtnClicked( void ) +{ + mStd.setDefault(); + mScroll->setValue( mStd.updateFrequency() ); + mLCD->display( mStd.updateFrequency() ); + mPopupFullCheck->setChecked( mStd.popupIfFull() ); + mOpenMountCheck->setChecked( mStd.openFileManager() ); + mFileManagerEdit->setText( mStd.fileManager() ); + + QListViewItem *item = mList->firstChild(); + if( item != 0 ) + { + for( int i=mList->header()->count(); i>0; i-- ) + { + item->setText( i-1, i18n("visible") ); + item->setPixmap( i-1, UserIcon ( "tick" ) ); + + } + } +} + + +void KDFConfigWidget::toggleListText( QListViewItem *item, const QPoint &, + int column ) +{ + if (!item) return; + QString text = item->text( column ); + item->setText(column, text==i18n("visible")?i18n("hidden"):i18n("visible")); + item->setPixmap( column, text==i18n("visible") ? UserIcon ( "delete" ) + : UserIcon ( "tick" ) ); +} + +void KDFConfigWidget::slotChanged() +{ + emit configChanged(); +} + +#include "kdfconfig.moc" diff --git a/kdf/kdfconfig.h b/kdf/kdfconfig.h new file mode 100644 index 0000000..34aa7d4 --- /dev/null +++ b/kdf/kdfconfig.h @@ -0,0 +1,97 @@ +/* + * kdfconfig.h + * + * Copyright (c) 1999 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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. + */ + + +#ifndef __KDFCONFIG_H__ +#define __KDFCONFIG_H__ + +#include <qmemarray.h> +#include <qstring.h> + +#include "stdoption.h" + +class QCheckBox; +class QLabel; +class QLCDNumber; +class QLineEdit; +class QListViewItem; +class QScrollBar; + +class CListView; + +class KDFConfigWidget : public QWidget +{ + Q_OBJECT + + class CTabName + { + public: + CTabName( const QString &res, const QString &name ) + { + mRes = res; + mName = name; + } + CTabName( void ) { } + ~CTabName( void ) { } + + QString mRes; + QString mName; + }; + + public: + KDFConfigWidget( QWidget *parent=0, const char *name=0, bool init=false); + ~KDFConfigWidget(); + + public slots: + void loadSettings( void ); + void applySettings( void ); + void defaultsBtnClicked( void ); + + protected slots: + void slotChanged(); + + private slots: + void toggleListText( QListViewItem *item, const QPoint &, int column ); + + protected: + void closeEvent( QCloseEvent * ); + + private: + QMemArray<CTabName*> mTabName; + CListView *mList; + QScrollBar *mScroll; + QLCDNumber *mLCD; + QLineEdit *mFileManagerEdit; + QCheckBox *mOpenMountCheck; + QCheckBox *mPopupFullCheck; + CStdOption mStd; + + signals: + void configChanged(); +}; + + +#endif + + + diff --git a/kdf/kdfui.rc b/kdf/kdfui.rc new file mode 100644 index 0000000..65589e2 --- /dev/null +++ b/kdf/kdfui.rc @@ -0,0 +1,11 @@ +<!DOCTYPE kpartgui> +<kpartgui name="kdf" version="1"> +<MenuBar> + <Menu name="file" noMerge="1"> + <text>&File</text> + <Action name="updatedf"/> + <Separator /> + <Action name="file_quit"/> + </Menu> +</MenuBar> +</kpartgui> diff --git a/kdf/kdfwidget.cpp b/kdf/kdfwidget.cpp new file mode 100644 index 0000000..ea7aee9 --- /dev/null +++ b/kdf/kdfwidget.cpp @@ -0,0 +1,652 @@ +/* + * kdfwidget.cpp + * + * Copyright (c) 1998-2001 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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. + */ + +// +// 1999-11-29 Espen Sand +// Converted to QLayout and QListView + cleanups +// 1999-12-05 Espen Sand +// Usage bars should work again. +// + +#include <stdlib.h> + +#include <qheader.h> +#include <qtimer.h> +#include <qlayout.h> +#include <qpainter.h> + +#include <kapplication.h> +#include <kcmenumngr.h> +#include <kmessagebox.h> +#include <kpopupmenu.h> +#include <kprocess.h> + +#include "listview.h" +#include "kdfwidget.h" +#include "optiondialog.h" + + +#define BAR_COLUMN 7 +#define FULL_PERCENT 95.0 + +#ifndef GUI_DEFINED +static bool GUI; +#define GUI_DEFINED +#endif + +/**************************************************************/ + +CListViewItem::CListViewItem( CListView * parent, QListViewItem * after ) + :QListViewItem( parent, after ) +{} + +int CListViewItem::compare ( QListViewItem *i, int column, bool ) const +{ + QString tmp; + + CListViewItem *c = static_cast<CListViewItem*>(i); + + switch (column) { + case KDFWidget::sizeCol: + return (size==c->size) ? 0 : (size<c->size) ? -1 : 1; + + case KDFWidget::freeCol: + return (avail==c->avail) ? 0 : (avail<c->avail) ? -1 : 1; + + case KDFWidget::fullCol: + case KDFWidget::usageCol: + return (full==c->full) ? 0 : (full<c->full) ? -1 : 1; + + default: + return key(column,true).compare(i->key(column,true)); + } +} + +void CListViewItem::setKeys (int kb_size, int kb_avail, float percent_full) +{ + size = kb_size; + avail = kb_avail; + full = (percent_full >= 0.) ? percent_full : 0.; + return; +} + +/**************************************************************/ + +KDFWidget::KDFWidget( QWidget *parent, const char *name, bool init ) + : QWidget(parent, name), mOptionDialog(0), mPopup(0), mTimer(0) +{ + connect(&mDiskList , SIGNAL(readDFDone() ), + this, SLOT (updateDFDone()) ); + connect(&mDiskList , SIGNAL(criticallyFull(DiskEntry*)), + this, SLOT (criticallyFull(DiskEntry*)) ); + + mTabProp.resize(8); + mTabProp[0] = new CTabEntry( "Icon", i18n("Icon"), true, 32); + mTabProp[1] = new CTabEntry( "Device", i18n("Device"), true, 80); + mTabProp[2] = new CTabEntry( "Type", i18n("Type"), true, 50); + mTabProp[3] = new CTabEntry( "Size", i18n("Size"), true, 72); + mTabProp[4] = new CTabEntry( "MountPoint", i18n("Mount Point"), true, 90 ); + mTabProp[5] = new CTabEntry( "Free", i18n("Free"), true, 55); + // xgettext:no-c-format + mTabProp[6] = new CTabEntry( "Full%", i18n("Full %"), true, 70); + mTabProp[7] = new CTabEntry( "UsageBar", i18n("Usage"), true, 100); + + GUI = !init; + if( GUI ) + { + QVBoxLayout *topLayout = new QVBoxLayout( this, 0, 0 ); + mList = new CListView( this, "list" ); + topLayout->addWidget( mList ); + + mList->setAllColumnsShowFocus( true ); + mList->setFrameStyle( QFrame::WinPanel + QFrame::Sunken ); + mList->setShowSortIndicator(true); + connect( mList, + SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int )), + this, SLOT( rightButtonPressed( QListViewItem *, const QPoint &, int ))); + connect( mList, + SIGNAL( rightButtonClicked( QListViewItem *, const QPoint &, int )), + this, SLOT( rightButtonClicked( QListViewItem *, const QPoint &, int ))); + connect( mList->header(), SIGNAL(sizeChange(int, int, int)), + this, SLOT(columnSizeChanged(int, int, int)) ); + makeColumns(); + + mIsTopLevel = QString(parent->className()) == "KDFTopLevel" ? true : false; + } + + loadSettings(); + if( init == true ) + { + applySettings(); + } +} + + +KDFWidget::~KDFWidget() +{ +} + + + +void KDFWidget::makeColumns( void ) +{ + uint i; + + // + // 1999-11-29 Espen Sand + // This smells like a bad hack but I need to remove the headers + // first. If I don't, the list look like shit afterwards. The iterator + // is just used to prevent an endless loop. With my Qt (1999-11-10 ?) + // I only need as many iterations as there are header items but who knows + // what a new Qt can do! + // + for( i=1000; mList->header()->count() > 0 && i>0; i-- ) + { + mList->header()->removeLabel( 0 ); + mList->header()->update(); + } + for( i=0; i<mTabProp.size(); mList->removeColumn(i++) ); + mList->clear(); + + for( i=0; i<mTabProp.size(); i++ ) + { + CTabEntry &e = *mTabProp[i]; + if( e.mVisible == true ) + mList->addColumn( e.mName, e.mWidth ); + else + mList->addColumn( e.mName, 0 ); // zero width makes it invisible + } + +} + + + + +/******************************************************************/ +void KDFWidget::closeEvent(QCloseEvent *) +{ + applySettings(); + kapp->quit(); +} + + +void KDFWidget::settingsChanged( void ) +{ + applySettings(); + loadSettings(); +} + + +/*************************************************************************** + * writes the KConfig +**/ +void KDFWidget::applySettings( void ) +{ + KConfig &config = *kapp->config(); + + config.setGroup("KDiskFree"); + if( GUI ) + { + for( uint i=0; i<mTabProp.size(); i++ ) + { + CTabEntry &e = *mTabProp[i]; + if( e.mVisible == true ) + { + e.mWidth = mList->columnWidth(i); + } + config.writeEntry( e.mRes, e.mWidth ); + } + } + config.sync(); + updateDF(); +} + + +/*************************************************************************** + * reads the KConfig +**/ +void KDFWidget::loadSettings( void ) +{ + mStd.updateConfiguration(); + + if(GUI) + { + KConfig &config = *kapp->config(); + config.setGroup("KDiskFree"); + for( uint i=0; i<mTabProp.size(); i++ ) + { + CTabEntry &e = *mTabProp[i]; + e.mWidth = config.readNumEntry( e.mRes, e.mWidth ); + } + if (mTabProp[usageCol]->mWidth > 16) + mTabProp[usageCol]->mWidth -= 16; + + config.setGroup("KDFConfig"); + for( uint i=0; i<mTabProp.size(); i++ ) + { + CTabEntry &e = *mTabProp[i]; + e.mVisible = config.readBoolEntry( e.mRes, e.mVisible ); + } + + makeColumns(); + setUpdateFrequency( mStd.updateFrequency() ); + updateDF(); + } +} + + +/*************************************************************************** + * pops up the SettingsBox if the settingsBtn is clicked +**/ +void KDFWidget::settingsBtnClicked( void ) +{ + if( mIsTopLevel == true ) + { + if( mOptionDialog == 0 ) + { + mOptionDialog = new COptionDialog( this, "options", false ); + if( mOptionDialog == 0 ) { return; } + connect( mOptionDialog, SIGNAL(valueChanged()), + this, SLOT(settingsChanged()) ); + } + mOptionDialog->show(); + } +} + + +/*************************************************************************** + * resets the timer for automatic df-refreshes +**/ +void KDFWidget::setUpdateFrequency( int frequency ) +{ + // + // Kill current timer and restart it if the frequency is + // larger than zero. + // + killTimers(); + if( frequency > 0 ) + { + startTimer( frequency * 1000 ); + } +} + +/*************************************************************************** + * Update (reread) all disk-dependencies +**/ +void KDFWidget::timerEvent(QTimerEvent *) +{ + updateDF(); +} + + +/*************************************************************************** + * checks fstab & df +**/ +void KDFWidget::updateDF( void ) +{ + // + // We can only do this if the popupmenu is not present + // + if( mPopup == 0 ) + { + readingDF = TRUE; + mDiskList.readFSTAB(); + mDiskList.readDF(); + } +} + +/*************************************************************************** + * gets the signal when the diskList is complete and up to date +**/ +void KDFWidget::updateDFDone( void ){ + if (mPopup) //The popup menu is ont he screen... Don't touch the list view... + return; + + mList->clear(); + + int i=0; + CListViewItem *item = 0; + for( DiskEntry *disk=mDiskList.first(); disk!=0; disk=mDiskList.next() ) + { + i++; + QString size, percent; + if( disk->kBSize() > 0 ) + { + percent = KGlobal::locale()->formatNumber(disk->percentFull(), 1) + '%'; + size = disk->prettyKBSize(); + } + else + { + percent = i18n("N/A"); + size = i18n("N/A"); + } + + int k=0; + item = new CListViewItem( mList, item ); + bool root = disk->mountOptions().find("user",0,false)==-1 ? true : false; + item->setPixmap( k++, mList->icon( disk->iconName(), root ) ); + item->setText( k++, disk->deviceName() ); + item->setText( k++, disk->fsType() ); + item->setText( k++, size ); + item->setText( k++, disk->mountPoint() ); + item->setText( k++, disk->prettyKBAvail() ); + item->setText( k++, percent ); + item->setKeys( disk->kBSize(), disk->kBAvail(), disk->percentFull()); + } + readingDF = false; + updateDiskBarPixmaps(); + + mList->sort(); +} + +/*************************************************************************** + * Update display +**/ +void KDFWidget::resizeEvent( QResizeEvent * ) +{ + updateDiskBarPixmaps(); +} + + + +/************************************************************************** + * connected with diskList +**/ +void KDFWidget::criticallyFull( DiskEntry *disk ) +{ + if( mStd.popupIfFull() == true ) + { + QString msg = i18n("Device [%1] on [%2] is getting critically full!"). + arg(disk->deviceName()).arg(disk->mountPoint()); + KMessageBox::sorry( this, msg, i18n("Warning")); + } +} + + +/************************************************************************** + * find correct disk related to list item +**/ +DiskEntry *KDFWidget::selectedDisk( QListViewItem *item ) +{ + if( item == 0 ) + { + item = mList->selectedItem(); + } + if( item == 0 ) + { + return(0); + } + + DiskEntry disk(item->text(deviceCol)); + disk.setMountPoint(item->text(mntCol)); + + // I can't get find() to work. The Disks::compareItems(..) is + // never called. + // + //int pos=mDiskList->find(disk); + + int pos = -1; + for( u_int i=0; i<mDiskList.count(); i++ ) + { + DiskEntry *item = mDiskList.at(i); + int res = disk.deviceName().compare( item->deviceName() ); + if( res == 0 ) + { + res = disk.mountPoint().compare( item->mountPoint() ); + } + if( res == 0 ) + { + pos = i; + break; + } + } + + + return mDiskList.at(pos); + // return(0); +} + +void KDFWidget::rightButtonPressed( QListViewItem *item, const QPoint &p, int ) +{ + if( KContextMenuManager::showOnButtonPress() == true ) + { + popupMenu( item, p ); + } +} + + +void KDFWidget::rightButtonClicked( QListViewItem *item, const QPoint &p, int ) +{ + if( KContextMenuManager::showOnButtonPress() == false ) + { + popupMenu( item, p ); + } +} + + +/************************************************************************** + * pops up and asks for mount/umount right-clicked device +**/ +void KDFWidget::popupMenu( QListViewItem *item, const QPoint &p ) +{ + if (mPopup) //The user may even be able to popup another menu while this open is active... + return; + + // + // The list update will be disabled as long as this menu is + // visible. Reason: The 'disk' may no longer be valid. + // + + mDiskList.setUpdatesDisabled(true); + DiskEntry *disk = selectedDisk( item ); + if( disk == 0 ) + { + return; + } + + mPopup = new KPopupMenu( 0 ); + mPopup->insertTitle( disk->mountPoint() ); + mPopup->insertItem( i18n("Mount Device"), 0 ); + mPopup->insertItem( i18n("Unmount Device"), 1 ); + mPopup->insertSeparator(); + mPopup->insertItem( i18n("Open in File Manager"), 2 ); + mPopup->setItemEnabled( 0, disk->mounted() ? false : true ); + mPopup->setItemEnabled( 1, disk->mounted() ); + mPopup->setItemEnabled( 2, disk->mounted() ); + int position = mPopup->exec( p ); + + + + bool openFileManager = false; + if( position == -1 ) + { + mDiskList.setUpdatesDisabled(false); + delete mPopup; mPopup = 0; + return; + } + else if( position == 0 || position == 1 ) + { + item->setText( sizeCol, i18n("MOUNTING") ); + item->setText( freeCol, i18n("MOUNTING") ); + item->setPixmap( 0, mList->icon( "mini-clock", false ) ); + + int val = disk->toggleMount(); + if( val != 0 /*== false*/ ) + { + KMessageBox::error( this, disk->lastSysError() ); + } + else if ( ( mStd.openFileManager() == true) + && (position == 0) ) //only on mount + { + openFileManager = true; + } + + delete item; + mDiskList.deleteAllMountedAt(disk->mountPoint()); + } + else if( position == 2 ) + { + openFileManager = true; + } + + if( openFileManager == true ) + { + kdDebug() << "opening filemanager" << endl; + if( mStd.fileManager().isEmpty() == false ) + { + QString cmd = mStd.fileManager(); + int pos = cmd.find("%m"); + if( pos > 0 ) + { + cmd = cmd.replace( pos, 2, KProcess::quote(disk->mountPoint()) ) + " &"; + } + else + { + cmd += " " + KProcess::quote(disk->mountPoint()) +" &"; + } + system( QFile::encodeName(cmd) ); + } + } + + //Update only here as showing of error message triggers event loop. + mDiskList.setUpdatesDisabled(false); + delete mPopup; mPopup = 0; + + if( position != 2 ) // No need to update when just opening the fm. + { + updateDF(); + } + +} + + + + +/************************************************************************** + * recalculates and repaints the pixBars +**/ +void KDFWidget::updateDiskBarPixmaps( void ) +{ + if (mTabProp[usageCol]->mVisible != true) + return; + + + int size=0, w=0; + + for(uint i=0; i<mTabProp.size()-1; i++ ) + size += mList->columnWidth(i); + w=mList->width() - size - 4; + if (w<0) + w=0; + mList->setColumnWidth(usageCol, w ); + + int h = mList->fontMetrics().lineSpacing()-2; + if( h <= 0 ) + { + return; + } + + int i=0; + for(QListViewItem *it=mList->firstChild(); it!=0;it=it->nextSibling(),i++ ) + { + // I can't get find() to work. The Disks::compareItems(..) is + // never called. + // + //int pos=mDiskList->find(disk); + + DiskEntry dummy(it->text(deviceCol)); + dummy.setMountPoint(it->text(mntCol)); + int pos = -1; + for( u_int i=0; i<mDiskList.count(); i++ ) + { + DiskEntry *item = mDiskList.at(i); + int res = dummy.deviceName().compare( item->deviceName() ); + if( res == 0 ) + { + res = dummy.mountPoint().compare( item->mountPoint() ); + } + if( res == 0 ) + { + pos = i; + break; + } + } + + + DiskEntry *disk = mDiskList.at(pos); + if( disk == 0 ) { continue; } + + if( disk->mounted() == true && disk->percentFull() != -1 ) + { + int w = mList->columnWidth(usageCol)-2; + if( w <= 0 ) { continue; } + + QPixmap *pix = new QPixmap( w, h ); + if( pix == 0 ) { continue; } + + pix->fill(white); + QPainter p(pix); + p.setPen(black); + p.drawRect(0,0,w,h); + QColor c; + if ( (disk->iconName().find("cdrom") != -1) + || (disk->iconName().find("writer") != -1) ) + c = gray; + else + c = disk->percentFull() > FULL_PERCENT ? red : darkGreen; + p.setBrush(c ); + p.setPen(white); + p.drawRect(1,1,(int)(((float)pix->width()-2)*(disk->percentFull()/100)), + pix->height()-2); + it->setPixmap ( usageCol, *pix ); + p.end(); + delete pix; + } + } +} + + +void KDFWidget::columnSizeChanged( int, int, int ) +{ + + if( mTimer == 0 ) + { + mTimer = new QTimer( this ); + connect( mTimer, SIGNAL(timeout()), this, SLOT(updateDiskBarPixmaps()) ); + } + else if( mTimer->isActive() == true ) + { + mTimer->stop(); + } + + mTimer->start( 10, true ); +} + + +void KDFWidget::invokeHelp() +{ + kapp->invokeHelp("", "kcontrol/kdf"); +} + +#include "kdfwidget.moc" + diff --git a/kdf/kdfwidget.h b/kdf/kdfwidget.h new file mode 100644 index 0000000..13e14ed --- /dev/null +++ b/kdf/kdfwidget.h @@ -0,0 +1,153 @@ +/* + * kdfwidget.h + * + * Copyright (c) 1998 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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. + */ + + +#ifndef __KDFWIDGET_H__ +#define __KDFWIDGET_H__ + +#include <qmemarray.h> +#include <qglobal.h> +#include <qstring.h> +#include <qlistview.h> + +#include "disks.h" +#include "disklist.h" +#include "mntconfig.h" +#include "kdfconfig.h" +#include "stdoption.h" + +class CListView; +class COptionDialog; +class QTimer; +class KPopupMenu; + +/**************************************************************/ + +class CTabEntry +{ + public: + CTabEntry( const QString &res, const QString &name, bool visible, + uint width ) + { + mRes = res; + mName = name; + mVisible = visible; + mWidth = width; + } + CTabEntry( void ) { } + ~CTabEntry( void ) { } + + + QString mRes; + QString mName; + bool mVisible; + uint mWidth; +}; + +/**************************************************************/ +// +// 2001-03-10 Walter F.J. Mueller <W.F.J.Mueller@gsi.de> +// The purpose of this class is: +// 1) overload the key() method to provide sorting keys so that the +// columns with a numeric value are sorted by numerical value. +// + +class CListViewItem : public QListViewItem +{ + public: + CListViewItem ( CListView * parent, QListViewItem * after ); + + virtual int compare ( QListViewItem* i, int col, bool) const; + + void setKeys ( int kb_size, int kb_avail, float percent_full ) ; + + private: + int size; + int avail; + float full; +}; + +/**************************************************************/ + +class KDFWidget : public QWidget +{ + Q_OBJECT + + public: + enum ColId + { + iconCol = 0, + deviceCol = 1, + typeCol = 2, + sizeCol = 3, + mntCol = 4, + freeCol = 5, + fullCol = 6, + usageCol = 7 + }; + + public: + KDFWidget( QWidget *parent=0, const char *name=0, bool init=false); + ~KDFWidget( void ); + + public slots: + void settingsChanged( void ); + void loadSettings( void ); + void applySettings( void ); + void updateDF( void ); + void updateDFDone( void ); + void settingsBtnClicked( void ); + + private slots: + void criticallyFull( DiskEntry *disk ); + void rightButtonPressed( QListViewItem *item, const QPoint &p, int ); + void rightButtonClicked( QListViewItem *item, const QPoint &p, int ); + void popupMenu( QListViewItem *item, const QPoint &p ); + void setUpdateFrequency( int frequency ); + void columnSizeChanged( int column, int, int newSize ); + void updateDiskBarPixmaps( void ); + void invokeHelp( void ); + + protected: + void timerEvent( QTimerEvent * ); + void closeEvent( QCloseEvent * ); + void resizeEvent( QResizeEvent * ); + + private: + void makeColumns( void ); + DiskEntry *selectedDisk( QListViewItem *item=0 ); + + private: + bool readingDF; + QMemArray<CTabEntry*> mTabProp; + CListView *mList; + COptionDialog *mOptionDialog; + KPopupMenu *mPopup; + QTimer *mTimer; + DiskList mDiskList; + bool mIsTopLevel; + CStdOption mStd; +}; + + +#endif diff --git a/kdf/kwikdisk.cpp b/kdf/kwikdisk.cpp new file mode 100644 index 0000000..d287b16 --- /dev/null +++ b/kdf/kwikdisk.cpp @@ -0,0 +1,346 @@ +/* + kwikdisk.cpp - KDiskFree + + Copyright (C) 1999 by Michael Kropfberger <michael.kropfberger@gmx.net> + + 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. + + */ + +// +// 1999-12-03 Espen Sand +// Cleanups, improvements and fixes for KDE-2 +// +// 2004-07-15 Stanislav Karchebny +// Rewrite for KDE 3 +// + +#include "kwikdisk.h" + +#include <stdlib.h> + +#include <qpen.h> +#include <qbitmap.h> +#include <qpainter.h> + +#include <kmainwindow.h> +#include <klocale.h> +#include <kapplication.h> +#include <kaboutdata.h> +#include <kcmdlineargs.h> +#include <kmessagebox.h> +#include <kpopupmenu.h> +#include <krun.h> + +static const char description[] = + I18N_NOOP("KDE Free disk space utility"); + +static const char version[] = "0.2"; + +static KCmdLineOptions options[] = +{ + KCmdLineLastOption +}; + +/*****************************************************************************/ + +KwikDisk::KwikDisk() + : KSystemTray() + , m_readingDF(FALSE) + , m_dirty(TRUE) + , m_menuVisible(FALSE) + , m_inside(FALSE) + , m_optionDialog(0) +{ + kdDebug() << k_funcinfo << endl; + + setPixmap(KSystemTray::loadIcon("kdf")); + show(); + + connect( &m_diskList, SIGNAL(readDFDone()), this, SLOT(updateDFDone()) ); + connect( &m_diskList, SIGNAL(criticallyFull(DiskEntry*)), + this, SLOT(criticallyFull(DiskEntry*)) ); + + connect( contextMenu(), SIGNAL(aboutToHide()), this, SLOT(aboutToHide()) ); + + loadSettings(); + updateDF(); +} + +void KwikDisk::aboutToHide() +{ + kdDebug() << k_funcinfo << endl; + if( !m_inside ) + m_menuVisible = FALSE; +} + +void KwikDisk::enterEvent(QEvent *) +{ + kdDebug() << k_funcinfo << endl; + m_inside = TRUE; +} + +void KwikDisk::leaveEvent(QEvent *) +{ + kdDebug() << k_funcinfo << endl; + m_inside = FALSE; +} + +void KwikDisk::mousePressEvent(QMouseEvent *me) +{ + kdDebug() << k_funcinfo << endl; + + if( m_dirty ) + updateDF(); + + if( m_menuVisible ) + { + contextMenu()->hide(); + m_menuVisible = FALSE; + me->ignore(); + return; + } + + contextMenuAboutToShow(contextMenu()); + contextMenu()->popup( me->globalPos() ); + m_menuVisible = TRUE; +} + +void KwikDisk::loadSettings() +{ + kdDebug() << k_funcinfo << endl; + + m_options.updateConfiguration(); + setUpdateFrequency( m_options.updateFrequency() ); +} + +void KwikDisk::setUpdateFrequency(int frequency) +{ + kdDebug() << k_funcinfo << endl; + + // + // Kill current timer and restart it if the frequency is + // larger than zero. + // + killTimers(); + if( frequency > 0 ) + { + startTimer(frequency * 1000); + } +} + +/** + * Mark the list as dirty thus forcing a reload the next time the + * popup menu is about to become visible. Note: A current visible popup + * will not be updated now. + */ +void KwikDisk::timerEvent(QTimerEvent *) +{ + kdDebug() << k_funcinfo << endl; + m_dirty = TRUE; +} + +void KwikDisk::updateDF() +{ + kdDebug() << k_funcinfo << endl; + + m_readingDF = true; + m_diskList.readFSTAB(); + m_diskList.readDF(); +} + +void KwikDisk::updateDFDone() +{ + kdDebug() << k_funcinfo << endl; + + m_readingDF = FALSE; + m_dirty = FALSE; + + contextMenu()->clear(); + contextMenu()->insertTitle(KSystemTray::loadIcon("kdf"), i18n("KwikDisk")); + + int itemNo = 0; + for( DiskEntry *disk = m_diskList.first(); disk != 0; disk = m_diskList.next() ) + { + // FIXME: tool tips are unused atm + QString toolTipText = i18n("%1 (%2) %3 on %4") + .arg( disk->mounted() ? i18n("Unmount") : i18n("Mount")) + .arg(disk->fsType()).arg(disk->deviceName()).arg(disk->mountPoint()); + + QString entryName = disk->mountPoint(); + if( disk->mounted() ) + { + entryName += QString("\t\t\t[%1]").arg(disk->prettyKBAvail()); + } + int id = contextMenu()->insertItem("", this, SLOT(toggleMount(int)) ); + contextMenu()->setItemParameter(id, itemNo); + itemNo++; + + QPixmap *pix = new QPixmap(KSystemTray::loadIcon(disk->iconName())); + + if( getuid() !=0 && disk->mountOptions().find("user",0, false) == -1 ) + { + // + // Special root icon, normal user cant mount. + // + // 2000-01-23 Espen Sand + // Careful here: If the mask has not been defined we can + // not use QPixmap::mask() because it returns 0 => segfault + // + if( pix->mask() != 0 ) + { + QBitmap *bm = new QBitmap(*(pix->mask())); + if( bm != 0 ) + { + QPainter qp( bm ); + qp.setPen(QPen(white,1)); + qp.drawRect(0,0,bm->width(),bm->height()); + qp.end(); + pix->setMask(*bm); + } + QPainter qp( pix ); + qp.setPen(QPen(red,1)); + qp.drawRect(0,0,pix->width(),pix->height()); + qp.end(); + } + contextMenu()->disconnectItem(id,disk,SLOT(toggleMount())); + toolTipText = i18n("You must login as root to mount this disk"); + } + + contextMenu()->changeItem(*pix,entryName,id); + } + + contextMenu()->insertSeparator(); + + contextMenu()->insertItem( + KSystemTray::loadIcon("kdf"), + i18n("&Start KDiskFree"), this, SLOT(startKDF()),0); + + contextMenu()->insertItem( + KSystemTray::loadIcon("configure"), + i18n("&Configure KwikDisk..."), this, SLOT(changeSettings()),0); + + contextMenu()->insertItem( + KSystemTray::loadIcon("help"), + KStdGuiItem::help().text(), this, SLOT(invokeHelp()),0); + + contextMenu()->insertSeparator(); + + contextMenu()->insertItem( + KSystemTray::loadIcon("exit"), + KStdGuiItem::quit().text(), this, SIGNAL(quitSelected()) ); +} + +void KwikDisk::toggleMount(int item) +{ + kdDebug() << k_funcinfo << endl; + + DiskEntry *disk = m_diskList.at(item); + if( disk == 0 ) + { + return; + } + + int val = disk->toggleMount(); + if( val != 0 ) + { + KMessageBox::error(this, disk->lastSysError()); + } + else if( (m_options.openFileManager() == true) && (disk->mounted() == true ) ) + { + kdDebug() << "opening filemanager" << endl; + if( m_options.fileManager().isEmpty() == false ) + { + QString cmd = m_options.fileManager(); + int pos = cmd.find("%m"); + if( pos > 0 ) + { + cmd = cmd.replace( pos, 2, KProcess::quote(disk->mountPoint()) ) + " &"; + } + else + { + cmd += " " + KProcess::quote(disk->mountPoint()) +" &"; + } + system( QFile::encodeName(cmd) ); + } + } + m_dirty = TRUE; +} + +void KwikDisk::criticallyFull(DiskEntry *disk) +{ + kdDebug() << k_funcinfo << endl; + + if( m_options.popupIfFull() == true ) + { + QString msg = i18n("Device [%1] on [%2] is getting critically full!") + .arg(disk->deviceName()).arg(disk->mountPoint()); + KMessageBox::sorry( this, msg, i18n("Warning")); + } +} + +void KwikDisk::changeSettings() +{ + if( m_optionDialog == 0 ) + { + m_optionDialog = new COptionDialog(this, "options", FALSE); + if( !m_optionDialog ) return; + connect(m_optionDialog, SIGNAL(valueChanged()), + this, SLOT(loadSettings())); + } + m_optionDialog->show(); +} + +void KwikDisk::startKDF() +{ + kdDebug() << k_funcinfo << endl; + + KRun::runCommand("kdf"); +} + +void KwikDisk::invokeHelp() +{ + kapp->invokeHelp("", "kdf"); +} + +/*****************************************************************************/ + +int main(int argc, char **argv) +{ + KLocale::setMainCatalogue( "kdf" ); + + KAboutData about("kwikdisk", I18N_NOOP("KwikDisk"), version, description, + KAboutData::License_GPL, "(C) 2004 Stanislav Karchebny", + 0, 0, "Stanislav.Karchebny@kdemail.net"); + about.addAuthor( "Michael Kropfberger", I18N_NOOP("Original author"), + "michael.kropfberger@gmx.net" ); + about.addAuthor( "Espen Sand", I18N_NOOP("KDE 2 changes"), "" ); + about.addAuthor( "Stanislav Karchebny", I18N_NOOP("KDE 3 changes"), + "Stanislav.Karchebny@kdemail.net" ); + KCmdLineArgs::init(argc, argv, &about); + KCmdLineArgs::addCmdLineOptions( options ); + KApplication app; + KwikDisk *mainWin = 0; + + mainWin = new KwikDisk; + QObject::connect(mainWin, SIGNAL(quitSelected()), &app, SLOT(quit())); + + // mainWin has WDestructiveClose flag by default, so it will delete itself. + return app.exec(); +} + +/*****************************************************************************/ + +#include "kwikdisk.moc" diff --git a/kdf/kwikdisk.desktop b/kdf/kwikdisk.desktop new file mode 100644 index 0000000..7e3ab52 --- /dev/null +++ b/kdf/kwikdisk.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Name=KwikDisk +Name[af]=Kwikdisk +Name[eo]=Diskokroĉilo +Name[et]=Ketaste ühendamine +Name[fa]=Kwikدیسک +Name[hi]=कà¥à¤µà¤¿à¤•-डिसà¥à¤• +Name[ja]=マウントツール +Name[ne]=कà¥à¤µà¤¿à¤• डिसà¥à¤• +Name[sv]=Snabbdisk +Name[ta]= கிவிகà¯à®µà®Ÿà¯à®Ÿà¯ +Name[th]=เรียà¸à¹ƒà¸Šà¹‰à¸”ิสà¸à¹Œà¸”่วน +Exec=kwikdisk -caption "%c" +Icon=kwikdisk +Type=Application +DocPath=kdf/index.html +GenericName=Removable Media Utility +GenericName[af]=Verwyderbare Media Program +GenericName[ar]=أداة الوسائط القابلة للإزالة +GenericName[bg]=ПреноÑими ноÑители +GenericName[br]=Ostilh media lem-laka +GenericName[bs]=Alat za izmjenjive medije +GenericName[ca]=Utilitat per discos extraïbles +GenericName[cs]=Nástroj pro výmÄ›nné disky +GenericName[cy]=Cyfleuster Cyfryngau Symudadwy +GenericName[da]=Flytbart medieredskab +GenericName[de]=Dienstprogramm für Wechselmedien +GenericName[el]=ΕÏγαλείο αφαιÏοÏμενων μÎσων +GenericName[eo]=ÅœanÄebla disko ilo +GenericName[es]=Herramienta de medios extraÃbles +GenericName[et]=Eemaldatavate andmekandjate utiliit +GenericName[eu]=Euskarri Eramangarrien Erabilgarritasuna +GenericName[fa]=برنامۀ سودمند رسانه‌ای قابل ØØ°Ù +GenericName[fi]=Poistettavan median työkalu +GenericName[fr]=Utilitaire de média éjectable +GenericName[ga]=Uirlis Meáin Inscortha +GenericName[he]=כלי מדיה × ×©×œ×¤×ª +GenericName[hi]=हटाया जा सकने वाला मीडिया यूटिलिटी +GenericName[hr]=Alat za uklonjive medije +GenericName[hu]=Lemezcsatlakoztató +GenericName[is]=Diskatól +GenericName[it]=Accessorio per i supporti rimovibili +GenericName[ja]=リムーãƒãƒ–ルメディアユーティリティ +GenericName[ka]=მáƒáƒ®áƒ¡áƒœáƒáƒ“ი მედიის უტილიტრ+GenericName[kk]=ÐуыÑтырмалы таÑушының утилитаÑÑ‹ +GenericName[km]=ឧបករណáŸâ€‹áž˜áŸážŒáŸ€â€‹ážŠáŸ‚ល​អាច​យក​ចáŸáž‰ +GenericName[lt]=KeiÄiamų diskų ar kitų įrenginių programa +GenericName[mk]=Ðлатка за менливи ноÑачи +GenericName[ms]=Utiliti Media Mudah Alih +GenericName[nb]=Verktøy for flyttbare media +GenericName[nds]=Deenstprogramm för tuuschbore Medien +GenericName[ne]=हटाउन योगà¥à¤¯ मिडिया यà¥à¤Ÿà¤¿à¤²à¤¿à¤Ÿà¥€ +GenericName[nl]=Verwisselbare media beheren +GenericName[nn]=Verktøy for flyttbare medium +GenericName[pa]=ਹਟਾਉਣਯੋਗ ਮੀਡਿਆ ਸਹੂਲਤ +GenericName[pl]=NarzÄ™dzie do wyjmowalnych dysków +GenericName[pt]=Utilitário para Media RemovÃvel +GenericName[pt_BR]=Utilitário de MÃdia RemovÃvel +GenericName[ro]=Utilitar ejectare mediu +GenericName[ru]=Управление диÑками +GenericName[sk]=Nástroj pre vymeniteľné médiá +GenericName[sl]=PripomoÄek za izmenjevalne medije +GenericName[sr]=Ðлат за уклоњиве медије +GenericName[sr@Latn]=Alat za uklonjive medije +GenericName[sv]=Verktyg för flyttbar media +GenericName[ta]= நீகà¯à®•à®•à¯‚டிய ஊடக பயனà¯à®ªà®¾à®Ÿà¯ +GenericName[tg]=Барномаи Пуштибон барои РаÑонаҳои Ҷойивазшаванда +GenericName[th]=เครื่à¸à¸‡à¸¡à¸·à¸à¸ˆà¸±à¸”à¸à¸²à¸£à¸ªà¸·à¹ˆà¸à¸—ี่ถà¸à¸”ได้ +GenericName[tr]=Çıkartılabilir Aygıt +GenericName[uk]=Утиліта змінних ноÑіїв +GenericName[wa]=Usteye po les bodjÃ¥ves sopoirts +GenericName[xh]=Umdlali wezoSasazo +GenericName[zh_CN]=å¯ç§»åŠ¨ä»‹è´¨å·¥å…· +GenericName[zh_TW]=å¯ç§»å‹•åª’é«”å…¬ç”¨ç¨‹å¼ +GenericName[zu]=Umsebenzi Wonozindaba Ogudluzekayo +Terminal=false +Categories=Qt;KDE;System;X-KDE-More; +OnlyShowIn=KDE; diff --git a/kdf/kwikdisk.h b/kdf/kwikdisk.h new file mode 100644 index 0000000..09066cc --- /dev/null +++ b/kdf/kwikdisk.h @@ -0,0 +1,78 @@ +/* + kwikdisk.cpp - KDiskFree + + Copyright (C) 1999 by Michael Kropfberger <michael.kropfberger@gmx.net> + + 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. + + */ + +// With changes by Espen Sand and Stanislav Karchebny. + +#ifndef _KWIKDISK_H_ +#define _KWIKDISK_H_ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "disklist.h" +#include "stdoption.h" +#include "optiondialog.h" + +#include <kmainwindow.h> +#include <ksystemtray.h> + +/** +* @short Application Main Window (however in Tray) +* @version 0.2 +*/ +class KwikDisk : public KSystemTray +{ + Q_OBJECT + public: + KwikDisk(); + + private slots: + void updateDFDone(); + void criticallyFull(DiskEntry*); + void toggleMount(int); + void loadSettings(); + void changeSettings(); + void startKDF(); + void invokeHelp(); + void aboutToHide(); + + private: + void mousePressEvent(QMouseEvent *); + void timerEvent(QTimerEvent *); + void enterEvent(QEvent *); + void leaveEvent(QEvent *); + + void setUpdateFrequency(int frequency); + + void updateDF(); + + private: + DiskList m_diskList; + CStdOption m_options; + bool m_readingDF; + bool m_dirty; + bool m_menuVisible; + bool m_inside; + COptionDialog *m_optionDialog; +}; + +#endif // _KWIKDISK_H_ diff --git a/kdf/listview.cpp b/kdf/listview.cpp new file mode 100644 index 0000000..b522a22 --- /dev/null +++ b/kdf/listview.cpp @@ -0,0 +1,113 @@ +/* + * Copyright (C) 1999 Espen Sand, espen@kde.org + * + * 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. + * + */ + +// +// 1999-11-28 Espen Sand +// The purpose of this class is: +// 1) Easily set minimum number of visible items and to adjust the sizeHint() +// 2) Provide a pixmap collection +// + +#include <qbitmap.h> +#include <qheader.h> +#include <qpainter.h> + +#include <kiconloader.h> + +#include "listview.h" + +template class QDict<QPixmap>; + +CListView::CListView( QWidget *parent, const char *name, int visibleItem ) + :KListView( parent, name ), mVisibleItem(QMAX( 1, visibleItem )) +{ + setVisibleItem(visibleItem); + mPixDict.setAutoDelete(true); +} + +void CListView::setVisibleItem( int visibleItem, bool updateSize ) +{ + mVisibleItem = QMAX( 1, visibleItem ); + if( updateSize == true ) + { + QSize s = sizeHint(); + setMinimumSize( s.width() + verticalScrollBar()->sizeHint().width() + + lineWidth() * 2, s.height() ); + } +} + +QSize CListView::sizeHint( void ) const +{ + QSize s = QListView::sizeHint(); + + int h = fontMetrics().height() + 2*itemMargin(); + if( h % 2 > 0 ) { h++; } + + s.setHeight( h*mVisibleItem + lineWidth()*2 + header()->sizeHint().height()); + return( s ); +} + + + +const QPixmap &CListView::icon( const QString &iconName, bool drawBorder ) +{ + QPixmap *pix = mPixDict[ iconName ]; + if( pix == 0 ) + { + pix = new QPixmap( SmallIcon( iconName ) ); + + if( drawBorder == true ) + { + // + // 2000-01-23 Espen Sand + // Careful here: If the mask has not been defined we can + // not use QPixmap::mask() because it returns 0 => segfault + // + if( pix->mask() != 0 ) + { + QBitmap *bm = new QBitmap(*(pix->mask())); + if( bm != 0 ) + { + QPainter qp(bm); + qp.setPen(QPen(white,1)); + qp.drawRect(0,0,bm->width(),bm->height()); + qp.end(); + pix->setMask(*bm); + } + + QPainter qp(pix); + qp.setPen(QPen(red,1)); + qp.drawRect(0,0,pix->width(),pix->height()); + qp.end(); + delete bm; + + } + } + mPixDict.replace( iconName, pix ); + } + + return( *pix ); +} + + +#include "listview.moc" + + + + diff --git a/kdf/listview.h b/kdf/listview.h new file mode 100644 index 0000000..0bb4bc5 --- /dev/null +++ b/kdf/listview.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 1999 Espen Sand, espen@kde.org + * + * 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. + * + */ + +#ifndef _LISTVIEW_H_ +#define _LISTVIEW_H_ + +#include <qdict.h> +#include <qpixmap.h> + +#include <klistview.h> + +class CListView : public KListView +{ + Q_OBJECT + + public: + CListView( QWidget *parent=0, const char *name=0, int visibleItem=10 ); + + void setVisibleItem( int visibleItem, bool updateSize=true ); + virtual QSize sizeHint( void ) const; + const QPixmap &icon( const QString &iconName, bool drawBorder ); + + private: + int mVisibleItem; + QDict<QPixmap> mPixDict; +}; + + + + +#endif + + + + + + diff --git a/kdf/mntconfig.cpp b/kdf/mntconfig.cpp new file mode 100644 index 0000000..c1c1bbe --- /dev/null +++ b/kdf/mntconfig.cpp @@ -0,0 +1,364 @@ +/* + * mntconfig.cpp + * + * Copyright (c) 1999 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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. + */ + + +// +// 1999-11-29 Espen Sand +// Converted to QLayout and QListView + cleanups +// + +#include <qgroupbox.h> +#include <qheader.h> +#include <qlayout.h> +#include <qlineedit.h> + +#undef Unsorted + +#include <kapplication.h> +#include <kfiledialog.h> +#include <kicondialog.h> +#include <kmessagebox.h> + +#include "listview.h" +#include "mntconfig.h" + +#ifndef KDE_USE_FINAL +static bool GUI; +#endif + + +MntConfigWidget::MntConfigWidget(QWidget *parent, const char *name, bool init) + : QWidget(parent, name) +{ + mInitializing = false; + + GUI = !init; + if (GUI) + { + //tabList fillup waits until disklist.readDF() is done... + mDiskList.readFSTAB(); + mDiskList.readDF(); + mInitializing = true; + connect( &mDiskList,SIGNAL(readDFDone()),this,SLOT(readDFDone())); + + QString text; + QVBoxLayout *topLayout = new QVBoxLayout( this, 0, KDialog::spacingHint()); + + mList = new CListView( this, "list", 8 ); + mList->setAllColumnsShowFocus( true ); + mList->addColumn( i18n("Icon") ); + mList->addColumn( i18n("Device") ); + mList->addColumn( i18n("Mount Point") ); + mList->addColumn( i18n("Mount Command") ); + mList->addColumn( i18n("Unmount Command") ); + mList->setFrameStyle( QFrame::WinPanel + QFrame::Sunken ); + connect( mList, SIGNAL(selectionChanged(QListViewItem *)), + this, SLOT(clicked(QListViewItem *))); + + topLayout->addWidget( mList ); + + text = QString("%1: %2 %3: %4"). + arg(mList->header()->label(DEVCOL)). + arg(i18n("None")). + arg(mList->header()->label(MNTPNTCOL)). + arg(i18n("None")); + mGroupBox = new QGroupBox( text, this ); + Q_CHECK_PTR(mGroupBox); + topLayout->addWidget(mGroupBox); + + QGridLayout *gl = new QGridLayout(mGroupBox, 3, 4, KDialog::spacingHint()); + if( gl == 0 ) { return; } + gl->addRowSpacing( 0, fontMetrics().lineSpacing() ); + + mIconLineEdit = new QLineEdit(mGroupBox); + Q_CHECK_PTR(mIconLineEdit); + mIconLineEdit->setMinimumWidth( fontMetrics().maxWidth()*10 ); + connect( mIconLineEdit, SIGNAL(textChanged(const QString&)), + this,SLOT(iconChanged(const QString&))); + connect( mIconLineEdit, SIGNAL(textChanged(const QString&)), + this,SLOT(slotChanged())); + gl->addWidget( mIconLineEdit, 2, 0 ); + + mIconButton = new KIconButton(mGroupBox); + mIconButton->setIconType(KIcon::Small, KIcon::Device); + Q_CHECK_PTR(mIconButton); + mIconButton->setFixedWidth( mIconButton->sizeHint().height() ); + connect(mIconButton,SIGNAL(iconChanged(QString)),this,SLOT(iconChangedButton(QString))); + gl->addWidget( mIconButton, 2, 1 ); + + //Mount + mMountButton = new QPushButton( i18n("Get Mount Command"), mGroupBox ); + Q_CHECK_PTR(mMountButton); + connect(mMountButton,SIGNAL(clicked()),this,SLOT(selectMntFile())); + gl->addWidget( mMountButton, 1, 2 ); + + mMountLineEdit = new QLineEdit(mGroupBox); + Q_CHECK_PTR(mMountLineEdit); + mMountLineEdit->setMinimumWidth( fontMetrics().maxWidth()*10 ); + connect(mMountLineEdit,SIGNAL(textChanged(const QString&)), + this,SLOT(mntCmdChanged(const QString&))); + connect( mMountLineEdit, SIGNAL(textChanged(const QString&)), + this,SLOT(slotChanged())); + gl->addWidget( mMountLineEdit, 1, 3 ); + + //Umount + mUmountButton = new QPushButton(i18n("Get Unmount Command"), mGroupBox ); + Q_CHECK_PTR( mUmountButton ); + connect(mUmountButton,SIGNAL(clicked()),this,SLOT(selectUmntFile())); + gl->addWidget( mUmountButton, 2, 2 ); + + mUmountLineEdit=new QLineEdit(mGroupBox); + Q_CHECK_PTR(mUmountLineEdit); + mUmountLineEdit->setMinimumWidth( fontMetrics().maxWidth()*10 ); + connect(mUmountLineEdit,SIGNAL(textChanged(const QString&)), + this,SLOT(umntCmdChanged(const QString&))); + connect( mUmountLineEdit, SIGNAL(textChanged(const QString&)), + this,SLOT(slotChanged())); + gl->addWidget( mUmountLineEdit, 2, 3 ); + + } + + loadSettings(); + if(init) + { + applySettings(); + mDiskLookup.resize(0); + } + + mGroupBox->setEnabled( false ); +} + + +MntConfigWidget::~MntConfigWidget( void ) +{ +} + + +void MntConfigWidget::readDFDone( void ) +{ + mInitializing = false; + mList->clear(); + mDiskLookup.resize(mDiskList.count()); + + int i=0; + QListViewItem *item = 0; + for( DiskEntry *disk=mDiskList.first(); disk!=0; disk=mDiskList.next(),++i ) + { + item = new QListViewItem( mList, item, QString::null, disk->deviceName(), + disk->mountPoint(), disk->mountCommand(), disk->umountCommand() ); + item->setPixmap( ICONCOL, SmallIcon( disk->iconName() ) ); + mDiskLookup[i] = item; + } + + loadSettings(); + applySettings(); +} + + +void MntConfigWidget::applySettings( void ) +{ + mDiskList.applySettings(); + + KConfig &config = *kapp->config(); + config.setGroup("MntConfig"); + if(GUI ) + { + config.writeEntry("Width", width() ); + config.writeEntry("Height", height() ); + } + config.sync(); +} + + +void MntConfigWidget::loadSettings( void ) +{ + KConfig &config = *kapp->config(); + if( mInitializing == false && GUI ) + { + config.setGroup("MntConfig"); + if( isTopLevel() ) + { + int w = config.readNumEntry("Width",this->width() ); + int h = config.readNumEntry("Height",this->height() ); + resize(w,h); + } + + QListViewItem *item = mList->selectedItem(); + if( item != 0 ) + { + clicked( item ); + } + } +} + + +void MntConfigWidget::clicked( QListViewItem *item ) +{ + mGroupBox->setEnabled( true ); + mGroupBox->setTitle( QString("%1: %2 %3: %4"). + arg(mList->header()->label(DEVCOL)). + arg(item->text(DEVCOL)). + arg(mList->header()->label(MNTPNTCOL)). + arg(item->text(MNTPNTCOL)) ); + + + const QPixmap *pix = item->pixmap(ICONCOL); + if( pix != 0 ) + { + mIconButton->setPixmap( *pix ); + } + + for(unsigned i=0 ; i < mDiskList.count() ; ++i) + { + if (mDiskLookup[i] == item) + { + DiskEntry *disk = mDiskList.at(i); + if( disk != 0 ) + { + mIconLineEdit->setText( disk->iconName() ); + } + break; + } + } + mMountLineEdit->setText( item->text(MNTCMDCOL) ); + mUmountLineEdit->setText( item->text(UMNTCMDCOL) ); +} + + +void MntConfigWidget::iconChangedButton(QString iconName) +{ + iconChanged(iconName); +} +void MntConfigWidget::iconChanged(const QString &iconName) +{ + if( iconName.findRev('_') == 0 || + (iconName.right(iconName.length()-iconName.findRev('_'))!="_mount" && + iconName.right(iconName.length()-iconName.findRev('_'))!="_unmount")) + { + QString msg = i18n("" + "This filename is not valid: %1\n" + "It must end with " + "\"_mount\" or \"_unmount\".").arg(iconName); + KMessageBox::sorry( this, msg ); + return; + } + + QListViewItem *item = mList->selectedItem(); + for(unsigned i=0 ; i < mDiskList.count() ; ++i) + { + if (mDiskLookup[i] == item) + { + DiskEntry *disk = mDiskList.at(i); + if( disk != 0 ) + { + disk->setIconName(iconName); + mIconLineEdit->setText(iconName); + KIconLoader &loader = *KGlobal::iconLoader(); + item->setPixmap( ICONCOL, loader.loadIcon( iconName, KIcon::Small)); + } + break; + } + } +} + + +void MntConfigWidget::selectMntFile() +{ + KURL url = KFileDialog::getOpenURL( "","*", this ); + + if( url.isEmpty() ) + return; + + if( !url.isLocalFile() ) + { + KMessageBox::sorry( 0L, i18n( "Only local files supported." ) ); + return; + } + + mMountLineEdit->setText( url.path() ); +} + +void MntConfigWidget::selectUmntFile() +{ + KURL url = KFileDialog::getOpenURL( "", "*", this ); + + if( url.isEmpty() ) + return; + + if( !url.isLocalFile() ) + { + KMessageBox::sorry( 0L, i18n( "Only local files are currently supported." ) ); + return; + } + + mUmountLineEdit->setText( url.path() ); +} + +void MntConfigWidget::mntCmdChanged( const QString &data ) +{ + QListViewItem *item = mList->selectedItem(); + for(unsigned i=0 ; i < mDiskList.count() ; ++i) + { + if (mDiskLookup[i] == item) + { + DiskEntry *disk = mDiskList.at(i); + if( disk != 0 ) + { + disk->setMountCommand(data); + item->setText( MNTCMDCOL, data ); + } + break; + } + } +} + + +void MntConfigWidget::umntCmdChanged( const QString &data ) +{ + QListViewItem *item = mList->selectedItem(); + for(unsigned i=0 ; i < mDiskList.count() ; ++i) + { + if (mDiskLookup[i] == item) + { + DiskEntry *disk = mDiskList.at(i); + if( disk != 0 ) + { + disk->setUmountCommand(data); + item->setText( UMNTCMDCOL, data ); + } + break; + } + } +} + + +void MntConfigWidget::closeEvent(QCloseEvent *) +{ +} + +void MntConfigWidget::slotChanged() +{ + emit configChanged(); +} + +#include "mntconfig.moc" diff --git a/kdf/mntconfig.h b/kdf/mntconfig.h new file mode 100644 index 0000000..d24c8b1 --- /dev/null +++ b/kdf/mntconfig.h @@ -0,0 +1,102 @@ +/* + * mntconfig.h + * + * Copyright (c) 1999 Michael Kropfberger <michael.kropfberger@gmx.net> + * + * 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. + */ + + +#ifndef __MNTCONFIG_H__ +#define __MNTCONFIG_H__ + +#include <kcmodule.h> +#include <kconfig.h> +#include <kiconloader.h> + +#include "disks.h" +#include "disklist.h" + +class QGroupBox; +class QPushButton; +class QRadioButton; +class QLineEdit; +class KIconButton; + +class CListView; +class QListViewItem; + +/**************************************************************/ + +class MntConfigWidget : public QWidget +{ + Q_OBJECT + + public: + enum ColType + { + ICONCOL=0, + DEVCOL=1, + MNTPNTCOL=2, + MNTCMDCOL=3, + UMNTCMDCOL=4 + }; + + public: + MntConfigWidget( QWidget *parent=0, const char *name=0, bool init=false ); + ~MntConfigWidget(); + + public slots: + void loadSettings( void ); + void applySettings( void ); + + protected slots: + void slotChanged(); + + private slots: + void readDFDone( void ); + void clicked( QListViewItem *item ); + void selectMntFile( void ); + void selectUmntFile( void ); + void iconChangedButton(QString); + void iconChanged( const QString & ); + void mntCmdChanged( const QString & ); + void umntCmdChanged( const QString & ); + + protected: + void closeEvent( QCloseEvent * ); + + private: + CListView *mList; + QGroupBox *mGroupBox; + QLineEdit *mIconLineEdit; + QLineEdit *mMountLineEdit; + QLineEdit *mUmountLineEdit; + QPushButton *mMountButton; + QPushButton *mUmountButton; + KIconButton *mIconButton; + DiskList mDiskList; + bool mInitializing; + QMemArray<QListViewItem*> mDiskLookup; + + signals: + void configChanged(); +}; + + +#endif diff --git a/kdf/optiondialog.cpp b/kdf/optiondialog.cpp new file mode 100644 index 0000000..05c5570 --- /dev/null +++ b/kdf/optiondialog.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (C) 1999 Espen Sand, espen@kde.org + * + * 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 <qlayout.h> + +#include "kdfconfig.h" +#include "mntconfig.h" +#include "optiondialog.h" + +COptionDialog::COptionDialog( QWidget *parent, const char *name, bool modal ) + :KDialogBase( Tabbed, i18n("Configure"), Help|Apply|Ok|Cancel, Ok, + parent, name, modal ) +{ + setHelp( "kcontrol/kdf/index.html", QString::null ); + + QFrame *f1 = addPage( i18n("General Settings") ); + QVBoxLayout *l1 = new QVBoxLayout( f1 ); + mConf = new KDFConfigWidget( f1, "kdfconf" ); + l1->addWidget(mConf); + connect( mConf, SIGNAL( configChanged() ), this, SLOT( slotChanged() ) ); + + QFrame *f2 = addPage( i18n("Mount Commands") ); + QVBoxLayout *l2 = new QVBoxLayout( f2 ); + mMnt = new MntConfigWidget( f2, "mntconf"); + l2->addWidget(mMnt); + connect( mMnt, SIGNAL( configChanged() ), this, SLOT( slotChanged() ) ); + enableButton( Apply, false ); + dataChanged = false; +} + + +COptionDialog::~COptionDialog( void ) +{ +} + + +void COptionDialog::slotOk( void ) +{ + if( dataChanged ) + slotApply(); + accept(); +} + + +void COptionDialog::slotApply( void ) +{ + mConf->applySettings(); + mMnt->applySettings(); + emit valueChanged(); + enableButton( Apply, false ); + dataChanged = false; +} + +void COptionDialog::slotChanged() +{ + enableButton( Apply, true ); + dataChanged = true; +} + +#include "optiondialog.moc" + + + + + + + + + diff --git a/kdf/optiondialog.h b/kdf/optiondialog.h new file mode 100644 index 0000000..d1a7a5c --- /dev/null +++ b/kdf/optiondialog.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 1999 Espen Sand, espen@kde.org + * + * 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. + * + */ + +#ifndef _OPTION_DIALOG_H_ +#define _OPTION_DIALOG_H_ + +#include <kdialogbase.h> + +class KDFConfigWidget; +class MntConfigWidget; + +class COptionDialog : public KDialogBase +{ + Q_OBJECT + + public: + COptionDialog( QWidget *parent=0, const char *name=0, bool modal=true ); + ~COptionDialog( void ); + + protected slots: + virtual void slotOk( void ); + virtual void slotApply( void ); + void slotChanged(); + + signals: + void valueChanged( void ); + + private: + KDFConfigWidget *mConf; + MntConfigWidget *mMnt; + bool dataChanged; +}; + +#endif diff --git a/kdf/pics/Makefile.am b/kdf/pics/Makefile.am new file mode 100644 index 0000000..2f00b0c --- /dev/null +++ b/kdf/pics/Makefile.am @@ -0,0 +1,4 @@ +KDE_ICON = kdf kcmdf kwikdisk +pics_DATA = tick.png delete.png +picsdir = $(kde_datadir)/kdf/pics + diff --git a/kdf/pics/cr16-app-kcmdf.png b/kdf/pics/cr16-app-kcmdf.png Binary files differnew file mode 100644 index 0000000..7b966b6 --- /dev/null +++ b/kdf/pics/cr16-app-kcmdf.png diff --git a/kdf/pics/cr22-app-kcmdf.png b/kdf/pics/cr22-app-kcmdf.png Binary files differnew file mode 100644 index 0000000..aa92e25 --- /dev/null +++ b/kdf/pics/cr22-app-kcmdf.png diff --git a/kdf/pics/cr32-app-kcmdf.png b/kdf/pics/cr32-app-kcmdf.png Binary files differnew file mode 100644 index 0000000..eb2d9e6 --- /dev/null +++ b/kdf/pics/cr32-app-kcmdf.png diff --git a/kdf/pics/delete.png b/kdf/pics/delete.png Binary files differnew file mode 100644 index 0000000..2415dfc --- /dev/null +++ b/kdf/pics/delete.png diff --git a/kdf/pics/hi128-app-kdf.png b/kdf/pics/hi128-app-kdf.png Binary files differnew file mode 100644 index 0000000..20ba9bf --- /dev/null +++ b/kdf/pics/hi128-app-kdf.png diff --git a/kdf/pics/hi128-app-kwikdisk.png b/kdf/pics/hi128-app-kwikdisk.png Binary files differnew file mode 100644 index 0000000..cbec029 --- /dev/null +++ b/kdf/pics/hi128-app-kwikdisk.png diff --git a/kdf/pics/hi16-app-kdf.png b/kdf/pics/hi16-app-kdf.png Binary files differnew file mode 100644 index 0000000..7b966b6 --- /dev/null +++ b/kdf/pics/hi16-app-kdf.png diff --git a/kdf/pics/hi16-app-kwikdisk.png b/kdf/pics/hi16-app-kwikdisk.png Binary files differnew file mode 100644 index 0000000..e182aca --- /dev/null +++ b/kdf/pics/hi16-app-kwikdisk.png diff --git a/kdf/pics/hi22-app-kdf.png b/kdf/pics/hi22-app-kdf.png Binary files differnew file mode 100644 index 0000000..aa92e25 --- /dev/null +++ b/kdf/pics/hi22-app-kdf.png diff --git a/kdf/pics/hi22-app-kwikdisk.png b/kdf/pics/hi22-app-kwikdisk.png Binary files differnew file mode 100644 index 0000000..e150637 --- /dev/null +++ b/kdf/pics/hi22-app-kwikdisk.png diff --git a/kdf/pics/hi32-app-kdf.png b/kdf/pics/hi32-app-kdf.png Binary files differnew file mode 100644 index 0000000..eb2d9e6 --- /dev/null +++ b/kdf/pics/hi32-app-kdf.png diff --git a/kdf/pics/hi32-app-kwikdisk.png b/kdf/pics/hi32-app-kwikdisk.png Binary files differnew file mode 100644 index 0000000..be2e6ab --- /dev/null +++ b/kdf/pics/hi32-app-kwikdisk.png diff --git a/kdf/pics/hi48-app-kdf.png b/kdf/pics/hi48-app-kdf.png Binary files differnew file mode 100644 index 0000000..d976289 --- /dev/null +++ b/kdf/pics/hi48-app-kdf.png diff --git a/kdf/pics/hi48-app-kwikdisk.png b/kdf/pics/hi48-app-kwikdisk.png Binary files differnew file mode 100644 index 0000000..29d351f --- /dev/null +++ b/kdf/pics/hi48-app-kwikdisk.png diff --git a/kdf/pics/hi64-app-kdf.png b/kdf/pics/hi64-app-kdf.png Binary files differnew file mode 100644 index 0000000..984d3ee --- /dev/null +++ b/kdf/pics/hi64-app-kdf.png diff --git a/kdf/pics/hi64-app-kwikdisk.png b/kdf/pics/hi64-app-kwikdisk.png Binary files differnew file mode 100644 index 0000000..58378b1 --- /dev/null +++ b/kdf/pics/hi64-app-kwikdisk.png diff --git a/kdf/pics/mini-root.png b/kdf/pics/mini-root.png Binary files differnew file mode 100644 index 0000000..538a1bf --- /dev/null +++ b/kdf/pics/mini-root.png diff --git a/kdf/pics/tick.png b/kdf/pics/tick.png Binary files differnew file mode 100644 index 0000000..543710f --- /dev/null +++ b/kdf/pics/tick.png diff --git a/kdf/stdoption.cpp b/kdf/stdoption.cpp new file mode 100644 index 0000000..16a9e07 --- /dev/null +++ b/kdf/stdoption.cpp @@ -0,0 +1,148 @@ +/* +** +** Copyright (C) 1998 by Michael Kropfberger +** +*/ + +/* +** 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 in a file called COPYING; if not, write to +** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +** MA 02110-1301, USA. +*/ + +/* +** Bug reports and questions can be sent to kde-devel@kde.org +*/ + + +#include <kapplication.h> +#include <kconfig.h> + +#include "stdoption.h" + +QString CStdOption::mDefaultFileManager = "kfmclient openURL %m"; +int CStdOption::mDefaultUpdateFrequency = 60; + +CStdOption::CStdOption( void ) +{ + setDefault(); +} + + +CStdOption::~CStdOption( void ) +{ +} + + +void CStdOption::updateConfiguration( void ) +{ + KConfig &config = *kapp->config(); + config.setGroup("KDFConfig"); + mFileManager = config.readPathEntry( + "FileManagerCommand", mDefaultFileManager ); + mUpdateFrequency = config.readNumEntry( + "UpdateFrequency", mDefaultUpdateFrequency ); + mPopupIfFull = config.readBoolEntry( + "PopupIfFull", true ); + mOpenFileManagerOnMount = config.readBoolEntry( + "OpenFileMgrOnMount", false ); +} + + +void CStdOption::writeConfiguration( void ) +{ + KConfig &config = *kapp->config(); + config.setGroup("KDFConfig"); + config.writeEntry( "UpdateFrequency", mUpdateFrequency ); + config.writePathEntry( "FileManagerCommand", mFileManager ); + config.writeEntry( "PopupIfFull", mPopupIfFull ); + config.writeEntry( "OpenFileMgrOnMount", mOpenFileManagerOnMount ); + config.sync(); +} + + +void CStdOption::writeDefaultFileManager( void ) +{ + KConfig &config = *kapp->config(); + config.setGroup("KDFConfig"); + config.writePathEntry( "FileManagerCommand", mDefaultFileManager ); + config.sync(); +} + + + +QString CStdOption::fileManager( void ) +{ + return( mFileManager ); +} + + +int CStdOption::updateFrequency( void ) +{ + return( mUpdateFrequency ); +} + + +bool CStdOption::popupIfFull( void ) +{ + return( mPopupIfFull ); +} + + +bool CStdOption::openFileManager( void ) +{ + return( mOpenFileManagerOnMount ); +} + + +void CStdOption::setDefault( void ) +{ + mFileManager = mDefaultFileManager; + mUpdateFrequency = mDefaultUpdateFrequency; + mPopupIfFull = true; + mOpenFileManagerOnMount = false; +} + + +void CStdOption::setFileManager( const QString &fileManager ) +{ + mFileManager = fileManager; +} + + +void CStdOption::setUpdateFrequency( int frequency ) +{ + mUpdateFrequency = frequency; +} + + +void CStdOption::setPopupIfFull( bool popupIfFull ) +{ + mPopupIfFull = popupIfFull; +} + + +void CStdOption::setOpenFileManager( bool openFileManagerOnMount ) +{ + mOpenFileManagerOnMount = openFileManagerOnMount; +} + + + + + + + + + diff --git a/kdf/stdoption.h b/kdf/stdoption.h new file mode 100644 index 0000000..282a16b --- /dev/null +++ b/kdf/stdoption.h @@ -0,0 +1,72 @@ +/* +** +** Copyright (C) 1998 by Michael Kropfberger +** +*/ + +/* +** 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 in a file called COPYING; if not, write to +** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +** MA 02110-1301, USA. +*/ + +/* +** Bug reports and questions can be sent to kde-devel@kde.org +*/ +#ifndef _STD_OPTION_H_ +#define _STD_OPTION_H_ + +#include <qstring.h> + +class CStdOption +{ + public: + CStdOption( void ); + ~CStdOption( void ); + + void updateConfiguration( void ); + void writeConfiguration( void ); + void writeDefaultFileManager( void ); + + QString fileManager( void ); + + int updateFrequency( void ); + bool popupIfFull( void ); + bool openFileManager( void ); + + void setDefault( void ); + void setFileManager( const QString &fileManager ); + void setUpdateFrequency( int frequency ); + void setPopupIfFull( bool popupIfFull ); + void setOpenFileManager( bool openFileManagerOnMount ); + + private: + static QString mDefaultFileManager; + static int mDefaultUpdateFrequency; + QString mFileManager; + int mUpdateFrequency; + bool mPopupIfFull; + bool mOpenFileManagerOnMount; +}; + +#endif + + + + + + + + + diff --git a/kdf/unix_outputs/df-g.hpux b/kdf/unix_outputs/df-g.hpux new file mode 100644 index 0000000..8d1e822 --- /dev/null +++ b/kdf/unix_outputs/df-g.hpux @@ -0,0 +1,392 @@ +/cern (lapphp0.in2p3.fr:/lapphp0_3/cern) : + 8192 file system block size 1024 fragment size + 4067219 total blocks 1381510 total free blocks + 974788 allocated free blocks -1 total i-nodes + -1 total free i-nodes -1 allocated free i-nodes + -16777209 file system id nfs file system type + 0 flags -1 file system name length + /cern file system specific string +/outils/produits/frame (lapphp0.in2p3.fr:/lapphp0_3/produits/frame) : + 8192 file system block size 1024 fragment size + 4067219 total blocks 1381510 total free blocks + 974788 allocated free blocks -1 total i-nodes + -1 total free i-nodes -1 allocated free i-nodes + -16777210 file system id nfs file system type + 0 flags -1 file system name length +/outils/produits/frame file system specific string +/outils/produits/rogue (lapphp0.in2p3.fr:/lapphp0_3/produits/rogue) : + 8192 file system block size 1024 fragment size + 4067219 total blocks 1381510 total free blocks + 974788 allocated free blocks -1 total i-nodes + -1 total free i-nodes -1 allocated free i-nodes + -16777211 file system id nfs file system type + 0 flags -1 file system name length +/outils/produits/rogue file system specific string +/lapphp1_6 (lapphp0.in2p3.fr:/lapphp1_6) : + 8192 file system block size 1024 fragment size + 4067219 total blocks 998796 total free blocks + 592074 allocated free blocks -1 total i-nodes + -1 total free i-nodes -1 allocated free i-nodes + -16777212 file system id nfs file system type + 0 flags -1 file system name length + /lapphp1_6 file system specific string +/lapphp8/mupad (lapphp8.in2p3.fr:/lapphp8/mupad) : + 8192 file system block size 1024 fragment size + 602301 total blocks 466919 total free blocks + 406688 allocated free blocks -1 total i-nodes + -1 total free i-nodes -1 allocated free i-nodes + -16777213 file system id nfs file system type + 0 flags -1 file system name length + /lapphp8/mupad file system specific string +/COMMUN (lappa0:/COMMUN ) : + 8192 file system block size 512 fragment size + 45528992 total blocks 8875966 total free blocks + 8578336 allocated free blocks -1 total i-nodes + -1 total free i-nodes -1 allocated free i-nodes + -16777214 file system id nfs file system type + 0 flags -1 file system name length + /COMMUN file system specific string +/nfs/virgoa1_2 (lappa0:/virgoa1_2 ) : + 8192 file system block size 1024 fragment size + 3783129 total blocks 756162 total free blocks + 377849 allocated free blocks -1 total i-nodes + -1 total free i-nodes -1 allocated free i-nodes + -16777215 file system id nfs file system type + 0 flags -1 file system name length + /nfs/virgoa1_2 file system specific string +/USERS/AMS (/dev/users_services/rio) : + 8192 file system block size 1024 fragment size + 498645 total blocks 163584 total free blocks + 113719 allocated free blocks 79872 total i-nodes + 70578 total free i-nodes 70578 allocated free i-nodes + 1074069514 file system id hfs file system type + 0 flags 255 file system name length + /USERS/AMS file system specific string +/USERS/elec (/dev/export/lvol3 ) : + 8192 file system block size 1024 fragment size + 1008204 total blocks 469459 total free blocks + 368638 allocated free blocks 118784 total i-nodes + 111661 total free i-nodes 111661 allocated free i-nodes + 1074135043 file system id hfs file system type + 0 flags 255 file system name length + /USERS/elec file system specific string +/backup/increm2 (/dev/backup/lvol4 ) : + 8192 file system block size 1024 fragment size + 3791196 total blocks 3145626 total free blocks + 2766506 allocated free blocks 444416 total i-nodes + 438557 total free i-nodes 438557 allocated free i-nodes + 1074003972 file system id hfs file system type + 0 flags 255 file system name length +/backup/increm2 file system specific string +/backup/increm3 (/dev/backup/lvol1 ) : + 8192 file system block size 1024 fragment size + 2535501 total blocks 1158823 total free blocks + 905272 allocated free blocks 184320 total i-nodes + 177347 total free i-nodes 177347 allocated free i-nodes + 1074003969 file system id hfs file system type + 0 flags 255 file system name length +/backup/increm3 file system specific string +/backup/incremental (/dev/backup/lvol2 ) : + 8192 file system block size 1024 fragment size + 4056813 total blocks 2845324 total free blocks + 2439642 allocated free blocks 294912 total i-nodes + 290399 total free i-nodes 290399 allocated free i-nodes + 1074003970 file system id hfs file system type + 0 flags 255 file system name length +/backup/incremental file system specific string +/cdrom (/dev/dsk/c1t2d0 ) : + 2048 file system block size 2048 fragment size + 1228800 total blocks 0 total free blocks + 0 allocated free blocks -1 total i-nodes + 0 total free i-nodes 0 allocated free i-nodes + 469835776 file system id cdfs file system type + 0x1 flags 37 file system name length + /cdrom file system specific string +/export/cetia (/dev/users_services/lvol9) : + 8192 file system block size 1024 fragment size + 504092 total blocks 247465 total free blocks + 197055 allocated free blocks 59392 total i-nodes + 51963 total free i-nodes 51963 allocated free i-nodes + 1074069513 file system id hfs file system type + 0 flags 255 file system name length + /export/cetia file system specific string +/export/fic (/dev/outils/lvol4 ) : + 8192 file system block size 1024 fragment size + 504092 total blocks 457204 total free blocks + 406794 allocated free blocks 59392 total i-nodes + 56723 total free i-nodes 56723 allocated free i-nodes + 1073938436 file system id hfs file system type + 0 flags 255 file system name length + /export/fic file system specific string +/export/hp (/dev/export/lvol5 ) : + 8192 file system block size 1024 fragment size + 999532 total blocks 277788 total free blocks + 177834 allocated free blocks 116736 total i-nodes + 96353 total free i-nodes 96353 allocated free i-nodes + 1074135045 file system id hfs file system type + 0 flags 255 file system name length + /export/hp file system specific string +/export/solaris (/dev/export/lvol4 ) : + 8192 file system block size 1024 fragment size + 604860 total blocks 296077 total free blocks + 235591 allocated free blocks 71680 total i-nodes + 49145 total free i-nodes 49145 allocated free i-nodes + 1074135044 file system id hfs file system type + 0 flags 255 file system name length +/export/solaris file system specific string +/export/sun (/dev/export/lvol1 ) : + 8192 file system block size 1024 fragment size + 1008204 total blocks 483024 total free blocks + 382203 allocated free blocks 118784 total i-nodes + 100998 total free i-nodes 100998 allocated free i-nodes + 1074135041 file system id hfs file system type + 0 flags 255 file system name length + /export/sun file system specific string +/export/tektro (/dev/export/lvol2 ) : + 8192 file system block size 1024 fragment size + 403308 total blocks 59710 total free blocks + 19379 allocated free blocks 47104 total i-nodes + 42499 total free i-nodes 42499 allocated free i-nodes + 1074135042 file system id hfs file system type + 0 flags 255 file system name length + /export/tektro file system specific string +/export/www (/dev/users_services/lvol8) : + 8192 file system block size 1024 fragment size + 604860 total blocks 390825 total free blocks + 330339 allocated free blocks 71680 total i-nodes + 70943 total free i-nodes 70943 allocated free i-nodes + 1074069512 file system id hfs file system type + 0 flags 255 file system name length + /export/www file system specific string +/home (/dev/vg00/lvol4 ) : + 8192 file system block size 1024 fragment size + 19861 total blocks 19851 total free blocks + 17864 allocated free blocks 3456 total i-nodes + 3451 total free i-nodes 3451 allocated free i-nodes + 1073741828 file system id hfs file system type + 0 flags 255 file system name length + /home file system specific string +/outils/adm (/dev/outils/lvol3 ) : + 8192 file system block size 1024 fragment size + 504092 total blocks 240604 total free blocks + 190194 allocated free blocks 59392 total i-nodes + 57466 total free i-nodes 57466 allocated free i-nodes + 1073938435 file system id hfs file system type + 0 flags 255 file system name length + /outils/adm file system specific string +/outils/mail (/dev/outils/lvol6 ) : + 8192 file system block size 1024 fragment size + 302284 total blocks 258286 total free blocks + 228057 allocated free blocks 36864 total i-nodes + 36724 total free i-nodes 36724 allocated free i-nodes + 1073938438 file system id hfs file system type + 0 flags 255 file system name length + /outils/mail file system specific string +/outils/newlp (/dev/vg00/newlp ) : + 8192 file system block size 1024 fragment size + 99669 total blocks 98347 total free blocks + 88380 allocated free blocks 16128 total i-nodes + 16011 total free i-nodes 16011 allocated free i-nodes + 1073741833 file system id hfs file system type + 0 flags 255 file system name length + /outils/newlp file system specific string +/outils/produits (/dev/outils/lvol1 ) : + 8192 file system block size 1024 fragment size + 1806700 total blocks 380397 total free blocks + 199727 allocated free blocks 212992 total i-nodes + 183645 total free i-nodes 183645 allocated free i-nodes + 1073938433 file system id hfs file system type + 0 flags 255 file system name length +/outils/produits file system specific string +/outils/securite (/dev/vg00/securite ) : + 8192 file system block size 1024 fragment size + 175445 total blocks 167330 total free blocks + 149785 allocated free blocks 28416 total i-nodes + 28178 total free i-nodes 28178 allocated free i-nodes + 1073741834 file system id hfs file system type + 0 flags 255 file system name length +/outils/securite file system specific string +/outils/swap (/dev/outils/lvol5 ) : + 8192 file system block size 1024 fragment size + 504092 total blocks 349880 total free blocks + 299470 allocated free blocks 59392 total i-nodes + 59312 total free i-nodes 59312 allocated free i-nodes + 1073938437 file system id hfs file system type + 0 flags 255 file system name length + /outils/swap file system specific string +/outils/tmp (/dev/outils/lvol2 ) : + 8192 file system block size 1024 fragment size + 504092 total blocks 259369 total free blocks + 208959 allocated free blocks 59392 total i-nodes + 57081 total free i-nodes 57081 allocated free i-nodes + 1073938434 file system id hfs file system type + 0 flags 255 file system name length + /outils/tmp file system specific string +/tmp (/dev/vg00/lvol6 ) : + 8192 file system block size 1024 fragment size + 23013 total blocks 13120 total free blocks + 10818 allocated free blocks 10880 total i-nodes + 10456 total free i-nodes 10456 allocated free i-nodes + 1073741830 file system id hfs file system type + 0 flags 255 file system name length + /tmp file system specific string +/users/admin (/dev/users_services/lvol5) : + 8192 file system block size 1024 fragment size + 302284 total blocks 202293 total free blocks + 172064 allocated free blocks 36864 total i-nodes + 34848 total free i-nodes 34848 allocated free i-nodes + 1074069509 file system id hfs file system type + 0 flags 255 file system name length + /users/admin file system specific string +/users/aleph (/dev/users_manip/lvol9) : + 8192 file system block size 1024 fragment size + 403308 total blocks 42599 total free blocks + 2268 allocated free blocks 47104 total i-nodes + 46495 total free i-nodes 46495 allocated free i-nodes + 1073872905 file system id hfs file system type + 0 flags 255 file system name length + /users/aleph file system specific string +/users/atlas (/dev/users_manip/lvol8) : + 8192 file system block size 1024 fragment size + 403308 total blocks 173249 total free blocks + 132918 allocated free blocks 47104 total i-nodes + 45153 total free i-nodes 45153 allocated free i-nodes + 1073872904 file system id hfs file system type + 0 flags 255 file system name length + /users/atlas file system specific string +/users/autres (/dev/users_manip/lvol6) : + 8192 file system block size 1024 fragment size + 403308 total blocks 65799 total free blocks + 25468 allocated free blocks 47104 total i-nodes + 43062 total free i-nodes 43062 allocated free i-nodes + 1073872902 file system id hfs file system type + 0 flags 255 file system name length + /users/autres file system specific string +/users/backup (/dev/backup/lvol3 ) : + 8192 file system block size 1024 fragment size + 2535501 total blocks 242538 total free blocks + 0 allocated free blocks 184320 total i-nodes + 182966 total free i-nodes 182966 allocated free i-nodes + 1074003971 file system id hfs file system type + 0 flags 255 file system name length + /users/backup file system specific string +/users/calcul (/dev/users_services/lvol4) : + 8192 file system block size 1024 fragment size + 2016620 total blocks 538692 total free blocks + 337030 allocated free blocks 235520 total i-nodes + 205815 total free i-nodes 205815 allocated free i-nodes + 1074069508 file system id hfs file system type + 0 flags 255 file system name length + /users/calcul file system specific string +/users/chooz (/dev/users_manip/lvol10) : + 8192 file system block size 1024 fragment size + 403308 total blocks 114724 total free blocks + 74393 allocated free blocks 47104 total i-nodes + 40686 total free i-nodes 40686 allocated free i-nodes + 1073872906 file system id hfs file system type + 0 flags 255 file system name length + /users/chooz file system specific string +/users/cms (/dev/users_manip/lvol3) : + 8192 file system block size 1024 fragment size + 798476 total blocks 284186 total free blocks + 204338 allocated free blocks 94208 total i-nodes + 78569 total free i-nodes 78569 allocated free i-nodes + 1073872899 file system id hfs file system type + 0 flags 255 file system name length + /users/cms file system specific string +/users/ftp (/dev/users_services/lvol3) : + 8192 file system block size 1024 fragment size + 201516 total blocks 70339 total free blocks + 50187 allocated free blocks 24576 total i-nodes + 24019 total free i-nodes 24019 allocated free i-nodes + 1074069507 file system id hfs file system type + 0 flags 255 file system name length + /users/ftp file system specific string +/users/l3 (/dev/users_manip/lvol2) : + 8192 file system block size 1024 fragment size + 201516 total blocks 201097 total free blocks + 180945 allocated free blocks 24576 total i-nodes + 24533 total free i-nodes 24533 allocated free i-nodes + 1073872898 file system id hfs file system type + 0 flags 255 file system name length + /users/l3 file system specific string +/users/mecanique (/dev/users_services/lvol7) : + 8192 file system block size 1024 fragment size + 403308 total blocks 352849 total free blocks + 312518 allocated free blocks 47104 total i-nodes + 44704 total free i-nodes 44704 allocated free i-nodes + 1074069511 file system id hfs file system type + 0 flags 255 file system name length +/users/mecanique file system specific string +/users/na50 (/dev/users_manip/lvol1) : + 8192 file system block size 1024 fragment size + 302284 total blocks 44997 total free blocks + 14768 allocated free blocks 36864 total i-nodes + 34548 total free i-nodes 34548 allocated free i-nodes + 1073872897 file system id hfs file system type + 0 flags 255 file system name length + /users/na50 file system specific string +/users/nomad (/dev/users_manip/lvol4) : + 8192 file system block size 1024 fragment size + 403308 total blocks 49910 total free blocks + 9579 allocated free blocks 47104 total i-nodes + 36509 total free i-nodes 36509 allocated free i-nodes + 1073872900 file system id hfs file system type + 0 flags 255 file system name length + /users/nomad file system specific string +/users/ovw (/dev/users_services/OVW) : + 8192 file system block size 1024 fragment size + 600571 total blocks 587212 total free blocks + 527154 allocated free blocks 95680 total i-nodes + 95584 total free i-nodes 95584 allocated free i-nodes + 1074069506 file system id hfs file system type + 0 flags 255 file system name length + /users/ovw file system specific string +/users/swap (/dev/users_services/lvol1) : + 8192 file system block size 1024 fragment size + 604860 total blocks 604851 total free blocks + 544365 allocated free blocks 71680 total i-nodes + 71676 total free i-nodes 71676 allocated free i-nodes + 1074069505 file system id hfs file system type + 0 flags 255 file system name length + /users/swap file system specific string +/users/theorie (/dev/users_manip/lvol5) : + 8192 file system block size 1024 fragment size + 403308 total blocks 338520 total free blocks + 298189 allocated free blocks 47104 total i-nodes + 45098 total free i-nodes 45098 allocated free i-nodes + 1073872901 file system id hfs file system type + 0 flags 255 file system name length + /users/theorie file system specific string +/users/virgo (/dev/users_manip/lvol7) : + 8192 file system block size 1024 fragment size + 403308 total blocks 48737 total free blocks + 8406 allocated free blocks 47104 total i-nodes + 45583 total free i-nodes 45583 allocated free i-nodes + 1073872903 file system id hfs file system type + 0 flags 255 file system name length + /users/virgo file system specific string +/usr (/dev/vg00/lvol7 ) : + 8192 file system block size 1024 fragment size + 299157 total blocks 42849 total free blocks + 12933 allocated free blocks 48000 total i-nodes + 32334 total free i-nodes 32334 allocated free i-nodes + 1073741831 file system id hfs file system type + 0 flags 255 file system name length + /usr file system specific string +/var (/dev/vg00/lvol8 ) : + 8192 file system block size 1024 fragment size + 69125 total blocks 35338 total free blocks + 28425 allocated free blocks 32640 total i-nodes + 31684 total free i-nodes 31684 allocated free i-nodes + 1073741832 file system id hfs file system type + 0 flags 255 file system name length + /var file system specific string +/ (/dev/vg00/lvol1 ) : + 8192 file system block size 1024 fragment size + 59797 total blocks 22524 total free blocks + 16544 allocated free blocks 9600 total i-nodes + 7301 total free i-nodes 7301 allocated free i-nodes + 1073741825 file system id hfs file system type + 0 flags 255 file system name length + / file system specific string diff --git a/kdf/unix_outputs/df-k.digital b/kdf/unix_outputs/df-k.digital new file mode 100644 index 0000000..ae61ca5 --- /dev/null +++ b/kdf/unix_outputs/df-k.digital @@ -0,0 +1,42 @@ +Filesystem 1024-blocks Used Available Capacity Mounted on +root_domain#root 265536 92583 159784 37% / +/proc 0 0 0 100% /proc +usr_domain#usr 1996712 553180 1424016 28% /usr +var_domain#var 1796712 74125 1714456 5% /var +/dev/rz17a 969738 115812 756952 14% /afscache +user_domain#calcul 1066986 626663 440323 59% /users/calcul +user_domain#atlas 444577 418063 26514 95% /users/atlas +user_domain#mecanique 444577 47918 396659 11% /users/mecanique +user_domain#elec 533493 527901 5592 99% /users/elec +user_domain#ams 889155 749420 139735 85% /users/ams +user_domain#theorie 1600479 1109849 490630 70% /users/theorie +data_domain#calcul 1043416 10376 1033040 1% /data/calcul +data_domain#elec 1043415 144 1043271 1% /data/elec +data_domain#admin 521707 24 521683 1% /data/admin +data_domain#l3 521707 331546 190161 64% /data/l3 +data_domain#theorie 2608538 1558632 1049906 60% /data/theorie +data_domain#atlas 1043415 825608 217807 80% /data/atlas +data_domain#virgo 1043415 32 1043383 1% /data/virgo +data_domain#aleph 1565123 72119 1493004 5% /data/aleph +data_domain#na50 521707 16 521691 1% /data/na50 +data_domain#babar 1043415 24 1043391 1% /data/babar +data_domain#cms 1043415 32 1043383 1% /data/cms +data_domain#ams 2086830 1016564 1070266 49% /data/ams +data_domain#nomad 1043415 32 1043383 1% /data/nomad +user_domain#l3 444577 116017 328560 27% /users/l3 +user_domain#aleph 444577 9672 434905 3% /users/aleph +user_domain#na50 444577 16 444561 1% /users/na50 +user_domain#babar 444577 6561 438016 2% /users/babar +user_domain#cms 444577 5902 438675 2% /users/cms +user_domain#nomad 444577 13956 430621 4% /users/nomad +user_domain#admin 444577 3294 441283 1% /users/admin +data_domain#mecanique 521707 42026 479681 9% /data/mecanique +user_domain#virgo 444577 58 444519 1% /users/virgo +user_domain#autres 444577 857 443720 1% /users/autres +data_domain#autres 521707 17216 504491 4% /data/autres +/COMMUN@lappa0 22764496 18302140 4313416 81% /COMMUN +/opt@lappa0 6245280 4713319 1392480 78% /opt +/var/spool/mail@lappa0 2653928 1201276 1415072 46% /var/spool/mail +/virgoa1_3@lappa0 8574909 7165973 551445 93% /virgoa1_3 +/lappa6_2@lappa0 8598343 4844545 2893963 63% /lappa6_2 +AFS 2000000 0 2000000 0% /afs diff --git a/kdf/unix_outputs/df-k.hpux b/kdf/unix_outputs/df-k.hpux new file mode 100644 index 0000000..3e9a386 --- /dev/null +++ b/kdf/unix_outputs/df-k.hpux @@ -0,0 +1,196 @@ +/cern (lapphp0.in2p3.fr:/lapphp0_3/cern) : 3660497 total allocated Kb + 974788 free allocated Kb + 2685709 used allocated Kb + 73 % allocation used +/outils/produits/frame (lapphp0.in2p3.fr:/lapphp0_3/produits/frame) : 3660497 total allocated Kb + 974788 free allocated Kb + 2685709 used allocated Kb + 73 % allocation used +/outils/produits/rogue (lapphp0.in2p3.fr:/lapphp0_3/produits/rogue) : 3660497 total allocated Kb + 974788 free allocated Kb + 2685709 used allocated Kb + 73 % allocation used +/lapphp1_6 (lapphp0.in2p3.fr:/lapphp1_6) : 3660497 total allocated Kb + 592074 free allocated Kb + 3068423 used allocated Kb + 83 % allocation used +/lapphp8/mupad (lapphp8.in2p3.fr:/lapphp8/mupad) : 542070 total allocated Kb + 406688 free allocated Kb + 135382 used allocated Kb + 24 % allocation used +/COMMUN (lappa0:/COMMUN ) : 0 total allocated Kb + 0 free allocated Kb + 0 used allocated Kb + 81 % allocation used +/nfs/virgoa1_2 (lappa0:/virgoa1_2 ) : 3404816 total allocated Kb + 377849 free allocated Kb + 3026967 used allocated Kb + 88 % allocation used +/USERS/AMS (/dev/users_services/rio) : 448780 total allocated Kb + 113719 free allocated Kb + 335061 used allocated Kb + 74 % allocation used +/USERS/elec (/dev/export/lvol3 ) : 907383 total allocated Kb + 368658 free allocated Kb + 538725 used allocated Kb + 59 % allocation used +/backup/increm2 (/dev/backup/lvol4 ) : 3412076 total allocated Kb + 2766506 free allocated Kb + 645570 used allocated Kb + 18 % allocation used +/backup/increm3 (/dev/backup/lvol1 ) : 2281950 total allocated Kb + 905272 free allocated Kb + 1376678 used allocated Kb + 60 % allocation used +/backup/incremental (/dev/backup/lvol2 ) : 3651131 total allocated Kb + 2439642 free allocated Kb + 1211489 used allocated Kb + 33 % allocation used +/cdrom (/dev/dsk/c1t2d0 ) : 2457600 total allocated Kb + 0 free allocated Kb + 2457600 used allocated Kb + 100 % allocation used +/export/cetia (/dev/users_services/lvol9) : 453682 total allocated Kb + 197055 free allocated Kb + 256627 used allocated Kb + 56 % allocation used +/export/fic (/dev/outils/lvol4 ) : 453682 total allocated Kb + 406794 free allocated Kb + 46888 used allocated Kb + 10 % allocation used +/export/hp (/dev/export/lvol5 ) : 899578 total allocated Kb + 177834 free allocated Kb + 721744 used allocated Kb + 80 % allocation used +/export/solaris (/dev/export/lvol4 ) : 544374 total allocated Kb + 235591 free allocated Kb + 308783 used allocated Kb + 56 % allocation used +/export/sun (/dev/export/lvol1 ) : 907383 total allocated Kb + 382203 free allocated Kb + 525180 used allocated Kb + 57 % allocation used +/export/tektro (/dev/export/lvol2 ) : 362977 total allocated Kb + 19379 free allocated Kb + 343598 used allocated Kb + 94 % allocation used +/export/www (/dev/users_services/lvol8) : 544374 total allocated Kb + 330339 free allocated Kb + 214035 used allocated Kb + 39 % allocation used +/home (/dev/vg00/lvol4 ) : 17874 total allocated Kb + 17864 free allocated Kb + 10 used allocated Kb + 0 % allocation used +/outils/adm (/dev/outils/lvol3 ) : 453682 total allocated Kb + 190194 free allocated Kb + 263488 used allocated Kb + 58 % allocation used +/outils/mail (/dev/outils/lvol6 ) : 272055 total allocated Kb + 228067 free allocated Kb + 43988 used allocated Kb + 16 % allocation used +/outils/newlp (/dev/vg00/newlp ) : 89702 total allocated Kb + 88381 free allocated Kb + 1321 used allocated Kb + 1 % allocation used +/outils/produits (/dev/outils/lvol1 ) : 1626030 total allocated Kb + 199727 free allocated Kb + 1426303 used allocated Kb + 87 % allocation used +/outils/securite (/dev/vg00/securite ) : 157900 total allocated Kb + 149785 free allocated Kb + 8115 used allocated Kb + 5 % allocation used +/outils/swap (/dev/outils/lvol5 ) : 453682 total allocated Kb + 309750 free allocated Kb + 143932 used allocated Kb + 31 % allocation used +/outils/tmp (/dev/outils/lvol2 ) : 453682 total allocated Kb + 208958 free allocated Kb + 244724 used allocated Kb + 53 % allocation used +/tmp (/dev/vg00/lvol6 ) : 20711 total allocated Kb + 10970 free allocated Kb + 9741 used allocated Kb + 47 % allocation used +/users/admin (/dev/users_services/lvol5) : 272055 total allocated Kb + 172064 free allocated Kb + 99991 used allocated Kb + 36 % allocation used +/users/aleph (/dev/users_manip/lvol9) : 362977 total allocated Kb + 2268 free allocated Kb + 360709 used allocated Kb + 99 % allocation used +/users/atlas (/dev/users_manip/lvol8) : 362977 total allocated Kb + 132918 free allocated Kb + 230059 used allocated Kb + 63 % allocation used +/users/autres (/dev/users_manip/lvol6) : 362977 total allocated Kb + 25468 free allocated Kb + 337509 used allocated Kb + 92 % allocation used +/users/backup (/dev/backup/lvol3 ) : 2292963 total allocated Kb + 0 free allocated Kb + 2292963 used allocated Kb + 100 % allocation used +/users/calcul (/dev/users_services/lvol4) : 1814958 total allocated Kb + 337030 free allocated Kb + 1477928 used allocated Kb + 81 % allocation used +/users/chooz (/dev/users_manip/lvol10) : 362977 total allocated Kb + 74394 free allocated Kb + 288583 used allocated Kb + 79 % allocation used +/users/cms (/dev/users_manip/lvol3) : 718628 total allocated Kb + 204338 free allocated Kb + 514290 used allocated Kb + 71 % allocation used +/users/ftp (/dev/users_services/lvol3) : 181364 total allocated Kb + 50187 free allocated Kb + 131177 used allocated Kb + 72 % allocation used +/users/l3 (/dev/users_manip/lvol2) : 181364 total allocated Kb + 180945 free allocated Kb + 419 used allocated Kb + 0 % allocation used +/users/mecanique (/dev/users_services/lvol7) : 362977 total allocated Kb + 312518 free allocated Kb + 50459 used allocated Kb + 13 % allocation used +/users/na50 (/dev/users_manip/lvol1) : 272055 total allocated Kb + 14768 free allocated Kb + 257287 used allocated Kb + 94 % allocation used +/users/nomad (/dev/users_manip/lvol4) : 362977 total allocated Kb + 9579 free allocated Kb + 353398 used allocated Kb + 97 % allocation used +/users/ovw (/dev/users_services/OVW) : 540513 total allocated Kb + 527154 free allocated Kb + 13359 used allocated Kb + 2 % allocation used +/users/swap (/dev/users_services/lvol1) : 544374 total allocated Kb + 544365 free allocated Kb + 9 used allocated Kb + 0 % allocation used +/users/theorie (/dev/users_manip/lvol5) : 362977 total allocated Kb + 298189 free allocated Kb + 64788 used allocated Kb + 17 % allocation used +/users/virgo (/dev/users_manip/lvol7) : 362977 total allocated Kb + 8406 free allocated Kb + 354571 used allocated Kb + 97 % allocation used +/usr (/dev/vg00/lvol7 ) : 269241 total allocated Kb + 12933 free allocated Kb + 256308 used allocated Kb + 95 % allocation used +/var (/dev/vg00/lvol8 ) : 62212 total allocated Kb + 28427 free allocated Kb + 33785 used allocated Kb + 54 % allocation used +/ (/dev/vg00/lvol1 ) : 53817 total allocated Kb + 16544 free allocated Kb + 37273 used allocated Kb + 69 % allocation used diff --git a/kdf/unix_outputs/df.man.hpux b/kdf/unix_outputs/df.man.hpux new file mode 100644 index 0000000..969320d --- /dev/null +++ b/kdf/unix_outputs/df.man.hpux @@ -0,0 +1,198 @@ + + + + df(1M) df(1M) + + + + + NAME + df (generic) - report number of free file system disk blocks + + SYNOPSIS + /usr/bin/df [-F FStype] [-befgiklnv] [-t|-P] [-o specific_options] [-V] + [special|directory]... + + DESCRIPTION + The df command displays the number of free 512-byte blocks and free + inodes available for file systems by examining the counts kept in the + superblock or superblocks. If a special or a directory is not + specified, the free space on all mounted file systems is displayed. + If the arguments to df are path names, df reports on the file systems + containing the named files. If the argument to df is a special of an + unmounted file system, the free space in the unmounted file system is + displayed. + + Options + df recognizes the following options: + + -b Report only the number of kilobytes (KB) free. + + -e Report the number of files free. + + -f Report only the actual count of the blocks in the + free list (free inodes are not reported). + + -F FStype Report only on the FStype file system type (see + fstyp(1M)). + + -g Report the entire structure described in + statvfs(2). + + -i Report the total number of inodes, the number of + free inodes, number of used inodes, and the + percentage of inodes in use. + + -k Report the allocation in kilobytes (KB). + + -l Report on local file systems only. + + -n Report the file system name. If used with no + other options, display a list of mounted file + system types. + + -o specific_options + Specify options specific to each file system type. + specific_options is a comma-separated list of + suboptions intended for a specific FStype module + of the command. See the file-system-specific + manual entries for further details. + + + + Hewlett-Packard Company - 1 - HP-UX Release 10.10: November 1995 + + + + + + + df(1M) df(1M) + + + + + -P Report the name of the file system, the size of + the file system, the number of blocks used, the + number of blocks free, the percentage of blocks + used and the directory below which the file system + hierarchy appears. + + -t Report the total allocated block figures and the + number of free blocks. + + -v Report the percentage of blocks used, the number + of blocks used, and the number of blocks free. + This option cannot be used with other options. + + -V Echo the completed command line, but perform no + other action. The command line is generated by + incorporating the user-specified options and other + information derived from /etc/fstab. This option + allows the user to verify the command line. + + EXTERNAL INFLUENCES + Environment Variables + LC_MESSAGES determines the language in which messages are displayed. + + If LC_MESSAGES is not specified in the environment or is set to the + empty string, the value of LANG is used as a default for each + unspecified or empty variable. If LANG is not specified or is set to + the empty string, a default of "C" (see lang(5)) is used instead of + LANG. + + If any internationalization variable contains an invalid setting, df + behaves as if all internationalization variables are set to "C". See + environ(5). + + International Code Set Support + Single-byte and multi-byte character code sets are supported. + + EXAMPLES + Report the number of free disk blocks for all mounted file systems: + + df + + Report the number of free disk blocks for all mounted HFS file + systems: + + df -F hfs + + Report the number of free files for all mounted NFS file systems: + + df -F nfs -e + + + + + + Hewlett-Packard Company - 2 - HP-UX Release 10.10: November 1995 + + + + + + + df(1M) df(1M) + + + + + Report the total allocated block figures and the number of free + blocks, for all mounted file systems: + + df -t + + Report the total allocated block figures and the number of free + blocks, for the file system mounted as /usr: + + df -t /usr + + FILES + /dev/dsk/* File system devices + /etc/fstab Static information about the file systems + /etc/mnttab Mounted file system table + SEE ALSO + du(1), df_FStype(1M), fsck(1M), fstab(4), fstyp(1M), statvfs(2), + mnttab(4). + STANDARDS CONFORMANCE + df: SVID2, SVID3, XPG2, XPG3, XPG4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hewlett-Packard Company - 3 - HP-UX Release 10.10: November 1995 + + + diff --git a/kdf/unix_outputs/etcfstab.digital b/kdf/unix_outputs/etcfstab.digital new file mode 100644 index 0000000..1bfcc0e --- /dev/null +++ b/kdf/unix_outputs/etcfstab.digital @@ -0,0 +1,43 @@ +root_domain#root / advfs rw 0 0 +/proc /proc procfs rw 0 0 +usr_domain#usr /usr advfs rw 0 0 +var_domain#var /var advfs rw 0 0 +/dev/rz16b swap1 ufs sw 0 2 +/dev/rz14a swap2 ufs sw 0 2 +/dev/rz17a /afscache ufs rw 1 2 +/COMMUN@lappa0 /COMMUN nfs rw,bg 0 0 +/opt@lappa0 /opt nfs rw,bg 0 0 +/var/spool/mail@lappa0 /var/spool/mail nfs rw,bg 0 0 +/w3@lappa0 /w3 nfs rw,bg 0 0 +/virgoa1_3@lappa0 /virgoa1_3 nfs rw,bg 0 0 +/lappa6_2@lappa0 /lappa6_2 nfs rw,bg 0 0 +user_domain#calcul /users/calcul advfs rw,userquota,groupquota 0 2 +user_domain#atlas /users/atlas advfs rw,userquota,groupquota 0 2 +user_domain#mecanique /users/mecanique advfs rw,userquota,groupquota 0 2 +user_domain#elec /users/elec advfs rw,userquota,groupquota 0 2 +user_domain#ams /users/ams advfs rw,userquota,groupquota 0 2 +user_domain#theorie /users/theorie advfs rw,userquota,groupquota 0 2 +data_domain#calcul /data/calcul advfs rw,userquota,groupquota 0 2 +data_domain#elec /data/elec advfs rw,userquota,groupquota 0 2 +data_domain#admin /data/admin advfs rw,userquota,groupquota 0 2 +data_domain#l3 /data/l3 advfs rw,userquota,groupquota 0 2 +data_domain#theorie /data/theorie advfs rw,userquota,groupquota 0 2 +data_domain#atlas /data/atlas advfs rw,userquota,groupquota 0 2 +data_domain#virgo /data/virgo advfs rw,userquota,groupquota 0 2 +data_domain#aleph /data/aleph advfs rw,userquota,groupquota 0 2 +data_domain#na50 /data/na50 advfs rw,userquota,groupquota 0 2 +data_domain#babar /data/babar advfs rw,userquota,groupquota 0 2 +data_domain#cms /data/cms advfs rw,userquota,groupquota 0 2 +data_domain#ams /data/ams advfs rw,userquota,groupquota 0 2 +data_domain#nomad /data/nomad advfs rw,userquota,groupquota 0 2 +user_domain#l3 /users/l3 advfs rw,userquota,groupquota 0 2 +user_domain#aleph /users/aleph advfs rw,userquota,groupquota 0 2 +user_domain#na50 /users/na50 advfs rw,userquota,groupquota 0 2 +user_domain#babar /users/babar advfs rw,userquota,groupquota 0 2 +user_domain#cms /users/cms advfs rw,userquota,groupquota 0 2 +user_domain#nomad /users/nomad advfs rw,userquota,groupquota 0 2 +user_domain#admin /users/admin advfs rw,userquota,groupquota 0 2 +data_domain#mecanique /data/mecanique advfs rw,userquota,groupquota 0 2 +user_domain#virgo /users/virgo advfs rw,userquota,groupquota 0 2 +user_domain#autres /users/autres advfs rw,userquota,groupquota 0 2 +data_domain#autres /data/autres advfs rw,userquota,groupquota 0 2 diff --git a/kdf/unix_outputs/etcfstab.hpux b/kdf/unix_outputs/etcfstab.hpux new file mode 100644 index 0000000..af333b1 --- /dev/null +++ b/kdf/unix_outputs/etcfstab.hpux @@ -0,0 +1,75 @@ +/dev/vg00/lvol1 / hfs defaults 0 1 +/dev/vg00/lvol3 ... swap defaults 0 0 +/dev/vg00/lvol4 /home hfs defaults 0 2 +/dev/vg00/lvol6 /tmp hfs defaults 0 2 +/dev/vg00/lvol7 /usr hfs defaults 0 2 +/dev/vg00/lvol8 /var hfs defaults 0 2 +/dev/vg00/newlp /outils/newlp hfs rw,suid 0 2 +# +/dev/export/lvol1 /export/sun hfs rw,suid 0 2 +/dev/export/lvol2 /export/tektro hfs rw,suid 0 2 +/dev/export/lvol3 /USERS/elec hfs rw,suid 0 2 +/dev/export/lvol4 /export/solaris hfs rw,suid 0 2 +/dev/export/lvol5 /export/hp hfs rw,suid 0 2 +# +/dev/users_manip/lvol1 /users/na50 hfs rw,suid 0 2 +/dev/users_manip/lvol2 /users/l3 hfs rw,suid 0 2 +/dev/users_manip/lvol3 /users/cms hfs rw,suid 0 2 +/dev/users_manip/lvol4 /users/nomad hfs rw,suid 0 2 +/dev/users_manip/lvol5 /users/theorie hfs rw,suid 0 2 +/dev/users_manip/lvol6 /users/autres hfs rw,suid 0 2 +/dev/users_manip/lvol7 /users/virgo hfs rw,suid 0 2 +/dev/users_manip/lvol8 /users/atlas hfs rw,suid 0 2 +/dev/users_manip/lvol9 /users/aleph hfs rw,suid 0 2 +/dev/users_manip/lvol10 /users/chooz hfs rw,suid 0 2 +# +/dev/users_services/lvol1 /users/swap hfs rw,suid 0 2 +/dev/users_services/lvol3 /users/ftp hfs rw,suid 0 2 +/dev/users_services/lvol4 /users/calcul hfs rw,suid 0 2 +/dev/users_services/lvol5 /users/admin hfs rw,suid 0 2 +/dev/users_services/lvol7 /users/mecanique hfs rw,suid 0 2 +/dev/users_services/lvol8 /export/www hfs rw,suid 0 2 +/dev/users_services/lvol9 /export/cetia hfs rw,suid 0 2 +/dev/users_services/rio /USERS/AMS hfs rw,suid 0 2 +/dev/users_services/OVW /users/ovw hfs rw,suid 0 2 +# +/dev/outils/lvol1 /outils/produits hfs rw,suid 0 2 +/dev/outils/lvol2 /outils/tmp hfs rw,suid 0 2 +/dev/outils/lvol3 /outils/adm hfs rw,suid 0 2 +/dev/outils/lvol4 /export/fic hfs rw,suid 0 2 +/dev/outils/lvol5 /outils/swap hfs rw,suid 0 2 +/dev/outils/lvol5 /outils/swap swapfs min=12800,lim=38400,pri=1 0 2 +/dev/outils/lvol6 /outils/mail hfs rw,suid 0 2 +# +/dev/backup/lvol1 /backup/increm3 hfs rw,suid 0 2 +/dev/backup/lvol2 /backup/incremental hfs rw,suid 0 2 +/dev/backup/lvol3 /users/backup hfs rw,suid 0 2 +/dev/backup/lvol4 /backup/increm2 hfs rw,suid 0 2 +# +#---------------------------------------------------- +# le CDROM est toujours a part +#------------------------------------------- +/dev/dsk/c1t2d0 /cdrom cdfs ro,suid 0 2 +# +#----------------------------------- +# rondelles NFS +#--------------------------------------------------- +# lapphp0 +lapphp0.in2p3.fr:/lapphp0_3/cern /cern nfs rw,suid,bg 0 0 +lapphp0.in2p3.fr:/lapphp0_3/produits/frame /outils/produits/frame nfs rw,suid,bg 0 0 +lapphp0.in2p3.fr:/lapphp0_3/produits/rogue /outils/produits/rogue nfs rw,suid,bg 0 0 +lapphp0.in2p3.fr:/lapphp1_6 /lapphp1_6 nfs rw,suid,bg 0 0 +#lapphp0.in2p3.fr:/lapphp0_2/local /usr/local.hp0 nfs rw,suid,bg 0 0 +# pour Alain Bazan (5/01/98) +#lapphp0.in2p3.fr:/usr/lib/X11R6 /usr/lib/X11R6 nfs rw,suid,bg 0 0 +#lapphp0.in2p3.fr:/usr/lib/Motif1.2_R6 /usr/lib/Motif1.2_R6 nfs rw,suid,bg 0 0 + +# rondelles lapphp8 : produits logiciels a deplacer sur lapphp0 +# pour eviter les NFS croises +lapphp8.in2p3.fr:/lapphp8/mupad /lapphp8/mupad nfs rw,suid,bg 0 0 +lapphp8.in2p3.fr:/lapphp8/maple /lapphp8/maple nfs rw,suid,bg 0 0 + +# lappa0 +lappa0:/COMMUN /COMMUN nfs rw,suid,bg 0 0 +lappa0:/virgoa1_2 /nfs/virgoa1_2 nfs rw,suid,bg 0 0 +/dev/vg00/securite /outils/securite hfs rw,suid 0 2 diff --git a/kdf/unix_outputs/unix-defines.txt b/kdf/unix_outputs/unix-defines.txt new file mode 100644 index 0000000..75a2846 --- /dev/null +++ b/kdf/unix_outputs/unix-defines.txt @@ -0,0 +1,125 @@ +What about using builtin symbols defined by the compiler (gcc) +itself. For example on Alpha I have : + +lappa{bussat}(74) echo 'main(){printf("hello world\n";}' |gcc -E -v - +Reading specs from /usr/local/lib/gcc-lib/alpha-dec-osf4.0/2.7.2.3/specs +gcc version 2.7.2.3 + /usr/local/lib/gcc-lib/alpha-dec-osf4.0/2.7.2.3/cpp -lang-c -v -undef +-D__GNUC__=2 -D__GNUC_MINOR__=7 -Dunix -D__osf__ -D__alpha -D__alpha__ +-D_LONGLONG -DSYSTYPE_BSD -D_SYSTYPE_BSD -D__unix__ -D__osf__ -D__alpha +-D__alpha__ -D_LONGLONG -D__SYSTYPE_BSD__ -D_SYSTYPE_BSD -D__unix +-D__SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4) -Acpu(alpha) +-Amachine(alpha) -D__LANGUAGE_C__ -D__LANGUAGE_C -DLANGUAGE_C - +GNU CPP version 2.7.2.3 +#include "..." search starts here: +#include <...> search starts here: + /usr/local/include + /usr/local/alpha-dec-osf4.0/include + /usr/local/lib/gcc-lib/alpha-dec-osf4.0/2.7.2.3/include + /usr/include +End of search list. +# 1 "" +main(){printf("hello world\n";} + +On HP, this becomes : +bussat [21] echo 'main(){printf("hello world\n";}' |gcc -E -v - +Reading specs from +/opt/gcc/lib/gcc-lib/hppa1.1-hp-hpux10.10/2.7.2.2/specs +gcc version 2.7.2.2 + /opt/gcc/lib/gcc-lib/hppa1.1-hp-hpux10.10/2.7.2.2/cpp -lang-c -v -undef +-D__GNUC__=2 -D__GNUC_MINOR__=7 -Dhppa -Dhp9000s800 -D__hp9000s800 +-Dhp9k8 -DPWB -Dhpux -Dunix -D_HPUX_SOURCE -D__hppa__ -D__hp9000s800__ +-D__hp9000s800 -D__hp9k8__ -D__PWB__ -D__hpux__ -D__unix__ +-D_HPUX_SOURCE -D__hppa -D__hp9000s800 -D__hp9k8 -D__PWB -D__hpux +-D__unix -Asystem(unix) -Asystem(hpux) -Acpu(hppa) -Amachine(hppa) +-D__hp9000s700 -D_PA_RISC1_1 - +GNU CPP version 2.7.2.2 (hppa) +#include "..." search starts here: +#include <...> search starts here: + /opt/gcc/include + /opt/gcc/hppa1.1-hp-hpux10.10/include + /opt/gcc/lib/gcc-lib/hppa1.1-hp-hpux10.10/2.7.2.2/include + /usr/include +End of search list. +# 1 "" +main(){printf("hello world +";} + +On Sun Solaris2.5 I found +lappsun8{bussat}[1]: echo 'main(){printf("hello world\n";}' |gcc -E -v - +Reading specs from +/opt/FSFgcc/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/specs +gcc version 2.7.2 + /opt/FSFgcc/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/cpp -lang-c -v +-undef -D__GNUC__=2 -D__GNUC_MINOR__=7 -Dsun -Dsparc -Dunix -D__svr4__ +-D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun__ -D__sparc__ -D__unix__ +-D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun -D__sparc -D__unix +-Asystem(unix) -Asystem(svr4) -Acpu(sparc) -Amachine(sparc) - +GNU CPP version 2.7.2 (sparc) +#include "..." search starts here: +#include <...> search starts here: + /usr/local/include + /opt/FSFgcc/sparc-sun-solaris2.5/include + /opt/FSFgcc/lib/gcc-lib/sparc-sun-solaris2.5/2.7.2/include + /usr/include +End of search list. +# 1 "" +main(){printf("hello world +";} + +Finally, on Sun with SunOS4.1 the results are : +lappsun1{bussat}[1]: echo 'main(){printf("hello world\n";}' |gcc -E -v +- +Reading specs from +/usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3_U1/2.6.0/specs +gcc version 2.6.0 + /usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3_U1/2.6.0/cpp -lang-c -v +-undef -D__GNUC__=2 -D__GNUC_MINOR__=6 -Dsparc -Dsun -Dunix +-D__GCC_NEW_VARARGS__ -D__sparc__ -D__sun__ -D__unix__ +-D__GCC_NEW_VARARGS__ -D__sparc -D__sun -D__unix -Asystem(unix) +-Asystem(bsd) -Acpu(sparc) -Amachine(sparc) - +GNU CPP version 2.6.0 (sparc) +#include "..." search starts here: +#include <...> search starts here: + /usr/local/include + /usr/local/sparc-sun-sunos4.1.3_U1/include + /usr/local/lib/gcc-lib/sparc-sun-sunos4.1.3_U1/2.6.0/include + /usr/include +End of search list. +# 1 "" +main(){printf("hello world +";} + +on a Linux box there is: +mike@kermit:/home/mike > echo 'main(){printf("hello world\n";}' |gcc -E -v - +Reading specs from /usr/lib/gcc-lib/i486-linux/2.7.2.1/specs +gcc version 2.7.2.1 + /usr/lib/gcc-lib/i486-linux/2.7.2.1/cpp -lang-c -v -undef -D__GNUC__=2 +-D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux -D__ELF__ -D__unix__ +-D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(unix) +-Asystem(posix) -Acpu(i386) -Amachine(i386) -D__i486__ - GNU CPP version +2.7.2.1 (i386 Linux/ELF) #include "..." search starts here: #include <...> +search starts here: /usr/local/include + /usr/i486-linux/include + /usr/lib/gcc-lib/i486-linux/2.7.2.1/include + /usr/include +End of search list. +# 1 "" +main(){printf("hello world\n";} + +on digital UNIX V3.2D-1 there is +mkropfbe@edusrv(1)$ echo 'main(){printf("hello world\n";}' |gcc -E -v - +Reading specs from /usr/local/lib/gcc-lib/alpha-dec-osf3.2/2.7.2/specs +gcc version 2.7.2 + /usr/local/lib/gcc-lib/alpha-dec-osf3.2/2.7.2/cpp -lang-c -v -undef +-D__GNUC__=2 -D__GNUC_MINOR__=7 -Dunix -D__osf__ -D__alpha -D__alpha__ +-D_LONGLONG -DSYSTYPE_BSD -D_SYSTYPE_BSD -D__unix__ -D__osf__ -D__alpha +-D__alpha__ -D_LONGLONG -D__SYSTYPE_BSD__ -D_SYSTYPE_BSD -D__unix +-D__SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha) +-D__LANGUAGE_C__ -D__LANGUAGE_C -DLANGUAGE_C - GNU CPP version 2.7.2 #include +"..." search starts here: #include <...> search starts here: +/usr/local/include /usr/local/alpha-dec-osf3.2/include +/usr/local/lib/gcc-lib/alpha-dec-osf3.2/2.7.2/include /usr/include +End of search list. +# 1 "" +main(){printf("hello world\n";} |