summaryrefslogtreecommitdiffstats
path: root/tdefilereplace/commandengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdefilereplace/commandengine.cpp')
-rw-r--r--tdefilereplace/commandengine.cpp213
1 files changed, 213 insertions, 0 deletions
diff --git a/tdefilereplace/commandengine.cpp b/tdefilereplace/commandengine.cpp
new file mode 100644
index 0000000..5184773
--- /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"