summaryrefslogtreecommitdiffstats
path: root/kfilereplace/commandengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kfilereplace/commandengine.cpp')
-rw-r--r--kfilereplace/commandengine.cpp213
1 files changed, 213 insertions, 0 deletions
diff --git a/kfilereplace/commandengine.cpp b/kfilereplace/commandengine.cpp
new file mode 100644
index 00000000..56cc50b1
--- /dev/null
+++ b/kfilereplace/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 <qdatetime.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qdom.h>
+
+// KDE
+#include <kuser.h>
+#include <krandomsequence.h>
+#include <kprocess.h>
+
+// local
+#include "commandengine.h"
+
+QString CommandEngine::datetime(const QString& opt, const QString& arg)
+{
+ Q_UNUSED(arg);
+ if(opt == "iso")
+ return QDateTime::currentDateTime(Qt::LocalTime).toString(Qt::ISODate);
+ if(opt == "local")
+ return QDateTime::currentDateTime(Qt::LocalTime).toString(Qt::LocalDate);
+ return QString::null;
+}
+
+QString CommandEngine::user(const QString& opt, const QString& arg)
+{
+ Q_UNUSED(arg);
+ KUser u;
+ if(opt == "uid")
+ return QString::number(u.uid(),10);
+ if(opt == "gid")
+ return QString::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 QString::null;
+}
+
+QString CommandEngine::loadfile(const QString& opt, const QString& arg)
+{
+ Q_UNUSED(arg);
+
+ QFile f(opt);
+ if(!f.open(IO_ReadOnly)) return QString::null;
+
+ QTextStream t(&f);
+
+ QString s = t.read();
+
+ f.close();
+
+ return s;
+}
+
+QString CommandEngine::empty(const QString& opt, const QString& arg)
+{
+ Q_UNUSED(opt);
+ Q_UNUSED(arg);
+ return "";
+}
+
+QString CommandEngine::mathexp(const QString& opt, const QString& arg)
+{
+ /* We will use bc 1.06 by Philip A. Nelson <philnelson@acm.org> */
+ //Q_UNUSED(opt);
+ Q_UNUSED(arg);
+
+ QString tempOpt = opt;
+ tempOpt.replace("ln","l");
+ tempOpt.replace("sin","s");
+ tempOpt.replace("cos","c");
+ tempOpt.replace("arctan","a");
+ tempOpt.replace("exp","e");
+
+ QString program = "var=("+tempOpt+");print var";
+ QString script = "echo '"+program+"' | bc -l;";
+
+ KProcess* proc = new KProcess();
+
+ proc->setUseShell(true);
+
+ *(proc) << script;
+
+ connect(proc, SIGNAL(receivedStdout(KProcess*,char*,int)), this, SLOT(slotGetScriptOutput(KProcess*,char*,int)));
+ connect(proc, SIGNAL(receivedStderr(KProcess*,char*,int)), this, SLOT(slotGetScriptError(KProcess*,char*,int)));
+ connect(proc, SIGNAL(processExited(KProcess*)), this, SLOT(slotProcessExited(KProcess*)));
+
+ //Through slotGetScriptOutput, m_processOutput contains the result of the KProcess call
+ if(!proc->start(KProcess::Block, KProcess::All))
+ {
+ return QString::null;
+ }
+ else
+ {
+ proc->wait();
+ }
+ if(proc)
+ delete proc;
+
+ QString tempbuf = m_processOutput;
+ m_processOutput = QString::null;
+
+ return tempbuf;
+
+}
+
+QString CommandEngine::random(const QString& opt, const QString& arg)
+{
+ Q_UNUSED(arg);
+ long seed;
+ if(opt.isEmpty())
+ {
+ QDateTime dt;
+ seed = dt.toTime_t();
+ }
+ else
+ seed = opt.toLong();
+
+ KRandomSequence seq(seed);
+ return QString::number(seq.getLong(1000000),10);
+}
+
+QString CommandEngine::stringmanip(const QString& opt, const QString& arg)
+{
+ Q_UNUSED(opt);
+ Q_UNUSED(arg);
+ return "";
+}
+
+QString CommandEngine::variableValue(const QString &variable)
+{
+ QString s = variable;
+
+ s.remove("[$").remove("$]").remove(" ");
+
+ if(s.contains(":") == 0)
+ return variable;
+ else
+ {
+ QString leftValue = s.section(":",0,0),
+ midValue = s.section(":",1,1),
+ rightValue = s.section(":",2,2);
+
+ QString opt = midValue;
+ QString 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(KProcess* proc, char* s, int i)
+{
+ Q_UNUSED(proc);
+ Q_UNUSED(proc);
+ QCString temp(s,i+1);
+ if(temp.isEmpty() || temp == "\n") return;
+}
+
+void CommandEngine::slotGetScriptOutput(KProcess* proc, char* s, int i)
+{
+ Q_UNUSED(proc);
+ QCString temp(s,i+1);
+
+ if(temp.isEmpty() || temp == "\n") return;
+
+ m_processOutput += QString::fromLocal8Bit(temp);
+}
+
+void CommandEngine::slotProcessExited(KProcess* proc)
+{
+ Q_UNUSED(proc);
+}
+
+#include "commandengine.moc"