home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 2 / RISC_DISC_2.iso / pd_share / utilities / cli / gnuinfo / Source / c / infomap < prev    next >
Encoding:
Text File  |  1994-10-01  |  8.4 KB  |  271 lines

  1. #include "defines.h"
  2. /* infomap.c -- Keymaps for Info. */
  3.  
  4. /* This file is part of GNU Info, a program for reading online documentation
  5.    stored in Info format.
  6.  
  7.    Copyright (C) 1993 Free Software Foundation, Inc.
  8.  
  9.    This program is free software; you can redistribute it and/or modify
  10.    it under the terms of the GNU General Public License as published by
  11.    the Free Software Foundation; either version 2, or (at your option)
  12.    any later version.
  13.  
  14.    This program is distributed in the hope that it will be useful,
  15.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.    GNU General Public License for more details.
  18.  
  19.    You should have received a copy of the GNU General Public License
  20.    along with this program; if not, write to the Free Software
  21.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  
  23.    Written by Brian Fox (bfox@ai.mit.edu). */
  24.  
  25. #include "stdio.h"
  26. #include "ctype.h"
  27. #include "infomap.h"
  28. #include "funs.h"
  29.  
  30. /* Return a new keymap which has all the uppercase letters mapped to run
  31.    the function info_do_lowercase_version (). */
  32. Keymap
  33. keymap_make_keymap ()
  34. {
  35.   register int i;
  36.   Keymap keymap;
  37.  
  38.   keymap = (Keymap)xmalloc (256 * sizeof (KEYMAP_ENTRY));
  39.  
  40.   for (i = 0; i < 256; i++)
  41.     {
  42.       keymap[i].type = ISFUNC;
  43.       keymap[i].function = (VFunction *)NULL;
  44.     }
  45.  
  46.   for (i = 'A'; i < ('Z' + 1); i++)
  47.     {
  48.       keymap[i].type = ISFUNC;
  49.       keymap[i].function = info_do_lowercase_version;
  50.     }
  51.  
  52.   return (keymap);
  53. }
  54.  
  55. /* Return a new keymap which is a copy of MAP. */
  56. Keymap
  57. keymap_copy_keymap (map)
  58.      Keymap map;
  59. {
  60.   register int i;
  61.   Keymap keymap;
  62.  
  63.   keymap = keymap_make_keymap ();
  64.  
  65.   for (i = 0; i < 256; i++)
  66.     {
  67.       keymap[i].type = map[i].type;
  68.       keymap[i].function = map[i].function;
  69.     }
  70.   return (keymap);
  71. }
  72.  
  73. /* Free the keymap and it's descendents. */
  74. void
  75. keymap_discard_keymap (map)
  76.      Keymap (map);
  77. {
  78.   register int i;
  79.  
  80.   if (!map)
  81.     return;
  82.  
  83.   for (i = 0; i < 256; i++)
  84.     {
  85.       switch (map[i].type)
  86.     {
  87.     case ISFUNC:
  88.       break;
  89.  
  90.     case ISKMAP:
  91.       keymap_discard_keymap ((Keymap)map[i].function);
  92.       break;
  93.  
  94.     }
  95.     }
  96. }
  97.  
  98. /* Initialize the standard info keymaps. */
  99.  
  100. Keymap info_keymap = (Keymap)NULL;
  101. Keymap echo_area_keymap = (Keymap)NULL;
  102.  
  103. void
  104. initialize_info_keymaps ()
  105. {
  106.   register int i;
  107.   Keymap map;
  108.  
  109.   if (!info_keymap)
  110.     {
  111.       info_keymap = keymap_make_keymap ();
  112.       info_keymap[ESC].type = ISKMAP;
  113.       info_keymap[ESC].function = (VFunction *)keymap_make_keymap ();
  114.       info_keymap[Control ('x')].type = ISKMAP;
  115.       info_keymap[Control ('x')].function = (VFunction *)keymap_make_keymap ();
  116.       echo_area_keymap = keymap_make_keymap ();
  117.       echo_area_keymap[ESC].type = ISKMAP;
  118.       echo_area_keymap[ESC].function = (VFunction *)keymap_make_keymap ();
  119.       echo_area_keymap[Control ('x')].type = ISKMAP;
  120.       echo_area_keymap[Control ('x')].function =
  121.     (VFunction *)keymap_make_keymap ();
  122.     }
  123.  
  124.   /* Bind numeric arg functions for both echo area and info window maps. */
  125.   for (i = '0'; i < '9' + 1; i++)
  126.     {
  127.       ((Keymap) info_keymap[ESC].function)[i].function =
  128.     ((Keymap) echo_area_keymap[ESC].function)[i].function =
  129.       info_add_digit_to_numeric_arg;
  130.     }
  131.   ((Keymap) info_keymap[ESC].function)['-'].function =
  132.     ((Keymap) echo_area_keymap[ESC].function)['-'].function =
  133.       info_add_digit_to_numeric_arg;
  134.  
  135.   /* Bind the echo area routines. */
  136.   map = echo_area_keymap;
  137.  
  138.   /* Bind the echo area insert routines. */
  139.   for (i = 0; i < 160; i++)
  140.     if (isprint (i))
  141.       map[i].function = ea_insert;
  142.  
  143.   map[Control ('a')].function = ea_beg_of_line;
  144.   map[Control ('b')].function = ea_backward;
  145.   map[Control ('d')].function = ea_delete;
  146.   map[Control ('e')].function = ea_end_of_line;
  147.   map[Control ('f')].function = ea_forward;
  148.   map[Control ('g')].function = ea_abort;
  149.   map[Control ('h')].function = ea_rubout;
  150.   map[Control ('k')].function = ea_kill_line;
  151.   map[Control ('l')].function = info_redraw_display;
  152.   map[Control ('q')].function = ea_quoted_insert;
  153.   map[Control ('t')].function = ea_transpose_chars;
  154.   map[Control ('u')].function = info_universal_argument;
  155.   map[Control ('y')].function = ea_yank;
  156.  
  157.   map[LFD].function = ea_newline;
  158.   map[RET].function = ea_newline;
  159.   map[SPC].function = ea_complete;
  160.   map[TAB].function = ea_complete;
  161.   map['?'].function = ea_possible_completions;
  162.   map[DEL].function = ea_rubout;
  163.  
  164.   /* Bind the echo area ESC keymap. */
  165.   map = (Keymap)echo_area_keymap[ESC].function;
  166.  
  167.   map[Control ('g')].function = ea_abort;
  168.   map[Control ('v')].function = ea_scroll_completions_window;
  169.   map['b'].function = ea_backward_word;
  170.   map['d'].function = ea_kill_word;
  171.   map['f'].function = ea_forward_word;
  172. #if defined (NAMED_FUNCTIONS)
  173.   /* map['x'].function = info_execute_command; */
  174. #endif /* NAMED_FUNCTIONS */
  175.   map['y'].function = ea_yank_pop;
  176.   map['?'].function = ea_possible_completions;
  177.   map[TAB].function = ea_tab_insert;
  178.   map[DEL].function = ea_backward_kill_word;
  179.  
  180.   /* Bind the echo area Control-x keymap. */
  181.   map = (Keymap)echo_area_keymap[Control ('x')].function;
  182.  
  183.   map['o'].function = info_next_window;
  184.   map[DEL].function = ea_backward_kill_line;
  185.  
  186.   /* Bind commands for Info window keymaps. */
  187.   map = info_keymap;
  188.   map[TAB].function = info_move_to_next_xref;
  189.   map[LFD].function = info_select_reference_this_line;
  190.   map[RET].function = info_select_reference_this_line;
  191.   map[SPC].function = info_scroll_forward;
  192.   map[Control ('a')].function = info_beginning_of_line;
  193.   map[Control ('b')].function = info_backward_char;
  194.   map[Control ('e')].function = info_end_of_line;
  195.   map[Control ('f')].function = info_forward_char;
  196.   map[Control ('g')].function = info_abort_key;
  197.   map[Control ('h')].function = info_get_help_window;
  198.   map[Control ('l')].function = info_redraw_display;
  199.   map[Control ('n')].function = info_next_line;
  200.   map[Control ('p')].function = info_prev_line;
  201.   map[Control ('r')].function = isearch_backward;
  202.   map[Control ('s')].function = isearch_forward;
  203.   map[Control ('u')].function = info_universal_argument;
  204.   map[Control ('v')].function = info_scroll_forward;
  205.   map[','].function = info_next_index_match;
  206.  
  207.   for (i = '1'; i < '9' + 1; i++)
  208.     map[i].function = info_menu_digit;
  209.   map['0'].function = info_last_menu_item;
  210.  
  211.   map['<'].function = info_first_node;
  212.   map['>'].function = info_last_node;
  213.   map['?'].function = info_get_help_window;
  214.   map['['].function = info_global_prev_node;
  215.   map[']'].function = info_global_next_node;
  216.  
  217.   map['b'].function = info_beginning_of_node;
  218.   map['d'].function = info_dir_node;
  219.   map['e'].function = info_end_of_node;
  220.   map['f'].function = info_xref_item;
  221.   map['g'].function = info_goto_node;
  222.   map['h'].function = info_get_info_help_node;
  223.   map['i'].function = info_index_search;
  224.   map['l'].function = info_history_node;
  225.   map['m'].function = info_menu_item;
  226.   map['n'].function = info_next_node;
  227.   map['p'].function = info_prev_node;
  228.   map['q'].function = info_quit;
  229.   map['r'].function = info_xref_item;
  230.   map['s'].function = info_search;
  231.   map['t'].function = info_top_node;
  232.   map['u'].function = info_up_node;
  233.   map[DEL].function = info_scroll_backward;
  234.  
  235.   /* Bind members in the ESC map for Info windows. */
  236.   map = (Keymap)info_keymap[ESC].function;
  237.   map[Control ('f')].function = info_show_footnotes;
  238.   map[Control ('g')].function = info_abort_key;
  239.   map[TAB].function = info_move_to_prev_xref;
  240.   map[Control ('v')].function = info_scroll_other_window;
  241.   map['<'].function = info_beginning_of_node;
  242.   map['>'].function = info_end_of_node;
  243.   map['b'].function = info_backward_word;
  244.   map['f'].function = info_forward_word;
  245.   map['r'].function = info_move_to_window_line;
  246.   map['v'].function = info_scroll_backward;
  247. #if defined (NAMED_FUNCTIONS)
  248.   map['x'].function = info_execute_command;
  249. #endif /* NAMED_FUNCTIONS */
  250.  
  251.   /* Bind members in the Control-X map for Info windows. */
  252.   map = (Keymap)info_keymap[Control ('x')].function;
  253.  
  254.   map[Control ('b')].function = list_visited_nodes;
  255.   map[Control ('c')].function = info_quit;
  256.   map[Control ('f')].function = info_view_file;
  257.   map[Control ('g')].function = info_abort_key;
  258.   map[Control ('v')].function = info_view_file;
  259.   map['0'].function = info_delete_window;
  260.   map['1'].function = info_keep_one_window;
  261.   map['2'].function = info_split_window;
  262.   map['^'].function = info_grow_window;
  263.   map['b'].function = select_visited_node;
  264.   map['k'].function = info_kill_node;
  265.   map['o'].function = info_next_window;
  266.   map['t'].function = info_tile_windows;
  267.   map['w'].function = info_toggle_wrap;
  268. }
  269.  
  270.   
  271.