/**
 *  handling error occured due to failed assertion
 * this error handler only works during parser phase since it uses
 * Token_t to know the line number

 * TODO: we need to make this function more general
 **/
void 
fortran_error_handler(int signum)
{
  // get the current filename 
  std::string sFilename = getCurrentFilename();
  if (sFilename.size()==0) {
     fprintf(stderr, "ERROR while parsing the source code\n");
  } else {
    
    SgScopeStatement* scope = astScopeStack.front();
    SgStatement* lastStatement = scope;
    SgStatementPtrList statementList = scope->generateStatementList();
    if (statementList.empty() == false)
       {
         lastStatement = statementList.back();
       }
    int lineNumberOfLastStatement = (astScopeStack.empty() == false) ? lastStatement->get_file_info()->get_line() : 0;
    // get the latest token parsed
    if (lineNumberOfLastStatement > 0)
      std::cerr <<"FATAL ERROR in file "<<sFilename<<":"<<lineNumberOfLastStatement<<std::endl;
    else
     std::cerr <<"FATAL ERROR while parsing "<<sFilename<<std::endl;
  }
  fflush(NULL); // flush all stdio
  fortran_error_handler_end();
  exit(-1);
}
	//--------------------------------------------------------------------------
	void BaseFileDialog::ok()
	{
		MyGUI::LanguageManager& lang = MyGUI::LanguageManager::getInstance();
		if(mCurrentBasename.empty())
		{
			MessageBox* msgbox = new MessageBox;
			msgbox->setIcon(MessageBoxIcon::INFO);
			msgbox->setMessage("#{SelectFileBefore}");
			msgbox->addButton(MessageBoxButton::OK);
			return;
		}

		size_t pos = mCurrentBasename.rfind('.');
		if(pos == String::npos)
		{
			if(mCurrentFilter < getNumFilters())
			{
				const Filter& filter = getFilter(mCurrentFilter);
				mCurrentBasename += filter.getDefaultExt();
			}
		}

		String filename = getCurrentFilename();
		if(mType == LOAD)
		{
			if(!ResourceGroupManager::getSingleton().resourceExists(mResourceGroup, filename))
			{
				MessageBox* msgbox = new MessageBox;
				msgbox->setIcon(MessageBoxIcon::ERROR);
				msgbox->setMessage("#{FileNotFound}", "1", filename);
				msgbox->addButton(MessageBoxButton::OK);
				return;
			}
		}
		else if(mType == SAVE)
		{
			if(ResourceGroupManager::getSingleton().resourceExists(mResourceGroup, filename))
			{
				MessageBox* msgbox = new MessageBox;
				msgbox->setIcon(MessageBoxIcon::QUEST);
				msgbox->setMessage("#{ConfirmOverwriteFile}", "1", filename);
				msgbox->addButton(MessageBoxButton::YES);
				msgbox->addButton(MessageBoxButton::NO);
				msgbox->eventChoice = MyGUI::newDelegate(this, &BaseFileDialog::notifyFileOverwriteMessageButton);
				return;
			}
		}

		ok_final();
	}
	//--------------------------------------------------------------------------	
	void BaseFileDialog::ok_final()
	{
		eventEndDialog(getCurrentFilename());
	}