jboolean attachJavaVM(JNIEnv *java_env) { java_env->GetJavaVM(&jvm); if(!connectCaller(java_env)) { return (jboolean)false; } return connectCallbacks(java_env); }
int RThread::initialize () { RK_TRACE (RBACKEND); // we create a fake RCommand to capture all the output/errors during startup current_command = new RCommand (i18n ("R Startup"), RCommand::App, i18n ("R Startup")); int argc = 2; char* argv[2] = { qstrdup ("--slave"), qstrdup ("--no-save") }; startR (argc, argv); for (--argc; argc >= 0; --argc) { delete argv[argc]; } connectCallbacks (); RKWardRError error; int status = 0; runCommandInternal ("library (\"rkward\")\n", &error); if (error) status |= LibLoadFail; int c; QString *paths = getCommandAsStringVector ("library.dynam (\"rkward\", \"rkward\")[[\"path\"]]\n", &c, &error); if ((error) || (c != 1)) { status |= LibLoadFail; } else { if (!registerFunctions (paths[0].local8Bit ())) status |= LibLoadFail; } delete [] paths; // find out about standard library locations QString *standardliblocs = getCommandAsStringVector (".libPaths ()\n", &c, &error); if (error) status |= OtherFail; for (int i = 0; i < c; ++i) { RKSettingsModuleRPackages::defaultliblocs.append (standardliblocs[i]); } delete [] standardliblocs; // apply user configurable run time options QStringList commands = RKSettingsModuleR::makeRRunTimeOptionCommands () + RKSettingsModuleRPackages::makeRRunTimeOptionCommands (); for (QStringList::const_iterator it = commands.begin (); it != commands.end (); ++it) { runCommandInternal ((*it).local8Bit (), &error); if (error) { status |= OtherFail; RK_DO (qDebug ("error in initialization call '%s'", (*it).latin1()), RBACKEND, DL_ERROR); } } // error sink and help browser runCommandInternal ("options (error=quote (.rk.do.error ()))\n", &error); if (error) status |= SinkFail; /* runCommandInternal (".rk.init.handlers ()\n", &error); if (error) status |= SinkFail; */ runCommandInternal ("options (htmlhelp=TRUE); options (browser=\"dcop " + kapp->dcopClient ()->appId () + " rkwardapp openHTMLHelp \")", &error); if (error) status |= OtherFail; // TODO: error-handling? MUTEX_LOCK; flushOutput (); MUTEX_UNLOCK; QCustomEvent *event = new QCustomEvent (RCOMMAND_OUT_EVENT); event->setData (current_command); qApp->postEvent (RKGlobals::rInterface (), event); return status; }