kjsembed
iosupport.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "iosupport.h"
00023 #include "static_binding.h"
00024 #include "kjseglobal.h"
00025
00026 #include <kjs/object.h>
00027 #include <QtCore/QDebug>
00028
00029 #include <QtCore/QStringList>
00030 #include <QtCore/QProcess>
00031
00032 using namespace KJSEmbed;
00033
00034 KJS::JSValue *callPrint( KJS::ExecState *exec, KJS::JSObject * , const KJS::List &args )
00035 {
00036 (*KJSEmbed::conout()) << toQString(args[0]->toString(exec));
00037 return KJS::jsNull();
00038 }
00039
00040 KJS::JSValue * callPrintLn( KJS::ExecState *exec, KJS::JSObject * , const KJS::List &args )
00041 {
00042 (*KJSEmbed::conout()) << toQString(args[0]->toString(exec)) << endl;
00043 return KJS::jsNull();
00044 }
00045
00046 KJS::JSValue * callDebug( KJS::ExecState *exec, KJS::JSObject * , const KJS::List &args )
00047 {
00048
00049 qDebug() << "Debug: " << toQString(args[0]->toString(exec));
00050 return KJS::jsNull();
00051 }
00052
00053 KJS::JSValue * callReadLine( KJS::ExecState *exec, KJS::JSObject * , const KJS::List &args )
00054 {
00055 Q_UNUSED(exec);
00056 Q_UNUSED(args);
00057 QString line = conin()->readLine();
00058 return KJS::jsString( line );
00059 }
00060
00061 KJS::JSValue * callSystem( KJS::ExecState *exec, KJS::JSObject * , const KJS::List &args )
00062 {
00063 QProcess systemProcess;
00064 QStringList processArgs = toQString(args[0]->toString(exec)).split( ' ' );
00065 QString app = processArgs[0];
00066 processArgs.pop_front();
00067
00068 systemProcess.start( app, processArgs );
00069 if (!systemProcess.waitForStarted())
00070 {
00071 return KJS::throwError(exec, KJS::GeneralError, "Application could not start.");
00072 }
00073 if (!systemProcess.waitForFinished())
00074 {
00075 return KJS::throwError(exec, KJS::GeneralError, "Application crashed.");
00076 }
00077 return KJS::jsString( systemProcess.readAll().data() );
00078 }
00079
00080 const Method IoFactory::IoMethods[] =
00081 {
00082 {"debug", 1, KJS::DontDelete|KJS::ReadOnly, &callDebug },
00083 {"print", 1, KJS::DontDelete|KJS::ReadOnly, &callPrint },
00084 {"println", 1, KJS::DontDelete|KJS::ReadOnly, &callPrintLn },
00085 {"readln", 0, KJS::DontDelete|KJS::ReadOnly, &callReadLine },
00086 {"system", 1, KJS::DontDelete|KJS::ReadOnly, &callSystem },
00087 {0, 0, 0, 0 }
00088 };
00089
00090