! ----- [LOMASKY.EVE]NO_FOUND_REVERSE.TPU$COMMAND -----
!
! ----- Modified eve$find_target in EVE$CORE.TPU to skip the -----
! ----- "Found in reverse direction - Go there?" prompt -----
!
procedure eve$find_target ! Find subprocedure
    (how_exact,
     replacing,
     move_flag;
     old_find)
  ! Search for eve$x_target in the current direction.  If not found in the
  ! current direction look in the opposite direction, but do not go
  ! there without prompting the user.
  ! Returns range if eve$x_target found, otherwise returns false.
  !
  ! Parameters:
  !	how_exact		eve$x_find_exact or eve$x_find_no_exact - input
  !	replacing		1 = called by eve_replace: allow a
  !				    match at current cursor position and
  !				    return if no string found
  !				2 = called by wildcard_find
  !				0 = called by eve_find - input
  !	move_flag		1 = position to found string
  !				0 = don't position to found string - input
  !	old_find		1 = called by eve$find - optional input

  local   saved_mark,		! Marker for current cursor position
	text_mark,		! Marker for current text position
	other_direction,	! Keyword for opposite direction
	find_range,		! Range returned by search
	status,			! Result of set (widget)
	leading_whitespace,	! Boolean for including leading whitespace
	the_prompt,		! Prompt for going in other direction
	find_reply,		! Reply to inquiry about changing direction
	change_direction_key,	! Keyword for key used to end find_reply
	saved_direction;	! Direction upon entry

  on_error
    [TPU$_CONTROLC]:
	if (saved_direction <> current_direction) and
	    (get_info (saved_direction, "type") = KEYWORD)
	then
	    set (saved_direction, current_buffer);
	endif;
	eve$$restore_position (saved_mark);
	eve$learn_abort;
	abort;
    [OTHERWISE]:
	if (saved_direction <> current_direction) and
	    (get_info (saved_direction, "type") = KEYWORD)
	then
	    set (saved_direction, current_buffer);
	endif;
	eve$$restore_position (saved_mark);
  endon_error;

  saved_direction := current_direction;
  saved_mark := mark (FREE_CURSOR);	! mark original position
  position (TEXT);	! snap cursor to text
  text_mark := mark (NONE);

  if current_direction = FORWARD
  then
    if saved_mark <> end_of (current_buffer)
    then
	find_range := eve$search (eve$x_target, FORWARD, how_exact,
				  eve$$x_state_array
				  {eve$$k_leading_whitespace},
				  replacing);
    else
	find_range := 0;
    endif;
  else
    if saved_mark <> beginning_of (current_buffer)
    then
	find_range := eve$search (eve$x_target, REVERSE, how_exact,
				  eve$$x_state_array
				  {eve$$k_leading_whitespace},
				  replacing);
    else
	find_range := 0;
    endif;
  endif;

  if find_range = 0		! didn't find in original direction
  then
    if replacing = 1
    then
	position (saved_mark);
	return (FALSE);
    else
	if learn_abort		! Don't look in opposite dir if in LEARN SEQ
	then
	    eve$message (EVE$_FINDFAIL);
	    eve$message (EVE$_LEARNABORTBIG);
	    position (saved_mark);
	    return (FALSE);
	endif;
	if get_info (eve$x_target, "type") = STRING
	then
	  eve$message (EVE$_STRNOTFOUND, 0, eve$x_target);
	else
	  eve$message (EVE$_STRNOTFOUND, 0, eve$x_printable_target);
	endif;
	position (saved_mark);
	return (0);
    endif;
  else
  %if eve$x_option_decwindows
  %then
    if eve$x_decwindows_active
    then
	eve$$set_responder (eve$$k_find_each_yes,
			    "eve$invalid_event(" +
			    str (eve$$k_find_each_yes) + ")");
    endif;
  %endif
    if move_flag
    then
	eve$position_in_middle (beginning_of (find_range));
    endif;
    return (find_range);
  endif;

endprocedure;
