Example #1
0
void			CoreEngine::switchLib( void )
{
	std::string lib;

	if ( this->_lib != 1 && this->_renderLib->isKeyPressed( ILib::F1 ) )
	{
		lib = "./libs/ncurses_lib/libncurses.dylib";
		this->_lib = 1;
	}
	else if ( this->_lib != 2 && this->_renderLib->isKeyPressed( ILib::F2 ) )
	{
		lib = "./libs/opengl_lib/libopengl.dylib";
		this->_lib = 2;
	}
	else if ( this->_lib != 3 && this->_renderLib->isKeyPressed( ILib::F3 ) )
	{
		lib = "./libs/sdl_lib/libsdl.dylib";
		this->_lib = 3;
	}
	else
		return ;
	this->_renderLib->destroyWindow();
	dlclose( this->_handle );
	loadLib( lib );

	if ( ! this->_renderLib->createWindow( 850, 550, "Test" ) )
	{
		std::cerr << "Failed to create window !" << std::endl;
		return ;
	}
	this->_renderLib->updateKeys();

	return ;
}
JNIEXPORT void JNICALL Java_com_n0n3m4_q3e_Q3EJNI_init(JNIEnv *env, jclass c, jstring LibPath, jint width, jint height, jstring GameDir, jstring Cmdline)
{
    char **argv;
    int argc=0;
    jboolean iscopy;
    const char *dir = (*env)->GetStringUTFChars(
                          env, GameDir, &iscopy);
    const char *arg = (*env)->GetStringUTFChars(
                          env, Cmdline, &iscopy);
    chdir(strdup(dir));
    (*env)->ReleaseStringUTFChars(env, GameDir, dir);
    argv = malloc(sizeof(char*) * 255);
    argc = ParseCommandLine(strdup(arg), argv);
    (*env)->ReleaseStringUTFChars(env, Cmdline, arg);

    const char *libpath = (*env)->GetStringUTFChars(
                              env, LibPath, &iscopy);
    loadLib(strdup(libpath));
    (*env)->ReleaseStringUTFChars(env, LibPath, libpath);

    setCallbacks(&initAudio,&writeAudio,&setState);
    setResolution(width, height);

    qmain(argc, argv);
    free(argv);
}
Example #3
0
CoreEngine::CoreEngine( float fps, int lib ) :
	_fps( fps ),
	_game( NULL ),
	_isRunning( false ),
	_lib( lib )
{
	loadLib( "./libs/ncurses_lib/libncurses.dylib" );
	return ;
}
//______________________________________________________________________________
int execDictSelection()
{
   
   std::cout << "*** Stress TClass with DictSelection ***\n";
   
   loadLib("libclassesDictSelection_dictrflx.so");

   propertiesNames Nullproperties;
   propertiesNames properties;
   
   std::vector<std::string> classNames={
      "classVanilla",
      "classTemplateVanilla<char>",
      "classTransientMember",
      "classTestAutoselect",
      "classAutoselected",
      "classWithAttributes",
      "classAutoselectedFromTemplateElaborate1",
      "classAutoselectedFromTemplateElaborate2",
      "classRemoveTemplateArgs<float,bool>",
      "classRemoveTemplateArgs<testNs::D>",
      "testNs::classRemoveTemplateArgs2<float*>",
      "testNs::classRemoveTemplateArgs2<float*,int,classVanilla>",
      "testNs::classRemoveTemplateArgs2<int*>",
      "testNs::classRemoveTemplateArgs2<int*,int,classVanilla>",
      "testNs::classRemoveTemplateArgs2<classVanilla>",
      "testNs::classRemoveTemplateArgs2<classVanilla,int >",
      "testNs::classRemoveTemplateArgs2<classVanilla,int, classVanilla >",
      "testNs::classRemoveTemplateArgs2<classRemoveTemplateArgs<classAutoselected> >",
      "testNs::classRemoveTemplateArgs2<testNs::D>",
      "A<B<double,double>,int,float >",
      "A<B<double>,int,float >", 
      "C<char>",
      "C<char,int,3>",
      "C<C<char>,C<char,C<C<char,int>,int>,3>>",
      "C<C<C<C<C<char>,C<char,C<C<char,int>,int>,3>>>,C<char,C<C<char,int>,int>,3>>,C<char,C<C<char,int>,int>,3>>",
      "myVector<C<char>>",
      "myVector<C<char,int>>",
      "myVector<C<char,int,3>>",
      "myVector<float>",
      "myVector<myVector<myVector<myVector<float>>>>",  
      "myVector<float,myAllocator<float>>",
      "classTemplateElaborate<char>"
   };

   // Start the tests
   for (auto& className : classNames)
      printClassInfo(className,Nullproperties,false);
   
   // Now some plain name checking
   for (auto& className : classNames)
      printNames(className);

   return 0;
}
JNIEXPORT jstring JNICALL Java_com_max2idea_android_limbo_jni_VMExecutor_dnschangeaddr(
		JNIEnv* env, jobject thiz) {
	char res_msg[MSG_BUFSIZE + 1] = { 0 };

	jclass c = (*env)->GetObjectClass(env, thiz);
	jfieldID fid = (*env)->GetFieldID(env, c, "dns_addr", "Ljava/lang/String;");
	jstring jdns_addr = (*env)->GetObjectField(env, thiz, fid);
	const char * dns_addr_str = NULL;
	if (jdns_addr != NULL)
		dns_addr_str = (*env)->GetStringUTFChars(env, jdns_addr, 0);

	fid = (*env)->GetFieldID(env, c, "libqemu", "Ljava/lang/String;");
	jstring jlib_path = (*env)->GetObjectField(env, thiz, fid);
	const char * lib_path_str = NULL;
	if (jlib_path != NULL)
		lib_path_str = (*env)->GetStringUTFChars(env, jlib_path, 0);

//    LOGV("Attempting to set DNS: %s\n",dns_addr_str);
	typedef void (*set_dns_addr_str_t)();
	dlerror();
	//LOAD LIB
	if (handle == NULL) {
		loadLib(lib_path_str);
	}

	if (!handle) {
		sprintf(res_msg, "%s: Error opening lib: %s :%s",
				__func__, lib_path_str, dlerror());
		LOGV(res_msg);
		return (*env)->NewStringUTF(env, res_msg);
	}
	dlerror();
	set_dns_addr_str_t set_dns_addr_str = (set_dns_addr_str_t) dlsym(handle,
			"set_dns_addr_str");
	const char *dlsym_error = dlerror();
	if (dlsym_error) {
		LOGV("Cannot load symbol 'set_dns_addr_str': %s\n", dlsym_error);
//        dlclose(handle);
//        handle = NULL;
		return (*env)->NewStringUTF(env, res_msg);
	}

	set_dns_addr_str(dns_addr_str);

//    sprintf(res_msg, "DNS Address Changed to: %s", dns_addr_str);
	LOGV(res_msg);

	return (*env)->NewStringUTF(env, res_msg);
}
dpBinary* dpLoader::load(const char *path)
{
    size_t len = strlen(path);
    if(len>=4) {
        if     (_stricmp(&path[len-4], ".obj")==0) {
            return loadObj(path);
        }
        else if(_stricmp(&path[len-4], ".lib")==0) {
            return loadLib(path);
        }
        else if(_stricmp(&path[len-4], ".dll")==0 || _stricmp(&path[len-4], ".exe")==0) {
            return loadDll(path);
        }
    }
    dpPrintError("unrecognized file %s\n", path);
    return nullptr;
}
Example #7
0
Plugin::Plugin(const LXQt::PluginInfo &desktopFile, LXQt::Settings *settings, const QString &settingsGroup, LXQtPanel *panel) :
    QFrame(panel),
    mDesktopFile(desktopFile),
    mPluginLoader(0),
    mPlugin(0),
    mPluginWidget(0),
    mAlignment(AlignLeft),
    mPanel(panel)
{
    mSettings = PluginSettingsFactory::create(settings, settingsGroup);
    connect(mSettings, SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));

    setWindowTitle(desktopFile.name());
    mName = desktopFile.name();

    QStringList dirs;
    dirs << QProcessEnvironment::systemEnvironment().value("LXQTPANEL_PLUGIN_PATH").split(":");
    dirs << PLUGIN_DIR;

    bool found = false;
    if(ILXQtPanelPluginLibrary const * pluginLib = findStaticPlugin(desktopFile.id()))
    {
        // this is a static plugin
        found = true;
        loadLib(pluginLib);
    }
    else {
        // this plugin is a dynamically loadable module
        QString baseName = QString("lib%1.so").arg(desktopFile.id());
        foreach(QString dirName, dirs)
        {
            QFileInfo fi(QDir(dirName), baseName);
            if (fi.exists())
            {
                found = true;
                if (loadModule(fi.absoluteFilePath()))
                    break;
            }
        }
    }
Example #8
0
// 0 means no opencl, 1 means opencl
int clrInit() {
	int ret = 0;
	
#ifdef _WIN32
	const char *libname = "OpenCL.dll";
#else
	const char *libname = "libOpenCL.so";
#endif

	if((ret = loadLib(libname))) {
		if(ret == -3) // No OpenCL
			return 0;
		else
			return ret;
	}

	isCL = 1;
	
	// TODO: optimize by loading all functions here?

	return 0;
}
Example #9
0
Plugin::Plugin(const LxQt::PluginInfo &desktopFile, const QString &settingsFile, const QString &settingsGroup, LxQtPanel *panel) :
    QFrame(panel),
    mDesktopFile(desktopFile),
    mPluginLoader(0),
    mPlugin(0),
    mPluginWidget(0),
    mAlignment(AlignLeft),
    mSettingsGroup(settingsGroup),
    mPanel(panel)
{

    mSettings = new LxQt::Settings(settingsFile, QSettings::IniFormat, this);
    connect(mSettings, SIGNAL(settingsChanged()), this, SLOT(settingsChanged()));
    mSettings->beginGroup(settingsGroup);

    mSettingsHash = calcSettingsHash();

    setWindowTitle(desktopFile.name());
    mName = desktopFile.name();

    QStringList dirs;
    dirs << QProcessEnvironment::systemEnvironment().value("LXQTPANEL_PLUGIN_PATH").split(":");
    dirs << PLUGIN_DIR;

    QString baseName = QString("lib%1.so").arg(desktopFile.id());
    bool found = false;
    foreach(QString dirName, dirs)
    {
        QFileInfo fi(QDir(dirName), baseName);

        if (fi.exists())
        {
            found = true;
            if (loadLib(fi.absoluteFilePath()))
                break;
        }
    }
Example #10
0
/* XLibraryLoad: return 0 on success, ~0 on failure */
static int
XLibraryLoad (const char *dllName, char *errBuf, int errBufSize)
{
  char *errMsg;
  const char *symName;
  int rc, elen, cl;
  char *ebuf;

  if (isLoaded)
    return 0;
  h = loadLib (dllName, &errMsg);
  if (NULL == h) {
    if (NULL != errBuf) {
      elen = errBufSize;  ebuf = errBuf;
      rc = sprintf (ebuf, "%.*s", elen, "Could not load shared library ");
      elen -= rc;  ebuf+= rc;
      rc = sprintf (ebuf, "%.*s", elen, dllName);
      elen -= rc;  ebuf+= rc;
      rc = sprintf (ebuf, "%.*s", elen, ": ");
      elen -= rc;  ebuf+= rc;
      rc = sprintf (ebuf, "%.*s", elen, errMsg);
      elen -= rc;  ebuf+= rc;
      errBuf[errBufSize-1] = '\0';
    }
    return 1;
  }
  else {
     /* printf ("Loaded shared library %s successfully\n", dllName); */
    if (errBuf && errBufSize)
      errBuf[0] = '\0';
  }

  LOADIT(gevXCreate, "gevXCreate");
  LOADIT(gevXCreateD, "CgevXCreateD");
  LOADIT(gevXFree, "gevXFree");
  LOADIT(gevXCheck, "CgevXCheck");
  LOADIT(gevXAPIVersion, "CgevXAPIVersion");

  if (!gevXAPIVersion(6,errBuf,&cl))
    return 1;


#define CheckAndLoad(f,nargs,prefix) \
  if (!gevXCheck(#f,nargs,s,errBuf)) \
    f = &d_##f; \
  else { \
    LOADIT(f,prefix #f); \
  }
  {int s[]={0,59,15,1}; CheckAndLoad(gevRegisterWriteCallback,3,""); }
  {int s[]={0,1,1,1,1}; CheckAndLoad(gevCompleteEnvironment,4,""); }
  {int s[]={3,11}; CheckAndLoad(gevInitEnvironmentLegacy,1,"C"); }
  {int s[]={15,3,11,15,11,15,59,1,2}; CheckAndLoad(gevSwitchLogStat,8,"C"); }
  {int s[]={1}; CheckAndLoad(gevGetLShandle,0,""); }
  {int s[]={15,2}; CheckAndLoad(gevRestoreLogStat,1,""); }
  {int s[]={15,2}; CheckAndLoad(gevRestoreLogStatRewrite,1,""); }
  {int s[]={0,11}; CheckAndLoad(gevLog,1,"C"); }
  {int s[]={0,9}; CheckAndLoad(gevLogPChar,1,""); }
  {int s[]={0,11}; CheckAndLoad(gevStat,1,"C"); }
  {int s[]={0,11}; CheckAndLoad(gevStatC,1,"C"); }
  {int s[]={0,9}; CheckAndLoad(gevStatPChar,1,""); }
  {int s[]={0,11}; CheckAndLoad(gevStatAudit,1,"C"); }
  {int s[]={0}; CheckAndLoad(gevStatCon,0,""); }
  {int s[]={0}; CheckAndLoad(gevStatCoff,0,""); }
  {int s[]={0}; CheckAndLoad(gevStatEOF,0,""); }
  {int s[]={0}; CheckAndLoad(gevStatSysout,0,""); }
  {int s[]={0,3,11}; CheckAndLoad(gevStatAddE,2,"C"); }
  {int s[]={0,3,11}; CheckAndLoad(gevStatAddV,2,"C"); }
  {int s[]={0,3,3,11}; CheckAndLoad(gevStatAddJ,3,"C"); }
  {int s[]={0}; CheckAndLoad(gevStatEject,0,""); }
  {int s[]={0,18}; CheckAndLoad(gevStatEdit,1,""); }
  {int s[]={0,11,3,11}; CheckAndLoad(gevStatE,3,"C"); }
  {int s[]={0,11,3,11}; CheckAndLoad(gevStatV,3,"C"); }
  {int s[]={0}; CheckAndLoad(gevStatT,0,""); }
  {int s[]={0,11}; CheckAndLoad(gevStatA,1,"C"); }
  {int s[]={0,11}; CheckAndLoad(gevStatB,1,"C"); }
  {int s[]={0,11}; CheckAndLoad(gevLogStat,1,"C"); }
  {int s[]={0,11}; CheckAndLoad(gevLogStatNoC,1,"C"); }
  {int s[]={0,9}; CheckAndLoad(gevLogStatPChar,1,""); }
  {int s[]={0}; CheckAndLoad(gevLogStatFlush,0,""); }
  {int s[]={12,11}; CheckAndLoad(gevGetAnchor,1,"C"); }
  {int s[]={3,11,12}; CheckAndLoad(gevStatAppend,2,"C"); }
  {int s[]={3,11,12}; CheckAndLoad(gevGetSlvExeInfo,2,"C"); }
  {int s[]={3,11,12,12,4}; CheckAndLoad(gevGetSlvLibInfo,4,"C"); }
  {int s[]={3,3,11,20}; CheckAndLoad(gevCapabilityCheck,3,"C"); }
  {int s[]={3}; CheckAndLoad(gevNumSolvers,0,""); }
  {int s[]={12,3}; CheckAndLoad(gevGetSolver,1,"C"); }
  {int s[]={12,3}; CheckAndLoad(gevGetSolverDefault,1,"C"); }
  {int s[]={3,11}; CheckAndLoad(gevSolver2Id,1,"C"); }
  {int s[]={12,3}; CheckAndLoad(gevId2Solver,1,"C"); }
  {int s[]={12}; CheckAndLoad(gevCallSolverNextGridDir,0,"C"); }
  {int s[]={3,1,11,11,3,3,11,11,13,3,3,13,13,2,12}; CheckAndLoad(gevCallSolver,14,"C"); }
  {int s[]={3,1}; CheckAndLoad(gevCallSolverHandleStatus,1,""); }
  {int s[]={3,2}; CheckAndLoad(gevCallSolverHandleDelete,1,""); }
  {int s[]={3,2,1}; CheckAndLoad(gevCallSolverHandleCollect,2,""); }
  {int s[]={3,11}; CheckAndLoad(gevGetIntOpt,1,"C"); }
  {int s[]={13,11}; CheckAndLoad(gevGetDblOpt,1,"C"); }
  {int s[]={12,11}; CheckAndLoad(gevGetStrOpt,1,"C"); }
  {int s[]={0,11,3}; CheckAndLoad(gevSetIntOpt,2,"C"); }
  {int s[]={0,11,13}; CheckAndLoad(gevSetDblOpt,2,"C"); }
  {int s[]={0,11,11}; CheckAndLoad(gevSetStrOpt,2,"C"); }
  {int s[]={0,1}; CheckAndLoad(gevSynchronizeOpt,1,""); }
  {int s[]={13}; CheckAndLoad(gevTimeJNow,0,""); }
  {int s[]={13}; CheckAndLoad(gevTimeDiff,0,""); }
  {int s[]={13}; CheckAndLoad(gevTimeDiffStart,0,""); }
  {int s[]={0}; CheckAndLoad(gevTimeSetStart,0,""); }
  {int s[]={0}; CheckAndLoad(gevTerminateUninstall,0,""); }
  {int s[]={0}; CheckAndLoad(gevTerminateInstall,0,""); }
  {int s[]={0,1,1}; CheckAndLoad(gevTerminateSet,2,""); }
  {int s[]={15}; CheckAndLoad(gevTerminateGet,0,""); }
  {int s[]={0}; CheckAndLoad(gevTerminateClear,0,""); }
  {int s[]={0}; CheckAndLoad(gevTerminateRaise,0,""); }
  {int s[]={0,2,2}; CheckAndLoad(gevTerminateGetHandler,2,""); }
  {int s[]={12,11}; CheckAndLoad(gevGetScratchName,1,"C"); }
  {int s[]={3,11,1,21}; CheckAndLoad(gevWriteModelInstance,3,"C"); }
  {int s[]={3,2,1}; CheckAndLoad(gevInitJacLegacy,2,""); }
  {int s[]={0,1,3,8,3,8}; CheckAndLoad(gevSetColRowPermLegacy,5,""); }
  {int s[]={0,1,3,8,8}; CheckAndLoad(gevSetJacPermLegacy,4,""); }
  {int s[]={3,1,6}; CheckAndLoad(gevEvalNewPointLegacy,2,""); }
  {int s[]={3,1,3,6,22,6,21,21}; CheckAndLoad(gevEvalJacLegacy,7,""); }
  {int s[]={3,1,3,8,6,6,6,21,21}; CheckAndLoad(gevEvalJacLegacyX,8,""); }
  {int s[]={3,1,3}; CheckAndLoad(gevNextNLLegacy,2,""); }
  {int s[]={3,1,3}; CheckAndLoad(gevRowGms2SlvLegacy,2,""); }
  {int s[]={0,2}; CheckAndLoad(gevFreeJacLegacy,1,""); }
  {int s[]={1}; CheckAndLoad(gevGetALGX,0,""); }
  {int s[]={0,15}; CheckAndLoad(gevSkipIOLegacySet,1,""); }
  {int s[]={3}; CheckAndLoad(gevThreads,0,""); }

 return 0;

 symMissing:
  if (errBuf && errBufSize>0) {
    elen = errBufSize;  ebuf = errBuf;
    rc = sprintf (ebuf, "%.*s", elen, "Could not load symbol '");
    elen -= rc;  ebuf+= rc;
    rc = sprintf (ebuf, "%.*s", elen, symName);
    elen -= rc;  ebuf+= rc;
    rc = sprintf (ebuf, "%.*s", elen, "': ");
    elen -= rc;  ebuf+= rc;
    rc = sprintf (ebuf, "%.*s", elen, errMsg);
    elen -= rc;  ebuf+= rc;
    errBuf[errBufSize-1] = '\0';
    /* printf ("%s\n", errBuf); */
    return 2;
  }

 return 0;

} /* XLibraryLoad */
Example #11
0
void
phhijing(const int nevents = 10, const int outputnameindex = 0)
{ 
  TString temp = Form("phhijing_pp_%d.root",outputnameindex);
  //TString temp = Form("/phenix/scratch/xuq/Hijing/phhijing_dAu_%d.root",outputnameindex);
  //TString temp = Form("./phhijing_He3Au_%d.root",outputnameindex);
  char *outputname = temp.Data();
  gSystem->Load("libfun4allfuncs.so");	// framework + reco modules
  gSystem->Load("libsimreco.so");	// framework + reco modules
  loadLib("/direct/phenix+plhf/xuq/phenix/MCgen/event_gen/lib/lib/libPHHijing");

  recoConsts *rc = recoConsts::instance();
  rc->set_IntFlag("RUNNUMBER",0);

  /////////////////////////////////////////////////////////////////
  //  Server...
  Fun4AllServer *se = Fun4AllServer::instance();
  se->Verbosity(0);

  /////////////////////////////////////////////////////////////////
  //  Reconstruction Modules...
  
  SubsysReco *sync = new SyncSimreco();
  se->registerSubsystem(sync);

  PHHijing* ss = new PHHijing();
  //  ss->SetSeed(99);
  //ss->SetOscarOut("pythia.osc");	// Set this to write to an oscar file
  //ss->SetSeed(1999);			// Set your own seed, otherwise, defaults to seed = time

  se->registerSubsystem(ss);

  // Example: Turn off all B and D decays
/*
  ss->SetDecay(411,0);
  ss->SetDecay(-411,0);
  ss->SetDecay(421,0);
  ss->SetDecay(-421,0);
  ss->SetDecay(431,0);
  ss->SetDecay(-431,0);
  
  ss->SetDecay(511,0);
  ss->SetDecay(-511,0);
  ss->SetDecay(521,0);
  ss->SetDecay(-521,0);
  ss->SetDecay(531,0);
  ss->SetDecay(-531,0);
*/

  //** Here you could put a module to trigger on selected events
  //** Select only one of the trigger types below
  //PHPyTrigger *phpytrigger = new PHPyTrigger();
  //phpytrigger->SetTrigger( PHPyTrigger::CHIC_MUONARM );
  //phpytrigger->SetTrigger( PHPyTrigger::PI0_CENTARM );
  //phpytrigger->SetEThreshold( 2.0 );
  //se->registerSubsystem(phpytrigger);
  //PHPyTrigger* trigger = new PHFvtxTrigger();
  //se->registerSubsystem(trigger);

  Fun4AllDummyInputManager *in1 = new Fun4AllDummyInputManager("DSTin1", "DST");
  se->registerInputManager(in1);

  TString OUTPUT = outputname;
  Fun4AllDstOutputManager *dst_output_mgr  = new Fun4AllDstOutputManager("PHHIJING",OUTPUT.Data());
  dst_output_mgr->AddNode("Sync");
  dst_output_mgr->AddNode("PHHijingHeader");
  dst_output_mgr->AddNode("PHHijing");
  se->registerOutputManager(dst_output_mgr);

  se->run(nevents);  // run over all events
  se->End();
}
Example #12
0
void InfoLoader::run()
{
    QFile htmlfile("://Qt_info.html");
    htmlfile.open(QIODevice::ReadOnly);
    html = htmlfile.readAll();
//    QString loadinghtml = html;
//    loadinghtml.replace("__SECTIONTEMPLATE__", "Please wait, reading data");
//    ui->webView->setHtml(loadinghtml,QUrl("qrc:/"));

    QString key = "Qt version";
    QString value = qVersion();
    QStringList valuelist;

    qDebug() << key << value ;

    addToTemplate(key, value);

#if QT_VERSION >= 0x050000
    addToTemplate("Platform", qApp->platformName());
#endif

    emit newInfoAvailable("Checking build date...");
    key = "Qt build";
    value = QLibraryInfo::buildDate().toString()+ ", ";
#if QT_VERSION < 0x050000
    value += QLibraryInfo::buildKey() + ", ";
#endif
    value += QLibraryInfo::licensee();
    addToTemplate(key, value);

    emit newInfoAvailable("Checking country/language...");
    key = "Country";
    QLocale defaultlocale;
    value = QLocale::countryToString(defaultlocale.country());
    addToTemplate(key, value);

    key = "Language";
    value = QLocale::languageToString(defaultlocale.language()) + " (" + defaultlocale.name() + ")";
    addToTemplate(key, value);

    emit newInfoAvailable("Checking Qt modules...");
    key = "Qt modules";
    value = "";
    QStringList qtlibs;
    QStringList qtmobilitylibs;

    qtlibs << "Qt3Support";
    qtlibs << "QAxContainer";
    qtlibs << "QAxServer";
    qtlibs << "QtCLucene";
    qtlibs << "QtCore";
    qtlibs << "QtDBus";
    qtlibs << "QtDeclarative";           // 4.7
    qtlibs << "QtDesignerComponents";
    qtlibs << "QtDesigner";
    qtlibs << "QtGui";
    qtlibs << "QtHelp";
    qtlibs << "QtMultimedia";
    qtlibs << "QtMaemo5";                // 4.6
    qtlibs << "phonon";
    qtlibs << "QtNetwork";               // includes QtBearer starting w 4.7
    qtlibs << "QtOpenGL";
    qtlibs << "QtOpenVG";                // 4.6
    qtlibs << "QtScript";
    qtlibs << "QtScriptTools";
    qtlibs << "QtSql";
    qtlibs << "QtSvg";
    qtlibs << "QtTest";
    qtlibs << "QtUiTools";
    qtlibs << "QtWebKit";
    qtlibs << "QtXmlPatterns";
    qtlibs << "QtXml";

    qtlibs << "Qt5AndroidExtras";         // 5.2
    qtlibs << "Qt5Bluetooth";             // 5.2
    qtlibs << "Qt5CLucene";
    qtlibs << "Qt5Concurrent";
    qtlibs << "Qt5Core";
    qtlibs << "Qt5Declarative";
    qtlibs << "Qt5DBus";
    qtlibs << "Qt5Designer";
    qtlibs << "Qt5DesignerComponents";
    qtlibs << "Qt5Gui";
    qtlibs << "Qt5Help";
    qtlibs << "Qt5MacExtras";             // 5.2
    qtlibs << "Qt5Multimedia";
    qtlibs << "Qt5MultimediaQuick_p";
    qtlibs << "Qt5MultimediaWidgets";
    qtlibs << "Qt5Network";
    qtlibs << "Qt5Nfc";                   // 5.2
    qtlibs << "Qt5OpenGL";
    qtlibs << "Qt5Positioning";           // 5.2
    qtlibs << "Qt5PrintSupport";
    qtlibs << "Qt5Qml";
    qtlibs << "Qt5Quick";
    qtlibs << "Qt5QuickParticles";
    qtlibs << "Qt5QuickTest";
    qtlibs << "Qt5SerialPort";            // 5.1
    qtlibs << "Qt5Script";
    qtlibs << "Qt5ScriptTools";
    qtlibs << "Qt5Sensors";               // 5.1
    qtlibs << "Qt5Sql";
    qtlibs << "Qt5Svg";
    qtlibs << "Qt5Test";
    qtlibs << "Qt5V8";
    qtlibs << "Qt5WebKit";
    qtlibs << "Qt5WebKitWidgets";
    qtlibs << "Qt5Widgets";
    qtlibs << "Qt5WinExtras";             // 5.2
    qtlibs << "Qt5X11Extras";             // 5.1
    qtlibs << "Qt5Xml";
    qtlibs << "Qt5XmlPatterns";


    qtmobilitylibs << "QtBearer";          // 1.0.x ONLY
    qtmobilitylibs << "QtConnectivity";    // 1.2
    qtmobilitylibs << "QtContacts";
    qtmobilitylibs << "QtFeedback";        // 1.1
    qtmobilitylibs << "QtGallery";         // 1.1
    qtmobilitylibs << "QtLocation";
    qtmobilitylibs << "QtMultimediaKit";
    qtmobilitylibs << "QtSensors";
    qtmobilitylibs << "QtServiceFramework";
    qtmobilitylibs << "QtSystemInfo";
    qtmobilitylibs << "QtOrganizer";       // 1.1
    qtmobilitylibs << "QtPublishSubscribe";
    qtmobilitylibs << "QtVersitOrganizer"; // 1.1
    qtmobilitylibs << "QtVersit";
    qtlibs.append(qtmobilitylibs);

    int progressTotalSteps = qtlibs.count() + 14; // 14 = number of loadInfos we're going to do later. #automateme
    int progressStep = 0;

    foreach(QString libname, qtlibs) {
        emit newInfoAvailable(QString("Locating %0...").arg(libname));
        QString libfilename = loadLib(libname);
        if (!libfilename.isEmpty()) {
            emit newInfoAvailable(QString("Found as %0 ").arg(libfilename));
            value += libname.replace("lib", "") + " ";
            installedlibs << libname;
        } else {
            emit newInfoAvailable(QString("Not found"));
        }
        emit progressChange((int)(++progressStep*100.0/(float)progressTotalSteps));
    }
JNIEXPORT jstring JNICALL Java_com_max2idea_android_limbo_jni_VMExecutor_start(
		JNIEnv* env, jobject thiz) {
	int res;
	char res_msg[MSG_BUFSIZE + 1] = { 0 };

	if (started) {
		sprintf(res_msg, "VM Already started");
		LOGV(res_msg);
		return (*env)->NewStringUTF(env, res_msg);
	}

	LOGV("***************** INIT LIMBO ************************");

	/* Read the member values from the Java Object
	 */
	jclass c = (*env)->GetObjectClass(env, thiz);
	jfieldID fid = (*env)->GetFieldID(env, c, "cpu", "Ljava/lang/String;");
	jstring jcpu = (*env)->GetObjectField(env, thiz, fid);
	const char *cpu_str = NULL;
	if (jcpu != NULL)
		cpu_str = (*env)->GetStringUTFChars(env, jcpu, 0);

	LOGV("CPU= %s", cpu_str);

	fid = (*env)->GetFieldID(env, c, "machine_type", "Ljava/lang/String;");
	jstring jmachine_type = (*env)->GetObjectField(env, thiz, fid);
	const char *machine_type_str = NULL;
	if (jmachine_type != NULL)
		machine_type_str = (*env)->GetStringUTFChars(env, jmachine_type, 0);

	LOGV("Machine Type= %s", machine_type_str);

	fid = (*env)->GetFieldID(env, c, "memory", "I");
	int mem = (*env)->GetIntField(env, thiz, fid);

	LOGV("MEM= %d", mem);

	fid = (*env)->GetFieldID(env, c, "cpuNum", "I");
	int cpuNum = (*env)->GetIntField(env, thiz, fid);

	LOGV("CPU Num= %d", cpuNum);

	fid = (*env)->GetFieldID(env, c, "disableacpi", "I");
	int disableacpi = (*env)->GetIntField(env, thiz, fid);

	fid = (*env)->GetFieldID(env, c, "disablehpet", "I");
	int disablehpet = (*env)->GetIntField(env, thiz, fid);

	fid = (*env)->GetFieldID(env, c, "usbmouse", "I");
	int usbmouse = (*env)->GetIntField(env, thiz, fid);

	fid = (*env)->GetFieldID(env, c, "enableqmp", "I");
	int enableqmp = (*env)->GetIntField(env, thiz, fid);

	fid = (*env)->GetFieldID(env, c, "enablevnc", "I");
	int enablevnc = (*env)->GetIntField(env, thiz, fid);

	fid = (*env)->GetFieldID(env, c, "vnc_allow_external", "I");
	int vnc_allow_external = (*env)->GetIntField(env, thiz, fid);

	LOGV("vnc_allow_external= %d", vnc_allow_external);

	fid = (*env)->GetFieldID(env, c, "hda_img_path", "Ljava/lang/String;");
	jstring jhda_img_path = (*env)->GetObjectField(env, thiz, fid);
	const char * hda_img_path_str = NULL;
	if (jhda_img_path != NULL)
		hda_img_path_str = (*env)->GetStringUTFChars(env, jhda_img_path, 0);
	LOGV("HDA= %s", hda_img_path_str);

	fid = (*env)->GetFieldID(env, c, "hdb_img_path", "Ljava/lang/String;");
	jstring jhdb_img_path = (*env)->GetObjectField(env, thiz, fid);
	const char * hdb_img_path_str = NULL;
	if (jhdb_img_path != NULL)
		hdb_img_path_str = (*env)->GetStringUTFChars(env, jhdb_img_path, 0);

	fid = (*env)->GetFieldID(env, c, "cd_iso_path", "Ljava/lang/String;");
	jstring jcdrom_iso_path = (*env)->GetObjectField(env, thiz, fid);
	const char * cdrom_iso_path_str = NULL;
	if (jcdrom_iso_path != NULL)
		cdrom_iso_path_str = (*env)->GetStringUTFChars(env, jcdrom_iso_path, 0);

	fid = (*env)->GetFieldID(env, c, "fda_img_path", "Ljava/lang/String;");
	jstring jfda_img_path = (*env)->GetObjectField(env, thiz, fid);
	const char * fda_img_path_str = NULL;
	if (jfda_img_path != NULL)
		fda_img_path_str = (*env)->GetStringUTFChars(env, jfda_img_path, 0);

	fid = (*env)->GetFieldID(env, c, "fdb_img_path", "Ljava/lang/String;");
	jstring jfdb_img_path = (*env)->GetObjectField(env, thiz, fid);
	const char * fdb_img_path_str = NULL;
	if (jfdb_img_path != NULL)
		fdb_img_path_str = (*env)->GetStringUTFChars(env, jfdb_img_path, 0);

	fid = (*env)->GetFieldID(env, c, "bootdevice", "Ljava/lang/String;");
	jstring jboot_dev = (*env)->GetObjectField(env, thiz, fid);
	const char * boot_dev_str = NULL;
	if (jboot_dev != NULL)
		boot_dev_str = (*env)->GetStringUTFChars(env, jboot_dev, 0);

	fid = (*env)->GetFieldID(env, c, "net_cfg", "Ljava/lang/String;");
	jstring jnet = (*env)->GetObjectField(env, thiz, fid);
	const char * net_str = NULL;
	if (jnet != NULL)
		net_str = (*env)->GetStringUTFChars(env, jnet, 0);

	fid = (*env)->GetFieldID(env, c, "nic_driver", "Ljava/lang/String;");
	jstring jnic_driver = (*env)->GetObjectField(env, thiz, fid);
	const char * nic_driver_str = NULL;
	if (jnic_driver != NULL)
		nic_driver_str = (*env)->GetStringUTFChars(env, jnic_driver, 0);

	fid = (*env)->GetFieldID(env, c, "libqemu", "Ljava/lang/String;");
	jstring jlib_path = (*env)->GetObjectField(env, thiz, fid);
	const char * lib_path_str = NULL;
	if (jlib_path != NULL)
		lib_path_str = (*env)->GetStringUTFChars(env, jlib_path, 0);

	fid = (*env)->GetFieldID(env, c, "vga_type", "Ljava/lang/String;");
	jstring jvga_type = (*env)->GetObjectField(env, thiz, fid);
	const char * vga_type_str = NULL;
	if (jvga_type != NULL)
		vga_type_str = (*env)->GetStringUTFChars(env, jvga_type, 0);

	fid = (*env)->GetFieldID(env, c, "hd_cache", "Ljava/lang/String;");
	jstring jhd_cache = (*env)->GetObjectField(env, thiz, fid);
	const char * hd_cache_str = NULL;
	if (jhd_cache != NULL)
		hd_cache_str = (*env)->GetStringUTFChars(env, jhd_cache, 0);

	fid = (*env)->GetFieldID(env, c, "sound_card", "Ljava/lang/String;");
	jstring jsound_card = (*env)->GetObjectField(env, thiz, fid);
	const char * sound_card_str = NULL;
	if (jsound_card != NULL)
		sound_card_str = (*env)->GetStringUTFChars(env, jsound_card, 0);

	fid = (*env)->GetFieldID(env, c, "snapshot_name", "Ljava/lang/String;");
	jstring jsnapshot_name = (*env)->GetObjectField(env, thiz, fid);
	const char * snapshot_name_str = NULL;
	if (jsnapshot_name != NULL)
		snapshot_name_str = (*env)->GetStringUTFChars(env, jsnapshot_name, 0);

	fid = (*env)->GetFieldID(env, c, "vnc_passwd", "Ljava/lang/String;");
	jstring jvnc_passwd = (*env)->GetObjectField(env, thiz, fid);
	const char * vnc_passwd_str = NULL;
	if (jvnc_passwd != NULL)
		vnc_passwd_str = (*env)->GetStringUTFChars(env, jvnc_passwd, 0);

	fid = (*env)->GetFieldID(env, c, "base_dir", "Ljava/lang/String;");
	jstring jbase_dir = (*env)->GetObjectField(env, thiz, fid);
	const char * base_dir_str = NULL;
	if (jbase_dir != NULL)
		base_dir_str = (*env)->GetStringUTFChars(env, jbase_dir, 0);

	fid = (*env)->GetFieldID(env, c, "dns_addr", "Ljava/lang/String;");
	jstring jdns_addr = (*env)->GetObjectField(env, thiz, fid);
	const char * dns_addr_str = NULL;
	if (jdns_addr != NULL)
		dns_addr_str = (*env)->GetStringUTFChars(env, jdns_addr, 0);

	fid = (*env)->GetFieldID(env, c, "kernel", "Ljava/lang/String;");
	jstring jkernel = (*env)->GetObjectField(env, thiz, fid);
	const char * kernel_str = NULL;
	if (jkernel != NULL)
		kernel_str = (*env)->GetStringUTFChars(env, jkernel, 0);

	fid = (*env)->GetFieldID(env, c, "arch", "Ljava/lang/String;");
	jstring jarch = (*env)->GetObjectField(env, thiz, fid);
	const char * arch_str = NULL;
	if (jarch != NULL)
		arch_str = (*env)->GetStringUTFChars(env, jarch, 0);

	fid = (*env)->GetFieldID(env, c, "append", "Ljava/lang/String;");
	jstring jappend = (*env)->GetObjectField(env, thiz, fid);
	const char * append_str = NULL;
	if (jappend != NULL)
		append_str = (*env)->GetStringUTFChars(env, jappend, 0);

	fid = (*env)->GetFieldID(env, c, "initrd", "Ljava/lang/String;");
	jstring jinitrd = (*env)->GetObjectField(env, thiz, fid);
	const char * initrd_str = NULL;
	if (jinitrd != NULL)
		initrd_str = (*env)->GetStringUTFChars(env, jinitrd, 0);

	fid = (*env)->GetFieldID(env, c, "aiomaxthreads", "I");
	int aiomaxthreads = (*env)->GetIntField(env, thiz, fid);

	LOGV("Finished getting Java fields");

	int params = 4;

	if (cpu_str != NULL && strcmp(cpu_str, "Default") != 0) {
		params += 2;
	}

	if (hda_img_path_str != NULL) {
		params += 2;
	}
	if (hdb_img_path_str != NULL) {
		params += 2;
	}
	//if (cdrom_iso_path_str != NULL) { //Always define a cdrom drive
		params += 2;
	//}
	//if (fda_img_path_str != NULL) { //Always define a diskette drive
	params += 2;
	//}
//	if (fdb_img_path_str != NULL) {//Always define a diskette drive
		params += 2;
//	}
	if (net_str != NULL) {
		params += 2;
	}

	if (nic_driver_str != NULL) {
		LOGV("Adding params for NIC driver");
		params += 2;
	}
	if (boot_dev_str != NULL) {
		params += 2;
	}
	if (vga_type_str != NULL && strncmp(arch_str, "arm", 3) != 0) {
		params += 2;
	}
	if (sound_card_str != NULL || (strncmp(arch_str, "arm", 3) == 0)) {
		params += 2;
	}

	if (disableacpi) {
		params += 1;
	}

	if (disablehpet) {
		params += 1;
	}
	if (usbmouse) {
		params += 3;
	}

	if (snapshot_name_str != NULL && strcmp(snapshot_name_str, "") != 0) {
		params += 2;
	}
	if (enableqmp) {
		params += 1;
	}
	if (enablevnc) {
		params += 2;
	} else {
		//SDL needs keyboard layout
		params += 2; //For -k option
	}

	params += 2; // For CPU option
	params += 2; //For -smp option
	params += 2; //For -M option

	//MK TESTING
	//params +=2;
	//MK OUT

	if (strncmp(arch_str, "arm", 3) == 0) {
		if (kernel_str != NULL && strcmp(kernel_str, "") != 0)
			params += 2;
		if (initrd_str != NULL && strcmp(initrd_str, "") != 0)
			params += 2;
		if (append_str != NULL && strcmp(append_str, "") != 0)
			params += 2;
	}

	char mem_str[MAX_STRING_LEN] = "128";
	sprintf(mem_str, "%d", mem);

	char cpu_num_str[MAX_STRING_LEN] = "1";
	sprintf(cpu_num_str, "%d", cpuNum);

	int i = 0;
	LOGV("Params = %d", params);
	char ** argv = (char **) malloc(params * sizeof(*argv));
	for (i = 0; i < params; i++) {
		argv[i] = (char *) malloc(MAX_STRING_LEN * sizeof(char));
	}

	int param = 0;
	strcpy(argv[param++], lib_path_str);

	if (strncmp(arch_str, "arm", 3) == 0) {
		if (kernel_str != NULL && strcmp(kernel_str, "") != 0) {
			strcpy(argv[param++], "-kernel");
			strcpy(argv[param++], kernel_str);
		}

		if (initrd_str != NULL && strcmp(initrd_str, "") != 0) {
			strcpy(argv[param++], "-initrd");
			strcpy(argv[param++], initrd_str);
		}

		if (append_str != NULL && strcmp(append_str, "") != 0) {
			strcpy(argv[param++], "-append");
			strcpy(argv[param++], append_str);
		}
	}

	if (cpu_str != NULL && strncmp(cpu_str, "Default", 7) != 0) {
		strcpy(argv[param++], "-cpu");
		strcpy(argv[param++], cpu_str);
	}

	strcpy(argv[param++], "-m");
	strcpy(argv[param++], mem_str);

	strcpy(argv[param++], "-L");
	strcpy(argv[param++], base_dir_str);

	if (hda_img_path_str != NULL) {

		strcpy(argv[param++], "-hda");
		strcpy(argv[param++], hda_img_path_str);

//		strcpy(argv[param++], "-drive");
//		strcpy(argv[param], "file=");
//		strcat(argv[param], hda_img_path_str);
//		strcat(argv[param], ",index=0,media=disk");
//
//		if(strncmp(arch_str, "arm", 3) == 0){
//			strcat(argv[param], ",if=scsi");
////			strcat(argv[param], ",if=ide");
////			strcat(argv[param], ",if=sd");
//		}else {
//			strcat(argv[param], ",if=ide");
//		}
//
//		//        strcat(argv[param], ",if=scsi,bus=0,unit=6"); //scsi interface not working
//		strcat(argv[param], ",aio=threads");
//		if (hd_cache_str != NULL && strcmp(hd_cache_str, "default") != 0) {
//			strcat(argv[param], ",cache=");
//			strcat(argv[param++], hd_cache_str);
//		} else {
//			param++;
//		}
	}
	if (hdb_img_path_str != NULL) {
		strcpy(argv[param++], "-hdb");
		strcpy(argv[param++], hdb_img_path_str);

//		//MORE OPTIONS
//		strcpy(argv[param++], "-drive");
//		strcpy(argv[param], "file=");
//		strcat(argv[param], hdb_img_path_str);
//		strcat(argv[param], ",index=1,media=disk");
//
//		if(strncmp(arch_str, "arm", 3) == 0){
//			strcat(argv[param], ",if=scsi");
//			//			strcat(argv[param], ",if=ide");
////			strcat(argv[param], ",if=sd"); // Trying SD card for arm
//		}else {
//			strcat(argv[param], ",if=ide");
//		}
//		//        strcat(argv[param], ",if=scsi,bus=0,unit=7"); //scsi interface not working
//		strcat(argv[param], ",aio=threads");
//		if (hd_cache_str != NULL && strcmp(hd_cache_str, "default") != 0) {
//			strcat(argv[param], ",cache=");
//			strcat(argv[param++], hd_cache_str);
//		} else {
//			param++;
//		}
	}
	if (cdrom_iso_path_str != NULL) {
		LOGV("Adding CD");
		strcpy(argv[param++], "-cdrom");
		strcpy(argv[param++], cdrom_iso_path_str);
	} else {
		//empty cdrom
		strcpy(argv[param++], "-drive");
		strcpy(argv[param++], "index=2,media=cdrom");
	}
	if (fda_img_path_str != NULL) {
		LOGV("Adding FDA");
		strcpy(argv[param++], "-fda");
		strcpy(argv[param++], fda_img_path_str);
	} else {
		strcpy(argv[param++], "-drive"); //Always define floppy
		strcpy(argv[param++], "index=0,if=floppy");
	}
	if (fdb_img_path_str != NULL) { //Second floppy is optional
		LOGV("Adding FDB");
		strcpy(argv[param++], "-fdb");
		strcpy(argv[param++], fdb_img_path_str);
	} else {
		strcpy(argv[param++], "-drive"); //Always define floppy
		strcpy(argv[param++], "index=1,if=floppy");
	}

	if (vga_type_str != NULL && strncmp(arch_str, "arm", 3) != 0) {
		LOGV("Adding vga: %s", vga_type_str);
		strcpy(argv[param++], "-vga");
		strcpy(argv[param++], vga_type_str); //[std|cirrus|vmware|qxl|xenfb|none] //select video card type
	}

	if (boot_dev_str != NULL) {
		LOGV("Adding boot device: %s", boot_dev_str);
		strcpy(argv[param++], "-boot");
		strcpy(argv[param++], boot_dev_str);
	}

	if (net_str != NULL) {
		LOGV("Adding Net: %s", net_str);
		strcpy(argv[param++], "-net");
		if (strcmp(net_str, "user") == 0) {
			strcpy(argv[param], net_str);
		} else if (strcmp(net_str, "tap") == 0) {
			strcpy(argv[param], "tap,vlan=0,ifname=tap0,script=no");
		} else if (strcmp(net_str, "none") == 0) {
			strcpy(argv[param], "none");
		} else {
			LOGV("Unknown iface: %s", net_str);
			strcpy(argv[param], "none");
		}
		//FIXME: NOT WORKING setting DNS workaround below
//        LOGV("DNS=%s",dns_addr_str);
//        if(dns_addr_str!=NULL){
//        	strcat(argv[param], ",dns=");
//        	strcat(argv[param], dns_addr_str);
//        }
		param++;

	}

	if (nic_driver_str != NULL) {
		LOGV("Adding NIC: %s", nic_driver_str);
		strcpy(argv[param++], "-net");
		if (strncmp(arch_str, "arm", 3) == 0) {
			strcpy(argv[param], "nic");
			param++;
		} else if (strcmp(net_str, "user") == 0) {
			strcpy(argv[param], "nic,model=");
			strcat(argv[param++], nic_driver_str);
		} else if (strcmp(net_str, "tap") == 0) {
			strcpy(argv[param], "nic,vlan=0,model=");
			strcat(argv[param++], nic_driver_str);
		}
	}

	if (sound_card_str != NULL && strcmp(sound_card_str, "None") != 0) {
		LOGV("Adding Sound: %s", sound_card_str);
		strcpy(argv[param++], "-soundhw");
		strcpy(argv[param++], sound_card_str);
	}
	if (strncmp(arch_str, "arm", 3) == 0) {
		strcpy(argv[param++], "-soundhw");
		strcpy(argv[param++], "all");
	}

	if (snapshot_name_str != NULL && strcmp(snapshot_name_str, "") != 0) {
		LOGV("Adding snapshot: %s", snapshot_name_str);
		strcpy(argv[param++], "-loadvm");
		strcpy(argv[param++], snapshot_name_str);
	}

	if (usbmouse) {
		LOGV("Adding USB MOUSE");
		strcpy(argv[param++], "-usb");
		strcpy(argv[param++], "-usbdevice");
		strcpy(argv[param++], "tablet");
	}
	if (disableacpi) {
		LOGV("Disabling ACPI");
		strcpy(argv[param++], "-no-acpi"); //disable ACPI
	}
	if (disablehpet) {
		LOGV("Disabling HPET");
		strcpy(argv[param++], "-no-hpet"); //        disable HPET
	}

	if (enableqmp) { //Not working
		LOGV("Enable qmp server");
		strcpy(argv[param++], "-qmp tcp:0:4444,server"); //        disable HPET
	}

	//    strcpy(argv[param++], "-D");
	//    strcpy(argv[param++], "/sdcard/limbo/log.txt");
	//    strcpy(argv[param++], "-win2k-hack");     //use it when installing Windows 2000 to avoid a disk full bug
	//    strcpy(argv[param++], "--trace");
	//    strcpy(argv[param++], "events=/sdcard/limbo/tmp/events");
	//    strcpy(argv[param++], "--trace");
	//    strcpy(argv[param++], "file=/sdcard/limbo/tmp/trace");
	//    strcpy(argv[param++], "-nographic"); //DO NOT USE //      disable graphical output and redirect serial I/Os to console

	if (enablevnc) {
		LOGV("Enable VNC server");
		strcpy(argv[param++], "-vnc");
		if (vnc_allow_external) {
			strcpy(argv[param++], ":1,password");
			//TODO: Allow connections from External
			//this is still not secure
			// Use with x509 auth and TLS for encryption
		} else
			strcpy(argv[param++], "localhost:1"); // Allow all hosts to connect
	} else {
		LOGV("Disabling VNC server, using SDL instead");
		//SDL needs explicit keyboard layout
		strcpy(argv[param++], "-k");
		strcpy(argv[param++], "en-us");
	}

	strcpy(argv[param++], "-smp");
	strcpy(argv[param], "sockets=");
	strcat(argv[param], cpu_num_str);
	strcat(argv[param], ",cores=1");
	strcat(argv[param++], ",threads=1");

	strcpy(argv[param++], "-M");
	strcpy(argv[param++], machine_type_str);


	//MK TESTING
	//Not working under User mode
	//Redirect ports (SSH)
//	strcpy(argv[param++], "-redir");
//	strcpy(argv[param++], "5555::22");
	//MK OUT

	argv[param] = NULL;
	int argc = params - 1;
	for (i = 0; i < argc; i++) {
		LOGV("Arg(%d): %s", i, argv[i]);
	}

	LOGV("***************** INIT QEMU ************************");
	started = 1;
	LOGV("Starting VM...");

	//LOAD LIB
	if (handle == NULL) {
		loadLib(lib_path_str);
	}

	if (!handle) {
		sprintf(res_msg, "Error opening lib: %s :%s", lib_path_str, dlerror());
		LOGV(res_msg);
		return (*env)->NewStringUTF(env, res_msg);
	}

	//Set Max AIO Threads
	typedef void (*setAIOMaxThreads_t)();
	dlerror();
	setAIOMaxThreads_t setAIOMaxThreads = (setAIOMaxThreads_t) dlsym(handle,
			"setAIOMaxThreads");
	const char *dlsym_error1 = dlerror();
	if (dlsym_error1) {
		LOGV("Cannot load symbol 'setAIOMaxThreads': %s\n", dlsym_error1);
//		handle = NULL;
		return (*env)->NewStringUTF(env, res_msg);
	}
	LOGV("Attempt to change aiomaxthreads: %d", aiomaxthreads);
	setAIOMaxThreads(aiomaxthreads);

	//Set DNS
	typedef void (*set_dns_addr_str_t)();
	dlerror();
	set_dns_addr_str_t set_dns_addr_str = (set_dns_addr_str_t) dlsym(handle,
			"set_dns_addr_str");
	const char *dlsym_error2 = dlerror();
	if (dlsym_error2) {
		LOGV("Cannot load symbol 'set_dns_addr_str': %s\n", dlsym_error2);
//        dlclose(handle);
//        handle = NULL;
		return (*env)->NewStringUTF(env, res_msg);
	}

	set_dns_addr_str(dns_addr_str);

	LOGV("Loading symbol qemu_start...\n");
	typedef void (*qemu_start_t)();

	// reset errors
	dlerror();
	qemu_start_t qemu_start = (qemu_start_t) dlsym(handle, "qemu_start");
	const char *dlsym_error = dlerror();
	if (dlsym_error) {
		LOGV("Cannot load symbol 'qemu_start': %s\n", dlsym_error);
		dlclose(handle);
		handle = NULL;
		return (*env)->NewStringUTF(env, res_msg);
	}

	qemu_start(argc, argv, NULL);
	//UNLOAD LIB
	sprintf(res_msg, "Closing lib: %s", lib_path_str);
	LOGV(res_msg);
	dlclose(handle);
	handle = NULL;

	(*env)->ReleaseStringUTFChars(env, jcdrom_iso_path, cdrom_iso_path_str);

	/* Log and return a string of success or error message.
	 * This can be enhanced semantically with codes.
	 */
	sprintf(res_msg, "VM has shutdown");
	LOGV(res_msg);

	exit(1);

//    return (*env)->NewStringUTF(env, res_msg);
}