! LSE$KEY.TPU !************************************************************************* ! * ! © Copyright 2005 Hewlett-Packard Development Company, L.P. * ! * ! Confidential computer software. Valid license from HP required for * ! possession, use or copying. Consistent with FAR 12.211 and 12.212, * ! Commercial Computer Software, Computer Software Documentation, and * ! Technical Data for Commercial Items are licensed to the U.S. * ! Government under vendor's standard commercial license. * ! * !************************************************************************* ! !++ ! FACILITY: ! VAX Language-Sensitive Editor ! ! ABSTRACT: ! This file contains routines to support the special keys for ! Portable LSE grammar. ! ! ENVIRONMENT: ! Portable/LSE ! ! Author: Norman M. Chan, Technical Languages and Environments ! Linda Rose Haley, Technical Languages and Environments ! ! CREATION DATE: 09-October-1990 ! ! NOTE - FOR ADDING PROCEDURES ! ! The following is a documentation template which is used with PDF to ! create documentation. When creating a new procedure, copy the template ! above the procedure. The information will be supplied by the documentation ! group. !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ! MODIFIED BY: ! ! X3.2 NMC 09-Oct-90 New Module ! X3.2-1 NMC 10-Oct-90 Added lse$key_kp0, lse$key_kp1. ! Deleted lse$key_grave_accent. ! X3.2-2 NMC 12-Oct-90 Removed lse_move_by_xxx_line routines and use in ! line code for lse$key_kp0 and lse$key_kp1. ! X3.2-3 AVH 12-Oct-90 Added lse$key_gold_equals procedure. ! X3.2-4 NMC 18-Oct-90 Added lse$key_kp1. ! X3.2-5 NMC 21-Oct-90 Added lse$key_kp3. ! X3.2-6 LRH 23-Oct-90 Added lse$key_f12 ! X3.2-7 NMC 25-Oct-90 Added lse$key_kp7, lse$key_kp8. ! X3.2-8 LRH 16-Nov-90 Added lse$key_f14, lse$key_enter, lse$key_ctrla ! X3.2-9 NMC 16-Nov-90 Added lse$key_gold_return, lse$key_gold_kp0 ! Added error trap for all routines ! X3.2-10 LRH 16-NOV-90 Change lse$key_enter to lse$eve_key_enter ! X3.2-11 DAS 06-DEC-90 Added LSE$KEY_CTRL_G because of SCA support ! X3.2-12 NMC 13-DEC-90 Added lse$key_e3, lse$key_e4, lse$key_return ! X3.2-13 NMC 27-DEC-90 Modified lse$key_e4 to call lse_go_to_source ! X3.2-14 DEC 16-JAN-91 Change lse_go_to_source to lse_goto_source ! X3.2-15 NMC 22-JAN-91 Modified lse$key_e4 and lse$key_return to use ! lse$$delete_created_show_window. ! Fixed name in lse$eve_key_enter error trap. ! X3.2-16 LRH 12-Feb-91 Made lse$key_ctrl_a, lse$key_enter, lse$key_f14 ! use new grammar. ! X4.0-1 WC3 09-Apr-91 Fixed lse$post_command_proc call in lots of ! procedures ! Added show list support to ! lse$key_ctrl_f ! lse$key_ctrl_b ! Missing error traps ! lse$key_e3 ! Removed goto buffer support from lse$key_e4 ! ! X4.0-2 WC3 29-Apr-91 Restore select key goto buffer suport ! Change lse$is_show_list to return a boolean ! Make e3 key support general for show lists ! X4.0-3 WC3 15-May-91 Portable language consistency ! X4.0-4 WC3 13-Jun-91 Prompting consistency ! X4.0-5 DAS 1-Jul-91 Expect LSE$_UNMODIFIABLE in LSE$KEY_GOLD_KP0 ! X4.0-6 WC3 11-Jul-91 Command prompt support, Mouse support ! X4.0-7 WC3 19-Jul-91 Add poor mans SCA integration via global select ! X4.0-8 WC3 24-Jul-91 Protect M1CLICK from M1DOWN never happening ! X4.0-9 SHE 29-Jul-91 Added procedures for Motif key binding support. ! Removed lse$$key_get_selection. ! X4.0-10 WC3 29-Jul-91 Support m1click in command window to use ! old style command window ! X4.0-11 SHE 30-Jul-91 Modified lse$key_m3down to use the correct ! parent for popups, and to not use lse$$menu_position. ! X4.0-12 SHE 01-Aug-91 Removed UPDATE from lse$key_m2down_help_modified ! X4.0-13 WC3 05-Aug-91 Fix lse$key_gold_help to use HELP/INDICATED ! when the command language is set to VMSCLI ! x4.0-14 SHE 08-Aug-01 Modified selection methods in m1clickn and ! shift-m1 ! X4.0-15 WC3 08-Aug-91 Fix several remove key bugs for show lists ! X4.0-16 WC3 12-Aug-91 Remove use of eve$parser_dispatch ! X4.0-17 DAS 14-Aug-91 SteamLf this file ! X4.0-18 SHE 20-Aug-91 Use lse$$get_paste_buffer_name ! X4.0-19 SHE 22-Aug-91 Added missing declaration for begin_mark within ! lse$key_m1click4 ! X4.0-20 WC3 15-Aug-91 Remove show window manipulation from lse$key_e4 ! Add lse$key_up, lse$key_down, lse$key_delete, ! lse$key_comma, with special command buffer code ! M2CLICK in the status line ! Make lse$key_gold_do work ! X4.0-21 DAS 30-Aug-91 If SHOW LIST has registered GOTO SOURCE, then do ! GOTO SOURCE on double click ! X4.0-22 SHE 04-Sep-91 Added lse$key_cut_to_clipboard, lse$key_copy_to_clipboard, ! and lse$paste_from_clipboard ! Renamed lse$key_* procedures to meaningful names. ! X4.0-23 LRH 04-Sep-91 Add lse$key_help ! X4.0-24 WC3 11-Sep-91 Undo X4.0-21, only commented out ! X4.0-25 NMC 12-Sep-91 Cleanup lse$key_e3 and lse$key_e4 ! X4.0-26 WC3 13-Sep-91 Correct interface to eve$current_indicator ! X4.0-27 LRH 16-Sep-91 add tpu$_selrangezero to lse$key_m2click ! X4.0-28 WC3 25-Sep-91 Fix lse$$key_mouse_terminate to update after ! the scroll margins have been turned back on ! Position to mouse for multi clicks ! X4.0-29 WC3 07-Oct-91 MODIFY M1CLICK to unhighlight the LSE> prompt ! when moving from command window to user window ! X4.0-30 WC3 15-Oct-91 Added TPU$_NOTMODIFIABLE to lse$key_m2click ! X4.0-31 SHE 25-Oct-91 Scroll margins were being lost due to missing ! lse$$key_mouse_terminate calls. ! X4.0-32 DAS 27-Oct-91 Misdeclared popup_parent ! X4.0-33 WC3 31-Oct-91 Add comand line support for M2UP ! Protect against lse$$x_m1down_mark begin unspecified ! It is possible to get UP and CLICKs w/o DOWN ! X4.0-34 WC3 21-Nov-91 Add lse$key_change_buffer_direction ! Ignore m1click# in status line ! Change lse$$k_pkeypad_vmscli to lse$$k_pkeypad_vmslse ! X4.0-36 WC3 19-Dec-91 Fix lse$key_recall_command to handle nothing in ! the buffer. ! X4.0-37 WC3 03-Jan-91 Separate command prompt display from data ! Protect mouse routines from select being off screen ! Use lse$mouse_mark to improve drag performance ! X4.0-38 WC3 23-Jan-91 Complete EVE's interface to eve$$indicator_dispatch ! X4.0-39 WC3 28-Jan-92 Reverse video LSE> when click in the command window ! X4.0-40 WC3 10-Feb-92 Reverse video LSE> whenever we end up in the ! command window. ! X4.0-41 WC3 10-Feb-92 Support GOTO DECLARATION/CONTEXT/INDICATED on ! GOLD/CTRL_D ! X4.0-42 SHE 21-Feb-92 Call vmssca_ and vmscms_ procedures where ! appropriate. ! X4.0-43 WC3 22-Feb-92 Correct incorrect uses of TPU$_NOTMODIFIABLE ! X4.0-44 WC3 03-Mar-92 Set the lse$$x_last_mouse... variables more ! faithfully ! M1UP must establish its position because prompting ! moves it around ! X4.0-45 SHE 17-Apr-92 Fixed lse$key_open_line to set the buffer's ! indentation level to 'current' ! X4.0-46 SHE 25-Apr-92 Added lse$$save_key, lse$$restore_key ! X4.0-47 WC3 27-Apr-92 Change call to vmssca_goto_context_declaration ! X4.0-48 WC3 08-May-92 Added missing local declarations ! X4.0-49 SHE 10-Jun-92 Added lse$key procedures for CMS-related menu items ! Don't zero scroll margins for m3-down ! X4.0-50 SHE 02-Sep-92 Check for OPEN_VMS_ALPHA operating_system ! X4.0-51 WC3 23-Sep-92 Support SET(MOUSE,ON) better ! Mouse to CMD window before first DO key ! MB2 requires DECwindows ! X4.2 RAM 28-Sep-94 Add lse$key procedures for hyperhelp ! ! X4.3-1 RKB 31-Aug-94 Support for Undo commands procedure lse$key_module_ident return "4.7-4" endprocedure; procedure lse$key_next_or_prev_start_of_line ! ! LSE$KEY_NEXT_OR_PREV_START_OF_LINE ! ! This procedure is the dispatch routine for the special key "KP0" ! defined in key.b32. It goes to the the next beginning of a line ! depending on the current direction of the buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_next_or_prev_start_of_line"); ENDON_ERROR; if current_direction = FORWARD then return lse_next_start_of_line; else return lse_previous_start_of_line; endif; endprocedure; procedure lse$key_next_or_prev_end_of_line ! ! LSE$KEY_NEXT_OR_PREV_END_OF_LINE ! ! This procedure is the dispatch routine for the special key "KP2" ! defined in key.b32. It goes to the the next end of a line ! depending on the current direction of the buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_next_or_prev_end_of_line"); ENDON_ERROR; if current_direction = FORWARD then return lse_next_end_of_line; else return lse_previous_end_of_line; endif; endprocedure; procedure lse$key_split_or_one_window ! ! LSE$KEY_SPLIT_OR_ONE_WINDOW ! ! This procedure is the dispatch routine for the key "GOLD=" ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! This procedure implements the LSE CHANGE WINDOW_MODE command. ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_split_or_one_window"); ENDON_ERROR; If eve$x_number_of_windows = 1 then return lse_new_window (2); else return lse_one_window; endif; endprocedure; procedure lse$key_next_or_prev_word ! ! LSE$KEY_DIRECTIONAL_NEXT_WORD ! ! This procedure is the dispatch routine for the special key "KP1" ! defined in key.b32. It goes to the the next or previous word ! depending on the current direction of the buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_next_or_prev_word"); ENDON_ERROR; if current_direction = FORWARD then return lse_next_word; else return lse_previous_word; endif; endprocedure; procedure lse$key_next_or_prev_char ! ! LSE$KEY_NEXT_OR_PREV_CHAR ! ! This procedure is the dispatch routine for the special key "KP3" ! defined in key.b32. It goes to the the next or previous character horizontally ! depending on the current direction of the buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_next_or_prev_char"); ENDON_ERROR; if current_direction = FORWARD then return lse_next_character; else return lse_previous_character; endif; endprocedure; procedure lse$key_start_or_end_of_line ! ! LSE$KEY_START_OR_END_OF_LINE ! ! This procedure is the dispatch routine for the special key "F13" ! defined in key.b32. It goes to the the next end of line or the previous ! start of line depending on the current direction of the buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_start_or_end_of_line"); ENDON_ERROR; if current_direction = FORWARD then return lse_next_end_of_line; else return lse_previous_start_of_line; endif; endprocedure; procedure lse$key_next_or_prev_page ! ! LSE$KEY_NEXT_OR_PREV_PAGE ! ! This procedure is the dispatch routine for the special key "KP7" ! defined in key.b32. It goes to the the next or previous page ! depending on the current direction of the buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_next_or_prev_page"); ENDON_ERROR; if current_direction = FORWARD then return lse_next_page; else return lse_previous_page; endif; endprocedure; procedure lse$key_next_or_prev_screen ! ! LSE$KEY_NEXT_OR_PREV_SCREEN ! ! This procedure is the dispatch routine for the special key "KP8" ! defined in key.b32. It goes to the the next or previous screen ! depending on the current direction of the buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_next_or_prev_screen"); ENDON_ERROR; if current_direction = FORWARD then return lse_next_screen; else return lse_previous_screen; endif; endprocedure; procedure lse$key_insert_or_overstrike ! ! LSE$KEY_INSERT_OR_OVERSTRIKE ! ! This procedure is the dispatch routine for the special key "F14" ! defined in key.b32. It toggles the insert/overstrike mode. Essentially ! this is the same code as lse$key_enter and lse$key_ctrl_a, in order to keep ! the one-to-one correspondence between key and key routine. This is ! necessary so that the user may change one key routine without affecting ! the other two routines. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_insert_or_overstrike"); ENDON_ERROR; IF get_info(current_buffer, "mode") = OVERSTRIKE THEN lse_set_buffer_text (insert) ELSE lse_set_buffer_text (overstrike) ENDIF; lse$$update_status_lines; return; endprocedure; procedure lse$key_enter_line_context_free ! ! LSE$KEY_ENTER_LINE_CONTEXT_FREE ! ! This procedure is the dispatch routine for the special key "gold-return" ! defined in key.b32. It enters a new text line regardless of whether the ! current position is in a comment block. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$post_command_proc; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_enter_line_context_free"); ENDON_ERROR; lse$key_enter_line_context_free := lse$enter_line(FALSE, FALSE); lse$post_command_proc; endprocedure; procedure lse$key_open_line ! ! LSE$KEY_OPEN_LINE ! ! This procedure is the dispatch routine for the special key "gold-kp0" ! defined in key.b32. It enters a new line and put the cursor at the end of the ! current line. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [LSE$_UNMODIFIABLE]: eve$message (error_text); eve$learn_abort; lse$post_command_proc; return false; [OTHERWISE]: lse$post_command_proc; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_open_line"); ENDON_ERROR; set (lse$indentation, current_buffer, lse$current); lse$key_gold_kp0 := lse$enter_line(TRUE, TRUE); lse$post_command_proc; endprocedure; procedure lse$key_prev_error_or_query ! ! LSE$KEY_PREV_ERROR_OR_QUERY ! ! This procedure is the dispatch routine for the special key "CTRL-B" ! defined in key.b32. It goes to the the previous error or query, ! depending on whether the user is a current review is active. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! LOCAL hlt_buffer, hlt_range; ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_prev_error_or_query"); ENDON_ERROR; hlt_buffer := lse$$current_highlight_buffer; if lse$is_show_list( hlt_buffer ) then lse$$pop_position_buf( GET_INFO( hlt_buffer, 'name' ), lse$$k_show_buffer_prefix); hlt_range := lse$shlst_hlt_range( MARK( NONE ) ); IF GET_INFO( hlt_range, 'type' ) = RANGE THEN POSITION( BEGINNING_OF( hlt_range ) ); LSE$MOVE_HORIZONTAL( -1 ); POSITION( lse$shlst_hlt_range( MARK( NONE ) ) ); ENDIF; lse$post_command_proc; else return vmssca_previous_step; endif; endprocedure; procedure lse$key_next_error_or_query ! ! LSE$KEY_NEXT_ERROR_OR_QUERY ! ! This procedure is the dispatch routine for the special key "CTRL-F" ! defined in key.b32. It goes to the the next error or query, ! depending on whether the user is a current review is active. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! LOCAL hlt_buffer, hlt_range; ON_ERROR [OTHERWISE]: lse$$pop_position; lse$post_command_proc; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_next_error_or_query"); ENDON_ERROR; hlt_buffer := lse$$current_highlight_buffer; if lse$is_show_list( hlt_buffer ) then lse$$pop_position_buf( GET_INFO( hlt_buffer, 'name' ), lse$$k_show_buffer_prefix); hlt_range := lse$shlst_hlt_range( MARK( NONE ) ); IF GET_INFO( hlt_range, 'type' ) = RANGE THEN POSITION( END_OF( hlt_range ) ); LSE$MOVE_HORIZONTAL( 1 ); ENDIF; lse$post_command_proc; else return vmssca_next_step; endif; endprocedure; procedure lse$key_goto_source ! ! LSE$KEY_GOTO_SOURCE ! ! This procedure is the dispatch routine for the special key "CTRL-G" ! defined in key.b32. It supports the VMS GOTO SOURCE command. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_goto_source"); ENDON_ERROR; return vmssca_goto_source; endprocedure; procedure lse$key_collapse ! ! ! This procedure is the dispatch routine for the special key "FS". ! It supports the VMS COLLAPSE command. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_collapse"); ENDON_ERROR; return vmssca_collapse; endprocedure; procedure lse$key_expand ! ! ! This procedure is the dispatch routine for the special key "US". ! It supports the VMS EXPAND command. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_expand"); ENDON_ERROR; return vmssca_expand; endprocedure; procedure lse$key_remove ! ! LSE$KEY_REMOVE ! ! This procedure is the dispatch routine for the special key "REMOVE" ! It supports the VMS CUT/ERASE command when not in a buffer list buffer. It ! removes the buffer highlighted if current buffer is a buffer list buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! LOCAL out_range, saved_modifiable, saved_buffer, show_item, status; ON_ERROR [TPU$_NOEOBSTR]: ; [OTHERWISE]: lse$post_command_proc; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_remove"); ENDON_ERROR; IF lse$is_show_list(current_buffer) THEN IF lse$shlst_get_item( MARK( FREE_CURSOR ), show_item ) THEN saved_buffer := current_buffer; ! DELETE BUFFER may position to $MAIN IF lse$shlst_execute_registered_proc( MARK(FREE_CURSOR), lse$$k_reg_delete_proc, show_item ) THEN ! If we were successful in deleting the item, remove the line ! lse$buffer_util( saved_buffer ); ! DELETE BUFFER may position to $MAIN lse$shlst_collapse( MARK( FREE_CURSOR ) ); saved_modifiable := set(modifiable, current_buffer, on); erase( lse$shlst_hlt_range( MARK( FREE_CURSOR ) ) ); set(modifiable, current_buffer, saved_modifiable); lse$$highlight_show_list; lse$key_remove := true; lse$post_command_proc; RETURN; ENDIF; lse$buffer_util( saved_buffer ); ! DELETE BUFFER may position to $MAIN lse$post_command_proc; RETURN; ELSE lse$post_command_proc; RETURN; ENDIF; lse$post_command_proc; RETURN; ENDIF; lse$key_remove := lse_cut; lse$post_command_proc; endprocedure; procedure lse$key_select ! ! LSE$KEY_SELECT ! ! This procedure is the dispatch routine for the special key "SELECT" ! It supports the VMS SELECT command when not in a buffer list buffer. It ! displays the buffer highligted if current buffer is a buffer list buffer. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [TPU$_NOEOBSTR]: ; [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_select"); ENDON_ERROR; ! If current position is in the buffer list buffer, go to the appropriate ! source file when applicable. The window for buffer list buffer is ! deleted. Otherwise, do toggle select ! if lse$is_show_list(current_buffer) then if lse$shlst_get_registered_info( current_buffer, lse$$k_reg_show_keyword ) = lse$buffer_list then lse$key_select := lse_goto_source; return; endif; endif; lse$key_select := lse_select; endprocedure; procedure lse$key_return ! ! LSE$KEY_RETURN ! ! This procedure is the dispatch routine for the special key "RETURN". It ! deletes the current window and replaces any show window replaced buffer if in ! a show window. Otherwise, it supports the VMS "SET INDENTATION CURRENT" and ! ENTER LINE command in a non-show window. ! !doc_begin ! ! ONE LINE DEFINITION: ! «TBS» ! ! DESCRIPTION: ! «TBS» ! ! RELATED COMMANDS: ! «TBS» ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! «TBS» ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_return"); ENDON_ERROR; if lse$is_show(current_buffer) then lse$key_return := lse$delete_created_show_window; lse$post_command_proc; else set (lse$indentation, current_buffer, lse$current); lse$key_return := lse_enter_line; endif; endprocedure; procedure lse$key_cut_substitute (;buffer_name) ! !doc_begin ! ! ONE LINE DEFINITION: ! Erases the search string, replaces it with the contents of the buffer ! indicated, and finds the next occurrence of the string. ! ! RELATED COMMANDS: ! COPY ! COPY APPEND ! CUT ! CUT REPLACE ! PASTE ! ! EXAMPLE: ! «TBS» ! ! CATEGORY: ! Text ! !doc_end ! LOCAL the_buffer_name; ON_ERROR [OTHERWISE]: lse$post_command_proc; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_cut_substitute "); ENDON_ERROR; ! ! Get the paste buffer name from the user ! IF NOT LSE$PROMPT_STRING (buffer_name, the_buffer_name, '', '', lse$$get_paste_buffer_name) THEN lse$post_command_proc; RETURN false; ENDIF; ! ! Setup the paste buffer ! lse$$set_paste_buffer (the_buffer_name); ! ! Do the cut and substitute command ! lse$key_cut_substitute := lse$$substitute; lse$post_command_proc; endprocedure; procedure lse$key_cut_replace (;buffer_name) ! !doc_begin ! ! ONE LINE DEFINITION: ! Erases the selected text and replaces it with the contents of the ! indicated buffer. ! ! RELATED COMMANDS: ! COPY ! COPY APPEND ! CUT ! CUT APPEND ! CUT SUBSTITUTE ! PASTE ! ! CATEGORY: ! Text ! !doc_end ! LOCAL the_buffer_name; ON_ERROR [OTHERWISE]: lse$post_command_proc; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_cut_replace "); ENDON_ERROR; ! ! Get the paste buffer name from the user ! IF NOT LSE$PROMPT_STRING (buffer_name, the_buffer_name, '', '', lse$$get_paste_buffer_name) THEN lse$post_command_proc; RETURN false; ENDIF; ! ! Setup the paste buffer ! lse$$set_paste_buffer (the_buffer_name); ! ! Do the cut and replace command ! lse$key_cut_replace := lse$$replace; lse$post_command_proc; endprocedure; procedure lse$key_continuous_prompt ! !doc_begin ! ! ONE LINE DEFINITION: ! Continuous prompt ! !doc_end ! ON_ERROR [TPU$_EXECUTEFAIL]: RETURN false; [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_continuous_prompt "); ENDON_ERROR; ! Both old style prompting and cli parser ! IF (get_info (lse$system, "lse$cli_parser")) AND (lse$$x_use_keypad = lse$$k_pkeypad_vmslse) THEN lse$do_command ('DO/NOCONTINUE/LSE/PROMPT="' + lse$get_message_text(lse$_contlseprompt) + '> ' + '"'); ELSE lse$$x_sticky_command_prompt := true; MAP( lse$command_window, lse$command_buffer_display ); lse$$prompt_copy_command_prompt; ENDIF; RETURN true; endprocedure; procedure lse$key_recall_command ! !doc_begin ! ! ONE LINE DEFINITION: ! Recalls a previous LSE command, which you can edit and execute again. ! ! DESCRIPTION: ! ! CATEGORY: ! Editing ! !doc_end ! LOCAL default, response; ON_ERROR [TPU$_BEGOFBUF]: [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_recall_command"); ENDON_ERROR; IF (get_info (lse$system, "lse$cli_parser")) AND (lse$$x_use_keypad = lse$$k_pkeypad_vmslse) THEN ! V3.1 compatibility ! eve_recall; ELSE IF (current_window = lse$prompt_window) OR (current_window = lse$command_window) THEN lse$move_vertical( -1 ); ELSE lse_goto_command; lse$move_vertical( -1 ); position( line_end ); lse$$prompt_copy_command_prompt; ENDIF; ENDIF; endprocedure; procedure lse$key_find_occurrences ! !doc_begin ! ! ONE LINE DEFINITION: ! Find indicated ! !doc_end ! ON_ERROR [TPU$_EXECUTEFAIL]: RETURN false; [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_find_occurrences"); ENDON_ERROR; IF get_info (lse$system, "lse$cli_parser") THEN ! V3.1 compatibility ! LSE$DO_COMMAND ('FIND EXPAND INDICATED()'); ELSE lse_find_occurrences; ENDIF; RETURN true; endprocedure; procedure lse$key_goto_declaration ! !doc_begin ! ! ONE LINE DEFINITION: ! Goto Declaration ! !doc_end ! ON_ERROR [TPU$_EXECUTEFAIL]: RETURN false; [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_goto_declaration "); ENDON_ERROR; IF get_info (lse$system, "lse$cli_parser") THEN ! V3.1 compatibility ! vmssca_goto_indicated_declaration; ELSE lse_goto_declaration; ENDIF; RETURN true; endprocedure; procedure lse$key_goto_declaration_context ! !doc_begin ! ! ONE LINE DEFINITION: ! Context dependent goto declaration ! !doc_end ! LOCAL junk, saved_line, the_line, the_prompt; ON_ERROR [TPU$_EXECUTEFAIL]: RETURN false; [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_goto_declaration_context"); ENDON_ERROR; IF get_info (lse$system, "lse$cli_parser") THEN ! V3.1 compatibility ! vmssca_goto_context_declaration('/INDICATED'); ELSE IF eve$x_decwindows_active THEN IF LSE$$RESPOND_GLOBAL_SELECT( '_DEC_WORD' ) = '' THEN eve$message( lse$_notonid ); ELSE SET( GLOBAL_SELECT, SCREEN, PRIMARY ); junk := GET_GLOBAL_SELECT( "_DEC_SCA_DoSomething", "_DEC_SCA_ShowThisDeclarationInContext"); ENDIF; ELSE eve$message( lse$_nocrfmsg ); ENDIF; ENDIF; endprocedure; procedure lse$key_change_buffer_direction ! !doc_begin ! ! ONE LINE DEFINITION: ! Changes the current direction of the current buffer between ! forward and reverse. ! ! DESCRIPTION: ! The buffer's status line indicates whether the current ! direction is forward or reverse. The direction affects the operation ! of commands such as SEARCH and ERASE CHARACTER. ! ! RELATED COMMANDS: ! ERASE CHARACTER ! ERASE LINE ! ERASE PLACEHOLDER ! ERASE WORD ! SEARCH commands ! SET BUFFER DIRECTION ! SHOW BUFFER ! SUBSTITUTE ! WILDCARD EXACT SUBSTITUTE ! WILDCARD SEARCH ! WILDCARD SUBSTITUTE ! ! CATEGORY: ! Tailor ! !doc_end ! ON_ERROR [OTHERWISE]: lse$post_command_proc; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_change_buffer_direction"); ENDON_ERROR; if current_direction = FORWARD then lse$key_change_direction := lse_set_buffer_direction( reverse ); else lse$key_change_direction := lse_set_buffer_direction( forward ); endif; endprocedure; procedure lse$$key_prompt_not_safe ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_prompt_not_safe"); ENDON_ERROR; eve$message( lse$_prmtunsafe, 0, eve$key_name( LAST_KEY ) ); endprocedure; PROCEDURE lse$key_m1up ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1up" ); ENDON_ERROR; IF lse$$x_drag_in_progress = 0 THEN lse$key_m1click; ELSE IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN IF lse$$x_m1down_mark <> tpu$k_unspecified THEN ! Prompting moves the current position around ! lse$$key_position_mouse; eve$select_a_range (lse$$x_m1down_mark, MARK(FREE_CURSOR)); ENDIF; ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1down LOCAL indicator_width; ON_ERROR [TPU$_BADVALUE]: lse$$key_mouse_terminate; RETURN; [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1down" ); ENDON_ERROR; lse$$x_drag_in_progress := false; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! Save the info for later use ! lse$$x_m1down_window := lse$$x_last_mouse_window; lse$$x_m1down_column := lse$$x_last_mouse_column; lse$$x_m1down_row := lse$$x_last_mouse_row; eve$set_all_windows( SCROLLING, 0, 0 ); ! Handle push buttons ! IF lse$$x_m1down_row = 0 THEN eve$$x_mouse_window := lse$$x_m1down_window; eve$$x_mouse_row := lse$$x_m1down_row; eve$$x_mouse_column := lse$$x_m1down_column; IF eve$current_indicator( lse$$x_m1down_window, lse$$x_m1down_column, indicator_width ) <> 0 THEN SET( ACTIVE_AREA, lse$$x_m1down_window, lse$$x_m1down_column, lse$$x_m1down_row, indicator_width, 1 ); ENDIF; ENDIF; ! Mark the down position ! lse$$push_position; lse$$key_position_mouse; lse$$x_m1down_mark := MARK( FREE_CURSOR ); lse$$pop_position; ENDIF; lse$post_command_proc; ENDPROCEDURE; PROCEDURE lse$key_m1click ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! Deal with status line buttons ! IF lse$$x_last_mouse_row = 0 THEN eve$$x_mouse_window := lse$$x_last_mouse_window; eve$$x_mouse_column := lse$$x_last_mouse_column; eve$$x_mouse_row := lse$$x_last_mouse_row; eve$$x_pre_mb1_window := lse$$x_last_mouse_window; eve$$indicator_dispatch; lse$$key_mouse_terminate; RETURN; ENDIF; ! Do old style command line stuff if appropriate ! IF lse$$x_last_mouse_window = lse$command_window THEN IF (get_info (lse$system, "lse$cli_parser")) AND (lse$$x_use_keypad = lse$$k_pkeypad_vmslse) THEN ! The below is OK for portable LSE because CLI_PARSER being ! on is only meaningful on VMS. ! lse$do_command( 'DO/NOCONTINUE/LSE/PROMPT="' + lse$get_message_text(lse$_contlseprompt) + '> ' + '"'); ! This is a symptom fix. I don't understand why we are in ! the command window/buffer before we even get to the ! LSE$DO_COMMAND. In anycase, the below gets us out ! lse$$prompt_exit_command_window; lse$$key_mouse_terminate; RETURN; ENDIF; ! User may have done a TPU SET(MOUSE,ON) in which case ! lse$command_prompt isn't initialized ! IF GET_INFO( lse$command_prompt, 'type' ) <> RANGE THEN POSITION( lse$command_window ); lse$$prompt_copy_command_prompt; lse$command_prompt := CREATE_RANGE( BEGINNING_OF( lse$command_prompt ), END_OF( lse$command_prompt ), NONE ); ENDIF; ENDIF; ! Normal selection ! eve$clear_select_position; ! Position to the M1 down. Protecting against M1 down never happening ! IF lse$$x_m1down_window <> tpu$k_unspecified THEN POSITION( lse$$x_m1down_window ); ENDIF; IF lse$$x_m1down_mark <> tpu$k_unspecified THEN POSITION( lse$$x_m1down_mark ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click2 LOCAL begin_mark, saved_mode, temp; ON_ERROR [OTHERWISE]: eve$$x_state_array {eve$$k_command_line_flag} := saved_mode; lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click2" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! Deal with status line ! IF lse$$x_last_mouse_row = 0 THEN lse$$key_mouse_terminate; RETURN; ENDIF; ! Double clicks in a review buffers simply issue GOTO SOURCE ! command. ! IF lse$$is_review_window( lse$$x_last_mouse_window ) THEN saved_mode := eve$$x_state_array {eve$$k_command_line_flag}; eve$$x_state_array {eve$$k_command_line_flag} := eve$k_invoked_by_menu; lse_goto_source; eve$$x_state_array {eve$$k_command_line_flag} := saved_mode; lse$$key_mouse_terminate; RETURN; ENDIF; ! Double clicks in a query buffer simply issue GOTO SOURCE ! command. ! IF lse$$is_query_window ( lse$$x_last_mouse_window ) THEN saved_mode := eve$$x_state_array {eve$$k_command_line_flag}; eve$$x_state_array {eve$$k_command_line_flag} := eve$k_invoked_by_menu; ! This is OK in portable LSE because you can only get a QUERY ! buffer on VMS. The procedure isn't based on the buffer name ! but on internal stuff that can only be activated by callable SCA ! vmssca_goto_source; eve$$x_state_array {eve$$k_command_line_flag} := saved_mode; lse$$key_mouse_terminate; RETURN; ENDIF; ! Double click in a show window is expand or goto source ! IF lse$$is_show_list_window( lse$$x_last_mouse_window ) THEN saved_mode := eve$$x_state_array {eve$$k_command_line_flag}; eve$$x_state_array {eve$$k_command_line_flag} := eve$k_invoked_by_menu; ! Uncomment the following to make double click do GOTO SOURCE in the ! SHOW BUFFER and SHOW MARK buffers. ! ! IF lse$shlst_get_registered_info (mark(none), ! lse$$k_reg_goto_source_proc) ! <> tpu$k_unspecified ! THEN ! lse_goto_source; ! ELSE IF lse$shlst_new_range( mark(none) ) = 0 THEN lse_expand; ELSE lse_collapse; ENDIF; ! ENDIF; eve$$x_state_array {eve$$k_command_line_flag} := saved_mode; lse$$key_mouse_terminate; RETURN; ENDIF; ! Placeholder ! IF lse$is_placeholder (1, 1) THEN saved_mode := eve$$x_state_array {eve$$k_command_line_flag}; eve$$x_state_array {eve$$k_command_line_flag} := eve$k_invoked_by_menu; lse_expand; eve$$x_state_array {eve$$k_command_line_flag} := saved_mode; lse$$key_mouse_terminate; RETURN; ENDIF; ! Select the current word ! temp := eve$current_word; IF temp <> 0 THEN ! Walk backwards to remove trailing spaces ! POSITION( BEGINNING_OF( temp ) ); eve$clear_select_position; begin_mark := MARK(FREE_CURSOR); POSITION( END_OF( temp ) ); LOOP EXITIF ( (CURRENT_CHARACTER <> ASCII(32)) AND (CURRENT_CHARACTER <> ASCII( 9)) ) OR ( BEGINNING_OF( temp ) >= MARK( FREE_CURSOR ) ); lse$move_horizontal( -1 ); ENDLOOP; lse$move_horizontal(1); eve$select_a_range (begin_mark, MARK (FREE_CURSOR)); IF lse$$x_m1down_mark <> tpu$k_unspecified THEN POSITION( lse$$x_m1down_mark ); ENDIF; lse$$key_mouse_terminate; RETURN; ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click3 LOCAL begin_mark; ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click3" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! Deal with status line ! IF lse$$x_last_mouse_row = 0 THEN lse$$key_mouse_terminate; RETURN; ENDIF; POSITION( LINE_BEGIN ); eve$clear_select_position; begin_mark := MARK(FREE_CURSOR); POSITION( LINE_END ); eve$select_a_range (begin_mark, MARK (FREE_CURSOR)); IF lse$$x_m1down_mark <> tpu$k_unspecified THEN POSITION( lse$$x_m1down_mark ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click4 LOCAL begin_mark, temp_range; ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click4" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! Deal with status line ! IF lse$$x_last_mouse_row = 0 THEN lse$$key_mouse_terminate; RETURN; ENDIF; lse$$key_position_mouse; temp_range := SEARCH_QUIETLY( eve$pattern_empty_line, REVERSE, EXACT ); IF temp_range <> 0 THEN POSITION( END_OF( temp_range ) ); ELSE POSITION( BEGINNING_OF( current_buffer ) ); ENDIF; eve$clear_select_position; begin_mark := MARK (FREE_CURSOR); temp_range := SEARCH_QUIETLY( eve$pattern_empty_line, FORWARD, EXACT ); IF temp_range <> 0 THEN POSITION( BEGINNING_OF( temp_range ) ); ELSE POSITION( END_OF( current_buffer ) ); endif; eve$select_a_range (begin_mark, MARK (FREE_CURSOR)); IF lse$$x_m1down_mark <> tpu$k_unspecified THEN POSITION( lse$$x_m1down_mark ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click5 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click5" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! Deal with status line ! IF lse$$x_last_mouse_row = 0 THEN lse$$key_mouse_terminate; RETURN; ENDIF; eve$clear_select_position; lse_select_all; IF lse$$x_m1down_mark <> tpu$k_unspecified THEN POSITION( lse$$x_m1down_mark ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1drag ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1drag" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN IF lse$$x_last_mouse_row <> 0 THEN IF lse$$x_m1down_window = lse$$x_last_mouse_window THEN IF lse$$x_drag_in_progress = false THEN POSITION( lse$$x_m1down_window ); IF lse$$x_m1down_mark <> tpu$k_unspecified THEN POSITION( lse$$x_m1down_mark ); ENDIF; eve$clear_select_position; lse_select; ENDIF; lse$$x_drag_in_progress := true; POSITION( lse$$x_last_mouse_window ); lse$$key_position_mouse; UPDATE( CURRENT_WINDOW ); ENDIF; ENDIF; ENDIF; ENDPROCEDURE; PROCEDURE lse$key_m1up_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1up_shift_modified" ); ENDON_ERROR; IF lse$$x_m1down_mark <> tpu$k_unspecified THEN eve$select_a_range (lse$$x_m1down_mark, MARK(FREE_CURSOR)); ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1down_shift_modified LOCAL selection_anchor, selection_range, temp_range; ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1down_shift_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! Save the info for later use ! lse$$x_m1down_window := lse$$x_last_mouse_window; lse$$x_m1down_column := lse$$x_last_mouse_column; lse$$x_m1down_row := lse$$x_last_mouse_row; eve$set_all_windows( SCROLLING, 0, 0 ); ! Get the selection before moving ! IF eve$x_select_position <> 0 THEN lse$$push_position; POSITION( GET_INFO( eve$x_select_position, 'buffer' ) ); selection_range := eve$selection (FALSE,,,,FALSE); lse$$pop_position; ELSE ! Mark the down position ! lse$$push_position; lse$$key_position_mouse; lse$$x_m1down_mark := MARK( FREE_CURSOR ); lse$$pop_position; RETURN; ENDIF; ! Selection must be in the same buffer to proceed ! IF GET_INFO( lse$$x_m1down_window, 'buffer' ) <> GET_INFO( selection_range, 'buffer' ) THEN ! Mark the down position ! lse$$push_position; lse$$key_position_mouse; lse$$x_m1down_mark := MARK( FREE_CURSOR ); lse$$pop_position; RETURN; ENDIF; ! Establish the anchor ! IF BEGINNING_OF( selection_range ) = MARK( FREE_CURSOR ) THEN selection_anchor := END_OF( selection_range ); ELSE selection_anchor := BEGINNING_OF( selection_range ); ENDIF; ! Move to the new position ! lse$$key_position_mouse; ! Do the balanced beam magic ! IF GET_INFO( selection_range, 'type' ) = RANGE THEN temp_range := CREATE_RANGE( BEGINNING_OF( selection_range ), MARK( FREE_CURSOR ), NONE); IF GET_INFO( MARK( FREE_CURSOR ), "within_range", selection_range ) THEN IF LENGTH( temp_range ) > (LENGTH( selection_range ) / 2) THEN lse$$x_m1down_mark := BEGINNING_OF( selection_range ); ELSE lse$$x_m1down_mark := END_OF( selection_range ); ENDIF; ELSE lse$$x_m1down_mark := selection_anchor; ENDIF; ! Extablish the select range ! POSITION( lse$$x_m1down_mark ); eve$clear_select_position; lse_select; lse$$key_position_mouse; ENDIF; ENDIF; ENDPROCEDURE; PROCEDURE lse$key_m1click_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click2_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click2_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click3_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click3_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click4_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click4_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click5_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click5_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1drag_shift_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1drag_shift_modified" ); ENDON_ERROR; lse$key_m1drag; ENDPROCEDURE; PROCEDURE lse$key_m1up_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1up_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1down_alt_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1down_alt_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m1click_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click2_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click2_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click3_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click3_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click4_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click4_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click5_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click5_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1drag_alt_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1drag_alt_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m1up_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1up_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1down_ctrl_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1down_ctrl_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m1click_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click2_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click2_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click3_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click3_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click4_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click4_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click5_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click5_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1drag_ctrl_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1drag_ctrl_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m1up_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1up_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1down_help_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1down_help_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m1click_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click2_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click2_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click3_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click3_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click4_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click4_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1click5_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1click5_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m1drag_help_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m1drag_help_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m2up ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2up" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN SET( GLOBAL_SELECT, SCREEN, SECONDARY ); IF GET_INFO (SCREEN, "input_focus") THEN IF lse$$x_m2drag_range = TPU$K_UNSPECIFIED THEN lse$key_m2click; ELSE lse$$eve_insert_text( lse$$x_m2drag_range ); lse$$x_m2drag_range := TPU$K_UNSPECIFIED; UPDATE( lse$$x_m2down_window ); IF CURRENT_WINDOW = lse$command_window THEN lse$$prompt_copy_command_prompt; ENDIF; ENDIF; ELSE SEND_CLIENT_MESSAGE( STUFF_SELECTION ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2down ON_ERROR [OTHERWISE]: lse$$pop_position; lse$$pop_position; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2down" ); ENDON_ERROR; lse$$x_drag_in_progress := false; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! Save the info for later use ! lse$$x_m2down_window := lse$$x_last_mouse_window; lse$$x_m2down_column := lse$$x_last_mouse_column; lse$$x_m2down_row := lse$$x_last_mouse_row; ! Range may be around from UP that was lost because the user went ! off screen ! lse$$x_m2drag_range := tpu$k_unspecified; ! Scroll margins mess up mouse stuff ! eve$set_all_windows( SCROLLING, 0, 0 ); ! Push the current position ! lse$$push_position; POSITION( lse$$x_m2down_window ); ! Push position in the position before we move the cursor ! lse$$push_position; ! Do the work ! lse$$key_position_mouse; lse$$x_m2down_mark := MARK( FREE_CURSOR ); lse$$pop_position; lse$$pop_position; ENDIF; ENDPROCEDURE; PROCEDURE lse$key_m2click LOCAL saved_text_mode, selection_range; ON_ERROR [TPU$_NOGBLSELOWNER, TPU$_NOTMODIFIABLE, TPU$_NOGBLSELDATA, TPU$_SELRANGEZERO]: IF saved_text_mode <> 0 THEN SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; lse$$key_mouse_terminate; eve$message ( ERROR_TEXT ); [OTHERWISE]: IF saved_text_mode <> 0 THEN SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN IF lse$$x_last_mouse_row <> 0 THEN IF GET_INFO( SCREEN, 'global_select', PRIMARY ) THEN IF eve$x_select_position <> 0 THEN lse$$push_position; POSITION( GET_INFO( eve$x_select_position, 'buffer' ) ); selection_range := eve$selection (FALSE,,,,FALSE); lse$$pop_position; lse$$key_position_mouse; saved_text_mode := SET( INSERT, CURRENT_BUFFER ); lse$$eve_insert_text( selection_range ); SET( saved_text_mode, CURRENT_BUFFER ); ELSE lse$$key_mouse_terminate; RETURN; ENDIF; ELSE lse$$key_position_mouse; saved_text_mode := SET( INSERT, CURRENT_BUFFER ); READ_GLOBAL_SELECT (PRIMARY, "STRING"); SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click2 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click2" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click3 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click3" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click4 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click4" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click5 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click5" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2drag ON_ERROR [OTHERWISE]: lse$$pop_position; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2drag" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN IF lse$$x_m2down_window = lse$$x_last_mouse_window THEN IF lse$$x_last_mouse_row > 0 THEN ! Do the underline ! lse$$x_m2drag_range := CREATE_RANGE( lse$$x_m2down_mark, lse$mouse_mark( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ), UNDERLINE ); ENDIF; ENDIF; ENDIF; ENDPROCEDURE; PROCEDURE lse$key_m2up_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2up_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2down_shift_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2down_shift_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m2click_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click2_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click2_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click3_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click3_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click4_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click4_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click5_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click5_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2drag_shift_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2drag_shift_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m2up_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2up_alt_modified" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN SET( GLOBAL_SELECT, SCREEN, SECONDARY ); IF GET_INFO (SCREEN, "input_focus") THEN IF lse$$x_m2drag_range = TPU$K_UNSPECIFIED THEN lse$key_m2click; ELSE lse$$eve_insert_text( lse$$x_m2drag_range ); ERASE( lse$$x_m2drag_range ); lse$$x_m2drag_range := TPU$K_UNSPECIFIED; UPDATE( lse$$x_m2down_window ); ENDIF; ELSE ! We save it in the scratch buffer. Because ! The SEND_CLIENT_MESSAGE( STUFF_SELECTION ) call causes a ! callback later to get the information. There is no place to ! ERASE() the data before it is sent to the requestor in TPU code. ! ! This method is not truely bullet proof. If the requestor takes ! too long to make the request, and the user does an action that ! alters the scratch buffer, the data will be lost. A buffer ! dedicated to this purpose or a "common deletion buffer" ! would be safer. ! lse$$push_position; eve$$reserve_scratch_buffer; POSITION( eve$$x_scratch_buffer ); lse$$x_m2drag_range := MOVE_TEXT( lse$$x_m2drag_range ); eve$$release_scratch_buffer; lse$$pop_position; SEND_CLIENT_MESSAGE( STUFF_SELECTION ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2down_alt_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2down_alt_modified" ); ENDON_ERROR; lse$key_m2down; ENDPROCEDURE; PROCEDURE lse$key_m2click_alt_modified LOCAL selection_range, saved_text_mode; ON_ERROR [TPU$_NOGBLSELDATA]: IF saved_text_mode <> 0 THEN SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; lse$$key_mouse_terminate; eve$message ( ERROR ); [OTHERWISE]: IF saved_text_mode <> 0 THEN SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click_alt_modified" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN IF GET_INFO( SCREEN, 'global_select', PRIMARY ) THEN IF lse_erase_selection THEN lse$$key_position_mouse; lse$$insert_text( eve$x_selection_buffer ) ENDIF; ELSE lse$$key_position_mouse; saved_text_mode := SET( INSERT, CURRENT_BUFFER ); READ_GLOBAL_SELECT (PRIMARY, "STRING"); SET( saved_text_mode, CURRENT_BUFFER ); SEND_CLIENT_MESSAGE( KILL_SELECTION ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click2_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click2_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click3_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click3_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click4_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click4_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click5_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click5_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2drag_alt_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2drag_alt_modified" ); ENDON_ERROR; lse$key_m2drag; ENDPROCEDURE; PROCEDURE lse$key_m2up_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2up_ctrl_modified" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN SET( GLOBAL_SELECT, SCREEN, SECONDARY ); IF GET_INFO (SCREEN, "input_focus") THEN IF lse$$x_m2drag_range = TPU$K_UNSPECIFIED THEN lse$key_m2click; ELSE lse$$eve_insert_text( lse$$x_m2drag_range ); ERASE( lse$$x_m2drag_range ); lse$$x_m2drag_range := TPU$K_UNSPECIFIED; UPDATE( lse$$x_m2down_window ); ENDIF; ELSE ! We save it in the scratch buffer. Because ! The SEND_CLIENT_MESSAGE( STUFF_SELECTION ) call causes a ! callback later to get the information. There is no place to ! ERASE() the data before it is sent to the requestor in TPU code. ! ! This method is not truely bullet proof. If the requestor takes ! too long to make the request, and the user does an action that ! alters the scratch buffer, the data will be lost. A buffer ! dedicated to this purpose or a "common deletion buffer" ! would be safer. ! lse$$push_position; eve$$reserve_scratch_buffer; POSITION( eve$$x_scratch_buffer ); lse$$x_m2drag_range := MOVE_TEXT( lse$$x_m2drag_range ); eve$$release_scratch_buffer; lse$$pop_position; SEND_CLIENT_MESSAGE( STUFF_SELECTION ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2down_ctrl_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2down_ctrl_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m2click_ctrl_modified LOCAL selection_range, saved_text_mode; ON_ERROR [TPU$_NOGBLSELDATA]: IF saved_text_mode <> 0 THEN SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; lse$$key_mouse_terminate; eve$message ( ERROR ); [OTHERWISE]: IF saved_text_mode <> 0 THEN SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click_ctrl_modified" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN IF GET_INFO( SCREEN, 'global_select', PRIMARY ) THEN IF eve$x_select_position <> 0 THEN lse$$push_position; POSITION( GET_INFO( eve$x_select_position, 'buffer' ) ); selection_range := eve$selection (FALSE,,,,FALSE); lse$$pop_position; lse$$key_position_mouse; lse$$eve_insert_text( selection_range ); ELSE lse$$key_mouse_terminate; RETURN; ENDIF; ELSE lse$$key_position_mouse; saved_text_mode := SET( INSERT, CURRENT_BUFFER ); READ_GLOBAL_SELECT (PRIMARY, "STRING"); SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; ENDIF; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click2_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click2_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click3_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click3_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click4_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click4_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click5_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click5_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2drag_ctrl_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2drag_ctrl_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m2up_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2up_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2down_help_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2down_help_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m2click_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click2_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click2_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click3_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click3_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click4_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click4_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2click5_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2click5_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m2drag_help_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m2drag_help_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m3up ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3up" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3down local the_window, the_col, the_row, window_index, popup_parent; ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3down" ); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN ! We don't need to set scrolling lines to 0 because we're not ! doing any positioning or dragging via the mouse. ! Status line protection ! IF lse$$x_last_mouse_row = 0 THEN RETURN; ENDIF; POSITION( lse$$x_last_mouse_window ); IF NOT eve$x_decwindows_active THEN MESSAGE( TPU$_REQUIRESDECW ); RETURN; ELSE popup_parent := get_info (SCREEN, "pop_up_parent_widget"); ENDIF; ! Handle being in a review window ! IF lse$$is_review_window( CURRENT_WINDOW ) THEN lse$$highlight_review; IF get_info( lse$$x_review_buffer_popup, "type" ) <> WIDGET THEN lse$$x_review_buffer_popup := CREATE_WIDGET( "REVIEW_POPUP", eve$x_widget_hierarchy, popup_parent, eve$kt_callback_routine); ENDIF; MANAGE_WIDGET( lse$$x_review_buffer_popup ); RETURN; ENDIF; ! Popup for query buffer ! IF lse$$is_query_window( CURRENT_WINDOW ) THEN lse$$highlight_query; IF get_info(lse$$x_query_buffer_popup, "type") <> WIDGET THEN lse$$x_query_buffer_popup := CREATE_WIDGET( "QUERY_POPUP", eve$x_widget_hierarchy, popup_parent, eve$kt_callback_routine); ENDIF; MANAGE_WIDGET( lse$$x_query_buffer_popup ); RETURN; endif; ! They are not in a special buffer, so use eves no_select_popup ! IF get_info (eve$x_no_select_popup, "type") <> WIDGET THEN eve$x_no_select_popup := create_widget ("NO_SELECT_POPUP", eve$x_widget_hierarchy, popup_parent, eve$kt_callback_routine); endif; MANAGE_WIDGET( eve$x_no_select_popup ); ENDIF; ENDPROCEDURE; PROCEDURE lse$key_m3click ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click2 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click2" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click3 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click3" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click4 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click4" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click5 ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click5" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3drag ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3drag" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m3up_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3up_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3down_shift_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3down_shift_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m3click_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click2_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click2_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click3_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click3_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click4_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click4_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click5_shift_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click5_shift_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3drag_shift_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3drag_shift_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m3up_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3up_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3down_alt_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3down_alt_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m3click_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click2_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click2_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click3_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click3_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click4_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click4_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click5_alt_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click5_alt_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3drag_alt_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3drag_alt_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m3up_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3up_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3down_ctrl_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3down_ctrl_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m3click_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click2_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click2_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click3_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click3_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click4_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click4_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click5_ctrl_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click5_ctrl_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3drag_ctrl_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3drag_ctrl_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$key_m3up_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3up_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3down_help_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3down_help_modified" ); ENDON_ERROR; lse$$x_drag_in_progress := false; eve$set_all_windows( SCROLLING, 0, 0 ); ENDPROCEDURE; PROCEDURE lse$key_m3click_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click2_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click2_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click3_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click3_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click4_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click4_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3click5_help_modified ON_ERROR [OTHERWISE]: lse$$key_mouse_terminate; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3click5_help_modified" ); ENDON_ERROR; lse$$key_mouse_terminate; ENDPROCEDURE; PROCEDURE lse$key_m3drag_help_modified ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_m3drag_help_modified" ); ENDON_ERROR; ENDPROCEDURE; PROCEDURE lse$$key_position_mouse local the_window, the_col, the_row; ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_position_mouse" ); ENDON_ERROR; ! ! Save the OLD BPM for UNDO ! IF LOCATE_MOUSE (the_window, the_col, the_row) = 1 THEN IF the_window <> CURRENT_WINDOW THEN POSITION (the_window); ENDIF; ENDIF; lse$$save_old_bpm; POSITION( MOUSE ); IF GET_INFO( lse$system, 'lse$cursor_bound' ) THEN POSITION( TEXT ); ENDIF; ! ! Save the NEW BPM for UNDO ! lse$$save_new_bpm; ENDPROCEDURE; PROCEDURE lse$$key_prompt_mouse_not_safe ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_prompt_mouse_not_safe"); ENDON_ERROR; IF LOCATE_MOUSE( lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row ) THEN IF lse$$x_last_mouse_window = lse$prompt_window THEN EXECUTE( LAST_KEY, 'LSE$MOUSE_KEYS' ); ELSE eve$message( lse$_prmtmunsafe, 0, eve$key_name( LAST_KEY ) ); ENDIF; ENDIF; ENDPROCEDURE; PROCEDURE lse$key_help_indicated ON_ERROR [OTHERWISE]: lse$$pop_position; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_help_indicated"); ENDON_ERROR; IF current_buffer = lse$prompt_list_buff THEN lse$$push_position; POSITION( LINE_BEGIN ); lse$$goto_word(FORWARD); lse$$goto_word(REVERSE); IF get_info (lse$system, "lse$cli_parser") THEN lse$do_command( 'HELP/INDICATED' ); lse$key_help_indicated := true; ELSE lse$key_help_indicated := lse_help_indicated; UPDATE( CURRENT_WINDOW ); ENDIF; lse$$pop_position; ELSE IF get_info (lse$system, "lse$cli_parser") THEN lse$do_command( 'HELP/INDICATED' ); lse$key_help_indicated := true; ELSE lse$key_help_indicated := lse_help_indicated; ENDIF; ENDIF; ENDPROCEDURE; PROCEDURE lse$$key_mouse_terminate ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_gold_help"); ENDON_ERROR; IF (CURRENT_WINDOW = lse$command_window) AND (GET_INFO( lse$command_prompt, 'type' ) = RANGE) THEN IF GET_INFO( lse$command_prompt, 'video' ) <> REVERSE THEN lse$command_prompt := CREATE_RANGE( BEGINNING_OF( lse$command_prompt ), END_OF( lse$command_prompt ), REVERSE ); ENDIF; ELSE ! video attribute is valid only for ranges and lse$command_prompt ! is sometimes unspecified the first time in here ! IF GET_INFO( lse$command_prompt, 'type' ) = RANGE THEN IF GET_INFO( lse$command_prompt, 'video' ) <> NONE THEN lse$command_prompt := CREATE_RANGE( BEGINNING_OF( lse$command_prompt ), END_OF( lse$command_prompt ), NONE ); ENDIF; ENDIF; ENDIF; eve$set_all_windows( SCROLLING, GET_INFO( lse$window, 'lse$top_scroll_margin' ), GET_INFO( lse$window, 'lse$bottom_scroll_margin' ) ); UPDATE( CURRENT_WINDOW ); lse$post_command_proc; ENDPROCEDURE; ! ! The following procedure LSE$$KEY_KDELETE implements the Motif key ! binding for KDelete, which is bound to Shift+Delete. If any characters ! are selected when the key is pressed, they are deleted. Otherwise, ! the character following the cursor is deleted. ! PROCEDURE lse$$key_kdelete local selection_range; on_error [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_kdelete"); endon_error; ! ! If there is a selection range, then delete it. Otherwise, delete the ! next character ! if eve$x_select_position <> 0 then lse_cut; else lse_erase_next_character; endif; endprocedure; PROCEDURE lse$$key_kreselect on_error [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_kreselect"); endon_error; eve$restore_primary_selection; ENDPROCEDURE PROCEDURE lse$$key_kprimarycopy LOCAL selection_range, saved_text_mode; ON_ERROR [TPU$_NOGBLSELDATA]: IF saved_text_mode <> 0 THEN SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; eve$message ( ERROR ); [OTHERWISE]: if saved_text_mode <> 0 then set( saved_text_mode, current_buffer ); endif; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_kprimarycopy"); ENDON_ERROR; IF GET_INFO( SCREEN, 'global_select', PRIMARY ) THEN IF eve$x_select_position <> 0 THEN lse$$push_position; POSITION( GET_INFO( eve$x_select_position, 'buffer' ) ); selection_range := eve$selection (FALSE,,,,FALSE); lse$$pop_position; lse$$eve_insert_text( selection_range ); ELSE RETURN; ENDIF; ELSE saved_text_mode := SET( INSERT, CURRENT_BUFFER ); READ_GLOBAL_SELECT (PRIMARY, "STRING"); SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; ENDPROCEDURE PROCEDURE lse$$key_kprimarycut local saved_text_mode, selection_range; on_error [TPU$_NOGBLSELDATA]: IF saved_text_mode <> 0 THEN SET( saved_text_mode, CURRENT_BUFFER ); ENDIF; eve$message ( ERROR ); [OTHERWISE]: if saved_text_mode <> 0 then set( saved_text_mode, current_buffer ); endif; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_kprimarycut"); endon_error; IF GET_INFO( SCREEN, 'global_select', PRIMARY ) THEN IF eve$x_select_position <> 0 THEN lse$$push_position; POSITION( GET_INFO( eve$x_select_position, 'buffer' ) ); IF lse_erase_selection THEN lse$$pop_position; lse$$insert_text( eve$x_selection_buffer ) ELSE lse$$pop_position; ENDIF; ELSE RETURN; ENDIF; ELSE saved_text_mode := SET( INSERT, CURRENT_BUFFER ); READ_GLOBAL_SELECT (PRIMARY, "STRING"); SET( saved_text_mode, CURRENT_BUFFER ); SEND_CLIENT_MESSAGE( KILL_SELECTION ); ENDIF; ENDPROCEDURE PROCEDURE lse$$key_kpageright on_error [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_kpageright"); endon_error; eve$page_horizontal(1); ENDPROCEDURE PROCEDURE lse$$key_kpageleft on_error [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_kpageleft"); endon_error; eve$page_horizontal(0); ENDPROCEDURE PROCEDURE lse$$key_knextpara on_error [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_knextpara"); endon_error; eve$next_paragraph(1); ENDPROCEDURE PROCEDURE lse$$key_kprevpara on_error [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$key_kprevpara"); endon_error; eve$next_paragraph(0); ENDPROCEDURE procedure lse$key_up ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_up"); ENDON_ERROR; ! I've used eve_move_up to avoid the overhead of a call to LSE_MOVE_UP ! ! ! Save the OLD BPM for UNDO ! lse$$save_old_bpm; eve_move_up; IF (CURRENT_WINDOW = lse$command_window) OR (CURRENT_WINDOW = lse$prompt_window) THEN POSITION( LINE_END ); ENDIF; ! ! Save the NEW BPM for UNDO ! lse$$save_new_bpm; lse$post_command_proc; endprocedure; procedure lse$key_down ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_down"); ENDON_ERROR; ! I've used eve_move_down to avoid the overhead of a call to LSE_MOVE_UP ! ! ! Save the OLD BPM for UNDO ! lse$$save_old_bpm; eve_move_down; IF (CURRENT_WINDOW = lse$command_window) OR (CURRENT_WINDOW = lse$prompt_window) THEN POSITION( LINE_END ); ENDIF; ! ! Save the NEW BPM for UNDO ! lse$$save_new_bpm; lse$post_command_proc; endprocedure; procedure lse$key_del_key ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_del_key"); ENDON_ERROR; ! I've used lse$$erase_character to avoid the overhead of ! a call to LSE_ERASE_PREVIOUS_CHARACTER ! IF (CURRENT_WINDOW = lse$command_window) OR (CURRENT_WINDOW = lse$prompt_window) THEN ! Don't allow deletion of the line end ! IF GET_INFO( MARK( FREE_CURSOR ), 'offset' ) = 0 THEN RETURN; ENDIF; ENDIF; ! ! Save old BPM for text insertion ! lse$$save_old_bpm(); lse$$erase_character (reverse); lse$post_command_proc; endprocedure; procedure lse$key_comma ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_comma"); ENDON_ERROR; ! I've used lse$$erase_character to avoid the overhead of ! a call to LSE_ERASE_NEXT_CHARACTER ! IF (CURRENT_WINDOW = lse$command_window) OR (CURRENT_WINDOW = lse$prompt_window) THEN ! Don't all deletion of the line end ! IF CURRENT_CHARACTER = '' THEN RETURN; ENDIF; ENDIF; lse$$erase_character (forward); lse$post_command_proc; endprocedure; procedure lse$key_cut_to_clipboard ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_cut_to_clipboard"); ENDON_ERROR; lse_cut (lse$$x_buf_str_clipboard); endprocedure; procedure lse$key_copy_to_clipboard ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_copy_to_clipboard"); ENDON_ERROR; lse_copy (lse$$x_buf_str_clipboard); endprocedure; procedure lse$key_paste_from_clipboard ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_paste_from_clipboard"); ENDON_ERROR; lse_paste (lse$$x_buf_str_clipboard); endprocedure; procedure lse$key_help ! !doc_begin ! ! ONE LINE DEFINITION: ! Help ! !doc_end ! ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_help"); ENDON_ERROR; IF get_info (lse$system, "lse$cli_parser") THEN ! V3.1 compatibility ! LSE$DO_COMMAND ('HELP/KEYPAD'); ELSE lse_help_keypad; ENDIF; RETURN true; endprocedure; procedure lse$$save_key (key_string); local the_key_name, key_command, key_comment, key_def; ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$save_key"); ENDON_ERROR; if not lse$prompt_key (key_string, the_key_name, '') then return false; endif; if get_info (lse$$x_saved_key_defs, "type") <> ARRAY then lse$$x_saved_key_defs := CREATE_ARRAY (3); endif; key_comment := lookup_key (the_key_name, COMMENT); key_command := lookup_key (the_key_name, PROGRAM); ! key_command will be 0 if there was no definition ! key_def := CREATE_ARRAY (2); key_def {"command"} := key_command; key_def {"comment"} := key_comment; lse$$x_saved_key_defs {the_key_name} := key_def; return true; endprocedure; procedure lse$$restore_key (key_string) local the_key_name, key_def, key_command, key_comment; ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$$restore_key"); ENDON_ERROR; if not lse$prompt_key (key_string, the_key_name, '') then return false; endif; if get_info (lse$$x_saved_key_defs, "type") <> ARRAY then return false; endif; key_def := lse$$x_saved_key_defs {the_key_name}; ! Check if a definition was ever saved for this key ! if key_def = tpu$k_unspecified then return false; endif; key_command := key_def {"command"}; key_comment := key_def {"comment"}; ! A 0 key_command means that there was no definition when the key ! def was saved. Delete the key binding. ! if key_command = 0 then undefine_key (the_key_name); delete (key_def); return true; endif; define_key (key_command, the_key_name, key_comment); delete (key_def); return true; endprocedure; procedure lse$key_reserve ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_reserve"); ENDON_ERROR; IF get_info (lse$system, "lse$cli_parser") THEN ! V3.1 compatibility ! vmscms_reserve; ELSE lse_reserve; ENDIF; RETURN true; endprocedure; procedure lse$key_replace ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_replace"); ENDON_ERROR; IF get_info (lse$system, "lse$cli_parser") THEN ! V3.1 compatibility ! vmscms_replace; ELSE lse_replace; ENDIF; RETURN true; endprocedure; procedure lse$key_unreserve ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_unreserve"); ENDON_ERROR; IF get_info (lse$system, "lse$cli_parser") THEN ! V3.1 compatibility ! vmscms_unreserve; ELSE lse_unreserve; ENDIF; RETURN true; endprocedure; procedure lse$key_cms ON_ERROR [OTHERWISE]: lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_cms"); ENDON_ERROR; IF not eve$x_ultrix_active THEN IF get_info (lse$system, "lse$cli_parser") THEN ! V3.1 compatibility ! vmscms_show_cms; ELSE eve$message (LSE$_NOTPORTABLE); ENDIF; RETURN true; ELSE ! This call to a vmscms_ routine does an lse$do_command, and ! will therefore cause a 'Feature Requires VMS' message, which ! is appropriate. ! vmscms_show_cms; RETURN false; ENDIF; endprocedure; PROCEDURE lse$key_hyperhelp ON_ERROR [OTHERWISE]: lse$$pop_position; lse$$unexpected_error( ERROR, ERROR_TEXT, ERROR_LINE, "lse$key_hyperhelp"); ENDON_ERROR; lse$key_hyperhelp := lse$$display_hyperhelp; ENDPROCEDURE; VARIABLE lse$$x_m1down_window, lse$$x_m1down_column, lse$$x_m1down_row, lse$$x_m1down_mark, lse$$x_m2down_window, lse$$x_m2down_column, lse$$x_m2down_row, lse$$x_m2down_mark, lse$$x_m2drag_range, ! These are "throw away" variables. "Normal" programming would ! tell us to use locals. Locals are rather expensive so we use ! global variables ! lse$$x_last_mouse_window, lse$$x_last_mouse_column, lse$$x_last_mouse_row, ! This allows us to optomize the marking of the anchor to be done once ! lse$$x_drag_in_progress, lse$$x_saved_key_defs;