shellscript.cpp
00001 /* This file is part of the KDE project 00002 Copyright (C) 2001 Ian Reinhart Geiser (geiseri@kde.org) 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00017 Boston, MA 02110-1301, USA. 00018 */ 00019 00020 #include "shellscript.h" 00021 #include <kdebug.h> 00022 #include <tdeapplication.h> 00023 #include <dcopclient.h> 00024 00025 #include <kgenericfactory.h> 00026 #include <scriptclientinterface.h> 00027 //using namespace KScriptInterface; 00028 typedef KGenericFactory<ShellScript, KScriptClientInterface> ShellScriptFactory; 00029 K_EXPORT_COMPONENT_FACTORY( libshellscript, ShellScriptFactory( "ShellScript" ) ) 00030 00031 ShellScript::ShellScript(KScriptClientInterface *parent, const char *, const TQStringList & ) : ScriptClientInterface(parent) 00032 { 00033 m_script = new TDEProcess(); 00034 connect ( m_script, TQT_SIGNAL(processExited(TDEProcess *)), TQT_SLOT(Exit(TDEProcess *))); 00035 connect ( m_script, TQT_SIGNAL(receivedStdout(TDEProcess *, char *, int)), TQT_SLOT(stdOut(TDEProcess *, char *, int ))); 00036 connect ( m_script, TQT_SIGNAL(receivedStderr(TDEProcess *, char *, int)), TQT_SLOT(stdErr(TDEProcess *, char *, int ))); 00037 // Connect feedback signals and slots 00038 //kdDebug() << "Building new script engine" << endl; 00039 } 00040 00041 ShellScript::~ShellScript() 00042 { 00043 } 00044 00045 TQString ShellScript::script() const 00046 { 00047 return m_scriptName; 00048 } 00049 00050 void ShellScript::setScript( const TQString &scriptFile ) 00051 { 00052 m_scriptName = scriptFile; 00053 *m_script << "sh" << m_scriptName << kapp->dcopClient()->appId(); 00054 } 00055 00056 void ShellScript::setScript( const TQString &, const TQString & ) 00057 { 00058 // ### what is this? 00059 } 00060 00061 void ShellScript::run(TQObject *, const TQVariant &) 00062 { 00063 m_script->start(TDEProcess::NotifyOnExit,TDEProcess::All); 00064 } 00065 void ShellScript::kill() 00066 { 00067 if (!m_script->kill()) // Kill the process 00068 m_script->kill(9); // Kill it harder 00069 } 00070 00071 void ShellScript::Exit(TDEProcess *proc) 00072 { 00073 ScriptClientInterface->done((KScriptClientInterface::Result)proc->exitStatus(), ""); 00074 } 00075 00076 void ShellScript::stdErr(TDEProcess *, char *buffer, int) 00077 { 00078 ScriptClientInterface->error(buffer); 00079 } 00080 void ShellScript::stdOut(TDEProcess *, char *buffer, int) 00081 { 00082 ScriptClientInterface->output(buffer); 00083 } 00084 00085 #include "shellscript.moc"