texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

texinfo/info dir.c,1.1.1.1,1.2 display.c,1.1.1.1,1.2 display.h,1.1.1.1,1


From: dirt
Subject: texinfo/info dir.c,1.1.1.1,1.2 display.c,1.1.1.1,1.2 display.h,1.1.1.1,1.2 doc.h,1.1.1.1,1.2 dribble.c,1.1.1.1,1.2 dribble.h,1.1.1.1,1.2 echo-area.c,1.1.1.1,1.2 echo-area.h,1.1.1.1,1.2 filesys.c,1.1.1.1,1.2 filesys.h,1.1.1.1,1.2 footnotes.c,1.1.1.1,1.2 footnotes.h,1.1.1.1,1.2 gc.c,1.1.1.1,1.2 gc.h,1.1.1.1,1.2 indices.c,1.1.1.1,1.2 indices.h,1.1.1.1,1.2 info-utils.c,1.3,1.4 info-utils.h,1.2,1.3 info.c,1.6,1.7 info.h,1.1.1.1,1.2 infodoc.c,1.1.1.1,1.2 infokey.c,1.1.1.1,1.2 infomap.c,1.1.1.1,1.2 infomap.h,1.1.1.1,1.2 m-x.c,1.1.1.1,1.2 makedoc.c,1.1.1.1,1.2 man.c,1.1.1.1,1.2 man.h,1.1.1.1,1.2 nodemenu.c,1.1.1.1,1.2 nodes.c,1.1.1.1,1.2 nodes.h,1.1.1.1,1.2 search.c,1.1.1.1,1.2 search.h,1.1.1.1,1.2 session.c,1.5,1.6 session.h,1.1.1.1,1.2 signals.c,1.1.1.1,1.2 terminal.c,1.1.1.1,1.2 terminal.h,1.1.1.1,1.2 tilde.c,1.1.1.1,1.2 tilde.h,1.1.1.1,1.2 variables.c,1.1.1.1,1.2 variables.h,1.1.1.1,1.2 window.c,1.1.1.1,1.2 window.h,1.1.1.1,1.2
Date: Sat, 13 Mar 2004 16:52:50 +0100

Update of /cvsroot/texinfo/texinfo/info
In directory sheep:/tmp/cvs-serv12320/info

Modified Files:
        dir.c display.c display.h doc.h dribble.c dribble.h 
        echo-area.c echo-area.h filesys.c filesys.h footnotes.c 
        footnotes.h gc.c gc.h indices.c indices.h info-utils.c 
        info-utils.h info.c info.h infodoc.c infokey.c infomap.c 
        infomap.h m-x.c makedoc.c man.c man.h nodemenu.c nodes.c 
        nodes.h search.c search.h session.c session.h signals.c 
        terminal.c terminal.h tilde.c tilde.h variables.c variables.h 
        window.c window.h 
Log Message:
2004-03-13  Alper Ersoy  <address@hidden>

        * info/dir.c:
        * info/display.c:
        * info/display.h:
        * info/doc.h:
        * info/dribble.c:
        * info/dribble.h:
        * info/echo-area.c:
        * info/echo-area.h:
        * info/filesys.c:
        * info/filesys.h:
        * info/footnotes.c:
        * info/footnotes.h:
        * info/gc.c:
        * info/gc.h:
        * info/indices.c:
        * info/indices.h:
        * info/info-utils.c:
        * info/info-utils.h:
        * info/info.c:
        * info/info.h:
        * info/infodoc.c:
        * info/infokey.c:
        * info/infomap.c:
        * info/infomap.h:
        * info/m-x.c:
        * info/makedoc.c:
        * info/man.c:
        * info/man.h:
        * info/nodemenu.c:
        * info/nodes.c:
        * info/nodes.h:
        * info/search.c:
        * info/search.h:
        * info/session.c:
        * info/session.h:
        * info/signals.c:
        * info/terminal.c:
        * info/terminal.h:
        * info/tilde.c:
        * info/tilde.h:
        * info/variables.c:
        * info/variables.h:
        * info/window.c:
        * info/window.h:
        * lib/system.h: protoized.



Index: dir.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/dir.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** dir.c       6 Dec 2003 01:32:34 -0000       1.1.1.1
--- dir.c       13 Mar 2004 15:52:46 -0000      1.2
***************
*** 29,33 ****
     dirs_to_add which are found in INFOPATH. */
  
! static void add_menu_to_file_buffer (), insert_text_into_fb_at_binding ();
  
  static char *dirs_to_add[] = {
--- 29,37 ----
     dirs_to_add which are found in INFOPATH. */
  
! static void add_menu_to_file_buffer (char *contents, long int size,
!     FILE_BUFFER *fb);
! static void insert_text_into_fb_at_binding (FILE_BUFFER *fb,
!     SEARCH_BINDING *binding, char *text, int textlen);
! void maybe_build_dir_node (char *dirname);
  
  static char *dirs_to_add[] = {
***************
*** 46,51 ****
  
  static int
! new_dir_file_p (test)
!     struct stat *test;
  {
    static unsigned dir_file_list_len = 0;
--- 50,54 ----
  
  static int
! new_dir_file_p (struct stat *test)
  {
    static unsigned dir_file_list_len = 0;
***************
*** 71,76 ****
  
  void
! maybe_build_dir_node (dirname)
!      char *dirname;
  {
    int path_index, update_tags;
--- 74,78 ----
  
  void
! maybe_build_dir_node (char *dirname)
  {
    int path_index, update_tags;
***************
*** 163,170 ****
     size of CONTENTS. */
  static void
! add_menu_to_file_buffer (contents, size, fb)
!      char *contents;
!      long size;
!      FILE_BUFFER *fb;
  {
    SEARCH_BINDING contents_binding, fb_binding;
--- 165,169 ----
     size of CONTENTS. */
  static void
! add_menu_to_file_buffer (char *contents, long int size, FILE_BUFFER *fb)
  {
    SEARCH_BINDING contents_binding, fb_binding;
***************
*** 272,280 ****
  
  static void
! insert_text_into_fb_at_binding (fb, binding, text, textlen)
!      FILE_BUFFER *fb;
!      SEARCH_BINDING *binding;
!      char *text;
!      int textlen;
  {
    char *contents;
--- 271,276 ----
  
  static void
! insert_text_into_fb_at_binding (FILE_BUFFER *fb,
!     SEARCH_BINDING *binding, char *text, int textlen)
  {
    char *contents;

Index: display.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/display.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** display.c   6 Dec 2003 01:32:35 -0000       1.1.1.1
--- display.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 23,30 ****
  #include "display.h"
  
! extern int info_any_buffered_input_p (); /* Found in session.c. */
  
! static void free_display ();
! static DISPLAY_LINE **make_display ();
  
  /* An array of display lines which tell us what is currently visible on
--- 23,34 ----
  #include "display.h"
  
! extern int info_any_buffered_input_p (void); /* Found in session.c. */
  
! static void free_display (DISPLAY_LINE **display);
! static DISPLAY_LINE **make_display (int width, int height);
! 
! void handle_tag (char *tag);
! void handle_tag_start (char *tag);
! void handle_tag_end (char *tag);
  
  /* An array of display lines which tell us what is currently visible on
***************
*** 37,42 ****
  /* Initialize THE_DISPLAY to WIDTH and HEIGHT, with nothing in it. */
  void
! display_initialize_display (width, height)
!      int width, height;
  {
    free_display (the_display);
--- 41,45 ----
  /* Initialize THE_DISPLAY to WIDTH and HEIGHT, with nothing in it. */
  void
! display_initialize_display (int width, int height)
  {
    free_display (the_display);
***************
*** 47,52 ****
  /* Clear all of the lines in DISPLAY making the screen blank. */
  void
! display_clear_display (display)
!      DISPLAY_LINE **display;
  {
    register int i;
--- 50,54 ----
  /* Clear all of the lines in DISPLAY making the screen blank. */
  void
! display_clear_display (DISPLAY_LINE **display)
  {
    register int i;
***************
*** 67,72 ****
     writes the text on the screen. */
  void
! display_update_display (window)
!      WINDOW *window;
  {
    register WINDOW *win;
--- 69,73 ----
     writes the text on the screen. */
  void
! display_update_display (WINDOW *window)
  {
    register WINDOW *win;
***************
*** 93,98 ****
  
  void
! handle_tag_start (tag)
!   char *tag;
  {
    /* TODO really handle this tag.  */
--- 94,98 ----
  
  void
! handle_tag_start (char *tag)
  {
    /* TODO really handle this tag.  */
***************
*** 101,106 ****
  
  void
! handle_tag_end (tag)
!   char *tag;
  {
    /* TODO really handle this tag.  */
--- 101,105 ----
  
  void
! handle_tag_end (char *tag)
  {
    /* TODO really handle this tag.  */
***************
*** 109,114 ****
  
  void
! handle_tag (tag)
!   char *tag;
  {
      if (tag[0] == '/')
--- 108,112 ----
  
  void
! handle_tag (char *tag)
  {
      if (tag[0] == '/')
***************
*** 124,129 ****
     function only does one window. */
  void
! display_update_one_window (win)
!      WINDOW *win;
  {
    register char *nodetext;      /* Current character to display. */
--- 122,126 ----
     function only does one window. */
  void
! display_update_one_window (WINDOW *win)
  {
    register char *nodetext;      /* Current character to display. */
***************
*** 341,345 ****
  
                /* Update the display text buffer. */
!             if (strlen (printed_line) > screenwidth)
                /* printed_line[] can include more than screenwidth
                   characters if we are under -R and there are escape
--- 338,342 ----
  
                /* Update the display text buffer. */
!             if (strlen (printed_line) > (unsigned int) screenwidth)
                /* printed_line[] can include more than screenwidth
                   characters if we are under -R and there are escape
***************
*** 453,458 ****
     support it.  This doesn't matter to us. */
  void
! display_scroll_display (start, end, amount)
!      int start, end, amount;
  {
    register int i, last;
--- 450,454 ----
     support it.  This doesn't matter to us. */
  void
! display_scroll_display (int start, int end, int amount)
  {
    register int i, last;
***************
*** 524,531 ****
     that appear in the OLD_STARTS array. */
  void
! display_scroll_line_starts (window, old_pagetop, old_starts, old_count)
!      WINDOW *window;
!      int old_pagetop, old_count;
!      char **old_starts;
  {
    register int i, old, new;     /* Indices into the line starts arrays. */
--- 520,525 ----
     that appear in the OLD_STARTS array. */
  void
! display_scroll_line_starts (WINDOW *window, int old_pagetop,
!     char **old_starts, int old_count)
  {
    register int i, old, new;     /* Indices into the line starts arrays. */
***************
*** 599,604 ****
  /* Move the screen cursor to directly over the current character in WINDOW. */
  void
! display_cursor_at_point (window)
!      WINDOW *window;
  {
    int vpos, hpos;
--- 593,597 ----
  /* Move the screen cursor to directly over the current character in WINDOW. */
  void
! display_cursor_at_point (WINDOW *window)
  {
    int vpos, hpos;
***************
*** 618,623 ****
  /* Make a DISPLAY_LINE ** with width and height. */
  static DISPLAY_LINE **
! make_display (width, height)
!      int width, height;
  {
    register int i;
--- 611,615 ----
  /* Make a DISPLAY_LINE ** with width and height. */
  static DISPLAY_LINE **
! make_display (int width, int height)
  {
    register int i;
***************
*** 639,644 ****
  /* Free the storage allocated to DISPLAY. */
  static void
! free_display (display)
!      DISPLAY_LINE **display;
  {
    register int i;
--- 631,635 ----
  /* Free the storage allocated to DISPLAY. */
  static void
! free_display (DISPLAY_LINE **display)
  {
    register int i;

Index: display.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/display.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** display.h   6 Dec 2003 01:32:35 -0000       1.1.1.1
--- display.h   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 46,64 ****
  
  /* Initialize THE_DISPLAY to WIDTH and HEIGHT, with nothing in it. */
! extern void display_initialize_display ();
  
  /* Clear all of the lines in DISPLAY making the screen blank. */
! extern void display_clear_display ();
  
  /* Update the windows pointed to by WINDOWS in THE_DISPLAY.  This actually
     writes the text on the screen. */
! extern void display_update_display ();
  
  /* Display WIN on THE_DISPLAY.  Unlike display_update_display (), this
     function only does one window. */
! extern void display_update_one_window ();
  
  /* Move the screen cursor to directly over the current character in WINDOW. */
! extern void display_cursor_at_point ();
  
  /* Scroll the region of the_display starting at START, ending at END, and
--- 46,64 ----
  
  /* Initialize THE_DISPLAY to WIDTH and HEIGHT, with nothing in it. */
! extern void display_initialize_display (int width, int height);
  
  /* Clear all of the lines in DISPLAY making the screen blank. */
! extern void display_clear_display (DISPLAY_LINE **display);
  
  /* Update the windows pointed to by WINDOWS in THE_DISPLAY.  This actually
     writes the text on the screen. */
! extern void display_update_display (WINDOW *window);
  
  /* Display WIN on THE_DISPLAY.  Unlike display_update_display (), this
     function only does one window. */
! extern void display_update_one_window (WINDOW *win);
  
  /* Move the screen cursor to directly over the current character in WINDOW. */
! extern void display_cursor_at_point (WINDOW *window);
  
  /* Scroll the region of the_display starting at START, ending at END, and
***************
*** 67,71 ****
     for no scrolling to take place in the case that the terminal doesn't
     support it.  This doesn't matter to us. */
! extern void display_scroll_display ();
  
  /* Try to scroll lines in WINDOW.  OLD_PAGETOP is the pagetop of WINDOW before
--- 67,71 ----
     for no scrolling to take place in the case that the terminal doesn't
     support it.  This doesn't matter to us. */
! extern void display_scroll_display (int start, int end, int amount);
  
  /* Try to scroll lines in WINDOW.  OLD_PAGETOP is the pagetop of WINDOW before
***************
*** 73,77 ****
     starts that used to appear in this window.  OLD_COUNT is the number of 
lines
     that appear in the OLD_STARTS array. */
! extern void display_scroll_line_starts ();
  
  #endif /* not INFO_DISPLAY_H */
--- 73,78 ----
     starts that used to appear in this window.  OLD_COUNT is the number of 
lines
     that appear in the OLD_STARTS array. */
! extern void display_scroll_line_starts (WINDOW *window, int old_pagetop,
!     char **old_starts, int old_count);
  
  #endif /* not INFO_DISPLAY_H */

Index: doc.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/doc.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** doc.h       6 Dec 2003 01:32:35 -0000       1.1.1.1
--- doc.h       13 Mar 2004 15:52:46 -0000      1.2
***************
*** 67,79 ****
  extern FUNCTION_DOC function_doc_array[];
  
- extern char *function_documentation ();
- extern char *key_documentation ();
- extern char *pretty_keyname ();
- extern char *pretty_keyseq ();
- extern char *where_is ();
- extern char *replace_in_documentation ();
- extern void info_document_key ();
- extern void dump_map_to_message_buffer ();
- 
  /* Under the old key-binding system, an info command is specified by
     the pointer to its function.  Under the new INFOKEY binding system, 
--- 67,70 ----
***************
*** 93,99 ****
  #endif /* !INFOKEY */
  
  #if defined (NAMED_FUNCTIONS)
! extern char *function_name ();
! extern InfoCommand *named_function ();
  #endif /* NAMED_FUNCTIONS */
  #endif /* !DOC_H */
--- 84,101 ----
  #endif /* !INFOKEY */
  
+ #include "infomap.h" /* for Keymap.  */
+ 
  #if defined (NAMED_FUNCTIONS)
! extern char *function_name (InfoCommand *cmd);
! extern InfoCommand *named_function (char *name);
  #endif /* NAMED_FUNCTIONS */
+ 
+ extern char *function_documentation (InfoCommand *cmd);
+ extern char *key_documentation (char key, Keymap map);
+ extern char *pretty_keyname (unsigned char key);
+ extern char *pretty_keyseq (char *keyseq);
+ extern char *where_is (Keymap map, InfoCommand *cmd);
+ extern char *replace_in_documentation (char *string, int 
help_is_only_window_p);
+ extern void dump_map_to_message_buffer (char *prefix, Keymap map);
+ 
  #endif /* !DOC_H */

Index: dribble.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/dribble.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** dribble.c   6 Dec 2003 01:32:35 -0000       1.1.1.1
--- dribble.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 29,34 ****
     This sets the global variable INFO_DRIBBLE_FILE to the open stream. */
  void
! open_dribble_file (name)
!      char *name;
  {
    /* Perhaps close existing dribble file. */
--- 29,33 ----
     This sets the global variable INFO_DRIBBLE_FILE to the open stream. */
  void
! open_dribble_file (char *name)
  {
    /* Perhaps close existing dribble file. */
***************
*** 50,54 ****
  /* If there is a dribble file already open, close it. */
  void
! close_dribble_file ()
  {
    if (info_dribble_file)
--- 49,53 ----
  /* If there is a dribble file already open, close it. */
  void
! close_dribble_file (void)
  {
    if (info_dribble_file)
***************
*** 62,67 ****
  /* Write some output to our existing dribble file. */
  void
! dribble (byte)
!      unsigned char byte;
  {
    if (info_dribble_file)
--- 61,65 ----
  /* Write some output to our existing dribble file. */
  void
! dribble (unsigned char byte)
  {
    if (info_dribble_file)

Index: dribble.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/dribble.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** dribble.h   6 Dec 2003 01:32:35 -0000       1.1.1.1
--- dribble.h   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 31,41 ****
  /* Open a dribble file named NAME, perhaps closing an already open one.
     This sets the global variable INFO_DRIBBLE_FILE to the open stream. */
! extern void open_dribble_file ();
  
  /* If there is a dribble file already open, close it. */
! extern void close_dribble_file ();
  
  /* Write some output to our existing dribble file. */
! extern void dribble ();
  
  #endif /* !_DRIBBLE_H_ */
--- 31,41 ----
  /* Open a dribble file named NAME, perhaps closing an already open one.
     This sets the global variable INFO_DRIBBLE_FILE to the open stream. */
! extern void open_dribble_file (char *name);
  
  /* If there is a dribble file already open, close it. */
! extern void close_dribble_file (void);
  
  /* Write some output to our existing dribble file. */
! extern void dribble (unsigned char byte);
  
  #endif /* !_DRIBBLE_H_ */

Index: echo-area.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/echo-area.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** echo-area.c 6 Dec 2003 01:32:40 -0000       1.1.1.1
--- echo-area.c 13 Mar 2004 15:52:46 -0000      1.2
***************
*** 50,65 ****
  static int input_line_end;
  static NODE input_line_node = {
!   (char *)NULL, (char *)NULL, (char *)NULL, input_line, EA_MAX_INPUT, 0
  };
  
! static void echo_area_initialize_node ();
! static void push_echo_area (), pop_echo_area ();
! static int echo_area_stack_contains_completions_p ();
  
! static void ea_kill_text ();
  
  /* Non-zero means we force the user to complete. */
  static int echo_area_must_complete_p = 0;
! static int completions_window_p ();
  
  /* If non-null, this is a window which was specifically created to display
--- 50,66 ----
  static int input_line_end;
  static NODE input_line_node = {
!   (char *)NULL, (char *)NULL, (char *)NULL, input_line,
!   EA_MAX_INPUT, 0, N_IsInternal
  };
  
! static void echo_area_initialize_node (void);
! static void push_echo_area (void), pop_echo_area (void);
! static int echo_area_stack_contains_completions_p (void);
  
! static void ea_kill_text (int from, int to);
  
  /* Non-zero means we force the user to complete. */
  static int echo_area_must_complete_p = 0;
! static int completions_window_p (WINDOW *window);
  
  /* If non-null, this is a window which was specifically created to display
***************
*** 77,82 ****
  /* Remember the node and pertinent variables of the calling window. */
  static void
! remember_calling_window (window)
!      WINDOW *window;
  {
    /* Only do this if the calling window is not the completions window, or,
--- 78,82 ----
  /* Remember the node and pertinent variables of the calling window. */
  static void
! remember_calling_window (WINDOW *window)
  {
    /* Only do this if the calling window is not the completions window, or,
***************
*** 95,99 ****
     on entry to info_read_xxx_echo_area (). */
  static void
! restore_calling_window ()
  {
    register WINDOW *win, *compwin = (WINDOW *)NULL;
--- 95,99 ----
     on entry to info_read_xxx_echo_area (). */
  static void
! restore_calling_window (void)
  {
    register WINDOW *win, *compwin = (WINDOW *)NULL;
***************
*** 125,129 ****
          {
            WINDOW *next;
!           int pagetop, start, end, amount;
  
            next = compwin->next;
--- 125,132 ----
          {
            WINDOW *next;
!           int pagetop = 0;
!           int start = 0;
!           int end = 0;
!           int amount = 0;
  
            next = compwin->next;
***************
*** 157,162 ****
  /* Set up a new input line with PROMPT. */
  static void
! initialize_input_line (prompt)
!      char *prompt;
  {
    input_line_prompt = prompt;
--- 160,164 ----
  /* Set up a new input line with PROMPT. */
  static void
! initialize_input_line (char *prompt)
  {
    input_line_prompt = prompt;
***************
*** 170,174 ****
  
  static char *
! echo_area_after_read ()
  {
    char *return_value;
--- 172,176 ----
  
  static char *
! echo_area_after_read (void)
  {
    char *return_value;
***************
*** 199,205 ****
     non-null, is a prompt to print before reading the line. */
  char *
! info_read_in_echo_area (window, prompt)
!      WINDOW *window;
!      char *prompt;
  {
    char *line;
--- 201,205 ----
     non-null, is a prompt to print before reading the line. */
  char *
! info_read_in_echo_area (WINDOW *window, char *prompt)
  {
    char *line;
***************
*** 247,255 ****
  /* (re) Initialize the echo area node. */
  static void
! echo_area_initialize_node ()
  {
    register int i;
  
!   for (i = input_line_end; i < sizeof (input_line); i++)
      input_line[i] = ' ';
  
--- 247,255 ----
  /* (re) Initialize the echo area node. */
  static void
! echo_area_initialize_node (void)
  {
    register int i;
  
!   for (i = input_line_end; (unsigned int) i < sizeof (input_line); i++)
      input_line[i] = ' ';
  
***************
*** 263,267 ****
     line buffer contents. */
  void
! echo_area_prep_read ()
  {
    if (the_echo_area->node != &input_line_node)
--- 263,267 ----
     line buffer contents. */
  void
! echo_area_prep_read (void)
  {
    if (the_echo_area->node != &input_line_node)
***************
*** 560,564 ****
    if (!kill_ring_index)
      {
!       inform_in_echo_area (_("Kill ring is empty"));
        return;
      }
--- 560,564 ----
    if (!kill_ring_index)
      {
!       inform_in_echo_area ((char *) _("Kill ring is empty"));
        return;
      }
***************
*** 577,582 ****
    register int len;
  
!   if (((ea_last_executed_command != ea_yank) &&
!        (ea_last_executed_command != ea_yank_pop)) ||
        (kill_ring_index == 0))
      return;
--- 577,582 ----
    register int len;
  
!   if (((ea_last_executed_command != (VFunction *) ea_yank) &&
!        (ea_last_executed_command != (VFunction *) ea_yank_pop)) ||
        (kill_ring_index == 0))
      return;
***************
*** 671,676 ****
     then a new slot is made for this kill. */
  static void
! ea_kill_text (from, to)
!      int from, to;
  {
    register int i, counter, distance;
--- 671,675 ----
     then a new slot is made for this kill. */
  static void
! ea_kill_text (int from, int to)
  {
    register int i, counter, distance;
***************
*** 777,781 ****
  
  /* Internal functions used by the user calls. */
! static void build_completions (), completions_must_be_rebuilt ();
  
  /* Variable which holds the output of completions. */
--- 776,780 ----
  
  /* Internal functions used by the user calls. */
! static void build_completions (void), completions_must_be_rebuilt (void);
  
  /* Variable which holds the output of completions. */
***************
*** 786,791 ****
  /* Return non-zero if WINDOW is a window used for completions output. */
  static int
! completions_window_p (window)
!      WINDOW *window;
  {
    int result = 0;
--- 785,789 ----
  /* Return non-zero if WINDOW is a window used for completions output. */
  static int
! completions_window_p (WINDOW *window)
  {
    int result = 0;
***************
*** 801,809 ****
     exit unless the line read completes, or is empty. */
  char *
! info_read_completing_internal (window, prompt, completions, force)
!      WINDOW *window;
!      char *prompt;
!      REFERENCE **completions;
!      int force;
  {
    char *line;
--- 799,804 ----
     exit unless the line read completes, or is empty. */
  char *
! info_read_completing_internal (WINDOW *window, char *prompt,
!     REFERENCE **completions, int force)
  {
    char *line;
***************
*** 870,876 ****
              {
                if (!completions_found_index)
!                 inform_in_echo_area (_("No completions"));
                else
!                 inform_in_echo_area (_("Not complete"));
                continue;
              }
--- 865,871 ----
              {
                if (!completions_found_index)
!                 inform_in_echo_area ((char *) _("No completions"));
                else
!                 inform_in_echo_area ((char *) _("Not complete"));
                continue;
              }
***************
*** 898,905 ****
  /* Read a line in the echo area with completion over COMPLETIONS. */
  char *
! info_read_completing_in_echo_area (window, prompt, completions)
!      WINDOW *window;
!      char *prompt;
!      REFERENCE **completions;
  {
    return (info_read_completing_internal (window, prompt, completions, 1));
--- 893,898 ----
  /* Read a line in the echo area with completion over COMPLETIONS. */
  char *
! info_read_completing_in_echo_area (WINDOW *window,
!     char *prompt, REFERENCE **completions)
  {
    return (info_read_completing_internal (window, prompt, completions, 1));
***************
*** 909,916 ****
     not requiring it. */
  char *
! info_read_maybe_completing (window, prompt, completions)
!      WINDOW *window;
!      char *prompt;
!      REFERENCE **completions;
  {
    return (info_read_completing_internal (window, prompt, completions, 0));
--- 902,907 ----
     not requiring it. */
  char *
! info_read_maybe_completing (WINDOW *window,
!     char *prompt, REFERENCE **completions)
  {
    return (info_read_completing_internal (window, prompt, completions, 0));
***************
*** 930,949 ****
      {
        terminal_ring_bell ();
!       inform_in_echo_area (_("No completions"));
      }
    else if ((completions_found_index == 1) && (key != '?'))
      {
!       inform_in_echo_area (_("Sole completion"));
      }
    else
      {
        register int i, l;
!       int limit, count, max_label = 0;
  
        initialize_message_buffer ();
        printf_to_message_buffer (completions_found_index == 1
!                                 ? _("One completion:\n")
!                                 : _("%d completions:\n"),
!                               completions_found_index);
  
        /* Find the maximum length of a label. */
--- 921,940 ----
      {
        terminal_ring_bell ();
!       inform_in_echo_area ((char *) _("No completions"));
      }
    else if ((completions_found_index == 1) && (key != '?'))
      {
!       inform_in_echo_area ((char *) _("Sole completion"));
      }
    else
      {
        register int i, l;
!       int limit, iterations, max_label = 0;
  
        initialize_message_buffer ();
        printf_to_message_buffer (completions_found_index == 1
!                                 ? (char *) _("One completion:\n")
!                                 : (char *) _("%d completions:\n"),
!                               completions_found_index, NULL, NULL);
  
        /* Find the maximum length of a label. */
***************
*** 968,980 ****
  
        /* How many iterations of the printing loop? */
!       count = (completions_found_index + (limit - 1)) / limit;
  
        /* Watch out for special case.  If the number of completions is less
           than LIMIT, then just do the inner printing loop. */
        if (completions_found_index < limit)
!         count = 1;
  
        /* Print the sorted items, up-and-down alphabetically. */
!       for (i = 0; i < count; i++)
          {
            register int j;
--- 959,971 ----
  
        /* How many iterations of the printing loop? */
!       iterations = (completions_found_index + (limit - 1)) / limit;
  
        /* Watch out for special case.  If the number of completions is less
           than LIMIT, then just do the inner printing loop. */
        if (completions_found_index < limit)
!         iterations = 1;
  
        /* Print the sorted items, up-and-down alphabetically. */
!       for (i = 0; i < iterations; i++)
          {
            register int j;
***************
*** 991,1005 ****
                    label = completions_found[l]->label;
                    printed_length = strlen (label);
!                   printf_to_message_buffer ("%s", label);
  
                    if (j + 1 < limit)
                      {
                        for (k = 0; k < max_label - printed_length; k++)
!                         printf_to_message_buffer (" ");
                      }
                  }
!               l += count;
              }
!           printf_to_message_buffer ("\n");
          }
  
--- 982,996 ----
                    label = completions_found[l]->label;
                    printed_length = strlen (label);
!                   printf_to_message_buffer ("%s", label, NULL, NULL);
  
                    if (j + 1 < limit)
                      {
                        for (k = 0; k < max_label - printed_length; k++)
!                         printf_to_message_buffer (" ", NULL, NULL, NULL);
                      }
                  }
!               l += iterations;
              }
!           printf_to_message_buffer ("\n", NULL, NULL, NULL);
          }
  
***************
*** 1029,1033 ****
              /* If we can split the window to display most of the completion
                 items, then do so. */
!             if (calling_window->height > (count * 2)
                && calling_window->height / 2 >= WINDOW_MIN_SIZE)
                {
--- 1020,1024 ----
              /* If we can split the window to display most of the completion
                 items, then do so. */
!             if (calling_window->height > (iterations * 2)
                && calling_window->height / 2 >= WINDOW_MIN_SIZE)
                {
***************
*** 1047,1051 ****
                  active_window = the_echo_area;
                  window_change_window_height
!                   (compwin, -(compwin->height - (count + 2)));
  
                  window_adjust_pagetop (calling_window);
--- 1038,1042 ----
                  active_window = the_echo_area;
                  window_change_window_height
!                   (compwin, -(compwin->height - (iterations + 2)));
  
                  window_adjust_pagetop (calling_window);
***************
*** 1106,1110 ****
      }
  
!   if (ea_last_executed_command == ea_complete)
      {
        /* If the keypress is a SPC character, and we have already tried
--- 1097,1101 ----
      }
  
!   if (ea_last_executed_command == (VFunction *) ea_complete)
      {
        /* If the keypress is a SPC character, and we have already tried
***************
*** 1154,1160 ****
  
  /* Utility REFERENCE used to store possible LCD. */
! static REFERENCE LCD_reference = { (char *)NULL, (char *)NULL, (char *)NULL };
  
! static void remove_completion_duplicates ();
  
  /* Variables which remember the state of the most recent call
--- 1145,1153 ----
  
  /* Utility REFERENCE used to store possible LCD. */
! static REFERENCE LCD_reference = {
!     (char *)NULL, (char *)NULL, (char *)NULL, 0, 0, 0
! };
  
! static void remove_completion_duplicates (void);
  
  /* Variables which remember the state of the most recent call
***************
*** 1165,1169 ****
  /* How to tell the completion builder to reset internal state. */
  static void
! completions_must_be_rebuilt ()
  {
    maybe_free (last_completion_request);
--- 1158,1162 ----
  /* How to tell the completion builder to reset internal state. */
  static void
! completions_must_be_rebuilt (void)
  {
    maybe_free (last_completion_request);
***************
*** 1175,1179 ****
     and the contents of input_line. */
  static void
! build_completions ()
  {
    register int i, len;
--- 1168,1172 ----
     and the contents of input_line. */
  static void
! build_completions (void)
  {
    register int i, len;
***************
*** 1223,1227 ****
          {
            informed_of_lengthy_job = 1;
!           window_message_in_echo_area (_("Building completions..."));
          }
      }
--- 1216,1221 ----
          {
            informed_of_lengthy_job = 1;
!           window_message_in_echo_area ((char *) _("Building completions..."),
!               NULL, NULL);
          }
      }
***************
*** 1292,1304 ****
  /* Function called by qsort. */
  static int
! compare_references (entry1, entry2)
!      REFERENCE **entry1, **entry2;
  {
!   return (strcasecmp ((*entry1)->label, (*entry2)->label));
  }
  
  /* Prune duplicate entries from COMPLETIONS_FOUND. */
  static void
! remove_completion_duplicates ()
  {
    register int i, j;
--- 1286,1300 ----
  /* Function called by qsort. */
  static int
! compare_references (const void *entry1, const void *entry2)
  {
!   REFERENCE **e1 = (REFERENCE **) entry1;
!   REFERENCE **e2 = (REFERENCE **) entry2;
! 
!   return (strcasecmp ((*e1)->label, (*e2)->label));
  }
  
  /* Prune duplicate entries from COMPLETIONS_FOUND. */
  static void
! remove_completion_duplicates (void)
  {
    register int i, j;
***************
*** 1360,1365 ****
     echo area is active.  WINDOW is the window which has just been deleted. */
  void
! echo_area_inform_of_deleted_window (window)
!      WINDOW *window;
  {
    /* If this is the calling_window, forget what we remembered about it. */
--- 1356,1360 ----
     echo area is active.  WINDOW is the window which has just been deleted. */
  void
! echo_area_inform_of_deleted_window (WINDOW *window)
  {
    /* If this is the calling_window, forget what we remembered about it. */
***************
*** 1401,1405 ****
  /* Pushing the echo_area has a side effect of zeroing the completion_items. */
  static void
! push_echo_area ()
  {
    PUSHED_EA *pushed;
--- 1396,1400 ----
  /* Pushing the echo_area has a side effect of zeroing the completion_items. */
  static void
! push_echo_area (void)
  {
    PUSHED_EA *pushed;
***************
*** 1423,1427 ****
  
  static void
! pop_echo_area ()
  {
    PUSHED_EA *popped;
--- 1418,1422 ----
  
  static void
! pop_echo_area (void)
  {
    PUSHED_EA *popped;
***************
*** 1461,1465 ****
     area produced a completions window. */
  static int
! echo_area_stack_contains_completions_p ()
  {
    register int i;
--- 1456,1460 ----
     area produced a completions window. */
  static int
! echo_area_stack_contains_completions_p (void)
  {
    register int i;
***************
*** 1484,1488 ****
  
  static void
! pause_or_input ()
  {
  #ifdef FD_SET
--- 1479,1483 ----
  
  static void
! pause_or_input (void)
  {
  #ifdef FD_SET
***************
*** 1504,1509 ****
     informational message that was printed. */
  void
! inform_in_echo_area (message)
!      char *message;
  {
    register int i;
--- 1499,1503 ----
     informational message that was printed. */
  void
! inform_in_echo_area (char *message)
  {
    register int i;

Index: echo-area.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/echo-area.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** echo-area.h 6 Dec 2003 01:32:40 -0000       1.1.1.1
--- echo-area.h 13 Mar 2004 15:52:46 -0000      1.2
***************
*** 34,40 ****
  extern int echo_area_last_command_was_kill;
  
! extern void inform_in_echo_area (), echo_area_inform_of_deleted_window ();
! extern void echo_area_prep_read ();
  extern VFunction *ea_last_executed_command;
  
  /* Read a line of text in the echo area.  Return a malloc ()'ed string,
--- 34,43 ----
  extern int echo_area_last_command_was_kill;
  
! extern void inform_in_echo_area (char *message);
! extern void echo_area_inform_of_deleted_window (WINDOW *window);
! extern void echo_area_prep_read (void);
  extern VFunction *ea_last_executed_command;
+ extern char * info_read_completing_internal (WINDOW *window, char *prompt,
+     REFERENCE **completions, int force);
  
  /* Read a line of text in the echo area.  Return a malloc ()'ed string,
***************
*** 42,64 ****
     active window, so that we can restore it when we need to.  PROMPT, if
     non-null, is a prompt to print before reading the line. */
! extern char *info_read_in_echo_area ();
  
  /* Read a line in the echo area with completion over COMPLETIONS.
     Takes arguments of WINDOW, PROMPT, and COMPLETIONS, a REFERENCE **. */
! char *info_read_completing_in_echo_area ();
  
  /* Read a line in the echo area allowing completion over COMPLETIONS, but
     not requiring it.  Takes arguments of WINDOW, PROMPT, and COMPLETIONS,
     a REFERENCE **. */
! extern char *info_read_maybe_completing ();
  
! extern void ea_insert (), ea_quoted_insert ();
! extern void ea_beg_of_line (), ea_backward (), ea_delete (), ea_end_of_line 
();
! extern void ea_forward (), ea_abort (), ea_rubout (), ea_complete ();
! extern void ea_newline (), ea_kill_line (), ea_transpose_chars ();
! extern void ea_yank (), ea_tab_insert (), ea_possible_completions ();
! extern void ea_backward_word (), ea_kill_word (), ea_forward_word ();
! extern void ea_yank_pop (), ea_backward_kill_word ();
! extern void ea_scroll_completions_window ();
  
  #endif /* not INFO_ECHO_AREA_H */
--- 45,85 ----
     active window, so that we can restore it when we need to.  PROMPT, if
     non-null, is a prompt to print before reading the line. */
! extern char *info_read_in_echo_area (WINDOW *window, char *prompt);
  
  /* Read a line in the echo area with completion over COMPLETIONS.
     Takes arguments of WINDOW, PROMPT, and COMPLETIONS, a REFERENCE **. */
! char *info_read_completing_in_echo_area (WINDOW *window,
!     char *prompt, REFERENCE **completions);
  
  /* Read a line in the echo area allowing completion over COMPLETIONS, but
     not requiring it.  Takes arguments of WINDOW, PROMPT, and COMPLETIONS,
     a REFERENCE **. */
! extern char *info_read_maybe_completing (WINDOW *window,
!     char *prompt, REFERENCE **completions);
  
! extern void ea_insert (WINDOW *window, int count, unsigned char key);
! extern void ea_quoted_insert (WINDOW *window, int count, unsigned char key);
! extern void ea_beg_of_line (WINDOW *window, int count, unsigned char key);
! extern void ea_backward (WINDOW *window, int count, unsigned char key);
! extern void ea_delete (WINDOW *window, int count, unsigned char key);
! extern void ea_end_of_line (WINDOW *window, int count, unsigned char key);
! extern void ea_forward (WINDOW *window, int count, unsigned char key);
! extern void ea_abort (WINDOW *window, int count, unsigned char key);
! extern void ea_rubout (WINDOW *window, int count, unsigned char key);
! extern void ea_complete (WINDOW *window, int count, unsigned char key);
! extern void ea_newline (WINDOW *window, int count, unsigned char key);
! extern void ea_kill_line (WINDOW *window, int count, unsigned char key);
! extern void ea_backward_kill_line (WINDOW *window, int count, unsigned char 
key);
! extern void ea_transpose_chars (WINDOW *window, int count, unsigned char key);
! extern void ea_yank (WINDOW *window, int count, unsigned char key);
! extern void ea_tab_insert (WINDOW *window, int count, unsigned char key);
! extern void ea_possible_completions (WINDOW *window, int count, unsigned char 
key);
! extern void ea_backward_word (WINDOW *window, int count, unsigned char key);
! extern void ea_kill_word (WINDOW *window, int count, unsigned char key);
! extern void ea_forward_word (WINDOW *window, int count, unsigned char key);
! extern void ea_yank_pop (WINDOW *window, int count, unsigned char key);
! extern void ea_backward_kill_word (WINDOW *window, int count, unsigned char 
key);
! extern void ea_scroll_completions_window (WINDOW *window, int count,
!     unsigned char key);
  
  #endif /* not INFO_ECHO_AREA_H */

Index: filesys.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/filesys.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** filesys.c   6 Dec 2003 01:32:40 -0000       1.1.1.1
--- filesys.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 27,33 ****
  
  /* Local to this file. */
! static char *info_file_in_path (), *lookup_info_filename ();
! static char *info_absolute_file ();
! static void remember_info_filename (), maybe_initialize_infopath ();
  
  typedef struct
--- 27,36 ----
  
  /* Local to this file. */
! static char *info_file_in_path (char *filename, char *path);
! static char *lookup_info_filename (char *filename);
! static char *info_absolute_file (char *fname);
! 
! static void remember_info_filename (char *filename, char *expansion);
! static void maybe_initialize_infopath (void);
  
  typedef struct
***************
*** 78,83 ****
  
  char *
! info_find_fullpath (partial)
!      char *partial;
  {
    int initial_character;
--- 81,85 ----
  
  char *
! info_find_fullpath (char *partial)
  {
    int initial_character;
***************
*** 142,146 ****
          {
            remember_info_filename (partial, temp);
!           if (strlen (temp) > local_temp_filename_size)
              local_temp_filename = (char *) xrealloc
                (local_temp_filename,
--- 144,148 ----
          {
            remember_info_filename (partial, temp);
!           if (strlen (temp) > (unsigned int) local_temp_filename_size)
              local_temp_filename = (char *) xrealloc
                (local_temp_filename,
***************
*** 158,163 ****
     a NULL pointer. */
  static char *
! info_file_in_path (filename, path)
!      char *filename, *path;
  {
    struct stat finfo;
--- 160,164 ----
     a NULL pointer. */
  static char *
! info_file_in_path (char *filename, char *path)
  {
    struct stat finfo;
***************
*** 256,261 ****
     into its directory and basename parts, and calling info_file_in_path.*/
  static char *
! info_absolute_file (fname)
!      char *fname;
  {
    char *containing_dir = xstrdup (fname);
--- 257,261 ----
     into its directory and basename parts, and calling info_file_in_path.*/
  static char *
! info_absolute_file (char *fname)
  {
    char *containing_dir = xstrdup (fname);
***************
*** 274,283 ****
  
  char *
! extract_colon_unit (string, idx)
!      char *string;
!      int *idx;
  {
!   int i = *idx;
!   int start = *idx;
  
    if (!string || i >= strlen (string))
--- 274,281 ----
  
  char *
! extract_colon_unit (char *string, int *idx)
  {
!   unsigned int i = (unsigned int) *idx;
!   unsigned int start = i;
  
    if (!string || i >= strlen (string))
***************
*** 317,322 ****
     FILENAME. */
  static char *
! lookup_info_filename (filename)
!      char *filename;
  {
    if (filename && names_and_files)
--- 315,319 ----
     FILENAME. */
  static char *
! lookup_info_filename (char *filename)
  {
    if (filename && names_and_files)
***************
*** 334,339 ****
  /* Add a filename and its expansion to our list. */
  static void
! remember_info_filename (filename, expansion)
!      char *filename, *expansion;
  {
    FILENAME_LIST *new;
--- 331,335 ----
  /* Add a filename and its expansion to our list. */
  static void
! remember_info_filename (char *filename, char *expansion)
  {
    FILENAME_LIST *new;
***************
*** 359,363 ****
  
  static void
! maybe_initialize_infopath ()
  {
    if (!infopath_size)
--- 355,359 ----
  
  static void
! maybe_initialize_infopath (void)
  {
    if (!infopath_size)
***************
*** 373,379 ****
     whether to put PATH at the front or end of INFOPATH. */
  void
! info_add_path (path, where)
!      char *path;
!      int where;
  {
    int len;
--- 369,373 ----
     whether to put PATH at the front or end of INFOPATH. */
  void
! info_add_path (char *path, int where)
  {
    int len;
***************
*** 409,413 ****
  /* Make INFOPATH have absolutely nothing in it. */
  void
! zap_infopath ()
  {
    if (infopath)
--- 403,407 ----
  /* Make INFOPATH have absolutely nothing in it. */
  void
! zap_infopath (void)
  {
    if (infopath)
***************
*** 434,440 ****
     FIXME: is it a good idea to show the EOL type on the modeline?  */
  long
! convert_eols (text, textlen)
!      char *text;
!      long textlen;
  {
    register char *s = text;
--- 428,432 ----
     FIXME: is it a good idea to show the EOL type on the modeline?  */
  long
! convert_eols (char *text, long int textlen)
  {
    register char *s = text;
***************
*** 460,468 ****
     If the file cannot be read, return a NULL pointer. */
  char *
! filesys_read_info_file (pathname, filesize, finfo, is_compressed)
!      char *pathname;
!      long *filesize;
!      struct stat *finfo;
!      int *is_compressed;
  {
    long st_size;
--- 452,457 ----
     If the file cannot be read, return a NULL pointer. */
  char *
! filesys_read_info_file (char *pathname, long int *filesize,
!     struct stat *finfo, int *is_compressed)
  {
    long st_size;
***************
*** 473,477 ****
      {
        *is_compressed = 1;
!       return (filesys_read_compressed (pathname, filesize, finfo));
      }
    else
--- 462,466 ----
      {
        *is_compressed = 1;
!       return (filesys_read_compressed (pathname, filesize));
      }
    else
***************
*** 525,532 ****
  
  char *
! filesys_read_compressed (pathname, filesize, finfo)
!      char *pathname;
!      long *filesize;
!      struct stat *finfo;
  {
    FILE *stream;
--- 514,518 ----
  
  char *
! filesys_read_compressed (char *pathname, long int *filesize)
  {
    FILE *stream;
***************
*** 554,558 ****
        temp = (char *)xmalloc (5 + strlen (command));
        sprintf (temp, "%s...", command);
!       message_in_echo_area ("%s", temp);
        free (temp);
      }
--- 540,544 ----
        temp = (char *)xmalloc (5 + strlen (command));
        sprintf (temp, "%s...", command);
!       message_in_echo_area ("%s", temp, NULL);
        free (temp);
      }
***************
*** 616,621 ****
  /* Return non-zero if FILENAME belongs to a compressed file. */
  int
! compressed_filename_p (filename)
!      char *filename;
  {
    char *decompressor;
--- 602,606 ----
  /* Return non-zero if FILENAME belongs to a compressed file. */
  int
! compressed_filename_p (char *filename)
  {
    char *decompressor;
***************
*** 633,638 ****
  /* Return the command string that would be used to decompress FILENAME. */
  char *
! filesys_decompressor_for_file (filename)
!      char *filename;
  {
    register int i;
--- 618,622 ----
  /* Return the command string that would be used to decompress FILENAME. */
  char *
! filesys_decompressor_for_file (char *filename)
  {
    register int i;
***************
*** 677,683 ****
  
  char *
! filesys_error_string (filename, error_num)
!      char *filename;
!      int error_num;
  {
    int len;
--- 661,665 ----
  
  char *
! filesys_error_string (char *filename, int error_num)
  {
    int len;
***************
*** 702,707 ****
  
  int
! is_dir_name (filename)
!     char *filename;
  {
    unsigned i;
--- 684,688 ----
  
  int
! is_dir_name (char *filename)
  {
    unsigned i;

Index: filesys.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/filesys.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** filesys.h   6 Dec 2003 01:32:40 -0000       1.1.1.1
--- filesys.h   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 29,37 ****
  
  /* Make INFOPATH have absolutely nothing in it. */
! extern void zap_infopath ();
  
  /* Add PATH to the list of paths found in INFOPATH.  2nd argument says
     whether to put PATH at the front or end of INFOPATH. */
! extern void info_add_path ();
  
  /* Defines that are passed along with the pathname to info_add_path (). */
--- 29,37 ----
  
  /* Make INFOPATH have absolutely nothing in it. */
! extern void zap_infopath (void);
  
  /* Add PATH to the list of paths found in INFOPATH.  2nd argument says
     whether to put PATH at the front or end of INFOPATH. */
! extern void info_add_path (char *path, int where);
  
  /* Defines that are passed along with the pathname to info_add_path (). */
***************
*** 42,51 ****
     system.  This looks in INFO_PATHS in order to find the correct file.
     If it can't find the file, it returns NULL. */
! extern char *info_find_fullpath ();
  
  /* Given a chunk of text and its length, convert all CRLF pairs at the
     EOLs into a single Newline character.  Return the length of produced
     text.  */
! long convert_eols ();
  
  /* Read the contents of PATHNAME, returning a buffer with the contents of
--- 42,51 ----
     system.  This looks in INFO_PATHS in order to find the correct file.
     If it can't find the file, it returns NULL. */
! extern char *info_find_fullpath (char *partial);
  
  /* Given a chunk of text and its length, convert all CRLF pairs at the
     EOLs into a single Newline character.  Return the length of produced
     text.  */
! long convert_eols (char *text, long textlen);
  
  /* Read the contents of PATHNAME, returning a buffer with the contents of
***************
*** 53,66 ****
     FINFO is a stat struct which has already been filled in by the caller.
     If the file cannot be read, return a NULL pointer. */
! extern char *filesys_read_info_file ();
! extern char *filesys_read_compressed ();
  
  /* Return the command string that would be used to decompress FILENAME. */
! extern char *filesys_decompressor_for_file ();
! extern int compressed_filename_p ();
  
  /* A function which returns a pointer to a static buffer containing
     an error message for FILENAME and ERROR_NUM. */
! extern char *filesys_error_string ();
  
  /* The number of the most recent file system error. */
--- 53,68 ----
     FINFO is a stat struct which has already been filled in by the caller.
     If the file cannot be read, return a NULL pointer. */
! extern char *filesys_read_info_file (char *pathname, long int *filesize,
!     struct stat *finfo, int *is_compressed);
! 
! extern char *filesys_read_compressed (char *pathname, long int *filesize);
  
  /* Return the command string that would be used to decompress FILENAME. */
! extern char *filesys_decompressor_for_file (char *filename);
! extern int compressed_filename_p (char *filename);
  
  /* A function which returns a pointer to a static buffer containing
     an error message for FILENAME and ERROR_NUM. */
! extern char *filesys_error_string (char *filename, int error_num);
  
  /* The number of the most recent file system error. */
***************
*** 70,77 ****
     return the next one pointed to by IDX, or NULL if there are no more.
     Advance IDX to the character after the colon. */
! extern char *extract_colon_unit ();
  
  /* Return true if FILENAME is `dir', with a possible compression suffix.  */
! extern int is_dir_name ();
  
  /* The default value of INFOPATH. */
--- 72,79 ----
     return the next one pointed to by IDX, or NULL if there are no more.
     Advance IDX to the character after the colon. */
! extern char *extract_colon_unit (char *string, int *idx);
  
  /* Return true if FILENAME is `dir', with a possible compression suffix.  */
! extern int is_dir_name (char *filename);
  
  /* The default value of INFOPATH. */

Index: footnotes.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/footnotes.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** footnotes.c 6 Dec 2003 01:32:41 -0000       1.1.1.1
--- footnotes.c 13 Mar 2004 15:52:46 -0000      1.2
***************
*** 27,30 ****
--- 27,32 ----
  static char *footnote_nodename = "*Footnotes*";
  
+ NODE * make_footnotes_node (NODE *node);
+ 
  #define FOOTNOTE_HEADER_FORMAT \
     "*** Footnotes appearing in the node \"%s\" ***\n"
***************
*** 32,36 ****
  /* Find the window currently showing footnotes. */
  static WINDOW *
! find_footnotes_window ()
  {
    WINDOW *win;
--- 34,38 ----
  /* Find the window currently showing footnotes. */
  static WINDOW *
! find_footnotes_window (void)
  {
    WINDOW *win;
***************
*** 49,54 ****
     NULL pointer. */
  NODE *
! make_footnotes_node (node)
!      NODE *node;
  {
    NODE *fn_node, *result = (NODE *)NULL;
--- 51,55 ----
     NULL pointer. */
  NODE *
! make_footnotes_node (NODE *node)
  {
    NODE *fn_node, *result = (NODE *)NULL;
***************
*** 161,166 ****
     window to show them couldn't be made. */
  int
! info_get_or_remove_footnotes (window)
!      WINDOW *window;
  {
    WINDOW *fn_win;
--- 162,166 ----
     window to show them couldn't be made. */
  int
! info_get_or_remove_footnotes (WINDOW *window)
  {
    WINDOW *fn_win;
***************
*** 210,214 ****
               but we couldn't display them, print a message to that effect. */
            if (auto_footnotes_p)
!             inform_in_echo_area (_("Footnotes could not be displayed"));
            return (FN_UNABLE);
          }
--- 210,214 ----
               but we couldn't display them, print a message to that effect. */
            if (auto_footnotes_p)
!             inform_in_echo_area ((char *) _("Footnotes could not be 
displayed"));
            return (FN_UNABLE);
          }
***************
*** 257,265 ****
          {
          case FN_UNFOUND:
!           info_error (msg_no_foot_node);
            break;
  
          case FN_UNABLE:
!           info_error (msg_win_too_small);
            break;
          }
--- 257,265 ----
          {
          case FN_UNFOUND:
!           info_error ((char *) msg_no_foot_node, NULL, NULL);
            break;
  
          case FN_UNABLE:
!           info_error ((char *) msg_win_too_small, NULL, NULL);
            break;
          }

Index: footnotes.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/footnotes.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** footnotes.h 6 Dec 2003 01:32:41 -0000       1.1.1.1
--- footnotes.h 13 Mar 2004 15:52:46 -0000      1.2
***************
*** 36,40 ****
     in WINDOW's node.  Returns FN_UNABLE if there were footnotes, but the
     window to show them couldn't be made. */
! extern int info_get_or_remove_footnotes ();
  
  /* Non-zero means attempt to show footnotes when displaying a new window. */
--- 36,40 ----
     in WINDOW's node.  Returns FN_UNABLE if there were footnotes, but the
     window to show them couldn't be made. */
! extern int info_get_or_remove_footnotes (WINDOW *window);
  
  /* Non-zero means attempt to show footnotes when displaying a new window. */

Index: gc.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/gc.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** gc.c        6 Dec 2003 01:32:41 -0000       1.1.1.1
--- gc.c        13 Mar 2004 15:52:46 -0000      1.2
***************
*** 35,40 ****
     whose contents member is equal to the pointer. */
  void
! add_gcable_pointer (pointer)
!      char *pointer;
  {
    gc_pointers ();
--- 35,39 ----
     whose contents member is equal to the pointer. */
  void
! add_gcable_pointer (char *pointer)
  {
    gc_pointers ();
***************
*** 46,50 ****
     node->contents which are collectible, and free them. */
  void
! gc_pointers ()
  {
    register int i, j, k;
--- 45,49 ----
     node->contents which are collectible, and free them. */
  void
! gc_pointers (void)
  {
    register int i, j, k;

Index: gc.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/gc.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** gc.h        6 Dec 2003 01:32:41 -0000       1.1.1.1
--- gc.h        13 Mar 2004 15:52:46 -0000      1.2
***************
*** 29,37 ****
     is not actually garbage collected until no info window contains a node
     whose contents member is equal to the pointer. */
! extern void add_gcable_pointer ();
  
  /* Grovel the list of info windows and gc-able pointers finding those
     node->contents which are collectible, and free them. */
! extern void gc_pointers ();
  
  #endif /* not INFO_GC_H */
--- 29,37 ----
     is not actually garbage collected until no info window contains a node
     whose contents member is equal to the pointer. */
! extern void add_gcable_pointer (char *pointer);
  
  /* Grovel the list of info windows and gc-able pointers finding those
     node->contents which are collectible, and free them. */
! extern void gc_pointers (void);
  
  #endif /* not INFO_GC_H */

Index: indices.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/indices.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** indices.c   6 Dec 2003 01:32:43 -0000       1.1.1.1
--- indices.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 56,62 ****
     (passed in ARRAY) to index_nodenames. */
  static void
! add_index_to_index_nodenames (array, node)
!      REFERENCE **array;
!      NODE *node;
  {
    register int i, last;
--- 56,60 ----
     (passed in ARRAY) to index_nodenames. */
  static void
! add_index_to_index_nodenames (REFERENCE **array, NODE *node)
  {
    register int i, last;
***************
*** 89,94 ****
     doesn't have any indices, a NULL pointer is returned. */
  REFERENCE **
! info_indices_of_window (window)
!      WINDOW *window;
  {
    FILE_BUFFER *fb;
--- 87,91 ----
     doesn't have any indices, a NULL pointer is returned. */
  REFERENCE **
! info_indices_of_window (WINDOW *window)
  {
    FILE_BUFFER *fb;
***************
*** 100,105 ****
  
  REFERENCE **
! info_indices_of_file_buffer (file_buffer)
!      FILE_BUFFER *file_buffer;
  {
    register int i;
--- 97,101 ----
  
  REFERENCE **
! info_indices_of_file_buffer (FILE_BUFFER *file_buffer)
  {
    register int i;
***************
*** 182,189 ****
     is NULL, prompt user for input.  */ 
  void
! do_info_index_search (window, count, search_string)
!      WINDOW *window;
!      int count;
!      char *search_string;
  {
    FILE_BUFFER *fb;
--- 178,182 ----
     is NULL, prompt user for input.  */ 
  void
! do_info_index_search (WINDOW *window, int count, char *search_string)
  {
    FILE_BUFFER *fb;
***************
*** 204,208 ****
      {
        info_free_references (index_index);
!       window_message_in_echo_area (_("Finding index entries..."));
        index_index = info_indices_of_file_buffer (fb);
      }
--- 197,202 ----
      {
        info_free_references (index_index);
!       window_message_in_echo_area ((char *) _("Finding index entries..."),
!           NULL, NULL);
        index_index = info_indices_of_file_buffer (fb);
      }
***************
*** 211,215 ****
    if (!index_index)
      {
!       info_error (_("No indices found."));
        return;
      }
--- 205,209 ----
    if (!index_index)
      {
!       info_error ((char *) _("No indices found."), NULL, NULL);
        return;
      }
***************
*** 221,225 ****
    else
      {
!       line = info_read_maybe_completing (window, _("Index entry: "),
                                           index_index);
        window = active_window;
--- 215,219 ----
    else
      {
!       line = info_read_maybe_completing (window, (char *) _("Index entry: "),
                                           index_index);
        window = active_window;
***************
*** 284,290 ****
  
  int
! index_entry_exists (window, string)
!      WINDOW *window;
!      char *string;
  {
    register int i;
--- 278,282 ----
  
  int
! index_entry_exists (WINDOW *window, char *string)
  {
    register int i;
***************
*** 341,345 ****
    if (!index_search)
      {
!       info_error (_("No previous index search string."));
        return;
      }
--- 333,337 ----
    if (!index_search)
      {
!       info_error ((char *) _("No previous index search string."), NULL, NULL);
        return;
      }
***************
*** 348,352 ****
    if (!index_index)
      {
!       info_error (_("No index entries."));
        return;
      }
--- 340,344 ----
    if (!index_index)
      {
!       info_error ((char *) _("No index entries."), NULL, NULL);
        return;
      }
***************
*** 381,386 ****
    if ((i < 0) || (!index_index[i]))
      {
!       info_error (_("No %sindex entries containing \"%s\"."),
!                   index_offset > 0 ? _("more ") : "", index_search);
        return;
      }
--- 373,378 ----
    if ((i < 0) || (!index_index[i]))
      {
!       info_error ((char *) _("No %sindex entries containing \"%s\"."),
!                   index_offset > 0 ? (char *) _("more ") : "", index_search);
        return;
      }
***************
*** 411,415 ****
      if (partial && show_index_match)
        {
!         int j, ls, start, upper;
  
          ls = strlen (index_search);
--- 403,407 ----
      if (partial && show_index_match)
        {
!         int k, ls, start, upper;
  
          ls = strlen (index_search);
***************
*** 417,425 ****
          upper = isupper (match[start]) ? 1 : 0;
  
!         for (j = 0; j < ls; j++)
            if (upper)
!             match[j + start] = info_tolower (match[j + start]);
            else
!             match[j + start] = info_toupper (match[j + start]);
        }
  
--- 409,417 ----
          upper = isupper (match[start]) ? 1 : 0;
  
!         for (k = 0; k < ls; k++)
            if (upper)
!             match[k + start] = info_tolower (match[k + start]);
            else
!             match[k + start] = info_toupper (match[k + start]);
        }
  
***************
*** 428,434 ****
  
        format = replace_in_documentation
!         (_("Found \"%s\" in %s. (`\\[next-index-match]' tries to find 
next.)"));
  
!       window_message_in_echo_area (format, match, name);
      }
  
--- 420,427 ----
  
        format = replace_in_documentation
!         ((char *) _("Found \"%s\" in %s. (`\\[next-index-match]' tries to 
find next.)"),
!          0);
  
!       window_message_in_echo_area (format, match, (char *) name);
      }
  
***************
*** 441,445 ****
    if (!node)
      {
!       info_error (msg_cant_file_node,
                    index_index[i]->filename, index_index[i]->nodename);
        return;
--- 434,438 ----
    if (!node)
      {
!       info_error ((char *) msg_cant_file_node,
                    index_index[i]->filename, index_index[i]->nodename);
        return;
***************
*** 472,478 ****
     SEARCH_STRING. */
  REFERENCE **
! apropos_in_all_indices (search_string, inform)
!      char *search_string;
!      int inform;
  {
    register int i, dir_index;
--- 465,469 ----
     SEARCH_STRING. */
  REFERENCE **
! apropos_in_all_indices (char *search_string, int inform)
  {
    register int i, dir_index;
***************
*** 548,552 ****
  
          if (this_fb && inform)
!           message_in_echo_area (_("Scanning indices of \"%s\"..."), 
files_name);
  
          this_index = info_indices_of_file_buffer (this_fb);
--- 539,544 ----
  
          if (this_fb && inform)
!           message_in_echo_area ((char *) _("Scanning indices of \"%s\"..."),
!               files_name, NULL);
  
          this_index = info_indices_of_file_buffer (this_fb);
***************
*** 605,610 ****
  
  void
! info_apropos (string)
!      char *string;
  {
    REFERENCE **apropos_list;
--- 597,601 ----
  
  void
! info_apropos (char *string)
  {
    REFERENCE **apropos_list;
***************
*** 613,619 ****
  
    if (!apropos_list)
!     {
!       info_error (_(APROPOS_NONE), string);
!     }
    else
      {
--- 604,608 ----
  
    if (!apropos_list)
!     info_error ((char *) _(APROPOS_NONE), string, NULL);
    else
      {
***************
*** 635,639 ****
    char *line;
  
!   line = info_read_in_echo_area (window, _("Index apropos: "));
  
    window = active_window;
--- 624,628 ----
    char *line;
  
!   line = info_read_in_echo_area (window, (char *) _("Index apropos: "));
  
    window = active_window;
***************
*** 655,661 ****
  
        if (!apropos_list)
!         {
!           info_error (_(APROPOS_NONE), line);
!         }
        else
          {
--- 644,648 ----
  
        if (!apropos_list)
!         info_error ((char *) _(APROPOS_NONE), line, NULL);
        else
          {
***************
*** 665,669 ****
            initialize_message_buffer ();
            printf_to_message_buffer
!             (_("\n* Menu: Nodes whose indices contain \"%s\":\n"), line);
            line_buffer = (char *)xmalloc (500);
  
--- 652,657 ----
            initialize_message_buffer ();
            printf_to_message_buffer
!             ((char *) _("\n* Menu: Nodes whose indices contain \"%s\":\n"),
!              line, NULL, NULL);
            line_buffer = (char *)xmalloc (500);
  
***************
*** 679,683 ****
                sprintf (line_buffer + len, "(%s)%s.",
                         apropos_list[i]->filename, apropos_list[i]->nodename);
!               printf_to_message_buffer ("%s\n", line_buffer);
              }
            free (line_buffer);
--- 667,671 ----
                sprintf (line_buffer + len, "(%s)%s.",
                         apropos_list[i]->filename, apropos_list[i]->nodename);
!               printf_to_message_buffer ("%s\n", line_buffer, NULL, NULL);
              }
            free (line_buffer);
***************
*** 746,748 ****
      window_clear_echo_area ();
  }
- 
--- 734,735 ----

Index: indices.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/indices.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** indices.h   6 Dec 2003 01:32:43 -0000       1.1.1.1
--- indices.h   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 29,42 ****
  extern int show_index_match;
  
! extern REFERENCE **info_indices_of_window (), **info_indices_of_file_buffer 
();
! extern void info_apropos ();
  
  /* For every menu item in DIR, search the indices of that file for STRING. */
! REFERENCE **apropos_in_all_indices ();
  
  /* User visible functions declared in indices.c. */
! extern void info_index_search (), info_next_index_match ();
! extern void do_info_index_search ();
! extern int index_intry_exists ();
  
  #endif /* not INFO_INDICES_H */
--- 29,45 ----
  extern int show_index_match;
  
! extern REFERENCE **info_indices_of_window (WINDOW *window);
! extern REFERENCE **info_indices_of_file_buffer (FILE_BUFFER *file_buffer);
! extern void info_apropos (char *string);
  
  /* For every menu item in DIR, search the indices of that file for STRING. */
! REFERENCE **apropos_in_all_indices (char *search_string, int inform);
  
  /* User visible functions declared in indices.c. */
! extern void info_index_search (WINDOW *window, int count, unsigned char key);
! extern void info_next_index_match (WINDOW *window, int count, unsigned char 
key);
! extern void info_index_apropos (WINDOW *window, int count, unsigned char key);
! extern void do_info_index_search (WINDOW *window, int count, char 
*search_string);
! extern int index_entry_exists (WINDOW *window, char *string);
  
  #endif /* not INFO_INDICES_H */

Index: info-utils.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/info-utils.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** info-utils.c        5 Feb 2004 00:29:29 -0000       1.3
--- info-utils.c        13 Mar 2004 15:52:46 -0000      1.4
***************
*** 43,51 ****
  
  /* Functions to remember a filename or nodename for later return. */
! static void save_filename (), saven_filename ();
! static void save_nodename (), saven_nodename ();
  
  /* How to get a reference (either menu or cross). */
! static REFERENCE **info_references_internal ();
  
  /* Parse the filename and nodename out of STRING.  If STRING doesn't
--- 43,54 ----
  
  /* Functions to remember a filename or nodename for later return. */
! static void save_filename (char *filename);
! static void saven_filename (char *filename, int len);
! static void save_nodename (char *nodename);
! static void saven_nodename (char *nodename, int len);
  
  /* How to get a reference (either menu or cross). */
! static REFERENCE **info_references_internal (char *label,
!     SEARCH_BINDING *binding);
  
  /* Parse the filename and nodename out of STRING.  If STRING doesn't
***************
*** 55,61 ****
     newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
  void
! info_parse_node (string, newlines_okay)
!      char *string;
!      int newlines_okay;
  {
    register int i = 0;
--- 58,62 ----
     newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
  void
! info_parse_node (char *string, int newlines_okay)
  {
    register int i = 0;
***************
*** 135,141 ****
     the information. */
  void
! info_parse_label (label, node)
!      char *label;
!      NODE *node;
  {
    register int i;
--- 136,140 ----
     the information. */
  void
! info_parse_label (char *label, NODE *node)
  {
    register int i;
***************
*** 167,184 ****
     found in NODE.  If there is no menu in NODE, just return a NULL pointer. */
  REFERENCE **
! info_menu_of_node (node)
!      NODE *node;
  {
    long position;
!   SEARCH_BINDING search;
    REFERENCE **menu = (REFERENCE **)NULL;
  
!   search.buffer = node->contents;
!   search.start = 0;
!   search.end = node->nodelen;
!   search.flags = S_FoldCase;
  
    /* Find the start of the menu. */
!   position = search_forward (INFO_MENU_LABEL, &search);
  
    if (position == -1)
--- 166,182 ----
     found in NODE.  If there is no menu in NODE, just return a NULL pointer. */
  REFERENCE **
! info_menu_of_node (NODE *node)
  {
    long position;
!   SEARCH_BINDING tmp_search;
    REFERENCE **menu = (REFERENCE **)NULL;
  
!   tmp_search.buffer = node->contents;
!   tmp_search.start = 0;
!   tmp_search.end = node->nodelen;
!   tmp_search.flags = S_FoldCase;
  
    /* Find the start of the menu. */
!   position = search_forward (INFO_MENU_LABEL, &tmp_search);
  
    if (position == -1)
***************
*** 187,194 ****
    /* We have the start of the menu now.  Glean menu items from the rest
       of the node. */
!   search.start = position + strlen (INFO_MENU_LABEL);
!   search.start += skip_line (search.buffer + search.start);
!   search.start--;
!   menu = info_menu_items (&search);
    return (menu);
  }
--- 185,192 ----
    /* We have the start of the menu now.  Glean menu items from the rest
       of the node. */
!   tmp_search.start = position + strlen (INFO_MENU_LABEL);
!   tmp_search.start += skip_line (tmp_search.buffer + tmp_search.start);
!   tmp_search.start--;
!   menu = info_menu_items (&tmp_search);
    return (menu);
  }
***************
*** 198,205 ****
     return a NULL pointer. */
  REFERENCE **
! info_xrefs_of_node (node)
!      NODE *node;
  {
!   SEARCH_BINDING search;
  
  #if defined (HANDLE_MAN_PAGES)
--- 196,202 ----
     return a NULL pointer. */
  REFERENCE **
! info_xrefs_of_node (NODE *node)
  {
!   SEARCH_BINDING tmp_search;
  
  #if defined (HANDLE_MAN_PAGES)
***************
*** 208,217 ****
  #endif
  
!   search.buffer = node->contents;
!   search.start = 0;
!   search.end = node->nodelen;
!   search.flags = S_FoldCase;
  
!   return (info_xrefs (&search));
  }
  
--- 205,214 ----
  #endif
  
!   tmp_search.buffer = node->contents;
!   tmp_search.start = 0;
!   tmp_search.end = node->nodelen;
!   tmp_search.flags = S_FoldCase;
  
!   return (info_xrefs (&tmp_search));
  }
  
***************
*** 220,225 ****
     of REFERENCE * that represents each menu item in this range. */
  REFERENCE **
! info_menu_items (binding)
!      SEARCH_BINDING *binding;
  {
    return (info_references_internal (INFO_MENU_ENTRY_LABEL, binding));
--- 217,221 ----
     of REFERENCE * that represents each menu item in this range. */
  REFERENCE **
! info_menu_items (SEARCH_BINDING *binding)
  {
    return (info_references_internal (INFO_MENU_ENTRY_LABEL, binding));
***************
*** 230,235 ****
     cross reference in this range. */
  REFERENCE **
! info_xrefs (binding)
!      SEARCH_BINDING *binding;
  {
    return (info_references_internal (INFO_XREF_LABEL, binding));
--- 226,230 ----
     cross reference in this range. */
  REFERENCE **
! info_xrefs (SEARCH_BINDING *binding)
  {
    return (info_references_internal (INFO_XREF_LABEL, binding));
***************
*** 239,247 ****
     of REFERENCE * that represents the items found. */
  static REFERENCE **
! info_references_internal (label, binding)
!      char *label;
!      SEARCH_BINDING *binding;
  {
!   SEARCH_BINDING search;
    REFERENCE **refs = (REFERENCE **)NULL;
    int refs_index = 0, refs_slots = 0;
--- 234,240 ----
     of REFERENCE * that represents the items found. */
  static REFERENCE **
! info_references_internal (char *label, SEARCH_BINDING *binding)
  {
!   SEARCH_BINDING tmp_search;
    REFERENCE **refs = (REFERENCE **)NULL;
    int refs_index = 0, refs_slots = 0;
***************
*** 249,260 ****
    long position;
  
!   search.buffer = binding->buffer;
!   search.start = binding->start;
!   search.end = binding->end;
!   search.flags = S_FoldCase | S_SkipDest;
  
    searching_for_menu_items = (strcasecmp (label, INFO_MENU_ENTRY_LABEL) == 0);
  
!   while ((position = search_forward (label, &search)) != -1)
      {
        int offset, start;
--- 242,253 ----
    long position;
  
!   tmp_search.buffer = binding->buffer;
!   tmp_search.start = binding->start;
!   tmp_search.end = binding->end;
!   tmp_search.flags = S_FoldCase | S_SkipDest;
  
    searching_for_menu_items = (strcasecmp (label, INFO_MENU_ENTRY_LABEL) == 0);
  
!   while ((position = search_forward (label, &tmp_search)) != -1)
      {
        int offset, start;
***************
*** 262,269 ****
        REFERENCE *entry;
  
!       search.start = position;
!       search.start += skip_whitespace (search.buffer + search.start);
!       start = search.start - binding->start;
!       refdef = search.buffer + search.start;
        offset = string_in_line (":", refdef);
  
--- 255,262 ----
        REFERENCE *entry;
  
!       tmp_search.start = position;
!       tmp_search.start += skip_whitespace (tmp_search.buffer + 
tmp_search.start);
!       start = tmp_search.start - binding->start;
!       refdef = tmp_search.buffer + tmp_search.start;
        offset = string_in_line (":", refdef);
  
***************
*** 335,341 ****
     to the ENTRY if found, or NULL. */
  REFERENCE *
! info_get_labeled_reference (label, references)
!      char *label;
!      REFERENCE **references;
  {
    register int i;
--- 328,332 ----
     to the ENTRY if found, or NULL. */
  REFERENCE *
! info_get_labeled_reference (char *label, REFERENCE **references)
  {
    register int i;
***************
*** 354,359 ****
     and REF2 arrays are freed, but their contents are not. */
  REFERENCE **
! info_concatenate_references (ref1, ref2)
!      REFERENCE **ref1, **ref2;
  {
    register int i, j;
--- 345,349 ----
     and REF2 arrays are freed, but their contents are not. */
  REFERENCE **
! info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2)
  {
    register int i, j;
***************
*** 395,400 ****
     new memory.  */
  REFERENCE *
! info_copy_reference (src)
!     REFERENCE *src;
  {
    REFERENCE *dest = xmalloc (sizeof (REFERENCE));
--- 385,389 ----
     new memory.  */
  REFERENCE *
! info_copy_reference (REFERENCE *src)
  {
    REFERENCE *dest = xmalloc (sizeof (REFERENCE));
***************
*** 412,417 ****
  /* Free the data associated with REFERENCES. */
  void
! info_free_references (references)
!      REFERENCE **references;
  {
    register int i;
--- 401,405 ----
  /* Free the data associated with REFERENCES. */
  void
! info_free_references (REFERENCE **references)
  {
    register int i;
***************
*** 437,445 ****
     start and end of string. */
  void
! canonicalize_whitespace (string)
!      char *string;
  {
    register int i, j;
!   int len, whitespace_found, whitespace_loc;
    char *temp;
  
--- 425,432 ----
     start and end of string. */
  void
! canonicalize_whitespace (char *string)
  {
    register int i, j;
!   int len, whitespace_found, whitespace_loc = 0;
    char *temp;
  
***************
*** 492,498 ****
     of CHARACTER if it were printed at HPOS. */
  char *
! printed_representation (character, hpos)
!      unsigned char character;
!      int hpos;
  {
    register int i = 0;
--- 479,483 ----
     of CHARACTER if it were printed at HPOS. */
  char *
! printed_representation (unsigned char character, int hpos)
  {
    register int i = 0;
***************
*** 558,568 ****
  static int parsed_nodename_size = 0;
  
! static void save_string (), saven_string ();
  
  /* Remember FILENAME in PARSED_FILENAME.  An empty FILENAME is translated
     to a NULL pointer in PARSED_FILENAME. */
  static void
! save_filename (filename)
!      char *filename;
  {
    save_string (filename, &info_parsed_filename, &parsed_filename_size);
--- 543,554 ----
  static int parsed_nodename_size = 0;
  
! static void save_string (char *string, char **string_p, int *string_size_p);
! static void saven_string (char *string, int len, char **string_p,
!     int *string_size_p);
  
  /* Remember FILENAME in PARSED_FILENAME.  An empty FILENAME is translated
     to a NULL pointer in PARSED_FILENAME. */
  static void
! save_filename (char *filename)
  {
    save_string (filename, &info_parsed_filename, &parsed_filename_size);
***************
*** 571,577 ****
  /* Just like save_filename (), but you pass the length of the string. */
  static void
! saven_filename (filename, len)
!      char *filename;
!      int len;
  {
    saven_string (filename, len,
--- 557,561 ----
  /* Just like save_filename (), but you pass the length of the string. */
  static void
! saven_filename (char *filename, int len)
  {
    saven_string (filename, len,
***************
*** 582,587 ****
     to a NULL pointer in PARSED_NODENAME. */
  static void
! save_nodename (nodename)
!      char *nodename;
  {
    save_string (nodename, &info_parsed_nodename, &parsed_nodename_size);
--- 566,570 ----
     to a NULL pointer in PARSED_NODENAME. */
  static void
! save_nodename (char *nodename)
  {
    save_string (nodename, &info_parsed_nodename, &parsed_nodename_size);
***************
*** 590,596 ****
  /* Just like save_nodename (), but you pass the length of the string. */
  static void
! saven_nodename (nodename, len)
!      char *nodename;
!      int len;
  {
    saven_string (nodename, len,
--- 573,577 ----
  /* Just like save_nodename (), but you pass the length of the string. */
  static void
! saven_nodename (char *nodename, int len)
  {
    saven_string (nodename, len,
***************
*** 602,609 ****
     in STRING_P. */
  static void
! save_string (string, string_p, string_size_p)
!      char *string;
!      char **string_p;
!      int *string_size_p;
  {
    if (!string || !*string)
--- 583,587 ----
     in STRING_P. */
  static void
! save_string (char *string, char **string_p, int *string_size_p)
  {
    if (!string || !*string)
***************
*** 617,621 ****
    else
      {
!       if (strlen (string) >= *string_size_p)
          *string_p = (char *)xrealloc
            (*string_p, (*string_size_p = 1 + strlen (string)));
--- 595,599 ----
    else
      {
!       if (strlen (string) >= (unsigned int) *string_size_p)
          *string_p = (char *)xrealloc
            (*string_p, (*string_size_p = 1 + strlen (string)));
***************
*** 627,635 ****
  /* Just like save_string (), but you also pass the length of STRING. */
  static void
! saven_string (string, len, string_p, string_size_p)
!      char *string;
!      int len;
!      char **string_p;
!      int *string_size_p;
  {
    if (!string)
--- 605,609 ----
  /* Just like save_string (), but you also pass the length of STRING. */
  static void
! saven_string (char *string, int len, char **string_p, int *string_size_p)
  {
    if (!string)
***************
*** 653,658 ****
  /* Return a pointer to the part of PATHNAME that simply defines the file. */
  char *
! filename_non_directory (pathname)
!      char *pathname;
  {
    register char *filename = pathname + strlen (pathname);
--- 627,631 ----
  /* Return a pointer to the part of PATHNAME that simply defines the file. */
  char *
! filename_non_directory (char *pathname)
  {
    register char *filename = pathname + strlen (pathname);
***************
*** 669,674 ****
  /* Return non-zero if NODE is one especially created by Info. */
  int
! internal_info_node_p (node)
!      NODE *node;
  {
  #if defined (NEVER)
--- 642,646 ----
  /* Return non-zero if NODE is one especially created by Info. */
  int
! internal_info_node_p (NODE *node)
  {
  #if defined (NEVER)
***************
*** 686,692 ****
  /* Make NODE appear to be one especially created by Info. */
  void
! name_internal_node (node, name)
!      NODE *node;
!      char *name;
  {
    if (!node)
--- 658,662 ----
  /* Make NODE appear to be one especially created by Info. */
  void
! name_internal_node (NODE *node, char *name)
  {
    if (!node)
***************
*** 702,707 ****
     Info window. */
  WINDOW *
! get_internal_info_window (name)
!      char *name;
  {
    WINDOW *win;
--- 672,676 ----
     Info window. */
  WINDOW *
! get_internal_info_window (char *name)
  {
    WINDOW *win;
***************
*** 717,722 ****
  /* Return a window displaying the node NODE. */
  WINDOW *
! get_window_of_node (node)
!      NODE *node;
  {
    WINDOW *win = (WINDOW *)NULL;
--- 686,690 ----
  /* Return a window displaying the node NODE. */
  WINDOW *
! get_window_of_node (NODE *node)
  {
    WINDOW *win = (WINDOW *)NULL;

Index: info-utils.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/info-utils.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** info-utils.h        3 Feb 2004 12:04:49 -0000       1.2
--- info-utils.h        13 Mar 2004 15:52:46 -0000      1.3
***************
*** 55,118 ****
     non-zero, it says to allow the nodename specification to cross a
     newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
! void info_parse_node ();
  
  /* Return a NULL terminated array of REFERENCE * which represents the menu
     found in NODE.  If there is no menu in NODE, just return a NULL pointer. */
! extern REFERENCE **info_menu_of_node ();
  
  /* Return a NULL terminated array of REFERENCE * which represents the cross
     refrences found in NODE.  If there are no cross references in NODE, just
     return a NULL pointer. */
! extern REFERENCE **info_xrefs_of_node ();
  
  /* Glean cross references from BINDING->buffer + BINDING->start until
     BINDING->end.  Return an array of REFERENCE * that represents each
     cross reference in this range. */
! extern REFERENCE **info_xrefs ();
  
  /* Get the entry associated with LABEL in REFERENCES.  Return a pointer to
     the reference if found, or NULL. */
! extern REFERENCE *info_get_labeled_reference ();
  
  /* Glean menu entries from BINDING->buffer + BINDING->start until we
     have looked at the entire contents of BINDING.  Return an array
     of REFERENCE * that represents each menu item in this range. */
! extern REFERENCE **info_menu_items ();
  
  /* A utility function for concatenating REFERENCE **.  Returns a new
     REFERENCE ** which is the concatenation of REF1 and REF2.  The REF1
     and REF2 arrays are freed, but their contents are not. */
! REFERENCE **info_concatenate_references ();
  
  /* Copy an existing reference into new memory.  */
! extern REFERENCE *info_copy_reference ();
  
  /* Free the data associated with REFERENCES. */
! extern void info_free_references ();
  
  /* Search for sequences of whitespace or newlines in STRING, replacing
     all such sequences with just a single space.  Remove whitespace from
     start and end of string. */
! void canonicalize_whitespace ();
  
  /* Return a pointer to a string which is the printed representation
     of CHARACTER if it were printed at HPOS. */
! extern char *printed_representation ();
  
  /* Return a pointer to the part of PATHNAME that simply defines the file. */
! extern char *filename_non_directory ();
  
  /* Return non-zero if NODE is one especially created by Info. */
! extern int internal_info_node_p ();
  
  /* Make NODE appear to be one especially created by Info, and give it NAME. */
! extern void name_internal_node ();
  
  /* Return the window displaying NAME, the name of an internally created
     Info window. */
! extern WINDOW *get_internal_info_window ();
  
  /* Return a window displaying the node NODE. */
! extern WINDOW *get_window_of_node ();
  
  /* Return the node addressed by LABEL in NODE (usually one of "Prev:",
--- 55,119 ----
     non-zero, it says to allow the nodename specification to cross a
     newline boundary (i.e., only `,', `.', or `TAB' can end the spec). */
! void info_parse_node (char *string, int newlines_okay);
  
  /* Return a NULL terminated array of REFERENCE * which represents the menu
     found in NODE.  If there is no menu in NODE, just return a NULL pointer. */
! extern REFERENCE **info_menu_of_node (NODE *node);
  
  /* Return a NULL terminated array of REFERENCE * which represents the cross
     refrences found in NODE.  If there are no cross references in NODE, just
     return a NULL pointer. */
! extern REFERENCE **info_xrefs_of_node (NODE *node);
  
  /* Glean cross references from BINDING->buffer + BINDING->start until
     BINDING->end.  Return an array of REFERENCE * that represents each
     cross reference in this range. */
! extern REFERENCE **info_xrefs (SEARCH_BINDING *binding);
  
  /* Get the entry associated with LABEL in REFERENCES.  Return a pointer to
     the reference if found, or NULL. */
! extern REFERENCE *info_get_labeled_reference (char *label,
!     REFERENCE **references);
  
  /* Glean menu entries from BINDING->buffer + BINDING->start until we
     have looked at the entire contents of BINDING.  Return an array
     of REFERENCE * that represents each menu item in this range. */
! extern REFERENCE **info_menu_items (SEARCH_BINDING *binding);
  
  /* A utility function for concatenating REFERENCE **.  Returns a new
     REFERENCE ** which is the concatenation of REF1 and REF2.  The REF1
     and REF2 arrays are freed, but their contents are not. */
! REFERENCE **info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2);
  
  /* Copy an existing reference into new memory.  */
! extern REFERENCE *info_copy_reference (REFERENCE *src);
  
  /* Free the data associated with REFERENCES. */
! extern void info_free_references (REFERENCE **references);
  
  /* Search for sequences of whitespace or newlines in STRING, replacing
     all such sequences with just a single space.  Remove whitespace from
     start and end of string. */
! void canonicalize_whitespace (char *string);
  
  /* Return a pointer to a string which is the printed representation
     of CHARACTER if it were printed at HPOS. */
! extern char *printed_representation (unsigned char character, int hpos);
  
  /* Return a pointer to the part of PATHNAME that simply defines the file. */
! extern char *filename_non_directory (char *pathname);
  
  /* Return non-zero if NODE is one especially created by Info. */
! extern int internal_info_node_p (NODE *node);
  
  /* Make NODE appear to be one especially created by Info, and give it NAME. */
! extern void name_internal_node (NODE *node, char *name);
  
  /* Return the window displaying NAME, the name of an internally created
     Info window. */
! extern WINDOW *get_internal_info_window (char *name);
  
  /* Return a window displaying the node NODE. */
! extern WINDOW *get_window_of_node (NODE *node);
  
  /* Return the node addressed by LABEL in NODE (usually one of "Prev:",
***************
*** 120,124 ****
     the globals `info_parsed_nodename' and `info_parsed_filename' contain
     the information. */
! extern void info_parse_label (/* label, node */);
  
  #define info_file_label_of_node(n) info_parse_label (INFO_FILE_LABEL, n)
--- 121,125 ----
     the globals `info_parsed_nodename' and `info_parsed_filename' contain
     the information. */
! extern void info_parse_label (char *label, NODE *node);
  
  #define info_file_label_of_node(n) info_parse_label (INFO_FILE_LABEL, n)

Index: info.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/info.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** info.c      24 Feb 2004 03:25:46 -0000      1.6
--- info.c      13 Mar 2004 15:52:46 -0000      1.7
***************
*** 136,142 ****
  
  /* Some "forward" declarations. */
! static void info_short_help ();
! static void init_messages ();
! extern void add_file_directory_to_path ();
  
  
--- 136,141 ----
  
  /* Some "forward" declarations. */
! static void info_short_help (void);
! static void init_messages (void);
  
  
***************
*** 148,154 ****
  
  int
! main (argc, argv)
!      int argc;
!      char **argv;
  {
    int getopt_long_index;        /* Index returned by getopt_long (). */
--- 147,151 ----
  
  int
! main (int argc, char **argv)
  {
    int getopt_long_index;        /* Index returned by getopt_long (). */
***************
*** 160,166 ****
--- 157,165 ----
  #endif
  
+ #ifdef ENABLE_NLS
    /* Set the text message domain.  */
    bindtextdomain (PACKAGE, LOCALEDIR);
    textdomain (PACKAGE);
+ #endif
  
    init_messages ();
***************
*** 366,373 ****
      {
        if (info_recent_file_error)
!         info_error (info_recent_file_error);
        else
!         info_error (msg_cant_find_node,
!                     user_nodenames ? user_nodenames[0] : "Top");
        xexit (1);
      }
--- 365,372 ----
      {
        if (info_recent_file_error)
!         info_error (info_recent_file_error, NULL, NULL);
        else
!         info_error ((char *) msg_cant_find_node,
!                     user_nodenames ? user_nodenames[0] : "Top", NULL);
        xexit (1);
      }
***************
*** 397,403 ****
       was specified. */
    {
!     char *errstr, *errarg1, *errarg2;
      NODE *new_initial_node = info_follow_menus (initial_node, argv + optind,
!                                                 &errstr, &errarg1, &errarg2);
  
      if (new_initial_node && new_initial_node != initial_node)
--- 396,404 ----
       was specified. */
    {
!     const char *errstr;
!     char *errarg1, *errarg2;
! 
      NODE *new_initial_node = info_follow_menus (initial_node, argv + optind,
!         &errstr, &errarg1, &errarg2);
  
      if (new_initial_node && new_initial_node != initial_node)
***************
*** 425,429 ****
                               dump_subnodes);
          else
!           info_error (errstr, errarg1, errarg2);
        }
      else
--- 426,430 ----
                               dump_subnodes);
          else
!           info_error ((char *) errstr, errarg1, errarg2);
        }
      else
***************
*** 431,436 ****
  
          if (errstr)
!           begin_info_session_with_error (initial_node, errstr,
!                                          errarg1, errarg2);
          /* If the user specified `--index-search=STRING' or
             --show-options, start the info session in the node
--- 432,437 ----
  
          if (errstr)
!           begin_info_session_with_error (initial_node, (char *) errstr,
!               errarg1, errarg2);
          /* If the user specified `--index-search=STRING' or
             --show-options, start the info session in the node
***************
*** 514,519 ****
  
  void
! add_file_directory_to_path (filename)
!      char *filename;
  {
    char *directory_name = xstrdup (filename);
--- 515,519 ----
  
  void
! add_file_directory_to_path (char *filename)
  {
    char *directory_name = xstrdup (filename);
***************
*** 549,555 ****
     output to stderr. */
  void
! info_error (format, arg1, arg2)
!      char *format;
!      void *arg1, *arg2;
  {
    info_error_was_printed = 1;
--- 549,553 ----
     output to stderr. */
  void
! info_error (char *format, void *arg1, void *arg2)
  {
    info_error_was_printed = 1;
***************
*** 587,591 ****
  /* Produce a scaled down description of the available options to Info. */
  static void
! info_short_help ()
  {
  #ifdef __MSDOS__
--- 585,589 ----
  /* Produce a scaled down description of the available options to Info. */
  static void
! info_short_help (void)
  {
  #ifdef __MSDOS__
***************
*** 667,671 ****
  
  static void
! init_messages ()
  {
    msg_cant_find_node   = _("Cannot find node `%s'.");
--- 665,669 ----
  
  static void
! init_messages (void)
  {
    msg_cant_find_node   = _("Cannot find node `%s'.");

Index: info.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/info.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** info.h      6 Dec 2003 01:32:45 -0000       1.1.1.1
--- info.h      13 Mar 2004 15:52:46 -0000      1.2
***************
*** 127,131 ****
     then the message is printed in the echo area.  Otherwise, a message is
     output to stderr. */
! extern void info_error ();
  
  /* Error message defines. */
--- 127,133 ----
     then the message is printed in the echo area.  Otherwise, a message is
     output to stderr. */
! extern void info_error (char *format, void *arg1, void *arg2);
! 
! extern void add_file_directory_to_path (char *filename);
  
  /* Error message defines. */
***************
*** 148,162 ****
  
  
- extern char *filename_non_directory ();       /* Found in info-utils.c. */
- 
  #if defined(INFOKEY)
! extern void set_variable_to_value (); /* Found in variables.c. */
  #endif /* INFOKEY */
  
! #if !defined (BUILDING_LIBRARY)
! extern int info_windows_initialized_p;        /* Found in session.c */
! /* Found in window.c. */
! extern void message_in_echo_area (), unmessage_in_echo_area ();
! #endif /* !BUILDING_LIBRARY */
  
  #endif /* !INFO_H */
--- 150,160 ----
  
  
  #if defined(INFOKEY)
! /* Found in variables.c. */
! extern void set_variable_to_value (char *name, char *value);
  #endif /* INFOKEY */
  
! /* Found in m-x.c.  */
! extern char *read_function_name (char *prompt, WINDOW *window);
  
  #endif /* !INFO_H */

Index: infodoc.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/infodoc.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** infodoc.c   6 Dec 2003 01:32:47 -0000       1.1.1.1
--- infodoc.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 186,195 ****
  #endif /* !INFOKEY */
  
! static char *where_is_internal ();
  
  void
! dump_map_to_message_buffer (prefix, map)
!      char *prefix;
!      Keymap map;
  {
    register int i;
--- 186,193 ----
  #endif /* !INFOKEY */
  
! static char *where_is_internal (Keymap map, InfoCommand *cmd);
  
  void
! dump_map_to_message_buffer (char *prefix, Keymap map)
  {
    register int i;
***************
*** 227,237 ****
            if (last - 1 != i)
              {
!               printf_to_message_buffer ("%s .. ", pretty_keyseq (new_prefix));
                new_prefix[prefix_len] = last - 1;
!               printf_to_message_buffer ("%s\t", pretty_keyseq (new_prefix));
                i = last - 1;
              }
            else
!             printf_to_message_buffer ("%s\t", pretty_keyseq (new_prefix));
  
  #if defined (NAMED_FUNCTIONS)
--- 225,238 ----
            if (last - 1 != i)
              {
!               printf_to_message_buffer ("%s .. ", pretty_keyseq (new_prefix),
!                   NULL, NULL);
                new_prefix[prefix_len] = last - 1;
!               printf_to_message_buffer ("%s\t", pretty_keyseq (new_prefix),
!                   NULL, NULL);
                i = last - 1;
              }
            else
!             printf_to_message_buffer ("%s\t", pretty_keyseq (new_prefix),
!                 NULL, NULL);
  
  #if defined (NAMED_FUNCTIONS)
***************
*** 242,255 ****
              int desired_doc_start = 40; /* Must be multiple of 8. */
  
!             printf_to_message_buffer ("(%s)", name);
              length_so_far = message_buffer_length_this_line ();
  
!             if ((desired_doc_start + strlen (doc)) >= the_screen->width)
!               printf_to_message_buffer ("\n     ");
              else
                {
                  while (length_so_far < desired_doc_start)
                    {
!                     printf_to_message_buffer ("\t");
                      length_so_far += character_width ('\t', length_so_far);
                    }
--- 243,257 ----
              int desired_doc_start = 40; /* Must be multiple of 8. */
  
!             printf_to_message_buffer ("(%s)", name, NULL, NULL);
              length_so_far = message_buffer_length_this_line ();
  
!             if ((desired_doc_start + strlen (doc))
!                 >= (unsigned int) the_screen->width)
!               printf_to_message_buffer ("\n     ", NULL, NULL, NULL);
              else
                {
                  while (length_so_far < desired_doc_start)
                    {
!                     printf_to_message_buffer ("\t", NULL, NULL, NULL);
                      length_so_far += character_width ('\t', length_so_far);
                    }
***************
*** 257,261 ****
            }
  #endif /* NAMED_FUNCTIONS */
!           printf_to_message_buffer ("%s\n", doc);
          }
      }
--- 259,263 ----
            }
  #endif /* NAMED_FUNCTIONS */
!           printf_to_message_buffer ("%s\n", doc, NULL, NULL);
          }
      }
***************
*** 270,275 ****
  
  static void
! create_internal_info_help_node (help_is_only_window_p)
!      int help_is_only_window_p;
  {
    register int i;
--- 272,276 ----
  
  static void
! create_internal_info_help_node (int help_is_only_window_p)
  {
    register int i;
***************
*** 292,297 ****
          {
  #ifdef INFOKEY
!           printf_to_message_buffer (replace_in_documentation (
!            _(info_internal_help_text[i]), help_is_only_window_p));
  #else
            /* Don't translate blank lines, gettext outputs the po file
--- 293,299 ----
          {
  #ifdef INFOKEY
!           printf_to_message_buffer (replace_in_documentation
!               ((char *) _(info_internal_help_text[i]), help_is_only_window_p),
!               NULL, NULL, NULL);
  #else
            /* Don't translate blank lines, gettext outputs the po file
***************
*** 307,322 ****
              key = "l";
  
!           printf_to_message_buffer (msg, key);
  #endif /* !INFOKEY */
          }
  
!       printf_to_message_buffer ("---------------------\n\n");
!       printf_to_message_buffer (_("The current search path is:\n"));
!       printf_to_message_buffer ("  %s\n", infopath);
!       printf_to_message_buffer ("---------------------\n\n");
!       printf_to_message_buffer (_("Commands available in Info windows:\n\n"));
        dump_map_to_message_buffer ("", info_keymap);
!       printf_to_message_buffer ("---------------------\n\n");
!       printf_to_message_buffer (_("Commands available in the echo 
area:\n\n"));
        dump_map_to_message_buffer ("", echo_area_keymap);
  
--- 309,327 ----
              key = "l";
  
!           printf_to_message_buffer (msg, key, NULL, NULL);
  #endif /* !INFOKEY */
          }
  
!       printf_to_message_buffer ("---------------------\n\n", NULL, NULL, 
NULL);
!       printf_to_message_buffer ((char *) _("The current search path is:\n"),
!           NULL, NULL, NULL);
!       printf_to_message_buffer ("  %s\n", infopath, NULL, NULL);
!       printf_to_message_buffer ("---------------------\n\n", NULL, NULL, 
NULL);
!       printf_to_message_buffer ((char *) _("Commands available in Info 
windows:\n\n"),
!           NULL, NULL, NULL);
        dump_map_to_message_buffer ("", info_keymap);
!       printf_to_message_buffer ("---------------------\n\n", NULL, NULL, 
NULL);
!       printf_to_message_buffer ((char *) _("Commands available in the echo 
area:\n\n"),
!           NULL, NULL, NULL);
        dump_map_to_message_buffer ("", echo_area_keymap);
  
***************
*** 330,334 ****
            InfoCommand *cmd = DocInfoCmd(&function_doc_array[i]);
  
!           if (InfoFunction(cmd) != info_do_lowercase_version
                && !where_is_internal (info_keymap, cmd)
                && !where_is_internal (echo_area_keymap, cmd))
--- 335,339 ----
            InfoCommand *cmd = DocInfoCmd(&function_doc_array[i]);
  
!           if (InfoFunction(cmd) != (VFunction *) info_do_lowercase_version
                && !where_is_internal (info_keymap, cmd)
                && !where_is_internal (echo_area_keymap, cmd))
***************
*** 336,346 ****
                if (!printed_one_mx)
                  {
!                   printf_to_message_buffer ("---------------------\n\n");
                    if (exec_keys && exec_keys[0])
                        printf_to_message_buffer
!                         (_("The following commands can only be invoked via 
%s:\n\n"), exec_keys);
                    else
                        printf_to_message_buffer
!                         (_("The following commands cannot be invoked at 
all:\n\n"));
                    printed_one_mx = 1;
                  }
--- 341,354 ----
                if (!printed_one_mx)
                  {
!                   printf_to_message_buffer ("---------------------\n\n",
!                       NULL, NULL, NULL);
                    if (exec_keys && exec_keys[0])
                        printf_to_message_buffer
!                         ((char *) _("The following commands can only be 
invoked via %s:\n\n"),
!                          exec_keys, NULL, NULL);
                    else
                        printf_to_message_buffer
!                         ((char *) _("The following commands cannot be invoked 
at all:\n\n"),
!                          NULL, NULL, NULL);
                    printed_one_mx = 1;
                  }
***************
*** 351,356 ****
                   function_doc_array[i].func_name,
                   replace_in_documentation (strlen (function_doc_array[i].doc)
!                                            ? _(function_doc_array[i].doc)
!                                            : "")
                  );
  
--- 359,363 ----
                   function_doc_array[i].func_name,
                   replace_in_documentation (strlen (function_doc_array[i].doc)
!                    ? (char *) _(function_doc_array[i].doc) : "", 0)
                  );
  
***************
*** 359,363 ****
  
        if (printed_one_mx)
!         printf_to_message_buffer ("\n");
  
        maybe_free (exec_keys);
--- 366,370 ----
  
        if (printed_one_mx)
!         printf_to_message_buffer ("\n", NULL, NULL, NULL);
  
        maybe_free (exec_keys);
***************
*** 366,370 ****
        printf_to_message_buffer
          ("%s", replace_in_documentation
!          (_("--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n")));
        node = message_buffer_to_node ();
        internal_info_help_node_contents = node->contents;
--- 373,378 ----
        printf_to_message_buffer
          ("%s", replace_in_documentation
!          ((char *) _("--- Use `\\[history-node]' or `\\[kill-node]' to exit 
---\n"), 0),
!          NULL, NULL);
        node = message_buffer_to_node ();
        internal_info_help_node_contents = node->contents;
***************
*** 405,409 ****
  
  static WINDOW *
! info_find_or_create_help_window ()
  {
    int help_is_only_window_p;
--- 413,417 ----
  
  static WINDOW *
! info_find_or_create_help_window (void)
  {
    int help_is_only_window_p;
***************
*** 439,445 ****
       to quit help), true if help will be one of several visible windows
       (so CTRL-x 0 must be used to quit help).  */
!   help_is_only_window_p
!      = ((help_window && !windows->next)
!         || !help_window && eligible->height < HELP_SPLIT_SIZE);
    create_internal_info_help_node (help_is_only_window_p);
  
--- 447,452 ----
       to quit help), true if help will be one of several visible windows
       (so CTRL-x 0 must be used to quit help).  */
!   help_is_only_window_p = ((help_window && !windows->next)
!         || (!help_window && eligible->height < HELP_SPLIT_SIZE));
    create_internal_info_help_node (help_is_only_window_p);
  
***************
*** 488,492 ****
    else
      {
!       info_error (msg_cant_make_help);
      }
  }
--- 495,499 ----
    else
      {
!       info_error ((char *) msg_cant_make_help, NULL, NULL);
      }
  }
***************
*** 530,536 ****
      {
        if (info_recent_file_error)
!         info_error (info_recent_file_error);
        else
!         info_error (msg_cant_file_node, "Info", nodename);
      }
    else
--- 537,543 ----
      {
        if (info_recent_file_error)
!         info_error (info_recent_file_error, NULL, NULL);
        else
!         info_error ((char *) msg_cant_file_node, "Info", nodename);
      }
    else
***************
*** 560,565 ****
  /* Return the documentation associated with the Info command FUNCTION. */
  char *
! function_documentation (cmd)
!      InfoCommand *cmd;
  {
    char *doc;
--- 567,571 ----
  /* Return the documentation associated with the Info command FUNCTION. */
  char *
! function_documentation (InfoCommand *cmd)
  {
    char *doc;
***************
*** 581,585 ****
  #endif /* !INFOKEY */
  
!   return replace_in_documentation ((strlen (doc) == 0) ? doc : _(doc));
  }
  
--- 587,591 ----
  #endif /* !INFOKEY */
  
!   return replace_in_documentation ((strlen (doc) == 0) ? doc : (char *) 
_(doc), 0);
  }
  
***************
*** 588,593 ****
     Info command FUNCTION. */
  char *
! function_name (cmd)
!      InfoCommand *cmd;
  {
  #if defined (INFOKEY)
--- 594,598 ----
     Info command FUNCTION. */
  char *
! function_name (InfoCommand *cmd)
  {
  #if defined (INFOKEY)
***************
*** 610,615 ****
  /* Return a pointer to the info command for function NAME. */
  InfoCommand *
! named_function (name)
!      char *name;
  {
    register int i;
--- 615,619 ----
  /* Return a pointer to the info command for function NAME. */
  InfoCommand *
! named_function (char *name)
  {
    register int i;
***************
*** 625,631 ****
  /* Return the documentation associated with KEY in MAP. */
  char *
! key_documentation (key, map)
!      char key;
!      Keymap map;
  {
    InfoCommand *function = map[key].function;
--- 629,633 ----
  /* Return the documentation associated with KEY in MAP. */
  char *
! key_documentation (char key, Keymap map)
  {
    InfoCommand *function = map[key].function;
***************
*** 649,653 ****
    for (;;)
      {
!       message_in_echo_area (_("Describe key: %s"), pretty_keyseq (keys));
        keystroke = info_get_input_char ();
        unmessage_in_echo_area ();
--- 651,656 ----
    for (;;)
      {
!       message_in_echo_area ((char *) _("Describe key: %s"),
!           pretty_keyseq (keys), NULL);
        keystroke = info_get_input_char ();
        unmessage_in_echo_area ();
***************
*** 675,679 ****
        if (map[keystroke].function == (InfoCommand *)NULL)
          {
!           message_in_echo_area (_("%s is undefined."), pretty_keyseq (keys));
            return;
          }
--- 678,683 ----
        if (map[keystroke].function == (InfoCommand *)NULL)
          {
!           message_in_echo_area ((char *) _("%s is undefined."),
!               pretty_keyseq (keys), NULL);
            return;
          }
***************
*** 694,698 ****
               confusing to see a message "Home (do-lowercase-version)"
               or some such when Home is unbound.  */
!           if (InfoFunction(map[keystroke].function) == 
info_do_lowercase_version)
              {
                unsigned char lowerkey = Meta_p(keystroke)
--- 698,703 ----
               confusing to see a message "Home (do-lowercase-version)"
               or some such when Home is unbound.  */
!           if (InfoFunction(map[keystroke].function)
!               == (VFunction *) info_do_lowercase_version)
              {
                unsigned char lowerkey = Meta_p(keystroke)
***************
*** 702,707 ****
                if (map[lowerkey].function == (InfoCommand *)NULL)
                  {
!                   message_in_echo_area (_("%s is undefined."),
!                                         pretty_keyseq (keys));
                    return;
                  }
--- 707,712 ----
                if (map[lowerkey].function == (InfoCommand *)NULL)
                  {
!                   message_in_echo_area ((char *) _("%s is undefined."),
!                                         pretty_keyseq (keys), NULL);
                    return;
                  }
***************
*** 726,730 ****
  #endif /* !NAMED_FUNCTIONS */
  
!           window_message_in_echo_area ("%s", message);
            free (message);
            break;
--- 731,735 ----
  #endif /* !NAMED_FUNCTIONS */
  
!           window_message_in_echo_area ("%s", message, NULL);
            free (message);
            break;
***************
*** 735,740 ****
  /* Return the pretty printable name of a single character. */
  char *
! pretty_keyname (key)
!      unsigned char key;
  {
    static char rep_buffer[30];
--- 740,744 ----
  /* Return the pretty printable name of a single character. */
  char *
! pretty_keyname (unsigned char key)
  {
    static char rep_buffer[30];
***************
*** 786,794 ****
  /* Return the pretty printable string which represents KEYSEQ. */
  
! static void pretty_keyseq_internal ();
  
  char *
! pretty_keyseq (keyseq)
!      char *keyseq;
  {
    static char keyseq_rep[200];
--- 790,797 ----
  /* Return the pretty printable string which represents KEYSEQ. */
  
! static void pretty_keyseq_internal (char *keyseq, char *rep);
  
  char *
! pretty_keyseq (char *keyseq)
  {
    static char keyseq_rep[200];
***************
*** 801,806 ****
  
  static void
! pretty_keyseq_internal (keyseq, rep)
!      char *keyseq, *rep;
  {
    if (term_kP && strncmp(keyseq, term_kP, strlen(term_kP)) == 0)
--- 804,808 ----
  
  static void
! pretty_keyseq_internal (char *keyseq, char *rep)
  {
    if (term_kP && strncmp(keyseq, term_kP, strlen(term_kP)) == 0)
***************
*** 870,875 ****
  /* Return a pointer to the last character in s that is found in f. */
  static char *
! strrpbrk (s, f)
!      const char *s, *f;
  {
    register const char *e = s + strlen(s);
--- 872,876 ----
  /* Return a pointer to the last character in s that is found in f. */
  static char *
! strrpbrk (const char *s, const char *f)
  {
    register const char *e = s + strlen(s);
***************
*** 887,893 ****
  /* Replace the names of functions with the key that invokes them. */
  char *
! replace_in_documentation (string, help_is_only_window_p)
!      char *string;
!      int help_is_only_window_p;
  {
    unsigned reslen = strlen (string);
--- 888,892 ----
  /* Replace the names of functions with the key that invokes them. */
  char *
! replace_in_documentation (char *string, int help_is_only_window_p)
  {
    unsigned reslen = strlen (string);
***************
*** 1059,1065 ****
  
  char *
! where_is (map, cmd)
!      Keymap map;
!      InfoCommand *cmd;
  {
    char *rep;
--- 1058,1062 ----
  
  char *
! where_is (Keymap map, InfoCommand *cmd)
  {
    char *rep;
***************
*** 1094,1100 ****
     as found in MAP, or NULL. */
  static char *
! where_is_internal (map, cmd)
!      Keymap map;
!      InfoCommand *cmd;
  {
  #if defined(INFOKEY)
--- 1091,1095 ----
     as found in MAP, or NULL. */
  static char *
! where_is_internal (Keymap map, InfoCommand *cmd)
  {
  #if defined(INFOKEY)
***************
*** 1155,1160 ****
  }
  
- extern char *read_function_name ();
- 
  DECLARE_INFO_COMMAND (info_where_is,
     _("Show what to type to execute a given command"))
--- 1150,1153 ----
***************
*** 1162,1166 ****
    char *command_name;
  
!   command_name = read_function_name (_("Where is command: "), window);
  
    if (!command_name)
--- 1155,1159 ----
    char *command_name;
  
!   command_name = read_function_name ((char *) _("Where is command: "), 
window);
  
    if (!command_name)
***************
*** 1184,1188 ****
            if (!location || !location[0])
              {
!               info_error (_("`%s' is not on any keys"), command_name);
              }
            else
--- 1177,1182 ----
            if (!location || !location[0])
              {
!               info_error ((char *) _("`%s' is not on any keys"),
!                   command_name, NULL);
              }
            else
***************
*** 1190,1201 ****
                if (strstr (location, function_name (command)))
                  window_message_in_echo_area
!                   (_("%s can only be invoked via %s."), command_name, 
location);
                else
                  window_message_in_echo_area
!                   (_("%s can be invoked via %s."), command_name, location);
              }
          }
        else
!         info_error (_("There is no function named `%s'"), command_name);
      }
  
--- 1184,1198 ----
                if (strstr (location, function_name (command)))
                  window_message_in_echo_area
!                   ((char *) _("%s can only be invoked via %s."),
!                    command_name, location);
                else
                  window_message_in_echo_area
!                   ((char *) _("%s can be invoked via %s."),
!                    command_name, location);
              }
          }
        else
!         info_error ((char *) _("There is no function named `%s'"),
!             command_name, NULL);
      }
  

Index: infokey.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/infokey.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** infokey.c   6 Dec 2003 01:32:48 -0000       1.1.1.1
--- infokey.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 70,76 ****
  
  /* Some "forward" declarations. */
! static char *mkpath ();
! static int compile (), write_infokey_file ();
! static void syntax_error (), error_message (), suggest_help (), short_help ();
  
  
--- 70,83 ----
  
  /* Some "forward" declarations. */
! static char *mkpath (const char *dir, const char *file);
! static int compile (FILE *fp, const char *filename, struct sect *sections);
! static int write_infokey_file (FILE *fp, struct sect *sections);
! static void syntax_error (const char *filename,
!     unsigned int linenum, const char *fmt,
!     const void *a1, const void *a2, const void *a3, const void *a4);
! static void error_message (int error_code, const char *fmt,
!     const void *a1, const void *a2, const void *a3, const void *a4);
! static void suggest_help (void);
! static void short_help (void);
  
  
***************
*** 82,88 ****
  
  int
! main (argc, argv)
!      int argc;
!      char **argv;
  {
    int getopt_long_index;      /* Index returned by getopt_long (). */
--- 89,93 ----
  
  int
! main (int argc, char **argv)
  {
    int getopt_long_index;      /* Index returned by getopt_long (). */
***************
*** 93,99 ****
--- 98,106 ----
  #endif
  
+ #ifdef ENABLE_NLS
    /* Set the text message domain.  */
    bindtextdomain (PACKAGE, LOCALEDIR);
    textdomain (PACKAGE);
+ #endif
  
    while (1)
***************
*** 161,165 ****
    else if (optind != argc)
      {
!       error_message (0, _("incorrect number of arguments"));
        suggest_help ();
        xexit (1);
--- 168,173 ----
    else if (optind != argc)
      {
!       error_message (0, _("incorrect number of arguments"),
!           NULL, NULL, NULL, NULL);
        suggest_help ();
        xexit (1);
***************
*** 191,195 ****
      if (!inf)
        {
!       error_message (errno, _("cannot open input file `%s'"), input_filename);
        xexit (1);
        }
--- 199,204 ----
      if (!inf)
        {
!       error_message (errno, _("cannot open input file `%s'"),
!             input_filename, NULL, NULL, NULL);
        xexit (1);
        }
***************
*** 204,208 ****
        if (!outf)
          {
!           error_message (errno, _("cannot create output file `%s'"), 
output_filename);
            xexit (1);
          }
--- 213,218 ----
        if (!outf)
          {
!           error_message (errno, _("cannot create output file `%s'"),
!                 output_filename, NULL, NULL, NULL);
            xexit (1);
          }
***************
*** 214,223 ****
        if (!write_infokey_file (outf, sections))
          {
!           error_message (errno, _("error writing to `%s'"), output_filename);
            write_error = 1;
          }
        if (fclose (outf) == EOF)
          {
!           error_message (errno, _("error closing output file `%s'"), 
output_filename);
            write_error = 1;
          }
--- 224,235 ----
        if (!write_infokey_file (outf, sections))
          {
!           error_message (errno, _("error writing to `%s'"),
!                 output_filename, NULL, NULL, NULL);
            write_error = 1;
          }
        if (fclose (outf) == EOF)
          {
!           error_message (errno, _("error closing output file `%s'"),
!                 output_filename, NULL, NULL, NULL);
            write_error = 1;
          }
***************
*** 237,243 ****
  
  static char *
! mkpath (dir, file)
!      const char *dir;
!      const char *file;
  {
    char *p;
--- 249,253 ----
  
  static char *
! mkpath (const char *dir, const char *file)
  {
    char *p;
***************
*** 366,370 ****
   */
  
! static int add_to_section (), lookup_action ();
  
  /* Compile the input file into its various sections.  Return true if no
--- 376,381 ----
   */
  
! static int add_to_section (struct sect *s, const char *str, unsigned int len);
! static int lookup_action (const char *actname);
  
  /* Compile the input file into its various sections.  Return true if no
***************
*** 372,384 ****
   */
  static int
! compile (fp, filename, sections)
!      FILE *fp;
!      const char *filename;
!      struct sect sections[];
  {
    int error = 0;
    char rescan = 0;
    unsigned int lnum = 0;
!   int c;
  
    /* This parser is a true state machine, with no sneaky fetching
--- 383,392 ----
   */
  static int
! compile (FILE *fp, const char *filename, struct sect *sections)
  {
    int error = 0;
    char rescan = 0;
    unsigned int lnum = 0;
!   int c = 0;
  
    /* This parser is a true state machine, with no sneaky fetching
***************
*** 412,418 ****
        special_key
      }
!   seqstate;                   /* used if state == get_keyseq */
    char meta = 0;
!   char ocnt;                  /* used if state == get_keyseq && seqstate == 
octal */
  
    /* Data is accumulated in the following variables.  The code
--- 420,426 ----
        special_key
      }
!   seqstate;           /* used if state == get_keyseq */
    char meta = 0;
!   char ocnt = 0;      /* used if state == get_keyseq && seqstate == octal */
  
    /* Data is accumulated in the following variables.  The code
***************
*** 422,436 ****
       lengths are not hard-coded anywhere else, so increasing them
       here will not break anything.  */
!   char oval;
    char comment[10];
!   unsigned int clen;
    char seq[20];
!   unsigned int slen;
    char act[80];
!   unsigned int alen;
    char varn[80];
!   unsigned int varlen;
    char val[80];
!   unsigned int vallen;
  
  #define       To_seq(c) \
--- 430,444 ----
       lengths are not hard-coded anywhere else, so increasing them
       here will not break anything.  */
!   char oval = 0;
    char comment[10];
!   unsigned int clen = 0;
    char seq[20];
!   unsigned int slen = 0;
    char act[80];
!   unsigned int alen = 0;
    char varn[80];
!   unsigned int varlen = 0;
    char val[80];
!   unsigned int vallen = 0;
  
  #define       To_seq(c) \
***************
*** 440,444 ****
                    else \
                      { \
!                       syntax_error(filename, lnum, _("key sequence too 
long")); \
                        error = 1; \
                      } \
--- 448,453 ----
                    else \
                      { \
!                       syntax_error(filename, lnum, _("key sequence too 
long"), \
!                             NULL, NULL, NULL, NULL); \
                        error = 1; \
                      } \
***************
*** 518,522 ****
                  if (slen == 0)
                    {
!                     syntax_error (filename, lnum, _("missing key sequence"));
                      error = 1;
                    }
--- 527,532 ----
                  if (slen == 0)
                    {
!                     syntax_error (filename, lnum, _("missing key sequence"),
!                           NULL, NULL, NULL, NULL);
                      error = 1;
                    }
***************
*** 597,601 ****
                  else
                    {
!                     syntax_error (filename, lnum, _("NUL character (\\000) 
not permitted"));
                      error = 1;
                    }
--- 607,613 ----
                  else
                    {
!                     syntax_error (filename, lnum,
!                           _("NUL character (\\000) not permitted"),
!                           NULL, NULL, NULL, NULL);
                      error = 1;
                    }
***************
*** 626,630 ****
              else
                {
!                 syntax_error (filename, lnum, _("NUL character (^%c) not 
permitted"), c);
                  error = 1;
                }
--- 638,644 ----
              else
                {
!                 syntax_error (filename, lnum,
!                       (char *) _("NUL character (^%c) not permitted"),
!                       c, NULL, NULL, NULL);
                  error = 1;
                }
***************
*** 649,653 ****
              if (alen == 0)
                {
!                 syntax_error (filename, lnum, _("missing action name"), c);
                  error = 1;
                }
--- 663,668 ----
              if (alen == 0)
                {
!                 syntax_error (filename, lnum, (char *) _("missing action 
name"),
!                       c, NULL, NULL, NULL);
                  error = 1;
                }
***************
*** 664,668 ****
                            && add_to_section (&sections[section], &av, 1)))
                        {
!                         syntax_error (filename, lnum, _("section too long"));
                          error = 1;
                        }
--- 679,684 ----
                            && add_to_section (&sections[section], &av, 1)))
                        {
!                         syntax_error (filename, lnum, _("section too long"),
!                               NULL, NULL, NULL, NULL);
                          error = 1;
                        }
***************
*** 670,674 ****
                  else
                    {
!                     syntax_error (filename, lnum, _("unknown action `%s'"), 
act);
                      error = 1;
                    }
--- 686,691 ----
                  else
                    {
!                     syntax_error (filename, lnum, _("unknown action `%s'"),
!                           act, NULL, NULL, NULL);
                      error = 1;
                    }
***************
*** 679,683 ****
          else
            {
!             syntax_error (filename, lnum, _("action name too long"));
              error = 1;
            }
--- 696,701 ----
          else
            {
!             syntax_error (filename, lnum, _("action name too long"),
!                   NULL, NULL, NULL, NULL);
              error = 1;
            }
***************
*** 691,695 ****
          else if (!isspace (c))
            {
!             syntax_error (filename, lnum, _("extra characters following 
action `%s'"), act);
              error = 1;
            }
--- 709,715 ----
          else if (!isspace (c))
            {
!             syntax_error (filename, lnum,
!                   _("extra characters following action `%s'"),
!                   act, NULL, NULL, NULL);
              error = 1;
            }
***************
*** 701,705 ****
              if (varlen == 0)
                {
!                 syntax_error (filename, lnum, _("missing variable name"));
                  error = 1;
                }
--- 721,726 ----
              if (varlen == 0)
                {
!                 syntax_error (filename, lnum, _("missing variable name"),
!                       NULL, NULL, NULL, NULL);
                  error = 1;
                }
***************
*** 709,713 ****
          else if (c == '\n' || isspace (c))
            {
!             syntax_error (filename, lnum, _("missing `=' immediately after 
variable name"));
              error = 1;
            }
--- 730,736 ----
          else if (c == '\n' || isspace (c))
            {
!             syntax_error (filename, lnum,
!                   _("missing `=' immediately after variable name"),
!                   NULL, NULL, NULL, NULL);
              error = 1;
            }
***************
*** 716,720 ****
          else
            {
!             syntax_error (filename, lnum, _("variable name too long"));
              error = 1;
            }
--- 739,744 ----
          else
            {
!             syntax_error (filename, lnum, _("variable name too long"),
!                   NULL, NULL, NULL, NULL);
              error = 1;
            }
***************
*** 730,734 ****
                    && add_to_section (&sections[section], "", 1)))
                {
!                 syntax_error (filename, lnum, _("section too long"));
                  error = 1;
                }
--- 754,759 ----
                    && add_to_section (&sections[section], "", 1)))
                {
!                 syntax_error (filename, lnum, _("section too long"),
!                       NULL, NULL, NULL, NULL);
                  error = 1;
                }
***************
*** 738,745 ****
          else
            {
!             syntax_error (filename, lnum, _("value too long"));
              error = 1;
            }
          break;
        }
      }
--- 763,776 ----
          else
            {
!             syntax_error (filename, lnum, _("value too long"),
!                   NULL, NULL, NULL, NULL);
              error = 1;
            }
          break;
+ 
+         case get_equals:
+         case got_equals:
+         case got_varname:
+           break;
        }
      }
***************
*** 754,765 ****
   */
  static int
! add_to_section (s, str, len)
!      struct sect *s;
!      const char *str;
!      unsigned int len;
  {
    if (s->cur + len > sizeof s->data)
      return 0;
!   strncpy (s->data + s->cur, str, len);
    s->cur += len;
    return 1;
--- 785,793 ----
   */
  static int
! add_to_section (struct sect *s, const char *str, unsigned int len)
  {
    if (s->cur + len > sizeof s->data)
      return 0;
!   strncpy ((char *) s->data + s->cur, str, len);
    s->cur += len;
    return 1;
***************
*** 770,775 ****
   */
  static int
! lookup_action (actname)
!      const char *actname;
  {
    int i;
--- 798,802 ----
   */
  static int
! lookup_action (const char *actname)
  {
    int i;
***************
*** 788,794 ****
   */
  static int
! putint (i, fp)
!      int i;
!      FILE *fp;
  {
    return fputc (i % INFOKEY_RADIX, fp) != EOF
--- 815,819 ----
   */
  static int
! putint (int i, FILE *fp)
  {
    return fputc (i % INFOKEY_RADIX, fp) != EOF
***************
*** 800,807 ****
   */
  static int
! putsect (s, code, fp)
!      struct sect *s;
!      int code;
!      FILE *fp;
  {
    if (s->cur == 0)
--- 825,829 ----
   */
  static int
! putsect (struct sect *s, int code, FILE *fp)
  {
    if (s->cur == 0)
***************
*** 815,821 ****
   */
  static int
! write_infokey_file (fp, sections)
!      FILE *fp;
!      struct sect sections[];
  {
    /* Get rid of sections with no effect. */
--- 837,841 ----
   */
  static int
! write_infokey_file (FILE *fp, struct sect *sections)
  {
    /* Get rid of sections with no effect. */
***************
*** 849,856 ****
   */
  static void
! error_message (error_code, fmt, a1, a2, a3, a4)
!      int error_code;
!      const char *fmt;
!      const void *a1, *a2, *a3, *a4;
  {
    fprintf (stderr, "%s: ", program_name);
--- 869,874 ----
   */
  static void
! error_message (int error_code, const char *fmt,
!     const void *a1, const void *a2, const void *a3, const void *a4)
  {
    fprintf (stderr, "%s: ", program_name);
***************
*** 865,873 ****
   */
  static void
! syntax_error (filename, linenum, fmt, a1, a2, a3, a4)
!      const char *filename;
!      unsigned int linenum;
!      const char *fmt;
!      const void *a1, *a2, *a3, *a4;
  {
    fprintf (stderr, "%s: ", program_name);
--- 883,889 ----
   */
  static void
! syntax_error (const char *filename,
!     unsigned int linenum, const char *fmt,
!     const void *a1, const void *a2, const void *a3, const void *a4)
  {
    fprintf (stderr, "%s: ", program_name);
***************
*** 879,883 ****
  /* Produce a gentle rtfm. */
  static void
! suggest_help ()
  {
    fprintf (stderr, _("Try --help for more information.\n"));
--- 895,899 ----
  /* Produce a gentle rtfm. */
  static void
! suggest_help (void)
  {
    fprintf (stderr, _("Try --help for more information.\n"));
***************
*** 886,890 ****
  /* Produce a scaled down description of the available options to Info. */
  static void
! short_help ()
  {
    printf (_("\
--- 902,906 ----
  /* Produce a scaled down description of the available options to Info. */
  static void
! short_help (void)
  {
    printf (_("\

Index: infomap.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/infomap.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** infomap.c   6 Dec 2003 01:32:49 -0000       1.1.1.1
--- infomap.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 31,38 ****
  #endif /* INFOKEY */
  
  /* Return a new keymap which has all the uppercase letters mapped to run
     the function info_do_lowercase_version (). */
  Keymap
! keymap_make_keymap ()
  {
    int i;
--- 31,41 ----
  #endif /* INFOKEY */
  
+ static int keymap_bind_keyseq (Keymap map, const char *keyseq,
+     KEYMAP_ENTRY *keyentry);
+ 
  /* Return a new keymap which has all the uppercase letters mapped to run
     the function info_do_lowercase_version (). */
  Keymap
! keymap_make_keymap (void)
  {
    int i;
***************
*** 62,69 ****
  #if defined(INFOKEY)
  static FUNCTION_KEYSEQ *
! find_function_keyseq (map, c, rootmap)
!   Keymap map;
!   int c;
!   Keymap rootmap;
  {
    FUNCTION_KEYSEQ *k;
--- 65,69 ----
  #if defined(INFOKEY)
  static FUNCTION_KEYSEQ *
! find_function_keyseq (Keymap map, int c, Keymap rootmap)
  {
    FUNCTION_KEYSEQ *k;
***************
*** 79,83 ****
        if (k->map != rootmap)
        continue;
!       for (p = k->keyseq; *p && m[*p].type == ISKMAP; p++)
        m = (Keymap)m[*p].function;
        if (*p != c || p[1])
--- 79,83 ----
        if (k->map != rootmap)
        continue;
!       for (p = (unsigned char *) k->keyseq; *p && m[*p].type == ISKMAP; p++)
        m = (Keymap)m[*p].function;
        if (*p != c || p[1])
***************
*** 91,98 ****
  
  static void
! add_function_keyseq (function, keyseq, rootmap)
!   InfoCommand *function;
!   const unsigned char *keyseq;
!   Keymap rootmap;
  {
    FUNCTION_KEYSEQ *ks;
--- 91,96 ----
  
  static void
! add_function_keyseq (InfoCommand *function,
!     const char *keyseq, Keymap rootmap)
  {
    FUNCTION_KEYSEQ *ks;
***************
*** 110,117 ****
  
  static void
! remove_function_keyseq (function, keyseq, rootmap)
!   InfoCommand *function;
!   const unsigned char *keyseq;
!   Keymap rootmap;
  {
  
--- 108,113 ----
  
  static void
! remove_function_keyseq (InfoCommand *function,
!     const char *keyseq, Keymap rootmap)
  {
  
***************
*** 136,143 ****
  /* Return a new keymap which is a copy of MAP. */
  Keymap
! keymap_copy_keymap (map, rootmap, newroot)
!   Keymap map;
!   Keymap rootmap;
!   Keymap newroot;
  {
    int i;
--- 132,136 ----
  /* Return a new keymap which is a copy of MAP. */
  Keymap
! keymap_copy_keymap (Keymap map, Keymap rootmap, Keymap newroot)
  {
    int i;
***************
*** 159,163 ****
          keymap[i].function = map[i].function;
  #if defined(INFOKEY)
!         ks = find_function_keyseq (map, i, rootmap, NULL);
          if (ks)
            add_function_keyseq(map[i].function, ks->keyseq, newroot);
--- 152,156 ----
          keymap[i].function = map[i].function;
  #if defined(INFOKEY)
!         ks = find_function_keyseq (map, i, rootmap);
          if (ks)
            add_function_keyseq(map[i].function, ks->keyseq, newroot);
***************
*** 165,170 ****
          break;
        case ISKMAP:
!         keymap[i].function = (InfoCommand *)keymap_copy_keymap (
!             (Keymap)map[i].function, rootmap);
          break;
        }
--- 158,163 ----
          break;
        case ISKMAP:
!         keymap[i].function = (InfoCommand *)keymap_copy_keymap
!             ((Keymap)map[i].function, rootmap, NULL);
          break;
        }
***************
*** 175,181 ****
  /* Free the keymap and its descendants. */
  void
! keymap_discard_keymap (map, rootmap)
!   Keymap map;
!   Keymap rootmap;
  {
    int i;
--- 168,172 ----
  /* Free the keymap and its descendants. */
  void
! keymap_discard_keymap (Keymap map, Keymap rootmap)
  {
    int i;
***************
*** 211,222 ****
  
  /* Conditionally bind key sequence. */
! int
! keymap_bind_keyseq (map, keyseq, keyentry)
!      Keymap map;
!      const unsigned char *keyseq;
!      KEYMAP_ENTRY *keyentry;
  {
    Keymap m = map;
!   const unsigned char *s = keyseq;
    int c;
  
--- 202,211 ----
  
  /* Conditionally bind key sequence. */
! static int
! keymap_bind_keyseq (Keymap map,
!     const char *keyseq, KEYMAP_ENTRY *keyentry)
  {
    Keymap m = map;
!   const unsigned char *s = (unsigned char *) keyseq;
    int c;
  
***************
*** 1433,1438 ****
   */
  static unsigned long
! filesize(f)
!       int f;
  {
        long pos = lseek(f, 0L, SEEK_CUR);
--- 1422,1426 ----
   */
  static unsigned long
! filesize(int f)
  {
        long pos = lseek(f, 0L, SEEK_CUR);
***************
*** 1450,1455 ****
   */
  static int
! getint(sp)
!       unsigned char **sp;
  {
        int n;
--- 1438,1442 ----
   */
  static int
! getint(unsigned char **sp)
  {
        int n;
***************
*** 1466,1470 ****
     true if ok, false if not.  */
  static int
! fetch_user_maps()
  {
        char *filename = NULL;
--- 1453,1457 ----
     true if ok, false if not.  */
  static int
! fetch_user_maps(void)
  {
        char *filename = NULL;
***************
*** 1496,1500 ****
                if (filename && errno != ENOENT)
                {
!                       info_error(filesys_error_string(filename, errno));
                        free(filename);
                }
--- 1483,1488 ----
                if (filename && errno != ENOENT)
                {
!                       info_error(filesys_error_string(filename, errno),
!                             NULL, NULL);
                        free(filename);
                }
***************
*** 1510,1518 ****
                   more than 100 KB is a problem). */
                if (len < INFOKEY_NMAGIC + 2)
!                       info_error(_("Ignoring invalid infokey file `%s' - too 
small"),
!                                  filename);
                else
!                       info_error(_("Ignoring invalid infokey file `%s' - too 
big"),
!                                  filename);
                close(f);
                free(filename);
--- 1498,1506 ----
                   more than 100 KB is a problem). */
                if (len < INFOKEY_NMAGIC + 2)
!                       info_error((char *) _("Ignoring invalid infokey file 
`%s' - too small"),
!                                  filename, NULL);
                else
!                       info_error((char *) _("Ignoring invalid infokey file 
`%s' - too big"),
!                                  filename, NULL);
                close(f);
                free(filename);
***************
*** 1524,1530 ****
        nread = read(f, buf, (unsigned int) len);
        close(f);
!       if (nread != len)
        {
!               info_error(_("Error reading infokey file `%s' - short read"), 
filename);
                free(buf);
                free(filename);
--- 1512,1519 ----
        nread = read(f, buf, (unsigned int) len);
        close(f);
!       if ((unsigned int) nread != len)
        {
!               info_error((char *) _("Error reading infokey file `%s' - short 
read"),
!                     filename, NULL);
                free(buf);
                free(filename);
***************
*** 1544,1554 ****
        )
        {
!               info_error(_("Invalid infokey file `%s' (bad magic numbers) -- 
run infokey to update it"), filename);
                free(filename);
                return 0;
        }
!       if (len < INFOKEY_NMAGIC + strlen(VERSION) + 1 || strcmp(VERSION, buf + 
4) != 0)
        {
!               info_error(_("Your infokey file `%s' is out of date -- run 
infokey to update it"), filename);
                free(filename);
                return 0;
--- 1533,1547 ----
        )
        {
!               info_error((char *) _("Invalid infokey file `%s' (bad magic 
numbers) -- run infokey to update it"),
!                     filename, NULL);
                free(filename);
                return 0;
        }
!       if (len < INFOKEY_NMAGIC + strlen(VERSION) + 1
!             || strcmp(VERSION, (char *) (buf + 4)) != 0)
        {
!               info_error
!                   ((char *) _("Your infokey file `%s' is out of date -- run 
infokey to update it"),
!                     filename, NULL);
                free(filename);
                return 0;
***************
*** 1556,1567 ****
  
        /* Extract the pieces.  */
!       for (p = buf + 4 + strlen(VERSION) + 1; p - buf < len - 4; p += n)
        {
                int s = *p++;
  
                n = getint(&p);
!               if (n < 0 || n > len - 4 - (p - buf))
                {
!                       info_error(_("Invalid infokey file `%s' (bad section 
length) -- run infokey to update it"), filename);
                        free(filename);
                        return 0;
--- 1549,1563 ----
  
        /* Extract the pieces.  */
!       for (p = buf + 4 + strlen(VERSION) + 1;
!              (unsigned int) (p - buf) < len - 4;
!              p += n)
        {
                int s = *p++;
  
                n = getint(&p);
!               if (n < 0 || (unsigned int) n > len - 4 - (p - buf))
                {
!                       info_error((char *) _("Invalid infokey file `%s' (bad 
section length) -- run infokey to update it"),
!                             filename, NULL);
                        free(filename);
                        return 0;
***************
*** 1583,1587 ****
                        break;
                default:
!                       info_error(_("Invalid infokey file `%s' (bad section 
code) -- run infokey to update it"), filename);
                        free(filename);
                        return 0;
--- 1579,1584 ----
                        break;
                default:
!                       info_error((char *) _("Invalid infokey file `%s' (bad 
section code) -- run infokey to update it"),
!                             filename, NULL);
                        free(filename);
                        return 0;
***************
*** 1598,1613 ****
   */
  static int
! decode_keys(src, slen, dst, dlen)
!       unsigned char *src;
!       unsigned int slen;
!       unsigned char *dst;
!       unsigned int dlen;
  {
        unsigned char *s = src;
        unsigned char *d = dst;
  
! #define To_dst(c) do { if (d - dst < dlen) *d++ = (c); } while (0)
  
!       while (s - src < slen)
        {
                unsigned char c = ISMETA(*s) ? UNMETA(*s) : *s;
--- 1595,1609 ----
   */
  static int
! decode_keys(unsigned char *src, unsigned int slen,
!     unsigned char *dst, unsigned int dlen)
  {
        unsigned char *s = src;
        unsigned char *d = dst;
  
! #define To_dst(c) do { \
!   if ((unsigned int) (d - dst) < dlen) *d++ = (c); \
! } while (0)
  
!       while ((unsigned int) (s - src) < slen)
        {
                unsigned char c = ISMETA(*s) ? UNMETA(*s) : *s;
***************
*** 1615,1622 ****
                if (c == SK_ESCAPE)
                {
!                       unsigned char *t;
                        static char lit[] = { SK_ESCAPE, NUL };
  
!                       switch (s + 1 - src < slen ? s[1] : '\0')
                        {
                        case SK_RIGHT_ARROW:    t = term_kr; break;
--- 1611,1618 ----
                if (c == SK_ESCAPE)
                {
!                       char *t;
                        static char lit[] = { SK_ESCAPE, NUL };
  
!                       switch ((unsigned int) (s + 1 - src) < slen ? s[1] : 
'\0')
                        {
                        case SK_RIGHT_ARROW:    t = term_kr; break;
***************
*** 1659,1676 ****
     the default bindings are to be suppressed.  */
  static int
! section_to_keymaps(map, table, len)
!       Keymap map;
!       unsigned char *table;
!       unsigned int len;
  {
        int stop;
        unsigned char *p;
!       unsigned char *seq;
!       unsigned int seqlen;
        enum { getseq, gotseq, getaction } state = getseq;
  
        stop = len > 0 ? table[0] : 0;
  
!       for (p = table + 1; p - table < len; p++)
        {
                switch (state)
--- 1655,1669 ----
     the default bindings are to be suppressed.  */
  static int
! section_to_keymaps(Keymap map, unsigned char *table, unsigned int len)
  {
        int stop;
        unsigned char *p;
!       unsigned char *seq = NULL;
!       unsigned int seqlen = 0;
        enum { getseq, gotseq, getaction } state = getseq;
  
        stop = len > 0 ? table[0] : 0;
  
!       for (p = table + 1; (unsigned int) (p - table) < len; p++)
        {
                switch (state)
***************
*** 1713,1717 ****
                                          ? &function_doc_array[action]
                                          : NULL;
!                                       keymap_bind_keyseq(map, keyseq, &ke);
                                }
                        }
--- 1706,1711 ----
                                          ? &function_doc_array[action]
                                          : NULL;
!                                       keymap_bind_keyseq(map,
!                                             (const char *) keyseq, &ke);
                                }
                        }
***************
*** 1720,1724 ****
        }
        if (state != getseq)
!               info_error(_("Bad data in infokey file -- some key bindings 
ignored"));
        return !stop;
  }
--- 1714,1719 ----
        }
        if (state != getseq)
!               info_error((char *) _("Bad data in infokey file -- some key 
bindings ignored"),
!                     NULL, NULL);
        return !stop;
  }
***************
*** 1727,1733 ****
   */
  static void
! section_to_vars(table, len)
!       unsigned char *table;
!       unsigned int len;
  {
        enum { getvar, gotvar, getval, gotval } state = getvar;
--- 1722,1726 ----
   */
  static void
! section_to_vars(unsigned char *table, unsigned int len)
  {
        enum { getvar, gotvar, getval, gotval } state = getvar;
***************
*** 1736,1740 ****
        unsigned char *p;
  
!       for (p = table; p - table < len; p++)
          {
            switch (state)
--- 1729,1733 ----
        unsigned char *p;
  
!       for (p = table; (unsigned int) (p - table) < len; p++)
          {
            switch (state)
***************
*** 1764,1768 ****
                if (!*p)
                  {
!                   set_variable_to_value(var, val);
                    state = getvar;
                  }
--- 1757,1761 ----
                if (!*p)
                  {
!                   set_variable_to_value((char *) var, (char *) val);
                    state = getvar;
                  }
***************
*** 1771,1779 ****
          }
        if (state != getvar)
!       info_error(_("Bad data in infokey file -- some var settings ignored"));
  }
  
  void
! initialize_info_keymaps ()
  {
    int i;
--- 1764,1773 ----
          }
        if (state != getvar)
!       info_error((char *) _("Bad data in infokey file -- some var settings 
ignored"),
!             NULL, NULL);
  }
  
  void
! initialize_info_keymaps (void)
  {
    int i;

Index: infomap.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/infomap.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** infomap.h   6 Dec 2003 01:32:50 -0000       1.1.1.1
--- infomap.h   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 68,81 ****
  /* Return a new keymap which has all the uppercase letters mapped to run
     the function info_do_lowercase_version (). */
! extern Keymap keymap_make_keymap ();
  
  /* Return a new keymap which is a copy of MAP. */
! extern Keymap keymap_copy_keymap ();
  
  /* Free MAP and it's descendents. */
! extern void keymap_discard_keymap ();
  
  /* Initialize the info keymaps. */
! extern void initialize_info_keymaps ();
  
  #endif /* not INFOMAP_H */
--- 68,82 ----
  /* Return a new keymap which has all the uppercase letters mapped to run
     the function info_do_lowercase_version (). */
! extern Keymap keymap_make_keymap (void);
  
  /* Return a new keymap which is a copy of MAP. */
! extern Keymap keymap_copy_keymap (Keymap map, Keymap rootmap,
!     Keymap newroot);
  
  /* Free MAP and it's descendents. */
! extern void keymap_discard_keymap (Keymap map, Keymap rootmap);
  
  /* Initialize the info keymaps. */
! extern void initialize_info_keymaps (void);
  
  #endif /* not INFOMAP_H */

Index: m-x.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/m-x.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** m-x.c       6 Dec 2003 01:32:50 -0000       1.1.1.1
--- m-x.c       13 Mar 2004 15:52:46 -0000      1.2
***************
*** 33,39 ****
     be read. */
  char *
! read_function_name (prompt, window)
!      char *prompt;
!      WINDOW *window;
  {
    register int i;
--- 33,37 ----
     be read. */
  char *
! read_function_name (char *prompt, WINDOW *window)
  {
    register int i;
***************
*** 72,76 ****
    char *line;
  
!   line = read_function_name (_("Describe command: "), window);
  
    if (!line)
--- 70,74 ----
    char *line;
  
!   line = read_function_name ((char *) _("Describe command: "), window);
  
    if (!line)
***************
*** 139,143 ****
        {
          free (line);
!         info_error (_("Cannot execute an `echo-area' command here."));
          return;
        }
--- 137,142 ----
        {
          free (line);
!         info_error ((char *) _("Cannot execute an `echo-area' command here."),
!             NULL, NULL);
          return;
        }

Index: makedoc.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/makedoc.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** makedoc.c   6 Dec 2003 01:32:52 -0000       1.1.1.1
--- makedoc.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 29,33 ****
  #include "infokey.h"
  
! static void fatal_file_error ();
  
  /* Name of the header file which receives the declarations of functions. */
--- 29,33 ----
  #include "infokey.h"
  
! static void fatal_file_error (char *filename);
  
  /* Name of the header file which receives the declarations of functions. */
***************
*** 106,119 ****
  #define DECLARATION_STRING "\nDECLARE_INFO_COMMAND"
  
! static void process_one_file ();
! static void maybe_dump_tags ();
! static FILE *must_fopen ();
! static void init_func_key ();
! static unsigned int next_func_key ();
  
  int
! main (argc, argv)
!      int argc;
!      char **argv;
  {
    register int i;
--- 106,118 ----
  #define DECLARATION_STRING "\nDECLARE_INFO_COMMAND"
  
! static void process_one_file (char *filename, FILE *doc_stream,
!     FILE *key_stream, FILE *funs_stream);
! static void maybe_dump_tags (FILE *stream);
! static FILE *must_fopen (char *filename, char *mode);
! static void init_func_key (unsigned int val);
! static unsigned int next_func_key (void);
  
  int
! main (int argc, char **argv)
  {
    register int i;
***************
*** 150,155 ****
  
    fprintf (funs_stream,
!            "/* %s -- Generated declarations for Info commands. */\n",
!            funs_filename);
  
    for (i = 0; doc_header[i]; i++)
--- 149,155 ----
  
    fprintf (funs_stream,
!       "/* %s -- Generated declarations for Info commands. */\n\n\
! #include \"info.h\"\n",
!       funs_filename);
  
    for (i = 0; doc_header[i]; i++)
***************
*** 222,226 ****
  #endif /* !INFOKEY */
  
!   fprintf (key_stream, "   (char *)0\n};\n");
    fprintf (funs_stream, "\n#define A_NCOMMANDS %u\n", next_func_key());
  
--- 222,226 ----
  #endif /* !INFOKEY */
  
!   fprintf (key_stream, "   { (char *)NULL, 0 }\n};\n");
    fprintf (funs_stream, "\n#define A_NCOMMANDS %u\n", next_func_key());
  
***************
*** 236,241 ****
  /* Dumping out the contents of an Emacs tags table. */
  static void
! maybe_dump_tags (stream)
!      FILE *stream;
  {
    register int i;
--- 236,240 ----
  /* Dumping out the contents of an Emacs tags table. */
  static void
! maybe_dump_tags (FILE *stream)
  {
    register int i;
***************
*** 285,290 ****
     found in source files. */
  static EMACS_TAG_BLOCK *
! make_emacs_tag_block (filename)
!      char *filename;
  {
    EMACS_TAG_BLOCK *block;
--- 284,288 ----
     found in source files. */
  static EMACS_TAG_BLOCK *
! make_emacs_tag_block (char *filename)
  {
    EMACS_TAG_BLOCK *block;
***************
*** 300,308 ****
  
  static void
! add_tag_to_block (block, name, line, char_offset)
!      EMACS_TAG_BLOCK *block;
!      char *name;
!      int line;
!      long char_offset;
  {
    EMACS_TAG *tag;
--- 298,303 ----
  
  static void
! add_tag_to_block (EMACS_TAG_BLOCK *block,
!     char *name, int line, long int char_offset)
  {
    EMACS_TAG *tag;
***************
*** 320,328 ****
     DOC_STREAM, KEY_STREAM, and FUNS_STREAM. */
  static void
! process_one_file (filename, doc_stream, key_stream, funs_stream)
!      char *filename;
!      FILE *doc_stream;
!      FILE *key_stream;
!      FILE *funs_stream;
  {
    int descriptor, decl_len;
--- 315,320 ----
     DOC_STREAM, KEY_STREAM, and FUNS_STREAM. */
  static void
! process_one_file (char *filename, FILE *doc_stream,
!     FILE *key_stream, FILE *funs_stream)
  {
    int descriptor, decl_len;
***************
*** 506,512 ****
  
  #if defined (NAMED_FUNCTIONS)
!       fprintf (doc_stream, "   { %s, \"%s\", (FUNCTION_KEYSEQ *)0, %s },\n", 
func, func_name, doc);
  #else /* !NAMED_FUNCTIONS */
!       fprintf (doc_stream, "   { %s, (FUNCTION_KEYSEQ *)0, %s },\n", func, 
doc);
  #endif /* !NAMED_FUNCTIONS */
  
--- 498,507 ----
  
  #if defined (NAMED_FUNCTIONS)
!       fprintf (doc_stream,
!           "   { (VFunction *)%s, \"%s\", (FUNCTION_KEYSEQ *)0, %s },\n",
!           func, func_name, doc);
  #else /* !NAMED_FUNCTIONS */
!       fprintf (doc_stream,
!           "   { (VFunction *) %s, (FUNCTION_KEYSEQ *)0, %s },\n", func, doc);
  #endif /* !NAMED_FUNCTIONS */
  
***************
*** 530,534 ****
        fprintf (funs_stream, "#define A_%s %u\n", func, next_func_key());
  #endif /* INFOKEY */
!       fprintf (funs_stream, "extern void %s ();\n", func);
        free (func);
        free (doc);
--- 525,531 ----
        fprintf (funs_stream, "#define A_%s %u\n", func, next_func_key());
  #endif /* INFOKEY */
!       fprintf (funs_stream,
!           "extern void %s (WINDOW *window, int count, unsigned char key);\n",
!           func);
        free (func);
        free (doc);
***************
*** 549,554 ****
  
  static void
! fatal_file_error (filename)
!      char *filename;
  {
    fprintf (stderr, _("Couldn't manipulate the file %s.\n"), filename);
--- 546,550 ----
  
  static void
! fatal_file_error (char *filename)
  {
    fprintf (stderr, _("Couldn't manipulate the file %s.\n"), filename);
***************
*** 557,562 ****
  
  static FILE *
! must_fopen (filename, mode)
!      char *filename, *mode;
  {
    FILE *stream;
--- 553,557 ----
  
  static FILE *
! must_fopen (char *filename, char *mode)
  {
    FILE *stream;
***************
*** 572,577 ****
  
  static void
! init_func_key(val)
!       unsigned int val;
  {
        func_key = val;
--- 567,571 ----
  
  static void
! init_func_key(unsigned int val)
  {
        func_key = val;
***************
*** 579,583 ****
  
  static unsigned int
! next_func_key()
  {
        return func_key++;
--- 573,577 ----
  
  static unsigned int
! next_func_key(void)
  {
        return func_key++;

Index: man.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/man.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** man.c       6 Dec 2003 01:32:53 -0000       1.1.1.1
--- man.c       13 Mar 2004 15:52:46 -0000      1.2
***************
*** 54,65 ****
  #endif
  
! static char *read_from_fd ();
! static void clean_manpage ();
! static NODE *manpage_node_of_file_buffer ();
! static char *get_manpage_contents ();
  
  NODE *
! make_manpage_node (pagename)
!      char *pagename;
  {
    return (info_get_node (MANPAGE_FILE_BUFFER_NAME, pagename));
--- 54,65 ----
  #endif
  
! static char *read_from_fd (int fd);
! static void clean_manpage (char *manpage);
! static NODE *manpage_node_of_file_buffer (FILE_BUFFER *file_buffer,
!     char *pagename);
! static char *get_manpage_contents (char *pagename);
  
  NODE *
! make_manpage_node (char *pagename)
  {
    return (info_get_node (MANPAGE_FILE_BUFFER_NAME, pagename));
***************
*** 67,73 ****
  
  NODE *
! get_manpage_node (file_buffer, pagename)
!      FILE_BUFFER *file_buffer;
!      char *pagename;
  {
    NODE *node;
--- 67,71 ----
  
  NODE *
! get_manpage_node (FILE_BUFFER *file_buffer, char *pagename)
  {
    NODE *node;
***************
*** 122,126 ****
                  for (in = 0; in < info_win->nodes_index; in++)
                    {
!                     NODE *node = info_win->nodes[in];
  
                      /* It really only suffices to see that node->filename
--- 120,124 ----
                  for (in = 0; in < info_win->nodes_index; in++)
                    {
!                     NODE *tmp_node = info_win->nodes[in];
  
                      /* It really only suffices to see that node->filename
***************
*** 128,142 ****
                         debugging this, would you blame me for being a bit
                         paranoid?  */
!                     if (node && node->filename && node->contents &&
!                         strcmp (node->filename,
!                                 MANPAGE_FILE_BUFFER_NAME) == 0 &&
!                         node->contents >= old_contents &&
!                         node->contents + node->nodelen <= old_contents_end)
                        {
                          info_win->nodes[in] =
                            manpage_node_of_file_buffer (file_buffer,
!                                                        node->nodename);
!                         free (node->nodename);
!                         free (node);
                        }
                    }
--- 126,142 ----
                         debugging this, would you blame me for being a bit
                         paranoid?  */
!                     if (tmp_node && tmp_node->filename
!                           && tmp_node->contents
!                           && strcmp (tmp_node->filename,
!                                 MANPAGE_FILE_BUFFER_NAME) == 0
!                           && tmp_node->contents >= old_contents
!                           && tmp_node->contents + tmp_node->nodelen
!                                 <= old_contents_end)
                        {
                          info_win->nodes[in] =
                            manpage_node_of_file_buffer (file_buffer,
!                                 tmp_node->nodename);
!                         free (tmp_node->nodename);
!                         free (tmp_node);
                        }
                    }
***************
*** 152,156 ****
  
  FILE_BUFFER *
! create_manpage_file_buffer ()
  {
    FILE_BUFFER *file_buffer = make_file_buffer ();
--- 152,156 ----
  
  FILE_BUFFER *
! create_manpage_file_buffer (void)
  {
    FILE_BUFFER *file_buffer = make_file_buffer ();
***************
*** 169,174 ****
     return a NULL pointer. */
  static char *
! executable_file_in_path (filename, path)
!      char *filename, *path;
  {
    struct stat finfo;
--- 169,173 ----
     return a NULL pointer. */
  static char *
! executable_file_in_path (char *filename, char *path)
  {
    struct stat finfo;
***************
*** 224,228 ****
  /* Return the full pathname of the system man page formatter. */
  static char *
! find_man_formatter ()
  {
    return (executable_file_in_path ("man", (char *)getenv ("PATH")));
--- 223,227 ----
  /* Return the full pathname of the system man page formatter. */
  static char *
! find_man_formatter (void)
  {
    return (executable_file_in_path ("man", (char *)getenv ("PATH")));
***************
*** 233,238 ****
  
  static void
! get_page_and_section (pagename)
!      char *pagename;
  {
    register int i;
--- 232,236 ----
  
  static void
! get_page_and_section (char *pagename)
  {
    register int i;
***************
*** 269,274 ****
  #if PIPE_USE_FORK
  static void
! reap_children (sig)
!      int sig;
  {
    wait (NULL);
--- 267,271 ----
  #if PIPE_USE_FORK
  static void
! reap_children (int sig)
  {
    wait (NULL);
***************
*** 277,287 ****
  
  static char *
! get_manpage_contents (pagename)
!      char *pagename;
  {
    static char *formatter_args[4] = { (char *)NULL };
    int pipes[2];
    pid_t child;
!   RETSIGTYPE (*sigsave) ();
    char *formatted_page = NULL;
    int arg_index = 1;
--- 274,283 ----
  
  static char *
! get_manpage_contents (char *pagename)
  {
    static char *formatter_args[4] = { (char *)NULL };
    int pipes[2];
    pid_t child;
!   RETSIGTYPE (*sigsave) (int signum);
    char *formatted_page = NULL;
    int arg_index = 1;
***************
*** 377,382 ****
  
  static void
! clean_manpage (manpage)
!      char *manpage;
  {
    register int i, j;
--- 373,377 ----
  
  static void
! clean_manpage (char *manpage)
  {
    register int i, j;
***************
*** 435,441 ****
  
  static NODE *
! manpage_node_of_file_buffer (file_buffer, pagename)
!      FILE_BUFFER *file_buffer;
!      char *pagename;
  {
    NODE *node = (NODE *)NULL;
--- 430,434 ----
  
  static NODE *
! manpage_node_of_file_buffer (FILE_BUFFER *file_buffer, char *pagename)
  {
    NODE *node = (NODE *)NULL;
***************
*** 471,476 ****
  
  static char *
! read_from_fd (fd)
!      int fd;
  {
    struct timeval timeout;
--- 464,468 ----
  
  static char *
! read_from_fd (int fd)
  {
    struct timeval timeout;
***************
*** 552,557 ****
  
  static SEARCH_BINDING *
! find_reference_section (node)
!      NODE *node;
  {
    register int i;
--- 544,548 ----
  
  static SEARCH_BINDING *
! find_reference_section (NODE *node)
  {
    register int i;
***************
*** 592,597 ****
  
  REFERENCE **
! xrefs_of_manpage (node)
!      NODE *node;
  {
    SEARCH_BINDING *reference_section;
--- 583,587 ----
  
  REFERENCE **
! xrefs_of_manpage (NODE *node)
  {
    SEARCH_BINDING *reference_section;
***************
*** 661,668 ****
  
  long
! locate_manpage_xref (node, start, dir)
!      NODE *node;
!      long start;
!      int dir;
  {
    REFERENCE **refs;
--- 651,655 ----
  
  long
! locate_manpage_xref (NODE *node, long int start, int dir)
  {
    REFERENCE **refs;
***************
*** 711,717 ****
     The BUFFER is a pointer to the start of that line. */
  REFERENCE **
! manpage_xrefs_in_binding (node, binding)
!      NODE *node;
!      SEARCH_BINDING *binding;
  {
    register int i;
--- 698,702 ----
     The BUFFER is a pointer to the start of that line. */
  REFERENCE **
! manpage_xrefs_in_binding (NODE *node, SEARCH_BINDING *binding)
  {
    register int i;

Index: man.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/man.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** man.h       6 Dec 2003 01:32:53 -0000       1.1.1.1
--- man.h       13 Mar 2004 15:52:46 -0000      1.2
***************
*** 28,37 ****
  #define MANPAGE_FILE_BUFFER_NAME "*manpages*"
  
! extern NODE *make_manpage_node (/* char *pagename */);
! extern NODE *get_manpage_node (/* FILE_BUFFER *file_buffer, char *pagename 
*/);
! extern FILE_BUFFER *create_manpage_file_buffer (/* void */);
! extern long locate_manpage_xref (/* NODE *node, long start, int dir */);
! extern REFERENCE **xrefs_of_manpage (/* NODE *node */);
! extern REFERENCE **manpage_xrefs_in_binding (/* NODE *node, SEARCH_BINDING 
*binding */);
  
  #endif /* INFO_MAN_H */
--- 28,39 ----
  #define MANPAGE_FILE_BUFFER_NAME "*manpages*"
  
! extern NODE *make_manpage_node (char *pagename);
! extern NODE *get_manpage_node (FILE_BUFFER *file_buffer,
!     char *pagename);
! extern FILE_BUFFER *create_manpage_file_buffer (void);
! extern long locate_manpage_xref (NODE *node, long int start, int dir);
! extern REFERENCE **xrefs_of_manpage (NODE *node);
! extern REFERENCE **manpage_xrefs_in_binding (NODE *node,
!     SEARCH_BINDING *binding);
  
  #endif /* INFO_MAN_H */

Index: nodemenu.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/nodemenu.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** nodemenu.c  6 Dec 2003 01:32:53 -0000       1.1.1.1
--- nodemenu.c  13 Mar 2004 15:52:46 -0000      1.2
***************
*** 22,28 ****
  #include "info.h"
  
  /* Return a line describing the format of a node information line. */
  static const char *
! nodemenu_format_info ()
  {
    return (_("\n\
--- 22,30 ----
  #include "info.h"
  
+ NODE * get_visited_nodes (Function *filter_func);
+ 
  /* Return a line describing the format of a node information line. */
  static const char *
! nodemenu_format_info (void)
  {
    return (_("\n\
***************
*** 43,48 ****
  */
  static char *
! format_node_info (node)
!      NODE *node;
  {
    register int i, len;
--- 45,49 ----
  */
  static char *
! format_node_info (NODE *node)
  {
    register int i, len;
***************
*** 110,117 ****
  /* Little string comparison routine for qsort (). */
  static int
! compare_strings (string1, string2)
!      char **string1, **string2;
  {
!   return (strcasecmp (*string1, *string2));
  }
  
--- 111,120 ----
  /* Little string comparison routine for qsort (). */
  static int
! compare_strings (const void *entry1, const void *entry2)
  {
!   char **e1 = (char **) entry1;
!   char **e2 = (char **) entry2;
! 
!   return (strcasecmp (*e1, *e2));
  }
  
***************
*** 124,129 ****
     of NODE, and returns non-zero if the node should appear in the listing. */
  NODE *
! get_visited_nodes (filter_func)
!      Function *filter_func;
  {
    register int i, iw_index;
--- 127,131 ----
     of NODE, and returns non-zero if the node should appear in the listing. */
  NODE *
! get_visited_nodes (Function *filter_func)
  {
    register int i, iw_index;
***************
*** 197,208 ****
    printf_to_message_buffer
      ("%s", replace_in_documentation
!      (_("Here is the menu of nodes you have recently visited.\n\
! Select one from this menu, or use `\\[history-node]' in another window.\n")));
  
!   printf_to_message_buffer ("%s\n", nodemenu_format_info ());
  
    for (i = 0; (lines != (char **)NULL) && (i < lines_index); i++)
      {
!       printf_to_message_buffer ("%s\n", lines[i]);
        free (lines[i]);
      }
--- 199,212 ----
    printf_to_message_buffer
      ("%s", replace_in_documentation
!      ((char *) _("Here is the menu of nodes you have recently visited.\n\
! Select one from this menu, or use `\\[history-node]' in another window.\n"), 
0),
!      NULL, NULL);
  
!   printf_to_message_buffer ("%s\n", (char *) nodemenu_format_info (),
!       NULL, NULL);
  
    for (i = 0; (lines != (char **)NULL) && (i < lines_index); i++)
      {
!       printf_to_message_buffer ("%s\n", lines[i], NULL, NULL);
        free (lines[i]);
      }
***************
*** 309,313 ****
  
    line =
!     info_read_completing_in_echo_area (window, _("Select visited node: "), 
menu);
  
    window = active_window;
--- 313,318 ----
  
    line =
!     info_read_completing_in_echo_area (window,
!         (char *) _("Select visited node: "), menu);
  
    window = active_window;
***************
*** 329,333 ****
  
        if (!entry)
!         info_error (_("The reference disappeared! (%s)."), line);
        else
          info_select_reference (window, entry);
--- 334,338 ----
  
        if (!entry)
!         info_error ((char *) _("The reference disappeared! (%s)."), line, 
NULL);
        else
          info_select_reference (window, entry);

Index: nodes.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/nodes.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** nodes.c     6 Dec 2003 01:32:54 -0000       1.1.1.1
--- nodes.c     13 Mar 2004 15:52:46 -0000      1.2
***************
*** 32,45 ****
  #endif /* HANDLE_MAN_PAGES */
  
! static void forget_info_file (), remember_info_file ();
! static void free_file_buffer_tags (), free_info_tag ();
! static void get_nodes_of_tags_table (), get_nodes_of_info_file ();
! static void get_tags_of_indirect_tags_table ();
! static void info_reload_file_buffer_contents ();
! static char *adjust_nodestart ();
! static FILE_BUFFER *info_load_file_internal (), *info_find_file_internal ();
! static NODE *info_node_of_file_buffer_tags ();
  
! static long get_node_length ();
  
  /* Magic number that RMS used to decide how much a tags table pointer could
--- 32,52 ----
  #endif /* HANDLE_MAN_PAGES */
  
! static void forget_info_file (char *filename);
! static void remember_info_file (FILE_BUFFER *file_buffer);
! static void free_file_buffer_tags (FILE_BUFFER *file_buffer);
! static void free_info_tag (TAG *tag);
! static void get_nodes_of_tags_table (FILE_BUFFER *file_buffer,
!     SEARCH_BINDING *buffer_binding);
! static void get_nodes_of_info_file (FILE_BUFFER *file_buffer);
! static void get_tags_of_indirect_tags_table (FILE_BUFFER *file_buffer,
!     SEARCH_BINDING *indirect_binding, SEARCH_BINDING *tags_binding);
! static void info_reload_file_buffer_contents (FILE_BUFFER *fb);
! static char *adjust_nodestart (NODE *node, int min, int max);
! static FILE_BUFFER *info_load_file_internal (char *filename, int get_tags);
! static FILE_BUFFER *info_find_file_internal (char *filename, int get_tags);
! static NODE *info_node_of_file_buffer_tags (FILE_BUFFER *file_buffer,
!     char *nodename);
  
! static long get_node_length (SEARCH_BINDING *binding);
  
  /* Magic number that RMS used to decide how much a tags table pointer could
***************
*** 66,70 ****
  
  /* Used to build `dir' menu from `localdir' files found in INFOPATH. */
! extern void maybe_build_dir_node ();
  
  /* Return a pointer to a NODE structure for the Info node (FILENAME)NODENAME.
--- 73,77 ----
  
  /* Used to build `dir' menu from `localdir' files found in INFOPATH. */
! extern void maybe_build_dir_node (char *dirname);
  
  /* Return a pointer to a NODE structure for the Info node (FILENAME)NODENAME.
***************
*** 73,78 ****
     If the node cannot be found, return NULL. */
  NODE *
! info_get_node (filename, nodename)
!      char *filename, *nodename;
  {
    NODE *node;
--- 80,84 ----
     If the node cannot be found, return NULL. */
  NODE *
! info_get_node (char *filename, char *nodename)
  {
    NODE *node;
***************
*** 129,135 ****
     NULL pointer. */
  NODE *
! info_get_node_of_file_buffer (nodename, file_buffer)
!      char *nodename;
!      FILE_BUFFER *file_buffer;
  {
    NODE *node = NULL;
--- 135,139 ----
     NULL pointer. */
  NODE *
! info_get_node_of_file_buffer (char *nodename, FILE_BUFFER *file_buffer)
  {
    NODE *node = NULL;
***************
*** 189,194 ****
     return a NULL FILE_BUFFER *. */
  FILE_BUFFER *
! info_find_file (filename)
!      char *filename;
  {
    return info_find_file_internal (filename, INFO_GET_TAGS);
--- 193,197 ----
     return a NULL FILE_BUFFER *. */
  FILE_BUFFER *
! info_find_file (char *filename)
  {
    return info_find_file_internal (filename, INFO_GET_TAGS);
***************
*** 198,203 ****
     file buffer. */
  FILE_BUFFER *
! info_load_file (filename)
!      char *filename;
  {
    return info_load_file_internal (filename, INFO_GET_TAGS);
--- 201,205 ----
     file buffer. */
  FILE_BUFFER *
! info_load_file (char *filename)
  {
    return info_load_file_internal (filename, INFO_GET_TAGS);
***************
*** 213,219 ****
     tags table describing the nodes, it is unnecessary. */
  static FILE_BUFFER *
! info_find_file_internal (filename, get_tags)
!      char *filename;
!      int get_tags;
  {
    int i;
--- 215,219 ----
     tags table describing the nodes, it is unnecessary. */
  static FILE_BUFFER *
! info_find_file_internal (char *filename, int get_tags)
  {
    int i;
***************
*** 307,313 ****
     necessary when loading a subfile for which we already have tags. */
  static FILE_BUFFER *
! info_load_file_internal (filename, get_tags)
!      char *filename;
!      int get_tags;
  {
    char *fullpath, *contents;
--- 307,311 ----
     necessary when loading a subfile for which we already have tags. */
  static FILE_BUFFER *
! info_load_file_internal (char *filename, int get_tags)
  {
    char *fullpath, *contents;
***************
*** 333,347 ****
      {
        char *lowered_name;
!       char *basename;
  
        lowered_name = xstrdup (filename);
!       basename = filename_non_directory (lowered_name);
  
!       while (*basename)
          {
!           if (isupper (*basename))
!             *basename = tolower (*basename);
  
!           basename++;
          }
  
--- 331,345 ----
      {
        char *lowered_name;
!       char *tmp_basename;
  
        lowered_name = xstrdup (filename);
!       tmp_basename = filename_non_directory (lowered_name);
  
!       while (*tmp_basename)
          {
!           if (isupper (*tmp_basename))
!             *tmp_basename = tolower (*tmp_basename);
  
!           tmp_basename++;
          }
  
***************
*** 386,391 ****
     various slots.  This can also be used to rebuild a tag or node table. */
  void
! build_tags_and_nodes (file_buffer)
!      FILE_BUFFER *file_buffer;
  {
    SEARCH_BINDING binding;
--- 384,388 ----
     various slots.  This can also be used to rebuild a tag or node table. */
  void
! build_tags_and_nodes (FILE_BUFFER *file_buffer)
  {
    SEARCH_BINDING binding;
***************
*** 497,502 ****
     FILE_BUFFER->tags_slots. */
  static void
! get_nodes_of_info_file (file_buffer)
!      FILE_BUFFER *file_buffer;
  {
    long nodestart;
--- 494,498 ----
     FILE_BUFFER->tags_slots. */
  static void
! get_nodes_of_info_file (FILE_BUFFER *file_buffer)
  {
    long nodestart;
***************
*** 574,579 ****
  /* Return the length of the node which starts at BINDING. */
  static long
! get_node_length (binding)
!      SEARCH_BINDING *binding;
  {
    int i;
--- 570,574 ----
  /* Return the length of the node which starts at BINDING. */
  static long
! get_node_length (SEARCH_BINDING *binding)
  {
    int i;
***************
*** 592,608 ****
     contents of BUFFER_BINDING for a tags table, and groveling the contents. */
  static void
! get_nodes_of_tags_table (file_buffer, buffer_binding)
!      FILE_BUFFER *file_buffer;
!      SEARCH_BINDING *buffer_binding;
  {
    int name_offset;
!   SEARCH_BINDING *search;
    long position;
    int tags_index = 0;
  
!   search = copy_binding (buffer_binding);
  
    /* Find the start of the tags table. */
!   position = find_tags_table (search);
  
    /* If none, we're all done. */
--- 587,602 ----
     contents of BUFFER_BINDING for a tags table, and groveling the contents. */
  static void
! get_nodes_of_tags_table (FILE_BUFFER *file_buffer,
!     SEARCH_BINDING *buffer_binding)
  {
    int name_offset;
!   SEARCH_BINDING *tmp_search;
    long position;
    int tags_index = 0;
  
!   tmp_search = copy_binding (buffer_binding);
  
    /* Find the start of the tags table. */
!   position = find_tags_table (tmp_search);
  
    /* If none, we're all done. */
***************
*** 611,622 ****
  
    /* Move to one character before the start of the actual table. */
!   search->start = position;
!   search->start += skip_node_separator (search->buffer + search->start);
!   search->start += strlen (TAGS_TABLE_BEG_LABEL);
!   search->start--;
  
    /* The tag table consists of lines containing node names and positions.
       Do each line until we find one that doesn't contain a node name. */
!   while ((position = search_forward ("\n", search)) != -1)
      {
        TAG *entry;
--- 605,617 ----
  
    /* Move to one character before the start of the actual table. */
!   tmp_search->start = position;
!   tmp_search->start += skip_node_separator
!     (tmp_search->buffer + tmp_search->start);
!   tmp_search->start += strlen (TAGS_TABLE_BEG_LABEL);
!   tmp_search->start--;
  
    /* The tag table consists of lines containing node names and positions.
       Do each line until we find one that doesn't contain a node name. */
!   while ((position = search_forward ("\n", tmp_search)) != -1)
      {
        TAG *entry;
***************
*** 626,639 ****
  
        /* Prepare to skip this line. */
!       search->start = position;
!       search->start++;
  
        /* Skip past informative "(Indirect)" tags table line. */
!       if (!tags_index && looking_at (TAGS_TABLE_IS_INDIRECT_LABEL, search))
          continue;
  
        /* Find the label preceding the node name. */
        name_offset =
!         string_in_line (INFO_NODE_LABEL, search->buffer + search->start);
  
        /* If no node label, maybe it's an anchor.  */
--- 621,634 ----
  
        /* Prepare to skip this line. */
!       tmp_search->start = position;
!       tmp_search->start++;
  
        /* Skip past informative "(Indirect)" tags table line. */
!       if (!tags_index && looking_at (TAGS_TABLE_IS_INDIRECT_LABEL, 
tmp_search))
          continue;
  
        /* Find the label preceding the node name. */
        name_offset =
!         string_in_line (INFO_NODE_LABEL, tmp_search->buffer + 
tmp_search->start);
  
        /* If no node label, maybe it's an anchor.  */
***************
*** 641,645 ****
          {
            name_offset = string_in_line (INFO_REF_LABEL,
!                                         search->buffer + search->start);
            if (name_offset != -1)
              anchor = 1;
--- 636,640 ----
          {
            name_offset = string_in_line (INFO_REF_LABEL,
!               tmp_search->buffer + tmp_search->start);
            if (name_offset != -1)
              anchor = 1;
***************
*** 654,659 ****
  
        /* Find the beginning of the node definition. */
!       search->start += name_offset;
!       nodedef = search->buffer + search->start;
        nodedef += skip_whitespace (nodedef);
  
--- 649,654 ----
  
        /* Find the beginning of the node definition. */
!       tmp_search->start += name_offset;
!       nodedef = tmp_search->buffer + tmp_search->start;
        nodedef += skip_whitespace (nodedef);
  
***************
*** 683,687 ****
                              file_buffer->tags_slots, 100, TAG *);
      }
!   free (search);
  }
  
--- 678,682 ----
                              file_buffer->tags_slots, 100, TAG *);
      }
!   free (tmp_search);
  }
  
***************
*** 697,703 ****
     a binding surrounding the indirect files list. */
  static void
! get_tags_of_indirect_tags_table (file_buffer, indirect_binding, tags_binding)
!      FILE_BUFFER *file_buffer;
!      SEARCH_BINDING *indirect_binding, *tags_binding;
  {
    int i;
--- 692,697 ----
     a binding surrounding the indirect files list. */
  static void
! get_tags_of_indirect_tags_table (FILE_BUFFER *file_buffer,
!     SEARCH_BINDING *indirect_binding, SEARCH_BINDING *tags_binding)
  {
    int i;
***************
*** 864,870 ****
     (pathologically) NULL.  Called from info_node_of_file_buffer_tags.  */
  static NODE *
! find_node_of_anchor (file_buffer, tag)
!      FILE_BUFFER *file_buffer;
!      TAG *tag;
  {
    int anchor_pos, node_pos;
--- 858,862 ----
     (pathologically) NULL.  Called from info_node_of_file_buffer_tags.  */
  static NODE *
! find_node_of_anchor (FILE_BUFFER *file_buffer, TAG *tag)
  {
    int anchor_pos, node_pos;
***************
*** 921,925 ****
           the end of the last line of the node (way over on the right of
           the screen), which looks wrong.  */
!       if (node->display_pos >= node->nodelen)
          node->display_pos = node->nodelen - 1;
  
--- 913,917 ----
           the end of the last line of the node (way over on the right of
           the screen), which looks wrong.  */
!       if (node->display_pos >= (unsigned long) node->nodelen)
          node->display_pos = node->nodelen - 1;
  
***************
*** 935,941 ****
     the tags table in FILE_BUFFER, or NULL.  */
  static NODE *
! info_node_of_file_buffer_tags (file_buffer, nodename)
!      FILE_BUFFER *file_buffer;
!      char *nodename;
  {
    TAG *tag;
--- 927,931 ----
     the tags table in FILE_BUFFER, or NULL.  */
  static NODE *
! info_node_of_file_buffer_tags (FILE_BUFFER *file_buffer, char *nodename)
  {
    TAG *tag;
***************
*** 1061,1065 ****
  /* Create a new, empty file buffer. */
  FILE_BUFFER *
! make_file_buffer ()
  {
    FILE_BUFFER *file_buffer = xmalloc (sizeof (FILE_BUFFER));
--- 1051,1055 ----
  /* Create a new, empty file buffer. */
  FILE_BUFFER *
! make_file_buffer (void)
  {
    FILE_BUFFER *file_buffer = xmalloc (sizeof (FILE_BUFFER));
***************
*** 1077,1082 ****
  /* Add FILE_BUFFER to our list of already loaded info files. */
  static void
! remember_info_file (file_buffer)
!      FILE_BUFFER *file_buffer;
  {
    int i;
--- 1067,1071 ----
  /* Add FILE_BUFFER to our list of already loaded info files. */
  static void
! remember_info_file (FILE_BUFFER *file_buffer)
  {
    int i;
***************
*** 1091,1096 ****
  /* Forget the contents, tags table, nodes list, and names of FILENAME. */
  static void
! forget_info_file (filename)
!      char *filename;
  {
    int i;
--- 1080,1084 ----
  /* Forget the contents, tags table, nodes list, and names of FILENAME. */
  static void
! forget_info_file (char *filename)
  {
    int i;
***************
*** 1128,1133 ****
  /* Free the tags (if any) associated with FILE_BUFFER. */
  static void
! free_file_buffer_tags (file_buffer)
!      FILE_BUFFER *file_buffer;
  {
    int i;
--- 1116,1120 ----
  /* Free the tags (if any) associated with FILE_BUFFER. */
  static void
! free_file_buffer_tags (FILE_BUFFER *file_buffer)
  {
    int i;
***************
*** 1157,1162 ****
  /* Free the data associated with TAG, as well as TAG itself. */
  static void
! free_info_tag (tag)
!      TAG *tag;
  {
    free (tag->nodename);
--- 1144,1148 ----
  /* Free the data associated with TAG, as well as TAG itself. */
  static void
! free_info_tag (TAG *tag)
  {
    free (tag->nodename);
***************
*** 1175,1180 ****
     nodes members are still correctly filled. */
  static void
! info_reload_file_buffer_contents (fb)
!      FILE_BUFFER *fb;
  {
    int is_compressed;
--- 1161,1165 ----
     nodes members are still correctly filled. */
  static void
! info_reload_file_buffer_contents (FILE_BUFFER *fb)
  {
    int is_compressed;
***************
*** 1206,1212 ****
     could not be found, return a NULL pointer. */
  static char *
! adjust_nodestart (node, min, max)
!      NODE *node;
!      int min, max;
  {
    long position;
--- 1191,1195 ----
     could not be found, return a NULL pointer. */
  static char *
! adjust_nodestart (NODE *node, int min, int max)
  {
    long position;
***************
*** 1249,1253 ****
                nodedef += skip_whitespace (nodedef);
                offset = skip_node_characters (nodedef, DONT_SKIP_NEWLINES);
!               if ((offset == strlen (node->nodename)) &&
                    (strncmp (node->nodename, nodedef, offset) == 0))
                  {
--- 1232,1236 ----
                nodedef += skip_whitespace (nodedef);
                offset = skip_node_characters (nodedef, DONT_SKIP_NEWLINES);
!               if (((unsigned int) offset == strlen (node->nodename)) &&
                    (strncmp (node->nodename, nodedef, offset) == 0))
                  {

Index: nodes.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/nodes.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** nodes.h     6 Dec 2003 01:32:54 -0000       1.1.1.1
--- nodes.h     13 Mar 2004 15:52:46 -0000      1.2
***************
*** 124,133 ****
     and add it to the list of loaded files.  If the file cannot be found,
     return a NULL FILE_BUFFER *. */
! extern FILE_BUFFER *info_find_file ();
  
  /* Force load the file named FILENAME, and return the information structure
     describing this file.  Even if the file was already loaded, this loads
     a new buffer, rebuilds tags and nodes, and returns a new FILE_BUFFER *. */
! extern FILE_BUFFER *info_load_file ();
  
  /* Return a pointer to a NODE structure for the Info node (FILENAME)NODENAME.
--- 124,133 ----
     and add it to the list of loaded files.  If the file cannot be found,
     return a NULL FILE_BUFFER *. */
! extern FILE_BUFFER *info_find_file (char *filename);
  
  /* Force load the file named FILENAME, and return the information structure
     describing this file.  Even if the file was already loaded, this loads
     a new buffer, rebuilds tags and nodes, and returns a new FILE_BUFFER *. */
! extern FILE_BUFFER *info_load_file (char *filename);
  
  /* Return a pointer to a NODE structure for the Info node (FILENAME)NODENAME.
***************
*** 135,139 ****
     NODENAME can be passed as NULL, in which case the nodename of "Top" is 
used.
     If the node cannot be found, return a NULL pointer. */
! extern NODE *info_get_node ();
  
  /* Return a pointer to a NODE structure for the Info node NODENAME in
--- 135,139 ----
     NODENAME can be passed as NULL, in which case the nodename of "Top" is 
used.
     If the node cannot be found, return a NULL pointer. */
! extern NODE *info_get_node (char *filename, char *nodename);
  
  /* Return a pointer to a NODE structure for the Info node NODENAME in
***************
*** 141,149 ****
     nodename of "Top" is used.  If the node cannot be found, return a
     NULL pointer. */
! extern NODE *info_get_node_of_file_buffer ();
  
  /* Grovel FILE_BUFFER->contents finding tags and nodes, and filling in the
     various slots.  This can also be used to rebuild a tag or node table. */
! extern void build_tags_and_nodes ();
  
  /* When non-zero, this is a string describing the most recent file error. */
--- 141,150 ----
     nodename of "Top" is used.  If the node cannot be found, return a
     NULL pointer. */
! extern NODE *info_get_node_of_file_buffer (char *nodename,
!     FILE_BUFFER *file_buffer);
  
  /* Grovel FILE_BUFFER->contents finding tags and nodes, and filling in the
     various slots.  This can also be used to rebuild a tag or node table. */
! extern void build_tags_and_nodes (FILE_BUFFER *file_buffer);
  
  /* When non-zero, this is a string describing the most recent file error. */
***************
*** 151,155 ****
  
  /* Create a new, empty file buffer. */
! extern FILE_BUFFER *make_file_buffer ();
  
  #endif /* not NODES_H */
--- 152,156 ----
  
  /* Create a new, empty file buffer. */
! extern FILE_BUFFER *make_file_buffer (void);
  
  #endif /* not NODES_H */

Index: search.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/search.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** search.c    6 Dec 2003 01:32:55 -0000       1.1.1.1
--- search.c    13 Mar 2004 15:52:46 -0000      1.2
***************
*** 37,43 ****
  /* A function which makes a binding with buffer and bounds. */
  SEARCH_BINDING *
! make_binding (buffer, start, end)
!      char *buffer;
!      long start, end;
  {
    SEARCH_BINDING *binding;
--- 37,41 ----
  /* A function which makes a binding with buffer and bounds. */
  SEARCH_BINDING *
! make_binding (char *buffer, long int start, long int end)
  {
    SEARCH_BINDING *binding;
***************
*** 54,59 ****
  /* Make a copy of BINDING without duplicating the data. */
  SEARCH_BINDING *
! copy_binding (binding)
!      SEARCH_BINDING *binding;
  {
    SEARCH_BINDING *copy;
--- 52,56 ----
  /* Make a copy of BINDING without duplicating the data. */
  SEARCH_BINDING *
! copy_binding (SEARCH_BINDING *binding)
  {
    SEARCH_BINDING *copy;
***************
*** 74,80 ****
     The search is forwards if BINDING->start is greater than BINDING->end. */
  long
! search (string, binding)
!      char *string;
!      SEARCH_BINDING *binding;
  {
    long result;
--- 71,75 ----
     The search is forwards if BINDING->start is greater than BINDING->end. */
  long
! search (char *string, SEARCH_BINDING *binding)
  {
    long result;
***************
*** 91,97 ****
  /* Search forwards for STRING through the text delimited in BINDING. */
  long
! search_forward (string, binding)
!      char *string;
!      SEARCH_BINDING *binding;
  {
    register int c, i, len;
--- 86,90 ----
  /* Search forwards for STRING through the text delimited in BINDING. */
  long
! search_forward (char *string, SEARCH_BINDING *binding)
  {
    register int c, i, len;
***************
*** 152,158 ****
  /* Search for STRING backwards through the text delimited in BINDING. */
  long
! search_backward (input_string, binding)
!      char *input_string;
!      SEARCH_BINDING *binding;
  {
    register int c, i, len;
--- 145,149 ----
  /* Search for STRING backwards through the text delimited in BINDING. */
  long
! search_backward (char *input_string, SEARCH_BINDING *binding)
  {
    register int c, i, len;
***************
*** 226,231 ****
     is bound by the end of the line (i.e., either NEWLINE or 0). */
  int
! string_in_line (string, line)
!      char *string, *line;
  {
    register int end;
--- 217,221 ----
     is bound by the end of the line (i.e., either NEWLINE or 0). */
  int
! string_in_line (char *string, char *line)
  {
    register int end;
***************
*** 246,252 ****
  /* Return non-zero if STRING is the first text to appear at BINDING. */
  int
! looking_at (string, binding)
!      char *string;
!      SEARCH_BINDING *binding;
  {
    long search_end;
--- 236,240 ----
  /* Return non-zero if STRING is the first text to appear at BINDING. */
  int
! looking_at (char *string, SEARCH_BINDING *binding)
  {
    long search_end;
***************
*** 274,279 ****
  /* Return the index of the first non-whitespace character in STRING. */
  int
! skip_whitespace (string)
!      char *string;
  {
    register int i;
--- 262,266 ----
  /* Return the index of the first non-whitespace character in STRING. */
  int
! skip_whitespace (char *string)
  {
    register int i;
***************
*** 286,291 ****
     STRING. */
  int
! skip_whitespace_and_newlines (string)
!      char *string;
  {
    register int i;
--- 273,277 ----
     STRING. */
  int
! skip_whitespace_and_newlines (char *string)
  {
    register int i;
***************
*** 297,302 ****
  /* Return the index of the first whitespace character in STRING. */
  int
! skip_non_whitespace (string)
!      char *string;
  {
    register int i;
--- 283,287 ----
  /* Return the index of the first whitespace character in STRING. */
  int
! skip_non_whitespace (char *string)
  {
    register int i;
***************
*** 314,320 ****
     be skipped while parsing out the nodename specification. */
  int
! skip_node_characters (string, newlines_okay)
!      char *string;
!      int newlines_okay;
  {
    register int c, i = 0;
--- 299,303 ----
     be skipped while parsing out the nodename specification. */
  int
! skip_node_characters (char *string, int newlines_okay)
  {
    register int c, i = 0;
***************
*** 382,387 ****
     separator was found. */
  long
! find_node_separator (binding)
!      SEARCH_BINDING *binding;
  {
    register long i;
--- 365,369 ----
     separator was found. */
  long
! find_node_separator (SEARCH_BINDING *binding)
  {
    register long i;
***************
*** 408,413 ****
     currently pointing at. */
  int
! skip_node_separator (body)
!      char *body;
  {
    register int i;
--- 390,394 ----
     currently pointing at. */
  int
! skip_node_separator (char *body)
  {
    register int i;
***************
*** 433,438 ****
     the next line. */
  int
! skip_line (string)
!      char *string;
  {
    register int i;
--- 414,418 ----
     the next line. */
  int
! skip_line (char *string)
  {
    register int i;
***************
*** 449,469 ****
     binding starting the search at binding->start. */
  long
! find_tags_table (binding)
!      SEARCH_BINDING *binding;
  {
!   SEARCH_BINDING search;
    long position;
  
!   search.buffer = binding->buffer;
!   search.start = binding->start;
!   search.end = binding->end;
!   search.flags = S_FoldCase;
  
!   while ((position = find_node_separator (&search)) != -1 )
      {
!       search.start = position;
!       search.start += skip_node_separator (search.buffer + search.start);
  
!       if (looking_at (TAGS_TABLE_BEG_LABEL, &search))
          return (position);
      }
--- 429,449 ----
     binding starting the search at binding->start. */
  long
! find_tags_table (SEARCH_BINDING *binding)
  {
!   SEARCH_BINDING tmp_search;
    long position;
  
!   tmp_search.buffer = binding->buffer;
!   tmp_search.start = binding->start;
!   tmp_search.end = binding->end;
!   tmp_search.flags = S_FoldCase;
  
!   while ((position = find_node_separator (&tmp_search)) != -1 )
      {
!       tmp_search.start = position;
!       tmp_search.start += skip_node_separator (tmp_search.buffer
!           + tmp_search.start);
  
!       if (looking_at (TAGS_TABLE_BEG_LABEL, &tmp_search))
          return (position);
      }
***************
*** 477,515 ****
     the separator preceding the node. */
  long
! find_node_in_binding (nodename, binding)
!      char *nodename;
!      SEARCH_BINDING *binding;
  {
    long position;
    int offset, namelen;
!   SEARCH_BINDING search;
  
    namelen = strlen (nodename);
  
!   search.buffer = binding->buffer;
!   search.start = binding->start;
!   search.end = binding->end;
!   search.flags = 0;
  
!   while ((position = find_node_separator (&search)) != -1)
      {
!       search.start = position;
!       search.start += skip_node_separator (search.buffer + search.start);
  
!       offset = string_in_line (INFO_NODE_LABEL, search.buffer + search.start);
  
        if (offset == -1)
          continue;
  
!       search.start += offset;
!       search.start += skip_whitespace (search.buffer + search.start);
        offset = skip_node_characters
!         (search.buffer + search.start, DONT_SKIP_NEWLINES);
  
        /* Notice that this is an exact match.  You cannot grovel through
           the buffer with this function looking for random nodes. */
         if ((offset == namelen) &&
!            (search.buffer[search.start] == nodename[0]) &&
!            (strncmp (search.buffer + search.start, nodename, offset) == 0))
           return (position);
      }
--- 457,495 ----
     the separator preceding the node. */
  long
! find_node_in_binding (char *nodename, SEARCH_BINDING *binding)
  {
    long position;
    int offset, namelen;
!   SEARCH_BINDING tmp_search;
  
    namelen = strlen (nodename);
  
!   tmp_search.buffer = binding->buffer;
!   tmp_search.start = binding->start;
!   tmp_search.end = binding->end;
!   tmp_search.flags = 0;
  
!   while ((position = find_node_separator (&tmp_search)) != -1)
      {
!       tmp_search.start = position;
!       tmp_search.start += skip_node_separator
!         (tmp_search.buffer + tmp_search.start);
  
!       offset = string_in_line
!         (INFO_NODE_LABEL, tmp_search.buffer + tmp_search.start);
  
        if (offset == -1)
          continue;
  
!       tmp_search.start += offset;
!       tmp_search.start += skip_whitespace (tmp_search.buffer + 
tmp_search.start);
        offset = skip_node_characters
!         (tmp_search.buffer + tmp_search.start, DONT_SKIP_NEWLINES);
  
        /* Notice that this is an exact match.  You cannot grovel through
           the buffer with this function looking for random nodes. */
         if ((offset == namelen) &&
!            (tmp_search.buffer[tmp_search.start] == nodename[0]) &&
!            (strncmp (tmp_search.buffer + tmp_search.start, nodename, offset) 
== 0))
           return (position);
      }

Index: search.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/search.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** search.h    6 Dec 2003 01:32:55 -0000       1.1.1.1
--- search.h    13 Mar 2004 15:52:46 -0000      1.2
***************
*** 43,53 ****
  #define S_SkipDest      0x02    /* Set means return pointing after the dest. 
*/
  
! SEARCH_BINDING *make_binding (), *copy_binding ();
! extern long search_forward (), search_backward (), search ();
! extern int looking_at ();
  
  /* Note that STRING_IN_LINE () always returns the offset of the 1st character
     after the string. */
! extern int string_in_line ();
  
  /* Function names that start with "skip" are passed a string, and return
--- 43,56 ----
  #define S_SkipDest      0x02    /* Set means return pointing after the dest. 
*/
  
! SEARCH_BINDING *make_binding (char *buffer, long int start, long int end);
! SEARCH_BINDING *copy_binding (SEARCH_BINDING *binding);
! extern long search_forward (char *string, SEARCH_BINDING *binding);
! extern long search_backward (char *input_string, SEARCH_BINDING *binding);
! extern long search (char *string, SEARCH_BINDING *binding);
! extern int looking_at (char *string, SEARCH_BINDING *binding);
  
  /* Note that STRING_IN_LINE () always returns the offset of the 1st character
     after the string. */
! extern int string_in_line (char *string, char *line);
  
  /* Function names that start with "skip" are passed a string, and return
***************
*** 56,67 ****
     marker of the item being searched for.  "Find" functions return a value
     of -1 if the item being looked for couldn't be found. */
! extern int skip_whitespace (), skip_non_whitespace ();
! extern int skip_whitespace_and_newlines (), skip_line ();
! extern int skip_node_characters (), skip_node_separator ();
  #define DONT_SKIP_NEWLINES 0
  #define SKIP_NEWLINES 1
  
! extern long find_node_separator (), find_tags_table ();
! extern long find_node_in_binding ();
  
  #endif /* not INFO_SEARCH_H */
--- 59,75 ----
     marker of the item being searched for.  "Find" functions return a value
     of -1 if the item being looked for couldn't be found. */
! extern int skip_whitespace (char *string);
! extern int skip_non_whitespace (char *string);
! extern int skip_whitespace_and_newlines (char *string);
! extern int skip_line (char *string);
! extern int skip_node_characters (char *string, int newlines_okay);
! extern int skip_node_separator (char *body);
! 
  #define DONT_SKIP_NEWLINES 0
  #define SKIP_NEWLINES 1
  
! extern long find_node_separator (SEARCH_BINDING *binding);
! extern long find_tags_table (SEARCH_BINDING *binding);
! extern long find_node_in_binding (char *nodename, SEARCH_BINDING *binding);
  
  #endif /* not INFO_SEARCH_H */

Index: session.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/session.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** session.c   24 Feb 2004 14:48:22 -0000      1.5
--- session.c   13 Mar 2004 15:52:46 -0000      1.6
***************
*** 22,25 ****
--- 22,26 ----
  
  #include "info.h"
+ #include "search.h"
  #include <sys/ioctl.h>
  
***************
*** 39,44 ****
  #endif
  
[...2411 lines suppressed...]
    register int i = 0;
--- 4895,4899 ----
     info_input_buffer.  Otherwise, do nothing. */
  void
! info_gather_typeahead (void)
  {
    register int i = 0;
***************
*** 5059,5063 ****
  /* How to read a single character. */
  unsigned char
! info_get_input_char ()
  {
    unsigned char keystroke;
--- 4969,4973 ----
  /* How to read a single character. */
  unsigned char
! info_get_input_char (void)
  {
    unsigned char keystroke;

Index: session.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/session.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** session.h   6 Dec 2003 01:33:07 -0000       1.1.1.1
--- session.h   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 33,37 ****
     the documentation/function-pointer maps. */
  #define DECLARE_INFO_COMMAND(name, doc) \
! void name (window, count, key) WINDOW *window; int count; unsigned char key;
  
  /* Variables found in session.h. */
--- 33,37 ----
     the documentation/function-pointer maps. */
  #define DECLARE_INFO_COMMAND(name, doc) \
! void name (WINDOW *window, int count, unsigned char key)
  
  /* Variables found in session.h. */
***************
*** 61,85 ****
  
  /* Utility functions found in session.c */
! extern void info_dispatch_on_key ();
! extern unsigned char info_get_input_char (), info_get_another_input_char ();
! extern unsigned char info_input_pending_p ();
! extern void remember_window_and_node (), set_remembered_pagetop_and_point ();
! extern void set_window_pagetop (), info_set_node_of_window ();
! extern void initialize_keyseq (), add_char_to_keyseq ();
! extern void info_gather_typeahead ();
! extern FILE_BUFFER *file_buffer_of_window ();
! extern long info_search_in_node (), info_target_search_node ();
! extern void info_select_reference ();
! extern int info_any_buffered_input_p ();
! extern void print_node ();
! extern void dump_node_to_file (), dump_nodes_to_file ();
! extern char *program_name_from_file_name ();
  
  /* Do the physical deletion of WINDOW, and forget this window and
     associated nodes. */
! extern void info_delete_window_internal ();
  
  /* Tell Info that input is coming from the file FILENAME. */
! extern void info_set_input_from_file ();
  
  #define return_if_control_g(val) \
--- 61,96 ----
  
  /* Utility functions found in session.c */
! extern void info_dispatch_on_key (unsigned char key, Keymap map);
! extern unsigned char info_get_input_char (void);
! extern unsigned char info_get_another_input_char (void);
! extern unsigned char info_input_pending_p (void);
! extern void remember_window_and_node (WINDOW *window, NODE *node);
! extern void set_remembered_pagetop_and_point (WINDOW *window);
! extern void set_window_pagetop (WINDOW *window, int desired_top);
! extern void info_set_node_of_window (int remember, WINDOW *window,
!     NODE *node);
! extern void initialize_keyseq (void);
! extern void add_char_to_keyseq (char character);
! extern void info_gather_typeahead (void);
! extern FILE_BUFFER *file_buffer_of_window (WINDOW *window);
! extern long info_search_in_node (char *string, NODE *node,
!     long int start, WINDOW *window, int dir, int case_sensitive);
! extern long info_target_search_node (NODE *node, char *string,
!     long int start);
! extern void info_select_reference (WINDOW *window, REFERENCE *entry);
! extern int info_any_buffered_input_p (void);
! extern void print_node (NODE *node);
! extern void dump_node_to_file (NODE *node, char *filename,
!     int dump_subnodes);
! extern void dump_nodes_to_file (char *filename, char **nodenames,
!     char *output_filename, int dump_subnodes);
! extern char *program_name_from_file_name (char *file_name);
  
  /* Do the physical deletion of WINDOW, and forget this window and
     associated nodes. */
! extern void info_delete_window_internal (WINDOW *window);
  
  /* Tell Info that input is coming from the file FILENAME. */
! extern void info_set_input_from_file (char *filename);
  
  #define return_if_control_g(val) \
***************
*** 93,150 ****
  
  /* Starting an info session. */
! extern void begin_multiple_window_info_session (), begin_info_session ();
! extern void begin_info_session_with_error (), info_session ();
! extern void info_read_and_dispatch ();
  
  /* Moving the point within a node. */
! extern void info_next_line (), info_prev_line ();
! extern void info_end_of_line (), info_beginning_of_line ();
! extern void info_forward_char (), info_backward_char ();
! extern void info_forward_word (), info_backward_word ();
! extern void info_beginning_of_node (), info_end_of_node ();
! extern void info_move_to_prev_xref (), info_move_to_next_xref ();
  
  /* Scrolling text within a window. */
! extern void info_scroll_forward (), info_scroll_backward ();
! extern void info_redraw_display (), info_toggle_wrap ();
! extern void info_move_to_window_line ();
! extern void info_up_line (), info_down_line ();
! extern void info_scroll_half_screen_down (), info_scroll_half_screen_up ();
  
  /* Manipulating multiple windows. */
! extern void info_split_window (), info_delete_window ();
! extern void info_keep_one_window (), info_grow_window ();
! extern void info_scroll_other_window (), info_tile_windows ();
! extern void info_next_window (), info_prev_window ();
  
  /* Selecting nodes. */
! extern void info_next_node (), info_prev_node (), info_up_node ();
! extern void info_last_node (), info_first_node (), info_history_node ();
! extern void info_goto_node (), info_top_node (), info_dir_node ();
! extern void info_global_next_node (), info_global_prev_node ();
! extern void info_kill_node (), info_view_file ();
! extern void info_menu_sequence ();
! extern NODE *info_follow_menus (/* initial_node, menus, errstr, errarg */);
  
  /* Selecting cross references. */
! extern void info_menu_digit (), info_menu_item (), info_xref_item ();
! extern void info_find_menu (), info_select_reference_this_line ();
  
  /* Hacking numeric arguments. */
  extern int info_explicit_arg, info_numeric_arg, info_numeric_arg_sign;
  
! extern void info_add_digit_to_numeric_arg (), info_universal_argument ();
! extern void info_initialize_numeric_arg (), info_numeric_arg_digit_loop ();
  
  /* Searching commands. */
! extern void info_search (), isearch_forward (), isearch_backward ();
! extern void info_search_case_sensitively (), info_search_backward ();
! extern void info_search_next (), info_search_previous ();
  
  /* Dumping and printing nodes. */
! extern void info_print_node ();
  
  /* Miscellaneous commands. */
! extern void info_abort_key (), info_quit (), info_do_lowercase_version ();
  
  #endif /* not SESSION_H */
--- 104,236 ----
  
  /* Starting an info session. */
! extern void begin_multiple_window_info_session (char *filename,
!     char **nodenames);
! extern void begin_info_session (NODE *initial_node);
! extern void begin_info_session_with_error (NODE *initial_node,
!     char *format, void *arg1, void *arg2);
! extern void info_session (void);
! extern void initialize_info_session (NODE *node, int clear_screen);
! extern void info_read_and_dispatch (void);
! extern void info_intuit_options_node (WINDOW *window,
!     NODE *initial_node, char *program);
  
  /* Moving the point within a node. */
! extern void info_next_line (WINDOW *window, int count, unsigned char key);
! extern void info_prev_line (WINDOW *window, int count, unsigned char key);
! extern void info_end_of_line (WINDOW *window, int count, unsigned char key);
! extern void info_beginning_of_line (WINDOW *window, int count, unsigned char 
key);
! extern void info_forward_char (WINDOW *window, int count, unsigned char key);
! extern void info_backward_char (WINDOW *window, int count, unsigned char key);
! extern void info_forward_word (WINDOW *window, int count, unsigned char key);
! extern void info_backward_word (WINDOW *window, int count, unsigned char key);
! extern void info_beginning_of_node (WINDOW *window, int count, unsigned char 
key);
! extern void info_end_of_node (WINDOW *window, int count, unsigned char key);
! extern void info_move_to_prev_xref (WINDOW *window, int count, unsigned char 
key);
! extern void info_move_to_next_xref (WINDOW *window, int count, unsigned char 
key);
  
  /* Scrolling text within a window. */
! extern void info_scroll_forward (WINDOW *window, int count, unsigned char 
key);
! extern void info_scroll_backward (WINDOW *window, int count, unsigned char 
key);
! extern void info_redraw_display (WINDOW *window, int count, unsigned char 
key);
! extern void info_toggle_wrap (WINDOW *window, int count, unsigned char key);
! extern void info_move_to_window_line (WINDOW *window, int count,
!     unsigned char key);
! extern void info_up_line (WINDOW *window, int count, unsigned char key);
! extern void info_down_line (WINDOW *window, int count, unsigned char key);
! extern void info_scroll_half_screen_down (WINDOW *window, int count,
!     unsigned char key);
! extern void info_scroll_half_screen_up (WINDOW *window, int count,
!     unsigned char key);
! extern void info_scroll_forward_set_window (WINDOW *window, int count,
!     unsigned char key);
! extern void info_scroll_forward_page_only (WINDOW *window, int count,
!     unsigned char key);
! extern void info_scroll_forward_page_only_set_window (WINDOW *window, int 
count,
!     unsigned char key);
! extern void info_scroll_backward_set_window (WINDOW *window, int count,
!     unsigned char key);
! extern void info_scroll_backward_page_only (WINDOW *window, int count,
!     unsigned char key);
! extern void info_scroll_backward_page_only_set_window (WINDOW *window, int 
count,
!     unsigned char key);
! extern void info_scroll_other_window_backward (WINDOW *window, int count,
!     unsigned char key);
  
  /* Manipulating multiple windows. */
! extern void info_split_window (WINDOW *window, int count, unsigned char key);
! extern void info_delete_window (WINDOW *window, int count, unsigned char key);
! extern void info_keep_one_window (WINDOW *window, int count, unsigned char 
key);
! extern void info_grow_window (WINDOW *window, int count, unsigned char key);
! extern void info_scroll_other_window (WINDOW *window, int count,
!     unsigned char key);
! extern void info_tile_windows (WINDOW *window, int count, unsigned char key);
! extern void info_next_window (WINDOW *window, int count, unsigned char key);
! extern void info_prev_window (WINDOW *window, int count, unsigned char key);
  
  /* Selecting nodes. */
! extern void info_next_node (WINDOW *window, int count, unsigned char key);
! extern void info_prev_node (WINDOW *window, int count, unsigned char key);
! extern void info_up_node (WINDOW *window, int count, unsigned char key);
! extern void info_last_node (WINDOW *window, int count, unsigned char key);
! extern void info_first_node (WINDOW *window, int count, unsigned char key);
! extern void info_history_node (WINDOW *window, int count, unsigned char key);
! extern void info_goto_node (WINDOW *window, int count, unsigned char key);
! extern void info_goto_invocation_node (WINDOW *window, int count,
!     unsigned char key);
! extern void info_top_node (WINDOW *window, int count, unsigned char key);
! extern void info_dir_node (WINDOW *window, int count, unsigned char key);
! extern void info_global_next_node (WINDOW *window, int count, unsigned char 
key);
! extern void info_global_prev_node (WINDOW *window, int count, unsigned char 
key);
! extern void info_kill_node (WINDOW *window, int count, unsigned char key);
! extern void info_view_file (WINDOW *window, int count, unsigned char key);
! extern void info_menu_sequence (WINDOW *window, int count, unsigned char key);
! extern NODE *info_follow_menus (NODE *initial_node, char **menus,
!     const char **errstr, char **errarg1, char **errarg2);
! extern void info_man (WINDOW *window, int count, unsigned char key);
! extern void list_visited_nodes (WINDOW *window, int count, unsigned char key);
! extern void select_visited_node (WINDOW *window, int count, unsigned char 
key);
  
  /* Selecting cross references. */
! extern void info_menu_digit (WINDOW *window, int count, unsigned char key);
! extern void info_menu_item (WINDOW *window, int count, unsigned char key);
! extern void info_xref_item (WINDOW *window, int count, unsigned char key);
! extern void info_find_menu (WINDOW *window, int count, unsigned char key);
! extern void info_select_reference_this_line (WINDOW *window, int count,
!     unsigned char key);
! extern void info_last_menu_item (WINDOW *window, int count, unsigned char 
key);
! extern void info_visit_menu (WINDOW *window, int count, unsigned char key);
  
  /* Hacking numeric arguments. */
  extern int info_explicit_arg, info_numeric_arg, info_numeric_arg_sign;
  
! extern void info_add_digit_to_numeric_arg (WINDOW *window, int count,
!     unsigned char key);
! extern void info_universal_argument (WINDOW *window, int count,
!     unsigned char key);
! extern void info_initialize_numeric_arg (void);
! extern void info_numeric_arg_digit_loop (WINDOW *window, int count,
!     unsigned char key);
  
  /* Searching commands. */
! extern void info_search (WINDOW *window, int count, unsigned char key);
! extern void isearch_forward (WINDOW *window, int count, unsigned char key);
! extern void isearch_backward (WINDOW *window, int count, unsigned char key);
! extern void info_search_case_sensitively (WINDOW *window, int count,
!     unsigned char key);
! extern void info_search_backward (WINDOW *window, int count, unsigned char 
key);
! extern void info_search_next (WINDOW *window, int count, unsigned char key);
! extern void info_search_previous (WINDOW *window, int count, unsigned char 
key);
  
  /* Dumping and printing nodes. */
! extern void info_print_node (WINDOW *window, int count, unsigned char key);
! 
! /* Footnotes.  */
! extern void info_show_footnotes (WINDOW *window, int count, unsigned char 
key);
  
  /* Miscellaneous commands. */
! extern void info_abort_key (WINDOW *window, int count, unsigned char key);
! extern void info_quit (WINDOW *window, int count, unsigned char key);
! extern void info_do_lowercase_version (WINDOW *window, int count,
!     unsigned char key);
  
  #endif /* not SESSION_H */

Index: signals.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/signals.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** signals.c   6 Dec 2003 01:33:07 -0000       1.1.1.1
--- signals.c   13 Mar 2004 15:52:46 -0000      1.2
***************
*** 24,27 ****
--- 24,29 ----
  #include "signals.h"
  
+ void initialize_info_signal_handler (void);
+ 
  /* **************************************************************** */
  /*                                                                  */
***************
*** 65,70 ****
    defined (HAVE_SIGSETMASK)
  static void
! mask_termsig (set)
!   sigset_t *set;
  {
  # if defined (SIGTSTP)
--- 67,71 ----
    defined (HAVE_SIGSETMASK)
  static void
! mask_termsig (sigset_t *set)
  {
  # if defined (SIGTSTP)
***************
*** 88,92 ****
  #endif /* HAVE_SIGACTION || HAVE_SIGPROCMASK || HAVE_SIGSETMASK */
  
! static RETSIGTYPE info_signal_proc ();
  #if defined (HAVE_SIGACTION)
  typedef struct sigaction signal_info;
--- 89,93 ----
  #endif /* HAVE_SIGACTION || HAVE_SIGPROCMASK || HAVE_SIGSETMASK */
  
! static RETSIGTYPE info_signal_proc (int sig);
  #if defined (HAVE_SIGACTION)
  typedef struct sigaction signal_info;
***************
*** 94,100 ****
  
  static void
! set_termsig (sig, old)
!   int sig;
!   signal_info *old;
  {
    sigaction (sig, &info_signal_handler, old);
--- 95,99 ----
  
  static void
! set_termsig (int sig, signal_info *old)
  {
    sigaction (sig, &info_signal_handler, old);
***************
*** 102,108 ****
  
  static void
! restore_termsig (sig, saved)
!   int sig;
!   const signal_info *saved;
  {
    sigaction (sig, saved, NULL);
--- 101,105 ----
  
  static void
! restore_termsig (int sig, const signal_info *saved)
  {
    sigaction (sig, saved, NULL);
***************
*** 121,125 ****
  
  void
! initialize_info_signal_handler ()
  {
  #if defined (HAVE_SIGACTION)
--- 118,122 ----
  
  void
! initialize_info_signal_handler (void)
  {
  #if defined (HAVE_SIGACTION)
***************
*** 154,158 ****
  
  static void
! redisplay_after_signal ()
  {
    terminal_clear_screen ();
--- 151,155 ----
  
  static void
! redisplay_after_signal (void)
  {
    terminal_clear_screen ();
***************
*** 165,169 ****
  
  static void
! reset_info_window_sizes ()
  {
    terminal_goto_xy (0, 0);
--- 162,166 ----
  
  static void
! reset_info_window_sizes (void)
  {
    terminal_goto_xy (0, 0);
***************
*** 173,185 ****
    terminal_prep_terminal ();
    display_initialize_display (screenwidth, screenheight);
!   window_new_screen_size (screenwidth, screenheight, NULL);
    redisplay_after_signal ();
  }
  
  static RETSIGTYPE
! info_signal_proc (sig)
!      int sig;
  {
!   signal_info *old_signal_handler;
  
  #if !defined (HAVE_SIGACTION)
--- 170,181 ----
    terminal_prep_terminal ();
    display_initialize_display (screenwidth, screenheight);
!   window_new_screen_size (screenwidth, screenheight);
    redisplay_after_signal ();
  }
  
  static RETSIGTYPE
! info_signal_proc (int sig)
  {
!   signal_info *old_signal_handler = NULL;
  
  #if !defined (HAVE_SIGACTION)

Index: terminal.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/terminal.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** terminal.c  6 Dec 2003 01:33:09 -0000       1.1.1.1
--- terminal.c  13 Mar 2004 15:52:46 -0000      1.2
***************
*** 117,122 ****
     does so, so fine.  */
  static int
! output_character_function (c)
!      int c;
  {
    putc (c, stdout);
--- 117,121 ----
     does so, so fine.  */
  static int
! output_character_function (int c)
  {
    putc (c, stdout);
***************
*** 133,139 ****
  /* Tell the terminal that we will be doing cursor addressable motion.  */
  static void
! terminal_begin_using_terminal ()
  {
!   RETSIGTYPE (*sigsave) ();
  
    if (term_keypad_on)
--- 132,138 ----
  /* Tell the terminal that we will be doing cursor addressable motion.  */
  static void
! terminal_begin_using_terminal (void)
  {
!   RETSIGTYPE (*sigsave) (int signum);
  
    if (term_keypad_on)
***************
*** 164,170 ****
     addressable motion. */
  static void
! terminal_end_using_terminal ()
  {
!   RETSIGTYPE (*sigsave) ();
  
    if (term_keypad_off)
--- 163,169 ----
     addressable motion. */
  static void
! terminal_end_using_terminal (void)
  {
!   RETSIGTYPE (*sigsave) (int signum);
  
    if (term_keypad_off)
***************
*** 231,236 ****
  /* Move the cursor to the terminal location of X and Y. */
  void
! terminal_goto_xy (x, y)
!      int x, y;
  {
    if (terminal_goto_xy_hook)
--- 230,234 ----
  /* Move the cursor to the terminal location of X and Y. */
  void
! terminal_goto_xy (int x, int y)
  {
    if (terminal_goto_xy_hook)
***************
*** 245,250 ****
  /* Print STRING to the terminal at the current position. */
  void
! terminal_put_text (string)
!      char *string;
  {
    if (terminal_put_text_hook)
--- 243,247 ----
  /* Print STRING to the terminal at the current position. */
  void
! terminal_put_text (char *string)
  {
    if (terminal_put_text_hook)
***************
*** 258,264 ****
  /* Print NCHARS from STRING to the terminal at the current position. */
  void
! terminal_write_chars (string, nchars)
!      char *string;
!      int nchars;
  {
    if (terminal_write_chars_hook)
--- 255,259 ----
  /* Print NCHARS from STRING to the terminal at the current position. */
  void
! terminal_write_chars (char *string, int nchars)
  {
    if (terminal_write_chars_hook)
***************
*** 273,277 ****
  /* Clear from the current position of the cursor to the end of the line. */
  void
! terminal_clear_to_eol ()
  {
    if (terminal_clear_to_eol_hook)
--- 268,272 ----
  /* Clear from the current position of the cursor to the end of the line. */
  void
! terminal_clear_to_eol (void)
  {
    if (terminal_clear_to_eol_hook)
***************
*** 285,289 ****
  /* Clear the entire terminal screen. */
  void
! terminal_clear_screen ()
  {
    if (terminal_clear_screen_hook)
--- 280,284 ----
  /* Clear the entire terminal screen. */
  void
! terminal_clear_screen (void)
  {
    if (terminal_clear_screen_hook)
***************
*** 297,301 ****
  /* Move the cursor up one line. */
  void
! terminal_up_line ()
  {
    if (terminal_up_line_hook)
--- 292,296 ----
  /* Move the cursor up one line. */
  void
! terminal_up_line (void)
  {
    if (terminal_up_line_hook)
***************
*** 309,313 ****
  /* Move the cursor down one line. */
  void
! terminal_down_line ()
  {
    if (terminal_down_line_hook)
--- 304,308 ----
  /* Move the cursor down one line. */
  void
! terminal_down_line (void)
  {
    if (terminal_down_line_hook)
***************
*** 321,325 ****
  /* Turn on reverse video if possible. */
  void
! terminal_begin_inverse ()
  {
    if (terminal_begin_inverse_hook)
--- 316,320 ----
  /* Turn on reverse video if possible. */
  void
! terminal_begin_inverse (void)
  {
    if (terminal_begin_inverse_hook)
***************
*** 333,337 ****
  /* Turn off reverse video if possible. */
  void
! terminal_end_inverse ()
  {
    if (terminal_end_inverse_hook)
--- 328,332 ----
  /* Turn off reverse video if possible. */
  void
! terminal_end_inverse (void)
  {
    if (terminal_end_inverse_hook)
***************
*** 346,350 ****
     terminal_use_visible_bell_p is non-zero. */
  void
! terminal_ring_bell ()
  {
    if (terminal_ring_bell_hook)
--- 341,345 ----
     terminal_use_visible_bell_p is non-zero. */
  void
! terminal_ring_bell (void)
  {
    if (terminal_ring_bell_hook)
***************
*** 361,366 ****
  /* At the line START, delete COUNT lines from the terminal display. */
  static void
! terminal_delete_lines (start, count)
!      int start, count;
  {
    int lines;
--- 356,360 ----
  /* At the line START, delete COUNT lines from the terminal display. */
  static void
! terminal_delete_lines (int start, int count)
  {
    int lines;
***************
*** 385,390 ****
  /* At the line START, insert COUNT lines in the terminal display. */
  static void
! terminal_insert_lines (start, count)
!      int start, count;
  {
    int lines;
--- 379,383 ----
  /* At the line START, insert COUNT lines in the terminal display. */
  static void
! terminal_insert_lines (int start, int count)
  {
    int lines;
***************
*** 413,418 ****
     bottom of the screen. */
  void
! terminal_scroll_terminal (start, end, amount)
!      int start, end, amount;
  {
    if (!terminal_can_scroll)
--- 406,410 ----
     bottom of the screen. */
  void
! terminal_scroll_terminal (int start, int end, int amount)
  {
    if (!terminal_can_scroll)
***************
*** 450,455 ****
     has changed. */
  void
! terminal_new_terminal (terminal_name)
!      char *terminal_name;
  {
    if (terminal_new_terminal_hook)
--- 442,446 ----
     has changed. */
  void
! terminal_new_terminal (char *terminal_name)
  {
    if (terminal_new_terminal_hook)
***************
*** 463,467 ****
  /* Set the global variables SCREENWIDTH and SCREENHEIGHT. */
  void
! terminal_get_screen_size ()
  {
    if (terminal_get_screen_size_hook)
--- 454,458 ----
  /* Set the global variables SCREENWIDTH and SCREENHEIGHT. */
  void
! terminal_get_screen_size (void)
  {
    if (terminal_get_screen_size_hook)
***************
*** 523,528 ****
     key.  Finally, the terminal screen is cleared. */
  void
! terminal_initialize_terminal (terminal_name)
!      char *terminal_name;
  {
    char *buffer;
--- 514,518 ----
     key.  Finally, the terminal screen is cleared. */
  void
! terminal_initialize_terminal (char *terminal_name)
  {
    char *buffer;
***************
*** 705,709 ****
  /* Prepare to start using the terminal to read characters singly. */
  void
! terminal_prep_terminal ()
  {
    int tty;
--- 695,699 ----
  /* Prepare to start using the terminal to read characters singly. */
  void
! terminal_prep_terminal (void)
  {
    int tty;
***************
*** 845,849 ****
     this terminal. */
  void
! terminal_unprep_terminal ()
  {
    int tty;
--- 835,839 ----
     this terminal. */
  void
! terminal_unprep_terminal (void)
  {
    int tty;

Index: terminal.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/terminal.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** terminal.h  6 Dec 2003 01:33:09 -0000       1.1.1.1
--- terminal.h  13 Mar 2004 15:52:46 -0000      1.2
***************
*** 53,106 ****
     this terminal actually has.  The variable TERMINAL_HAS_META_P becomes non-
     zero if this terminal supports a Meta key. */
! extern void terminal_initialize_terminal ();
  extern VFunction *terminal_initialize_terminal_hook;
  
  /* Return the current screen width and height in the variables
     SCREENWIDTH and SCREENHEIGHT. */
! extern void terminal_get_screen_size ();
  extern VFunction *terminal_get_screen_size_hook;
  
  /* Save and restore tty settings. */
! extern void terminal_prep_terminal (), terminal_unprep_terminal ();
! extern VFunction *terminal_prep_terminal_hook, *terminal_unprep_terminal_hook;
  
  /* Re-initialize the terminal to TERMINAL_NAME. */
! extern void terminal_new_terminal ();
  extern VFunction *terminal_new_terminal_hook;
  
  /* Move the cursor to the terminal location of X and Y. */
! extern void terminal_goto_xy ();
  extern VFunction *terminal_goto_xy_hook;
  
  /* Print STRING to the terminal at the current position. */
! extern void terminal_put_text ();
  extern VFunction *terminal_put_text_hook;
  
  /* Print NCHARS from STRING to the terminal at the current position. */
! extern void terminal_write_chars ();
  extern VFunction *terminal_write_chars_hook;
  
  /* Clear from the current position of the cursor to the end of the line. */
! extern void terminal_clear_to_eol ();
  extern VFunction *terminal_clear_to_eol_hook;
  
  /* Clear the entire terminal screen. */
! extern void terminal_clear_screen ();
  extern VFunction *terminal_clear_screen_hook;
  
  /* Move the cursor up one line. */
! extern void terminal_up_line ();
  extern VFunction *terminal_up_line_hook;
  
  /* Move the cursor down one line. */
! extern void terminal_down_line ();
  extern VFunction *terminal_down_line_hook;
  
  /* Turn on reverse video if possible. */
! extern void terminal_begin_inverse ();
  extern VFunction *terminal_begin_inverse_hook;
  
  /* Turn off reverse video if possible. */
! extern void terminal_end_inverse ();
  extern VFunction *terminal_end_inverse_hook;
  
--- 53,109 ----
     this terminal actually has.  The variable TERMINAL_HAS_META_P becomes non-
     zero if this terminal supports a Meta key. */
! extern void terminal_initialize_terminal (char *terminal_name);
  extern VFunction *terminal_initialize_terminal_hook;
  
  /* Return the current screen width and height in the variables
     SCREENWIDTH and SCREENHEIGHT. */
! extern void terminal_get_screen_size (void);
  extern VFunction *terminal_get_screen_size_hook;
  
  /* Save and restore tty settings. */
! extern void terminal_prep_terminal (void);
! extern void terminal_unprep_terminal (void);
! 
! extern VFunction *terminal_prep_terminal_hook;
! extern VFunction *terminal_unprep_terminal_hook;
  
  /* Re-initialize the terminal to TERMINAL_NAME. */
! extern void terminal_new_terminal (char *terminal_name);
  extern VFunction *terminal_new_terminal_hook;
  
  /* Move the cursor to the terminal location of X and Y. */
! extern void terminal_goto_xy (int x, int y);
  extern VFunction *terminal_goto_xy_hook;
  
  /* Print STRING to the terminal at the current position. */
! extern void terminal_put_text (char *string);
  extern VFunction *terminal_put_text_hook;
  
  /* Print NCHARS from STRING to the terminal at the current position. */
! extern void terminal_write_chars (char *string, int nchars);
  extern VFunction *terminal_write_chars_hook;
  
  /* Clear from the current position of the cursor to the end of the line. */
! extern void terminal_clear_to_eol (void);
  extern VFunction *terminal_clear_to_eol_hook;
  
  /* Clear the entire terminal screen. */
! extern void terminal_clear_screen (void);
  extern VFunction *terminal_clear_screen_hook;
  
  /* Move the cursor up one line. */
! extern void terminal_up_line (void);
  extern VFunction *terminal_up_line_hook;
  
  /* Move the cursor down one line. */
! extern void terminal_down_line (void);
  extern VFunction *terminal_down_line_hook;
  
  /* Turn on reverse video if possible. */
! extern void terminal_begin_inverse (void);
  extern VFunction *terminal_begin_inverse_hook;
  
  /* Turn off reverse video if possible. */
! extern void terminal_end_inverse (void);
  extern VFunction *terminal_end_inverse_hook;
  
***************
*** 109,118 ****
     towards the top of the screen, else they are scrolled towards the
     bottom of the screen. */
! extern void terminal_scroll_terminal ();
  extern VFunction *terminal_scroll_terminal_hook;
  
  /* Ring the terminal bell.  The bell is run visibly if it both has one and
     terminal_use_visible_bell_p is non-zero. */
! extern void terminal_ring_bell ();
  extern VFunction *terminal_ring_bell_hook;
  
--- 112,121 ----
     towards the top of the screen, else they are scrolled towards the
     bottom of the screen. */
! extern void terminal_scroll_terminal (int start, int end, int amount);
  extern VFunction *terminal_scroll_terminal_hook;
  
  /* Ring the terminal bell.  The bell is run visibly if it both has one and
     terminal_use_visible_bell_p is non-zero. */
! extern void terminal_ring_bell (void);
  extern VFunction *terminal_ring_bell_hook;
  

Index: tilde.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/tilde.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** tilde.c     6 Dec 2003 01:33:09 -0000       1.1.1.1
--- tilde.c     13 Mar 2004 15:52:46 -0000      1.2
***************
*** 23,26 ****
--- 23,27 ----
  /* Include config.h before doing alloca.  */
  #include "info.h"
+ #include "tilde.h"
  
  #if defined (TEST) || defined (STATIC_MALLOC)
***************
*** 60,66 ****
     which identified this tilde starter in LEN, excluding the tilde itself. */
  static int
! tilde_find_prefix (string, len)
!      char *string;
!      int *len;
  {
    register int i, j, string_len;
--- 61,65 ----
     which identified this tilde starter in LEN, excluding the tilde itself. */
  static int
! tilde_find_prefix (char *string, int *len)
  {
    register int i, j, string_len;
***************
*** 93,98 ****
     the character which ends the tilde definition.  */
  static int
! tilde_find_suffix (string)
!      char *string;
  {
    register int i, j, string_len;
--- 92,96 ----
     the character which ends the tilde definition.  */
  static int
! tilde_find_suffix (char *string)
  {
    register int i, j, string_len;
***************
*** 117,124 ****
  /* Return a new string which is the result of tilde expanding STRING. */
  char *
! tilde_expand (string)
!      char *string;
  {
!   char *result, *tilde_expand_word ();
    int result_size, result_index;
  
--- 115,121 ----
  /* Return a new string which is the result of tilde expanding STRING. */
  char *
! tilde_expand (char *string)
  {
!   char *result;
    int result_size, result_index;
  
***************
*** 180,185 ****
     tilde.  If there is no expansion, call tilde_expansion_failure_hook. */
  char *
! tilde_expand_word (filename)
!      char *filename;
  {
    char *dirname = filename ? xstrdup (filename) : NULL;
--- 177,181 ----
     tilde.  If there is no expansion, call tilde_expansion_failure_hook. */
  char *
! tilde_expand_word (char *filename)
  {
    char *dirname = filename ? xstrdup (filename) : NULL;
***************
*** 237,243 ****
                if (tilde_expansion_failure_hook)
                  {
!                   char *expansion;
! 
!                   expansion = (*tilde_expansion_failure_hook) (username);
  
                    if (expansion)
--- 233,237 ----
                if (tilde_expansion_failure_hook)
                  {
!                   char *expansion = (*tilde_expansion_failure_hook) 
(username);
  
                    if (expansion)

Index: tilde.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/tilde.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** tilde.h     6 Dec 2003 01:33:09 -0000       1.1.1.1
--- tilde.h     13 Mar 2004 15:52:46 -0000      1.2
***************
*** 48,56 ****
  
  /* Return a new string which is the result of tilde expanding STRING. */
! extern char *tilde_expand ();
  
  /* Do the work of tilde expansion on FILENAME.  FILENAME starts with a
     tilde.  If there is no expansion, call tilde_expansion_failure_hook. */
! extern char *tilde_expand_word ();
  
  #endif /* not TILDE_H */
--- 48,56 ----
  
  /* Return a new string which is the result of tilde expanding STRING. */
! extern char *tilde_expand (char *string);
  
  /* Do the work of tilde expansion on FILENAME.  FILENAME starts with a
     tilde.  If there is no expansion, call tilde_expansion_failure_hook. */
! extern char *tilde_expand_word (char *filename);
  
  #endif /* not TILDE_H */

Index: variables.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/variables.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** variables.c 6 Dec 2003 01:33:09 -0000       1.1.1.1
--- variables.c 13 Mar 2004 15:52:46 -0000      1.2
***************
*** 78,82 ****
  
    /* Get the variable's name. */
!   var = read_variable_name (_("Describe variable: "), window);
  
    if (!var)
--- 78,82 ----
  
    /* Get the variable's name. */
!   var = read_variable_name ((char *) _("Describe variable: "), window);
  
    if (!var)
***************
*** 93,97 ****
             var->name, *(var->value), _(var->doc));
  
!   window_message_in_echo_area ("%s", description);
    free (description);
  }
--- 93,97 ----
             var->name, *(var->value), _(var->doc));
  
!   window_message_in_echo_area ("%s", description, NULL);
    free (description);
  }
***************
*** 103,107 ****
  
    /* Get the variable's name and value. */
!   var = read_variable_name (_("Set variable: "), window);
  
    if (!var)
--- 103,107 ----
  
    /* Get the variable's name and value. */
!   var = read_variable_name ((char *) _("Set variable: "), window);
  
    if (!var)
***************
*** 202,208 ****
     that no variable could be read. */
  VARIABLE_ALIST *
! read_variable_name (prompt, window)
!      char *prompt;
!      WINDOW *window;
  {
    register int i;
--- 202,206 ----
     that no variable could be read. */
  VARIABLE_ALIST *
! read_variable_name (char *prompt, WINDOW *window)
  {
    register int i;
***************
*** 250,254 ****
     variables available in Info. */
  REFERENCE **
! make_variable_completions_array ()
  {
    register int i;
--- 248,252 ----
     variables available in Info. */
  REFERENCE **
! make_variable_completions_array (void)
  {
    register int i;
***************
*** 275,281 ****
  
  void
! set_variable_to_value(name, value)
!       char *name;
!       char *value;
  {
        register int i;
--- 273,277 ----
  
  void
! set_variable_to_value(char *name, char *value)
  {
        register int i;

Index: variables.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/variables.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** variables.h 6 Dec 2003 01:33:09 -0000       1.1.1.1
--- variables.h 13 Mar 2004 15:52:46 -0000      1.2
***************
*** 43,54 ****
     address of a VARIABLE_ALIST member.  A return value of NULL indicates
     that no variable could be read. */
! extern VARIABLE_ALIST *read_variable_name ();
  
  /* Make an array of REFERENCE which actually contains the names of the
     variables available in Info. */
! extern REFERENCE **make_variable_completions_array ();
  
  /* Set the value of an info variable. */
! extern void set_variable ();
  
  /* The list of user-visible variables. */
--- 43,55 ----
     address of a VARIABLE_ALIST member.  A return value of NULL indicates
     that no variable could be read. */
! extern VARIABLE_ALIST *read_variable_name (char *prompt, WINDOW *window);
  
  /* Make an array of REFERENCE which actually contains the names of the
     variables available in Info. */
! extern REFERENCE **make_variable_completions_array (void);
  
  /* Set the value of an info variable. */
! extern void set_variable (WINDOW *window, int count, unsigned char key);
! extern void describe_variable (WINDOW *window, int count, unsigned char key);
  
  /* The list of user-visible variables. */

Index: window.c
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/window.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** window.c    6 Dec 2003 01:33:11 -0000       1.1.1.1
--- window.c    13 Mar 2004 15:52:46 -0000      1.2
***************
*** 52,57 ****
     You pass the dimensions of the total screen size. */
  void
! window_initialize_windows (width, height)
!      int width, height;
  {
    the_screen = xmalloc (sizeof (WINDOW));
--- 52,56 ----
     You pass the dimensions of the total screen size. */
  void
! window_initialize_windows (int width, int height)
  {
    the_screen = xmalloc (sizeof (WINDOW));
***************
*** 84,88 ****
    the_echo_area->height = ECHO_AREA_HEIGHT;
    active_window->height = the_screen->height - 1 - the_echo_area->height;
!   window_new_screen_size (width, height, NULL);
  
    /* The echo area uses a different keymap than normal info windows. */
--- 83,87 ----
    the_echo_area->height = ECHO_AREA_HEIGHT;
    active_window->height = the_screen->height - 1 - the_echo_area->height;
!   window_new_screen_size (width, height);
  
    /* The echo area uses a different keymap than normal info windows. */
***************
*** 104,109 ****
  
  void
! window_new_screen_size (width, height)
!      int width, height;
  {
    register WINDOW *win;
--- 103,107 ----
  
  void
! window_new_screen_size (int width, int height)
  {
    register WINDOW *win;
***************
*** 233,237 ****
                (win->height > avail))
              {
!               WINDOW *lastwin;
  
                /* Split the space among the available windows. */
--- 231,235 ----
                (win->height > avail))
              {
!               WINDOW *lastwin = NULL;
  
                /* Split the space among the available windows. */
***************
*** 263,268 ****
     active window is not changed.*/
  WINDOW *
! window_make_window (node)
!      NODE *node;
  {
    WINDOW *window;
--- 261,265 ----
     active window is not changed.*/
  WINDOW *
! window_make_window (NODE *node)
  {
    WINDOW *window;
***************
*** 378,384 ****
     window, then no change takes place. */
  void
! window_change_window_height (window, amount)
!      WINDOW *window;
!      int amount;
  {
    register WINDOW *win, *prev, *next;
--- 375,379 ----
     window, then no change takes place. */
  void
! window_change_window_height (WINDOW *window, int amount)
  {
    register WINDOW *win, *prev, *next;
***************
*** 511,516 ****
     windows. */
  void
! window_tile_windows (style)
!      int style;
  {
    WINDOW *win, *last_adjusted;
--- 506,510 ----
     windows. */
  void
! window_tile_windows (int style)
  {
    WINDOW *win, *last_adjusted;
***************
*** 565,570 ****
     redisplay. */
  void
! window_toggle_wrap (window)
!      WINDOW *window;
  {
    if (window->flags & W_NoWrap)
--- 559,563 ----
     redisplay. */
  void
! window_toggle_wrap (WINDOW *window)
  {
    if (window->flags & W_NoWrap)
***************
*** 600,606 ****
  /* Set WINDOW to display NODE. */
  void
! window_set_node_of_window (window, node)
!      WINDOW *window;
!      NODE *node;
  {
    window->node = node;
--- 593,597 ----
  /* Set WINDOW to display NODE. */
  void
! window_set_node_of_window (WINDOW *window, NODE *node)
  {
    window->node = node;
***************
*** 620,625 ****
     as the recipient of the extra space.  Otherwise, prefer the next window. */
  void
! window_delete_window (window)
!      WINDOW *window;
  {
    WINDOW *next, *prev, *window_to_fix;
--- 611,615 ----
     as the recipient of the extra space.  Otherwise, prefer the next window. */
  void
! window_delete_window (WINDOW *window)
  {
    WINDOW *next, *prev, *window_to_fix;
***************
*** 692,698 ****
  /* For every window in CHAIN, set the flags member to have FLAG set. */
  void
! window_mark_chain (chain, flag)
!      WINDOW *chain;
!      int flag;
  {
    register WINDOW *win;
--- 682,686 ----
  /* For every window in CHAIN, set the flags member to have FLAG set. */
  void
! window_mark_chain (WINDOW *chain, int flag)
  {
    register WINDOW *win;
***************
*** 704,710 ****
  /* For every window in CHAIN, clear the flags member of FLAG. */
  void
! window_unmark_chain (chain, flag)
!      WINDOW *chain;
!      int flag;
  {
    register WINDOW *win;
--- 692,696 ----
  /* For every window in CHAIN, clear the flags member of FLAG. */
  void
! window_unmark_chain (WINDOW *chain, int flag)
  {
    register WINDOW *win;
***************
*** 717,722 ****
     screen at HPOS. */
  int
! character_width (character, hpos)
!      int character, hpos;
  {
    int printable_limit = 127;
--- 703,707 ----
     screen at HPOS. */
  int
! character_width (int character, int hpos)
  {
    int printable_limit = 127;
***************
*** 752,758 ****
     at HPOS. */
  int
! string_width (string, hpos)
!      char *string;
!      int hpos;
  {
    register int i, width, this_char_width;
--- 737,741 ----
     at HPOS. */
  int
! string_width (char *string, int hpos)
  {
    register int i, width, this_char_width;
***************
*** 783,788 ****
     take to display.  This really only counts carriage returns. */
  int
! window_physical_lines (node)
!      NODE *node;
  {
    register int i, lines;
--- 766,770 ----
     take to display.  This really only counts carriage returns. */
  int
! window_physical_lines (NODE *node)
  {
    register int i, lines;
***************
*** 803,808 ****
     starts are pointers to the actual text within WINDOW->NODE. */
  void
! calculate_line_starts (window)
!      WINDOW *window;
  {
    register int i, hpos;
--- 785,789 ----
     starts are pointers to the actual text within WINDOW->NODE. */
  void
! calculate_line_starts (WINDOW *window)
  {
    register int i, hpos;
***************
*** 870,874 ****
  
            /* If this character fits within this line, just do the next one. */
!           if ((hpos + cwidth) < window->width)
              {
                i++;
--- 851,855 ----
  
            /* If this character fits within this line, just do the next one. */
!           if ((hpos + cwidth) < (unsigned int) window->width)
              {
                i++;
***************
*** 919,924 ****
  /* Given WINDOW, recalculate the line starts for the node it displays. */
  void
! recalculate_line_starts (window)
!      WINDOW *window;
  {
    maybe_free (window->line_starts);
--- 900,904 ----
  /* Given WINDOW, recalculate the line starts for the node it displays. */
  void
! recalculate_line_starts (WINDOW *window)
  {
    maybe_free (window->line_starts);
***************
*** 934,939 ****
  /* Adjust the pagetop of WINDOW such that the cursor point will be visible. */
  void
! window_adjust_pagetop (window)
!      WINDOW *window;
  {
    register int line = 0;
--- 914,918 ----
  /* Adjust the pagetop of WINDOW such that the cursor point will be visible. */
  void
! window_adjust_pagetop (WINDOW *window)
  {
    register int line = 0;
***************
*** 992,997 ****
  /* Return the index of the line containing point. */
  int
! window_line_of_point (window)
!      WINDOW *window;
  {
    register int i, start = 0;
--- 971,975 ----
  /* Return the index of the line containing point. */
  int
! window_line_of_point (WINDOW *window)
  {
    register int i, start = 0;
***************
*** 1015,1020 ****
  /* Get and return the goal column for this window. */
  int
! window_get_goal_column (window)
!      WINDOW *window;
  {
    if (!window->node)
--- 993,997 ----
  /* Get and return the goal column for this window. */
  int
! window_get_goal_column (WINDOW *window)
  {
    if (!window->node)
***************
*** 1031,1036 ****
  /* Get and return the printed column offset of the cursor in this window. */
  int
! window_get_cursor_column (window)
!      WINDOW *window;
  {
    int i, hpos, end;
--- 1008,1012 ----
  /* Get and return the printed column offset of the cursor in this window. */
  int
! window_get_cursor_column (WINDOW *window)
  {
    int i, hpos, end;
***************
*** 1070,1078 ****
     offset of GOAL. */
  int
! window_chars_to_goal (line, goal)
!      char *line;
!      int goal;
  {
!   register int i, check, hpos;
  
    for (hpos = 0, i = 0; line[i] != '\n'; i++)
--- 1046,1052 ----
     offset of GOAL. */
  int
! window_chars_to_goal (char *line, int goal)
  {
!   register int i, check = 0, hpos;
  
    for (hpos = 0, i = 0; line[i] != '\n'; i++)
***************
*** 1100,1105 ****
  /* Create a modeline for WINDOW, and store it in window->modeline. */
  void
! window_make_modeline (window)
!      WINDOW *window;
  {
    register int i;
--- 1074,1078 ----
  /* Create a modeline for WINDOW, and store it in window->modeline. */
  void
! window_make_modeline (WINDOW *window)
  {
    register int i;
***************
*** 1215,1221 ****
  /* Make WINDOW start displaying at PERCENT percentage of its node. */
  void
! window_goto_percentage (window, percent)
!      WINDOW *window;
!      int percent;
  {
    int desired_line;
--- 1188,1192 ----
  /* Make WINDOW start displaying at PERCENT percentage of its node. */
  void
! window_goto_percentage (WINDOW *window, int percent)
  {
    int desired_line;
***************
*** 1236,1242 ****
  /* Get the state of WINDOW, and save it in STATE. */
  void
! window_get_state (window, state)
!      WINDOW *window;
!      WINDOW_STATE *state;
  {
    state->node = window->node;
--- 1207,1211 ----
  /* Get the state of WINDOW, and save it in STATE. */
  void
! window_get_state (WINDOW *window, SEARCH_STATE *state)
  {
    state->node = window->node;
***************
*** 1247,1253 ****
  /* Set the node, pagetop, and point of WINDOW. */
  void
! window_set_state (window, state)
!      WINDOW *window;
!      WINDOW_STATE *state;
  {
    if (window->node != state->node)
--- 1216,1220 ----
  /* Set the node, pagetop, and point of WINDOW. */
  void
! window_set_state (WINDOW *window, SEARCH_STATE *state)
  {
    if (window->node != state->node)
***************
*** 1265,1269 ****
  /* Make the node of the_echo_area be an empty one. */
  static void
! free_echo_area ()
  {
    if (echo_area_node)
--- 1232,1236 ----
  /* Make the node of the_echo_area be an empty one. */
  static void
! free_echo_area (void)
  {
    if (echo_area_node)
***************
*** 1280,1284 ****
     The echo area is cleared immediately. */
  void
! window_clear_echo_area ()
  {
    free_echo_area ();
--- 1247,1251 ----
     The echo area is cleared immediately. */
  void
! window_clear_echo_area (void)
  {
    free_echo_area ();
***************
*** 1291,1297 ****
     already a message appearing in the echo area, it is removed. */
  void
! window_message_in_echo_area (format, arg1, arg2)
!      char *format;
!      void *arg1, *arg2;
  {
    free_echo_area ();
--- 1258,1262 ----
     already a message appearing in the echo area, it is removed. */
  void
! window_message_in_echo_area (char *format, void *arg1, void *arg2)
  {
    free_echo_area ();
***************
*** 1310,1316 ****
  
  void
! message_in_echo_area (format, arg1, arg2)
!      char *format;
!      void *arg1, *arg2;
  {
    if (echo_area_node)
--- 1275,1279 ----
  
  void
! message_in_echo_area (char *format, void *arg1, void *arg2)
  {
    if (echo_area_node)
***************
*** 1325,1329 ****
  
  void
! unmessage_in_echo_area ()
  {
    free_echo_area ();
--- 1288,1292 ----
  
  void
! unmessage_in_echo_area (void)
  {
    free_echo_area ();
***************
*** 1344,1349 ****
     MESSAGE_BUFFER. */
  static void
! message_buffer_resize (length)
!      int length;
  {
    if (!message_buffer)
--- 1307,1311 ----
     MESSAGE_BUFFER. */
  static void
! message_buffer_resize (int length)
  {
    if (!message_buffer)
***************
*** 1363,1369 ****
     ARG2. */
  static void
! build_message_buffer (format, arg1, arg2, arg3)
!      char *format;
!      void *arg1, *arg2, *arg3;
  {
    register int i, len;
--- 1325,1329 ----
     ARG2. */
  static void
! build_message_buffer (char *format, void *arg1, void *arg2, void *arg3)
  {
    register int i, len;
***************
*** 1512,1518 ****
     contents. */
  NODE *
! build_message_node (format, arg1, arg2)
!      char *format;
!      void *arg1, *arg2;
  {
    NODE *node;
--- 1472,1476 ----
     contents. */
  NODE *
! build_message_node (char *format, void *arg1, void *arg2)
  {
    NODE *node;
***************
*** 1527,1531 ****
  /* Convert the contents of the message buffer to a node. */
  NODE *
! message_buffer_to_node ()
  {
    NODE *node;
--- 1485,1489 ----
  /* Convert the contents of the message buffer to a node. */
  NODE *
! message_buffer_to_node (void)
  {
    NODE *node;
***************
*** 1549,1553 ****
  /* Useful functions can be called from outside of window.c. */
  void
! initialize_message_buffer ()
  {
    message_buffer_index = 0;
--- 1507,1511 ----
  /* Useful functions can be called from outside of window.c. */
  void
! initialize_message_buffer (void)
  {
    message_buffer_index = 0;
***************
*** 1556,1562 ****
  /* Print FORMAT with ARG1,2 to the end of the current message buffer. */
  void
! printf_to_message_buffer (format, arg1, arg2, arg3)
!      char *format;
!      void *arg1, *arg2, *arg3;
  {
    build_message_buffer (format, arg1, arg2, arg3);
--- 1514,1518 ----
  /* Print FORMAT with ARG1,2 to the end of the current message buffer. */
  void
! printf_to_message_buffer (char *format, void *arg1, void *arg2, void *arg3)
  {
    build_message_buffer (format, arg1, arg2, arg3);
***************
*** 1566,1570 ****
     recently output message buffer line. */
  int
! message_buffer_length_this_line ()
  {
    register int i;
--- 1522,1526 ----
     recently output message buffer line. */
  int
! message_buffer_length_this_line (void)
  {
    register int i;
***************
*** 1580,1586 ****
  /* Pad STRING to COUNT characters by inserting blanks. */
  int
! pad_to (count, string)
!      int count;
!      char *string;
  {
    register int i;
--- 1536,1540 ----
  /* Pad STRING to COUNT characters by inserting blanks. */
  int
! pad_to (int count, char *string)
  {
    register int i;

Index: window.h
===================================================================
RCS file: /cvsroot/texinfo/texinfo/info/window.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** window.h    6 Dec 2003 01:33:12 -0000       1.1.1.1
--- window.h    13 Mar 2004 15:52:46 -0000      1.2
***************
*** 26,31 ****
  #define INFO_WINDOW_H
  
- #include "nodes.h"
  #include "infomap.h"
  
  /* Smallest number of visible lines in a window.  The actual height is
--- 26,31 ----
  #define INFO_WINDOW_H
  
  #include "infomap.h"
+ #include "nodes.h"
  
  /* Smallest number of visible lines in a window.  The actual height is
***************
*** 76,79 ****
--- 76,87 ----
  } WINDOW_STATE;
  
+ /* Structure defining the current state of an incremental search. */
+ typedef struct {
+   WINDOW_STATE_DECL;    /* The node, pagetop and point. */
+   int search_index;     /* Offset of the last char in the search string. */
+   int direction;        /* The direction that this search is heading in. */
+   int failing;          /* Whether or not this search failed. */
+ } SEARCH_STATE;
+ 
  #define W_UpdateWindow  0x01    /* WINDOW needs updating. */
  #define W_WindowIsPerm  0x02    /* This WINDOW is a permanent object. */
***************
*** 96,105 ****
  
   /* Make the modeline member for WINDOW. */
! extern void window_make_modeline ();
  
  /* Initalize the window system by creating THE_SCREEN and THE_ECHO_AREA.
     Create the first window ever, and make it permanent.
     You pass WIDTH and HEIGHT; the dimensions of the total screen size. */
! extern void window_initialize_windows ();
  
  /* Make a new window showing NODE, and return that window structure.
--- 104,113 ----
  
   /* Make the modeline member for WINDOW. */
! extern void window_make_modeline (WINDOW *window);
  
  /* Initalize the window system by creating THE_SCREEN and THE_ECHO_AREA.
     Create the first window ever, and make it permanent.
     You pass WIDTH and HEIGHT; the dimensions of the total screen size. */
! extern void window_initialize_windows (int width, int height);
  
  /* Make a new window showing NODE, and return that window structure.
***************
*** 108,117 ****
     window could not be made return a NULL pointer.  The active window
     is not changed.*/
! extern WINDOW *window_make_window ();
  
  /* Delete WINDOW from the list of known windows.  If this window was the
     active window, make the next window in the chain be the active window,
     or the previous window in the chain if there is no next window. */
! extern void window_delete_window ();
  
  /* A function to call when the screen changes size, and some windows have
--- 116,125 ----
     window could not be made return a NULL pointer.  The active window
     is not changed.*/
! extern WINDOW *window_make_window (NODE *node);
  
  /* Delete WINDOW from the list of known windows.  If this window was the
     active window, make the next window in the chain be the active window,
     or the previous window in the chain if there is no next window. */
! extern void window_delete_window (WINDOW *window);
  
  /* A function to call when the screen changes size, and some windows have
***************
*** 122,126 ****
  
  /* Set WINDOW to display NODE. */
! extern void window_set_node_of_window ();
  
  /* Tell the window system that the size of the screen has changed.  This
--- 130,134 ----
  
  /* Set WINDOW to display NODE. */
! extern void window_set_node_of_window (WINDOW *window, NODE *node);
  
  /* Tell the window system that the size of the screen has changed.  This
***************
*** 128,140 ****
     are resized, as well as every visible window.  You pass WIDTH and HEIGHT;
     the dimensions of the total screen size. */
! extern void window_new_screen_size ();
  
  /* Change the height of WINDOW by AMOUNT.  This also automagically adjusts
     the previous and next windows in the chain.  If there is only one user
     window, then no change takes place. */
! extern void window_change_window_height ();
  
  /* Adjust the pagetop of WINDOW such that the cursor point will be visible. */
! extern void window_adjust_pagetop ();
  
  /* Tile all of the windows currently displayed in the global variable
--- 136,148 ----
     are resized, as well as every visible window.  You pass WIDTH and HEIGHT;
     the dimensions of the total screen size. */
! extern void window_new_screen_size (int width, int height);
  
  /* Change the height of WINDOW by AMOUNT.  This also automagically adjusts
     the previous and next windows in the chain.  If there is only one user
     window, then no change takes place. */
! extern void window_change_window_height (WINDOW *window, int amount);
  
  /* Adjust the pagetop of WINDOW such that the cursor point will be visible. */
! extern void window_adjust_pagetop (WINDOW *window);
  
  /* Tile all of the windows currently displayed in the global variable
***************
*** 143,179 ****
  #define DONT_TILE_INTERNALS 0
  #define TILE_INTERNALS      1
! extern void window_tile_windows ();
  
  /* Toggle the state of line wrapping in WINDOW.  This can do a bit of fancy
     redisplay. */
! extern void window_toggle_wrap ();
  
  /* For every window in CHAIN, set the flags member to have FLAG set. */
! extern void window_mark_chain ();
  
  /* For every window in CHAIN, clear the flags member of FLAG. */
! extern void window_unmark_chain ();
  
  /* Make WINDOW start displaying at PERCENT percentage of its node. */
! extern void window_goto_percentage ();
  
  /* Build a new node which has FORMAT printed with ARG1 and ARG2 as the
     contents. */
! extern NODE *build_message_node ();
  
  /* Useful functions can be called from outside of window.c. */
! extern void initialize_message_buffer ();
  
  /* Print FORMAT with ARG1,2 to the end of the current message buffer. */
! extern void printf_to_message_buffer ();
  
  /* Convert the contents of the message buffer to a node. */
! extern NODE *message_buffer_to_node ();
  
  /* Return the length of the most recently printed line in message buffer. */
! extern int message_buffer_length_this_line ();
  
  /* Pad STRING to COUNT characters by inserting blanks. */
! extern int pad_to ();
  
  /* Make a message appear in the echo area, built from FORMAT, ARG1 and ARG2.
--- 151,188 ----
  #define DONT_TILE_INTERNALS 0
  #define TILE_INTERNALS      1
! extern void window_tile_windows (int style);
  
  /* Toggle the state of line wrapping in WINDOW.  This can do a bit of fancy
     redisplay. */
! extern void window_toggle_wrap (WINDOW *window);
  
  /* For every window in CHAIN, set the flags member to have FLAG set. */
! extern void window_mark_chain (WINDOW *chain, int flag);
  
  /* For every window in CHAIN, clear the flags member of FLAG. */
! extern void window_unmark_chain (WINDOW *chain, int flag);
  
  /* Make WINDOW start displaying at PERCENT percentage of its node. */
! extern void window_goto_percentage (WINDOW *window, int percent);
  
  /* Build a new node which has FORMAT printed with ARG1 and ARG2 as the
     contents. */
! extern NODE *build_message_node (char *format, void *arg1, void *arg2);
  
  /* Useful functions can be called from outside of window.c. */
! extern void initialize_message_buffer (void);
  
  /* Print FORMAT with ARG1,2 to the end of the current message buffer. */
! extern void printf_to_message_buffer (char *format, void *arg1, void *arg2,
!     void *arg3);
  
  /* Convert the contents of the message buffer to a node. */
! extern NODE *message_buffer_to_node (void);
  
  /* Return the length of the most recently printed line in message buffer. */
! extern int message_buffer_length_this_line (void);
  
  /* Pad STRING to COUNT characters by inserting blanks. */
! extern int pad_to (int count, char *string);
  
  /* Make a message appear in the echo area, built from FORMAT, ARG1 and ARG2.
***************
*** 181,185 ****
     printf () hair is present.  The message appears immediately.  If there was
     already a message appearing in the echo area, it is removed. */
! extern void window_message_in_echo_area ();
  
  /* Place a temporary message in the echo area built from FORMAT, ARG1
--- 190,194 ----
     printf () hair is present.  The message appears immediately.  If there was
     already a message appearing in the echo area, it is removed. */
! extern void window_message_in_echo_area (char *format, void *arg1, void 
*arg2);
  
  /* Place a temporary message in the echo area built from FORMAT, ARG1
***************
*** 187,231 ****
     any existing message.  A future call to unmessage_in_echo_area ()
     restores the old contents. */
! extern void message_in_echo_area ();
! extern void unmessage_in_echo_area ();
  
  /* Clear the echo area, removing any message that is already present.
     The echo area is cleared immediately. */
! extern void window_clear_echo_area ();
  
  /* Quickly guess the approximate number of lines to that NODE would
     take to display.  This really only counts carriage returns. */
! extern int window_physical_lines ();
  
  /* Calculate a list of line starts for the node belonging to WINDOW.  The line
     starts are pointers to the actual text within WINDOW->NODE. */
! extern void calculate_line_starts ();
  
  /* Given WINDOW, recalculate the line starts for the node it displays. */
! extern void recalculate_line_starts ();
  
  /* Return the number of characters it takes to display CHARACTER on the
     screen at HPOS. */
! extern int character_width ();
  
  /* Return the number of characters it takes to display STRING on the
     screen at HPOS. */
! extern int string_width ();
  
  /* Return the index of the line containing point. */
! extern int window_line_of_point ();
  
  /* Get and return the goal column for this window. */
! extern int window_get_goal_column ();
  
  /* Get and return the printed column offset of the cursor in this window. */
! extern int window_get_cursor_column ();
  
  /* Get and Set the node, pagetop, and point of WINDOW. */
! extern void window_get_state (), window_set_state ();
  
  /* Count the number of characters in LINE that precede the printed column
     offset of GOAL. */
! extern int window_chars_to_goal ();
  
  #endif /* not INFO_WINDOW_H */
--- 196,241 ----
     any existing message.  A future call to unmessage_in_echo_area ()
     restores the old contents. */
! extern void message_in_echo_area (char *format, void *arg1, void *arg2);
! extern void unmessage_in_echo_area (void);
  
  /* Clear the echo area, removing any message that is already present.
     The echo area is cleared immediately. */
! extern void window_clear_echo_area (void);
  
  /* Quickly guess the approximate number of lines to that NODE would
     take to display.  This really only counts carriage returns. */
! extern int window_physical_lines (NODE *node);
  
  /* Calculate a list of line starts for the node belonging to WINDOW.  The line
     starts are pointers to the actual text within WINDOW->NODE. */
! extern void calculate_line_starts (WINDOW *window);
  
  /* Given WINDOW, recalculate the line starts for the node it displays. */
! extern void recalculate_line_starts (WINDOW *window);
  
  /* Return the number of characters it takes to display CHARACTER on the
     screen at HPOS. */
! extern int character_width (int character, int hpos);
  
  /* Return the number of characters it takes to display STRING on the
     screen at HPOS. */
! extern int string_width (char *string, int hpos);
  
  /* Return the index of the line containing point. */
! extern int window_line_of_point (WINDOW *window);
  
  /* Get and return the goal column for this window. */
! extern int window_get_goal_column (WINDOW *window);
  
  /* Get and return the printed column offset of the cursor in this window. */
! extern int window_get_cursor_column (WINDOW *window);
  
  /* Get and Set the node, pagetop, and point of WINDOW. */
! extern void window_get_state (WINDOW *window, SEARCH_STATE *state);
! extern void window_set_state (WINDOW *window, SEARCH_STATE *state);
  
  /* Count the number of characters in LINE that precede the printed column
     offset of GOAL. */
! extern int window_chars_to_goal (char *line, int goal);
  
  #endif /* not INFO_WINDOW_H */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]