! ! TPUPlus core code module ! ! TPU initilization procedures ! PROCEDURE TPUPLUS_MODULE_IDENT ! PROCEDURE TPUPLUS_MODULE_PRE_INIT ! PROCEDURE TPUPLUS_MODULE_INIT ! PROCEDURE TPU$LOCAL_INIT ! PCE initilization procedures ! PROCEDURE PCE$STANDARD_KEYS ! PROCEDURE PCE$INIT_TABS ! PROCEDURE PCE$KEYPAD_INIT ! PROCEDURE PCE$USER_INIT ! EVE command procedures ! PROCEDURE EVE_APPEND_FILE (PCE_FILE_TO_APPEND) ! PROCEDURE EVE_CHANGE_CASE (pce_range_to_change) ! PROCEDURE EVE_COLUMN_SEARCH (STRING1) ! PROCEDURE EVE_COLUMN_XCHG (STRING1, STRING2) ! PROCEDURE EVE_CUT_LEADING ! PROCEDURE EVE_ERASE_END_OF_LINE ! PROCEDURE EVE_SET_AUTO_INDENT ! PROCEDURE EVE_SET_NOAUTO_INDENT ! PROCEDURE EVE_SET_CASE_SENSITIVE ! PROCEDURE EVE_SET_CASE_INSENSITIVE ! PROCEDURE EVE_SET_CASE_OFF ! PROCEDURE EVE_SET_KEYPAD_EVE ! PROCEDURE EVE_SET_WC (VALUE1, VALUE2) ! PROCEDURE EVE_SET_WRITE ! PROCEDURE EVE_SET_NOWRITE ! PROCEDURE EVE_STATUS_LINE_OFF ! PROCEDURE EVE_STATUS_LINE_ON ! PROCEDURE EVE_TYPE_ALL (SEARCH_STRING) ! PROCEDURE EVE_UNDERLINE_THIS_LINE ! PCE utility procedures ! PROCEDURE TEST_IF_BUFFER_EXISTS (BUFFER_NAME, BUFFER_VARIABLE) ! PROCEDURE PCE_AUTO_SHIFT_LEFT ! PROCEDURE PCE_AUTO_SHIFT_RIGHT ! PROCEDURE PCE_BUFFER (BUF_PARM) ! PROCEDURE PCE_CHANGE_SCROLLING ! PROCEDURE PCE_CHANGE_WIDTH ! PROCEDURE PCE_DELETE_CURRENT_BUFFER ! PROCEDURE PCE_ERASE_LINE ! PROCEDURE PCE_ERASE_TO_END_OF_BUFFER ! PROCEDURE PCE_ERASE_TO_START_OF_BUFFER ! PROCEDURE PCE_GET_DCL_LOGICAL (DCL_LOGICAL) ! PROCEDURE PCE_GET_DCL_SYMBOL (DCL_SYMBOL) ! PROCEDURE PCE_INDENT_LINE ! PROCEDURE PCE_INSERT_PAGE_MARKS ! PROCEDURE PCE_LOOK_AT_MESSAGES ! PROCEDURE PCE_MOVE_BY_LINE ! PROCEDURE PCE_MOVE_BY_WORD_REV ! PROCEDURE PCE_NEXT_SCREEN (THIS_DIRECTION) ! PROCEDURE PCE_PREV_BUF ! PROCEDURE PCE_RECORD_LENGTH ! PROCEDURE PCE_REMOVE_PAGE_MARKS ! PROCEDURE PCE_SHOW_COLUMNS ! PROCEDURE PCE_SPLIT_SCREEN ! PROCEDURE PCE_SHIFT_SCREEN (THIS_DIRECTION) ! PROCEDURE PCE_TOGGLE_AUTO_SHIFT_MODE ! PROCEDURE PCE_UNCONDITIONAL_REPLACE (OLD, NEW) ! PROCEDURE PCE_UNCONDITIONAL_REPLACE_ALL (OLD, NEW) ! PROCEDURE PCE$SHIFT_STATUS_FIELD (THE_LENGTH, THE_FORMAT) ! PROCEDURE PCE$SCROLL_STATUS_FIELD (THE_LENGTH, THE_FORMAT) !**************************************** PROCEDURE TPUPLUS_MODULE_IDENT ! ! Revision history contained in the file TPUPLUS_VERSION.DAT ! return "TPUPLUS V5.07-000"; ENDPROCEDURE; !**************************************** PROCEDURE TPUPLUS_MODULE_PRE_INIT ! redefined EVE variables/constants/etc. ! set trim to trim spaces, tabs, & nulls eve$pattern_trim := span (" " + ascii (9) + ascii (0)) + LINE_END; ! Turn off box highlighting eve$x_box_highlighting := NONE; ! Right margin = width eve$x_default_right_margin := 0; ! Help keypad display legends -- 27 char max per legend ! 123456789012345678901234567 eve$x_help_legend_top := "TPUPlus"; eve$x_help_legend_bot := "DO or GOLD-DO for adv cmds"; ! Max offset = 9 lines eve$x_max_scroll_offset := 9; ! Tab mode = spaces eve$x_tab_mode := 1; ! Attribute checking off eve$$x_attr_exit_check := FALSE; ENDPROCEDURE; !**************************************** PROCEDURE TPUPLUS_MODULE_INIT ! procedure arguments eve$arg1_change_case := "string"; eve$arg1_column_search := "string"; eve$arg1_column_xchg := "string"; eve$arg2_column_xchg := "string"; eve$arg1_count := "string"; eve$arg1_append_file := "string"; eve$arg1_pad_lines := "integer"; eve$arg1_special_insert := "integer"; eve$arg1_search := "string"; eve$arg1_set_wc := "integer"; eve$arg2_set_wc := "integer"; eve$arg1_test_compile := "string"; eve$arg1_type_all := "string"; pce$width_size := "NORMAL"; ! options are NORMAL or WIDE pce$shift_mode := "NORMAL"; ! optione are NORMAL or AUTO pce$select_mode := "NORMAL"; ! options are NORMAL or RECTANGULAR pce$scroll_mode := "NORMAL"; ! options are NORMAL or ALT pce$x_prompt_irrecoverable := true; ! prompt on all irrecoverable operations pce$case_sensitive := ""; pce$current_user_buffer := ""; pce$current_user_position := ""; pce$x_dcl_logical := ""; pce$x_dcl_symbol := ""; pce$x_prev_buf := 0; pce$total_shift := 0; pce$x_underlines := "__________________________________________________________________" + "__________________________________________________________________"; pce_form_feed := ascii (12); pce_display_columns := 0; pce_auto_indent := 0; pce_page_size := 59; pce_wc_start := 0; pce_wc_end := 0; eag_map_lock := 0; ! help library specs eve$declare_help_library ("TPUPlus", "TPUPlus",, "For help on TPUPlus commands, type TPUPlus and press RETURN."); ! eve$kt_topic_tpuplus_pce_change_scrolling := "pce_change_scrolling"; eve$kt_topic_tpuplus_pce_change_width := "pce_change_width"; eve$kt_topic_tpuplus_pce_delete_current_buffer := "pce_delete_current_buffer"; eve$kt_topic_tpuplus_pce_erase_line := "pce_erase_line"; eve$kt_topic_tpuplus_pce_erase_to_end_of_buffer := "pce_erase_to_end_of_buffer"; eve$kt_topic_tpuplus_pce_erase_to_start_of_buffer := "pce_erase_to_start_of_buffer"; eve$kt_topic_tpuplus_pce_insert_page_marks := "pce_insert_page_marks"; eve$kt_topic_tpuplus_pce_look_at_messages := "pce_look_at_messages"; eve$kt_topic_tpuplus_pce_move_by_word_rev := "pce_move_by_word_rev"; eve$kt_topic_tpuplus_pce_prev_buf := "pce_prev_buf"; eve$kt_topic_tpuplus_pce_record_length := "pce_record_length"; eve$kt_topic_tpuplus_pce_remove_page_marks := "pce_remove_page_marks"; eve$kt_topic_tpuplus_pce_shift_screen := "pce_shift_screen"; eve$kt_topic_tpuplus_pce_show_columns := "pce_show_columns"; eve$kt_topic_tpuplus_pce_split_screen := "pce_split_screen"; eve$kt_topic_tpuplus_pce_toggle_auto_shift_mode := "pce_toggle_auto_shift_mode"; eve$kt_topic_tpuplus_pce_toggle_rectangular := "pce_toggle_rectangular"; ENDPROCEDURE; !**************************************** PROCEDURE TPU$LOCAL_INIT pce$user_init; set (shift_key, PF1); ENDPROCEDURE; !**************************************** PROCEDURE PCE$STANDARD_KEYS ! ! TPUPlus EVE key definitions ! ! EVE keypad ! pf1 is defined later ! pf2 define_key ("eve_top", pf2, "top", eve$x_user_keys); define_key ("eve_bottom", key_name (pf2, shift_key), "bottom", eve$x_user_keys); ! pf3 define_key ("eve_line ('', '')", pf3, "line", eve$x_user_keys); define_key ("eve_what_line", key_name (pf3, shift_key), "what_line", eve$x_user_keys); ! pf4 define_key ("pce_record_length", pf4, "TPUPLUS pce_record_length (Sho Len)", eve$x_user_keys); ! minus define_key ("eve_erase_word", minus, "erase_word", eve$x_user_keys); define_key ("eve_capitalize_word", key_name (minus, shift_key), "capitalize_word", eve$x_user_keys); ! comma define_key ("eve_set_wc ('', '')", comma, "set_wc", eve$x_user_keys); define_key ("eve_column_search ('')", key_name (comma, shift_key), "column_search", eve$x_user_keys); ! period define_key ("eve_erase_character", period, "erase_character", eve$x_user_keys); define_key ("pce_erase_line", key_name (period, shift_key), "TPUPLUS pce_erase_line (Era line)", eve$x_user_keys); ! enter define_key ("eve_restore", enter, "restore", eve$x_user_keys); ! kp1 define_key ("eve_move_by_word", kp1, "Move_by_word (word)", eve$x_user_keys); ! kp2 define_key ("pce_show_columns", kp2, "TPUPLUS pce_show_columns (ShoCols)", eve$x_user_keys); ! kp3 define_key (eve$$kt_return + "eve_help('keypad')", kp3, "help (help keypad)", eve$x_user_keys); ! kp4 define_key ("scroll (current_window, -1)", kp4, "scroll_up_1_line", eve$x_user_keys); define_key ("eve_center_line", key_name (kp4, shift_key), "center_line", eve$x_user_keys); ! kp5 define_key ("scroll (current_window, 1)", kp5, "scroll_down_1_line", eve$x_user_keys); define_key ("eve_replace ('', '')", key_name (kp5, shift_key), "replace", eve$x_user_keys); ! kp6 define_key ("eve_type_all ('')", kp6, "TPUPLUS type_all (Typ All)", eve$x_user_keys); define_key ("eve_column_xchg ('', '')", key_name (kp6, shift_key), "TPUPLUS column_xchg (ColXchg)", eve$x_user_keys); ! kp7 define_key ("eve_move_by_page", kp7, "move_by_page (Page)", eve$x_user_keys); define_key ("eve$wps_paragraph", key_name (kp7, shift_key), "move_by_paragraph (Para.)", eve$x_user_keys); ! kp8 define_key ("eve$wps_sentence", kp8, "move_by_sentence (Sent.)", eve$x_user_keys); define_key ("eve_cut_leading", key_name (kp8, shift_key), "cut_leading", eve$x_user_keys); ! kp9 define_key ("eve_change_case ('')", kp9, "TPUPLUS change_case (cc chr)", eve$x_user_keys); define_key ("eve_change_case ('LINE')", key_name (kp9, shift_key), "TPUPLUS change_case_line (cc line)", eve$x_user_keys); ! left arrow define_key ("pce_shift_screen ('right')", key_name (left, shift_key), "TPUPLUS pce_shift_screen (<<½scr)", eve$x_user_keys); ! right arrow define_key ("pce_shift_screen ('left')", key_name (right, shift_key), "TPUPLUS pce_shift_screen (>>½scr)", eve$x_user_keys); ! TOP ROW FUNCTION KEYS ! f8 define_key ("eve_capitalize_word", f8, "capitalize_word", eve$x_user_keys); define_key ("eve_fill_paragraph", key_name (f8, shift_key), "fill_paragraph", eve$x_user_keys); ! f9 define_key ("eve_learn", f9, "learn", eve$x_user_keys); ! help define_key ("eve_help ('')", help, "help", eve$x_user_keys); ! do define_key ("eve_tpu ('')", key_name (do, shift_key), "tpu", eve$x_user_keys); ! f12 ! plain f12 defined in tpuplus_rect.tpu !define_key ("pce_toggle_rectangular", ! f12, "TPUPLUS pce_toggle_rectangular (Rect.)", ! eve$x_user_keys); define_key ("pce_look_at_messages", key_name (f12, shift_key), "TPUPLUS pce_look_at_messages (Mssgs)", eve$x_user_keys); ! f13 define_key ("pce_change_width", f13, "TPUPLUS pce_change_width (Chg Wid)", eve$x_user_keys); define_key ("pce_toggle_auto_shift_mode", key_name (f13, shift_key), "TPUPLUS pce_toggle_auto_shift_mode (Hor.Scr)", eve$x_user_keys); ! f14 define_key ("pce_change_scrolling", key_name (f14, shift_key), "TPUPLUS pce_change_scrolling (Scroll)", eve$x_user_keys); ! f17 define_key ("eve_erase_start_of_line", f17, "erase_start_of_line (Era BOL)", eve$x_user_keys); define_key ("pce_erase_to_start_of_buffer", key_name (f17, shift_key), "TPUPLUS pce_erase_to_start_of_buffer (Era BOB)", eve$x_user_keys); ! f18 define_key ("eve_erase_end_of_line", f18, "erase_end_of_line (Era EOL)", eve$x_user_keys); define_key ("pce_erase_to_end_of_buffer", key_name (f18, shift_key), "TPUPLUS pce_erase_to_end_of_buffer (Era EOB)", eve$x_user_keys); ! f19 define_key ("eve_next_window", f19, "next_window", eve$x_user_keys); define_key ("pce_split_screen", key_name (f19, shift_key), "TPUPLUS pce_split_screen (2 Scrs)", eve$x_user_keys); ! f20 define_key ("eve$quit", f20, "quit", eve$x_user_keys); ! CONTROL KEYS ! ctrl k define_key ("eve_learn", ctrl_k_key, "learn", eve$x_user_keys); ! ctrl n define_key ("move_horizontal (-current_offset); move_vertical(1);", ctrl_n_key, "tpu move_horizontal (NxtLine)", eve$x_user_keys); ! ctrl p define_key ("move_horizontal (- (current_offset + 1))", ctrl_p_key, "tpu move_horizontal (Prv EOL)", eve$x_user_keys); ! SHIFTED CONTROL KEYS ! ctrl b define_key ("eve_show_buffers", key_name (ctrl_b_key, shift_key), "show_buffers", eve$x_user_keys); ! ctrl i define_key ("pce_insert_page_marks", key_name (ctrl_i_key, shift_key), "TPUPLUS pce_insert_page_marks (InsPgMk)", eve$x_user_keys); ! ctrl p define_key ("pce_prev_buf", key_name (ctrl_p_key, shift_key), "TPUPLUS pce_prev_buf (Prv Bfr)", eve$x_user_keys); ! ctrl r define_key ("pce_remove_page_marks", key_name (ctrl_r_key, shift_key), "TPUPLUS pce_remove_page_marks (RemPgMk)", eve$x_user_keys); ! ctrl w define_key ("pce_change_width", key_name (ctrl_w_key, shift_key), "TPUPLUS pce_change_width (Chg Wid)", eve$x_user_keys); ! shifted typing keys ! delete define_key ("pce_delete_current_buffer", key_name (del_key, shift_key), "TPUPLUS pce_delete_current_buffer (Del Bfr)", eve$x_user_keys); ! a define_key ("eve_append_file ('')", key_name ('a', shift_key), "TPUPLUS append_file (AppFile)", eve$x_user_keys); ! c define_key ("eve_set_tabs ('AT 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97 101 105 109')", key_name ('c', shift_key), "set_tabs (COBOL tabs)", eve$x_user_keys); ! f define_key ("eve_set_tabs ('AT 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63 67 71 75 79 83 87 91 95 99 103 107 111')", key_name ("f",shift_key), "set_tabs (FORTRAN tabs)", eve$x_user_keys); ! g define_key ("eve_get_file ('')", key_name ('g', shift_key), "get_file", eve$x_user_keys); ! i define_key ("eve_include_file ('')", key_name ('i', shift_key), "include_file", eve$x_user_keys); ! l define_key ("eve_what_line", key_name ("l", shift_key), "what_line", eve$x_user_keys); ! r define_key ("eve_repeat ('')", key_name ('r', shift_key), "repeat", eve$x_user_keys); ! t define_key ("eve_set_tabs ('AT 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130')", key_name ("t",shift_key), "set_tabs (WP TABS)", eve$x_user_keys); ! w define_key ("eve_write_file ('')", key_name ('w', shift_key), "write_file", eve$x_user_keys); ! ! TPUPlus EDT additional key definitions ! ! The following definitions make the EDT keypad compatible with ! the EVE keypad for all but the numeric keypad keys. ! ! KEYPAD KEYS ! kp3 define_key ("pce_move_by_word_rev", kp3, "TPUPLUS pce_move_by_word_rev (RevWord)", eve$x_edt_keys); ! SHIFTED ARROW KEYS ! left arrow define_key ("pce_shift_screen ('right')", key_name (left, shift_key), "TPUPLUS pce_shift_screen (<<½scr)", eve$x_edt_keys); ! right arrow define_key ("pce_shift_screen ('left')", key_name (right, shift_key), "TPUPLUS pce_shift_screen (>>½scr)", eve$x_edt_keys); ! TOP ROW FUNCTION KEYS ! f8 define_key ("eve_capitalize_word", f8, "capitalize_word", eve$x_edt_keys); ! f9 define_key ("eve_learn", f9, "learn", eve$x_edt_keys); ! help define_key ("eve_help ('')", help, "help", eve$x_edt_keys); ! do define_key ("eve_tpu ('')", key_name (do, shift_key), "tpu", eve$x_edt_keys); ! f12 ! plain f12 defined in tpuplus_rect.tpu define_key ("pce_look_at_messages", key_name (f12, shift_key), "TPUPLUS pce_look_at_messages (Mssgs)", eve$x_edt_keys); ! f13 define_key ("pce_change_width", f13, "TPUPLUS pce_change_width (Chg Wid)", eve$x_edt_keys); define_key ("pce_toggle_auto_shift_mode", key_name (f13, shift_key), "TPUPLUS pce_toggle_auto_shift_mode (Hor.Scr)", eve$x_edt_keys); ! f14 define_key ("pce_change_scrolling", key_name (f14, shift_key), "TPUPLUS pce_change_scrolling (Scroll)", eve$x_edt_keys); ! f17 define_key ("eve_erase_start_of_line", f17, "erase_to_start_of_line (Era BOL)", eve$x_edt_keys); define_key ("pce_erase_to_start_of_buffer", key_name (f17, shift_key), "TPUPLUS pce_erase_to_start_of_buffer (Era BOB)", eve$x_edt_keys); ! f18 define_key ("eve_erase_end_of_line", f18, "erase_end_of_line (Era EOL)", eve$x_edt_keys); define_key ("pce_erase_to_end_of_buffer", key_name (f18, shift_key), "TPUPLUS pce_erase_to_end_of_buffer (Era EOB)", eve$x_edt_keys); ! f19 define_key ("eve_next_window", f19, "next_window", eve$x_edt_keys); define_key ("pce_split_screen", key_name (f19, shift_key), "TPUPLUS pce_split_screen (2 Scrs)", eve$x_edt_keys); ! f20 define_key ("eve$quit", f20, "quit", eve$x_edt_keys); ! CONTROL KEYS ! ctrl k define_key ("eve_learn", ctrl_k_key, "learn", eve$x_edt_keys); ! ctrl n define_key ("move_horizontal (-current_offset); move_vertical(1);", ctrl_n_key, "tpu move_horizontal (NxtLine)", eve$x_edt_keys); ! ctrl p define_key ("move_horizontal (- (current_offset + 1))", ctrl_p_key, "tpu move_horizontal (Prv EOL)", eve$x_edt_keys); ! shifted control keys ! ctrl b define_key ("eve_show_buffers", key_name (ctrl_b_key, shift_key), "show_buffers", eve$x_edt_keys); ! ctrl i define_key ("pce_insert_page_marks", key_name (ctrl_i_key, shift_key), "TPUPLUS pce_insert_page_marks (InsPgMk)", eve$x_edt_keys); ! ctrl p define_key ("pce_prev_buf", key_name (ctrl_p_key, shift_key), "TPUPLUS pce_prev_buf (Prv Bfr)", eve$x_edt_keys); ! ctrl r define_key ("pce_remove_page_marks", key_name (ctrl_r_key, shift_key), "TPUPLUS pce_remove_page_marks (RemPgMk)", eve$x_edt_keys); ! ctrl w define_key ("pce_change_width", key_name (ctrl_w_key, shift_key), "TPUPLUS pce_change_width (Chg Wid)", eve$x_edt_keys); ! SHIFTED TYPING KEYS ! delete define_key ("pce_delete_current_buffer", key_name (del_key, shift_key), "TPUPLUS pce_delete_current_buffer (Del Bfr)", eve$x_edt_keys); ! a define_key ("eve_append_file ('')", key_name ('a', shift_key), "TPUPLUS append_file (AppFile)", eve$x_edt_keys); ! c define_key ("eve_set_tabs ('AT 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97 101 105 109')", key_name ('c', shift_key), "set_tabs (COBOL tabs)", eve$x_edt_keys); ! f define_key ("eve_set_tabs ('AT 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63 67 71 75 79 83 87 91 95 99 103 107 111')", key_name ("f",shift_key), "set_tabs (FORTRAN tabs)", eve$x_edt_keys); ! g define_key ("eve_get_file ('')", key_name ('g', shift_key), "get_file", eve$x_edt_keys); ! i define_key ("eve_include_file ('')", key_name ('i', shift_key), "include_file", eve$x_edt_keys); ! l define_key ("eve_what_line", key_name ("l", shift_key), "what_line", eve$x_edt_keys); ! r define_key ("eve_repeat ('')", key_name ('r', shift_key), "repeat", eve$x_edt_keys); ! t define_key ("eve_set_tabs ('AT 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130')", key_name ("t",shift_key), "set_tabs (WP TABS)", eve$x_edt_keys); ! w define_key ("eve_write_file ('')", key_name ('w', shift_key), "write_file", eve$x_edt_keys); ! ! TPUPlus VT100 EDT key definitions ! ! KEYPAD KEYS !pf1 is defined elsewhere !pf2 define_key (eve$$kt_return + "eve_help('keypad')", PF2, "help (help keypad)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_help('keys')", key_name (PF2, SHIFT_KEY), "help (help keys)", eve$x_vt100_keys); !pf3 define_key (eve$$kt_return + "eve$edt_fndnxt", PF3, "KEYPAD FndNxt", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_find('')", key_name (PF3, SHIFT_KEY), "Find", eve$x_vt100_keys); !pf4 define_key (eve$$kt_return + "eve$edt_delete_line", PF4, "KEYPAD delete_line (Del_L)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_restore_line", key_name (PF4, SHIFT_KEY), "restore_line", eve$x_vt100_keys); !kp0 define_key (eve$$kt_return + "eve$edt_line", KP0, "KEYPAD Line", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_open_line", key_name (KP0, SHIFT_KEY), "KEYPAD Open_Line", eve$x_vt100_keys); !kp1 define_key (eve$$kt_return + "eve_move_by_word", KP1, "move_by_word (Word)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_chngcase", key_name (KP1, SHIFT_KEY), "KEYPAD ChngCase", eve$x_vt100_keys); !kp2 define_key (eve$$kt_return + "eve$edt_eol", KP2, "KEYPAD EOL", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_delete_eol", key_name (KP2, SHIFT_KEY), "KEYPAD Del_EOL", eve$x_vt100_keys); !kp3 define_key ("pce_move_by_word_rev", kp3, "TPUPLUS pce_move_by_word_rev (RevWord)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_specins", key_name (KP3, SHIFT_KEY), "KEYPAD SpecIns", eve$x_vt100_keys); ! default action if user pressed GOLD/KP3 ! without having already pressed GOLD/number !kp4 define_key (eve$$kt_return + "eve_forward", KP4, "forward", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_bottom", key_name (KP4, SHIFT_KEY), "Bottom", eve$x_vt100_keys); !kp5 define_key (eve$$kt_return + "eve_reverse", KP5, "reverse", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_top", key_name (KP5, SHIFT_KEY), "Top", eve$x_vt100_keys); !kp6 define_key (eve$$kt_return + "eve_remove", KP6, "remove", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_insert_here", key_name (KP6, SHIFT_KEY), "insert_here", eve$x_vt100_keys); !kp7 define_key (eve$$kt_return + "eve_move_by_page", KP7, "move_by_page", eve$x_vt100_keys); !GOLD kp7 is defined in the file TPUPLUS_EDTP.TPU !kp8 define_key (eve$$kt_return + "eve$edt_sect", KP8, "KEYPAD sect", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_fill", key_name (KP8, SHIFT_KEY), "fill", eve$x_vt100_keys); !kp9 define_key (eve$$kt_return + "eve$edt_append", KP9, "KEYPAD append", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_replace", key_name (KP9, SHIFT_KEY), "KEYPAD EDT+WPS_replace", eve$x_vt100_keys); !minus define_key (eve$$kt_return + "eve$edt_delete_word", MINUS, "KEYPAD delete_word (Del_W)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_restore_word", key_name (MINUS, SHIFT_KEY), "restore_word", eve$x_vt100_keys); !comma define_key (eve$$kt_return + "eve$edt_delete_char", COMMA, "KEYPAD delete_character (Del_C)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_restore_character", key_name (COMMA, SHIFT_KEY), "restore_char", eve$x_vt100_keys); !period define_key (eve$$kt_return + "eve_select", PERIOD, "Select", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_reset", key_name (PERIOD, SHIFT_KEY), "reset", eve$x_vt100_keys); !enter define_key (eve$$kt_return + "eve_return", ENTER, "return", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_substitute", key_name (ENTER, SHIFT_KEY), "KEYPAD Subs", eve$x_vt100_keys); ! Control and main key array keys defined for EDT ! TYPING NUMBER KEYS define_key (eve$$kt_return + "eve$edt_repeat(0)", key_name ("0", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(1)", key_name ("1", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(2)", key_name ("2", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(3)", key_name ("3", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(4)", key_name ("4", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(5)", key_name ("5", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(6)", key_name ("6", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(7)", key_name ("7", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(8)", key_name ("8", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_repeat(9)", key_name ("9", SHIFT_KEY), "KEYPAD repeat", eve$x_vt100_keys); ! SHIFTED ARROW KEYS ! left arrow define_key ("pce_shift_screen ('right')", key_name (left, shift_key), "TPUPLUS pce_shift_screen (<<½scr)", eve$x_vt100_keys); ! right arrow define_key ("pce_shift_screen ('left')", key_name (right, shift_key), "TPUPLUS pce_shift_screen (>>½scr)", eve$x_vt100_keys); ! CONTROL KEYS ! ctrl d define_key ("eve_do", ctrl_d_key, "do", eve$x_vt100_keys); ! ctrl k define_key ("eve_learn", ctrl_k_key, "learn", eve$x_vt100_keys); ! ctrl p define_key (eve$$kt_return + "eve$edt_delete_start_word", lf_key, "KEYPAD delete_previous_word", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_backspace", bs_key, "KEYPAD BACKSPACE (start_of_line)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_backspace", ctrl_h_key, "KEYPAD BACKSPACE (start_of_line)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$edt_delete_start_word", ctrl_j_key, "KEYPAD delete_previous_word", eve$x_vt100_keys); define_key (eve$$kt_return + "eve_learn", ctrl_k_key, "learn", eve$x_vt100_keys); define_key ("move_horizontal (- (current_offset + 1))", ctrl_p_key, "tpu move_horizontal (Prv EOL)", eve$x_vt100_keys); define_key (eve$$kt_return + "eve$delete_start_line", ctrl_u_key, "KEYPAD delete_start_line", eve$x_vt100_keys); ! SHIFTED CONTROL KEYS ! ctrl b define_key ("eve_show_buffers", key_name (ctrl_b_key, shift_key), "show_buffers", eve$x_vt100_keys); ! ctrl i define_key ("pce_insert_page_marks", key_name (ctrl_i_key, shift_key), "TPUPLUS pce_insert_page_marks (InsPgMk)", eve$x_vt100_keys); ! ctrl p define_key ("pce_prev_buf", key_name (ctrl_p_key, shift_key), "TPUPLUS pce_prev_buf (Prv Bfr)", eve$x_vt100_keys); ! ctrl r define_key ("pce_remove_page_marks", key_name (ctrl_r_key, shift_key), "TPUPLUS pce_remove_page_marks (RemPgMk)", eve$x_vt100_keys); ! ctrl w define_key ("pce_change_width", key_name (ctrl_w_key, shift_key), "TPUPLUS pce_change_width (Chg Wid)", eve$x_vt100_keys); ! SHIFTED TYPING KEYS ! delete define_key ("pce_delete_current_buffer", key_name (del_key, shift_key), "TPUPLUS pce_delete_current_buffer (Del Bfr)", eve$x_vt100_keys); ! a define_key ("eve_append_file ('')", key_name ('a', shift_key), "TPUPLUS append_file (AppFile)", eve$x_vt100_keys); ! c define_key ("eve_set_tabs ('AT 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97 101 105 109')", key_name ('c', shift_key), "set_tabs (COBOL tabs)", eve$x_vt100_keys); ! f define_key ("eve_set_tabs ('AT 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63 67 71 75 79 83 87 91 95 99 103 107 111')", key_name ("f",shift_key), "set_tabs (FORTRAN tabs)", eve$x_vt100_keys); ! g define_key ("eve_get_file ('')", key_name ('g', shift_key), "get_file", eve$x_vt100_keys); ! i define_key ("eve_include_file ('')", key_name ('i', shift_key), "include_file", eve$x_vt100_keys); ! l define_key ("eve_what_line", key_name ("l", shift_key), "what_line", eve$x_vt100_keys); ! r define_key ("eve_repeat ('')", key_name ('r', shift_key), "repeat", eve$x_vt100_keys); ! t define_key ("eve_set_tabs ('AT 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130')", key_name ("t",shift_key), "set_tabs (WP TABS)", eve$x_vt100_keys); ! w define_key ("eve_write_file ('')", key_name ('w', shift_key), "write_file", eve$x_vt100_keys); ! ! End of user defined keys ! ENDPROCEDURE; !**************************************** PROCEDURE PCE$INIT_TABS ! ! This procedure will set the initial tabs for each file/buffer 'got' into ! the editing session based upon the file's extension ! local file_name, file_extension, start_col, temp_string, my_left_margin, my_right_margin; file_name := get_info (current_buffer, "file_name"); if (file_name = "") or (file_name = " ") then file_name := get_info (current_buffer, "name"); start_col := index (file_name, ".") + 1; file_extension := substr (file_name, start_col, 3); else start_col := index (file_name, "]") + 1; temp_string := substr (file_name, start_col, length (file_name)); start_col := index (temp_string, ".") + 1; file_extension := substr (temp_string, start_col, 3); endif; edit (file_extension, upper); my_left_margin := 1; my_right_margin := get_info (current_buffer, "record_size"); set (margins, current_buffer, my_left_margin, my_right_margin); if file_extension = "FOR" then ! set FORTRAN tabs, col.7 then every 4th col. thereafter set (tab_stops, current_buffer, '7 11 15 19 23 27 31 35 39 43 47 51 55 59 63 67 71 75 79 83 87 ' + '91 95 99 103 107 111'); ! FORTRAN tabs else if (file_extension = "COB") or (file_extension = "TPU") then ! set tabs every 4th column set (tab_stops, current_buffer, '5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 ' + '81 85 89 93 97 101 105 109'); ! COBOL tabs else if (file_extension = "RNO") or (file_extension = "DOC") or (file_name = "MAIN") then ! catching buffer = MAIN here helps when TPU scheduled from MAIL ! set WP tabs and set right margin to 75 set (tab_stops, current_buffer, '5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 ' + '90 95 100 105 110 115 120 125 130'); ! WP tabs set (margins, current_buffer, 1, 75); else ! set WP tabs and nothing else for all other files set (tab_stops, current_buffer, '5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 ' + '90 95 100 105 110 115 120 125 130'); ! WP tabs endif; endif; endif; ! The following is done in the pre-init module but we are doing it again ! here in case user has reset this during the editing session. ! This keeps the message that tabs are set to spaces from appearing in ! the message buffer. !eve$x_tab_mode := 1; ! Tab mode = spaces ENDPROCEDURE; !**************************************** PROCEDURE PCE$KEYPAD_INIT pce_get_dcl_symbol ("wpeditor"); eve$set_keypad (eve$x_user_keys, PF1); ! initial keypad setting if not eve$on_a_pre_lk201 then ! if user is not on a VT100 terminal if (pce$x_dcl_symbol = "EVE") then eve$set_keypad (eve$x_user_keys, PF1); ! PF1 = GOLD key else if pce$x_dcl_symbol = "WPS" then eve$set_keypad (eve$x_wps_keys, PF1); ! PF1 = GOLD key else ! If user doesn't specify anything the user gets EDT keypad eve$set_keypad (eve$x_edt_keys, PF1); ! PF1 = GOLD key endif; endif; ! Pending delete on eve$$x_state_array {eve$$k_pending_delete_enabled} := TRUE; ! ! The following code has been implemented for a few TPU users ! because compiled TPU code is faster than command file initilization at ! startup time. ! ! NOTE: A disadvantage to this method is any changes to the startup ! require that the TPU section file be recompiled. Therefore any ! commands inserted here should be fairly static commands. ! pce$x_dcl_symbol := ""; pce_get_dcl_symbol ("tpulevel"); if pce$x_dcl_symbol = "GURU" then pce$x_prompt_irrecoverable := false; eve_set_mapping; create_key_map ("rhs$my_keys"); define_key ("eve_extend_tpu('*')", f7, "Compile", "rhs$my_keys"); add_key_map (eve$x_key_map_list, "first", "rhs$my_keys"); else if pce$x_dcl_symbol = "EXP1" then eve_set_mapping; eve_set_case_insensitive; pce_toggle_rectangular; eve$x_max_scroll_offset := 4; set (scrolling, current_window, on, eve$x_max_scroll_offset, eve$x_max_scroll_offset, 0) else if pce$x_dcl_symbol = "EXP2" then eve_set_mapping; create_key_map ("jb$my_keys"); define_key ("eve_extend_tpu('*')", f7, "Compile", "jb$my_keys"); add_key_map (eve$x_key_map_list, "first", "jb$my_keys"); else if pce$x_dcl_symbol = "EXP3" then eve_set_mapping; eve_set_case_insensitive; eve$x_max_scroll_offset := 4; set (scrolling, current_window, on, eve$x_max_scroll_offset, eve$x_max_scroll_offset, 0) else if pce$x_dcl_symbol = "EDT" then eve_set_case_insensitive; eve$x_max_scroll_offset := 4; set (scrolling, current_window, on, eve$x_max_scroll_offset, eve$x_max_scroll_offset, 0) endif; endif; endif; endif; endif; else ! user is on a VT100 eve$set_keypad (eve$x_vt100_keys, PF1); ! this does it quietly endif; ! initilize for VPW usage, if editor was scheduled thru VPW (WP) pce$x_dcl_symbol := ""; pce_get_dcl_symbol ("tpuuser"); if pce$x_dcl_symbol = "VPW" then body_of_letter := search ('.AP', forward, no_exact); ! find '.AP' position (body_of_letter); ! and position move_vertical (1); ! 1 line below eve$position_in_middle (mark (free_cursor)); ! center screen endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE$USER_INIT ! ! This routine handles all of the initilization of TPUPlus for the user ! Should the user/programmer wish to customize TPUPlus further, modify this ! procedure as needed... ! set (informational, off); ! turn messages off set (success, off); pce$init_tabs; ! auto set tabs/margins pce$keypad_init; ! set the keypad up for the user set (facility_name, "TPUPlus"); ! let folks know who/what we are set (timer, on, "Executing..."); ! "Executing..." message set (informational, on); ! turn messages on set (success, on); ENDPROCEDURE; !**************************************** PROCEDURE EVE_APPEND_FILE (PCE_FILE_TO_APPEND) ! ! added 870806 - RHS ! Local file_name; if eve$prompt_string (pce_file_to_append, file_name, "File to append: ", "No file appended") then position (end_of (current_buffer)); eve_include_file (file_name); endif; ENDPROCEDURE; !**************************************** PROCEDURE EVE_CHANGE_CASE (pce_range_to_change) ! ! Change case of this line ! local this_line, this_character, this_mode, possible_range, this_position; this_position := mark (free_cursor); this_mode := get_info (current_buffer, "mode"); if (get_info (pce_range_to_change, "TYPE") = STRING) then edit (pce_range_to_change, upper); endif; if (get_info (pce_range_to_change, "TYPE") = UNSPECIFIED) then pce_range_to_change := ""; endif; if (eve$x_select_position <> 0) or (eve$x_box_array <> 0) then possible_range := select_range; if possible_range <> 0 then change_case (possible_range, invert); eve$x_select_position := 0; eve$x_box_array := 0; return; endif; endif; if (get_info (pce_range_to_change, "TYPE") = BUFFER) then change_case (current_buffer, invert); return; endif; if (substr (pce_range_to_change, 1, 1) = "L") then this_line := erase_line; change_case (this_line, invert); edit (this_line, trim_trailing); split_line; move_vertical (-1); set (INSERT, current_buffer); copy_text (this_line); set (this_mode, current_buffer); return; else if (length (get_info (current_buffer, "line")) + 1) = (current_offset + 1) then ! if we have reached the end of the current line then advance to the ! beginning of the next line move_horizontal (1); endif; this_character := erase_character (1); change_case (this_character, invert); set (INSERT, current_buffer); copy_text (this_character); set (this_mode, current_buffer); return; endif; ENDPROCEDURE; !**************************************** PROCEDURE EVE_COLUMN_SEARCH (STRING1) local old_string, temp, this_string, this_record, eocb, string_len, this_position, old_len, this_mode; if (get_info(pce_wc_start, "type") = UNSPECIFIED) or (get_info(pce_wc_end, "type") = UNSPECIFIED) then message("Start/End columns not set - operation cancelled"); return; else if (pce_wc_start = 0) or (pce_wc_end = 0) then message ("Start/End columns must be > 0 and < 983"); return; endif; endif; eocb := end_of (current_buffer); string_len := pce_wc_end - pce_wc_start + 1; old_string := string1; if (string1 = "") then old_string := read_line ("String to use for columnar search: "); if last_key = do then if (pce$prev_col_find_string = "") then message ("Nothing entered -- columnar search cancelled"); return; else old_string := pce$prev_col_find_string; endif; else if length(old_string) = 0 then message ("Nothing entered -- columnar search cancelled"); return; endif; endif; endif; this_position := mark (none); move_vertical (1); loop if (substr (current_line, pce_wc_start, string_len) = old_string) then move_horizontal (-current_offset); move_horizontal (pce_wc_start-1); eve$position_in_middle (mark (none)); pce$prev_col_find_string := old_string; return; endif; move_horizontal (-current_offset); move_vertical (1); if mark (none) = eocb then message ("String not found"); eve$position_in_middle (this_position); pce$prev_col_find_string := old_string; return; endif; endloop; ENDPROCEDURE; !**************************************** PROCEDURE EVE_COLUMN_XCHG (STRING1, STRING2) local old_string, new_string, old_len, new_len, string_len, this_mode, this_position, number_of_xchgs, temp, blanks; if (get_info (pce_wc_start, "type") = UNSPECIFIED) or (get_info (pce_wc_end, "type") = UNSPECIFIED) then message ("Start/End columns not set - operation cancelled"); return; else if (pce_wc_start <= 0) or (pce_wc_end <= 0) or (pce_wc_end >= 983) then message ("Start/End columns must be > 0 and < 983"); return; endif; endif; this_mode := get_info (current_buffer,"MODE"); string_len := pce_wc_end - pce_wc_start + 1; old_string := string1; new_string := string2; old_len := 0; new_len := 0; number_of_xchgs := 0; blanks := ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' '; if eve$prompt_string (string1, temp, "Old string: ", "Nothing entered -- Columnar exchange cancelled") then old_string := temp; new_string := read_line ("New string (Ctrl-Z to Quit): "); if last_key = ctrl_z_key then message ("Nothing entered -- Columnar exchange cancelled"); return; endif; old_len := length (old_string); new_len := length (new_string); loop exitif mark (none) = end_of (current_buffer); if substr (current_line, pce_wc_start, string_len) = old_string then move_horizontal (-current_offset); move_horizontal (pce_wc_start - 1); if this_mode = overstrike then copy_text (substr (blanks, 1, old_len)); move_horizontal (-old_len); else if (old_len > 0) and (new_len <= 0) then move_horizontal (-current_offset); move_horizontal (pce_wc_start + old_len - 2); erase_character (old_len); endif; endif; if new_string <> "" then copy_text (new_string); endif; number_of_xchgs := number_of_xchgs + 1; endif; move_horizontal (-current_offset); move_vertical (1); endloop; endif; message (fao ('Columnar exchange completed -- !SL exchanges made', number_of_xchgs)); ENDPROCEDURE; !**************************************** PROCEDURE EVE_CUT_LEADING ! ! This procedure will cut all LEADING whitespace from the current line ! ! added 880330 - RHS ! local this_line, this_mode; this_mode := get_info (current_buffer, "mode"); set (insert, current_buffer); set (screen_update, off); move_horizontal (-current_offset); this_line := erase_line; split_line; move_vertical (-1); edit (this_line, trim_leading); copy_text (this_line); move_horizontal (-current_offset); set (screen_update, on); set (this_mode, current_buffer); ENDPROCEDURE; !**************************************** PROCEDURE EVE_ERASE_END_OF_LINE ! Erase from current position through end of line local start_of_range, ! Marker for start of erase range erase_line_range, ! Range to erase saved_mark, start_mark; on_error [TPU$_CONTROLC]: eve$$restore_position (saved_mark); ! restore free cursor position eve$learn_abort; abort; [OTHERWISE]: eve$$restore_position (saved_mark); endon_error; saved_mark := mark (FREE_CURSOR); position (search (ANCHOR, FORWARD)); ! snap to text start_of_range := mark (NONE); position (LINE_END); move_horizontal (-1); erase_line_range := create_range (start_of_range, mark (NONE), NONE); eve$x_restore_line := eve$erase_text (erase_line_range, eve$x_line_buffer, FALSE); if eve$in_prompting_window then split_line; move_horizontal (-1); endif; return (TRUE); ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_AUTO_INDENT pce_auto_indent := 1; define_key ("pce_indent_line", ret_key, "tpuplus pce_auto_indent (auto indent)", eve$x_standard_keys); ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_NOAUTO_INDENT pce_auto_indent := 0; define_key ("eve_return", ret_key, "return", eve$x_standard_keys); ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_CASE_SENSITIVE pce$case_sensitive := true; ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_CASE_INSENSITIVE pce$case_sensitive := false; ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_CASE_OFF pce$case_sensitive := ""; ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_KEYPAD_EVE eve$set_keypad (eve$x_user_keys, PF1); eve$x_bound_cursor := FALSE; ! free cursor by default message ("EVE keypad defined (for keypad diagram, Press KP3 key)"); return (1); ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_WC (VALUE1, VALUE2) local temp, this_value; if eve$prompt_number (value1, temp, "Start column: ", "nothing entered -- original setting unchanged") then this_value := temp; if eve$prompt_number (value2, temp, "End column: ", "nothing entered -- original setting unchanged") then pce_wc_start := this_value; pce_wc_end := temp; endif; endif; ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_WRITE local buffer_name; if (get_info (current_buffer, "system") = 0) then buffer_name := get_info (current_buffer, "name"); set (no_write, current_buffer, off); eve$update_status_lines; endif; ENDPROCEDURE; !**************************************** PROCEDURE EVE_SET_NOWRITE ! NO_WRITE.TPU - Routine to mark a buffer as NO_WRITE and cause ! status line to be bold for all NO_WRITE buffers. local buffer_name; if (get_info (current_buffer, "system") = 0) then buffer_name := get_info (current_buffer,"name"); set (no_write, current_buffer, on); eve$update_status_lines; endif; ENDPROCEDURE; !**************************************** PROCEDURE EVE_STATUS_LINE_OFF ! Eve commands to turn the status line on and off for the current window. ! Having the status line off is particularly useful in making slides ! directly from the terminal. set (status_line, current_window, none, ""); ENDPROCEDURE; !**************************************** PROCEDURE EVE_STATUS_LINE_ON set (status_line, current_window, reverse, " Buffer"); eve$set_status_line (current_window); ENDPROCEDURE; !**************************************** PROCEDURE EVE_TYPE_ALL (SEARCH_STRING) ! new - 860626 -- RHS ! This procedure will find all occurances of a string in the current buffer ! and displays each record where the string occurs in the message buffer. ! Local this_string, this_range, temp, found_flag, old_position, the_direction, how_exact, leading_whitespace; old_position := mark (free_cursor); this_string := search_string; if (current_direction = FORWARD) then the_direction := 'Forward '; else the_direction := 'Reverse '; endif; if pce$case_sensitive <> "" then if pce$case_sensitive then how_exact := eve$x_find_exact; else if pce$case_sensitive = false then how_exact := eve$x_find_no_exact; endif; endif; endif; if search_string = '' then this_string := read_line ('TYPE ALL ' + the_direction + 'wild-card search: '); endif; if this_string = '' then message ("No search target specified - operation cancelled"); return; endif; if (eve$$build_pattern (this_string, eve$x_target_pattern, leading_whitespace) = 1) then eve$x_target := execute ("return (" + eve$x_target_pattern + ")"); else eve$x_target := eve$x_target_pattern; endif; found_flag := false; loop; this_range := search (eve$x_target, current_direction, how_exact); exitif this_range = 0; if this_range <> 0 then found_flag := true; position (this_range); message (current_line); move_vertical (1); move_horizontal (-current_offset); endif; endloop; if found_flag then message ("Items found (if any) are located in the MESSAGE buffer"); endif; eve$position_in_middle (old_position); return; ENDPROCEDURE; !**************************************** PROCEDURE EVE_UNDERLINE_THIS_LINE ! ! to underline current line ! added - 3-FEB-1988 ! local this_line, ! current line this_char, ! current char char_cnt; ! char count this_line := erase_line; edit (this_line, trim_trailing); char_cnt := 0; this_char := ""; loop char_cnt := char_cnt + 1; exitif char_cnt > length (this_line); this_char := substr (this_line ,char_cnt, 1); exitif (this_char <> " ") and (this_char <> " "); endloop; if char_cnt <= length (this_line) then this_line := this_line + ascii (13) + substr (this_line, 1, char_cnt - 1) + substr (pce$x_underlines, 1, length (this_line) - char_cnt + 1); endif; move_text (this_line); split_line; ENDPROCEDURE; !**************************************** PROCEDURE TEST_IF_BUFFER_EXISTS (BUFFER_NAME, BUFFER_VARIABLE) ! Test if a buffer already exists and return the pointer to it local loop_buffer, ! buffer - loop buffer variable test_buffer; ! buffer - buffer to be located test_buffer := buffer_name; change_case (test_buffer, upper); loop_buffer := get_info (buffers, 'first'); loop exitif loop_buffer = 0; if get_info (loop_buffer, 'name') = test_buffer then buffer_variable := loop_buffer; return (1); else loop_buffer := get_info (buffers, 'next'); endif; endloop; return (0); ENDPROCEDURE; !**************************************** PROCEDURE PCE_AUTO_SHIFT_LEFT local line_length, window_width, this_column, line_position; line_length := length (current_line); window_width := get_info (current_window, "width"); this_column := get_info (current_window, "current_column"); line_position := get_info (current_buffer, "offset") + 1; if line_position < line_length then if ((this_column >= (window_width - 1)) and ((line_position + pce$total_shift) < line_length)) then pce$total_shift := shift (current_window, 1); else cursor_horizontal (1); endif; else cursor_horizontal (1); endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_AUTO_SHIFT_RIGHT local line_length, window_width, this_column, line_position; line_length := length (current_line); window_width := get_info (current_window, "width"); this_column := get_info (current_window, "current_column"); line_position := get_info (current_buffer, "offset") + 1; if this_column = 1 then if pce$total_shift >= 1 then pce$total_shift := shift (current_window, -1); endif; else cursor_horizontal (-1); endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_BUFFER (BUF_PARM) ! ! new - 880208 - RHS ! ! This routine will be called instead of eve_buffer so that pce$x_prev_buf ! can be set. In other words, eve_buffer is called from this routine ! after a global variable is set that saves the current buffer. ! pce$x_prev_buf := current_buffer; ! set global var eve_buffer(buf_parm); ! call tpu buffer routine if pce$x_prev_buf = current_buffer then pce$x_prev_buf := 0; ! if user doesn't chg buffers reset ! pce$x_prev_buf to 0 endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_CHANGE_SCROLLING local this_window, window_to_set_scroll, amount_of_scroll, offset_amount, this_key_map_list, this_key_map; this_key_map_list := get_info (key_map_list, "current"); if this_key_map_list <> 0 then this_key_map := get_info (key_map, "first", this_key_map_list); if this_key_map = 0 then this_key_map := ""; endif; endif; this_window := current_window; if this_window = eve$command_window then if eve$$x_state_array {eve$$k_ambiguous_parse} then window_to_set_scroll := eve$choice_window; else window_to_set_scroll := eve$$x_pre_command_window; endif; position (window_to_set_scroll); else window_to_set_scroll := this_window; endif; amount_of_scroll := get_info(window_to_set_scroll, "visible_length"); offset_amount := (amount_of_scroll / 2) - 1; if pce$scroll_mode = "NORMAL" then define_key ("pce_next_screen (-1)", e5, "pce_next_screen (Prev Scr)", eve$x_user_keys); define_key ("pce_next_screen (1)", e6, "pce_next_screen (Next Scr)", eve$x_user_keys); set (scrolling, window_to_set_scroll, ON, offset_amount, offset_amount, 1); pce$scroll_mode := "ALT"; else if this_key_map <> eve$x_edt_keys then define_key ("eve_previous_screen", e5, "previous_screen", eve$x_user_keys); define_key ("eve_next_screen", e6, "next_screen", eve$x_user_keys); else define_key ("eve$edt_section (reverse)", e5, "previous_screen", eve$x_edt_keys); define_key ("eve$edt_section (forward)", e6, "next_screen", eve$x_edt_keys); endif; set (scrolling, window_to_set_scroll, ON, 0, 0, 0); pce$scroll_mode := "NORMAL"; endif; eve$update_status_lines; return; ENDPROCEDURE; !**************************************** PROCEDURE PCE_CHANGE_WIDTH ! ! swaps between normal and widescreen for all windows ! local this_window, file_name, file_extension, start_col, temp_string; file_name := get_info (current_buffer, "file_name"); if (file_name = "") or (file_name = " ") then file_name := get_info (current_buffer, "name"); start_col := index (file_name, ".") + 1; file_extension := substr (file_name, start_col, 3); else start_col := index (file_name, "]") + 1; temp_string := substr (file_name, start_col, length (file_name)); start_col := index (temp_string, ".") + 1; file_extension := substr (temp_string, start_col, 3); endif; edit (file_extension, upper); if (pce$width_size = 'WIDE') then set (width, current_window, 80); if (file_extension = "RNO") then ! set right margin to 75 set (margins, current_buffer, 1, 75); endif; else set (width, current_window, 132); if (file_extension = "RNO") then ! set right margin to 127 set (margins, current_buffer, 1, 127); endif; endif; this_window := current_window; loop this_window := get_info (this_window, "next"); exitif this_window = 0; if (pce$width_size = 'WIDE') then set (width, this_window, 80); if (file_extension = "RNO") then set (margins, current_buffer, 1, 75); endif; else set (width, this_window, 132); if (file_extension = "RNO") then set (margins, current_buffer, 1, 127); endif; endif; endloop; this_window := current_window; loop this_window := get_info (this_window, "previous"); exitif this_window = 0; if (pce$width_size = 'WIDE') then set (width, this_window, 80); if (file_extension = "RNO") then set (margins, current_buffer, 1, 75); endif; else set (width, this_window, 132); if (file_extension = "RNO") then set (margins, current_buffer, 1, 127); endif; endif; endloop; if (pce$width_size = 'WIDE') then pce$width_size := 'NORMAL'; else pce$width_size := 'WIDE'; endif; if eag_map_lock = 1 then eag_show_map; endif; eve$update_status_lines; ENDPROCEDURE; !**************************************** PROCEDURE PCE_DELETE_CURRENT_BUFFER local this_buffer, buffer_name; this_buffer := current_buffer; buffer_name := GET_INFO (this_buffer, "NAME" ); eve_delete_buffer (buffer_name); if eag_map_lock = 1 then eag_show_map; endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_ERASE_LINE ! Erase whole line from col 1 thru EOL, including eol character local start_of_range, ! Marker for start of erase range erase_line_range, ! Range to erase saved_mark, start_mark; on_error [TPU$_CONTROLC]: eve$$restore_position (saved_mark); ! restore free cursor position eve$learn_abort; abort; [OTHERWISE]: eve$$restore_position (saved_mark); endon_error; move_horizontal (-current_offset); saved_mark := mark (FREE_CURSOR); position (search (ANCHOR, FORWARD)); ! snap to text start_of_range := mark (NONE); position (LINE_END); erase_line_range := create_range (start_of_range, mark (NONE), NONE); eve$x_restore_line := eve$erase_text (erase_line_range, eve$x_line_buffer, TRUE); if eve$in_prompting_window then split_line; move_horizontal (-1); endif; return (TRUE); ENDPROCEDURE; !**************************************** PROCEDURE PCE_ERASE_TO_END_OF_BUFFER ! new - 860522 -- RHS ! rev - 900312 -- RHS to prompt before executing ! rev - 901211 -- RHS to check for end of buffer before executing ! This procedure will delete the contents of the current buffer from the ! current character position to the end of the buffer. ! Local start_of_range, this_range, answer; if mark (none) = end_of (current_buffer) then return; endif; if pce$x_prompt_irrecoverable then answer := eve$prompt_line ("Irrecoverable operation - continue (y/N)?", eve$$x_prompt_terminators, ""); if answer = 0 then message ("Operation cancelled"); return; endif; edit (answer, TRIM, COMPRESS, UPPER); answer_length := length (answer); if substr (answer, 1, answer_length) <> "Y" then message ("Operation cancelled"); return; endif; endif; start_of_range := select (none); position (end_of (current_buffer)); this_range := select_range; erase (this_range); start_of_range := 0; ENDPROCEDURE; !**************************************** PROCEDURE PCE_ERASE_TO_START_OF_BUFFER ! new - 860522 -- RHS ! rev - 900312 -- RHS to prompt before executing ! rev - 901211 -- RHS to check for beginning of buffer before executing ! This procedure will delete the contents of the current buffer from the ! beginning of the buffer to the current character position. ! Local start_of_range, this_range, answer; if mark (none) = beginning_of (current_buffer) then return; endif; if pce$x_prompt_irrecoverable then answer := eve$prompt_line ("Irrecoverable operation - continue (y/N)?", eve$$x_prompt_terminators, ""); if answer = 0 then message ("Operation cancelled"); return; endif; edit (answer, TRIM, COMPRESS, UPPER); answer_length := length (answer); if substr (answer, 1, answer_length) <> "Y" then message ("Operation cancelled"); return; endif; endif; start_of_range := select (none); position (beginning_of (current_buffer)); this_range := select_range; erase (this_range); start_of_range := 0; ENDPROCEDURE; !**************************************** PROCEDURE PCE_GET_DCL_LOGICAL (DCL_LOGICAL) local func, ! integer - call_user function code ret, ! string - call_user returned string my_logical; ! string - call_user input string my_logical := dcl_logical; if (my_logical = "") or (my_logical = " ") then message ("No DCL logical supplied"); return; endif; func := 11; ret := call_user (func, my_logical); pce$x_dcl_logical := ret; !message (ret); ENDPROCEDURE; !**************************************** PROCEDURE PCE_GET_DCL_SYMBOL (DCL_SYMBOL) local func, ! integer - call_user function code ret, ! string - call_user returned string my_symbol; ! string - call_user input string my_symbol := dcl_symbol; if (my_symbol = "") or (my_symbol = " ") then message ("No DCL symbol supplied"); return; endif; func := 12; ret := call_user (func, my_symbol); pce$x_dcl_symbol := ret; !message (ret); ENDPROCEDURE; !**************************************** PROCEDURE PCE_INDENT_LINE Local previous_line, space_char, tab_char, null_char, this_col, this_char, this_offset, length_prev_line; if pce_auto_indent = 0 then message ("Auto indentation not set -- procedure not executed"); return; endif; if current_buffer = eve$command_buffer then eve_return; return; endif; space_char := " "; tab_char := ascii(9); null_char := ""; !if current_offset < 1 then ! this_offset := 2; !else this_offset := 1; !endif; eve_return; move_vertical (-this_offset); previous_line := current_line; length_prev_line := length (previous_line); move_vertical (this_offset); this_col := 0; loop this_col := this_col + 1; exitif this_col > length_prev_line; this_char := substr (previous_line, this_col, 1); if length_prev_line > 0 then if (this_char <> space_char) and (this_char <> tab_char) and (this_char <> null_char) then eve$$indent_line_to (this_col); return; else if this_char = tab_char then message( "Previous line contains leading TABS (ascii(9)) - replace with spaces"); endif endif; endif; endloop; ! if by chance the above loop is exited then assume a blank line for prev. line ! or a line of blanks eve$$indent_line_to (length_prev_line + 1); ENDPROCEDURE; !**************************************** PROCEDURE PCE_INSERT_PAGE_MARKS ! ! added 870803 - RHS ! local found_range, this_line, line_len, page_start, page_end, here, search_range, new_key, esc, res_key; on_error endon_error; LOOP found_range := search (pce_form_feed, reverse, exact); if found_range=0 then position (beginning_of (current_buffer)); exitif found_range = 0; else position (found_range); this_line := current_line; line_len := length (this_line); exitif (line_len = 1); endif; move_vertical (-1); endloop; loop move_vertical (+1); move_horizontal (+1); move_horizontal (-current_offset); page_start := mark (none); move_vertical (pce_page_size); page_end := mark (none); position (page_start); loop found_range := search (pce_form_feed, forward, exact); if found_range=0 then position (end_of (current_buffer)); exitif found_range=0; else position (found_range); this_line := current_line; line_len := length (this_line); exitif (line_len = 1); endif; move_vertical (+1); endloop; here := mark (none); if (here = page_end) and (page_end = end_of(current_buffer)) then message ('Operation Finished'); return 1; else if here > page_end then position (page_end); update (current_window); erase (message_buffer); message (' Insert Page? [Y(es),Q(uit),Arrow keys to move]'); esc := ascii (27); loop res_key := read_char; change_case (res_key, upper); if (res_key = esc) then res_key := read_char; res_key := read_char; endif; exitif res_key = "Y"; exitif res_key = "Q"; if res_key = "A" then move_vertical (-1); update (current_window); endif; if res_key = "B" then move_vertical (+1); update (current_window); endif; endloop; if res_key = "Q" then message ('Operation Finished'); return 1; endif; if res_key = "Y" then split_line; move_vertical (-1); copy_text (pce_form_feed); update (current_window); endif; endif; endif; endloop; ENDPROCEDURE; !**************************************** PROCEDURE PCE_LOOK_AT_MESSAGES local this_buffer; this_buffer := current_buffer; if get_info (this_buffer, "name") = "MESSAGES" then eve_buffer (pce$current_user_buffer); eve$position_in_middle (pce$current_user_position); else pce$current_user_buffer := get_info (this_buffer, "name"); pce$current_user_position := mark (free_cursor); eve_buffer ("MESSAGES"); endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_MOVE_BY_LINE ! ! This is a modified version of the Procedure EVE_MOVE_BY_LINE ! ! 870302 -- RHS ! if current_direction = REVERSE then if mark (none) <> beginning_of (current_buffer) then ! If in command buffer, don't back up beyond prompt if current_buffer = eve$command_buffer then if substr (current_line, 1, length (current_line)) = eve$x_command_prompt then move_horizontal (length (current_line)); endif; else move_horizontal (-current_offset); move_vertical (-1); endif; endif; else if mark (none) <> end_of (current_buffer) then move_horizontal (-current_offset); move_vertical (1); endif; endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_MOVE_BY_WORD_REV local this_mode; this_mode := current_direction; if this_mode = FORWARD then set (REVERSE, current_buffer); eve_move_by_word; set (this_mode, current_buffer); else eve_move_by_word; endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_NEXT_SCREEN (THIS_DIRECTION) Local this_row, this_column, this_window, amount_of_scroll, old_scroll_top, old_scroll_bottom, old_scroll_amount, scroll_window; on_error endon_error; this_window := current_window; if this_window = eve$command_window then if eve$$x_state_array {eve$$k_ambiguous_parse} then scroll_window := eve$choice_window; else scroll_window := eve$$x_pre_command_window; endif; position (scroll_window); else scroll_window := this_window; endif; amount_of_scroll := get_info (scroll_window, "visible_length"); if get_info (scroll_window, "status_line") <> "" then amount_of_scroll := amount_of_scroll - 3; else amount_of_scroll := amount_of_scroll - 2; endif; if amount_of_scroll <= 0 then amount_of_scroll := 1; endif; this_row := get_info (scroll_window, "current_row"); this_column := get_info (scroll_window, "current_column"); old_scroll_top := get_info (scroll_window, "scroll_top"); old_scroll_bottom := get_info (scroll_window, "scroll_bottom"); old_scroll_amount := get_info (scroll_window, "scroll_amount"); if (this_direction >= 0) then if mark (none) = end_of (current_buffer) then return; else move_vertical (amount_of_scroll); endif; else if mark (none) = beginning_of (current_buffer) then return; else move_vertical (-amount_of_scroll); endif; endif; cursor_horizontal (this_column - get_info (scroll_window, "current_column")); if this_window <> current_window then position (this_window); endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_PREV_BUF ! This routine will automatically retrieve the previous buffer ! without having to specify the name of it. local temp_buf; ! temporary buffer ! if no previous buffer, ask for the new buffer name if pce$x_prev_buf = 0 then ! this gets us around having to set the previous buffer's name the 1st time pce_buffer(""); else ! set temp buf to current buf temp_buf := current_buffer; ! map buffer to current window map (current_window, pce$x_prev_buf); ! set status line eve$set_status_line (current_window); ! set prev buf to temp buf pce$x_prev_buf := temp_buf; eve$position_in_middle (mark (none)); endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_RECORD_LENGTH message (fao ('line length (characters) = !UL', length (current_line))); ENDPROCEDURE; !**************************************** ! ! added 870803 - RHS ! PROCEDURE PCE_REMOVE_PAGE_MARKS LOCAL found_range, This_Line, Line_len; on_error MESSAGE ('Page Marks Removed. Operation Completed.'); return; endon_error position (beginning_of (current_buffer)); LOOP found_range := SEARCH (pce_form_feed, FORWARD, EXACT); IF found_range = 0 THEN return 1; endif; POSITION (found_range); This_line := CURRENT_LINE; Line_len := LENGTH (This_line); IF (Line_len = 1) THEN erase_line; endif; move_vertical (+1); endloop; ENDPROCEDURE; !**************************************** PROCEDURE PCE_SHOW_COLUMNS ! if pce_display_columns = 0 then pce_display_columns := 1; if get_info (current_window, "width") >= 81 then set(status_line, current_window, reverse, "123456789_123456789_123456789_123456789_123456789_"+ "123456789_123456789_123456789_123456789_123456789_"+ "123456789_123456789_123456789_12"); else set(status_line, current_window, reverse, "123456789_123456789_123456789_123456789_123456789_"+ "123456789_123456789_123456789_"); endif; else pce_display_columns := 0; eve$set_status_line (current_window); endif; ! ENDPROCEDURE; !**************************************** PROCEDURE PCE_SPLIT_SCREEN local my_read_string, loop_buffer, loop_buffer_name, found_a_buffer, how_many_buffers; my_read_string := " "; found_a_buffer := 0; if eve$x_number_of_windows = 1 then eve_two_windows; eve_next_window; my_read_string := read_line ("Buffer (RETURN for a file) ?:"); edit (my_read_string, trim); edit (my_read_string, upper); if my_read_string <> "" then loop_buffer := get_info (BUFFERS, "first"); loop exitif loop_buffer = 0; loop_buffer_name := get_info (loop_buffer, "name"); edit (my_read_string, upper); if my_read_string = loop_buffer_name then found_a_buffer := 1; ! how_many_buffers := 1; exitif 1; endif; loop_buffer := get_info (BUFFERS, "next"); endloop; if found_a_buffer then eve_buffer (my_read_string); else eve_get_file (my_read_string); endif; else eve_get_file (""); endif; eve$x_number_of_windows := 2; else eve_one_window; eve$x_number_of_windows := 1; endif; if eag_map_lock = 1 then eag_show_map; endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_SHIFT_SCREEN (THIS_DIRECTION) local this_current_width, amount_to_shift, direction_to_shift; this_current_width := get_info (screen, "width"); amount_to_shift := this_current_width / 2; direction_to_shift := this_direction; edit (direction_to_shift, upper); if direction_to_shift = "RIGHT" then eve_shift_right (amount_to_shift); else if direction_to_shift = "LEFT" then eve_shift_left (amount_to_shift); endif; endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_TOGGLE_AUTO_SHIFT_MODE if (get_info (pce$shift_mode, "type") = UNSPECIFIED) then pce$shift_mode := "NORMAL"; endif; if pce$shift_mode = "NORMAL" then define_key ("pce_auto_shift_right", left, "pce_auto_shift_right (move right)", eve$x_standard_keys); define_key ("pce_auto_shift_left", right, "pce_auto_shift_left (move left)", eve$x_standard_keys); pce$shift_mode := "AUTO"; else define_key ("eve_move_left", left, "move_left (move left)", eve$x_standard_keys); define_key ("eve_move_right", right, "move_right (move right)", eve$x_standard_keys); pce$shift_mode := "NORMAL"; endif; eve$update_status_lines; ENDPROCEDURE; !**************************************** PROCEDURE PCE_UNCONDITIONAL_REPLACE (OLD, NEW) local ptr, old_mode; on_error return (0); endon_error; ptr := search_quietly (old, current_direction); if (ptr <> 0) then position (ptr); erase (ptr); old_mode := get_info (current_buffer, "mode"); set (INSERT, current_buffer); copy_text (new); set (old_mode, current_buffer); return (1); else return (0); endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE_UNCONDITIONAL_REPLACE_ALL (OLD, NEW) local ptr, old_mode; return_value := 0; loop ptr := search_quietly (old, current_direction); exitif ptr = 0; position (ptr); erase (ptr); old_mode := get_info (current_buffer, "mode"); set (INSERT, current_buffer); copy_text (new); set (old_mode, current_buffer); return_value := 1; endloop; return (return_value); ENDPROCEDURE; !**************************************** PROCEDURE PCE$SHIFT_STATUS_FIELD (THE_LENGTH, THE_FORMAT) if pce$shift_mode = "AUTO" then return (fao (the_format, "Hor Scroll")); else return ""; endif; ENDPROCEDURE; !**************************************** PROCEDURE PCE$SCROLL_STATUS_FIELD (THE_LENGTH, THE_FORMAT) if pce$scroll_mode = "ALT" then return (fao (the_format, "Jmp Scroll")); else return ""; endif; ENDPROCEDURE; !**************************************** pce$standard_keys; compile("procedure pce$standard_keys endprocedure"); undefine_key ( key_name (E1, SHIFT_KEY), eve$x_standard_keys); define_key ("eve_wildcard_find ('')", key_name (E1, SHIFT_KEY), " wildcard_find", eve$x_standard_keys);