Пример #1
0
unsigned int RageFileSink::Put2(const byte *inString, unsigned int length, int messageEnd, bool blocking)
{
	if (!m_file.IsOpen())
		throw Err("FileSink: output stream not opened");
	
	if( m_file.Write((const char *)inString, length) == -1 )
		throw WriteErr( m_file );
	
	if (messageEnd)
		if( m_file.Flush() == -1 )
			throw WriteErr( m_file );
	
	return 0;
}
bool SpriteBlock::addCondition(BlockCondition* cond){
	if (conditions != NULL)
	{
		WriteErr("Too many condition elements for SpriteBlock\n");
		return false;
	}
	conditions = cond;
	return true;
}
bool includeFile(SpriteNode* node, TiXmlElement* includeNode, SpriteBlock* &oldSibling)
{
    // get path... ugly
    char configfilepath[FILENAME_BUFFERSIZE] = {0};
    const char* documentRef = getDocument(includeNode);

    if (!getLocalFilename(configfilepath,includeNode->Attribute("file"),documentRef))
    {
        return false;
    }
    ALLEGRO_PATH * incpath = al_create_path(configfilepath);
    al_append_path_component(incpath, "include");
    TiXmlDocument doc( al_path_cstr(incpath, ALLEGRO_NATIVE_PATH_SEP) );
    al_destroy_path(incpath);
	bool loadOkay = doc.LoadFile();
	TiXmlHandle hDoc(&doc);
	TiXmlElement* elemParent;
	if(!loadOkay)
	{
		contentError("Include failed",includeNode);
        WriteErr("File load failed: %s\n",configfilepath);
		WriteErr("Line %d: %s\n",doc.ErrorRow(),doc.ErrorDesc());
		return false;
	}
	elemParent = hDoc.FirstChildElement("include").Element();
	if( elemParent == NULL)
	{
		contentError("Main <include> node not present",&doc);
		return false;
	}
	TiXmlElement* elemNode =  elemParent->FirstChildElement();
	if (elemNode == NULL)
	{
		contentError("Empty include",elemParent);
		return false;
	}
	while (elemNode)
	{ 
		if (!readNode(node, elemNode, elemParent, oldSibling))
			return false;
		elemNode = elemNode->NextSiblingElement();
	}
	return true;
}
Пример #4
0
void    RTErrHandler( int errcode, va_list args ) {
//===============================================

// Print a run-time error message and halt execution.

    WriteErr( errcode, args );
    _RWD_XcptFlags |= XF_FATAL_ERROR;
    if( (_RWD_XcptFlags & XF_IO_INTERRUPTED) == 0 ) {
        RTSuicide();
    }
}
Пример #5
0
bool RageFileSink::IsolatedFlush(bool hardFlush, bool blocking)
{
	if (!m_file.IsOpen())
		throw Err("FileSink: output stream not opened");
	
	
	if( m_file.Flush() == -1 )
		throw WriteErr( m_file );
	
	return false;
}
Пример #6
0
bool FileSink::IsolatedFlush(bool hardFlush, bool blocking)
{
	CRYPTOPP_UNUSED(hardFlush), CRYPTOPP_UNUSED(blocking);
	if (!m_stream)
		throw Err("FileSink: output stream not opened");

	m_stream->flush();
	if (!m_stream->good())
		throw WriteErr();

	return false;
}
Пример #7
0
bool includeFile(SpriteNode* node, TiXmlElement* includeNode, SpriteBlock* &oldSibling)
{
	string filenameStr("buildings/include/");
	filenameStr.append(includeNode->Attribute("file"));

	TiXmlDocument doc( filenameStr.c_str() );
	bool loadOkay = doc.LoadFile();
	TiXmlHandle hDoc(&doc);
	TiXmlElement* elemParent;
	if(!loadOkay)
	{
		contentError("Include failed",includeNode);
		WriteErr("File load failed: %s\n",filenameStr.c_str());
		WriteErr("Line %d: %s\n",doc.ErrorRow(),doc.ErrorDesc());
		return false;
	}
	elemParent = hDoc.FirstChildElement("include").Element();
	if( elemParent == NULL)
	{
		contentError("Main <include> node not present",&doc);
		return false;
	}
	TiXmlElement* elemNode =  elemParent->FirstChildElement();
	if (elemNode == NULL)
	{
		contentError("Empty include",elemParent);
		return false;
	}
	while (elemNode)
	{ 
		if (!readNode(node, elemNode, elemParent, oldSibling))
			return false;
		elemNode = elemNode->NextSiblingElement();
	}
	return true;
}
Пример #8
0
void CObjectManager::AddSimpleCardRead ( TComponent *Owner, const AnsiString &commName )
{
   CSimpleCardRead *simpleCardRead = 0;
   try
   {
      simpleCardRead = new CSimpleCardRead ( commName, CBR_9600, NOPARITY, ONESTOPBIT, 8 );
   }
   catch ( Exception &ex )
   {
      WriteErr ( ex.Message );
   }
   if (FCardReader == 0)
      FCardReader = new TFormCardRead ( Owner );
   if ( simpleCardRead )
      FCardReader->PushScanner ( simpleCardRead) ;
}
int translateProfession(const char* currentProf)
{
	if (currentProf == NULL || currentProf[0]==0)
		return INVALID_INDEX;
    uint32_t j;
    string proffStr;
    for(j=0; (proffStr = dfMemoryInfo.getProfession(j)) != "" ; j++)
    {   
      if( proffStr.compare( currentProf ) == 0)
      {
        //assign ID
        return j;
      }
    }
	WriteErr("Unable to match profession '%s' to anything in-game\n", currentProf);
	return INT_MAX; //if it is left at INVALID_INDEX, the condition is ignored entierly.
}
Пример #10
0
size_t FileSink::Put2(const byte *inString, size_t length, int messageEnd, bool blocking)
{
	CRYPTOPP_UNUSED(blocking);
	if (!m_stream)
		throw Err("FileSink: output stream not opened");

	while (length > 0)
	{
		std::streamsize size;
		if (!SafeConvert(length, size))
			size = ((std::numeric_limits<std::streamsize>::max)());
		m_stream->write((const char *)inString, size);
		inString += size;
		length -= (size_t)size;
	}

	if (messageEnd)
		m_stream->flush();

	if (!m_stream->good())
		throw WriteErr();

	return 0;
}
Пример #11
0
CObjectManager::CObjectManager ( OBJECT_OPTIONS &opt )
{

   FKKM = 0;
   FComPort = 0;//принтера
   FScannerPort = 0;
   FPultPort = 0;
   FPrinterPort = 0;

   FKKMPort = 0;
   FPrinterPortS = 0;
   FPultPortS = 0;
   FScannerPortS = 0;

   FCardReader = 0;
   FTRK = 0;
   FGoldCrown = 0;
   FMagRead = 0;
   m_MifareCard = 0;

   m_pStruna = NULL;

   TErrInfo ErrInfo;
   ErrInfo.UUnum = 850;
   ErrInfo.Kind = HardError;
   ErrInfo.ErrCode = -1;

/*   FComPort = new TComPort;
   FComPort->ComName = opt.PrintComName;
   FScannerPort = new TComPort;
   FScannerPort->ComName = opt.CardReadComName;*/

   InitializeCriticalSection ( &cs );

/*   opt.KKMType = PRINTER_MSTAR;
   opt.KKMComName = "COM2";
   opt.PrintBaudRate = 0;//115200;*/

//   opt.KKMType = NOT_INSTALLED;
   switch ( opt.KKMType )
   {
      CKassMStar *MStar;
      CKassShtrihKKM *ShtrishKKM;

      case PRINTER_MSTAR:
         FKKMPort = new CSimpleCommPort;

         FKKMPort->SetCommPort ( opt.KKMComName );
         MStar = new CKassMStar ( opt.Owner, FKKMPort, opt.PrintBaudRate );
         FKKM = MStar;
         break;

      case KKM_STROKE:
			try
         {
         	ShtrishKKM = new CKassShtrihKKM ( opt.Owner, opt.KKMComName, opt.PrintBaudRate );
            FKKM = ShtrishKKM;
            ShtrishKKM->SetTextWidth ( 28 );
            ShtrishKKM->OpenCommPort();
         }catch ( ECommError &E )
         {
				//DeleteAll();
            //throw Exception( "Не удалось открыть порт ККМ Штрих: " +
            //   AnsiString ( E.what() ) );
            WriteErr ( "Не удалось открыть порт ККМ Штрих: " + AnsiString ( E.what() ) );
         }
         break;

      case KKM_PRIM:
         try
         {
            FKKM = new CKassPrim (opt.Owner, opt.KKMComName, opt.PrintBaudRate );
         }catch ( ECommError E )
         {
				//DeleteAll();
            //throw Exception( "Не удалось открыть порт ККМ Прим: " +
            //   AnsiString ( E.what() ) );
            WriteErr ( "Не удалось открыть порт ККМ Прим: " + AnsiString (E.what()) );
         }
         break;

      case NOT_INSTALLED:
         break;
      default:
         ErrInfo.ErrText = "Не известная ККМ";
         throw ErrInfo;
   }

   if ( ( KKM && opt.PrintBaudRate == 0 ) || ( KKM && opt.PrintBaudRate != 0 && ! KKM->TestKKM() ) )
      if ( ! KKM->SearchKKM() )
      {
         //ошибка поиска ккм
      }

   switch ( opt.KKMType )
   {
      TStringList *FormBuy, *FormReturnBuy;
      CKassMStar *MStar;

      case PRINTER_MSTAR:

         MStar = (CKassMStar*)FKKM;

         FormBuy = new TStringList;
         FormReturnBuy = new TStringList;
         if ( Data->GetPatternMStar (
            FormBuy,
            FormReturnBuy,
            &ErrInfo ) )
         {
            if(!FormBuy->Text.Trim().IsEmpty() )
               MStar->SetFormBuy ( FormBuy );
            else
                MStar->SetDefaultFormBuy();
            if(!FormReturnBuy->Text.Trim().IsEmpty() )
               MStar->SetFormReturnBuy ( FormReturnBuy );
            else
                MStar->SetDefaultReturnBuy();
         }
         else
         {
            MStar->SetDefaultFormBuy();
            MStar->SetDefaultReturnBuy();
//            WriteProt ( ErrInfo );
         }
         delete FormReturnBuy;
         delete FormBuy;
         break;
   }

   switch ( opt.PrinterType )
   {
      CKassShtrihKKM *ShtrishKKM;

      case PRINTER_MSTAR:
         if ( opt.KKMType == PRINTER_MSTAR )
            FPrinter = FKKM;
         else
         {
            FPrinterPortS = new CSimpleCommPort;
            FPrinterPortS->SetCommPort ( opt.PrintComName );
            FPrinter = new CKassMStar ( opt.Owner, FPrinterPortS, opt.PrintBaudRate );
            if ( opt.PrintBaudRate == 0 )
               ((CKassKKM*)FPrinter)->SearchKKM();
         }
         break;
      case PRINTER_FILE:
         FPrinter = new CKassPrinterFile ( opt.PrintComName );
         break;
      case NOT_INSTALLED:
         break;
      case KKM_STROKE:
         if ( opt.KKMType == KKM_STROKE )
            FPrinter = FKKM;
         else
         {
            ShtrishKKM = new CKassShtrihKKM ( opt.Owner, opt.PrintComName, opt.PrintBaudRate );
//            ShtrishKKM->SetTextWidth ( 28 );
            ShtrishKKM->OpenCommPort();
            FPrinter = ShtrishKKM;
         }
         break;

      case KKM_PRIM:
         if ( opt.KKMType == KKM_PRIM )
            FPrinter = FKKM;
         else
            try
            {
               FPrinter = new CKassPrim ( opt.Owner, opt.PrintComName, opt.PrintBaudRate );
            } catch ( ECommError &E )
            {
					//DeleteAll();
               //throw Exception( "Не удалось открыть порт ККМ Прим: " +
               //   AnsiString ( E.what() ) );
               WriteErr ( "Не удалось открыть порт ККМ Прим: " + AnsiString (E.what()) );
            }
         break;

      default:
			DeleteAll();
         ErrInfo.ErrText = "Не известный принтер";
         throw ErrInfo;
   }

   AnsiString Foot, Head;
   if ( Data->GetTicketAttr ( &Head, &Foot, &ErrInfo ) )
   {
      FPrinter->SetHead ( Head );
      FPrinter->SetFoot ( Foot );
   }
//   else
//      WriteProt ( ErrInfo );

   if ( opt.ExistPult )
   {
      switch ( opt.PultType )
      {
         CKassPult_v2 *pv2;
         CKassTRKAZT *azt;
         case NOT_INSTALLED:
            FTRK = new CKassNoPult ( opt.Owner );
            break;

         case PULT_AMUR:
            FPultPortS = new CSimpleCommPort;
            CPultScannerCommand::SetDCBProperty ( FPultPortS );
            FPultPortS->SetCommPort ( opt.PultComName );
            FTRK = new CKassPult_v1 ( opt.Owner, FPultPortS, &cs );
            break;

         case HEAD_VESNA:
            try
            {
               FTRK = new CKassVesnaTRK ( opt.Owner, opt.PultComName, 9600 );
            }catch ( ECommError &E )
            {
               DeleteAll();
               throw Exception( "Не удалось открыть порт Весны: " +
                  AnsiString ( E.what() ) );

            }
            break;

         case PULT_AMUR_v2:
            FPultPortS = new CSimpleCommPort;
            CPultScannerCommand::SetDCBProperty ( FPultPortS );
            FPultPortS->SetCommPort ( opt.PultComName );
            pv2 = new CKassPult_v2 ( opt.Owner, FPultPortS, &cs, 2 );
            FTRK = pv2;
            pv2->AddColon ( 0, 0x10 );
            pv2->AddColon ( 1, 0x11 );
            break;

         case HEAD_AZT:
         	try
            {
				   FTRK = new CKassTRKAZT ( opt.Owner, opt.PultComName, opt.HeadBaudRate );
            }catch ( ECommError &E )
            {
		      	DeleteAll();
               throw Exception( "Не удалось открыть порт ТРК АЗТ: " +
                  AnsiString ( E.what() ) );
            }
         	break;

         case HEAD_STROKE_MINI_COMP:
         case HEAD_STROKE_TRK:
            try
            {
            	FTRK = new CKassStrokeAZS ( opt.Owner, opt.PultComName, opt.HeadBaudRate/*38400/*9600*/,
               	(opt.PultType == HEAD_STROKE_MINI_COMP) );
            }catch ( ECommError &E )
            {
					DeleteAll();
               throw Exception( "Не удалось открыть порт Штрих АЗС: " +
                  AnsiString ( E.what() ) );
            }
            break;

         case HEAD_DRESSER_WAYNE:
            try
            {
               FTRK = new KassTRKDresserWayne ( opt.Owner, opt.PultComName, opt.HeadBaudRate );
            }catch ( ECommError &E )
            {
					DeleteAll();
               throw Exception( "Не удалось открыть порт TRK Dresser Wayne: " +
                  AnsiString ( E.what() ) );
            }
            break;

         default:
            ErrInfo.ErrText = "Неизвестный пульт";
		   	DeleteAll();
            throw ErrInfo;
      }
   }else
   {
      FTRK = new CKassNoPult ( opt.Owner );
   }

   switch ( opt.CardReadType )
   {
      case CARD_READ_SCANNER:
/*         if ( opt.UnionScannerAndPult )
         {
            if (( opt.PultType != PULT_AMUR && opt.PultType != PULT_AMUR_v2 )
                 || !opt.ExistPult)
            {
               FScannerPortS = new CSimpleCommPort;
               CPultScannerCommand::SetDCBProperty ( FScannerPortS );
               FScannerPortS->SetCommPort ( opt.CardReadComName );
               scannerCardRead = new CScannerCardRead ( FScannerPortS, &cs );
            }else
               scannerCardRead = new CScannerCardRead ( FPultPortS, &cs );
         }
         else
         {
            FScannerPortS = new CSimpleCommPort;
            CPultScannerCommand::SetDCBProperty ( FScannerPortS );
            FScannerPortS->SetCommPort ( opt.CardReadComName );
            scannerCardRead = new CScannerCardRead ( FScannerPortS, 0 );
         }
         FCardReader = new TFormCardRead ( opt.Owner );
         FCardReader->PushScanner ( scannerCardRead) ; */
         AddScannerCardRead(opt);
         break;
      case NOT_INSTALLED:
         break;
      case CARD_READ_SIMPLE:
         /*simpleCardRead = new CSimpleCardRead ( opt.CardReadComName, 9600, 1, ONESTOPBIT, 8 );
         FCardReader = new TFormCardRead ( opt.Owner );
         FCardReader->PushScanner ( simpleCardRead) ;*/
         AddSimpleCardRead ( opt.Owner, opt.CardReadComName );
         break;

/*      case CARD_READ_COMBINE:
         if ( opt.UnionScannerAndPult )
         {
            if (( opt.PultType != PULT_AMUR && opt.PultType != PULT_AMUR_v2 )
                 || !opt.ExistPult)
            {
               FScannerPortS = new CSimpleCommPort;
               CPultScannerCommand::SetDCBProperty ( FScannerPortS );
               FScannerPortS->SetCommPort ( opt.CardReadComName );
               FCardReader = new CCombineCardRead ( opt.Owner, FScannerPortS, &cs, opt.CardReadComName, 9600, 1, ONESTOPBIT, 8 );
            }else
               FCardReader = new CCombineCardRead ( opt.Owner, FPultPortS, &cs, opt.CardReadComName, 9600, 1, ONESTOPBIT, 8 );
         }
         else
         {
            FScannerPortS = new CSimpleCommPort;
            CPultScannerCommand::SetDCBProperty ( FScannerPortS );
            FScannerPortS->SetCommPort ( opt.CardReadComName );
            FCardReader = new CCombineCardRead ( opt.Owner, FScannerPortS, 0, opt.CardReadComName, 9600, 1, ONESTOPBIT, 8 );
         }
         break; */
		case CARD_READ_COMBINE:
         AddScannerCardRead(opt);
         AddSimpleCardRead (opt.Owner, opt.CardReadComName );
      	break;

      default:
         //ErrInfo.ErrText = "Не известный сканер";
         //throw ErrInfo;
         WriteErr ( "Не известный сканер" );
   }

   if ( opt.bUseSecondScanner )
   {
      AddSimpleCardRead (opt.Owner, opt.SecondScannerCommName );
   }

   if ( opt.UseGoldCrown )
   {
      FGoldCrown = new CGoldCrown ( opt.GoldCrownComName );
   }


   if ( opt.MagReader )
   {
      CSimpleCardRead *simpleCardRead = new CSimpleCardRead ( opt.MagComName );
      FMagRead = new TFormCardRead (opt.Owner );
      FMagRead->PushScanner ( simpleCardRead );
   }


   if ( opt.UseMifareCard )
   {
      try
      {
         m_MifareCard = new CMifareCard ( "001DC001", opt.MifarePortName );
      }
      catch ( const TErrInfo &err )
      {
         opt.UseMifareCard = false;
         WriteProt ( err );
      }
   }

   switch ( opt.m_siu )
   {

   case siuStruna:
   	m_pStruna = new CListenStruna_v1 ( opt.StrunaCommName );
      if ( ! m_pStruna->StartListen() )
         WriteErr ( "Не удалось соединится со струной" );
      break;

   case siuIgla:
      m_pStruna = new LevelGageIgla ( opt.StrunaCommName );
      if ( ! m_pStruna->StartListen() )
         WriteErr ( "Не удалось соединится с Иглой" );
      break;

   case siuService:
      m_pStruna = new  LevelGageInet(opt.m_SIUIPAddress, opt.m_SIUPort);
      if ( ! m_pStruna->StartListen() )
         WriteErr ( "Не удалось соединится с Сервисом СИУ" );
      break;

   default:
      m_pStruna = NULL;
      break;
   }

   if ( opt.TerminalRegim )
   {
      m_TerminalServer = boost::shared_ptr<TerminalServer> ( new TerminalServer() );
   }

   if ( opt.SendSMSMode )
   {
      m_SMSSender = boost::shared_ptr<KassSMSSender> (
         new KassSMSSender(opt.PhoneCommPortName, opt.PhoneCommPortBaudRate ) );
   }

   int OpenPortNumber = 0;
   try
   {
      if ( FComPort )
         FComPort->Open ( );
      OpenPortNumber = 1;
      if ( FScannerPort )
         FScannerPort->Open ( );
      OpenPortNumber = 2;
      if ( FPrinterPort )
         FPrinterPort->Open ( );
      OpenPortNumber = 3;
      if ( FPultPort )
         FPultPort->Open ( );
      OpenPortNumber = 4;
      if ( FPrinterPortS )
         FPrinterPortS->OpenCommPort();
      OpenPortNumber = 5;
      if ( FKKMPort && FKKMPort->GetConnected() )
         FKKMPort->OpenCommPort();
      OpenPortNumber = 6;
      if ( FPultPortS )
         FPultPortS->OpenCommPort();
      OpenPortNumber = 7;
      if ( FScannerPortS )
         FScannerPortS->OpenCommPort();
   }
   catch ( ECommError E )
   {
      /*Информативное оповещение об ошибках ком порта
      30.11.2005        Ногин В.Г.*/
      AnsiString errinfo;
      switch ( OpenPortNumber )
      {
      case 0:
         errinfo = "Не удалось открыть ком порт, который кстати давно не используется, чёрт знает зачем мы его открываем: ";
   		DeleteAll();
         throw Exception( errinfo + AnsiString(E.what()) );
      case 1:
         errinfo = "Не удалось открыть ком порт, который кстати давно не используется, но был для сканера, чёрт знает зачем мы его открываем: ";
   		DeleteAll();
         throw Exception( errinfo + AnsiString(E.what()) );
      case 2:
         errinfo = "Не удалось открыть ком порт, который кстати давно не используется, но был судя по названию для принтера, чёрт знает зачем мы его открываем: ";
   		DeleteAll();
         throw Exception( errinfo + AnsiString(E.what()) );
      case 3:
         errinfo = "Не удалось открыть ком порт, который кстати давно не используется, но был для пульта, чёрт знает зачем мы его открываем: ";
   		DeleteAll();
         throw Exception( errinfo + AnsiString(E.what()) );
      case 4:
         errinfo = "Не удалось открыть ком порт принтера (M-Start ФР): ";
         WriteErr ( errinfo + AnsiString(E.what()) );
         break;
      case 5:
         errinfo = "Не удалось открыть ком порт ККМ (M-Start ФР): ";
         WriteErr ( errinfo + AnsiString(E.what()) );
         break;
      case 6:
         errinfo = "Не удалось открыть порт пульта: ";
   		DeleteAll();
         throw Exception( errinfo + AnsiString(E.what()) );
      case 7:
         errinfo = "Не уадлось открыть порт штрих кодового сканера: ";
         WriteErr ( errinfo + AnsiString(E.what()) );
         break;
      default:
   		DeleteAll();
         throw Exception( AnsiString(E.what()) );
      }
   }
}
Пример #12
0
void FileSink::Put(const byte *inString, unsigned int length)
{
	out.write((const char *)inString, length);
	if (!out.good())
	  throw WriteErr();
}
Пример #13
0
void FileSink::InputFinished()
{
	out.flush();
	if (!out.good())
	  throw WriteErr();
}
Пример #14
0
bool addSingleCreatureConfig( TiXmlElement* elemCreature, vector<vector<CreatureConfiguration>*>& knownCreatures, int basefile ){
  int gameID = lookupIndexedType(elemCreature->Attribute("gameID"),contentLoader.creatureNameStrings);
  if (gameID == INVALID_INDEX)
  	return false;
  const char* sheetIndexStr;
  t_SpriteWithOffset sprite;
  sprite.fileIndex=basefile;
  sprite.x=0;
  sprite.y=0;
  sprite.animFrames=ALL_FRAMES;
  int baseShadow = DEFAULT_SHADOW;
  const char* shadowStr = elemCreature->Attribute("shadow");
  if (shadowStr != NULL && shadowStr[0] != 0)
  {
	baseShadow = atoi( shadowStr );	  
  }
  if (baseShadow < 0 || baseShadow > MAX_SHADOW)
  	baseShadow = DEFAULT_SHADOW;
  const char* filename = elemCreature->Attribute("file");
	if (filename != NULL && filename[0] != 0)
	{
	  	sprite.fileIndex = loadConfigImgFile((char*)filename,elemCreature);
	}
  TiXmlElement* elemVariant = elemCreature->FirstChildElement("variant");
  while( elemVariant ){
	int professionID = INVALID_INDEX;
    const char* profStr = elemVariant->Attribute("prof");
    if (profStr == NULL || profStr[0] == 0)
    {
	    profStr = elemVariant->Attribute("profession");
    }
   	professionID = translateProfession(profStr);

    const char* customStr = elemVariant->Attribute("custom");
    if (customStr != NULL && customStr[0] == 0)
    {
	    customStr = NULL;
    } 
      
	if (customStr != NULL)
	{
		WriteErr("custom: %s\n",customStr);	
	}
    
    const char* sexstr = elemVariant->Attribute("sex");
    sheetIndexStr = elemVariant->Attribute("sheetIndex");
    enumCreatureSex cresex = eCreatureSex_NA;
    if(sexstr){
      if(strcmp( sexstr, "M" ) == 0) cresex = eCreatureSex_Male;
      if(strcmp( sexstr, "F" ) == 0) cresex = eCreatureSex_Female;
    }
    const char* specstr = elemVariant->Attribute("special");
    enumCreatureSpecialCases crespec = eCSC_Any;
    if (specstr)
    {
      if(strcmp( specstr, "Normal" ) == 0) crespec = eCSC_Normal;
      if(strcmp( specstr, "Zombie" ) == 0) crespec = eCSC_Zombie;	      
      if(strcmp( specstr, "Skeleton" ) == 0) crespec = eCSC_Skeleton;	      
    }
    sprite.animFrames = getAnimFrames(elemVariant->Attribute("frames"));
	if (sprite.animFrames == 0)
		sprite.animFrames = ALL_FRAMES;

	int shadow = baseShadow;
	const char* shadowStr = elemVariant->Attribute("shadow");
	if (shadowStr != NULL && shadowStr[0] != 0)
	{
		shadow = atoi( shadowStr );	  
	}
	if (shadow < 0 || shadow > MAX_SHADOW)
		shadow = baseShadow;
		    
    //create profession config
    sprite.sheetIndex=atoi(sheetIndexStr);
    CreatureConfiguration cre( professionID, customStr , cresex, crespec, sprite, shadow);
    //add a copy to known creatures
    pushCreatureConfig(knownCreatures, gameID, cre);

    elemVariant = elemVariant->NextSiblingElement("variant");
  }

  //create default config
  baseShadow;
  sheetIndexStr = elemCreature->Attribute("sheetIndex");
  sprite.animFrames = ALL_FRAMES;
  if (sheetIndexStr)
  {
	sprite.sheetIndex = atoi( sheetIndexStr );
    CreatureConfiguration cre( INVALID_INDEX, NULL, eCreatureSex_NA, eCSC_Any, sprite, baseShadow);
  	//add a copy to known creatures
    pushCreatureConfig(knownCreatures, gameID, cre);
  }
  return true;
}
Пример #15
0
static bool chargeTVP3026(PixMap *pPixMap)
{
   byte reg1, curCtl, curPos[4];
    bool valeurRetour = mtxOK;
    int i;

    if (pPixMap->Data)
      toBitPlane(pPixMap);

    if (!pPixMap->Data) /* If Data Empty, no Load */
      {
      WriteErr("chargeTVP3026: data empty no load\n");
      return(mtxFAIL);
      }


   /* Hide cursor */
    dacReadBYTE(TVP3026_CUR_XLOW, curPos[0]);
    dacReadBYTE(TVP3026_CUR_XHI , curPos[1]);
    dacReadBYTE(TVP3026_CUR_YLOW, curPos[2]);
    dacReadBYTE(TVP3026_CUR_YHI , curPos[3]);


    dacWriteBYTE(TVP3026_CUR_XLOW, 0x00 );
    dacWriteBYTE(TVP3026_CUR_XHI , 0x00 );
    dacWriteBYTE(TVP3026_CUR_YLOW, 0x00 );
    dacWriteBYTE(TVP3026_CUR_YHI , 0x00 );

   /* update TVP Revision */
    dacWriteBYTE(TVP3026_INDEX, TVP3026_SILICON_REV); 
    dacReadBYTE(TVP3026_DATA, revTVP[iBoard]);

    switch(pPixMap->Width)
       {
        case 32:
          /* Transfer 1st 256 bytes */

          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacReadBYTE(TVP3026_DATA, curCtl);
          reg1 = curCtl & 0xf0;                /* CCR[3:2] = 00 */
          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacWriteBYTE(TVP3026_DATA, reg1);

          dacWriteBYTE(TVP3026_WADR_PAL, 0);      /* address RAM cursor to 0 */
          for(i = 0; i < 128; i+=4)
            {
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i]);
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i+1]);
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i+2]);
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i+3]);
              dacWriteBYTE(TVP3026_CUR_RAM, 0);
              dacWriteBYTE(TVP3026_CUR_RAM, 0);
              dacWriteBYTE(TVP3026_CUR_RAM, 0);
              dacWriteBYTE(TVP3026_CUR_RAM, 0);
            }


          /* Transfer 2nd 256 bytes */

          reg1 = reg1 | 0x04;                /* CCR[3:2] = 01 */
          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacWriteBYTE(TVP3026_DATA, reg1);
          dacWriteBYTE(TVP3026_WADR_PAL, 0);      /* address RAM cursor to 0 */
          for(i=0; i<256; i++)
              dacWriteBYTE(TVP3026_CUR_RAM, 0);


          /* Transfer 3rd 256 bytes (Start of second PLAN)  */

          reg1 = reg1 & 0xf0;                
          reg1 = reg1 | 0x08;                /* CCR[3:2] = 10 */
          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacWriteBYTE(TVP3026_DATA, reg1);

          dacWriteBYTE(TVP3026_WADR_PAL, 0);      /* address RAM cursor to 0 */
          for(i = 128; i < 256; i+=4)
            {
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i]);
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i+1]);
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i+2]);
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i+3]);
              dacWriteBYTE(TVP3026_CUR_RAM, 0);
              dacWriteBYTE(TVP3026_CUR_RAM, 0);
              dacWriteBYTE(TVP3026_CUR_RAM, 0);
              dacWriteBYTE(TVP3026_CUR_RAM, 0);
            }

          /* Transfer 4th 256 bytes */

          reg1 = reg1 | 0x0c;                /* CCR[3:2] = 11 */
          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacWriteBYTE(TVP3026_DATA, reg1);
          dacWriteBYTE(TVP3026_WADR_PAL, 0);      /* address RAM cursor to 0 */
          for(i=0; i<256; i++)
              dacWriteBYTE(TVP3026_CUR_RAM, 0);

         break;

      case 64:

          /* Transfer 1st 256 bytes */

          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacReadBYTE(TVP3026_DATA, curCtl);
          reg1 = curCtl & 0xf0;                /* CCR[3:2] = 00 */
          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacWriteBYTE(TVP3026_DATA, reg1);

          dacWriteBYTE(TVP3026_WADR_PAL, 0);      /* address RAM cursor to 0 */
          for(i = 0; i < 0x100; i++)
              dacWriteBYTE(TVP3026_CUR_RAM, planData[i]);


          /* Transfer 2nd 256 bytes */

          reg1 = reg1 | 0x04;                /* CCR[3:2] = 01 */
          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacWriteBYTE(TVP3026_DATA, reg1);

          dacWriteBYTE(TVP3026_WADR_PAL, 0);      /* address RAM cursor to 0 */
          for(i = 0; i < 0x100; i++)
              dacWriteBYTE(TVP3026_CUR_RAM, planData[0x100+i]);


          /* Transfer 3rd 256 bytes (Start of second PLAN)  */

          reg1 = reg1 & 0xf0;                
          reg1 = reg1 | 0x08;                /* CCR[3:2] = 10 */
          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacWriteBYTE(TVP3026_DATA, reg1);

          dacWriteBYTE(TVP3026_WADR_PAL, 0);      /* address RAM cursor to 0 */
          for(i = 0; i < 0x100; i++)
              dacWriteBYTE(TVP3026_CUR_RAM, planData[0x200+i]);


          /* Transfer 4th 256 bytes */

          reg1 = reg1 | 0x0c;                /* CCR[3:2] = 11 */
          dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
          dacWriteBYTE(TVP3026_DATA, reg1);

          dacWriteBYTE(TVP3026_WADR_PAL, 0);      /* address RAM cursor to 0 */
          for(i = 0; i < 0x100; i++)
              dacWriteBYTE(TVP3026_CUR_RAM, planData[0x300+i]);
         break;
      }

   /* Fix bug TVP3026 rev x */
   if (currentTVPDelta[iBoard])
      shiftCursorTVP3026(currentTVPDelta[iBoard]);

   /* Display cursor */
   dacWriteBYTE(TVP3026_INDEX, TVP3026_CURSOR_CTL);
   dacWriteBYTE(TVP3026_DATA, curCtl);
   dacWriteBYTE(TVP3026_CUR_XLOW, curPos[0]);
   dacWriteBYTE(TVP3026_CUR_XHI , curPos[1]);
   dacWriteBYTE(TVP3026_CUR_YLOW, curPos[2]);
   dacWriteBYTE(TVP3026_CUR_YHI , curPos[3]);
   if (iBoard)
      {
      if (!planTVP[iBoard])
         {
      #ifndef WINDOWS_NT
         if ( (planTVP[iBoard] = (byte *)malloc( 1024 )) == (byte *)0)
      #else
         if ( (planTVP[iBoard] = (PUCHAR)AllocateSystemMemory(1024)) == NULL)
      #endif
            {
            WriteErr("chargeTVP3026: malloc failed\n");
            return mtxFAIL;
            }
         }
      for (i = 0; i < 1024; i++)
         (planTVP[iBoard])[i] = planData[i];
      }
    return valeurRetour;
}
bool RotationBlock::addCondition(BlockCondition* cond){
	WriteErr("Condition elements not permitted for RotationBlock\n");
	return false;
}