int main( int argc, char **argv ) { QTime time; time.start(); #ifdef _WIN32 # ifdef CONSOLEIO RedirectIOToConsole(); # endif #endif // Handle arguments QString appName = argv[0]; QStringList args; for (int i = 1; i < argc; i++ ) { args << argv[i]; } QString script; KJS::List scriptArgs; bool gui = true; #ifndef QT_ONLY /* #ifdef __GNUC__ #warning "KDE Support enabled" #endif */ bool kde = true; #else /* #ifdef __GNUC__ #warning "KDE Support disabled" #endif */ #endif if (argc > 1) { while (!args.isEmpty()) { QString arg = args.takeFirst(); if (arg.contains('-')) { if ((arg == "--version") || (arg == "-v")) { printf("Qt: %s\n", qVersion()); #ifndef QT_ONLY printf("KDE: %s\n", KDE_VERSION_STRING); #endif return 0; } if ((arg == "--exec") || (arg == "-e")) { gui = false; } else if ((arg == "--interactive") || (arg == "-i")) (*KJSEmbed::conout()) << "Interactive"; #ifndef QT_ONLY else if ((arg == "-n") || (arg == "--no-kde")) { kde = false; } #endif else { printUsage(appName); return 0; } } else { if (!script.isEmpty()) scriptArgs.append(KJS::jsString(arg)); else script = arg; } } } else { printUsage(appName); return 0; } // Setup QApplication QCoreApplication *app; #ifndef QT_ONLY if (kde) { KAboutData aboutData( "kjscmd", 0, ki18n("KJSCmd"), "0.2", ki18n("" "Utility for running KJSEmbed scripts \n" ), KAboutData::License_LGPL, ki18n("(C) 2005-2006 The KJSEmbed Authors") ); KCmdLineOptions options; options.add("e", ki18n("Execute script without gui support")); options.add("exec", ki18n("Execute script without gui support")); options.add("i", ki18n("start interactive kjs interpreter")); options.add("interactive", ki18n("start interactive kjs interpreter")); options.add("n", ki18n("start without KDE KApplication support.")); options.add("no-kde", ki18n("start without KDE KApplication support.")); options.add("!+command", ki18n("Script to execute")); KCmdLineArgs::addCmdLineOptions( options ); // Add our own options. KCmdLineArgs::init( argc, argv, &aboutData ); app = new KApplication(gui); } else #endif if (gui) { qDebug("no KDE"); app = new QApplication( argc, argv ); dynamic_cast<QApplication*>(app)->connect( app, SIGNAL(lastWindowClosed()), SLOT(quit()) ); } else { qDebug("no GUI"); app = new QCoreApplication(argc, argv); } qDebug(" New %s %dms", app->metaObject()->className(), time.elapsed()); app->setApplicationName( appName ); // Setup Interpreter time.restart(); Engine kernel; qDebug(" New engine %dms", time.elapsed()); time.restart(); KJS::Interpreter *js = kernel.interpreter(); js->setShouldPrintExceptions(true); KJS::ExecState *exec = js->globalExec(); // Publish bindings KJS::JSObject *appObject = kernel.addObject( app, "Application" ); KJS::JSObject *argObject = js->builtinArray()->construct( exec, scriptArgs ); appObject->put( exec, "args", argObject ); Engine::ExitStatus result = Engine::Failure; if (!script.isEmpty()) { result = kernel.runFile(toUString(script)); } else // exec shell { result = kernel.runFile( ":/console.js" ); } if ( result != Engine::Success ) { KJS::Completion jsres = kernel.completion(); (*KJSEmbed::conerr()) << toQString(jsres.value()->toString(exec)) << endl; } return (int)result; }