! EVE$DECWINDOWS.TPU 31-DEC-1992 10:12 Page 1 module eve$decwindows ident "V03-054" ! ! COPYRIGHT © 1987,1992 BY ! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS ! ALL RIGHTS RESERVED ! ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ! INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ! COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ! OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ! TRANSFERRED. ! ! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ! AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ! CORPORATION. ! ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ! !++ ! FACILITY: ! DECTPU - Text Processing Utility ! EVE - Extensible Versatile Editor ! ! ABSTRACT: ! This is the source program for the EVE DECwindow functions. ! ! ENVIRONMENT: ! OpenVMS VAX, OpenVMS AXP, RISC/ULTRIX ! ! AUTHOR: Bill Robinson, Sharon LaClair (among others) ! ! CREATION DATE: 3-Jan-1988 ! ! MODIFIED BY: ! !-- ! EVE$DECWINDOWS.TPU Page 2 !++ ! Table of Contents ! ! EVE$DECWINDOWS.TPU ! 31-DEC-1992 10:12 ! ! Procedure name Page Description ! -------------- ---- ------------ ! ! eve$decwindows_module_pre_init 3 Pre init resources/callbacks ! eve$set_ultrix_resources 4 Set EVE-specific resources ! eve$define_widget 5 Define a widget ! eve$undefine_widget 6 Undefine, too ! eve$$$get_key_name 7 Create key-name from integer ! eve$$$save_widget_arrays 8 Save arrays as key_maps ! eve$$$restore_widget_arrays 9 Restore widgets from key-maps ! eve$create_widget 10 Create a widget, setting min ht/wd ! eve$set_min_widget_size 11 Set dialog box min height/width ! eve$manage_widget 12 Manage (& create) a widget ! eve$$manage_file_selection 13 Manage open file selection widget ! eve$unmanage_widget 13 Unmanage a widget ! eve$popup_message 14 Output message in a dialog box ! eve$$resize_action 15 DECWindows resize action ! eve$$resize_handler 16 Guts of resize ! eve$$resize_system_windows 17 Re-size/position system windows ! eve$$resize_too_small 18 Severe resize error ! eve$$insert_clipboard 19 Insert/Paste from the clipboard ! eve$$cut_copy 20 Cut/Copy to the clipboard ! eve_set_clipboard 21 enable use of the clipboard ! eve_set_noclipboard 21 disable use of the clipboard (default) ! eve$$set_scroll_bars 22 Assoc. scroll bar w/ window ! eve$$set_no_scroll_bars 22 Make window's scroll bars invisible ! eve$scroll_dispatch 23 Widget callback routine for scroll bars ! eve_set_function_keys_motif 25 Set Motif function keys ! eve$set_function_keys_motif 25 Set Motif function keys ! eve_set_function_keys_nomotif 25 Motif function keys off ! eve$create_menu_bar 26 Create menu_bar, popups, UID ! eve$manage_menu_bar 27 Manage EVE's menu bar ! eve$unmanage_menu_bar 27 Unmanage EVE's menu bar ! eve$create_popups 28 Create 2 popup menus ! eve$page_horizontal 29 Horizontal page left/right ! eve$next_word 30 Next or prev word ! eve$next_paragraph 31 Next or prev paragraph ! eve$primary_transfer 32 Primary copy/cut ! eve$$quick_post_key 33 Quick transfer post key procedure ! eve$shift_delete 34 Motif Shift + Delete !-- ! EVE$DECWINDOWS.TPU Page 3 procedure eve$decwindows_module_pre_init ! Pre init resources/callbacks if not get_info (SCREEN, "motif") then return; ! Not using Motif interface, so don't initialize endif; eve$x_resource_array := create_array (eve$k_resource_array_length); eve$x_callback_array := create_array (eve$k_callback_array_length); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! The following constants MUST be synchronized with the Motif toolkit. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! eve$x_resource_array {eve$k_nscroll_inc} := "increment"; eve$x_resource_array {eve$k_nscroll_page_inc} := "pageIncrement"; eve$x_resource_array {eve$k_nmax_value} := "maximum"; eve$x_resource_array {eve$k_nmin_value} := "minimum"; eve$x_resource_array {eve$k_nvalue} := "value"; eve$x_resource_array {eve$k_nlabel} := "labelString"; eve$x_resource_array {eve$k_nslider_size} := "sliderSize"; eve$x_resource_array {eve$k_ndirmask} := "dirMask"; eve$x_resource_array {eve$k_nhorizontal_scroll_bar} := "horizontalScrollBar"; eve$x_resource_array {eve$k_nvertical_scroll_bar} := "verticalScrollBar"; eve$x_resource_array {eve$k_nx} := "x"; eve$x_resource_array {eve$k_ny} := "y"; eve$x_resource_array {eve$k_nwidth} := "width"; eve$x_resource_array {eve$k_nheight} := "height"; eve$x_resource_array {eve$k_nitems_count} := "items" + ascii (10) + "itemCount"; eve$x_resource_array {eve$k_nselected_items} := "selectedItems"; eve$x_resource_array {eve$k_nselected_count} := "selectedItemCount"; eve$x_resource_array {eve$k_nselected_items_count} := "selectedItems" + ascii (10) + "selectedItemCount"; eve$x_resource_array {eve$k_nlist_items_count} := "listItems" + ascii (10) + "listItemCount"; eve$x_resource_array {eve$k_nfile_list_items_count} := "fileListItems" + ascii (10) + "fileListItemCount"; eve$x_resource_array {eve$k_npagedec_callbk} := "pageDecrementCallback"; eve$x_resource_array {eve$k_npageinc_callbk} := "pageIncrementCallback"; eve$x_resource_array {eve$k_nunitdec_callbk} := "decrementCallback"; eve$x_resource_array {eve$k_nunitinc_callbk} := "incrementCallback"; eve$x_resource_array {eve$k_nvaluechng_callbk} := "valueChangedCallback"; eve$x_resource_array {eve$k_ntotop_callbk} := "toTopCallback"; eve$x_resource_array {eve$k_ntobottom_callbk} := "toBottomCallback"; eve$x_resource_array {eve$k_ndirspec} := "dirSpec"; eve$x_resource_array {eve$k_nset} := "set"; eve$x_resource_array {eve$k_ndialogtitle} := "dialogTitle"; eve$x_resource_array {eve$k_ntitle} := "title"; eve$x_resource_array {eve$k_nminwidth} := "minWidth"; eve$x_resource_array {eve$k_nminheight} := "minHeight"; eve$x_resource_array {eve$k_nnoresize} := "noResize"; eve$x_resource_array {eve$k_nvisitemcount} := "visibleItemCount"; eve$x_resource_array {eve$k_nlistvisitemcount} := "listVisibleItemCount"; eve$x_resource_array {eve$k_npattern} := "pattern"; eve$x_callback_array {eve$k_cr_increment} := eve$xrm$k_crincrement; eve$x_callback_array {eve$k_cr_decrement} := eve$xrm$k_crdecrement; eve$x_callback_array {eve$k_cr_page_increment} := eve$xrm$k_crpage_increment; eve$x_callback_array {eve$k_cr_page_decrement} := eve$xrm$k_crpage_decrement; eve$x_callback_array {eve$k_cr_value_changed} := eve$xrm$k_crvalue_changed; eve$x_callback_array {eve$k_cr_to_top} := eve$xrm$k_crto_top; eve$x_callback_array {eve$k_cr_to_bottom} := eve$xrm$k_crto_bottom; eve$x_callback_array {eve$k_cr_help} := eve$xrm$k_crhelp; eve$x_callback_array {eve$k_cr_cancel} := eve$xrm$k_crcancel; eve$x_callback_array {eve$k_cr_activate} := eve$xrm$k_cractivate; eve$x_callback_array {eve$k_cr_apply} := eve$xrm$k_crapply; eve$x_callback_array {eve$k_cr_yes} := tpu$k_unspecified; eve$x_callback_array {eve$k_cr_no} := tpu$k_unspecified; eve$x_callback_array {eve$k_cr_ok} := eve$xrm$k_crok; eve$x_callback_array {eve$k_cr_single_sel} := eve$xrm$k_crsingle_select; eve$x_callback_array {eve$k_cr_single_sel_conf} := tpu$k_unspecified; eve$x_callback_array {eve$k_cr_focus} := eve$xrm$k_crfocus; eve$x_callback_array {eve$k_cr_lost_focus} := tpu$k_unspecified; eve$x_callback_array {eve$k_cr_losing_focus} := eve$xrm$k_crlosing_focus; eve$x_callback_array {eve$k_cr_no_match} := eve$xrm$k_crno_match; eve$x_callback_array {eve$k_cr_default_action} := eve$xrm$k_crdefault_action; eve$kt_pushbuttonwidgetclass := "xmPushButtonClassRec"; eve$kt_separatorwidgetclass := "xmSeparatorGadgetClassRec"; eve$set_ultrix_resources; ! Arm copyright removal from the title bar. set (FIRST_INPUT_ACTION, "eve$$remove_copyright"); endprocedure; ! eve$decwindows_module_pre_init ! EVE$DECWINDOWS.TPU Page 4 procedure eve$set_ultrix_resources ! Set EVE-specific resources local resource_file; ! Insure we use EVE's X resource file to set the title and icon name ! on ULTRIX (there's no TPU$DEFAULTS logical to do this for us). ! LSE can supersede this procedure with a nop to prevent EVE's title ! and icon name from getting set. if get_info (SYSTEM, "operating_system") = ULTRIX then resource_file := "/usr/lib/X11/app-defaults/eve"; if (file_search (resource_file) <> "") then ! override with EVE's resource file set (default_file, resource_file); set (WIDGET, get_info (SCREEN, "widget"), eve$x_resource_array {eve$k_ntitle}, get_default ("Tpu.Tpu$MainWindow.Title", "")); set (ICON_NAME, get_default ("Tpu.Tpu$MainWindow.IconName", "")); endif; endif; endprocedure; ! eve$set_ultrix_resources ! EVE$DECWINDOWS.TPU Page 5 procedure eve$define_widget (the_code, ! Define a widget widget_identifier, help_topic) ! Description: ! Associates executable code with a widget. ! ! Parameters: ! the_code = string representing TPU statements to be bound to ! the widget - Input ! widget_identifier = integer widget identifier (used to index thru ! the widget_array) - Input ! help_topic = string associated with the widget for use as help ! topic, should match widget name in UIL file - Input ! Return value: ! true if succeeds, false if not local the_index, high_word, the_program, code_array, help_array; on_error [OTHERWISE]: endon_error; case get_info (the_code, "type") [PROGRAM, LEARN]: the_program := the_code; [STRING, BUFFER, RANGE]: the_program := compile (the_code); [OTHERWISE]: eve$message (TPU$_INVPARAM, eve$k_error, 1, "", str (get_info (the_code, "type"))); eve$learn_abort; return (FALSE); endcase; if get_info (eve$$x_widget_arrays, "type") <> ARRAY then eve$$x_widget_arrays := create_array; endif; if get_info (eve$$x_widget_help_arrays, "type") <> ARRAY then eve$$x_widget_help_arrays := create_array; endif; high_word := (widget_identifier / 65536) and 65535; the_index := 1; loop code_array := eve$$x_widget_arrays {the_index}; exitif code_array = tpu$k_unspecified; exitif high_word = ((get_info (code_array, "first") / 65536) and 65535); the_index := the_index + 1; endloop; if code_array = tpu$k_unspecified then code_array := create_array; help_array := create_array; eve$$x_widget_arrays {the_index} := code_array; eve$$x_widget_help_arrays {the_index} := help_array; else help_array := eve$$x_widget_help_arrays {the_index}; endif; code_array {widget_identifier} := the_program; help_array {widget_identifier} := help_topic; return (TRUE); endprocedure; ! eve$define_widget ! EVE$DECWINDOWS.TPU Page 6 procedure eve$undefine_widget (widget_identifier) ! Undefine, too local the_index, high_word, code_array, help_array; on_error [OTHERWISE]: endon_error; high_word := (widget_identifier / 65536) and 65535; the_index := 1; loop code_array := eve$$x_widget_arrays {the_index}; exitif code_array = tpu$k_unspecified; exitif high_word = ((get_info (code_array, "first") / 65536) and 65535); the_index := the_index + 1; endloop; if code_array = tpu$k_unspecified then return (FALSE); else help_array := eve$$x_widget_help_arrays {the_index}; endif; code_array {widget_identifier} := tpu$k_unspecified; help_array {widget_identifier} := tpu$k_unspecified; return (TRUE); endprocedure; ! eve$undefine_widget ! EVE$DECWINDOWS.TPU Page 7 procedure eve$$$get_key_name (the_index, ! Create key-name from integer the_base) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! NOTE: The following use of key_maps to save widget definitions in ! the section file is not recommended coding practice. ! All variables, procedures and key-maps flagged with three ! consecutive dollar signs should not be used by anyone. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Description: ! ! Create a key-name from an integer. ! The_index must be in the range the_base -> the_base + 1535 ! ! Parameters ! the_index = integer representing a keyname, input. ! the_base = integer representing base from which to normalize the_index ! so that keynames start from 0. Input/output. local normalized_index, group, an_index; normalized_index := the_index - the_base; group := normalized_index / 256; ! a key group in a key_map an_index := normalized_index - (group * 256); ! key within the group case group [0]: return (key_name (an_index)); [1]: return (key_name (an_index, KEYPAD)); [2]: return (key_name (an_index, FUNCTION)); [3]: return (key_name (an_index, SHIFT_KEY)); [4]: return (key_name (an_index, KEYPAD, SHIFT_KEY)); [5]: return (key_name (an_index, FUNCTION, SHIFT_KEY)); endcase; endprocedure; ! eve$$$get_key_name ! EVE$DECWINDOWS.TPU Page 8 procedure eve$$$save_widget_arrays ! Save arrays as key_maps ! Save widget arrays in section file key_maps !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! NOTE: The following use of key_maps to save widget definitions in ! the section file is not recommended coding practice. ! All variables, procedures and key-maps flagged with three ! consecutive dollar signs should not be used by anyone. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! local saved_informational, the_list, ! The key-map list that we save it in the_index, the_map, the_key, last_index, the_array, the_help_array, widget_base, widget_offset, widget_identifier; on_error [TPU$_NODEFINITION]: [TPU$_CONTROLC]: set (INFORMATIONAL, saved_informational); eve$learn_abort; abort; [OTHERWISE]: set (INFORMATIONAL, saved_informational); endon_error if get_info (eve$$x_widget_arrays, "type") = UNSPECIFIED then ! Just return if no widget array exists during CCT save section. return; ! Note that it will exist during a CCT build, so they endif; ! will be saved. if get_info (SYSTEM, "informational") then saved_informational := ON; else saved_informational := OFF; endif; set (INFORMATIONAL, OFF); if not eve$key_map_exists ("EVE$$$WIDGET_ARRAY_548") then the_map := create_key_map ("EVE$$$WIDGET_ARRAY_548"); endif; if not eve$key_map_list_exists ("EVE$$$WIDGET_ARRAY_LIST") then the_list := create_key_map_list ("EVE$$$WIDGET_ARRAY_LIST", "EVE$$$WIDGET_ARRAY_548"); remove_key_map (the_list, "EVE$$$WIDGET_ARRAY_548"); else the_list := "EVE$$$WIDGET_ARRAY_LIST"; loop the_map := get_info (KEY_MAP, "first", the_list); exitif the_map = 0; remove_key_map (the_list, the_map); endloop; endif; the_index := get_info (eve$$x_widget_arrays, "first"); loop exitif the_index = tpu$k_unspecified; the_array := eve$$x_widget_arrays {the_index}; ! get widget array if the_array <> tpu$k_unspecified then ! get the corresponding help topic array the_help_array := eve$$x_widget_help_arrays {the_index}; widget_base := get_info (the_array, "first"); last_index := get_info (the_array, "last"); if ((get_info (widget_base, "type") <> INTEGER) or (get_info (last_index, "type") <> INTEGER)) then eve$message (EVE$_EVEINTERROR); return FALSE; endif; the_map := fao ("EVE$$$WIDGET_ARRAY_!UL", (widget_base / 65536) and 65535); if not eve$key_map_exists (the_map) then the_map := create_key_map (the_map); endif; add_key_map (the_list, "last", the_map); define_key (fao ("return !SL", widget_base), key_name (E1, SHIFT_MODIFIED), "widget base", the_map); define_key (fao ("return !SL", last_index + 1 - widget_base), key_name (E2, SHIFT_MODIFIED), "widget count", the_map); widget_offset := 0; loop widget_identifier := widget_base + widget_offset; exitif widget_identifier > last_index; the_key := eve$$$get_key_name (widget_identifier, widget_base); case get_info (the_array {widget_identifier}, "type") [UNSPECIFIED, OTHERWISE]: if lookup_key (the_key, COMMENT, the_map) <> 0 then undefine_key (the_key, the_map); endif; [PROGRAM, LEARN]: define_key (the_array {widget_identifier}, the_key, the_help_array {widget_identifier}, the_map); endcase; widget_offset := widget_offset + 1; endloop; endif; the_index := get_info (eve$$x_widget_arrays, "next"); endloop; set (INFORMATIONAL, saved_informational); endprocedure; ! eve$$$save_widget_arrays ! EVE$DECWINDOWS.TPU Page 9 procedure eve$$$restore_widget_arrays ! Restore widgets from key-maps !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! NOTE: The following use of key_maps to save widget definitions in ! the section file is not recommended coding practice. ! All variables, procedures and key-maps flagged with three ! consecutive dollar signs should not be used by anyone. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! local the_map, the_key, widget_base, the_index, last_index, the_code, array_count, code_array, help_array, code_arrays, help_arrays; on_error [OTHERWISE]: ; endon_error; if eve$key_map_exists ("EVE$$$WIDGET_ARRAY_LIST") then code_arrays := create_array; help_arrays := create_array; array_count := 0; the_map := get_info (KEY_MAP, "first", "EVE$$$WIDGET_ARRAY_LIST"); loop exitif the_map = 0; widget_base := execute (lookup_key (key_name (E1, SHIFT_MODIFIED), PROGRAM, the_map)); last_index := execute (lookup_key (key_name (E2, SHIFT_MODIFIED), PROGRAM, the_map)); code_array := create_array (last_index, widget_base); help_array := create_array (last_index, widget_base); array_count := array_count + 1; code_arrays {array_count} := code_array; help_arrays {array_count} := help_array; last_index := widget_base + last_index - 1; the_index := widget_base; loop the_key := eve$$$get_key_name (the_index, widget_base); the_code := lookup_key (the_key, PROGRAM, the_map); if the_code <> 0 then code_array {the_index} := the_code; help_array {the_index} := lookup_key (the_key, COMMENT, the_map); endif; the_index := the_index + 1; exitif the_index > last_index; endloop; the_map := get_info (KEY_MAP, "next", "EVE$$$WIDGET_ARRAY_LIST"); endloop; endif; eve$$x_widget_arrays := code_arrays; eve$$x_widget_help_arrays := help_arrays; endprocedure; ! eve$$$restore_widget_arrays ! EVE$DECWINDOWS.TPU Page 10 procedure eve$create_widget ! Create a widget, setting min ht/wd (widget_name) ! Uppercase name of the widget: starts with !root or child of root for Motif. ! Creates a dialog box widget, setting the minimum width and height to ! the default width/height values respectively. Returns the created widget. local widget_id; widget_id := create_widget (widget_name, eve$x_widget_hierarchy, SCREEN, eve$kt_callback_routine); eve$set_min_widget_size (widget_id); return (widget_id); endprocedure; ! eve$create_widget ! EVE$DECWINDOWS.TPU Page 11 procedure eve$set_min_widget_size ! Set dialog box min height/width (widget_id; ! widget to set do_resize) ! Boolean: 1 = resize (ignore noResize resource) ! If the widget is resizable (or do_resize), then set the minimum width and ! height of the parent (shell) widget to the default width and height of ! the widget. Shouldn't be called until after the size of the widget is ! known, in some cases this is not until it's managed. local not_resizeable, override_size, the_status, the_parent, the_width, the_height; if (not eve$x_decwindows_active) then return; endif; if do_resize <> tpu$k_unspecified then if do_resize then override_size := TRUE; endif; endif; the_status := get_info (widget_id, "widget_info", eve$x_resource_array {eve$k_nnoresize}, not_resizeable); if override_size or (not not_resizeable) then the_status := get_info (widget_id, "widget_info", eve$x_resource_array {eve$k_nwidth}, the_width, eve$x_resource_array {eve$k_nheight}, the_height); if the_width < 100 then the_width := 175; endif; if the_height < 100 then the_height := 150; endif; the_parent := get_info (widget_id, "parent"); the_status := set (WIDGET, the_parent, eve$x_resource_array {eve$k_nminwidth}, the_width, eve$x_resource_array {eve$k_nminheight}, the_height); endif; endprocedure; ! eve$set_min_widget_size ! EVE$DECWINDOWS.TPU Page 12 procedure eve$manage_widget (widget_variable; ! Manage (& create) a widget widget_name) ! Description ! Manages a widget, CREATE_WIDGET'ing it if it's not been created. ! Adds the application name to the dialog box's title if not in it. ! Parameters ! widget_variable = variable to be assigned to the created widget, ! input/output ! widget_name = uppercase name of the widget (for CREATE_WIDGET), ! optional input (required if widget must be created) local title, status; on_error [OTHERWISE]: endon_error; if get_info (widget_variable, "type") <> WIDGET then if widget_name = tpu$k_unspecified then eve$message (EVE$_NOWIDGETNAME, 0, "EVE$MANAGE_WIDGET"); return (FALSE); endif; widget_variable := eve$create_widget (widget_name); else if get_info (widget_variable, "is_managed") then unmanage_widget (widget_variable); endif; endif; ! Prepend the application name (EVE: ) to the Motif dialog box title. if eve$x_application_name = tpu$k_unspecified then eve$x_application_name := "EVE"; endif; status := get_info (widget_variable, "widget_info", eve$x_resource_array {eve$k_ndialogtitle}, title); if index (title, eve$x_application_name + ": ") = 0 then status := set (widget, widget_variable, eve$x_resource_array {eve$k_ndialogtitle}, eve$x_application_name + ": " + title); endif; manage_widget (widget_variable); return (TRUE); endprocedure; ! eve$manage_widget ! EVE$DECWINDOWS.TPU Page 13 procedure eve$$manage_file_selection ! Manage open file selection widget local file_type, input_file, status, widget_ht; if get_info (eve$x_open_file_selection, "type") <> WIDGET then eve$x_open_file_selection := create_widget ("OPEN_FILE_SELECTION", eve$x_widget_hierarchy, SCREEN, eve$kt_callback_routine); ! Shorten the fileselection widget if too big to fit on screen. status := get_info (eve$x_open_file_selection, "widget_info", eve$x_resource_array {eve$k_nheight}, widget_ht); if widget_ht >= get_info (SCREEN, "pixel_length") then set (WIDGET, eve$x_open_file_selection, eve$x_resource_array {eve$k_nlistvisitemcount}, 2); endif; input_file := get_info (COMMAND_LINE, "file_name"); if input_file <> "" then if eve$x_ultrix_active then file_type := "*"; else ! Use first input file's type as default for fileselection box file_type := "*" + file_parse (input_file, "", "", TYPE); endif; set (WIDGET, eve$x_open_file_selection, eve$x_resource_array {eve$k_npattern}, file_type); endif; endif; eve$manage_widget (eve$x_open_file_selection); eve$set_min_widget_size (eve$x_open_file_selection); return (TRUE); endprocedure; ! eve$$manage_file_selection procedure eve$unmanage_widget (widget_variable) ! Unmanage a widget ! Description ! Sets input focus, and then unmanages a widget. These must be done in ! this order to insure TPU's internal que of DECwindows events is ! processed correctly. ! Parameters ! widget_variable = widget to be unmanaged on_error [OTHERWISE]: endon_error; if get_info (widget_variable, "type") <> WIDGET then return (FALSE); endif; unmanage_widget (widget_variable); return (TRUE); endprocedure; ! eve$unmanage_widget ! EVE$DECWINDOWS.TPU Page 14 procedure eve$popup_message (the_message) ! Output message in a dialog box ! Called when a message is severe enough to warrant displaying in message ! dialog box. If the command were invoked by the menu, put the message ! in the message dialog box as well as invisibly at the bottom of the ! message buffer. Otherwise, just output the message. ! Parameters: ! message_arg = string to be output local status, saved_mark; on_error [TPU$_CONTROLC]: eve$$restore_position (saved_mark); eve$learn_abort; abort; [OTHERWISE]: eve$$restore_position (saved_mark); endon_error; if (eve$$x_state_array {eve$$k_command_line_flag} = eve$k_invoked_by_menu) and eve$$x_state_array {eve$$k_message_box} then saved_mark := mark (FREE_CURSOR); position (end_of (tpu$x_message_buffer)); ! hide message copy_text (the_message); position (BUFFER_END); eve$$restore_position (saved_mark); if get_info (eve$x_message_dialog, "type") <> WIDGET then eve$x_message_dialog := create_widget ("MESSAGE_DIALOG", eve$x_widget_hierarchy, SCREEN, eve$kt_callback_routine); endif; status := set (WIDGET, get_info (WIDGET, "widget_id", eve$x_message_dialog, "MESSAGE_DIALOG.MESSAGE_LABEL1"), eve$x_resource_array {eve$k_nlabel}, the_message); ! Optionally set label2 to secondary (instructional) text. eve$manage_widget (eve$x_message_dialog); eve$set_min_widget_size (eve$x_message_dialog); else message (the_message); ! cmd line/key invoked, or menu invoked ! but msg box usage is disabled endif; endprocedure; ! eve$popup_message ! EVE$DECWINDOWS.TPU Page 15 procedure eve$$resize_action ! DECWindows resize action ! This procedure is called for a DECwindows RESIZE event. ! The SET WIDTH command indirectly uses this routine since it forces a RESIZE ! event to be dispatched. ! ! This procedure's role is to set the old width, the old height, the new width, ! and the new height into four eve variables used by the resize window handling ! procedure. It then calls this handling procedure. ! ! Set the EVE variables based on get_info's about the screen state. eve$$x_resize_new_length := get_info (SCREEN, "new_length"); eve$$x_resize_old_length := get_info (SCREEN, "old_length"); eve$$x_resize_new_width := get_info (SCREEN, "new_width"); eve$$x_resize_old_width := get_info (SCREEN, "old_width"); eve$$resize_handler; endprocedure; ! eve$$resize_action ! EVE$DECWINDOWS.TPU Page 16 procedure eve$$resize_handler ! Guts of resize ! ! This procedure (EVE$$RESIZE_HANDLER) is called to implement a change in the ! current window layout. It is called when the user directly changes the size ! of the DECwindows window, whenever the user issues a SET WIDTH command, or ! whenever EVE$SET_MESSAGE_WINDOW_SIZE or EVE$SET_COMMAND_WINDOW_SIZE is ! called after the windows were created. ! ! Position into a user text window and maintain that window as the ! current window thru-out the resize. Delete windows from the bottom ! of the screen, adjusting the top of current_window upwards, and ! finally the bottom of the bottom-most window to the screen bottom. ! ! When the screen is made too small, unmap all windows. If there's at least ! one line, then map the message window and buffer. Regardless, put up the ! dialog box with the error message. ! ! Callers of this procedure are required to set the following four variables: ! ! eve$$x_resize_new_length ! eve$$x_resize_old_length ! eve$$x_resize_new_width ! eve$$x_resize_old_width ! ! The old and new length or width can be equal in the case of changing the ! message or command window heights. ! local window_length, difference, the_count, total_length, number, did_one_window, a_length, a_window, saved_window, saved_mark, new_top, old_bottom, top_adjust, bottom_adjust, bottom_window, do_normal_restore, top_buffer, new_overhead, old_overhead, minimum_height; on_error [TPU$_CONTROLC]: eve$$resize_action; eve$learn_abort; abort; [OTHERWISE]: if get_info (saved_window, "type") = WINDOW then eve$$restore_position (saved_window, saved_mark); endif; endon_error; ! ! The new and old overhead values are the sum of the message window and command ! window heights. The new values are in variables, while the old values can ! be obtained from the existing windows themselves. ! new_overhead := eve$$x_message_window_size + eve$$x_command_window_size; old_overhead := get_info (message_window, "visible_length"); old_overhead := old_overhead + get_info (eve$command_window, "visible_length"); ! ! Set the flag to do a normal restoration. It will be set false in the ! appropriate code paths. ! do_normal_restore := TRUE; ! ! Set the width of the windows before anything else, so that any update call ! in eve$check_bad_window does not cause an infinite loop. ! if (eve$$x_resize_old_width <> eve$$x_resize_new_width) and (eve$$x_resize_new_width <> 0) then eve$set_width (eve$$x_resize_new_width); endif; ! ! Unmap the choices window if present ! eve$unmap_if_mapped (eve$choice_window); ! ! Ensure that the cursor is positioned in a user window. The check bad window ! call will return true if we were in a system window. It will not return true ! if we are in help's prompt. We must recall check bad window in case help ! returns us to a system window. ! if eve$check_bad_window then if (current_window = eve$prompt_window) then if (get_info (tpu$x_show_window, "buffer") = help_buffer) then eve$help_cleanup; eve$check_bad_window; endif; endif; endif; ! ! If the screen length has not changed and the message and command window ! heights have not chaned, then leave this routine because we have already ! dealt with the widths... ! if (eve$$x_resize_old_length = eve$$x_resize_new_length) then if (new_overhead = old_overhead) then return (TRUE); endif; endif; ! ! Calculate the mininum screen height needed by EVE. If we are using the ! DECwindows interface then take the scroll bars for the user window and ! the choices window into account. The scroll bars may not even be there, ! but the user could turn them on after the resize operation. ! ! Also take into account the new overhead value. ! if eve$x_decwindows_active then minimum_height := eve$$k_minimum_cct_height + 2 + new_overhead; else minimum_height := eve$$k_minimum_cct_height + new_overhead; endif; ! ! If the screen is now smaller, then see if it is too small. ! if ((eve$$x_resize_old_length > eve$$x_resize_new_length) or (new_overhead > old_overhead)) and (eve$x_number_of_windows > 0) ! no user windows if only msg window then ! ! If the new height is 1, but the old height was okay, then remember ! the users position. (The smallest DECterm length is 1 line.) ! if eve$$x_resize_new_length = 1 then if eve$$x_resize_old_length > minimum_height then eve$$x_state_array {eve$$k_saved_resize_mark} := mark (FREE_CURSOR); endif; eve$teardown_windows; eve$$resize_too_small; return; endif; ! ! Ensure that the new height is large enough for EVE to work. Note that we ! also must detect if this is the second attempt for a user to make it big ! enough. If it is the second attempt, then the windows have already been ! torn down. ! if eve$$x_resize_new_length < minimum_height then if eve$$x_resize_old_length >= minimum_height then eve$$x_state_array {eve$$k_saved_resize_mark} := mark (FREE_CURSOR); eve$teardown_windows; delete (message_window); eve$$map_window (message_window, tpu$x_message_buffer, 1, eve$$x_resize_new_length, OFF); endif; eve$$resize_too_small; return; endif; endif; ! ! Get into a user text window. Save the height of this current window for ! reference later. ! if eve$$x_resize_old_length <> 1 then saved_window := current_window; saved_mark := mark (FREE_CURSOR); window_length := get_info (saved_window, "length", VISIBLE_WINDOW); endif; ! ! If the real estate used by the user buffers has gotten smaller ! if ((eve$$x_resize_old_length > eve$$x_resize_new_length) or (new_overhead > old_overhead)) and (eve$x_number_of_windows > 0) ! no user windows if only msg window then ! ! If the current window will occupy the entire space, then get rid of all ! of the other windows if there are any. ! if window_length >= eve$$x_resize_new_length then if eve$x_number_of_windows > 1 then eve_one_window; did_one_window := TRUE; endif; ! ! Shrink the current_window to fit in the screen taking into account ! the message and command windows. If the one_window call had been ! done above, then the message and command windows have already been ! accounted for. ! if window_length = eve$$x_resize_new_length then bottom_adjust := -new_overhead; else if did_one_window then bottom_adjust := 0; else bottom_adjust := eve$$x_resize_new_length - new_overhead - window_length; endif; endif; adjust_window (saved_window, 0, bottom_adjust); ! ! The current window will not occupy the entire space. We must delete some ! other window. Add up the total lengths of all of the current windows and ! the command and message window lengths. ! else total_length := new_overhead; the_count := eve$x_number_of_windows; loop exitif the_count < 1; a_window := eve$get_window (the_count); total_length := total_length + get_info (a_window, "length", VISIBLE_WINDOW); the_count := the_count - 1; endloop; ! ! Delete one window at a time from bottom until the total number of ! lines needed is less that or equal to the screen height. ! new_top := 0; number := eve$$get_window_number; the_count := eve$x_number_of_windows; loop exitif the_count < 1; a_window := eve$get_window (the_count); if number > the_count then new_top := get_info (a_window, "top", WINDOW); endif; if number <> the_count then a_length := get_info (a_window, "length", VISIBLE_WINDOW); total_length := total_length - a_length; eve$$remove_window (the_count); exitif total_length <= eve$$x_resize_new_length; endif; the_count := the_count - 1; endloop; ! ! If we are left with only one window the adjust the current window ! as if we are doing a ONE WINDOW command. ! if eve$x_number_of_windows = 1 then adjust_window (saved_window, 1 - get_info (saved_window, "top", WINDOW), eve$$x_resize_new_length - new_overhead - get_info (saved_window, "bottom", WINDOW)); ! ! If we are left with more than one window, then we must adjust the ! current window and bottom window if necessary. ! ! Algorithm: ! ! 1. Adjust top of current_window to top of the last deleted window ! that was above current (if there was one deleted) using ! variable new_top ! ! 2. Adjust bottom of bottom window to bottom of screen ! else if new_top <> 0 then top_adjust := new_top - get_info (saved_window, "top", WINDOW); adjust_window (saved_window, top_adjust, 0); endif; bottom_window := eve$get_window (eve$x_number_of_windows); bottom_adjust := eve$$x_resize_new_length - new_overhead - get_info (bottom_window, "bottom", WINDOW); adjust_window (bottom_window, 0, bottom_adjust); endif; endif; ! ! The real estate used by user buffer windows has grown. ! else ! ! Handle old screens of length = 1. If the new screen height is ! smaller than the minimum height, then map the message window and leave. ! if eve$$x_resize_old_length = 1 then delete (message_window); if eve$$x_resize_new_length < minimum_height then eve$$map_window (message_window, tpu$x_message_buffer, 1, eve$$x_resize_new_length, OFF); eve$$resize_too_small; return; else delete (eve$command_window); eve$setup_windows (get_info (eve$$x_state_array {eve$$k_saved_resize_mark}, "buffer")); do_normal_restore := FALSE; endif; ! ! The old screen height was > 1, and now we have more space. ! else ! ! Handle new screen too short for EVE to use ! if eve$$x_resize_new_length < minimum_height then eve$$map_window (message_window, tpu$x_message_buffer, 1, eve$$x_resize_new_length, OFF); eve$$resize_too_small; return; else ! ! The screen height may have just become acceptable ! if eve$$x_resize_old_length < minimum_height then delete (message_window); delete (eve$command_window); eve$setup_windows (get_info (eve$$x_state_array {eve$$k_saved_resize_mark}, "buffer")); do_normal_restore := FALSE; ! ! Give all of the new real estate to the last window ! else difference := (eve$$x_resize_new_length - eve$$x_resize_old_length) + (old_overhead - new_overhead); a_window := eve$get_window (eve$x_number_of_windows); adjust_window (a_window, 0, difference); endif; endif; endif; endif; ! ! Redo the scroll_margins if we had them already ! if (eve$x_scroll_top <> 0) or (eve$x_scroll_bottom <> 0) then the_count := eve$x_number_of_windows; loop exitif the_count < 1; a_window := eve$get_window (the_count); eve$set_scroll_margins (a_window, eve$x_scroll_top, eve$x_scroll_bottom); the_count := the_count - 1; endloop; endif; ! ! redo the EVE system windows (cmd, msg, prompt, ...) ! eve$$resize_system_windows; ! ! restore the last position ! if do_normal_restore then eve$$restore_position (saved_window, saved_mark); else eve$$restore_position (eve$$x_windows {1}, eve$$x_state_array {eve$$k_saved_resize_mark}); endif; endprocedure; ! eve$$resize_handler ! EVE$DECWINDOWS.TPU Page 17 procedure eve$$resize_system_windows ! Re-size/position system windows ! This procedure must be synchronized with attribute setting of system windows ! that occurs in both eve$windows.tpu and eve$terminals.tpu local overhead, command_row, message_row, choice_row, prompt_row, show_len, ruler_row; on_error [TPU$_CONTROLC]: eve$$resize_system_windows; [OTHERWISE]: endon_error; ! Delete all of the eve system windows. delete (eve$command_window); delete (message_window); delete (eve$choice_window); delete (eve$prompt_window); delete (tpu$x_show_window); delete (eve$$x_ruler_window); ! The overhead is the size of the command windows and messages window combined. overhead := eve$$x_message_window_size + eve$$x_command_window_size; ! Compute the height of the show window show_len := eve$$x_resize_new_length - overhead; ! Recompute the choices window length eve$x_choice_window_length := ((eve$$x_resize_new_length - overhead) / 4) + 1; if eve$x_choice_window_length < 3 then eve$x_choice_window_length := 3; endif; ! Compute the top positions of the following windows (show is 1) command_row := eve$$x_resize_new_length - overhead + 1; message_row := eve$$x_resize_new_length - eve$$x_message_window_size + 1; choice_row := eve$$x_resize_new_length - (eve$x_choice_window_length + 1); prompt_row := command_row; ruler_row := eve$$x_resize_new_length - overhead - 1; ! Create and map the following system windows eve$$map_window (eve$command_window, eve$command_buffer, command_row, eve$$x_command_window_size, OFF); eve$$map_window (message_window, tpu$x_message_buffer, message_row, eve$$x_message_window_size, OFF); ! Create but don't map the following system windows eve$choice_window := create_window (choice_row, eve$x_choice_window_length, ON); eve$prompt_window := create_window (prompt_row, 1, OFF); tpu$x_show_window := create_window (1, show_len, ON); eve$$x_ruler_window := create_window (ruler_row, 2, ON); ! Set scroll bars on the show window, the prompt area, and video on the prompt ! window. eve$$set_scroll_bars (tpu$x_show_window); set (PROMPT_AREA, prompt_row, 1, REVERSE); set (VIDEO, eve$prompt_window, REVERSE); ! Set the key map lists set (KEY_MAP_LIST, eve$x_mouse_list, eve$choice_window); set (KEY_MAP_LIST, eve$x_mouse_list, eve$prompt_window); set (KEY_MAP_LIST, eve$x_mouse_list, tpu$x_show_window); ! Set all of the window widths set (WIDTH, eve$command_window, eve$$x_resize_new_width); set (WIDTH, message_window, eve$$x_resize_new_width); set (WIDTH, eve$choice_window, eve$$x_resize_new_width); set (WIDTH, eve$prompt_window, eve$$x_resize_new_width); set (WIDTH, tpu$x_show_window, eve$$x_resize_new_width); set (WIDTH, eve$$x_ruler_window, eve$$x_resize_new_width); endprocedure; ! eve$$resize_system_windows ! EVE$DECWINDOWS.TPU Page 18 procedure eve$$resize_too_small ! Severe resize error on_error [OTHERWISE]: eve$message (EVE$_SCREENTOOSMALL); eve$$x_state_array {eve$$k_command_line_flag} := eve$k_invoked_by_key; endon_error; eve$$x_state_array {eve$$k_command_line_flag} := eve$k_invoked_by_menu; eve$popup_message (message_text (EVE$_SCREENTOOSMALL, 1)); eve$$x_state_array {eve$$k_command_line_flag} := eve$k_invoked_by_key; endprocedure; ! eve$$resize_too_small ! EVE$DECWINDOWS.TPU Page 19 procedure eve$$insert_clipboard ! Insert/Paste from the clipboard ! If we are in DECwindows then we want to INSERT/PASTE from the clipboard ! unless otherwise specified. Clipboard functionality may expand in future to ! allow multiple items. local rec_count, here, the_left_margin, saved_mark, saved_mode; ! Used to hold the current mode on_error [TPU$_CONTROLC]: eve$$restore_position (saved_mark); eve$$release_scratch_buffer; eve$learn_abort; abort; [TPU$_CLIPBOARDNODATA, TPU$_CLIPBOARDLOCKED]: eve$$restore_position (saved_mark); eve$$release_scratch_buffer; if saved_mode = OVERSTRIKE then set (saved_mode, current_buffer); endif; if error = TPU$_CLIPBOARDNODATA then eve$message (EVE$_NOINSUSESEL); else eve$message (EVE$_CLIPBDREADLOCK); endif; eve$learn_abort; return (FALSE); [OTHERWISE]: eve$$restore_position (saved_mark); eve$$release_scratch_buffer; if saved_mode = OVERSTRIKE then set (saved_mode, current_buffer); endif; eve$learn_abort; endon_error; saved_mark := mark (FREE_CURSOR); if eve$test_if_modifiable (current_buffer) then if mark (FREE_CURSOR) = end_of (current_buffer) then ! inserting at eol, remember to honor buffer's left margin the_left_margin := get_info (current_buffer, "left_margin"); endif; rec_count := get_info (current_buffer, "record_count"); saved_mode := get_info (current_buffer, "mode"); set (INSERT, current_buffer); if eve$x_box_select_flag then ! box paste the clipboard thru scratch buffer if not eve$$reserve_scratch_buffer then eve$message (EVE$_ILLSCRATCHRES); eve$learn_abort; return (FALSE); endif; erase (eve$$x_scratch_buffer); set (INSERT, eve$$x_scratch_buffer); position (eve$$x_scratch_buffer); read_clipboard; position (saved_mark); eve$$box_paste (eve$$x_scratch_buffer); eve$$release_scratch_buffer; else read_clipboard; endif; set (saved_mode, current_buffer); if (get_info (current_buffer, "record_count") = rec_count + 1) and (the_left_margin <> 0) then ! less than a line added at eol, restore buffer's left margin here := mark (NONE); position (BUFFER_END); move_vertical (-1); ! restore line's left margin set (RECORD_ATTRIBUTE, mark (FREE_CURSOR), LEFT_MARGIN, the_left_margin); position (here); endif; return (TRUE); endif; eve$learn_abort; return (FALSE); endprocedure; ! eve$$insert_clipboard ! EVE$DECWINDOWS.TPU Page 20 procedure eve$$cut_copy ! Cut/Copy to the clipboard (delete_range) ! boolean TRUE for CUT, FALSE for COPY ! If we are in DECwindows then we want to CUT/COPY to the clipboard unless ! otherwise specified. Want to make this separate from EVE$$STORE_REMOVE because ! the clipboard functionality may change in future releases. local remove_range, ! Range being removed done_message; ! Success message on_error [TPU$_CONTROLC]: eve$$release_scratch_buffer; eve$learn_abort; abort; [TPU$_CLIPBOARDLOCKED]: eve$$release_scratch_buffer; eve$message (EVE$_CLIPBDWRITLOCK); eve$learn_abort; return (FALSE); [OTHERWISE]: eve$$release_scratch_buffer; eve$learn_abort; endon_error; remove_range := eve$selection (TRUE,,, eve$x_select_remove_flag,, TRUE); ! will take a box selection if remove_range <> 0 then if remove_range = NONE then write_clipboard ("", ""); eve$clear_message; ! cancel the eve$_selstart message else if get_info (remove_range, "type") = ARRAY then ! block cut to the clipboard thru scratch buffer if not eve$$reserve_scratch_buffer then eve$message (EVE$_ILLSCRATCHRES); eve$learn_abort; return (FALSE); endif; erase (eve$$x_scratch_buffer); set (INSERT, eve$$x_scratch_buffer); eve$$box_cut (remove_range, eve$$x_scratch_buffer, delete_range, TRUE); ! do messages write_clipboard ("", eve$$x_scratch_buffer); eve$$release_scratch_buffer; return (TRUE); endif; write_clipboard ("", remove_range); if delete_range then done_message := EVE$_REMCOMPL; erase (remove_range); ! will error with unmodifiables else done_message := EVE$_COPYCOMPL; endif; remove_range := 0; eve$message (done_message); return (TRUE); endif; endif; eve$learn_abort; return (FALSE); endprocedure; ! eve$$cut_copy ! EVE$DECWINDOWS.TPU Page 21 procedure eve_set_clipboard ! enable use of the clipboard if eve$x_decwindows_active then eve$$x_state_array {eve$$k_clipboard} := TRUE; eve$message (EVE$_NOWCLIPBOARD); return (eve$define_attr ("eve_set_clipboard", "eve_set_clipboard;", message_text (EVE$_NOWCLIPBOARD, 0))); else eve$message (EVE$_NOCCTCLIPBD); return (FALSE); endif; endprocedure; ! eve_set_clipboard procedure eve_set_noclipboard ! disable use of the clipboard (default) if eve$x_decwindows_active then eve$$x_state_array {eve$$k_clipboard} := FALSE; eve$message (EVE$_NOWPASTE); return (eve$define_attr ("eve_set_clipboard", "eve_set_noclipboard;", message_text (EVE$_NOWPASTE, 0))); else eve$message (EVE$_NOCCTCLIPBD); return (FALSE); endif; endprocedure; ! eve_set_noclipboard ! EVE$DECWINDOWS.TPU Page 22 procedure eve$$set_scroll_bars (the_window) ! Assoc. scroll bar w/ window ! Procedure for associating a scroll bar with a window. For now, all windows ! have scroll bars by default. DECTPU will handle the thumb slider (for now). ! ! input : the_window ! the window the scroll bar belongs to ! local scroll_bar_widget; ! The scroll bar widget (H/V) created ! set the scroll bars if eve$x_decwindows_active then scroll_bar_widget := set (SCROLL_BAR, the_window, VERTICAL, ON); set (SCROLL_BAR_AUTO_THUMB, the_window, VERTICAL, ON); set (WIDGET_CALLBACK, scroll_bar_widget, "eve$scroll_dispatch", 'v'); set (WIDGET, scroll_bar_widget, eve$$x_scroll_bar_callbacks); eve$$x_scroll_bar_window {scroll_bar_widget} := the_window; scroll_bar_widget := set (SCROLL_BAR, the_window, HORIZONTAL, ON); set (SCROLL_BAR_AUTO_THUMB, the_window, HORIZONTAL, ON); set (WIDGET_CALLBACK, scroll_bar_widget, "eve$scroll_dispatch", 'h'); set (WIDGET, scroll_bar_widget, eve$$x_scroll_bar_callbacks); eve$$x_scroll_bar_window {scroll_bar_widget} := the_window; endif; endprocedure; ! eve$$set_scroll_bars procedure eve$$set_no_scroll_bars ! Make window's scroll bars invisible (the_window) on_error [OTHERWISE]: endon_error; set (SCROLL_BAR, the_window, VERTICAL, OFF); set (SCROLL_BAR, the_window, HORIZONTAL, OFF); endprocedure; ! eve$$set_no_scroll_bars ! EVE$DECWINDOWS.TPU Page 23 procedure eve$scroll_dispatch ! Widget callback routine for scroll bars local saved_window, saved_mark, status, widget_called, ! The widget called widget_tag, widget_reason, reason_code, derived_line, temp_array, saved_scrolls, ! Boolean set if saved_scroll_xxx valid saved_scroll_top, ! Original value of scroll_top saved_scroll_bottom, ! Original value of scroll_bottom saved_scroll_amount, ! Original value of scroll_amount window_length; ! For finding bottom of scroll region on_error [TPU$_CONTROLC]: if saved_scrolls then set (SCROLLING, eve$$x_scroll_bar_window {widget_called}, eve$x_scrolling, saved_scroll_top, saved_scroll_bottom, saved_scroll_amount); update (eve$$x_scroll_bar_window {widget_called}); endif; if eve$$x_scroll_bar_window {widget_called} <> saved_window then eve$$restore_position (saved_window, saved_mark); endif; eve$learn_abort; abort; [OTHERWISE]: if saved_scrolls then set (SCROLLING, eve$$x_scroll_bar_window {widget_called}, eve$x_scrolling, saved_scroll_top, saved_scroll_bottom, saved_scroll_amount); update (eve$$x_scroll_bar_window {widget_called}); endif; if eve$$x_scroll_bar_window {widget_called} <> saved_window then eve$$restore_position (saved_window, saved_mark); endif; endon_error; saved_mark := mark (FREE_CURSOR); saved_window := current_window; ! Standard widget dispatch logic - get our "parameters" status := get_info (WIDGET, "CALLBACK_PARAMETERS", temp_array); widget_called := temp_array {eve$k_widget}; widget_tag := temp_array {eve$k_closure}; reason_code := temp_array {eve$k_reason_code}; position (eve$$x_scroll_bar_window {widget_called}); status := get_info (widget_called, "WIDGET_INFO", eve$$x_scroll_bar_values); widget_reason := -1; if reason_code = eve$x_callback_array {eve$k_cr_decrement} then widget_reason := 0; endif; if reason_code = eve$x_callback_array {eve$k_cr_increment} then widget_reason := 1; endif; if reason_code = eve$x_callback_array {eve$k_cr_page_increment} then widget_reason := 2; endif; if reason_code = eve$x_callback_array {eve$k_cr_page_decrement} then widget_reason := 3; endif; if reason_code = eve$x_callback_array {eve$k_cr_value_changed} then widget_reason := 4; endif; if (reason_code = eve$x_callback_array {eve$k_cr_to_top}) then widget_reason := 5; endif; if (reason_code = eve$x_callback_array {eve$k_cr_to_bottom}) then widget_reason := 6; endif; if widget_reason = -1 then ! Not a recognized callback. return; endif; if widget_tag = 'v' then ! Scroll window based on our callback reason case widget_reason [0]: scroll (eve$$x_scroll_bar_window {widget_called}, -1); [1]: scroll (eve$$x_scroll_bar_window {widget_called}, 1); [2]: scroll (eve$$x_scroll_bar_window {widget_called}, eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nscroll_page_inc}}); [3]: scroll (eve$$x_scroll_bar_window {widget_called}, -eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nscroll_page_inc}}); [4]: if (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nvalue}} = (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmax_value}} - eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nslider_size}})) then position (BUFFER_END); else if (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nvalue}} = eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmin_value}}) then position (BUFFER_BEGIN); else position (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nvalue}}); ! save old scrolling region saved_scroll_amount := get_info (eve$$x_scroll_bar_window {widget_called}, "scroll_amount"); saved_scroll_bottom := get_info (eve$$x_scroll_bar_window {widget_called}, "scroll_bottom"); saved_scroll_top := get_info (eve$$x_scroll_bar_window {widget_called}, "scroll_top"); saved_scrolls := TRUE; ! for error handler window_length := get_info (eve$$x_scroll_bar_window {widget_called}, "visible_bottom") - get_info (eve$$x_scroll_bar_window {widget_called}, "visible_top"); ! find # of lines from bottom to place cursor window_length := window_length - saved_scroll_top; ! quickly force cursor to top of screen set (SCROLLING, eve$$x_scroll_bar_window {widget_called}, eve$x_scrolling, saved_scroll_top, window_length, 0); if get_info (mark (FREE_CURSOR), "display_value") >= get_info (eve$$x_scroll_bar_window {widget_called}, "display_value") then update (eve$$x_scroll_bar_window {widget_called}); else ! record is invisible, go to previous visible record scroll (eve$$x_scroll_bar_window {widget_called}, -1); endif; ! reset old scrolling region set (SCROLLING, eve$$x_scroll_bar_window {widget_called}, eve$x_scrolling, saved_scroll_top, saved_scroll_bottom, saved_scroll_amount); endif; endif; [5]: position (BUFFER_BEGIN); [6]: position (BUFFER_END); endcase; if eve$x_bound_cursor then ! snap to text if bound cursor position (TEXT); endif; ! EVE$DECWINDOWS.TPU Page 24 else ! Scroll window based on our callback reason case widget_reason [0]: shift (eve$$x_scroll_bar_window {widget_called}, -1); [1]: shift (eve$$x_scroll_bar_window {widget_called}, 1); [2]: if (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nvalue}} = (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmax_value}} - eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nslider_size}})) then ! shift right so last char is in last col shift (eve$$x_scroll_bar_window {widget_called}, eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmax_value}} - (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nslider_size}} + get_info (eve$$x_scroll_bar_window {widget_called}, "shift_amount"))); else ! shift a window's worth shift (eve$$x_scroll_bar_window {widget_called}, eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nscroll_page_inc}}); endif; [3]: if eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nvalue}} = 0 then ! shift left all the way shift (eve$$x_scroll_bar_window {widget_called}, - get_info (eve$$x_scroll_bar_window {widget_called}, "shift_amount")); else ! shift left a window's worth shift (eve$$x_scroll_bar_window {widget_called}, - eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nscroll_page_inc}}); endif; [4]: if (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nvalue}} = (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmax_value}} - eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nslider_size}})) then ! shift right so last char is in last col shift (eve$$x_scroll_bar_window {widget_called}, eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmax_value}} - (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nslider_size}} + get_info (eve$$x_scroll_bar_window {widget_called}, "shift_amount"))); else ! shift the slider by amount moved shift (eve$$x_scroll_bar_window {widget_called}, (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nvalue}} - get_info (eve$$x_scroll_bar_window {widget_called}, "shift_amount"))); endif; [5]: ! shift left all the way shift (eve$$x_scroll_bar_window {widget_called}, - get_info (eve$$x_scroll_bar_window {widget_called}, "shift_amount")); [6]: ! shift right so last char is in last col shift (eve$$x_scroll_bar_window {widget_called}, eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmax_value}} - (eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nslider_size}} + get_info (eve$$x_scroll_bar_window {widget_called}, "shift_amount"))); endcase; endif; ! In case the cursor left a select range eve$$found_post_filter; if eve$$x_scroll_bar_window {widget_called} <> saved_window then eve$$restore_position (saved_window, saved_mark); endif; endprocedure; ! eve$scroll_dispatch ! EVE$DECWINDOWS.TPU Page 25 procedure eve_set_function_keys_motif ! Set Motif function keys local status; status := eve$set_function_keys_motif; if status then eve$message (EVE$_MOTIFFUNCON); endif; return (status); endprocedure; ! eve_set_function_keys_motif procedure eve$set_function_keys_motif ! Set Motif function keys if not eve$x_decwindows_active then eve$message (TPU$_REQUIRESDECW); return (FALSE); endif; return (eve$set_function_keys (eve$x_motif_function_keys)); endprocedure; ! eve$set_function_keys_motif procedure eve_set_function_keys_nomotif ! Motif function keys off local status; status := eve$set_function_keys_eve; if status then eve$message (EVE$_MOTIFFUNCOFF); endif; return (status); endprocedure; ! eve_set_function_keys_nomotif ! EVE$DECWINDOWS.TPU Page 26 procedure eve$create_menu_bar ! Create menu_bar, popups, UID ! Set UID, create menu_bar (and ALL its children), create popups local status, temp_array; on_error [TPU$_UIDICONERR]: ! if this fails, we may be on non-Motif window manager [OTHERWISE]: endon_error; %if eve$x_option_decwindows %then if not eve$x_decwindows_active then return (FALSE); endif; ! For the CREATE_WIDGET builtin- If you would like to use your own ! hierarchy file or logical name, place it in eve$x_widget_hierarchy_string ! during module pre-initialization if get_info (eve$x_widget_hierarchy_string, "type") = STRING then eve$x_widget_hierarchy := set (UID, eve$x_widget_hierarchy_string); else if not eve$x_ultrix_active then eve$x_widget_hierarchy := set (UID, "EVE$WIDGETS_MOTIF"); else eve$x_widget_hierarchy := set (UID, "eve_widgets_motif"); endif; endif; ! Set the EVE icon. If it fails using the root ! name of the icon in the UID file (as when on a non-Motif window manager) ! then try the small-sized icon name. If that fails, punt. status := set (ICON_PIXMAP, eve$x_widget_hierarchy, "EVE_ICON"); if not status then ! this will fail on the Motif window manager status := set (ICON_PIXMAP, eve$x_widget_hierarchy, "EVE_ICON_32X32"); if not status then eve$message (TPU$_UIDICONERR, 0, "EVE_ICON_32X32"); endif; endif; ! this one gets us the menu bar and all the menu sub-widgets eve$x_menu_bar := create_widget ("EVE_MENU_BAR", eve$x_widget_hierarchy, SCREEN, eve$kt_callback_routine); ! create the two popup menus here - they should not have been created yet return (eve$create_popups); %endif endprocedure; ! eve$create_menu_bar ! EVE$DECWINDOWS.TPU Page 27 procedure eve$manage_menu_bar ! Manage EVE's menu bar %if eve$x_option_decwindows %then if eve$x_decwindows_active and eve$eve_in_control then manage_widget (eve$x_menu_bar); ! put up the menu_bar eve$$x_menubar_managed := TRUE; ! a get_info some day? return (TRUE); endif; %endif return (FALSE); endprocedure; ! eve$manage_menu_bar procedure eve$unmanage_menu_bar ! Unmanage EVE's menu bar %if eve$x_option_decwindows %then if eve$x_decwindows_active then unmanage_widget (eve$x_menu_bar); eve$$x_menubar_managed := FALSE; return (TRUE); endif; %endif return (FALSE); endprocedure; ! eve$unmanage_menu_bar ! EVE$DECWINDOWS.TPU Page 28 procedure eve$create_popups ! Create 2 popup menus local w, child_array, status, ix, parent, class, temp_array; on_error [OTHERWISE]: endon_error; %if eve$x_option_decwindows %then if not eve$x_decwindows_active then return (FALSE); endif; ! Get the Motif parent of the popups parent := get_info (SCREEN, "pop_up_parent_widget"); eve$x_select_popup := create_widget ("SELECT_POPUP", eve$x_widget_hierarchy, parent, eve$kt_callback_routine); eve$x_no_select_popup := create_widget ("NO_SELECT_POPUP", eve$x_widget_hierarchy, parent, eve$kt_callback_routine); ! Set muscle memory so popups puts first item under the mouse (motif). temp_array := create_array; temp_array {1} := eve$x_select_popup; temp_array {2} := eve$x_no_select_popup; set (MENU_POSITION, M3DOWN, temp_array); return (TRUE); %endif endprocedure; ! eve$create_popups ! EVE$DECWINDOWS.TPU Page 29 procedure eve$page_horizontal ! Horizontal page left/right (flag) ! 1 = shift right, 0 = shift left on_error [OTHERWISE]: endon_error; if flag then return (eve_shift_right (get_info (current_window, "width") - 1)); else return (eve_shift_left (get_info (current_window, "width") - 1)); endif; endprocedure; ! eve$page_horizontal ! EVE$DECWINDOWS.TPU Page 30 procedure eve$next_word ! Next or prev word (flag) ! 1 = next, 0 = prev local saved_dir, status; on_error [OTHERWISE]: set (saved_dir, current_buffer); endon_error; if flag then saved_dir := set (FORWARD, current_buffer); else saved_dir := set (REVERSE, current_buffer); endif; if eve$current_keypad = eve$x_wps_keys then status := eve$wps_word; else status := eve_move_by_word; ! EDT keypad uses this command endif; set (saved_dir, current_buffer); return (status); endprocedure; ! eve$next_word ! EVE$DECWINDOWS.TPU Page 31 procedure eve$next_paragraph ! Next or prev paragraph (flag) ! 1 = next, 0 = prev local saved_dir, status; on_error [OTHERWISE]: set (saved_dir, current_buffer); endon_error; if flag then saved_dir := set (FORWARD, current_buffer); else saved_dir := set (REVERSE, current_buffer); endif; status := eve$wps_paragraph; set (saved_dir, current_buffer); return (status); endprocedure; ! eve$next_paragraph ! EVE$DECWINDOWS.TPU Page 32 procedure eve$primary_transfer ! Primary copy/cut (flag) ! 1 = cut, 0 = copy on_error [OTHERWISE]: endon_error; eve$$x_delete_selection := flag; eve$stuff_global_selection (FALSE); ! false = don't use mouse endprocedure; !eve$primary_transfer ! EVE$DECWINDOWS.TPU Page 33 procedure eve$$quick_post_key ! Quick transfer post key procedure ! Highlight a secondary selection as user moves the text cursor. ! User does a quick transfer by pressing Shift+F17. local temp; on_error [OTHERWISE]: endon_error; if get_info (eve$x_quick_anchor, "type") <> MARKER then return (FALSE); ! paranoia endif; if current_buffer = get_info (eve$x_quick_anchor, "buffer") then ! create range only in original buffer temp := mark (FREE_CURSOR); position (TEXT); eve$create_secondary_select (eve$x_quick_anchor, mark (NONE), TRUE); if (not eve$x_bound_cursor) and (not get_info (temp, "bound")) then position (temp); ! stay free cursored endif; endif; endprocedure; ! eve$$quick_post_key ! EVE$DECWINDOWS.TPU Page 34 procedure eve$shift_delete ! Motif Shift + Delete on_error [OTHERWISE]: endon_error; ! Pending delete a selection if able, else EDT Del Char. Can't pending ! delete if no selection, or select all, or selection in other buffer. if (eve$x_select_position <> 0) or (eve$x_box_array <> 0) then if eve$$x_state_array {eve$$k_pending_delete_active} then if eve$$pending_delete (0) then return (TRUE); endif; endif; endif; return (eve$edt_delete_char); endprocedure; ! eve$shift_delete ! EVE$DECWINDOWS.TPU Page 35 ! ! Module initialization code: ! local temp_array; eve$x_decwindows_active := get_info (SCREEN, "decwindows"); eve$x_motif_active := get_info (SCREEN, "motif"); if not eve$x_decwindows_active then return (FALSE) endif; eve$x_focus_based_select := FALSE; eve$set_function_keys (eve$x_motif_function_keys); ! Highlighting for the secondary select range eve$x_quick_copy_highlighting := UNDERLINE; eve$x_quick_anchor := 0; ! Init the widget array from the build-time key_maps eve$$$restore_widget_arrays; ! set up for RESIZE actions temp_array := create_array (4); temp_array {1} := 20; ! min width temp_array {2} := 6; ! min height ! Don't set the max. width/height under Motif, so that the Maximize button ! will make the window fill the screen. ! set (SCREEN_LIMITS, temp_array); set (RESIZE_ACTION, "eve$$resize_action"); set (ENABLE_RESIZE, ON); eve$$x_menubar_managed := FALSE; ! set TRUE by eve$manage_menu_bar ! Create arrays that associate scroll bars with windows, fetch scroll bar ! values, and tell which scoll bar callbacks we're interested in. eve$$x_scroll_bar_window := create_array; eve$$x_scroll_bar_values := create_array; eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nscroll_inc}} := 0; eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nscroll_page_inc}} := 0; eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmax_value}} := 0; eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nmin_value}} := 0; eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nvalue}} := 0; eve$$x_scroll_bar_values {eve$x_resource_array {eve$k_nslider_size}} := 0; eve$$x_scroll_bar_callbacks := create_array; eve$$x_scroll_bar_callbacks {eve$x_resource_array {eve$k_npagedec_callbk}} := 0; eve$$x_scroll_bar_callbacks {eve$x_resource_array {eve$k_npageinc_callbk}} := 0; eve$$x_scroll_bar_callbacks {eve$x_resource_array {eve$k_nunitdec_callbk}} := 0; eve$$x_scroll_bar_callbacks {eve$x_resource_array {eve$k_nunitinc_callbk}} := 0; eve$$x_scroll_bar_callbacks {eve$x_resource_array {eve$k_nvaluechng_callbk}} := 0; eve$$x_scroll_bar_callbacks {eve$x_resource_array {eve$k_ntotop_callbk}} := 0; eve$$x_scroll_bar_callbacks {eve$x_resource_array {eve$k_ntobottom_callbk}} := 0; ! initialize the count for save/restore user widgets and programs if eve$$x_save_menu_count = tpu$k_unspecified then eve$$x_save_menu_count := 0; endif; ! Setup default User Attributes eve$define_attr ("eve_set_clipboard", "eve_set_noclipboard;", message_text (EVE$_NOWPASTE, 0)); endmodule; ! EVE$DECWINDOWS.TPU Page 36 constant eve$kt_callback_routine := "eve$callback_dispatch"; ! Callback routine constant eve$kt_top_tpu_widget := "tpu$main_window"; ! Top widget constant eve$k_closure := "closure"; constant eve$k_widget := "widget"; constant eve$k_reason_code := "reason_code"; constant eve$kt_nactivate_callback := "activateCallback"; constant eve$kt_nhelp_callback := "helpCallback"; variable eve$$x_scratch_buffer; variable eve$x_focus_based_select; variable eve$$x_quick_anchor; variable eve$x_select_remove_flag; variable eve$$x_global_attr_array; variable eve$x_number_of_windows; variable eve$x_scroll_top; variable eve$x_scroll_bottom; variable eve$x_scroll_on; variable eve$x_scroll_jump; variable eve$x_scrolling; variable message_window; variable eve$$x_ruler_window; variable eve$command_window; variable eve$command_buffer; variable eve$x_mouse_list; variable eve$x_motif_function_keys; variable eve$x_widget_hierarchy_string; variable eve$x_delay_menu_creation; variable eve$$x_popup_menus; variable eve$$x_noselect_popup_entries; variable eve$$x_select_popup_entries; variable eve$$x_eve_commands; variable eve$$x_eve_command_label; variable eve$$x_separator_label; variable eve$$x_separator_array; variable eve$$x_menu_separator_count; variable eve$$x_file_pulldown_menu; variable eve$$x_edit_pulldown_menu; variable eve$$x_format_pulldown_menu; variable eve$$x_search_pulldown_menu; variable eve$$x_display_pulldown_menu; variable eve$$x_custom_pulldown_menu; variable eve$k_unit_dec; variable eve$k_unit_inc; variable eve$k_page_dec; variable eve$k_page_inc; variable eve$k_value_changed; variable eve$k_to_top; variable eve$k_to_bottom; ! menu-related popups (created when first managed): variable eve$x_new_dialog; variable eve$x_openbuffer_dialog; variable eve$x_save_file_as_dialog; variable eve$x_exit_dialog; variable eve$x_open_file_selection; variable eve$x_include_file_selection; variable eve$x_replace_dialog; variable eve$x_replace_each_dialog; variable eve$x_replace_go_each_dialog; variable eve$x_find_dialog; variable eve$x_find_each_dialog; variable eve$x_wildcard_find_dialog; variable eve$x_reallydelbuf_dialog; variable eve$x_writedelprompt_dialog; variable eve$x_reallyquit_dialog; variable eve$x_writefileprompt_dialog; variable eve$x_needfilename_dialog; variable eve$x_writebuf_dialog; variable eve$x_global_dialog; variable eve$x_attr_dialog; variable eve$x_set_margins_dialog; variable eve$x_split_window_dialog; variable eve$x_buffer_dialog; variable eve$x_message_dialog; variable eve$x_set_width_dialog; variable eve$x_set_para_indent_dialog; variable eve$x_extend_dialog; variable eve$x_save_extended_dialog; variable eve$x_at_eve_file_dialog; variable eve$x_mark_dialog; variable eve$x_goto_dialog; variable eve$x_extend_menu_dialog; ! stand-alone popups: variable eve$x_select_popup; variable eve$x_no_select_popup; variable eve$x_show_buffers_popup; ! Arrays to hold Motif callback ids and resource names. ! (See EVE$CONSTANTS.TPU for definitions of the indices into these arrays) variable eve$x_callback_array; variable eve$x_resource_array; ! EVE$DECWINDOWS.TPU Page 37 ! FILE eve$define_widget ("eve$null", eve$$k_file_pulldown, "file_menu"); eve$define_widget ("eve_new", eve$$k_new, "new"); eve$define_widget ("eve$null", eve$$k_new_dialog, "new"); eve$define_widget ("eve$null", eve$$k_new_label, "new"); eve$define_widget ("eve$null", eve$$k_new_text, "new"); eve$define_widget ("eve$$widget_new_ok", eve$$k_new_ok, "new"); eve$define_widget ("eve$$widget_new_apply", eve$$k_new_apply, "new"); eve$define_widget ("eve$$widget_new_cancel", eve$$k_new_cancel, "new"); eve$define_widget ("eve_help('new')", eve$$k_new_help , "new"); eve$define_widget ("eve_open('')", eve$$k_open, "open"); eve$define_widget ("eve$$widget_open_file_selection", eve$$k_open_file_selection, "open"); eve$define_widget ("eve_open_selected", eve$$k_open_selected, "open_selected"); eve$define_widget ("eve$null", eve$$k_openbuffer_dialog, "open"); eve$define_widget ("eve$null", eve$$k_openbuffer_label, "open"); eve$define_widget ("eve$null", eve$$k_openbuffer_text, "open"); eve$define_widget ("eve$$widget_openbuffer_ok ('')", eve$$k_openbuffer_ok, "open"); eve$define_widget ("eve$$widget_openbuffer_apply ('')", eve$$k_openbuffer_apply, "open"); eve$define_widget ("eve$$widget_openbuffer_cancel", eve$$k_openbuffer_cancel, "open"); eve$define_widget ("eve_help('open')", eve$$k_openbuffer_help, "open"); ! "INCLUDE FILE" is a UIL keyword eve$define_widget ("eve$$widget_include", eve$$k_include_fil, "include"); eve$define_widget ("eve$$widget_include_file_selection", eve$$k_include_file_selection, "include"); eve$define_widget ("eve_save_file", eve$$k_save_file, "save_file"); eve$define_widget ("eve_save_file_as ('')", eve$$k_save_file_as, "save_file_as"); eve$define_widget ("eve$null", eve$$k_save_file_as_dialog, "save_file_as"); eve$define_widget ("eve$null", eve$$k_save_file_as_label, "save_file_as"); eve$define_widget ("eve$null", eve$$k_save_file_as_text, "save_file_as"); eve$define_widget ("eve$$widget_save_file_as_ok", eve$$k_save_file_as_ok, "save_file_as"); eve$define_widget ("eve$$widget_save_file_as_apply", eve$$k_save_file_as_apply, "save_file_as"); eve$define_widget ("eve$$widget_save_file_as_cancel", eve$$k_save_file_as_cancel, "save_file_as"); eve$define_widget ("eve_help('save_file_as')", eve$$k_save_file_as_help, "save_file_as"); eve$define_widget ("eve_exit", eve$$k_exit, "exit"); eve$define_widget ("eve$null", eve$$k_exit_dialog, "exit"); eve$define_widget ("eve$null", eve$$k_exit_label, "exit"); eve$define_widget ("eve$null", eve$$k_exit_ok, "exit"); eve$define_widget ("eve$null", eve$$k_exit_cancel, "exit"); eve$define_widget ("eve_quit", eve$$k_quit, "quit"); ! EVE$DECWINDOWS.TPU Page 38 ! EDIT eve$define_widget ("eve$null", eve$$k_edit_pulldown, "edit_menu"); eve$define_widget ("eve$null", eve$$k_restore_pullright, "restore_submenu"); eve$define_widget ("eve_replace('','')", eve$$k_replace, "replace"); eve$define_widget ("eve$null", eve$$k_replace_dialog, "replace"); eve$define_widget ("eve$null", eve$$k_replace_old_label, "replace"); eve$define_widget ("eve$null", eve$$k_replace_old_text, "replace"); eve$define_widget ("eve$null", eve$$k_replace_new_label, "replace"); eve$define_widget ("eve$null", eve$$k_replace_new_text, "replace"); eve$define_widget ("eve$$widget_replace_ok", eve$$k_replace_ok, "replace"); eve$define_widget ("eve$$widget_replace_cancel", eve$$k_replace_cancel, "replace"); eve$define_widget ("eve$$widget_replace_all", eve$$k_replace_all, "replace_all"); eve$define_widget ("eve_help('replace')", eve$$k_replace_help, "replace"); eve$define_widget ("eve$null", eve$$k_replace_each_dialog, "replace"); eve$define_widget ("eve$null", eve$$k_replace_each_label, "replace"); eve$define_widget ("eve$null", eve$$k_replace_each_text, "replace"); eve$define_widget ("eve$$widget_replace_each_ok", eve$$k_replace_each_ok, "replace"); eve$define_widget ("eve$$widget_replace_each_no", eve$$k_replace_each_no, "replace"); eve$define_widget ("eve$$widget_replace_each_last", eve$$k_replace_each_last, "replace"); eve$define_widget ("eve$$widget_replace_each_all", eve$$k_replace_each_all, "replace"); eve$define_widget ("eve$$widget_replace_each_quit", eve$$k_replace_each_quit, "replace"); eve$define_widget ("eve$null", eve$$k_replace_go_each_dialog, "replace"); eve$define_widget ("eve$null", eve$$k_replace_go_each_label, "replace"); eve$define_widget ("eve$$widget_replace_go_each_ok", eve$$k_replace_go_each_ok, "replace"); eve$define_widget ("eve$$widget_replace_go_each_no", eve$$k_replace_go_each_no, "replace"); eve$define_widget ("eve_select_all", eve$$k_select_all, "select_all"); eve$define_widget ("eve_paste", eve$$k_paste, "paste"); eve$define_widget ("eve_copy", eve$$k_copy, "copy"); eve$define_widget ("eve_cut", eve$$k_cut, "cut"); eve$define_widget ("eve_restore_word", eve$$k_restore_word, "restore_word"); eve$define_widget ("eve_restore_sentence", eve$$k_restore_sentence, "restore_sentence"); eve$define_widget ("eve_restore_line", eve$$k_restore_line, "restore_line"); eve$define_widget ("eve_restore_character", eve$$k_restore_character, "restore_character"); eve$define_widget ("eve_restore_selection", eve$$k_restore_selection, "restore_selection"); ! EVE$DECWINDOWS.TPU Page 39 ! SEARCH eve$define_widget ("eve$null", eve$$k_search_pulldown, "search_menu"); eve$define_widget ("eve$null", eve$$k_whitespace_pullright, "set_whitespace"); eve$define_widget ("eve$null", eve$$k_wildcard_pullright, "set_wildcard"); eve$define_widget ("eve_find('')", eve$$k_find, "find"); eve$define_widget ("eve$null", eve$$k_find_dialog, "find"); eve$define_widget ("eve$null", eve$$k_find_label, "find"); eve$define_widget ("eve$null", eve$$k_find_text, "find"); eve$define_widget ("eve$$widget_find_ok", eve$$k_find_ok, "find"); eve$define_widget ("eve$unmanage_widget(eve$x_find_dialog);" + "eve$message(EVE$_NOFIND)", eve$$k_find_cancel, "find"); eve$define_widget ("eve_help('find')", eve$$k_find_help, "find"); eve$define_widget ("eve_find_selected", eve$$k_find_selected, "find_selected"); eve$define_widget ("eve_find_next", eve$$k_find_next, "find_next"); eve$define_widget ("eve_wildcard_find('')", eve$$k_wildcard_find, "wildcard_find"); eve$define_widget ("eve$null", eve$$k_wildcard_find_dialog, "wildcard_find"); eve$define_widget ("eve$null", eve$$k_wildcard_find_label, "wildcard_find"); eve$define_widget ("eve$null", eve$$k_wildcard_find_text, "wildcard_find"); eve$define_widget ("eve$null", eve$$k_wildcard_find_label1, "wildcard_find"); eve$define_widget ("eve$$widget_find_ok", eve$$k_wildcard_find_ok, "wildcard_find"); eve$define_widget ("eve$unmanage_widget(eve$x_wildcard_find_dialog);" + "eve$message(EVE$_NOFIND)", eve$$k_wildcard_find_cancel, "wildcard_find"); eve$define_widget ("eve_help('wildcard_find')", eve$$k_wildcard_find_help, "wildcard_find"); eve$define_widget ("eve_show_wildcards", eve$$k_show_wildcards, "show_wildcards"); eve$define_widget ("eve_set_wildcard_vms", eve$$k_set_wildcard_vms, "set_wildcard_vms"); eve$define_widget ("eve_set_wildcard_ultrix", eve$$k_set_wildcard_ultrix, "set_wildcard_ultrix"); ! EVE$DECWINDOWS.TPU Page 40 ! FORMAT eve$define_widget ("eve$null", eve$$k_format_pulldown, "format_menu"); eve$define_widget ("eve$null", eve$$k_case_pullright, "change_case"); eve$define_widget ("eve$$widget_set_margins", eve$$k_set_margins, "set_margins"); eve$define_widget ("eve$null", eve$$k_set_margins_dialog, "set_margins"); eve$define_widget ("eve$null", eve$$k_set_margins_llabel, "set_margins"); eve$define_widget ("eve$null", eve$$k_set_margins_rlabel, "set_margins"); eve$define_widget ("eve$null", eve$$k_set_margins_l_text, "set_margins"); eve$define_widget ("eve$null", eve$$k_set_margins_r_text, "set_margins"); eve$define_widget ("eve$$widget_set_margins_ok", eve$$k_set_margins_ok, "set_margins"); eve$define_widget ("eve$$widget_set_margins_apply", eve$$k_set_margins_apply, "set_margins"); eve$define_widget ("eve$$widget_set_margins_cancel", eve$$k_set_margins_cancel, "set_margins"); eve$define_widget ("eve_help('set_margins')", eve$$k_set_margins_help, "set_margins"); eve$define_widget ("eve$$widget_set_para_indent", eve$$k_set_paragraf_indent, "set_paragraph_indent"); eve$define_widget ("eve$null", eve$$k_set_para_indent_dialog, "set_paragraph_indent"); eve$define_widget ("eve$null", eve$$k_set_para_indent_label, "set_paragraph_indent"); eve$define_widget ("eve$null", eve$$k_set_para_indent_text, "set_paragraph_indent"); eve$define_widget ("eve$$widget_set_para_indent_ok", eve$$k_set_para_indent_ok, "set_paragraph_indent"); eve$define_widget ("eve$$widget_set_para_indent_apply", eve$$k_set_para_indent_apply, "set_paragraph_indent"); eve$define_widget ("eve$$widget_set_para_indent_cancel", eve$$k_set_para_indent_cancel, "set_paragraph_indent"); eve$define_widget ("eve_help('set_paragraph_indent')", eve$$k_set_para_indent_help, "set_paragraph_indent"); eve$define_widget ("eve_paginate", eve$$k_paginate, "paginate"); eve$define_widget ("eve_lowercase_word", eve$$k_lowercase_word, "lowercase_word"); eve$define_widget ("eve_uppercase_word", eve$$k_uppercase_word, "uppercase_word"); eve$define_widget ("eve_capitalize_word", eve$$k_capitalize_word, "capitalize_word"); eve$define_widget ("eve_center_line", eve$$k_center_line, "center_line"); eve$define_widget ("eve_fill_range", eve$$k_fill_range, "fill_range"); eve$define_widget ("eve_fill_paragraph", eve$$k_fill_paragraph, "fill_paragraph"); ! EVE$DECWINDOWS.TPU Page 41 ! DISPLAY eve$define_widget ("eve$null", eve$$k_display_pulldown, "display_menu"); eve$define_widget ("eve$$widget_set_width", eve$$k_set_width, "set_width"); eve$define_widget ("eve$null", eve$$k_set_width_dialog, "set_width"); eve$define_widget ("eve$null", eve$$k_set_width_label, "set_width"); eve$define_widget ("eve$null", eve$$k_set_width_text, "set_width"); eve$define_widget ("eve$$widget_set_width_ok", eve$$k_set_width_ok, "set_width"); eve$define_widget ("eve$$widget_set_width_apply", eve$$k_set_width_apply, "set_width"); eve$define_widget ("eve$$widget_set_width_cancel", eve$$k_set_width_cancel, "set_width"); eve$define_widget ("eve_help('set_width')", eve$$k_set_width_help, "set_width"); eve$define_widget ("eve_show_buffers", eve$$k_show_buffers, "show_buffers"); eve$define_widget ("eve_delete_window", eve$$k_delete_window, "delete_window"); eve$define_widget ("eve$manage_widget(eve$x_split_window_dialog," + "'SPLIT_WINDOW_DIALOG')", eve$$k_split_window, "split_window"); eve$define_widget ("eve$null", eve$$k_split_window_dialog, "split_window"); eve$define_widget ("eve$null", eve$$k_split_window_label, "split_window"); eve$define_widget ("eve$null", eve$$k_split_window_text, "split_window"); eve$define_widget ("eve$$widget_split_window_ok", eve$$k_split_window_ok, "split_window"); eve$define_widget ("eve$$widget_split_window_apply", eve$$k_split_window_apply, "split_window"); eve$define_widget ("eve$$widget_split_window_cancel", eve$$k_split_window_cancel, "split_window"); eve$define_widget ("eve_help('split_window')", eve$$k_split_window_help, "split_window"); eve$define_widget ("eve_one_window", eve$$k_one_window, "one_window"); eve$define_widget ("eve_two_windows", eve$$k_two_windows, "two_windows"); ! EVE$DECWINDOWS.TPU Page 42 ! CUSTOMIZE eve$define_widget ("eve$null", eve$$k_customize_pulldown, "customize_menu"); eve$define_widget ("eve$null", eve$$k_extend_pullright, "extend_menu"); eve$define_widget ("eve$null", eve$$k_search_attr_pullright, "search_attributes"); eve$define_widget ("eve_set_find_whitespace", eve$$k_set_find_whitespace, "set_find_whitespace"); eve$define_widget ("eve_set_find_nowhitespace", eve$$k_set_find_nowhitespace, "set_find_nowhitespace"); eve$define_widget ("eve$$widget_buffer_attr", eve$$k_buffer_attr, "buffer_attributes"); eve$define_widget ("eve$null", eve$$k_buffer_dialog, "buffer_attributes"); eve$define_widget ("eve$null", eve$$k_buffer_label, "buffer_attributes"); eve$define_widget ("eve$null", eve$$k_buf_left_margin_label, "buffer_attributes"); eve$define_widget ("eve$null", eve$$k_buf_right_margin_label, "buffer_attributes"); eve$define_widget ("eve$null", eve$$k_buf_left_margin_text, "buffer_attributes"); eve$define_widget ("eve$null", eve$$k_buf_right_margin_text, "buffer_attributes"); eve$define_widget ("eve$null", eve$$k_buffer_para_indent_label, "buffer_attributes"); eve$define_widget ("eve$null", eve$$k_buffer_para_indent_text, "buffer_attributes"); eve$define_widget ("eve$$widget_buffer_word_wrap", eve$$k_buffer_word_wrap, "word_wrap"); eve$define_widget ("eve$$widget_buffer_modifiable", eve$$k_buffer_modifiable, "modifiable"); eve$define_widget ("eve$$widget_buffer_readonly", eve$$k_buffer_readonly, "read_only"); eve$define_widget ("eve$null", eve$$k_buffer_set_tabs_at, "tab_stops"); eve$define_widget ("eve$null", eve$$k_buffer_set_tabs_every, "tab_stops"); eve$define_widget ("eve$null", eve$$k_buffer_set_tabs_text, "buffer_attributes"); eve$define_widget ("eve$$widget_buffer_apply", eve$$k_buffer_apply, "buffer_attributes"); eve$define_widget ("eve$$widget_buffer_ok", eve$$k_buffer_ok, "buffer_attributes"); eve$define_widget ("eve$$widget_buffer_cancel", eve$$k_buffer_cancel, "buffer_attributes"); eve$define_widget ("eve_help('buffer_attributes')", eve$$k_buffer_help, "buffer_attributes"); eve$define_widget ("eve$$widget_global_attr", eve$$k_global_attr, "global_attributes"); eve$define_widget ("eve$null", eve$$k_global_dialog, "global_attributes"); eve$define_widget ("eve$null", eve$$k_global_cursor, "global_attributes"); eve$define_widget ("eve$$widget_global_tabs", eve$$k_global_tabs, "tabs_visible"); eve$define_widget ("eve$null", eve$$k_global_tab_mode, "tab_modes"); eve$define_widget ("eve$$widget_global_search", eve$$k_global_search, "find_case_exact"); eve$define_widget ("eve$$widget_global_clipboard", eve$$k_global_clipboard, "clipboard"); eve$define_widget ("eve$$widget_global_pending_delete", eve$$k_global_pending_delete, "global_pending_delete"); eve$define_widget ("eve$$widget_global_box_select", eve$$k_global_box_select, "set_box_select_menu"); eve$define_widget ("eve$$widget_global_box_pad", eve$$k_global_box_pad, "set_box_pad_menu"); eve$define_widget ("eve$unmanage_widget(eve$x_global_dialog)", eve$$k_global_ok, "global_attributes"); eve$define_widget ("eve$$widget_global_cancel", eve$$k_global_cancel, "global_attributes"); eve$define_widget ("eve_help('global_attributes')", eve$$k_global_help, "global_attributes"); eve$define_widget ("eve$$widget_scroll_on", eve$$k_scroll_on, "set_scroll_on"); eve$define_widget ("eve$$widget_scroll_off", eve$$k_scroll_off, "set_scroll_off"); eve$define_widget ("eve$$widget_scroll_smooth", eve$$k_scroll_smooth, "set_scroll_smooth"); eve$define_widget ("eve$$widget_scroll_jump", eve$$k_scroll_jump, "set_scroll_jump"); eve$define_widget ("eve$null", eve$$k_cursor_label, "global_attributes"); eve$define_widget ("eve$null", eve$$k_tabs_label, "global_attributes"); eve$define_widget ("eve$null", eve$$k_tab_mode_label, "global_attributes"); eve$define_widget ("eve$null", eve$$k_search_label, "global_attributes"); eve$define_widget ("eve$$widget_free_cursor", eve$$k_free_cursor, "set_cursor_free"); eve$define_widget ("eve$$widget_bound_cursor", eve$$k_bound_cursor, "set_cursor_bound"); eve$define_widget ("eve$$widget_tab_spaces", eve$$k_tab_spaces, "tab_modes"); eve$define_widget ("eve$$widget_tab_movement", eve$$k_tab_movement, "tab_modes"); eve$define_widget ("eve$$widget_tab_insert", eve$$k_tab_insert, "tab_modes"); eve$define_widget ("eve$null", eve$$k_set_keypad, "set_keypad"); eve$define_widget ("eve$null", eve$$k_set_interface, "set_interface"); eve$define_widget ("eve$$widget_at_eve_file", eve$$k_execute_eve_file, "@"); eve$define_widget ("eve$$widget_save_extended", eve$$k_save_extended_eve, "save_extended_eve"); eve$define_widget ("eve_extend_all", eve$$k_extend_all, "extend_all"); eve$define_widget ("eve_extend_this", eve$$k_extend_this, "extend_this"); eve$define_widget ("eve$$widget_extend", eve$$k_extend_eve, "extend_eve"); eve$define_widget ("eve_learn", eve$$k_learn, "learn"); eve$define_widget ("eve$$widget_attr", eve$$k_attr_dialog, "attributes_box"); eve$define_widget ("eve$$widget_attr_ok (1)", eve$$k_attr_ok, "attributes_box"); eve$define_widget ("eve$$widget_attr_ok (0)", eve$$k_attr_cancel, "attributes_box"); eve$define_widget ("eve$$widget_attr", eve$$k_save_attributes, "save_attributes"); eve$define_widget ("eve$$widget_clear_attr", eve$$k_save_sys_attributes, "save_system_attributes"); eve$define_widget ("eve$null", eve$$k_attr_section, "attributes_box"); eve$define_widget ("eve$null", eve$$k_attr_command, "attributes_box"); eve$define_widget ("eve$null", eve$$k_attr_dont_save, "attributes_box"); eve$define_widget ("eve$null", eve$$k_current_attr_list, "attributes_box"); eve$define_widget ("eve_help('attributes_box')", eve$$k_attr_help, "attributes_box"); ! EVE$DECWINDOWS.TPU Page 43 ! help eve$define_widget ("eve$null", eve$$k_help_pulldown, "help_menu"); ! Motif: Help Mode eve$define_widget ("eve$$widget_on_context", eve$$k_help_on_context, "help_mode"); ! Motif: Using Help eve$define_widget ("eve_help('help')", eve$$k_help_on_help, "help"); ! Motif: New User eve$define_widget ("eve_help('new user')", eve$$k_help_new_user, "new_user"); ! Motif: Index eve$define_widget ("eve_help('list_of_topics')", eve$$k_help_topics, "commands"); ! Motif: Keypad eve$define_widget ("eve_help('keypad')", eve$$k_help_keypad, "keypad"); ! Motif: Keyboard eve$define_widget ("eve_help('keys')", eve$$k_help_keys, "keys"); eve$define_widget ("eve_help('menus')", eve$$k_help_menus, "menus"); ! Motif: product information eve$define_widget ("eve_help('about')", eve$$k_help_about, "about"); ! EVE$DECWINDOWS.TPU Page 44 ! dialog boxes in lieu of eve$prompt_line eve$define_widget ("eve$null", eve$$k_reallydelbuf_dialog, "reallydelbuf"); eve$define_widget ("eve$null", eve$$k_reallydelbuf_label, "reallydelbuf"); eve$define_widget ("eve$null", eve$$k_reallydelbuf_delete, "reallydelbuf"); eve$define_widget ("eve$null", eve$$k_reallydelbuf_write, "reallydelbuf"); eve$define_widget ("eve$unmanage_widget(eve$x_reallydelbuf_dialog)", eve$$k_reallydelbuf_quit, "reallydelbuf"); eve$define_widget ("eve$null", eve$$k_writedelprompt_dialog, "writedelprompt"); eve$define_widget ("eve$null", eve$$k_writedelprompt_label, "writedelprompt"); eve$define_widget ("eve$null", eve$$k_writedelprompt_text, "writedelprompt"); eve$define_widget ("eve$$widget_writedelprompt_ok", eve$$k_writedelprompt_ok, "writedelprompt"); eve$define_widget ("eve$unmanage_widget(eve$x_writedelprompt_dialog)", eve$$k_writedelprompt_cancel, "writedelprompt"); eve$define_widget ("eve$$widget_reallyquit_dialog", eve$$k_reallyquit_dialog, "quit"); eve$define_widget ("eve$null", eve$$k_writefileprompt_dialog, "writefileprompt"); eve$define_widget ("eve$null", eve$$k_writefileprompt_label, "writefileprompt"); eve$define_widget ("eve$null", eve$$k_writefileprompt_text, "writefileprompt"); eve$define_widget ("eve$null", eve$$k_writefileprompt_ok, "writefileprompt"); eve$define_widget ("eve$$widget_writefileprompt_cancel", eve$$k_writefileprompt_cancel, "writefileprompt"); eve$define_widget ("eve_help('writefileprompt')", eve$$k_writefileprompt_help, "writefileprompt"); eve$define_widget ("eve$null", eve$$k_needfilename_dialog, "exit"); eve$define_widget ("eve$null", eve$$k_needfilename_label, "exit"); eve$define_widget ("eve$null", eve$$k_needfilename_text, "exit"); eve$define_widget ("eve$null", eve$$k_needfilename_ok, "exit"); eve$define_widget ("eve$null", eve$$k_needfilename_cancel, "exit"); eve$define_widget ("eve_help('exit')", eve$$k_needfilename_help, "exit"); eve$define_widget ("eve$null", eve$$k_writebuf_dialog, "exit"); eve$define_widget ("eve$null", eve$$k_writebuf_label, "exit"); eve$define_widget ("eve$$widget_writebuf_yes", eve$$k_writebuf_ok, "exit"); eve$define_widget ("eve$$widget_writebuf_no", eve$$k_writebuf_cancel, "exit"); eve$define_widget ("eve$null", eve$$k_find_each_dialog, "find"); eve$define_widget ("eve$null", eve$$k_find_each_label, "find"); eve$define_widget ("eve$null", eve$$k_find_each_yes, "find"); eve$define_widget ("eve$unmanage_widget(eve$x_find_each_dialog)", eve$$k_find_each_cancel, "find"); eve$define_widget ("eve$null", eve$$k_extend_dialog, "extend_eve"); eve$define_widget ("eve$null", eve$$k_extend_label, "extend_eve"); eve$define_widget ("eve$null", eve$$k_extend_text, "extend_eve"); eve$define_widget ("eve$$widget_extend_ok", eve$$k_extend_ok, "extend_eve"); eve$define_widget ("eve$$widget_extend_apply", eve$$k_extend_apply, "extend_eve"); eve$define_widget ("eve$$widget_extend_cancel", eve$$k_extend_cancel, "extend_eve"); eve$define_widget ("eve_help('extend_eve')", eve$$k_extend_help, "extend_eve"); eve$define_widget ("eve$null", eve$$k_save_extended_dialog, "save_extended_eve"); eve$define_widget ("eve$null", eve$$k_save_extended_label, "save_extended_eve"); eve$define_widget ("eve$null", eve$$k_save_extended_text, "save_extended_eve"); eve$define_widget ("eve$$widget_save_extended_ok", eve$$k_save_extended_ok, "save_extended_eve"); eve$define_widget ("eve$$widget_save_extended_apply", eve$$k_save_extended_apply, "save_extended_eve"); eve$define_widget ("eve$$widget_save_extended_cancel", eve$$k_save_extended_cancel, "save_extended_eve"); eve$define_widget ("eve_help('save_extended_eve')", eve$$k_save_extended_help, "save_extended_eve"); eve$define_widget ("eve$null", eve$$k_at_eve_file_dialog, "@"); eve$define_widget ("eve$null", eve$$k_at_eve_file_label, "@"); eve$define_widget ("eve$null", eve$$k_at_eve_file_text, "@"); eve$define_widget ("eve$$widget_at_eve_file_ok", eve$$k_at_eve_file_ok, "@"); eve$define_widget ("eve$$widget_at_eve_file_apply", eve$$k_at_eve_file_apply, "@"); eve$define_widget ("eve$$widget_at_eve_file_cancel", eve$$k_at_eve_file_cancel, "@"); eve$define_widget ("eve_help('@')", eve$$k_at_eve_file_help, "@"); eve$define_widget ("eve$null", eve$$k_mark_dialog, "mark"); eve$define_widget ("eve$null", eve$$k_mark_label, "mark"); eve$define_widget ("eve$null", eve$$k_mark_text, "mark"); eve$define_widget ("eve$$widget_mark_ok", eve$$k_mark_ok, "mark"); eve$define_widget ("eve$unmanage_widget(eve$x_mark_dialog);" + "eve$message(EVE$_NOTMARKED)", eve$$k_mark_cancel, "mark"); eve$define_widget ("eve$null", eve$$k_goto_dialog, "go_to"); eve$define_widget ("eve$null", eve$$k_goto_label, "go_to"); eve$define_widget ("eve$null", eve$$k_goto_text, "go_to"); eve$define_widget ("eve$$widget_goto_ok", eve$$k_goto_ok, "go_to"); eve$define_widget ("eve$unmanage_widget(eve$x_goto_dialog);" + "eve$message(EVE$_NOMARK)", eve$$k_goto_cancel, "go_to"); eve$define_widget ("eve$null", eve$$k_message_dialog, "message_box"); eve$define_widget ("eve$null", eve$$k_message_label1, "message_box"); eve$define_widget ("eve$null", eve$$k_message_label2, "message_box"); eve$define_widget ("eve$unmanage_widget(eve$x_message_dialog)", eve$$k_message_ok, "message_box"); eve$define_widget ("eve$null", eve$$k_no_select_popup, "no_select_popup"); eve$define_widget ("eve_select", eve$$k_select, "select"); eve$define_widget ("eve$$widget_goto", eve$$k_goto, "go_to"); eve$define_widget ("eve$$widget_mark", eve$$k_mark, "mark"); eve$define_widget ("eve$null", eve$$k_select_popup, "select_popup"); eve$define_widget ("eve_reset", eve$$k_reset, "reset"); eve$define_widget ("eve$null", eve$$k_show_buffers_popup, "show_buffers_active"); eve$define_widget ("eve$null", eve$$k_delete_buffer, "delete_buffer"); eve$define_widget ("eve$null", eve$$k_write_then_delete, "write_then_delete"); eve$define_widget ("eve$null", eve$$k_write_buffer, "write_buffer"); eve$define_widget ("eve$null", eve$$k_visit_buffer, "visit_buffer"); eve$define_widget ("eve$$help_widget_unmapped", eve$$k_help_dialog, ""); eve$define_widget ("eve$$widget_extend_menu", eve$$k_extend_popup, "extend_menu"); eve$define_widget ("eve$null", eve$$k_extmenu_dialog, "extend_menu"); eve$define_widget ("eve$null", eve$$k_extmenu_popup_label, "available_menus"); eve$define_widget ("eve$$widget_extmenu_list_popups", eve$$k_extmenu_list_popups, "available_menus"); eve$define_widget ("eve$null", eve$$k_extmenu_list_cmd_label, "available_entries"); eve$define_widget ("eve$$widget_extmenu_list_commands", eve$$k_extmenu_list_commands, "available_entries"); eve$define_widget ("eve$null", eve$$k_extmenu_user_hint_label1, "available_entries"); eve$define_widget ("eve$null", eve$$k_extmenu_user_hint_label2, "available_entries"); eve$define_widget ("eve$null", eve$$k_extmenu_user_hint_label3, "available_menus"); eve$define_widget ("eve$null", eve$$k_extmenu_user_hint_label4, "available_menus"); eve$define_widget ("eve$null", eve$$k_extmenu_command_label, "available_entries"); eve$define_widget ("eve$null", eve$$k_extmenu_command_text, "available_entries"); eve$define_widget ("eve$null", eve$$k_extmenu_label_label, "available_entries"); eve$define_widget ("eve$null", eve$$k_extmenu_label_text, "available_entries"); eve$define_widget ("eve$null", eve$$k_extmenu_contents_label, "entries_menus"); eve$define_widget ("eve$null", eve$$k_extmenu_list_contents, "entries_menus"); eve$define_widget ("eve$null", eve$$k_extmenu_separator, "entries_menus"); eve$define_widget ("eve$$widget_extmenu_enter", eve$$k_extmenu_enter, "available_entries"); eve$define_widget ("eve$$widget_extmenu_delete", eve$$k_extmenu_delete, "available_entries"); eve$define_widget ("eve$$widget_extmenu_add", eve$$k_extmenu_add, "entries_menus"); eve$define_widget ("eve$$widget_extmenu_remove", eve$$k_extmenu_remove, "entries_menus"); eve$define_widget ("eve$unmanage_widget(eve$x_extend_menu_dialog);", eve$$k_extmenu_dismiss, "extend_menu"); eve$define_widget ("eve_help('extend_menu')", eve$$k_extmenu_help, "extend_menu"); ! EVE$DECWINDOWS.TPU Page 45 ! Define the Motif function keys eve$x_motif_function_keys := create_key_map ("EVE$MOTIF_FUNCTION_KEYS"); define_key (eve$$kt_return + "eve_select_all", key_name ("/", CTRL_MODIFIED), "select_all", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve_reset", key_name ("\", CTRL_MODIFIED), "reset", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve_select", key_name (" ", CTRL_MODIFIED), "select", eve$x_motif_function_keys); !** For this next one to work, all new selections must kill the saved !** selection: eve$$x_save_select_array := UNSPECIFIED. Otherwise, stale !** select data would be used for the restore. define_key (eve$$kt_return + "eve$restore_primary_selection", key_name (E4, CTRL_MODIFIED, SHIFT_MODIFIED), "KEYPAD primary_selection_restore", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$primary_transfer(0)", key_name (E3, ALT_MODIFIED, SHIFT_MODIFIED), ! KPrimaryCopy "KEYPAD primary_copy", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$primary_transfer(1)", key_name (E3, ALT_MODIFIED), ! KPrimaryCut "KEYPAD primary_cut", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve_store_text", key_name (E3, SHIFT_MODIFIED), "store_text", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve_start_of_line", key_name (LEFT, ALT_MODIFIED), "start_of_line", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve_end_of_line", key_name (RIGHT, ALT_MODIFIED), "end_of_line", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve_top", key_name (LEFT, ALT_MODIFIED, CTRL_MODIFIED), "top", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve_bottom", key_name (RIGHT, ALT_MODIFIED, CTRL_MODIFIED), "bottom", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$page_horizontal(1)", key_name (E6, CTRL_MODIFIED), "KEYPAD page_right", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$page_horizontal(0)", key_name (E5, CTRL_MODIFIED), "KEYPAD page_left", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$next_word(1)", key_name (RIGHT,CTRL_MODIFIED), "KEYPAD next_word", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$next_word(0)", key_name (LEFT,CTRL_MODIFIED), "KEYPAD prev_word", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$next_paragraph(1)", key_name (DOWN,CTRL_MODIFIED), "KEYPAD next_paragraph", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$next_paragraph(0)", key_name (UP,CTRL_MODIFIED), "KEYPAD prev_paragraph", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$edt_delete_eol", key_name (E3, CTRL_MODIFIED), "KEYPAD Del_EOL", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve_restore", key_name (E2, CTRL_MODIFIED, SHIFT_MODIFIED), "restore", eve$x_motif_function_keys); define_key (eve$$kt_return + "eve$shift_delete", key_name (DEL_KEY, SHIFT_MODIFIED), "KEYPAD shift_delete", eve$x_motif_function_keys);