Ejemplo n.º 1
0
void FileUnit::save()
{
	auto loadMap = FileUtils::getInstance()->getValueMapFromFile(_path);
	if(!loadMap["exist"].isNull() && loadMap["exist"].asBool() == true)
	{
		PopPanel::getInstance()->confirm("saveConfirm","type:Text---text:"+ a2u("确定要覆盖当前存档吗?"),PromptPanel::TYPE_DONE_CANCEL,[=](){
			saveModel();
		},nullptr,true,true);
	}
	else
	{
		saveModel();
	}
	_view->runAction(Sequence::create(DelayTime::create(1),CallFunc::create([=](){updateView();}),nullptr));
}
Ejemplo n.º 2
0
void User::pushAchieve(ValueMap model)
{
	_achieves.push_back(model);

	ValueMap map = saveModel();
	FileUtils::getInstance()->writeToFile(map,_path);
}
Ejemplo n.º 3
0
void User::setShareRewardsLock(int index, int value)
{
	_shareRewardsLock[index] = value;

	auto node = PopPanel::getInstance()->hasPanelByName("shareAward");
	if(node != nullptr)
	{
		auto shareAwardPanel = dynamic_cast<ShareAwardPanel*>(node);
		shareAwardPanel->updateIntro();
	}

	// 坚持是否都获得
	bool open = false;
	for(int i = 0; i < 2; i++)
	{
		if(_shareRewardsLock[i] == 0)
		{
			open = true;
			break;
		}
	}
	if(open == false)
		setShareRewardOpen(false);

	// 保存
	ValueMap map = saveModel();
	FileUtils::getInstance()->writeToFile(map,_path);
}
Ejemplo n.º 4
0
void ldig_shrink(const std::string &modelpath) {
    cybozu::ldig::Model model;
    loadModel(model, modelpath);

    const size_t K = model.K;
    const size_t org_M = model.M;
    const size_t org_text_len = model.features.text().length();
    std::cout << "labels : " << K << std::endl;

    std::vector<size_t> summary = model.shrink();
    const size_t new_M = model.M;

    std::cout << "features : " << org_M << " => " << new_M << std::endl;
    std::cout << "feature text length : " << org_text_len << " => " << model.features.text().length() << std::endl;
    std::cout << "nonzero params";
    size_t nonzeros = 0;
    for (size_t k=0; k<=K; ++k) {
        std::cout << " " << k << ":" << summary[k];
        nonzeros += k * summary[k];
    }
    std::cout << std::endl;
    std::cout << "# of nonzeros : " << nonzeros << std::endl;
    std::cout << "density : " << (LdigFloat)nonzeros / (org_M * K) << " => " << (LdigFloat)nonzeros / (new_M * K) << std::endl;

    saveModel(model, modelpath);
}
Ejemplo n.º 5
0
void QWzmViewer::actionSave()
{
	int retVal = -1;
	if (!filename.isEmpty() && psModel)
	{
		QFileInfo fileInfo(filename);
		if (fileInfo.completeSuffix().compare(QString("wzm"), Qt::CaseInsensitive) == 0)
		{
			retVal = saveModel(filename.toAscii().constData(), psModel);
		}
		else if (fileInfo.completeSuffix().compare(QString("pie"), Qt::CaseInsensitive) == 0)
		{
			QPieExportDialog dialog;
			dialog.exec();
			if (dialog.result())
			{
				retVal = savePIE(filename.toAscii().constData(), psModel, dialog.getPieVersion(), dialog.getFlags());
			}
			else
			{
				retVal = 0;
			}
		}

		if (retVal != 0)
		{
			QMessageBox::warning(this, tr("Oops..."), "Could not save model", QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
		}
	}
}
Ejemplo n.º 6
0
void OSDocument::saveAs()
{
  QString filePath, defaultDir;

  if (!this->savePath().length()){
    defaultDir = QDir::homePath();
  }else{
    defaultDir = toQString(openstudio::toPath(this->savePath()).parent_path());
  }

  filePath = QFileDialog::getSaveFileName( this->mainWindow(),
                                           tr("Save"),
                                           defaultDir,
                                           tr("(*.osm)") );

  if( ! filePath.isEmpty() )
  {
    //scriptFolderListView()->saveOSArguments();

    // saves the model to modelTempDir / in.osm
    openstudio::path modelPath = saveModel(this->model(), toPath(filePath), toPath(m_modelTempDir));

    this->setSavePath(toQString(modelPath));

    // saves the run database, do before saveModelTempDir
    emit modelSaving(modelPath);

    // copies modelTempDir/in.osm to modelPath, copies all resources including run database
    saveModelTempDir(toPath(m_modelTempDir), modelPath);
    
    this->markAsUnmodified();
  }
}
Ejemplo n.º 7
0
void MainWindow::createActions()
{
	// file menu actions
	openModelAct = new QAction(QIcon("../images/open.png"), tr("&Open Model"), this);
	openModelAct->setShortcut(QKeySequence::New);
	openModelAct->setStatusTip(tr("open a mesh model"));
	connect(openModelAct, SIGNAL(triggered()), this, SLOT(openModel()));

	openTextureFileAct = new QAction(QIcon("../images/open.png"), tr("&Open Texture Image"), this);
	connect(openTextureFileAct, SIGNAL(triggered()), this, SLOT(openTextureImage()));

	openQuadFileAct = new QAction(QIcon("../images/open.png"), tr("&Open Quad File"), this);
	connect(openQuadFileAct, SIGNAL(triggered()), this, SLOT(openQuadFile()));

	saveModelAct = new QAction(QIcon("../images/save.png"), tr("&Save Model"), this);
	saveModelAct->setShortcut(QKeySequence::Save);
	saveModelAct->setStatusTip(tr("save this mesh model"));
	connect(saveModelAct, SIGNAL(triggered()), this, SLOT(saveModel()));

	saveAsBmpAct = new QAction(tr("Save as BMP"), this);
	connect(saveAsBmpAct, SIGNAL(triggered()), this, SLOT(saveAsBmp()));

	recentFileAct = new QAction(tr("Recent Files"), this);
	connect(recentFileAct, SIGNAL(triggered()), this, SLOT(recentFiles()));

	exitAct = new QAction(tr("E&xit"), this);
	exitAct->setShortcuts(QKeySequence::Quit);
	exitAct->setStatusTip(tr("Exit the application"));
	connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));


	// toolbar menu actions
	toolBarAct = new QAction(tr("ToolBar"), this);
	connect(toolBarAct, SIGNAL(triggered()), this, SLOT(toobBar()));

	stateBarAct = new QAction(tr("StateBar"), this);
	connect(stateBarAct, SIGNAL(triggered()), this, SLOT(stateBar()));

	// quad menu actions
	
	// help menu actions
	aboutAct = new QAction(tr("About"), this);
	connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));



	// mouse actions
	mouseSpinAct = new QAction(QIcon("../images/rotate-left.png"), tr("Spin"), this);
	connect(mouseSpinAct, SIGNAL(triggered()), this, SLOT(mouseSpin()));

	mouseMoveAct = new QAction(QIcon("../images/move.png"), tr("Move"), this);
	connect(mouseMoveAct, SIGNAL(triggered()), this, SLOT(mouseMove()));

	mouseZoomAct = new QAction(QIcon("../images/zoom.png"), tr("Zoom"), this);
	connect(mouseZoomAct, SIGNAL(triggered()), this, SLOT(mouseZoom()));

}
Ejemplo n.º 8
0
void User::removeBuff(Buff* buff)
{
	buff->setTarget(nullptr);
	_buffs.eraseObject(buff);
	updateBuffsEffect();

	ValueMap map = saveModel();
	FileUtils::getInstance()->writeToFile(map,_path);
}
Ejemplo n.º 9
0
void ldig_init(const std::string &modelpath, const std::vector<std::string> &files, size_t bound_feature_freq, LdigFloat eta, LdigFloat reg) {
    worksize();

    cybozu::ldig::Corpus corpus;
    corpus.load(files);
    worksize();

    const cybozu::String& fulltext = corpus.text();
    std::cout << "corpus : " << corpus.size() << std::endl;
    std::cout << " chars : " << fulltext.size() << std::endl;

    const size_t K = corpus.labels().size();
    std::cout << "labels : " << K;

    cybozu::ldig::Model model(K);
    for (auto i=corpus.texts().begin(), iend=corpus.texts().end(); i!=iend; ++i) {
        std::cout << " " << i->label;
        model.labellist.push_back(i->label);
    }
    std::cout << std::endl;
    model.generate_labelmap();

    model.generate_features(fulltext, bound_feature_freq);

    std::cout << "features : " << model.M << std::endl;
    //for(auto i=features.begin(), ie=features.end();i!=ie;++i) std::cout << i->str(fulltext) << "\t" << i->count << std::endl;

    std::cout << "darray : " << model.trie.size() << std::endl;
    worksize();

    time_t t = time(0);
    for(size_t n=0; n<10; ++n) {
        model.learn(corpus, eta, (n<5)?0:reg);
        if (n>3) {
            const size_t pre_M = model.M;
            model.shrink();
            std::cout << "fetures : " << pre_M << " => " << model.M << std::endl;
        }
        std::vector<size_t> correct(K);
        LdigFloat lh = model.likelihood(correct, corpus);
        size_t c = 0, s = 0;
        for (size_t k=0; k<K; ++k) {
            auto &x = corpus.texts()[k];
            std::cout << x.label << " " << correct[k] << " / " << x.vec.size() << " = " << (LdigFloat)(correct[k]) / x.vec.size() << std::endl;
            c += correct[k];
            s += x.vec.size();
        }
        std::cout << n << " : " << c << " / " << s << " = " << (LdigFloat)c/(LdigFloat)s << ", neg log likelihood " << lh << " (" << time(0) - t << "s)" << std::endl;
        eta *= 0.8;
        worksize();
    }

    saveModel(model, modelpath);
}
Ejemplo n.º 10
0
void User::addBuff(Buff* buff)
{
	buff->setTarget(this);
	_buffs.pushBack(buff);
	updateBuffsEffect();

	/*PopPanel::getInstance()->note("treaMap","type:Text---text:"+ a2u("获得 ") + buff->getModelByName("nickName").asString(),1.0f,false,true);*/

	ValueMap map = saveModel();
	FileUtils::getInstance()->writeToFile(map,_path);
}
Ejemplo n.º 11
0
void MainWindow::actionSave()
{
	m_modelinfo.prepareForSaveToSelf();

	if (m_modelinfo.m_currentFile.isEmpty())
	{
		actionSaveAs();
		return;
	}

	saveModel(m_model, m_modelinfo);
}
void T3kSoftlogicDlg::on_BtnSave_clicked()
{
    m_pTabPanelWidget->updateDataFromUI();

    T3kCommonData::KeyDataMode eMode = T3kCommonData::instance()->getKeyDataMode();
    T3kCommonData::instance()->setKeyDataMode( T3kCommonData::KeyDataModeNormal );

    QString strPanelName = T3kCommonData::instance()->getKeys().getPanelName();

    T3kCommonData::instance()->setKeyDataMode( eMode );
    if( strPanelName.isEmpty() )
    {
        QMessageBox msg( QMessageBox::Critical, "Error", "Panel Name is required.", QMessageBox::Ok, this );
        msg.exec();
        setFocusPanelName();
        return;
    }

    QString strModelName( m_strLoadedModelPathName.right( m_strLoadedModelPathName.length() - m_strLoadedModelPathName.lastIndexOf('/') - 1 ) );
    int nIdx = strModelName.indexOf( '.' );
    strModelName = strModelName.left( nIdx );

    if( m_strLoadedModelPathName.isEmpty() || strModelName != strPanelName )
    {
        QString strFileName = strPanelName;
        strFileName += ".hsk";

        QString strDir( QApplication::applicationDirPath() );
        if( !m_strLoadedModelPathName.isEmpty() )
        {
            int nBP = m_strLoadedModelPathName.lastIndexOf( '/' );
            strDir = m_strLoadedModelPathName.left( nBP+1 );
        }

        QString strSave = QFileDialog::getSaveFileName( this, "Save", strDir, "Files(*.hsk)", &strFileName );
        if( strSave.isEmpty() )
            return;

        m_strLoadedModelPathName = strSave;
    }

    saveModel( m_strLoadedModelPathName );
    QString strLoad = m_strLoadedModelPathName;
    loadModel( strLoad );

    m_pTabPanelWidget->updateUIFromData();
    onUpdatePrewview();

    T3kCommonData::instance()->resetCalibrationData();

    //m_wndTab.ResetNotify();
}
Ejemplo n.º 13
0
/**
 * This function save list
 * @brief IoLista::Guardar
 * @param fichero name
 * @return vid
 */
void IoLista::Guardar(const QString fichero)
{
    if (fichero.isNull())
        return;

    file.setFileName(Dir + "/" + fichero);

    if(file.open(QIODevice::WriteOnly))
        saveModel(&file, lista);

    file.close();
    Nombre = QFileInfo(fichero).fileName();
}
Ejemplo n.º 14
0
void
MainWindow::on_saveAsAction_triggered()
{
	if (model_.get() == nullptr || config_.origConfigFileName.isNull()) {
		return;
	}

	while (!selectNewConfigFileName()) {}

	if (!config_.newConfigFileName.isEmpty()) {
		saveModel();
	}
}
Ejemplo n.º 15
0
void User::setShareRewardOpen(bool value)
{
	_shareRewardOpen = value;
	if(_shareRewardOpen == true && _shareRewardOpenFirst == true)
	{
		PopPanel::getInstance()->addPanel(ShareAwardPanel::create("shareAward"),1);
		_shareRewardOpenFirst = false;
	}

	// 保存
	ValueMap map = saveModel();
	FileUtils::getInstance()->writeToFile(map,_path);
}
Ejemplo n.º 16
0
void EditorNew::save()
{
    if (item_edited == true)
    {
        saveModel(item_model);
    }
    if (location_edited == true)
    {
        saveModel(location_model);
    }
    if (water_edited == true)
    {
        saveModel(water_model);
    }
    if (factor_edited == true)
    {
        factor_model->saveItems();
    }
    if (item_type_edited == true)
    {
        saveModel(item_type_model);
    }
}
Ejemplo n.º 17
0
void User::reset()
{
	_achieves.clear();
	_buffs.clear();

	_firstOpen = true;
	for(int i = 0; i < 3; i++)
	{
		_shareRewardsLock[i] = 0;
	}
	_shareRewardOpen = false;
	_shareRewardOpenFirst = true;

	ValueMap map = saveModel();
	FileUtils::getInstance()->writeToFile(map,_path);
}
Ejemplo n.º 18
0
bool User::init()
{
	_multiSpeed = 1;
	_multiFightDelay = 1;

	_path = FileUtils::sharedFileUtils()->getWritablePath() + "user.plist";
	if(FileUtils::getInstance()->isFileExist(_path) == false)
	{
		auto model = saveModel();
		FileUtils::getInstance()->writeToFile(model,_path);
	}
	loadModel(FileUtils::getInstance()->getValueMapFromFile(_path));

	//reset();
	return true;
}
Ejemplo n.º 19
0
void OSDocument::save()
{
  // save the project file
  analysis::Analysis analysis = m_simpleProject->analysis();

  if (analysis.dataPointsAreInvalid()){
    // DLM: Elaine, is there any way to just remove datapoints that are invalid
    // or do we have to remove them all?
    // ETH@20130319 - Currently, you have to remove them all. Same with results. The ability to do
    // this more judiciously would be nice.
    bool completeRemoval = m_simpleProject->removeAllDataPoints();
    if (!completeRemoval) {
      QMessageBox::critical( mainWindow(), "Incomplete File Removal", QString("Removed all design alternatives from this project, but could not remove all of the associated files. Close all files and clear results to clean up your file system.") );
    }
  }else if (analysis.resultsAreInvalid()){
    bool completeRemoval = m_simpleProject->clearAllResults();
    if (!completeRemoval) {
      QMessageBox::critical( mainWindow(), "Incomplete File Removal", QString("Removed all results from this project, but could not remove all of the result files. Close all files and clear results again to clean up your file system.") );
    }
  } 

  m_simpleProject->save();

  if( !m_savePath.isEmpty() )
  {

    // saves the model to modelTempDir / in.osm
    openstudio::path modelPath = saveModel(this->model(), toPath(m_savePath), toPath(m_modelTempDir));

    this->setSavePath(toQString(modelPath));

    // saves the run database, do before saveModelTempDir
    emit modelSaving(modelPath);

    // copies modelTempDir/in.osm to modelPath, copies all resources including run database
    saveModelTempDir(toPath(m_modelTempDir), modelPath);
    
    this->markAsUnmodified();
  }else{
    saveAs();
  }
}
Ejemplo n.º 20
0
/**
 * This function save as list
 * @brief IoLista::Guardar
 * @return void
 */
void IoLista::Guardar()
{
    QString fileName = QFileDialog::getSaveFileName(0, QObject::tr("Grardar PlayList"),
                                                    Dir + "/" + Nombre,
                                                    QObject::tr("Lista (*.lst);;"
                                                                "Rotacion (*.rot);;"
                                                                "Secuencia (*.seq);;"
                                                                "Tanda (*.tad)"
                                                    ));
    if (fileName.isNull())
        return;

    file.setFileName(fileName);

    if(file.open(QIODevice::WriteOnly))
        saveModel(&file, lista);
    file.close();
    Path(fileName);
    Nombre = QFileInfo(fileName).fileName();
}
bool PatternAnalysisWizard::validateCurrentPage()
{
	switch( this->currentId() )
	{
		//********************************************************************
		// Run the desired module upon exiting the wizard:
		case Page_Features:
			int id = optionGroup->checkedId();
			switch(id)
			{
			    case 0: 
					runSVM();
					break;
				case 1:
				    runKPLS();
			        break;
				case 2:
					saveModel();
					break;
				case 3:
					appendModel(mod_table, filename);
					break;
				case 4:
					extractTable(true);
					break;
				case 5:
					extractTableFromModel(mod_table);
					break;
				case 6:
					extractTable(true);
					break;

			}
			return true;
		break;
		//********************************************************************
	}
	return true;
}
void T3kSoftlogicDlg::on_BtnNew_clicked()
{
    if( isModified() )
    {
        QMessageBox msg( QMessageBox::Question, "Warning", "Would you like to save this data?", QMessageBox::Yes|QMessageBox::No, this );
        if( msg.exec() == QMessageBox::Yes )
        {
            m_pTabPanelWidget->updateDataFromUI();

            QString strPanelName = T3kCommonData::instance()->getKeys().getPanelName();
            if( strPanelName.isEmpty() )
            {
                QMessageBox msg( QMessageBox::Critical, "Error", "Panel Name is required.", QMessageBox::Ok, this );
                msg.exec();
                setFocusPanelName();
                return;
            }

            QString strModelName( m_strLoadedModelPathName.right( m_strLoadedModelPathName.length() - m_strLoadedModelPathName.lastIndexOf('/') - 1 ) );
            int nIdx = strModelName.indexOf( '.' );
            strModelName = strModelName.left( nIdx );

            if( m_strLoadedModelPathName.isEmpty() || strModelName != strPanelName )
            {
                QString strFileName = strPanelName;
                strFileName += ".hsk";

                QString strDir( QApplication::applicationDirPath() );
                if( !m_strLoadedModelPathName.isEmpty() )
                {
                    int nBP = m_strLoadedModelPathName.lastIndexOf( '/' );
                    strDir = m_strLoadedModelPathName.left( nBP+1 );
                }

                QString strSave = QFileDialog::getSaveFileName( this, "Save", strDir, "Files(*.hsk)", &strFileName );
                if( strSave.isEmpty() )
                    return;

                m_strLoadedModelPathName = strSave;
            }

            saveModel( m_strLoadedModelPathName );

            T3kCommonData::instance()->resetCalibrationData();

            //m_wndTab.ResetNotify();
        }
    }

    T3kCommonData::KeyDataMode eMode = T3kCommonData::instance()->getKeyDataMode();
    T3kCommonData::instance()->setKeyDataMode( T3kCommonData::KeyDataModeNormal );

    CSoftkeyArray& Keys = T3kCommonData::instance()->getKeys();
    Keys.clear();
    T3kCommonData::instance()->getLogics().clear();

    Keys.resetPanelInfo();

    Keys.setModified( false );

    m_strLoadedModelPathName.clear();

    m_pTabPanelWidget->updateUIFromData();
    m_pTabKeyDesignWidget->refresh();

    T3kCommonData::instance()->setKeyDataMode( eMode );

    T3kCommonData::instance()->resetCalibrationData();

    onUpdatePrewview();
}
Ejemplo n.º 23
0
void MainWindow::actionSaveAs()
{
	ModelInfo tmpModelinfo(m_modelinfo);

	QStringList filters;
	filters << "PIE3 models (*.pie)" << "PIE2 models (*.pie)" << "WZM models (*.wzm)" << "OBJ files (*.obj)";

	QList<wmit_filetype_t> types;
	types << WMIT_FT_PIE << WMIT_FT_PIE2 << WMIT_FT_WZM << WMIT_FT_OBJ;

	QFileDialog* fDialog = new QFileDialog();

	fDialog->setFileMode(QFileDialog::AnyFile);
	fDialog->setAcceptMode(QFileDialog::AcceptSave);
	fDialog->setNameFilters(filters);
	fDialog->setWindowTitle(tr("Choose output file"));
	fDialog->setDirectory(m_pathExport);
	fDialog->exec();

	if (fDialog->result() != QDialog::Accepted)
	{
		return;
	}

	if (!filters.contains(fDialog->selectedNameFilter()))
	{
		return;
	}

	tmpModelinfo.m_save_type = types[filters.indexOf(fDialog->selectedNameFilter())];

	// refresh export working dir
	m_pathExport = fDialog->directory().absolutePath();
	m_settings->setValue(WMIT_SETTINGS_EXPORTVAL, m_pathExport);

	QFileInfo finfo(fDialog->selectedFiles().first());
	tmpModelinfo.m_saveAsFile = finfo.filePath();

	QPointer<ExportDialog> dlg;

	switch (tmpModelinfo.m_save_type)
	{
	case WMIT_FT_PIE:
	case WMIT_FT_PIE2:
		tmpModelinfo.defaultPieCapsIfNeeded();
		dlg = new PieExportDialog(tmpModelinfo.m_pieCaps, this);
		if (dlg->exec() == QDialog::Accepted)
		{
			tmpModelinfo.m_pieCaps = static_cast<PieExportDialog*>(dlg.data())->getCaps();
		}

		if (finfo.suffix().toLower() != "pie")
			tmpModelinfo.m_saveAsFile += ".pie";
		break;
	case WMIT_FT_OBJ:
		if (finfo.suffix().toLower() != "obj")
			tmpModelinfo.m_saveAsFile += ".obj";
		break;
	case WMIT_FT_WZM:
		if (finfo.suffix().toLower() != "wzm")
			tmpModelinfo.m_saveAsFile += ".wzm";
		break;
	}

	if (dlg && dlg->result() != QDialog::Accepted)
	{
		return;
	}

	m_modelinfo = tmpModelinfo;
	PrependFileToRecentList(m_modelinfo.m_saveAsFile);

	saveModel(m_model, m_modelinfo);
}
Ejemplo n.º 24
0
void CStrategyGrid::checkOrder()
{

	//添加完策略需要先睡眠,因为参数还未设置
	std::this_thread::sleep_for(std::chrono::milliseconds(100));


	while(!m_Exit)
	{
		//BeginRun();
		//return;
		if(m_Exit)
		{
			CString str;

			str.Format("%s:策略终止,退出",m_strModelName);

			this->AddLog(str.GetBuffer(0));

			return;
		}

		if(!m_bRun)
		{
			CString str;

			str.Format("%s:策略暂停,等待",m_strModelName);

			this->AddLog(str.GetBuffer(0));

			std::this_thread::sleep_for(std::chrono::milliseconds(3*1000));

			continue;
		
		}

		if(reLogintime())
		{
			//m_SPTrade->relogin();
			::SendMessage(CStrategyBase::m_hMsgWnd,WM_MESSAGE_ENTRUST,3,0);

			std::this_thread::sleep_for(std::chrono::milliseconds(3*1000));
		}


		if(check_in_jihe())
		{

			if(isNewModel)
			{
				this->AddLog("集合竞价下单,等待开盘");

				BeginRun();
				isNewModel = false;

				std::this_thread::sleep_for(std::chrono::milliseconds(10*1000));

				continue;
			}


			if(isAnohterDay && !isNewModel && !isLoad)
			{
				this->AddLog("reload...");

				reload();

				isLoad = true;

				isSave = false;

				isAnohterDay = false;

				std::this_thread::sleep_for(std::chrono::milliseconds(10*1000));

			}

			std::this_thread::sleep_for(std::chrono::milliseconds(1*1000));
		}


		if( checkpanzhong() )
		{
			if(isNewModel)
			{
				this->AddLog("盘中添加策略");

				BeginRun();

				isNewModel = false;
			}

			std::this_thread::sleep_for(std::chrono::milliseconds(3*1000));
		
		}

		//收盘
		if(checksavetime())
		{
			//如果盘后添加则等待
			if(isNewModel)
			{
				std::this_thread::sleep_for(std::chrono::milliseconds(10*1000));
				continue;
			}

			if(!isSave && !isAnohterDay)
			{
				this->AddLog("save...");
				saveModel();
				isSave = true;
				isAnohterDay = true;
				isLoad = false;
				this->m_listOrderRef.RemoveAll();
				this->m_orderinfo.clear();

				//if(m_kp==1)
				setHoldinfo();
			}
		
			std::this_thread::sleep_for(std::chrono::milliseconds(10*1000));

		}


		//接近集合竞价或者开盘时间添加策略,休眠100ms,比如 8:50过后
		if(checkbefore())
		{
			std::this_thread::sleep_for(std::chrono::milliseconds(100));

			continue;
	
		}


		if(check_b_jihe())
		{
			this->AddLog("集合竞价前下单,等待触发");

			std::this_thread::sleep_for(std::chrono::milliseconds(3*1000));

			continue;
	
		}

		//一般非交易时间
		if(checkothertime())
		{

			std::this_thread::sleep_for(std::chrono::milliseconds(3*1000));

			//continue;
			
		}

		//没有就强制睡3秒
		string prefix = Tool::getCodePrefix(m_strInstrument.GetBuffer(0));
		if(m_codestatus[prefix].status==0)
			std::this_thread::sleep_for(std::chrono::milliseconds(3*1000));


	}


	if(m_Exit)
	{
		CString str;

		str.Format("%s:策略终止,退出",m_strModelName);

		this->AddLog(str.GetBuffer(0));

		return;
	}


}
Ejemplo n.º 25
0
int main(int argc, char* argv[]) {

    std::string textfile;
    int vecsize = 0;
    int epochs = 0;
    int context = 0;
    int negsamples = 0;
    std::string sinkfile;

    if (argc < 2) {
        print_usage();
    }

    for (int i = 1; i < argc; ++i) {
        switch (argv[i][1])
        {
        case 's':
            textfile = argv[++i];
            break;
        case 'w':
            vecsize = std::atoi(argv[++i]);
            break;
        case 'o':
            sinkfile = argv[++i];
            break;
        case 'e':
            epochs = std::atoi(argv[++i]);
            break;
        case 'c':
            context = std::atoi(argv[++i]);
            break;
        case 'n':
            negsamples = std::atoi(argv[++i]);
            break;
        default:
            print_usage();
            std::exit(-1);
        }
    }

    std::cout << "source text file : " << textfile << std::endl
              << "vector size      : " << vecsize << std::endl
              << "model file       : " << sinkfile << std::endl
              << "#epochs          : " << epochs << std::endl
              << "context size     : " << context << std::endl
              << "negative samples : " << negsamples << std::endl;

    std::vector<Sentence> corpus;
    std::map<std::string, size_t> word2id;
    std::map<size_t, std::string> id2word;
    Eigen::RowVectorXf unidist;

    LoadData(textfile, corpus);
    BuildLexicon(word2id, id2word, corpus);
    BuildWordDist(unidist, word2id, corpus);

    int wordcounts = word2id.size();
    std::cout << "#words : " << wordcounts << std::endl;

    srand(0);
    Eigen::MatrixXf innerVector, outerVector;
    innerVector.resize(wordcounts, vecsize);
    outerVector.resize(wordcounts, vecsize);

    innerVector.setRandom();
    outerVector.setRandom();

    std::cout << "inner " << std::endl;
    std::cout << innerVector << std::endl;
    std::cout << "outer " << std::endl;
    std::cout << outerVector << std::endl;

    std::uniform_real_distribution<double> wordselector(0.0, 1.0);
    std::default_random_engine engine(0);

    // training with word embeddings.
    for (int i = 0; i < epochs; ++i) {
        for (Sentence& sent : corpus) {
            for (int idx = 0; idx < sent.length(); ++idx) {
                size_t leftIdx = Sentence::GetPos(sent.length(), idx, -context);
                size_t rightIdx = Sentence::GetPos(sent.length(), idx, context);

                std::vector<size_t> posindx;
                std::vector<size_t> negindx;

                for (size_t contextidx = leftIdx; contextidx <= rightIdx; ++contextidx) {
                    if (contextidx == idx)
                        continue;
                    posindx.push_back(word2id[sent.word(contextidx)]);
                }

                for (int negcnt = 0; negcnt < negsamples; ++ negcnt) {

                    size_t selwordidx = 0;
                    do {
                        double randomvalue = wordselector(engine);
                        selwordidx = sampling(unidist, randomvalue);
                        bool realneg = true;
                        for (size_t posidx : posindx) {
                            if (posidx == selwordidx)
                                realneg = false;
                        }

                        for (size_t negidx : negindx) {
                            if (negidx == selwordidx)
                                realneg = false;
                        }

                        if (realneg)
                            break;
                    } while (true);

                    negindx.push_back(selwordidx);
                }

                Eigen::MatrixXf posoutervec(posindx.size(), vecsize);
                Eigen::MatrixXf posgrad(posindx.size(), vecsize);

                Eigen::MatrixXf negoutervec(negindx.size(), vecsize);
                Eigen::MatrixXf neggrad(negindx.size(), vecsize);

                // update the information
                for (int posIdx = 0; posIdx < posindx.size(); ++posIdx) {
                    posoutervec.row(posIdx) = outerVector.row(posindx[posIdx]);
                }

                for (int negIdx = 0; negIdx < negindx.size(); ++negIdx) {
                    negoutervec.row(negIdx) = outerVector.row(negindx[negIdx]);
                }

                // initialize the vector
                Eigen::RowVectorXf centerInnervec = innerVector.row(word2id[sent.word(idx)]);

                Eigen::RowVectorXf posrawscore = posoutervec * centerInnervec.transpose();
                Eigen::RowVectorXf negrawscore = negoutervec * centerInnervec.transpose();

                double expsum = posrawscore.array().exp().sum() + negrawscore.array().exp().sum();

                Eigen::RowVectorXf posprob = posrawscore.array().exp() / expsum;
                Eigen::RowVectorXf negprob = negrawscore.array().exp() / expsum;

                // calculate the gradient of center word inner vector.
                Eigen::RowVectorXf centerInnergrad = posoutervec.colwise().sum() - posprob * posoutervec;
                centerInnergrad *= -1;

                // calculate the gradient of surrounding word outer vector
                for (size_t posindx = 0; posindx < posgrad.rows(); ++posindx) {
                    posgrad.row(posindx) = -1 * (centerInnervec - posprob[posindx] * posgrad.rows() * centerInnervec);
                }

                // calculate the negative samples
                for (size_t negidx = 0; negidx < neggrad.rows(); ++negidx) {
                    neggrad.row(negidx) = negprob[negidx] * centerInnervec;
                }

                // update the gradient
                size_t centerWordId = word2id[sent.word(idx)];
                innerVector.row(centerWordId) -= 0.1 * centerInnergrad;

                for (size_t posIdx = 0; posIdx < posindx.size(); ++posIdx) {
                    size_t wordId = posindx[posIdx];
                    outerVector.row(wordId) -= posgrad.row(posIdx);
                }

                for (size_t negIdx = 0; negIdx < negindx.size(); ++negIdx) {
                    size_t wordId = negindx[negIdx];
                    outerVector.row(wordId) -= neggrad.row(negIdx);
                }

                std::cout << "Update Vector : " << std::endl;
                std::cout << "inner " << std::endl;
                std::cout << innerVector << std::endl;
                std::cout << "outer " << std::endl;
                std::cout << outerVector << std::endl;

            }
        }
    }

    saveModel(sinkfile, word2id, innerVector, outerVector);
    return 0;
}
void T3kSoftlogicDlg::closeEvent(QCloseEvent *)
{
    if( isModified() )
    {
        QMessageBox msg( QMessageBox::Question, "Warning", "Would you like to save this data?", QMessageBox::Yes|QMessageBox::No, this );
        if( msg.exec() == QMessageBox::Yes )
        {
            m_pTabPanelWidget->updateDataFromUI();

            T3kCommonData::KeyDataMode eMode = T3kCommonData::instance()->getKeyDataMode();
            T3kCommonData::instance()->setKeyDataMode( T3kCommonData::KeyDataModeNormal );
            QString strPanelName = T3kCommonData::instance()->getKeys().getPanelName();
            T3kCommonData::instance()->setKeyDataMode( eMode );
            if( strPanelName.isEmpty() )
            {
                QMessageBox msg( QMessageBox::Critical, "Error", "Panel Name is required.", QMessageBox::Ok, this );
                msg.exec();
                setFocusPanelName();
                return;
            }

            QString strModelName( m_strLoadedModelPathName.right( m_strLoadedModelPathName.length() - m_strLoadedModelPathName.lastIndexOf('/') - 1 ) );
            int nIdx = strModelName.indexOf( '.' );
            strModelName = strModelName.left( nIdx );

            if( m_strLoadedModelPathName.isEmpty() || strModelName != strPanelName )
            {
                QString strFileName = strPanelName;
                strFileName += ".hsk";

                QString strDir( QApplication::applicationDirPath() );
                if( !m_strLoadedModelPathName.isEmpty() )
                {
                    int nBP = m_strLoadedModelPathName.lastIndexOf( '/' );
                    strDir = m_strLoadedModelPathName.left( nBP+1 );
                }

                QString strSave = QFileDialog::getSaveFileName( this, "Save", strDir, "Files(*.hsk)", &strFileName );
                if( strSave.isEmpty() )
                    return;

                m_strLoadedModelPathName = strSave;
            }

            saveModel( m_strLoadedModelPathName );

            T3kCommonData::instance()->resetCalibrationData();

            //m_wndTab.ResetNotify();
        }
    }

    m_pTabKeyDesignWidget->close();
    m_pTabLogicDesignWidget->close();
    m_pTabCalibrationWidget->close();

    QRect rc( geometry() );
    QString str = QString("%1,%2,%3,%4").arg(rc.left()).arg(rc.top()).arg(rc.right()).arg(rc.bottom());
    QSettings settings( "Habilience", "T3kSoftlogic" );
    settings.beginGroup( "Windows" );
    settings.setValue( "Main_Pos", str );
    settings.setValue( "Main_Show", isMaximized() ? WND_MAX : isMinimized() ? WND_MIN : isHidden() ? WND_HIDE : WND_SHOW );
    settings.endGroup();

    QString strRecentModelName = m_strLoadedModelPathName;//m_SoftKey.GetPanelName();
    settings.beginGroup( "RECENT MODEL" );
    settings.setValue( "MODEL_NAME", strRecentModelName );
    settings.endGroup();
}
Ejemplo n.º 27
0
/**
 * @brief MainWindow::MainWindow Initialize the main window and everything else
 * @param parent
 */
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
  // Initialize the interface
  ui->setupUi(this);
  ui->glWidget->addAction(ui->actionFullscreen);
  ui->glWidget->addAction(ui->actionExit);

  connect(ui->actionExit,SIGNAL(triggered()),this,SLOT(close()));
  connect(ui->actionFullscreen,SIGNAL(triggered()),this,SLOT(toggleFullscreenSlot()));

  // The test script runs a simple experiment
  experimentScript = new TestScript(this,this);

  // Add a cosmetic line to the splitter handle
  // so that it's easier to grab with the mouse
  QSplitterHandle *handle = ui->splitter->handle(1);
  QVBoxLayout *layout = new QVBoxLayout(handle);
  layout->setSpacing(0);
  layout->setMargin(0);
  QFrame *line = new QFrame(handle);
  line->setFrameShape(QFrame::VLine);
  line->setFrameShadow(QFrame::Sunken);
  layout->addWidget(line);

  // In a future revision, we'll move the SimWorld
  // to a more intelligent place.  It doesn't
  // belong as a child to the graphics widget.
  SimWorld* world = ui->glWidget->getWorld();
  CapBody* capBody = world->getBody();
#if defined( BOARD_DATA )
  BoardMarkerData* md = ui->glWidget->getWorld()->getMarkerData();
#elif defined( POKE_DATA )
  PokeMarkerData* md = ui->glWidget->getWorld()->getMarkerData();
#else
  MarkerData* md = world->getMarkerData();
#endif

  // We populate a ScrollArea with the same number of
  // MarkerWidgets as there are markers in the data file.
  QScrollArea* sa = new QScrollArea;
  QWidget* wid = new QWidget;
  layout = new QVBoxLayout;
  layout->setContentsMargins(0,0,0,0);

  // This part needs to become part of a function
  // that is called everytime a new data file is
  // loaded.
  int markCnt = md->marker_count;
  ui->markerCountLineEdit->setText(QString::number(markCnt));
  ui->frameCountLineEdit->setText(QString::number(md->size()));
  ui->markerFileLineEdit->setText("data.c3d");
  ui->markerFrameStartBox->setValue(0);
  setDataRange(md->size());

  QHBoxLayout* innerLayout = new QHBoxLayout;
  QPushButton* connectButton = new QPushButton("Connect");
  QPushButton* releaseButton = new QPushButton("Release");
  QPushButton* updateButton = new QPushButton("Update Anchors");
  innerLayout->addWidget(connectButton);
  innerLayout->addWidget(releaseButton);
  innerLayout->addWidget(updateButton);
  connect(connectButton,SIGNAL(clicked()),this,SLOT(connectMarkers()));
  connect(releaseButton,SIGNAL(clicked()),this,SLOT(releaseMarkers()));
  connect(updateButton,SIGNAL(clicked()),this,SLOT(updateMarkerAnchors()));
  layout->addLayout(innerLayout);

  markerWidgetArray.resize(markCnt);
  for (int ii=0;ii<markCnt;++ii) {
    markerWidgetArray[ii] = new MarkerWidget(ii,0);
    layout->addWidget(markerWidgetArray[ii]);
  }
  wid->setLayout(layout);
  sa->setWidget(wid);
  ui->controlTabWidget->addTab(sa,"Markers");

  // Joint control tab
  sa = new QScrollArea;
  wid = new QWidget;
  layout = new QVBoxLayout;
  layout->setContentsMargins(0,0,0,0);

  // A couple buttons at the top of the joint tab make it possible
  // to rapidly change all the force limits
  innerLayout = new QHBoxLayout;
  QPushButton* zeroButton = new QPushButton("Zero");
  QPushButton* lightButton = new QPushButton("Light");
  QPushButton* resetButton = new QPushButton("Strong");
  innerLayout->addWidget(zeroButton);
  innerLayout->addWidget(lightButton);
  innerLayout->addWidget(resetButton);
  layout->addLayout(innerLayout);
  connect(zeroButton,SIGNAL(clicked()),this,SLOT(zeroForces()));
  connect(lightButton,SIGNAL(clicked()),this,SLOT(lightForces()));
  connect(resetButton,SIGNAL(clicked()),this,SLOT(strongForces()));

  // Fill the tab with hard-coded data about the model...
  populateJointTab(capBody,layout);
  wid->setLayout(layout);
  sa->setWidget(wid);
  ui->controlTabWidget->addTab(sa,"Joints");

  // Body dimensions widget
  sa = new QScrollArea;
  wid = new QWidget;
  layout = new QVBoxLayout;
  layout->setContentsMargins(0,0,0,0);
  QCheckBox* keepBodyRel = new QCheckBox("Body Rel");
  layout->addWidget(keepBodyRel);

  // Fill the tab with model-specific widgets
  populateBodyTab(capBody,layout);
  wid->setLayout(layout);
  sa->setWidget(wid);
  ui->controlTabWidget->addTab(sa,"Model dimensions");

  // Hook up the interface elements to their respecitve functionality
  connect(ui->saveButton,SIGNAL(clicked()),capBody,SLOT(saveBody()));
  connect(ui->loadButton,SIGNAL(clicked()),capBody,SLOT(loadBody()));
  connect(ui->testButton,SIGNAL(clicked()),this,SLOT(experimentSlot()));

  // When a the CapBody loads the marker map, tell the interface
  // how and where the markers are connected.
  connect(capBody,SIGNAL(markMap(int,int)),this,SLOT(setMarkMap(int,int)));
  connect(capBody,SIGNAL(markPoint(int,double,double,double)),
          this,SLOT(setMarkPoint(int,double,double,double)));

  // *****
  // (Each MarkerWidget informs the capBody when the interface
  //  changes).
  for (int ii=0;ii<markCnt;++ii) {
    connect(markerWidgetArray[ii],SIGNAL(markBodySet(int,int)),md,SLOT(changeBodyConnect(int,int)));
    connect(markerWidgetArray[ii],SIGNAL(markConnect(int,bool)),md,SLOT(changeBodyLink(int,bool)));
    connect(markerWidgetArray[ii],SIGNAL(markPosSet(int,double,double,double)),
            md,SLOT(changeLinkPos(int,double,double,double)));
    connect(markerWidgetArray[ii],SIGNAL(markGrab(int)),this, SLOT(grabMarkPos(int)));
  }

  connect(ui->clearPlotButton,SIGNAL(clicked()),this,SLOT(clearData()));
  connect(ui->glWidget->getWorld(),SIGNAL(useMarkers(bool)),this,SLOT(usingMarkers(bool)));
  connect(ui->frictionSpinBox,SIGNAL(valueChanged(double)),world,SLOT(setGroundFriction(double)));
  connect(ui->terrainSpinBox,SIGNAL(valueChanged(double)),world,SLOT(setTerrainSoftness(double)));
  connect(ui->zBox,SIGNAL(valueChanged(double)),ui->glWidget->getWorld(),SLOT(setTerrainZ(double)));
  connect(ui->forceLinesCheckBox,SIGNAL(clicked(bool)),ui->glWidget,SLOT(setDrawLines(bool)));
  connect(ui->camFollowCheckBox,SIGNAL(clicked(bool)),ui->glWidget,SLOT(setFollowCamera(bool)));
  connect(ui->timeSlider,SIGNAL(valueChanged(int)),world->getMarkerData(),SLOT(setFrame(int)));
  connect(ui->glWidget->getWorld()->getMarkerData(),SIGNAL(frameChanged(int)),ui->timeSlider,SLOT(setValue(int)));
  connect(ui->bodyAlpha,SIGNAL(valueChanged(double)),ui->glWidget,SLOT(setBodyAlpha(double)));
  connect(ui->showMarkBox,SIGNAL(toggled(bool)),ui->glWidget,SLOT(setShowMarkers(bool)));
  connect(ui->selfCollideBox,SIGNAL(toggled(bool)),world,SLOT(setSelfCollide(bool)));
  connect(ui->saveStateButton,SIGNAL(clicked()),this,SLOT(saveModel()));
  connect(ui->restoreButton,SIGNAL(clicked()),this,SLOT(restoreModel()));

  connect(ui->markerRadio,SIGNAL(toggled(bool)),this,SLOT(useMarkers(bool)));
  connect(ui->torqueRadio,SIGNAL(toggled(bool)),this,SLOT(useTorques(bool)));
  connect(ui->altRadio,SIGNAL(toggled(bool)),this,SLOT(useAltForces(bool)));

  connect(ui->playAllButton,SIGNAL(clicked(bool)),this,SLOT(playPauseAll(bool)));
  connect(ui->playPauseDataButton,SIGNAL(clicked(bool)),this,SLOT(playPauseData(bool)));
  connect(ui->playPauseSimButton,SIGNAL(clicked(bool)),this,SLOT(playPauseSim(bool)));

  connect(ui->stepAllButton,SIGNAL(clicked()),this,SLOT(stepAll()));
  connect(ui->stepDataButton,SIGNAL(clicked()),this,SLOT(stepData()));
  connect(ui->stepSimButton,SIGNAL(clicked()),this,SLOT(stepSim()));


  connect(ui->selectFileToolButton,SIGNAL(clicked()),this,SLOT(markerFileDialog()));
  connect(ui->dataStepBox,SIGNAL(valueChanged(int)),this,SLOT(setDataStep(int)));
  connect(ui->dataFrameBox,SIGNAL(valueChanged(int)),this,SLOT(setDataFrame(int)));
  connect(ui->timeSlider,SIGNAL(valueChanged(int)),ui->dataFrameBox,SLOT(setValue(int)));

  // *****
  // Need to dynamically change this
  ui->timeSlider->setRange(0,world->getMarkerData()->size()-1);
  connect(ui->globalBox,SIGNAL(toggled(bool)),this,SLOT(useGlobalForces(bool)));

#if defined( BOARD_DATA )
  bd = new BoardData(this);
  bd->loadData("boardData.dat");
  ui->glWidget->setBoardData(bd);
#endif

  // Start the timer for updating the data, sim, and graphics
  updateTimer.setSingleShot(false);
  connect(&updateTimer,SIGNAL(timeout()),this,SLOT(updateLoop()));

  connect(ui->frameTimeBox,SIGNAL(valueChanged(double)),this,SLOT(setFrameTime(double)));
  ui->frameTimeBox->setValue(1/60.0);
  ui->dataStepBox->setValue(2);

  capBody->loadBody();
  useMarkers(true);
  saveModel();
}
Ejemplo n.º 28
0
void LearnerEngine::closeModel()
{
	_learner->saveNetworks();

	saveModel();
}
Ejemplo n.º 29
0
int main(int argc, char *argv[])
{
  /*****
   * boolean value indicates when to break main loop
   * (and thus finish this configuration tool)
   *****/
  int request_finish = 0;

  int current         = 0; /***** menu selection related variables */
  int menu_items      = 5;
  enum state status[] = {active, active, active, active, active};

  WINDOW *mainscr; /***** ncurses related variables */
  int i, j;

  /***** load configuration */

  if (loadConfiguration() == 0)
  {
    fprintf(stderr, "couldn't load configuration!");
    exit(-1);
  }

  /***** setup speaker model */

  model = (Model *) malloc(sizeof(Model));
  initModel(model);

  /***** ignore Ctrl-C */

  signal(SIGINT, SIG_IGN);

  /***** ncurses stuff */

  initscr();      /***** initialize the curses library */

  if (color_term != -1) /***** define dialog color pairs if terminal supports colors */
   {
      start_color ();
      if ((color_term = has_colors ()))
      {
         color_term = 1;
         init_pair (1, COLOR_WHITE, COLOR_BLUE);
         init_pair (2, COLOR_YELLOW, COLOR_BLUE);
         init_pair (3, COLOR_BLUE, COLOR_YELLOW);
         init_pair (4, COLOR_YELLOW, COLOR_CYAN);
      }
   }
   else
      color_term = 0;

  keypad(stdscr, TRUE);  /* enable keyboard mapping */
  scrollok (stdscr, FALSE);
  cbreak();              /* take input chars one at a time, no wait for \n */
  noecho();              /* don't echo input */
  refresh();

  mainscr = popupWindow(COLS, LINES); /***** dialog window that contains the main menu */
  leaveok (mainscr, FALSE);

  while (!request_finish)
  {
    wattrset (mainscr, color_term ? COLOR_PAIR(2) | A_BOLD : A_NORMAL); /***** set bg color of the dialog */

    /*****
     * draw a box around the dialog window
     * and empty it.
     *****/
    box(mainscr, 0, 0);
    for (i = 1; i < COLS-1; i++)
      for (j = 1; j < LINES-1; j++)
	mvwaddch(mainscr, j, i, ' ');

    /***** dialog header */

    mvwaddstr(mainscr, 1, 2, "CVoiceControl");
    mvwaddstrrght(mainscr, 1, COLS, "(c) 2000 Daniel Kiecza");
    mvwaddseparator(mainscr, 2, COLS);
    mvwaddstrcntr(mainscr, 3, COLS, "Speaker Model Editor");
    mvwaddseparator(mainscr, 4, COLS);

    /***** display main menu */

    mvwaddstr(mainscr, 5, 2, "Please Select:");
    mvwaddstr(mainscr, 5, 35, "Model:");

    if (model_file_name != NULL)
      mvwaddstr(mainscr, 5, 42, model_file_name);
    else
      mvwaddstr(mainscr, 5, 42, "(none)");

    setHighlight(mainscr, status[0], current == 0);
    mvwaddstr(mainscr,  7, 5,"New Speaker Model");
    setHighlight(mainscr, status[1], current == 1);
    mvwaddstr(mainscr,  8, 5,"Load Speaker Model");
    setHighlight(mainscr, status[2], current == 2);
    mvwaddstr(mainscr,  9, 5,"Edit Speaker Model");
    setHighlight(mainscr, status[3], current == 3);
    mvwaddstr(mainscr, 10, 5,"Save Speaker Model");
    setHighlight(mainscr, status[4], current == 4);
    mvwaddstr(mainscr, 11, 5,"Exit");

    wmove(mainscr, 5, 17); /***** move cursor to an appropriate location */
    wrefresh(mainscr);     /***** refresh dialog window */

    /* process the command keystroke */

    switch(getch())
    {
    case KEY_UP:   /***** cursor up */
      current = (current == 0 ? menu_items - 1 : current - 1);
      break;
    case KEY_DOWN: /***** cursor down */
      current = (current == menu_items-1 ? 0 : current + 1);
      break;
    case ENTER:    /***** handle menu selections */
    case BLANK:
      switch (current)
      {
      case 0: /***** reset model, but make sure no data gets lost */
	safeResetModel();
	break;
      case 1: /***** load model */
	if (safeResetModel())
	{
	  int max_file_length = 80;
	  char *file_name;
	  char show_file_name[82];
	
	  int width = 45, height = 11, i, j;             /***** ncurses related variables */
	  WINDOW *loadscr = popupWindow (width, height);

	  wattrset (loadscr, color_term ? COLOR_PAIR(2) | A_BOLD : A_NORMAL); /***** set bg color of the dialog */

	  /*****
	   * draw a box around the dialog window
	   * and empty it.
	   *****/
	  werase (loadscr);
	  box (loadscr, 0, 0);
	  for (i = 1; i < width-1; i++)
	    for (j = 1; j < height-1; j++)
	      mvwaddch(loadscr, j, i, ' ');

	  /***** dialog header */
	
	  mvwaddstr(loadscr, 1, 2, "Please enter file name:");
	  mvwaddseparator(loadscr, 2, width);

	  wrefresh (loadscr);
	  wattroff(loadscr, A_BOLD);
	
	  file_name = wstringInput(loadscr, 4, 2, max_file_length, width-5, ""); /***** get file name */

	  /*****
	   * show_file_name is set to "file" if the file_name is longer
	   * than 15 characters. That way dialog messages stay within the
	   * boundaries of the dialog
	   *****/
	  if (strlen(file_name) <= 15)
	    strcpy(show_file_name, file_name);
	  else
	    strcpy(show_file_name, "file");

	  /***** display information that model is being loaded */
	
	  wattrset (loadscr, color_term ? COLOR_PAIR(2) | A_BOLD : A_NORMAL);
	  mvwaddstr(loadscr, 6,  2, "Loading");
	  mvwaddstr(loadscr, 6, 10, show_file_name);
	  mvwaddstr(loadscr, 6, 11+strlen(show_file_name), "...");
	  wrefresh(loadscr);

	  if (loadModel(model, file_name, 1) == 1) /***** loading model is successful */
	  {
	    mvwaddstr(loadscr, 6, 15+strlen(show_file_name), "success!");

	    /***** set variable model_file_name */
	
	    if (strstr(file_name, model_file_extension) !=
		file_name+strlen(file_name)-strlen(model_file_extension))
	    {
	      model_file_name = malloc(strlen(file_name) + strlen(model_file_extension) + 1);
	      strcpy(model_file_name, file_name);
	      strcat(model_file_name, model_file_extension);
	    }
	    else
	    {
	      model_file_name = malloc(strlen(file_name) + 1);
	      strcpy(model_file_name, file_name);
	    }
	  }
	  else /***** loading model has failed */
	    mvwaddstr(loadscr, 6, 15+strlen(show_file_name), "failed!");
	  mvwaddstrcntr(loadscr, 8, width,"Press <Space> to return to menu ...");
	  wrefresh(loadscr); /***** refresh dialog */
	  getch();           /***** wait for keyboard input */

	  delwin(loadscr);   /***** delete ncurses dialog window */
	  free (file_name);
	}
	break;
      case 2: /***** edit the speaker model */
	editModel();
	break;
      case 3: /***** save the speaker model */
	if (model->number_of_items > 0)
	{
	  char *file_name;
	  int max_file_length = 84;
	
	  int width = 45, height = 11, i, j; /***** ncurses related variables */
	  WINDOW *savescr = popupWindow (width, height);

	  wattrset (savescr, color_term ? COLOR_PAIR(2) | A_BOLD : A_NORMAL); /***** set bg color of the dialog */

	  /*****
	   * draw a box around the dialog window
	   * and empty it.
	   *****/
	  werase (savescr);
	  box (savescr, 0, 0);
	  for (i = 1; i < width-1; i++)
	    for (j = 1; j < height-1; j++)
	      mvwaddch(savescr, j, i, ' ');

	  /***** display dialog header */
	
	  mvwaddstr(savescr, 1, 2, "Please enter file name:");
	  mvwaddseparator(savescr, 2, width);

	  wrefresh (savescr);
	  wattroff(savescr, A_BOLD);
	
	  file_name = wstringInput(savescr, 4, 2, max_file_length,
				   width-5, model_file_name); /***** get file name */
	
	  /***** display information that model is being saved */

	  wattrset (savescr, color_term ? COLOR_PAIR(2) | A_BOLD : A_NORMAL);
	  mvwaddstr(savescr, 6,  2, "Saving ...");
	  wrefresh(savescr);

	  if (saveModel(model, file_name) == 1) /***** saving successful */
	  {
	    mvwaddstr(savescr, 6, 13, "success!");

	    /***** update model_file_name if necessary */

	    if (model_file_name != NULL && strcmp(model_file_name, file_name) != 0)
	    {
	      free(model_file_name);
	      model_file_name = malloc(strlen(file_name) + 1);
	      strcpy(model_file_name, file_name);
	    }
	
	    modified = 0; /***** switch modified to '0' */
	  }
	  else /***** saving failed */
	    mvwaddstr(savescr, 6, 13, "failed!");
	  mvwaddstrcntr(savescr, 8, width,"Press <Space> to return to menu ...");
	  wrefresh(savescr); /***** refresh dialog */
	  getch();           /***** wait for keyboard input */

	  delwin(savescr);   /***** delete ncurses dialog window */
	  free (file_name);
	}
	break;
      case 4: /***** quit program */
	if (safeResetModel())
	{
	  wrefresh(mainscr);
  	  request_finish = 1;
	  delwin(mainscr);   /***** delete ncurses dialog window */
	}
	break;
      }
      break;
    }
  }

  endwin(); /***** wrap up ncurses stuff */
  exit(0);  /***** exit program */
}