コード例 #1
0
ファイル: select_text.c プロジェクト: PimpMy42Sh/depot
void			ft_cut_select(t_it *it)
{
	int		length;
	int		temp;
	int		a;
	int		b;

	tputs(tgetstr("me", NULL), 0, my_putchar);
	it->r_video = 0;
	length = ft_abs(it->i - it->saved_i) + 1;
	temp = it->i;
	a = it->i - it->offset;
	b = it->saved_i - it->offset;
	move_begin(it);
	if (temp > it->saved_i)
	{
		ft_memdel((void**)&it->tmp_buffer);
		it->tmp_buffer = ft_strsub(it->line, b, length);
		cut_selection(b, a, it);
	}
	else
	{
		ft_memdel((void**)&it->tmp_buffer);
		it->tmp_buffer = ft_strsub(it->line, a, length);
		cut_selection(a, b, it);
	}
	tputs(tgetstr("cd", NULL), 0, my_putchar);
	ft_putstr(it->line);
	it->i += ft_strlen(it->line);
}
コード例 #2
0
ファイル: readline.c プロジェクト: dusandurech/myshell
int readline(char *str_line)
{
	int c;

	memset(line, 0, STR_LINE_SIZE);
	offset = 0;
	len = 0;

	do{
		c = term_getc();
	
/*
		printf("c = %d\n", c);

		if( is_send_signal_int() )
		{
			fprintf(stderr, "sig");
			term_putc('\n');
			str_line[0] = '\0';

			return 0;
		}
*/
		switch( c )
		{
			case -1 :
				fprintf(stderr, "\n-1\n");
			break;

			case '\n' :
				term_putc('\n');
			break;

			case 1 :
				move_begin();
			break;

			case 5 :
				move_end();
			break;

			case 127 :
				backspace();
				history_backup_current_line(line);
			break;

			case 27 :
				switch( (c = term_getc()) )
				{
					case 91 :
						switch( (c = term_getc()) )
						{
							case 65 :
								move_up();
							break;
							case 66 :
								move_down();
							break;

							case 68 :
								move_left();
							break;
							case 67 :
								move_right();
							break;

							default:
								//printf("c = %d\n", c);
							break;
						}
					break;
				}
			break;

			default :
				//printf("c = %d\n", c);
				if( c >= ' ' )
				{
					append(c);
					history_backup_current_line(line);
				}
			break;
		}
	}while( c != '\n' );

	history_add(line);
	history_backup_current_line("");

	memcpy(str_line, line, len+1);

	return len;
}
コード例 #3
0
ファイル: move_gen.cpp プロジェクト: YurkoFlisk/checkers
void MoveGenDefault::_get_all_moves(MoveList& moves) const
{
	static bool capture[8][8] = {};
	// Search for capture-moves first
	if (MT != NON_CAPTURE)
	{
		for (int i = 0; i < board.piece_count[turn_simple(TURN)]; ++i)
		{
			const auto& pos = board.piece_list[turn_simple(TURN)][i];
			Move move(pos);
			move.set_original(board[pos.row][pos.column]);
			tmp_assign<Piece> move_begin(const_cast<Piece&>
				(board[pos.row][pos.column]), Piece(PT_EMPTY)); // Because this position is empty when we move from it
			_find_deep_capture<TURN>(moves, move, pos.row, pos.column, capture);
		}
		for (int i = 0; i < board.piece_count[turn_queen(TURN)]; ++i)
		{
			const auto& pos = board.piece_list[turn_queen(TURN)][i];
			Move move(pos);
			move.set_original(board[pos.row][pos.column]);
			tmp_assign<Piece> move_begin(const_cast<Piece&>
				(board[pos.row][pos.column]), Piece(PT_EMPTY)); // Because this position is empty when we move from it
			_find_deep_capture_queen<TURN>(moves, move, pos.row, pos.column, capture);
		}
	}
	// Capture-move is mandatory, so we need to check non-capture moves only when we don't have any capture-moves
	if (MT == CAPTURE || !moves.empty())
		return;
	for (int i = 0; i < board.piece_count[turn_simple(TURN)]; ++i)
	{
		const auto& pos = board.piece_list[turn_simple(TURN)][i];
		if (pos.column < 7 && board[TURN == WHITE ? pos.row + 1 : pos.row - 1][pos.column + 1].get_type() == PT_EMPTY)
		{
			Move move(pos);
			move.set_original(board[pos.row][pos.column]);
			if (TURN == WHITE)
			{
				move.add_step(Position(pos.row + 1, pos.column + 1));
				move.set_become(pos.row == 6 ? Piece(WHITE_QUEEN) : Piece(WHITE_SIMPLE));
			}
			else
			{
				move.add_step(Position(pos.row - 1, pos.column + 1));
				move.set_become(pos.row == 1 ? Piece(BLACK_QUEEN) : Piece(BLACK_SIMPLE));
			}
			moves.emplace(std::move(move));
		}
		if (pos.column > 0 && board[TURN == WHITE ? pos.row + 1 : pos.row - 1][pos.column - 1].get_type() == PT_EMPTY)
		{
			Move move(pos);
			move.set_original(board[pos.row][pos.column]);
			if (TURN == WHITE)
			{
				move.add_step(Position(pos.row + 1, pos.column - 1));
				move.set_become(pos.row == 6 ? Piece(WHITE_QUEEN) : Piece(WHITE_SIMPLE));
			}
			else
			{
				move.add_step(Position(pos.row - 1, pos.column - 1));
				move.set_become(pos.row == 1 ? Piece(BLACK_QUEEN) : Piece(BLACK_SIMPLE));
			}
			moves.emplace(std::move(move));
		}
	}
	for (int i = 0; i < board.piece_count[turn_queen(TURN)]; ++i)
	{
		const auto& pos = board.piece_list[turn_queen(TURN)][i];
		constexpr int dx[4] = { 1, 1, -1, -1 }, dy[4] = { 1, -1, 1, -1 };
		for (size_t dir = 0; dir < 4; ++dir)
			for (int r = pos.row + dy[dir], c = pos.column + dx[dir]; r < 8 && c < 8 && r >= 0 && c >= 0
				&& board[r][c].get_type() == PT_EMPTY; r += dy[dir], c += dx[dir])
			{
				Move move(pos);
				move.add_step(Position(r, c));
				move.set_original(board[pos.row][pos.column]);
				move.set_become(TURN == WHITE ? Piece(WHITE_QUEEN) : Piece(BLACK_QUEEN));
				moves.emplace(std::move(move));
			}
	}
}