! ! ! ***** DELETE CHARACTER ***** ! PROCEDURE fred$delete_char LOCAL temp_line; if MARK(none) = END_OF(CURRENT_BUFFER) then MESSAGE ("Attempt to move past the end of buffer"); else fred$x_deleted_char := ERASE_CHARACTER (1); if (fred$x_deleted_char = eve$kt_null) then fred$x_deleted_char := ASCII(10); temp_line := CURRENT_LINE; MOVE_HORIZONTAL (1); if (MARK(none) <> END_OF(current_buffer)) or (LENGTH(temp_line) = 0) then APPEND_LINE; else MOVE_HORIZONTAL (-1); endif; endif; endif; ENDPROCEDURE; ! ! ! ***** UNDELETE CHARACTER ***** ! PROCEDURE fred$undelete_char if fred$x_deleted_char <> ASCII(10) then COPY_TEXT (fred$x_deleted_char); else SPLIT_LINE; endif; MOVE_HORIZONTAL (-1); ENDPROCEDURE; ! ! ! ***** BACKSPACE CHARACTER ***** ! Delete previous character. ! Stolen from SYS$LIBRARY:EVESECINI.TPU. ! PROCEDURE fred$backspace LOCAL this_position; ! Marker for current cursor position this_position := MARK (none); ! If we don't mark this position now ! we'll get funny results later ! if cursor is beyond end of line. if CURRENT_WINDOW = eve$command_window then if GET_INFO (CURRENT_BUFFER, eve$kt_offset_column) <= (eve$x_command_prompt_length + 1) then RETURN; endif; endif; if GET_INFO (CURRENT_BUFFER, eve$kt_offset_column) <= GET_INFO (CURRENT_BUFFER, eve$kt_left_margin) then eve$append_line; else if GET_INFO (CURRENT_BUFFER, eve$kt_mode) = insert then fred$x_deleted_char := ERASE_CHARACTER (-1); else if CURRENT_CHARACTER = eve$kt_null then fred$x_deleted_char := ERASE_CHARACTER (-1); else MOVE_HORIZONTAL (-1); if CURRENT_CHARACTER <> ASCII (9) then COPY_TEXT (" "); MOVE_HORIZONTAL (-1); else fred$x_deleted_char := ERASE_CHARACTER (1); endif; endif; endif; endif; ENDPROCEDURE;