Пример #1
0
static void
load_oobp (SNAP_OOB_PEL *src, SPWAW_SNAP_OOB_PELRAW *dst, STRTAB * /*stab*/)
{
	memset (dst, 0, sizeof (SPWAW_SNAP_OOB_PELRAW));

	getOP (RID); getOP (URID); getOP (x); getOP (y); getOP (seen);
}
//!------------------------------------------
treeElem_t * getSkob()
{
    assert(Lexems.data);
    assert(cnt_lex <= Lexems.cnt);

    if (Lexems.data[cnt_lex].oper[0] == '{')
    {
        cnt_lex++;

        printf("{ is spotted!\n");
        printf("before 1st getOP (%d): (%s)\n", cnt_lex, Lexems.data[cnt_lex].oper);

        treeElem_t * tree = getOP();
        ASSERT_OK(tree);

        printf("after 1st getOp: (%s)\n", Lexems.data[cnt_lex].oper);

        if (Lexems.data[cnt_lex].oper[0] == '}')
        {
            printf("} is spotted!\n");
            cnt_lex++;
            return tree;
        }
        else
        {
            printf("ERROR! } is missing!\n");
            printf("(%s)\n", Lexems.data[cnt_lex].oper);
            exit(11);
        }
    }
    else
        return getRav();
}
//!------------------------------------------
treeElem_t * getOP()
{
    assert(Lexems.data);
    assert(cnt_lex <= Lexems.cnt);

    treeElem_t * theOP = ctor(0, NULL, OP, getSkob(), NULL);
    SLASHES printf("theOP cnt_lex = %d\n", cnt_lex);

    while (Lexems.data[cnt_lex].oper[0] != '\0')
    {
        treeElem_t * nextOP = getOP();
        theOP->right = nextOP;
    }
    return theOP;
}
//!------------------------------------------
void processTask()
{
    FILE * input = NULL;
    input = formBuffer(input);
    FILE * lex_dump = openFile("lex_dump.txt");

    initiateLexemsArr();
    formLexems();
    dumpLexems(lex_dump);

    EMPT SLASHES
    puts(buffer);
    SLASHES EMPT

    treeElem_t * tree = getOP();
    ASSERT_OK(tree);

    if (Lexems.data[cnt_lex].oper[0] != '\0')
    {
        printf("SYNTAX ERROR! RECOMPILE YOUR GOPNIK PROG!\n");
        printf("cnt_lex = %d\n");
        printf("(%s)\n", Lexems.data[cnt_lex].oper);
    }

    SLASHES printf("Amount of nodes - (%d)\n", node_amount);

    FILE *output = openFile("commands.txt");
    FILE *dump = openFile("dump.txt");
    FILE *viewTree = openFile("tree.txt");

    dumpTree(tree, NODEBUG, BEGIN, stdout);
    dumpTree(tree, DEBUG, BEGIN, dump);
    printNode(tree, output);

    FinishWork(input, output, dump, viewTree, lex_dump, buffer, tree);
}
llvm::Value* minipascal::NBinaryOperator::codeGen(CodeGenContext* context)
{
        std::cout << "Generating code for " << getOutput() << std::endl;
        llvm::Value* L = getLeft()->codeGen(context);
        llvm::Value* R = getRight()->codeGen(context);
        
        if(L == NULL || R == NULL) return NULL;
        
        switch(getOP()) {
                case minipascal::NBinaryOperator::ADD:
                case minipascal::NBinaryOperator::SUB:
                case minipascal::NBinaryOperator::MUL:
                case minipascal::NBinaryOperator::DIV:
                        setType(getLeft()->getType());
                        break;
                case minipascal::NBinaryOperator::GT:
                case minipascal::NBinaryOperator::GE:
                case minipascal::NBinaryOperator::LT:
                case minipascal::NBinaryOperator::LE:
                case minipascal::NBinaryOperator::EQ:
                case minipascal::NBinaryOperator::NE:
                        setType(new minipascal::BooleanType());
                        break;
        }
        
        // type check
        if(!(getLeft()->getFail()))
        {
                if(!(getLeft()->getType()->compare(getRight()->getType())))
                {
                        showError("Cannot do binary operation");
                        setFail(true);
                        context->fail = true;
                        return NULL;
                }
        }
        
        std::string name = getStoreReg();
        minipascal::IntType temp;
        // for integer binary operation
        if(getLeft()->getType()->compare(&temp))
        {
                switch(getOP()){
                case minipascal::NBinaryOperator::ADD:
                        return context->builder->CreateAdd(L, R, name.c_str());
                case minipascal::NBinaryOperator::SUB:
                        return context->builder->CreateSub(L, R, name.c_str());
                case minipascal::NBinaryOperator::MUL:
                        return context->builder->CreateMul(L, R, name.c_str());
                case minipascal::NBinaryOperator::DIV:
                        return context->builder->CreateSDiv(L, R, name.c_str());
                case minipascal::NBinaryOperator::LE:
                        return context->builder->CreateICmpSLE(L, R, name.c_str());
                case minipascal::NBinaryOperator::LT:
                        return context->builder->CreateICmpSLT(L, R, name.c_str());
                case minipascal::NBinaryOperator::EQ:
                        return context->builder->CreateICmpEQ(L, R, name.c_str());
                case minipascal::NBinaryOperator::NE:
                        return context->builder->CreateICmpNE(L, R, name.c_str());
                case minipascal::NBinaryOperator::GE:
                        return context->builder->CreateICmpSGE(L, R, name.c_str());
                case minipascal::NBinaryOperator::GT:
                        return context->builder->CreateICmpSGT(L, R, name.c_str());
                }
        }
        else // for real binary operation
        {
                switch(getOP()){
                case minipascal::NBinaryOperator::ADD:
                        return context->builder->CreateFAdd(L, R, name.c_str());
                case minipascal::NBinaryOperator::SUB:
                        return context->builder->CreateFSub(L, R, name.c_str());
                case minipascal::NBinaryOperator::MUL:
                        return context->builder->CreateFMul(L, R, name.c_str());
                case minipascal::NBinaryOperator::DIV:
                        return context->builder->CreateFDiv(L, R, name.c_str());
                case minipascal::NBinaryOperator::LE:
                        return context->builder->CreateFCmpOLE(L, R, name.c_str());
                case minipascal::NBinaryOperator::LT:
                        return context->builder->CreateFCmpOLT(L, R, name.c_str());
                case minipascal::NBinaryOperator::EQ:
                        return context->builder->CreateFCmpOEQ(L, R, name.c_str());
                case minipascal::NBinaryOperator::NE:
                        return context->builder->CreateFCmpONE(L, R, name.c_str());
                case minipascal::NBinaryOperator::GE:
                        return context->builder->CreateFCmpOGE(L, R, name.c_str());
                case minipascal::NBinaryOperator::GT:
                        return context->builder->CreateFCmpOGT(L, R, name.c_str());
                }
        }
}
Пример #6
0
void overmind(gameMap_t * self,
              sf::RenderWindow & window,
              selection_t * cUnit,sf::Sprite & aCell,
              sf::Sprite & aEnemy,
              cursor_t * gCur,
              sf::Sprite & gameBackground,
              sf::Sprite & gameInterface,
              sf::Sprite & gameMenu,
              sf::Sprite & gameEndTurn,
              int player,
              sf::Sprite & cTc,
              player_t*pl,
              sf::Sprite & cBc){

                  resources_t r;
                  r.count = 0;
                  r.optimal = 0;

                  int tCost=200;
                  int bCost=150;
                  int ran;

                  if(pl->resourcesPlayer2>=bCost){
                  if(pl->resourcesPlayer2>=tCost){
                        createUnit(self,pl,1,3,window,cUnit,gameBackground,gameInterface,gameMenu,gameEndTurn,cTc,cBc);
                  }else{
                   createUnit(self,pl,1,4,window,cUnit,gameBackground,gameInterface,gameMenu,gameEndTurn,cTc,cBc);
                  }
                  }

                  for(int i = 0;i<cellNumX*cellNumY;i++){
                    r.op[i] = NULL;
                  }


                  for(int i = 0;i<cellNumX;i++){
                        for(int j = 0;j<cellNumY;j++){

                            if(self->cell[i][j].object!=NULL&&self->cell[i][j].obj_un_null==1&&self->cell[i][j].object->type==0){
                                    r.op[r.count] = &self->cell[i][j];
                                        r.count++;
                            }
                        }
                  }


                  for(int i = 0;i<cellNumX;i++){
                        for(int j = 0;j<cellNumY;j++){
                            if (self->cell[i][j].unit!=NULL&&self->cell[i][j].obj_un_null==1) {

                                    if(self->cell[i][j].unit->player == 1){

                                            selection_t tSel;
                                            setSelect(&self->cell[i][j],&tSel);

                                            while(tSel.cell->unit->cPoints>0){

                                                    if(overmindAttack(self,window,&tSel,aCell,aEnemy,gCur,gameBackground,gameInterface,gameMenu,gameEndTurn,1,cTc,pl,cBc)==1){
                                                        continue;
                                                    }
                                                    if(overmindFoundResources(self,window,&tSel,aCell,aEnemy,gCur,gameBackground,gameInterface,gameMenu,gameEndTurn,1,cTc,pl,cBc,i,j,&r)==1){

                                                        continue;
                                                    }

                                                    tSel.cell->unit->cPoints-=1;






                                            }




                                    }
                            }
                        }
                  }

                getOP(self,pl);
                getResources(self,1,pl);









}
Пример #7
0
int OPCodes::getOPSize(string oper)
{
	return getOP(oper).size;
}
Пример #8
0
int OPCodes::getOPCode(string oper)
{
	return getOP(oper).opCode;
}
Пример #9
0
void gameClient(sf::RenderWindow & window,char * mapName){

        int i,/*displacementX=0,displacementY=0,*/ menu=0;
        gameMap_t map;

       // int redrawMMAP = 1;

        cursor_t gCur;
        gCur.status = 0;
        gCur.cell = NULL;



        player_t players;

        players.resourcesPlayer1 = 400;
        players.resourcesPlayer2 = 400;
      //  player_t player2;



        unsigned int currentPlayerTurn=0;

        selection_t select;

        select.status=0;

        select.cell=NULL;


        createMap(&map);




        /*
        Set textures.
        */
        sf::Texture background, interface_image,menu1,menu2,grind,cursor,pCourse,endTurn1,endTurn2,sel,enemy,fpT,spT,cT1,cT2,cB1,cB2;
        sf::Sprite gameBackground,gameInterface,gameMenu,gameGrind,gameCursor,aCell,gameEndTurn,cSel,cEnemy,cpT,cTc,cBc;
        menu1.loadFromFile("gameInterface/menu.png");

        fpT.loadFromFile("gameInterface/fpTurn.png");
        spT.loadFromFile("gameInterface/spTurn.png");

        enemy.loadFromFile("gameInterface/enemyCell.png");

        sel.loadFromFile("gameInterface/selected.png");
        menu2.loadFromFile("gameInterface/menuConfirmed.png");
        grind.loadFromFile("maps/grind.png");
        endTurn1.loadFromFile("gameInterface/endTurn.png");
        endTurn2.loadFromFile("gameInterface/endTurnConfirmed.png");
        cT1.loadFromFile("gameInterface/cTank.png");
        cT2.loadFromFile("gameInterface/cTankC.png");

        cB1.loadFromFile("gameInterface/cBuggy.png");
        cB2.loadFromFile("gameInterface/cBuggyC.png");
        //test

        addUnit(&map,window,0,TANK,15,0);

        addUnit(&map,window,0,BUGGY,12,0);

        addUnit(&map,window,0,TANK,9,0);


        addUnit(&map,window,1,TANK,27,18);


        addUnit(&map,window,1,BUGGY,30,18);

        addUnit(&map,window,1,TANK,33,18);

        addObject(&map,window,0,20,12);

        addObject(&map,window,0,10,10);

        addObject(&map,window,0,30,8);





        cpT.setPosition(130,0);



        cursor.loadFromFile("gameInterface/setCell.png");
        pCourse.loadFromFile("gameInterface/availableCell.png");




        background.loadFromFile(mapName);




        interface_image.loadFromFile("gameInterface/mainInterface.png");
        gameBackground.setTexture(background);
        cSel.setTexture(sel);
        aCell.setTexture(pCourse);
        gameGrind.setTexture(grind);
        gameInterface.setTexture(interface_image);
        cEnemy.setTexture(enemy);
        gameCursor.setTexture(cursor);

        drawMinMap(window,currentPlayerTurn,&map);




while (window.isOpen()){

         cameraMouseMove(window,&map);

         mouseEvents(window,&map);

         menu=gameSelection(window,gameMenu,menu1,menu2,gameEndTurn,endTurn1,endTurn2,cTc,cT1,cT2,cBc,cB1,cB2);

         gameBackground.setPosition(map.displacementX,map.displacementY);

         gameInterface.setPosition(-1,-1);

         gameMenu.setPosition(1700,0);
         gameEndTurn.setPosition(1500,5);
         cTc.setPosition(1680,750);

         cBc.setPosition(1680,890);

         selectUnit(&map,window,cSel,&select,currentPlayerTurn);

        if(select.status==1){
        cSel.setPosition(select.cell->X,select.cell->Y);
        }

         sf::Event event;


          if (sf::Mouse::isButtonPressed(sf::Mouse::Left)&&menu==1){
                    if(pauseMenu(window)==0){
                        break;
                    }
          }

            if (sf::Mouse::isButtonPressed(sf::Mouse::Left)&&menu>=3){

                    createUnit(&map,&players,currentPlayerTurn,menu,window,&select,gameBackground,gameInterface,gameMenu,gameEndTurn,cTc,cBc);
          }

           if (sf::Mouse::isButtonPressed(sf::Mouse::Left)&&menu==2){

                    isEnd(&map,window,endFn);

                    getOP(&map,&players);
                    getResources(&map,currentPlayerTurn,&players);
                     deleteSelect(&select);
                    overmind(&map,window,&select,aCell,cEnemy,&gCur,gameBackground,gameInterface,gameMenu,gameEndTurn,currentPlayerTurn,cTc,&players,cBc);


                    endTurn(&map);
                    Sleep(500);
          }



          if (sf::Mouse::isButtonPressed(sf::Mouse::Right)){

           deleteSelect(&select);

          }





         while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                window.close();
            }
        }


        window.clear(sf::Color::Black);
        window.draw(gameBackground);
        drawUnits(&map,window);
        if(cursorConfirm(window,&map,gameCursor,&gCur)==1){
        window.draw(gameCursor);
        }
        if(select.status==1){
                window.draw(cSel);
                findWay(&map,window,&select,aCell,cEnemy,&gCur,gameBackground,gameInterface,gameMenu,gameEndTurn,currentPlayerTurn,cTc,&players,cBc);

        }
        window.draw(gameInterface);

        if(select.status==1){
           pData(window,&select);
        }



        window.draw(gameMenu);
        window.draw(gameEndTurn);

        drawMinMap(window,currentPlayerTurn,&map);




        drawPlayer(window,currentPlayerTurn,&players);

        window.draw(cTc);

        window.draw(cBc);



        window.display();







}

}