! Page 70 ! Map a buffer to the current window. If the buffer doesn't already ! exist, create a new buffer. ! ! Parameters: ! ! buffer_parameter String containing buffer name - input procedure eve_buffer (buffer_parameter) local buffer_name, ! Local copy of buffer_parameter this_buffer, ! Current buffer loop_buffer, ! Current buffer being checked in loop loop_buffer_name, ! String containing name of loop_buffer found_a_buffer, ! True if buffer found with same exact name possible_buffer_name, ! Most recent string entered in choice buffer possible_buffer, ! Buffer whose name is possible_buffer_name how_many_buffers, ! Number of buffers listed in choice buffer prompt, ! Prompt if no buffer name given new_buffer; ! New buffer created when there is no match if eve$check_bad_window then message ("Cursor has been moved to a text window; try command again"); return; endif; prompt := "Buffer name(" + eveplus$last_buffer_name + "): "; if not (eve$prompt_string (buffer_parameter, buffer_name, prompt, "Returning to last buffer")) then message(fao("Returning to last buffer !AS",eveplus$last_buffer_name)); eve_last_buffer; return; endif; eve$cleanse_string (buffer_name); ! See if we already have a buffer by that name this_buffer := current_buffer; loop_buffer := get_info (buffers, eve$kt_first); change_case (buffer_name, upper); ! buffer names are uppercase erase (eve$choice_buffer); loop exitif loop_buffer = 0; loop_buffer_name := get_info (loop_buffer, eve$kt_name); if buffer_name = loop_buffer_name then found_a_buffer := 1; how_many_buffers := 1; exitif 1; else if buffer_name = substr (loop_buffer_name, 1, length (buffer_name)) then eve$add_choice (loop_buffer_name); possible_buffer := loop_buffer; possible_buffer_name := loop_buffer_name; how_many_buffers := how_many_buffers + 1; endif; endif; loop_buffer := get_info (buffers, "next"); endloop; change_case (buffer_name, lower); ! for messages if found_a_buffer then if loop_buffer = this_buffer then message (fao ("Already in buffer !AS", loop_buffer_name)); else eveplus$last_buffer := mark(none); eveplus$last_buffer_name := get_info(current_buffer,eve$kt_name); map (current_window, loop_buffer); endif; else if get_info (eve$choice_buffer, eve$kt_record_count) > 0 then if how_many_buffers = 1 then if possible_buffer = this_buffer then message (fao ("Already in buffer !AS", possible_buffer_name)); else eveplus$last_buffer := mark(none); eveplus$last_buffer_name := get_info(current_buffer,eve$kt_name); map (current_window, possible_buffer); endif; else change_case (buffer_name, lower); eve$display_choices (fao ("Ambiguous buffer name: !AS", buffer_name)); endif; else new_buffer := create_buffer (buffer_name); eve$create_buffer_globals (new_buffer); eveplus$last_buffer := mark(none); eveplus$last_buffer_name := get_info(current_buffer,eve$kt_name); map (current_window, new_buffer); set (eob_text, new_buffer, "[End of file]"); set (margins, new_buffer, eve$x_default_left_margin, get_info (current_window, eve$kt_width) - eve$x_default_right_margin); endif; endif; eve$set_status_line (current_window); endprocedure; ! Procedure to return to the buffer you were in before last Eve_Buffer ! command was given. procedure eve_last_buffer local temp_pos; ! Holding variable for position if eve$check_bad_window then message ("Cursor has been moved to a text window; try command again"); return; endif; temp_pos := mark(none); ! Save current location eveplus$last_buffer_name := get_info(current_buffer,eve$kt_name); if get_info (eveplus$last_buffer,"TYPE") = UNSPECIFIED then message ("No previous buffer to go to."); else position(eveplus$last_buffer); ! Go to saved location endif; map (current_window, current_buffer); eve$set_status_line(current_window); eveplus$last_buffer := temp_pos; ! Save for next execution endprocedure;