156160Sru/* session.h -- Functions found in session.c.
2146515Sru   $Id: session.h,v 1.3 2004/04/11 17:56:46 karl Exp $
321495Sjmacd
4146515Sru   Copyright (C) 1993, 1998, 1999, 2001, 2002, 2004 Free Software
5146515Sru   Foundation, Inc.
621495Sjmacd
721495Sjmacd   This program is free software; you can redistribute it and/or modify
821495Sjmacd   it under the terms of the GNU General Public License as published by
921495Sjmacd   the Free Software Foundation; either version 2, or (at your option)
1021495Sjmacd   any later version.
1121495Sjmacd
1221495Sjmacd   This program is distributed in the hope that it will be useful,
1321495Sjmacd   but WITHOUT ANY WARRANTY; without even the implied warranty of
1421495Sjmacd   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1521495Sjmacd   GNU General Public License for more details.
1621495Sjmacd
1721495Sjmacd   You should have received a copy of the GNU General Public License
1821495Sjmacd   along with this program; if not, write to the Free Software
1921495Sjmacd   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
2021495Sjmacd
2121495Sjmacd   Written by Brian Fox (bfox@ai.mit.edu). */
2221495Sjmacd
2356160Sru#ifndef SESSION_H
2442660Smarkm#define SESSION_H
2521495Sjmacd
2642660Smarkm#include "info.h"
2721495Sjmacd#include "dribble.h"
2821495Sjmacd
2921495Sjmacd/* All commands that can be invoked from within info_session () receive
3021495Sjmacd   arguments in the same way.  This simple define declares the header
3121495Sjmacd   of a function named NAME, with associated documentation DOC.  The
3221495Sjmacd   documentation string is groveled out of the source files by the
3321495Sjmacd   utility program `makedoc', which is also responsible for making
3421495Sjmacd   the documentation/function-pointer maps. */
3521495Sjmacd#define DECLARE_INFO_COMMAND(name, doc) \
36146515Sruvoid name (WINDOW *window, int count, unsigned char key)
3721495Sjmacd
3821495Sjmacd/* Variables found in session.h. */
3921495Sjmacdextern VFunction *info_last_executed_command;
4021495Sjmacd
4121495Sjmacd/* Variable controlling the garbage collection of files briefly visited
4221495Sjmacd   during searches.  Such files are normally gc'ed, unless they were
4321495Sjmacd   compressed to begin with.  If this variable is non-zero, it says
4421495Sjmacd   to gc even those file buffer contents which had to be uncompressed. */
4521495Sjmacdextern int gc_compressed_files;
4621495Sjmacd
4721495Sjmacd/* When non-zero, tiling takes place automatically when info_split_window
4821495Sjmacd   is called. */
4921495Sjmacdextern int auto_tiling_p;
5021495Sjmacd
5121495Sjmacd/* Variable controlling the behaviour of default scrolling when you are
5221495Sjmacd   already at the bottom of a node. */
5321495Sjmacdextern int info_scroll_behaviour;
5421495Sjmacdextern char *info_scroll_choices[];
5521495Sjmacd
5621495Sjmacd/* Values for info_scroll_behaviour. */
5742660Smarkm#define IS_Continuous 0 /* Try to get first menu item, or failing that, the
5842660Smarkm                           "Next:" pointer, or failing that, the "Up:" and
5942660Smarkm                           "Next:" of the up. */
6021495Sjmacd#define IS_NextOnly   1 /* Try to get "Next:" menu item. */
6142660Smarkm#define IS_PageOnly   2 /* Simply give up at the bottom of a node. */
6221495Sjmacd
6321495Sjmacd/* Utility functions found in session.c */
64146515Sruextern void info_dispatch_on_key (unsigned char key, Keymap map);
65146515Sruextern unsigned char info_get_input_char (void);
66146515Sruextern unsigned char info_get_another_input_char (void);
67146515Sruextern unsigned char info_input_pending_p (void);
68146515Sruextern void remember_window_and_node (WINDOW *window, NODE *node);
69146515Sruextern void set_remembered_pagetop_and_point (WINDOW *window);
70146515Sruextern void set_window_pagetop (WINDOW *window, int desired_top);
71146515Sruextern void info_set_node_of_window (int remember, WINDOW *window,
72146515Sru    NODE *node);
73146515Sruextern void initialize_keyseq (void);
74146515Sruextern void add_char_to_keyseq (char character);
75146515Sruextern void info_gather_typeahead (void);
76146515Sruextern FILE_BUFFER *file_buffer_of_window (WINDOW *window);
77146515Sruextern long info_search_in_node (char *string, NODE *node,
78146515Sru    long int start, WINDOW *window, int dir, int case_sensitive);
79146515Sruextern long info_target_search_node (NODE *node, char *string,
80146515Sru    long int start);
81146515Sruextern void info_select_reference (WINDOW *window, REFERENCE *entry);
82146515Sruextern int info_any_buffered_input_p (void);
83146515Sruextern void print_node (NODE *node);
84146515Sruextern void dump_node_to_file (NODE *node, char *filename,
85146515Sru    int dump_subnodes);
86146515Sruextern void dump_nodes_to_file (char *filename, char **nodenames,
87146515Sru    char *output_filename, int dump_subnodes);
88146515Sruextern char *program_name_from_file_name (char *file_name);
8921495Sjmacd
9021495Sjmacd/* Do the physical deletion of WINDOW, and forget this window and
9121495Sjmacd   associated nodes. */
92146515Sruextern void info_delete_window_internal (WINDOW *window);
9321495Sjmacd
9421495Sjmacd/* Tell Info that input is coming from the file FILENAME. */
95146515Sruextern void info_set_input_from_file (char *filename);
9621495Sjmacd
9721495Sjmacd#define return_if_control_g(val) \
9821495Sjmacd  do { \
9921495Sjmacd    info_gather_typeahead (); \
10021495Sjmacd    if (info_input_pending_p () == Control ('g')) \
10121495Sjmacd      return (val); \
10221495Sjmacd  } while (0)
10321495Sjmacd
10421495Sjmacd/* The names of the functions that run an info session. */
10521495Sjmacd
10621495Sjmacd/* Starting an info session. */
107146515Sruextern void begin_multiple_window_info_session (char *filename,
108146515Sru    char **nodenames);
109146515Sruextern void begin_info_session (NODE *initial_node);
110146515Sruextern void begin_info_session_with_error (NODE *initial_node,
111146515Sru    char *format, void *arg1, void *arg2);
112146515Sruextern void info_session (void);
113146515Sruextern void initialize_info_session (NODE *node, int clear_screen);
114146515Sruextern void info_read_and_dispatch (void);
115146515Sruextern void info_intuit_options_node (WINDOW *window,
116146515Sru    NODE *initial_node, char *program);
11721495Sjmacd
11821495Sjmacd/* Moving the point within a node. */
119146515Sruextern void info_next_line (WINDOW *window, int count, unsigned char key);
120146515Sruextern void info_prev_line (WINDOW *window, int count, unsigned char key);
121146515Sruextern void info_end_of_line (WINDOW *window, int count, unsigned char key);
122146515Sruextern void info_beginning_of_line (WINDOW *window, int count, unsigned char key);
123146515Sruextern void info_forward_char (WINDOW *window, int count, unsigned char key);
124146515Sruextern void info_backward_char (WINDOW *window, int count, unsigned char key);
125146515Sruextern void info_forward_word (WINDOW *window, int count, unsigned char key);
126146515Sruextern void info_backward_word (WINDOW *window, int count, unsigned char key);
127146515Sruextern void info_beginning_of_node (WINDOW *window, int count, unsigned char key);
128146515Sruextern void info_end_of_node (WINDOW *window, int count, unsigned char key);
129146515Sruextern void info_move_to_prev_xref (WINDOW *window, int count, unsigned char key);
130146515Sruextern void info_move_to_next_xref (WINDOW *window, int count, unsigned char key);
13121495Sjmacd
13221495Sjmacd/* Scrolling text within a window. */
133146515Sruextern void info_scroll_forward (WINDOW *window, int count, unsigned char key);
134146515Sruextern void info_scroll_backward (WINDOW *window, int count, unsigned char key);
135146515Sruextern void info_redraw_display (WINDOW *window, int count, unsigned char key);
136146515Sruextern void info_toggle_wrap (WINDOW *window, int count, unsigned char key);
137146515Sruextern void info_move_to_window_line (WINDOW *window, int count,
138146515Sru    unsigned char key);
139146515Sruextern void info_up_line (WINDOW *window, int count, unsigned char key);
140146515Sruextern void info_down_line (WINDOW *window, int count, unsigned char key);
141146515Sruextern void info_scroll_half_screen_down (WINDOW *window, int count,
142146515Sru    unsigned char key);
143146515Sruextern void info_scroll_half_screen_up (WINDOW *window, int count,
144146515Sru    unsigned char key);
145146515Sruextern void info_scroll_forward_set_window (WINDOW *window, int count,
146146515Sru    unsigned char key);
147146515Sruextern void info_scroll_forward_page_only (WINDOW *window, int count,
148146515Sru    unsigned char key);
149146515Sruextern void info_scroll_forward_page_only_set_window (WINDOW *window, int count,
150146515Sru    unsigned char key);
151146515Sruextern void info_scroll_backward_set_window (WINDOW *window, int count,
152146515Sru    unsigned char key);
153146515Sruextern void info_scroll_backward_page_only (WINDOW *window, int count,
154146515Sru    unsigned char key);
155146515Sruextern void info_scroll_backward_page_only_set_window (WINDOW *window, int count,
156146515Sru    unsigned char key);
157146515Sruextern void info_scroll_other_window_backward (WINDOW *window, int count,
158146515Sru    unsigned char key);
15921495Sjmacd
16021495Sjmacd/* Manipulating multiple windows. */
161146515Sruextern void info_split_window (WINDOW *window, int count, unsigned char key);
162146515Sruextern void info_delete_window (WINDOW *window, int count, unsigned char key);
163146515Sruextern void info_keep_one_window (WINDOW *window, int count, unsigned char key);
164146515Sruextern void info_grow_window (WINDOW *window, int count, unsigned char key);
165146515Sruextern void info_scroll_other_window (WINDOW *window, int count,
166146515Sru    unsigned char key);
167146515Sruextern void info_tile_windows (WINDOW *window, int count, unsigned char key);
168146515Sruextern void info_next_window (WINDOW *window, int count, unsigned char key);
169146515Sruextern void info_prev_window (WINDOW *window, int count, unsigned char key);
17021495Sjmacd
17121495Sjmacd/* Selecting nodes. */
172146515Sruextern void info_next_node (WINDOW *window, int count, unsigned char key);
173146515Sruextern void info_prev_node (WINDOW *window, int count, unsigned char key);
174146515Sruextern void info_up_node (WINDOW *window, int count, unsigned char key);
175146515Sruextern void info_last_node (WINDOW *window, int count, unsigned char key);
176146515Sruextern void info_first_node (WINDOW *window, int count, unsigned char key);
177146515Sruextern void info_history_node (WINDOW *window, int count, unsigned char key);
178146515Sruextern void info_goto_node (WINDOW *window, int count, unsigned char key);
179146515Sruextern void info_goto_invocation_node (WINDOW *window, int count,
180146515Sru    unsigned char key);
181146515Sruextern void info_top_node (WINDOW *window, int count, unsigned char key);
182146515Sruextern void info_dir_node (WINDOW *window, int count, unsigned char key);
183146515Sruextern void info_global_next_node (WINDOW *window, int count, unsigned char key);
184146515Sruextern void info_global_prev_node (WINDOW *window, int count, unsigned char key);
185146515Sruextern void info_kill_node (WINDOW *window, int count, unsigned char key);
186146515Sruextern void info_view_file (WINDOW *window, int count, unsigned char key);
187146515Sruextern void info_menu_sequence (WINDOW *window, int count, unsigned char key);
188146515Sruextern NODE *info_follow_menus (NODE *initial_node, char **menus,
189146515Sru    const char **errstr, char **errarg1, char **errarg2);
190146515Sruextern void info_man (WINDOW *window, int count, unsigned char key);
191146515Sruextern void list_visited_nodes (WINDOW *window, int count, unsigned char key);
192146515Sruextern void select_visited_node (WINDOW *window, int count, unsigned char key);
19321495Sjmacd
19421495Sjmacd/* Selecting cross references. */
195146515Sruextern void info_menu_digit (WINDOW *window, int count, unsigned char key);
196146515Sruextern void info_menu_item (WINDOW *window, int count, unsigned char key);
197146515Sruextern void info_xref_item (WINDOW *window, int count, unsigned char key);
198146515Sruextern void info_find_menu (WINDOW *window, int count, unsigned char key);
199146515Sruextern void info_select_reference_this_line (WINDOW *window, int count,
200146515Sru    unsigned char key);
201146515Sruextern void info_last_menu_item (WINDOW *window, int count, unsigned char key);
202146515Sruextern void info_visit_menu (WINDOW *window, int count, unsigned char key);
20321495Sjmacd
20421495Sjmacd/* Hacking numeric arguments. */
20521495Sjmacdextern int info_explicit_arg, info_numeric_arg, info_numeric_arg_sign;
20621495Sjmacd
207146515Sruextern void info_add_digit_to_numeric_arg (WINDOW *window, int count,
208146515Sru    unsigned char key);
209146515Sruextern void info_universal_argument (WINDOW *window, int count,
210146515Sru    unsigned char key);
211146515Sruextern void info_initialize_numeric_arg (void);
212146515Sruextern void info_numeric_arg_digit_loop (WINDOW *window, int count,
213146515Sru    unsigned char key);
21421495Sjmacd
21521495Sjmacd/* Searching commands. */
216146515Sruextern void info_search (WINDOW *window, int count, unsigned char key);
217146515Sruextern void isearch_forward (WINDOW *window, int count, unsigned char key);
218146515Sruextern void isearch_backward (WINDOW *window, int count, unsigned char key);
219146515Sruextern void info_search_case_sensitively (WINDOW *window, int count,
220146515Sru    unsigned char key);
221146515Sruextern void info_search_backward (WINDOW *window, int count, unsigned char key);
222146515Sruextern void info_search_next (WINDOW *window, int count, unsigned char key);
223146515Sruextern void info_search_previous (WINDOW *window, int count, unsigned char key);
22421495Sjmacd
22521495Sjmacd/* Dumping and printing nodes. */
226146515Sruextern void info_print_node (WINDOW *window, int count, unsigned char key);
22721495Sjmacd
228146515Sru/* Footnotes.  */
229146515Sruextern void info_show_footnotes (WINDOW *window, int count, unsigned char key);
230146515Sru
23121495Sjmacd/* Miscellaneous commands. */
232146515Sruextern void info_abort_key (WINDOW *window, int count, unsigned char key);
233146515Sruextern void info_quit (WINDOW *window, int count, unsigned char key);
234146515Sruextern void info_do_lowercase_version (WINDOW *window, int count,
235146515Sru    unsigned char key);
23621495Sjmacd
23756160Sru#endif /* not SESSION_H */
238