Example #1
0
void			Chipset::parsFile(std::string &file, int nb, bool verbose)
{
  bool			flagEx;
  CPU::Comm		exec;
  Line			oneLine;
  size_t		pos;
  Memory::Mem		mem;

  while (file.size() > 0)
    {
      pos = file.find("\n");
      if (pos != std::string::npos)
	{
	  oneLine = file.substr(0, pos);
	  file.erase(0, pos + 1);
	}
      parsLine(oneLine);
      if (oneLine.getInstr().size() != 0)
	{
	  if (verbose)
	    std::cout << "instr = " << oneLine.getInstr() << "\t"
		      << "operand = " << oneLine.getOperand() << "\t"
		      << "value = " << oneLine.getValue() << std::endl;
	  exec.setLine(oneLine);
	  flagEx = exec.execLine(mem);
	  if (flagEx == false)
	    break;
	}
    }
  if (nb == 1)
    throw Error(EXIT);
}
Example #2
0
bool Sprite::loadAnims(const string& name)
	{
	if(name.length()<2)
		return 0;
	//printf("> \"%s\"\n", name);
	map<string, int> animNamesTmp;
	Parser parsLine("", "\n\r");
	Parser parsSpace("", " \t");

	anims.clear();
	animNames.clear();

	unsigned int size=0;
	char *tmp=NULL;
	fstream in;

	in.open(name.c_str(), ios::binary|ios::in);
	in.seekg(0, ios::end);
	size=in.tellg();
	in.seekg(0, ios::beg);

	try
		{
		if(!in.is_open() || size<=0)
			throw bad_alloc();
		tmp=new char[size+1];
		}
	catch(bad_alloc&)
		{
		printf("Sprite2D.loadAnims: Nie udalo sie wczytac informacji o animacjach, uzywanie calego obrazka");
		anims.push_back(Anim(0.0f, 0.0f));
		anims.back().addFrame(0, 0, w, h, 0, 0, 0, 0);
		return 1;
		}

	in.read(tmp, size);
	tmp[size]='\0';
	in.close();

	parsLine=tmp;
	delete [] tmp;
	for(int i=0; i<parsLine.count(); i++)
		{
		parsSpace=parsLine[i];
		//printf("> %s\n", parsSpace.getText().c_str());
		if(parsSpace.count()<1)
			continue;
		else if(parsSpace[0]=="--")
			continue;
		else if(parsSpace[0]=="anim")
			{
			if(parsSpace.count()<2)	// Wstawianie poklatkowe
				{
				printf("Sprite2D.loadAnim: Brak wymaganych informacji (\"%s\")", parsSpace.getText().c_str());
				break;
				}
			anims.push_back(Anim(parsSpace.valFloat(1), 0));
			if(parsSpace.count()>2)
				{
				anims.back().setFret(parsSpace.val(2));
				if(parsSpace.count()>3)
					animNamesTmp[parsSpace[3]]=i;
				}
			}
		else if(parsSpace[0]=="frame")
			{
			Anim& a=anims.back();
			int count=parsSpace.val(1);
			if(count<=0)
				a.addFrame(0, 0, 0, 0);
			//printf("> Klatek: %d\n", count);
			for(int i=0; i<count; i++)
				{
				if(parsSpace.count()<4)
					a.addFrame(0, 0, 0, 0);
				else if(parsSpace.count()<8)
					a.addFrame(parsSpace.val(2)+parsSpace.val(4)*i, parsSpace.val(3), parsSpace.val(4), parsSpace.val(5));
				else if(parsSpace.count()<10)
					a.addFrame(parsSpace.val(2)+parsSpace.val(4)*i, parsSpace.val(3), parsSpace.val(4), parsSpace.val(5), parsSpace.val(6), parsSpace.val(7));
				else if(parsSpace.count()<14)
					a.addFrame(parsSpace.val(2)+parsSpace.val(4)*i, parsSpace.val(3), parsSpace.val(4), parsSpace.val(5), parsSpace.val(6), parsSpace.val(7), parsSpace.val(8), parsSpace.val(9));
				else
					a.addFrame(parsSpace.val(2)+parsSpace.val(4)*i, parsSpace.val(3), parsSpace.val(4), parsSpace.val(5), parsSpace.val(6), parsSpace.val(7), parsSpace.val(8), parsSpace.val(9), parsSpace.val(10), parsSpace.val(11), parsSpace.val(12), parsSpace.val(13));
				}
			}
		//else if(parsSpace[0]=="anim")
		else if(parsSpace.isVal(0) && parsSpace.count()>6)			// Animacje 'na szybko'	// Proste zalozenie, jesli pierwsza wartosc jest liczba to dodawana jest animacja
			{
			// 5 0 24 12 24 7 24
			if(parsSpace.count()<7)
				{
				printf("Sprite2D.loadAnims: Brak wymaganych informacji (\"%s\")\n", parsSpace.getText().c_str());
				break;
				}
			anims.push_back(Anim(0.0f, 0));
			Anim& a=anims.back();
			int count=parsSpace.val(0);
			for(int i=0; i<count; ++i)
				a.addFrame(parsSpace.val(1)+parsSpace.val(3)*i, parsSpace.val(2), parsSpace.val(3), parsSpace.val(4), parsSpace.val(5), parsSpace.val(6));
			if(parsSpace.count()>7)
				{
				a.setAspd(parsSpace.valFloat(7));
				if(parsSpace.count()>8)
					a.setFret(parsSpace.val(8));
				}
			}
		}
// Dodawanie nazw do mapy
	//int i=0;
	for(map<string, int>::iterator it=animNamesTmp.begin(); it!=animNamesTmp.end(); ++it)
		{
		animNames[it->first]=&anims[it->second];
		//printf("Sprite2d.loadAnims: Dodawanie nazwy, animacja %d, nazwa %s", i++, it->first.c_str());
		}
// Sprawdz czy wczytala sie przynajmniej jedna animacja
	if(anims.size()<1)
		return 0;
// Sprawdzanie czy wszystkie animacje maja conajmniej jedna klatke
	for(unsigned int i=0; i<anims.size(); i++)
		if(anims[i].getFrameCount()<1)
			anims[i].addFrame(0, 0, 0, 0);
	//printf("INFO: Sprite.loadAnim: Ilosc animacji: %d\n", anims.size());
	return 1;
	}