Example #1
0
void generateallcaps(const S_BOARD *pos, S_MOVELIST *list)
{
  //printf("generate checkboard assert");
  ASSERT(checkboard(pos));

  list->count = 0;

  int pce = EMPTY;
  int side = pos->side;
  int sq = 0; int t_sq =0;
  int pceNum = 0;
  int dir =0;
  int i =0;
  int pceindex =0;

  //printf("\n\n Side: %d\n",side);

  if(side == WHITE)
  {
    for(pceNum =0; pceNum < pos->pceNum[wp];pceNum++)
    {
      sq = pos->plist[wp][pceNum];
      ASSERT(sqonboard(sq));

      if(!SQOFFBOARD(sq+9) && piececol[pos->pieces[sq+9]]==BLACK)
        addwhitepawncapmove(pos,sq,sq+9,pos->pieces[sq+9],list);
      if(!SQOFFBOARD(sq+11) && piececol[pos->pieces[sq+11]]==BLACK)
        addwhitepawncapmove(pos,sq,sq+11,pos->pieces[sq+11],list);
      //enpassnt
      if(!SQOFFBOARD(sq+9) && sq+9==pos->enpass)
        addenpassantmove(pos,MOVE(sq,sq+9,EMPTY,EMPTY,MFLAGEP),list);
      if(!SQOFFBOARD(sq+11) && sq+11==pos->enpass)
        addenpassantmove(pos,MOVE(sq,sq+11,EMPTY,EMPTY,MFLAGEP),list);
    } //for ended


  }
  else
  {
    for(pceNum =0; pceNum < pos->pceNum[bp];pceNum++)
    {
      sq = pos->plist[bp][pceNum];
      ASSERT(sqonboard(sq));

      if(!SQOFFBOARD(sq-9) && piececol[pos->pieces[sq-9]]==WHITE)
        addblackpawncapmove(pos,sq,sq-9,pos->pieces[sq-9],list);
      if(!SQOFFBOARD(sq-11) && piececol[pos->pieces[sq-11]]==WHITE)
        addblackpawncapmove(pos,sq,sq-11,pos->pieces[sq-11],list);

      //enpassnt
      if(!SQOFFBOARD(sq-9) && sq-9==pos->enpass)
        addenpassantmove(pos,MOVE(sq,sq-9,EMPTY,EMPTY,MFLAGEP),list);
      if(!SQOFFBOARD(sq-11) && sq-11==pos->enpass)
        addenpassantmove(pos,MOVE(sq,sq-11,EMPTY,EMPTY,MFLAGEP),list);
    }
  }

  /* Loop for slide pieces */  
  
  pceindex = loopslideindex[side];
  pce = loopslidepce[pceindex++];
  
  while(pce != 0)
  {
    ASSERT(piecevalid(pce));
    //printf("slider pceindex:%d pce : %d\n",pceindex,pce);
    
    for(pceNum =0; pceNum < pos->pceNum[pce];pceNum++)
    {
      sq=pos->plist[pce][pceNum];
      ASSERT(sqonboard(sq));
      //printf("Piece : %c on %s\n",pcechar[pce],prsq(sq));
      
      for(i=0;i<numdir[pce];i++)
      {
        dir = pcedir[pce][i];
        t_sq = sq +dir;
        
        while(!SQOFFBOARD(t_sq))
        {
          if(pos->pieces[t_sq] != EMPTY)
          {
            if(piececol[pos->pieces[t_sq]]== side^1)
            {//printf("\t\tCapture on %s \n", prsq(t_sq));
             addcapturemove(pos,MOVE(sq,t_sq,pos->pieces[t_sq],EMPTY,0),list);
            }
            break;
          }
          t_sq += dir;
        }
      }
    }
    pce = loopslidepce[pceindex++];
  }
  /* Loop for slide pieces */
  
  /* Loop for non slide pieces */
  
  pceindex = loopnonslideindex[side];
  pce = loopnonslidepce[pceindex++];
  
  while(pce != 0)
  {
    ASSERT(piecevalid(pce));
    //printf("non slider pceindex:%d pce : %d\n",pceindex,pce);
    
    for(pceNum =0; pceNum <pos->pceNum[pce];pceNum++)
    {
      sq=pos->plist[pce][pceNum];
      ASSERT(sqonboard(sq));
      //printf("Piece : %c on %s\n",pcechar[pce],prsq(sq));
      for(i=0;i<numdir[pce];i++)
      {
        dir = pcedir[pce][i];
        t_sq = sq +dir;

        if(SQOFFBOARD(t_sq))
          continue;
        // BLACK ^ 1 == WHITE      WHITE ^ 1 == BLACK
        if(pos->pieces[t_sq] != EMPTY)
        {
          if(piececol[pos->pieces[t_sq]] == side ^ 1)
          {//printf("\t\tCapture on %s\n",prsq(t_sq));
            addcapturemove(pos,MOVE(sq,t_sq,pos->pieces[t_sq],EMPTY,0),list);}
          continue;
        }
        //printf("\t\tNormal on %s \n",prsq(t_sq));
      }
    }
    pce = loopnonslidepce[pceindex++];
  }

  /* Loop for non slide pieces */

}
Example #2
0
void GenerateAllCaps(const CHESS_BOARD *pos, MOVELIST *list) {

	ASSERT(CheckBoard(pos));

	list->count = 0;

	int pce = EMPTY;
	int side = pos->side;
	int sq = 0; int t_sq = 0;
	int pceNum = 0;
	int dir = 0;
	int index = 0;
	int pceIndex = 0;

	if (side == WHITE) {

		for (pceNum = 0; pceNum < pos->pieceNum[wP]; ++pceNum) {
			sq = pos->pList[wP][pceNum];
			ASSERT(SqOnBoard(sq));

			if (!SQOFFBOARD(sq + 9) && PieceCol[pos->pieces[sq + 9]] == BLACK) {
				AddWhitePawnCapMove(pos, sq, sq + 9, pos->pieces[sq + 9], list);
			}
			if (!SQOFFBOARD(sq + 11) && PieceCol[pos->pieces[sq + 11]] == BLACK) {
				AddWhitePawnCapMove(pos, sq, sq + 11, pos->pieces[sq + 11], list);
			}

			if (pos->enPas != NO_SQ) {
				if (sq + 9 == pos->enPas) {
					AddEnPassantMove(pos, MOVE(sq, sq + 9, EMPTY, EMPTY, MFLAGEP), list);
				}
				if (sq + 11 == pos->enPas) {
					AddEnPassantMove(pos, MOVE(sq, sq + 11, EMPTY, EMPTY, MFLAGEP), list);
				}
			}
		}

	}
	else {

		for (pceNum = 0; pceNum < pos->pieceNum[bP]; ++pceNum) {
			sq = pos->pList[bP][pceNum];
			ASSERT(SqOnBoard(sq));

			if (!SQOFFBOARD(sq - 9) && PieceCol[pos->pieces[sq - 9]] == WHITE) {
				AddBlackPawnCapMove(pos, sq, sq - 9, pos->pieces[sq - 9], list);
			}

			if (!SQOFFBOARD(sq - 11) && PieceCol[pos->pieces[sq - 11]] == WHITE) {
				AddBlackPawnCapMove(pos, sq, sq - 11, pos->pieces[sq - 11], list);
			}
			if (pos->enPas != NO_SQ) {
				if (sq - 9 == pos->enPas) {
					AddEnPassantMove(pos, MOVE(sq, sq - 9, EMPTY, EMPTY, MFLAGEP), list);
				}
				if (sq - 11 == pos->enPas) {
					AddEnPassantMove(pos, MOVE(sq, sq - 11, EMPTY, EMPTY, MFLAGEP), list);
				}
			}
		}
	}

	/* Loop for slide pieces */
	pceIndex = LoopSlideIndex[side];
	pce = LoopSlidePce[pceIndex++];
	while (pce != 0) {
		ASSERT(PieceValid(pce));

		for (pceNum = 0; pceNum < pos->pieceNum[pce]; ++pceNum) {
			sq = pos->pList[pce][pceNum];
			ASSERT(SqOnBoard(sq));

			for (index = 0; index < NumDir[pce]; ++index) {
				dir = PceDir[pce][index];
				t_sq = sq + dir;

				while (!SQOFFBOARD(t_sq)) {
					// BLACK ^ 1 == WHITE       WHITE ^ 1 == BLACK
					if (pos->pieces[t_sq] != EMPTY) {
						if (PieceCol[pos->pieces[t_sq]] == (side ^ 1)) {
							AddCaptureMove(pos, MOVE(sq, t_sq, pos->pieces[t_sq], EMPTY, 0), list);
						}
						break;
					}
					t_sq += dir;
				}
			}
		}

		pce = LoopSlidePce[pceIndex++];
	}

	/* Loop for non slide */
	pceIndex = LoopNonSlideIndex[side];
	pce = LoopNonSlidePce[pceIndex++];

	while (pce != 0) {
		ASSERT(PieceValid(pce));

		for (pceNum = 0; pceNum < pos->pieceNum[pce]; ++pceNum) {
			sq = pos->pList[pce][pceNum];
			ASSERT(SqOnBoard(sq));

			for (index = 0; index < NumDir[pce]; ++index) {
				dir = PceDir[pce][index];
				t_sq = sq + dir;

				if (SQOFFBOARD(t_sq)) {
					continue;
				}

				// BLACK ^ 1 == WHITE       WHITE ^ 1 == BLACK
				if (pos->pieces[t_sq] != EMPTY) {
					if (PieceCol[pos->pieces[t_sq]] == (side ^ 1)) {
						AddCaptureMove(pos, MOVE(sq, t_sq, pos->pieces[t_sq], EMPTY, 0), list);
					}
					continue;
				}
			}
		}

		pce = LoopNonSlidePce[pceIndex++];
	}
	ASSERT(MoveListOk(list, pos));
}
Example #3
0
void generateallmoves(const S_BOARD *pos, S_MOVELIST *list)
{
  //printf("generate checkboard assert");
  ASSERT(checkboard(pos));

  list->count = 0;

  int pce = EMPTY;
  int side = pos->side;
  int sq = 0; int t_sq =0;
  int pceNum = 0;
  int dir =0;
  int i =0;
  int pceindex =0;

  //printf("\n\n Side: %d\n",side);

  if(side == WHITE)
  {
    for(pceNum =0; pceNum < pos->pceNum[wp];pceNum++)
    {
      sq = pos->plist[wp][pceNum];
      ASSERT(sqonboard(sq));
      if(pos->pieces[sq + 10] == EMPTY)
      {
        addwhitepawnmove(pos,sq,sq+10,list);
        if(ranksbrd[sq]== RANK_2 && pos-> pieces[sq + 20]==EMPTY)
            addquietmove(pos,MOVE(sq,(sq+20),EMPTY,EMPTY,MFLAGPS),list);
      }

      if(!SQOFFBOARD(sq+9) && piececol[pos->pieces[sq+9]]==BLACK)
        addwhitepawncapmove(pos,sq,sq+9,pos->pieces[sq+9],list);
      if(!SQOFFBOARD(sq+11) && piececol[pos->pieces[sq+11]]==BLACK)
        addwhitepawncapmove(pos,sq,sq+11,pos->pieces[sq+11],list);
      //enpassnt
      if(!SQOFFBOARD(sq+9) && sq+9==pos->enpass)
        addenpassantmove(pos,MOVE(sq,sq+9,EMPTY,EMPTY,MFLAGEP),list);
      if(!SQOFFBOARD(sq+11) && sq+11==pos->enpass)
        addenpassantmove(pos,MOVE(sq,sq+11,EMPTY,EMPTY,MFLAGEP),list);
    } //for ended

    /* castle move */
    if(pos->castle & WO_O)
    {
      if(pos->pieces[F1]==EMPTY && pos->pieces[G1] == EMPTY)
        if(!sqattacked(E1,BLACK,pos) && !sqattacked(F1,BLACK,pos) && !sqattacked(G1,BLACK,pos))
        {
          //printf("WO_O MoveGen\n");
          addquietmove(pos,MOVE(E1,G1,EMPTY,EMPTY,MFLAGCA),list);
        }

    }
    if(pos->castle & WO_O_O)
    {
      if(pos->pieces[D1]==EMPTY && pos->pieces[C1] == EMPTY && pos->pieces[B1]==EMPTY)
        if(!sqattacked(E1,BLACK,pos) && !sqattacked(D1,BLACK,pos) && !sqattacked(C1,BLACK,pos))
        {
          //printf("WO_O_O MoveGen\n");
          addquietmove(pos,MOVE(E1,C1,EMPTY,EMPTY,MFLAGCA),list);
        }

    }
    /* castle move */

  }
  else
  {
    for(pceNum =0; pceNum < pos->pceNum[bp];pceNum++)
    {
      sq = pos->plist[bp][pceNum];
      ASSERT(sqonboard(sq));
      if(pos->pieces[sq - 10] == EMPTY)
      {
        addblackpawnmove(pos,sq,sq-10,list);
        if(ranksbrd[sq]== RANK_7 && pos-> pieces[sq-20]==EMPTY)
        {
            addquietmove(pos,MOVE(sq,(sq-20),EMPTY,EMPTY,MFLAGPS),list);
        }
      }

      if(!SQOFFBOARD(sq-9) && piececol[pos->pieces[sq-9]]==WHITE)
        addblackpawncapmove(pos,sq,sq-9,pos->pieces[sq-9],list);
      if(!SQOFFBOARD(sq-11) && piececol[pos->pieces[sq-11]]==WHITE)
        addblackpawncapmove(pos,sq,sq-11,pos->pieces[sq-11],list);

      //enpassnt
      if(!SQOFFBOARD(sq-9) && sq-9==pos->enpass)
        addenpassantmove(pos,MOVE(sq,sq-9,EMPTY,EMPTY,MFLAGEP),list);
      if(!SQOFFBOARD(sq-11) && sq-11==pos->enpass)
        addenpassantmove(pos,MOVE(sq,sq-11,EMPTY,EMPTY,MFLAGEP),list);
    }
    
    /* castle move */
    if(pos->castle & BO_O)
    {
      if(pos->pieces[F8]==EMPTY && pos->pieces[G8] == EMPTY)
        if(!sqattacked(E8,WHITE,pos) && !sqattacked(F8,WHITE,pos) && !sqattacked(G8,WHITE,pos))
        {
          //printf("BO_O MoveGen\n");
          addquietmove(pos,MOVE(E8,G8,EMPTY,EMPTY,MFLAGCA),list);
        }

    }
    if(pos->castle & BO_O_O)
    {
      if(pos->pieces[D8]==EMPTY && pos->pieces[C8] == EMPTY && pos->pieces[B8]==EMPTY)
        if(!sqattacked(E8,WHITE,pos) && !sqattacked(D8,WHITE,pos) && !sqattacked(C8,WHITE,pos))
        {
          //printf("BO_O_O MoveGen\n");
          addquietmove(pos,MOVE(E8,C8,EMPTY,EMPTY,MFLAGCA),list);
        }

    }
    /* castle move */


  }

  /* Loop for slide pieces */  
  
  pceindex = loopslideindex[side];
  pce = loopslidepce[pceindex++];
  
  while(pce != 0)
  {
    ASSERT(piecevalid(pce));
    //printf("slider pceindex:%d pce : %d\n",pceindex,pce);
    
    for(pceNum =0; pceNum < pos->pceNum[pce];pceNum++)
    {
      sq=pos->plist[pce][pceNum];
      ASSERT(sqonboard(sq));
      //printf("Piece : %c on %s\n",pcechar[pce],prsq(sq));
      
      for(i=0;i<numdir[pce];i++)
      {
        dir = pcedir[pce][i];
        t_sq = sq +dir;
        
        while(!SQOFFBOARD(t_sq))
        {
          if(pos->pieces[t_sq] != EMPTY)
          {
            if(piececol[pos->pieces[t_sq]]== side^1)
            {//printf("\t\tCapture on %s \n", prsq(t_sq));
             addcapturemove(pos,MOVE(sq,t_sq,pos->pieces[t_sq],EMPTY,0),list);
            }
            break;
          }
          //printf("\t\tNormal on %s\n",prsq(t_sq));
          addquietmove(pos,MOVE(sq,t_sq,EMPTY,EMPTY,0),list);
          t_sq += dir;
        }
      }
    }
    pce = loopslidepce[pceindex++];
  }
  /* Loop for slide pieces */
  
  /* Loop for non slide pieces */
  
  pceindex = loopnonslideindex[side];
  pce = loopnonslidepce[pceindex++];
  
  while(pce != 0)
  {
    ASSERT(piecevalid(pce));
    //printf("non slider pceindex:%d pce : %d\n",pceindex,pce);
    
    for(pceNum =0; pceNum <pos->pceNum[pce];pceNum++)
    {
      sq=pos->plist[pce][pceNum];
      ASSERT(sqonboard(sq));
      //printf("Piece : %c on %s\n",pcechar[pce],prsq(sq));
      for(i=0;i<numdir[pce];i++)
      {
        dir = pcedir[pce][i];
        t_sq = sq +dir;

        if(SQOFFBOARD(t_sq))
          continue;
        // BLACK ^ 1 == WHITE      WHITE ^ 1 == BLACK
        if(pos->pieces[t_sq] != EMPTY)
        {
          if(piececol[pos->pieces[t_sq]] == side ^ 1)
          {//printf("\t\tCapture on %s\n",prsq(t_sq));
            addcapturemove(pos,MOVE(sq,t_sq,pos->pieces[t_sq],EMPTY,0),list);}
          continue;
        }
        //printf("\t\tNormal on %s \n",prsq(t_sq));
        addquietmove(pos,MOVE(sq,t_sq,EMPTY,EMPTY,0),list);
      }
    }
    pce = loopnonslidepce[pceindex++];
  }

  /* Loop for non slide pieces */

}
Example #4
0
void GenerateAllMoves(const CHESS_BOARD *pos, MOVELIST *list) {

	ASSERT(CheckBoard(pos));

	list->count = 0;

	int pce = EMPTY;
	int side = pos->side;
	int sq = 0; int t_sq = 0;
	int pceNum = 0;
	int dir = 0;
	int index = 0;
	int pceIndex = 0;

	if (side == WHITE) {

		for (pceNum = 0; pceNum < pos->pieceNum[wP]; ++pceNum) {
			sq = pos->pList[wP][pceNum];
			ASSERT(SqOnBoard(sq));

			if (pos->pieces[sq + 10] == EMPTY) {
				AddWhitePawnMove(pos, sq, sq + 10, list);
				if (RanksBrd[sq] == RANK_2 && pos->pieces[sq + 20] == EMPTY) {
					AddQuietMove(pos, MOVE(sq, (sq + 20), EMPTY, EMPTY, MFLAGPS), list);
				}
			}

			if (!SQOFFBOARD(sq + 9) && PieceCol[pos->pieces[sq + 9]] == BLACK) {
				AddWhitePawnCapMove(pos, sq, sq + 9, pos->pieces[sq + 9], list);
			}
			if (!SQOFFBOARD(sq + 11) && PieceCol[pos->pieces[sq + 11]] == BLACK) {
				AddWhitePawnCapMove(pos, sq, sq + 11, pos->pieces[sq + 11], list);
			}

			if (pos->enPas != NO_SQ) {
				if (sq + 9 == pos->enPas) {
					AddEnPassantMove(pos, MOVE(sq, sq + 9, EMPTY, EMPTY, MFLAGEP), list);
				}
				if (sq + 11 == pos->enPas) {
					AddEnPassantMove(pos, MOVE(sq, sq + 11, EMPTY, EMPTY, MFLAGEP), list);
				}
			}
		}

		if (pos->castlePerm & WKCA) {
			if (pos->pieces[F1] == EMPTY && pos->pieces[G1] == EMPTY) {
				if (!SqAttacked(E1, BLACK, pos) && !SqAttacked(F1, BLACK, pos)) {
					AddQuietMove(pos, MOVE(E1, G1, EMPTY, EMPTY, MFLAGCA), list);
				}
			}
		}

		if (pos->castlePerm & WQCA) {
			if (pos->pieces[D1] == EMPTY && pos->pieces[C1] == EMPTY && pos->pieces[B1] == EMPTY) {
				if (!SqAttacked(E1, BLACK, pos) && !SqAttacked(D1, BLACK, pos)) {
					AddQuietMove(pos, MOVE(E1, C1, EMPTY, EMPTY, MFLAGCA), list);
				}
			}
		}

	}
	else {

		for (pceNum = 0; pceNum < pos->pieceNum[bP]; ++pceNum) {
			sq = pos->pList[bP][pceNum];
			ASSERT(SqOnBoard(sq));

			if (pos->pieces[sq - 10] == EMPTY) {
				AddBlackPawnMove(pos, sq, sq - 10, list);
				if (RanksBrd[sq] == RANK_7 && pos->pieces[sq - 20] == EMPTY) {
					AddQuietMove(pos, MOVE(sq, (sq - 20), EMPTY, EMPTY, MFLAGPS), list);
				}
			}

			if (!SQOFFBOARD(sq - 9) && PieceCol[pos->pieces[sq - 9]] == WHITE) {
				AddBlackPawnCapMove(pos, sq, sq - 9, pos->pieces[sq - 9], list);
			}

			if (!SQOFFBOARD(sq - 11) && PieceCol[pos->pieces[sq - 11]] == WHITE) {
				AddBlackPawnCapMove(pos, sq, sq - 11, pos->pieces[sq - 11], list);
			}
			if (pos->enPas != NO_SQ) {
				if (sq - 9 == pos->enPas) {
					AddEnPassantMove(pos, MOVE(sq, sq - 9, EMPTY, EMPTY, MFLAGEP), list);
				}
				if (sq - 11 == pos->enPas) {
					AddEnPassantMove(pos, MOVE(sq, sq - 11, EMPTY, EMPTY, MFLAGEP), list);
				}
			}
		}

		// castling
		if (pos->castlePerm &  BKCA) {
			if (pos->pieces[F8] == EMPTY && pos->pieces[G8] == EMPTY) {
				if (!SqAttacked(E8, WHITE, pos) && !SqAttacked(F8, WHITE, pos)) {
					AddQuietMove(pos, MOVE(E8, G8, EMPTY, EMPTY, MFLAGCA), list);
				}
			}
		}

		if (pos->castlePerm &  BQCA) {
			if (pos->pieces[D8] == EMPTY && pos->pieces[C8] == EMPTY && pos->pieces[B8] == EMPTY) {
				if (!SqAttacked(E8, WHITE, pos) && !SqAttacked(D8, WHITE, pos)) {
					AddQuietMove(pos, MOVE(E8, C8, EMPTY, EMPTY, MFLAGCA), list);
				}
			}
		}
	}

	/* Loop for slide pieces */
	pceIndex = LoopSlideIndex[side];
	pce = LoopSlidePce[pceIndex++];
	while (pce != 0) {
		ASSERT(PieceValid(pce));

		for (pceNum = 0; pceNum < pos->pieceNum[pce]; ++pceNum) {
			sq = pos->pList[pce][pceNum];
			ASSERT(SqOnBoard(sq));

			for (index = 0; index < NumDir[pce]; ++index) {
				dir = PceDir[pce][index];
				t_sq = sq + dir;

				while (!SQOFFBOARD(t_sq)) {
					// BLACK ^ 1 == WHITE       WHITE ^ 1 == BLACK
					if (pos->pieces[t_sq] != EMPTY) {
						if (PieceCol[pos->pieces[t_sq]] == (side ^ 1)) {
							AddCaptureMove(pos, MOVE(sq, t_sq, pos->pieces[t_sq], EMPTY, 0), list);
						}
						break;
					}
					AddQuietMove(pos, MOVE(sq, t_sq, EMPTY, EMPTY, 0), list);
					t_sq += dir;
				}
			}
		}

		pce = LoopSlidePce[pceIndex++];
	}

	/* Loop for non slide */
	pceIndex = LoopNonSlideIndex[side];
	pce = LoopNonSlidePce[pceIndex++];

	while (pce != 0) {
		ASSERT(PieceValid(pce));

		for (pceNum = 0; pceNum < pos->pieceNum[pce]; ++pceNum) {
			sq = pos->pList[pce][pceNum];
			ASSERT(SqOnBoard(sq));

			for (index = 0; index < NumDir[pce]; ++index) {
				dir = PceDir[pce][index];
				t_sq = sq + dir;

				if (SQOFFBOARD(t_sq)) {
					continue;
				}

				// BLACK ^ 1 == WHITE       WHITE ^ 1 == BLACK
				if (pos->pieces[t_sq] != EMPTY) {
					if (PieceCol[pos->pieces[t_sq]] == (side ^ 1)) {
						AddCaptureMove(pos, MOVE(sq, t_sq, pos->pieces[t_sq], EMPTY, 0), list);
					}
					continue;
				}
				AddQuietMove(pos, MOVE(sq, t_sq, EMPTY, EMPTY, 0), list);
			}
		}

		pce = LoopNonSlidePce[pceIndex++];
	}

	//ASSERT(MoveListOk(list, pos));
}