diff options
Diffstat (limited to 'tdefilereplace/commandengine.cpp')
-rw-r--r-- | tdefilereplace/commandengine.cpp | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/tdefilereplace/commandengine.cpp b/tdefilereplace/commandengine.cpp new file mode 100644 index 00000000..5184773c --- /dev/null +++ b/tdefilereplace/commandengine.cpp @@ -0,0 +1,213 @@ +/*************************************************************************** + commandengine.cpp - kfr commands feature class + ------------------- + begin : fri aug 13 15:29:46 CEST 2004 + + copyright : (C) 2004 Emiliano Gulmini + email : emi_barbarossa@yahoo.it + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +// QT +#include <tqdatetime.h> +#include <tqfile.h> +#include <tqtextstream.h> +#include <tqdom.h> + +// KDE +#include <kuser.h> +#include <krandomsequence.h> +#include <kprocess.h> + +// local +#include "commandengine.h" + +TQString CommandEngine::datetime(const TQString& opt, const TQString& arg) +{ + Q_UNUSED(arg); + if(opt == "iso") + return TQDateTime::currentDateTime(Qt::LocalTime).toString(Qt::ISODate); + if(opt == "local") + return TQDateTime::currentDateTime(Qt::LocalTime).toString(Qt::LocalDate); + return TQString(); +} + +TQString CommandEngine::user(const TQString& opt, const TQString& arg) +{ + Q_UNUSED(arg); + KUser u; + if(opt == "uid") + return TQString::number(u.uid(),10); + if(opt == "gid") + return TQString::number(u.gid(),10); + if(opt == "loginname") + return u.loginName(); + if(opt == "fullname") + return u.fullName(); + if(opt == "homedir") + return u.homeDir(); + if(opt == "shell") + return u.shell(); + return TQString(); +} + +TQString CommandEngine::loadfile(const TQString& opt, const TQString& arg) +{ + Q_UNUSED(arg); + + TQFile f(opt); + if(!f.open(IO_ReadOnly)) return TQString(); + + TQTextStream t(&f); + + TQString s = t.read(); + + f.close(); + + return s; +} + +TQString CommandEngine::empty(const TQString& opt, const TQString& arg) +{ + Q_UNUSED(opt); + Q_UNUSED(arg); + return ""; +} + +TQString CommandEngine::mathexp(const TQString& opt, const TQString& arg) +{ + /* We will use bc 1.06 by Philip A. Nelson <philnelson@acm.org> */ + //Q_UNUSED(opt); + Q_UNUSED(arg); + + TQString tempOpt = opt; + tempOpt.replace("ln","l"); + tempOpt.replace("sin","s"); + tempOpt.replace("cos","c"); + tempOpt.replace("arctan","a"); + tempOpt.replace("exp","e"); + + TQString program = "var=("+tempOpt+");print var"; + TQString script = "echo '"+program+"' | bc -l;"; + + TDEProcess* proc = new TDEProcess(); + + proc->setUseShell(true); + + *(proc) << script; + + connect(proc, TQT_SIGNAL(receivedStdout(TDEProcess*,char*,int)), this, TQT_SLOT(slotGetScriptOutput(TDEProcess*,char*,int))); + connect(proc, TQT_SIGNAL(receivedStderr(TDEProcess*,char*,int)), this, TQT_SLOT(slotGetScriptError(TDEProcess*,char*,int))); + connect(proc, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(slotProcessExited(TDEProcess*))); + + //Through slotGetScriptOutput, m_processOutput contains the result of the TDEProcess call + if(!proc->start(TDEProcess::Block, TDEProcess::All)) + { + return TQString(); + } + else + { + proc->wait(); + } + if(proc) + delete proc; + + TQString tempbuf = m_processOutput; + m_processOutput = TQString(); + + return tempbuf; + +} + +TQString CommandEngine::random(const TQString& opt, const TQString& arg) +{ + Q_UNUSED(arg); + long seed; + if(opt.isEmpty()) + { + TQDateTime dt; + seed = dt.toTime_t(); + } + else + seed = opt.toLong(); + + KRandomSequence seq(seed); + return TQString::number(seq.getLong(1000000),10); +} + +TQString CommandEngine::stringmanip(const TQString& opt, const TQString& arg) +{ + Q_UNUSED(opt); + Q_UNUSED(arg); + return ""; +} + +TQString CommandEngine::variableValue(const TQString &variable) +{ + TQString s = variable; + + s.remove("[$").remove("$]").remove(" "); + + if(s.contains(":") == 0) + return variable; + else + { + TQString leftValue = s.section(":",0,0), + midValue = s.section(":",1,1), + rightValue = s.section(":",2,2); + + TQString opt = midValue; + TQString arg = rightValue; + + if(leftValue == "stringmanip") + return stringmanip(opt, arg); + if(leftValue == "datetime") + return datetime(opt, arg); + if(leftValue == "user") + return user(opt, arg); + if(leftValue == "loadfile") + return loadfile(opt, arg); + if(leftValue == "empty") + return empty(opt, arg); + if(leftValue == "mathexp") + return mathexp(opt, arg); + if(leftValue == "random") + return random(opt, arg); + + return variable; + } +} + +//SLOTS +void CommandEngine::slotGetScriptError(TDEProcess* proc, char* s, int i) +{ + Q_UNUSED(proc); + Q_UNUSED(proc); + TQCString temp(s,i+1); + if(temp.isEmpty() || temp == "\n") return; +} + +void CommandEngine::slotGetScriptOutput(TDEProcess* proc, char* s, int i) +{ + Q_UNUSED(proc); + TQCString temp(s,i+1); + + if(temp.isEmpty() || temp == "\n") return; + + m_processOutput += TQString::fromLocal8Bit(temp); +} + +void CommandEngine::slotProcessExited(TDEProcess* proc) +{ + Q_UNUSED(proc); +} + +#include "commandengine.moc" |