! One-key Noting - WPE Style. Dale E. Coy 29-OCT-1988 ! [Ideas and some features gratefully borrowed from Chris Erskine] procedure onekey_update on_error endon_error; onekey_remember_position := mark(none); ! Create buffers and get the notebook file if get_info(onekey_notebook, 'type') <> buffer then ! First invocation ! Update everything ! Note: Comment-out next 4 lines to prevent initial update message ("Updating all entries..."); set(screen_update, OFF); notes$do_command ('update/class=*'); set(screen_update, ON); onekey_msg_window := create_window (2,1,OFF); onekey_checking_buffer := create_buffer ("Checking"); set (NO_WRITE, onekey_checking_buffer); set (EOB_TEXT, onekey_checking_buffer, ""); position (onekey_checking_buffer); copy_text ("Checking Conferences..."); map (onekey_msg_window, onekey_checking_buffer); update (onekey_msg_window); onekey_to_do := create_buffer ("Conferences with Unread Notes"); set (NO_WRITE, onekey_to_do); set (EOB_TEXT, onekey_to_do, ""); onekey_notebook := create_buffer ("notebook","sys$login:notes$notebook.note"); set (NO_WRITE, onekey_notebook); unmap (onekey_msg_window); else ! Subsequent invocations if notes$x_notefile_ctx <> "" then notes$do_command('close'); endif; ! Update everything message ("Updating all entries..."); set(screen_update, OFF); notes$do_command ('update/class=*'); set(screen_update, ON); map (onekey_msg_window, onekey_checking_buffer); update (onekey_msg_window); erase (onekey_notebook); position (beginning_of(onekey_notebook)); read_file ("sys$login:notes$notebook.note"); message(" "); erase (onekey_to_do); position (beginning_of(onekey_to_do)); unmap (onekey_msg_window); endif; ! Process the notebook file ! V5 TPU will make this a lot easier by actually working with ... !onekey_pat1 := line_begin & arb(76) & ascii(223) & "'"; onekey_pat1 := ascii(0) + ascii(0) + ascii(0) + ascii(0) + ascii(223) + "'"; onekey_pat_max := ascii(223) + '3' + ascii(4); onekey_pat_read := ascii(223) + 'G' + ascii(9) + ascii(4) + ascii(0) + ascii(0) + ascii(0) + '@'; position (beginning_of(onekey_notebook)); onekey_to_do_number := 0; ! Search for current primary entries in the notebook file. loop onekey_line := search (onekey_pat1, FORWARD, EXACT); exitif onekey_line = 0; position (end_of(onekey_line)); onekey_read_index := index (current_line, onekey_pat_read); ! Find read-count and max-count if onekey_read_index <> 0 then onekey_read_number := substr (current_line, onekey_read_index+8, 3); else onekey_read_number := ascii(0) + ascii(0) + ascii(0); endif; onekey_max_index := index (current_line, onekey_pat_max); if onekey_max_index <> 0 then onekey_max_number := substr (current_line, onekey_max_index+3, 3); else onekey_max_number := ascii(0) + ascii(0) + ascii(1); endif; ! If the counts aren't equal, we have unread notes. if onekey_max_number <> onekey_read_number then move_horizontal (1); onekey_value; onekey_text := substr (current_line, current_offset + 2, onekey_a_value); position (onekey_to_do); if onekey_to_do_number <> 0 then split_line; endif; copy_text (onekey_text); onekey_to_do_number := onekey_to_do_number + 1; position (end_of(onekey_line)); endif; endloop; ! This message gets obliterated on the initial invocation, but it's worth it. if onekey_to_do_number = 0 then message ("No Conferences with Unseen Notes"); else if onekey_to_do_number = 1 then message ("One Conference with Unseen Notes"); else message (Str(onekey_to_do_number) + " Conferences with Unseen Notes"); endif; endif; position (onekey_remember_position); endprocedure; ! onekey_update ! <><><><><><><><><> procedure onekey_value ! This will be a builtin when Notes uses TPU from VMS V5.0 ! Convert the character to an integer the hard way (no builtin yet) onekey_a_value := 0; onekey_character := current_character; loop exitif onekey_a_value > 255; exitif onekey_character = ascii(onekey_a_value); onekey_a_value := onekey_a_value + 1; endloop; endprocedure; ! onekey_value ! <><><><><><><><><> procedure onekey_enter local last; if notes$x_notefile_ctx = "" then ! Main menu onekey_open_next; else last := notes$x_last_error_count; notes$$enter_key; if notes$x_last_error_count > last then if (notes$x_last_error_name = 'NO_NEW_NOTE') then onekey_open_next; endif; else message (notes$x_entry_name); endif; endif; endprocedure; ! onekey_enter ! <><><><><><><><><> procedure onekey_open_next local last_pos; on_error; endon_error; last_pos := mark(none); position (beginning_of(onekey_to_do)); if mark(none) <> end_of(current_buffer) then if current_line = notes$x_entry_name then erase_line; onekey_to_do_number := onekey_to_do_number - 1; endif; endif; if mark(none) <> end_of(current_buffer) then notes$do_command('OPEN "' + current_line + '"'); if notes$x_error_on_last_command then onekey_open_next; ! Recursive endif; else message ("Finished reading Unread Notes."); ! This section can be commented-out if the automatic prompt for updating is ! not wanted. if eve$insist_y_n ('No more unseen conferences... Do you want to update all conferences? [Y] ') then onekey_update; if onekey_to_do_number > 0 then onekey_open_next; ! Recursive else position (last_pos); endif; else message (" "); position (last_pos); endif; return; endif; endprocedure; ! onekey_open_next ! <><><><><><><><><> procedure onekey_getout ! SETTING SCREEN UPDATE OFF EXPOSES US TO TPU CRASHES. ! set(screen_update, OFF); if NOT eve$x_enable_parser_notes then eve_exit; notes$do_command('exit'); notes$do_command('exit'); else if notes$x_notefile_ctx <> "" then notes$do_command('exit'); notes$do_command('exit'); else notes$do_command('exit'); endif; endif; endprocedure; ! onekey_getout ! <><><><><><><><><> Executable Statements <><><><><><><><><><><><><><><> ! NOTES Key additions define_key ('onekey_getout', key_name(F10, shift_key), ' Complete Exit', notes$kt_user_keys); define_key ('onekey_getout', key_name(F10, shift_key), ' Complete Exit', eve$x_user_keys); define_key ('onekey_getout', key_name('e', shift_key), ' Complete Exit', notes$kt_user_keys); ! CLE define_key("message (notes$x_entry_name)",key_name("w",shift_key),' where', notes$kt_user_keys); ! CLE define_key('notes$do_command("search")', kp8, 'Search Next', notes$kt_user_keys); ! CLE define_key('onekey_open_next', kp4, ' Open_next_unseen_conference', notes$kt_user_keys); ! CLE define_key ("notes$do_command ('read/marker')", key_name (kp9, shift_key), ' read /Marker',notes$kt_user_keys); define_key ("notes$do_command ('mark')", kp9, ' add mark',notes$kt_user_keys); define_key ('onekey_update', key_name("u", shift_key), ' Update', notes$kt_user_keys); define_key('onekey_enter', ENTER, '1K-Note', notes$kt_user_keys); define_key('onekey_enter', F20, '1K-Note', notes$kt_user_keys); ! WPS Key additions define_key ("eve_dcl ('')", key_name ('i', shift_key), " dcl",eve$x_user_keys); define_key ("eve_spell", key_name ('s', shift_key), " spell",eve$x_user_keys); define_key("eve_write_file ('')", key_name ('w', shift_key), " write_file", eve$x_user_keys); define_key ("eve_show", key_name ('z', shift_key), " show",eve$x_user_keys); define_key ("eve_replace ('','')", key_name (';', shift_key), " replace", eve$x_user_keys); define_key ("eve_spawn", key_name ('$', shift_key), " spawn", eve$x_user_keys); define_key ("eve$wps_next_screen", key_name ('>', shift_key), " next_screen", eve$x_user_keys); define_key ("eve$wps_previous_screen", key_name ('<', shift_key), " previous_screen", eve$x_user_keys); define_key ("eve$check_bad_window", ctrl_f_key, " editing_window", eve$x_user_keys); define_key ("eve_mark('')", kp9, " mark", eve$x_user_keys); define_key ("eve_go_to('')", key_name(kp9, shift_key)," go_to",eve$x_user_keys); define_key ("eve$wps_find_next", key_name (e1, shift_key), " find_next", eve$x_user_keys); define_key ("eve_insert_here", key_name (e2, shift_key), " paste", eve$x_user_keys); define_key ("eve$wps_copy", key_name (e3, shift_key), " copy",eve$x_user_keys); define_key ("eve$wps_top", key_name (e5, shift_key), " top", eve$x_user_keys); define_key ("eve$wps_bottom", key_name (e6, shift_key), " bottom", eve$x_user_keys); define_key('eve$wps_top', key_name(up, shift_key), ' top', eve$x_user_keys); define_key('eve$wps_bottom', key_name(down, shift_key), ' bottom', eve$x_user_keys); define_key ("eve_quote", f7, " quote", eve$x_user_keys); define_key ("eve$insert_text (ascii (27))", key_name (f7, shift_key), " escape", eve$x_user_keys); define_key ("eve_capitalize_word", f8, " capitalize_word", eve$x_user_keys); define_key ("eve_uppercase_word", key_name (f8, shift_key), " uppercase_word", eve$x_user_keys); define_key ("eve_one_window",f17," one_window",eve$x_user_keys); define_key ("eve_two_windows",f18," two_windows",eve$x_user_keys); define_key ("eve_get_file('')", key_name (f18, shift_key), " get_file", eve$x_user_keys); define_key ("eve_other_window",f19," other_window",eve$x_user_keys); define_key ("eve_buffer('')", key_name (f19, shift_key), " buffer", eve$x_user_keys); define_key ("if current_offset<>length(current_line)then" + " eve$edt_x_deleted_word := erase_character(length(current_line));endif;", f20, " erase_eol", eve$x_user_keys); define_key ("copy_text(':-)')", key_name (')', shift_key), " smile", eve$x_user_keys); define_key ("copy_text(':-}')", key_name ('}', shift_key), " grin", eve$x_user_keys); define_key ("copy_text(':-(')", key_name ('(', shift_key), " frown", eve$x_user_keys); ! Terminal must be /NOLINE_EDIT or /PASTHRU for these to work.... define_key ("wpe_line := erase_line", f6," erase_line",eve$x_user_keys); define_key ("copy_text (wpe_line); split_line;", key_name (f6, shift_key), " restore_line",eve$x_user_keys); ! FIX BUFFERS TO ALWAYS BE IN INSERT MODE set (insert, NOTES$X_EVE_COMMAND_BUFFER); set (insert, NOTES$X_COMMAND_BUFFER); ! Update at start of procedure. onekey_update; ! !