def _rl_char_search_internal(count, dir, smbchar, len)
pos = @rl_point
inc = (dir < 0) ? -1 : 1
while (count!=0)
if ((dir < 0 && pos <= 0) || (dir > 0 && pos >= @rl_end))
rl_ding()
return -1
end
pos = (inc > 0) ? _rl_find_next_mbchar(@rl_line_buffer, pos, 1, MB_FIND_ANY) :
_rl_find_prev_mbchar(@rl_line_buffer, pos, MB_FIND_ANY)
begin
if (_rl_is_mbchar_matched(@rl_line_buffer, pos, @rl_end, smbchar, len)!=0)
count-=1
if (dir < 0)
@rl_point = (dir == BTO) ? pos+1 : pos
else
@rl_point = (dir == FTO) ? pos-1 : pos
end
break
end
prepos = pos
end while ((dir < 0) ? (pos = _rl_find_prev_mbchar(@rl_line_buffer, pos, MB_FIND_ANY)) != prepos :
(pos = _rl_find_next_mbchar(@rl_line_buffer, pos, 1, MB_FIND_ANY)) != prepos)
end
0
end