home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fs.zip / octave / readline / keymaps.c < prev    next >
C/C++ Source or Header  |  2000-01-15  |  4KB  |  151 lines

  1. /* keymaps.c -- Functions and keymaps for the GNU Readline library. */
  2.  
  3. /* Copyright (C) 1988,1989 Free Software Foundation, Inc.
  4.  
  5.    This file is part of GNU Readline, a library for reading lines
  6.    of text with interactive input and history editing.
  7.  
  8.    Readline is free software; you can redistribute it and/or modify it
  9.    under the terms of the GNU General Public License as published by the
  10.    Free Software Foundation; either version 1, or (at your option) any
  11.    later version.
  12.  
  13.    Readline is distributed in the hope that it will be useful, but
  14.    WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.    General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with Readline; see the file COPYING.  If not, write to the Free
  20.    Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  21. #define READLINE_LIBRARY
  22.  
  23. #if defined (HAVE_CONFIG_H)
  24. #  include <config.h>
  25. #endif
  26.  
  27. #if defined (HAVE_STDLIB_H)
  28. #  include <stdlib.h>
  29. #else
  30. #  include "ansi_stdlib.h"
  31. #endif /* HAVE_STDLIB_H */
  32.  
  33. #include "rlconf.h"
  34. #include "keymaps.h"
  35. #include "emacs_keymap.c"
  36.  
  37. #if defined (VI_MODE)
  38. #include "vi_keymap.c"
  39. #endif
  40.  
  41. extern int rl_do_lowercase_version ();
  42. extern int rl_rubout (), rl_insert ();
  43.  
  44. extern char *xmalloc (), *xrealloc ();
  45.  
  46. /* **************************************************************** */
  47. /*                                    */
  48. /*              Functions for manipulating Keymaps.        */
  49. /*                                    */
  50. /* **************************************************************** */
  51.  
  52.  
  53. /* Return a new, empty keymap.
  54.    Free it with free() when you are done. */
  55. Keymap
  56. rl_make_bare_keymap ()
  57. {
  58.   register int i;
  59.   Keymap keymap = (Keymap)xmalloc (KEYMAP_SIZE * sizeof (KEYMAP_ENTRY));
  60.  
  61.   for (i = 0; i < KEYMAP_SIZE; i++)
  62.     {
  63.       keymap[i].type = ISFUNC;
  64.       keymap[i].function = (Function *)NULL;
  65.     }
  66.  
  67.   for (i = 'A'; i < ('Z' + 1); i++)
  68.     {
  69.       keymap[i].type = ISFUNC;
  70.       keymap[i].function = rl_do_lowercase_version;
  71.     }
  72.  
  73.   return (keymap);
  74. }
  75.  
  76. /* Return a new keymap which is a copy of MAP. */
  77. Keymap
  78. rl_copy_keymap (map)
  79.      Keymap map;
  80. {
  81.   register int i;
  82.   Keymap temp = rl_make_bare_keymap ();
  83.  
  84.   for (i = 0; i < KEYMAP_SIZE; i++)
  85.     {
  86.       temp[i].type = map[i].type;
  87.       temp[i].function = map[i].function;
  88.     }
  89.   return (temp);
  90. }
  91.  
  92. /* Return a new keymap with the printing characters bound to rl_insert,
  93.    the uppercase Meta characters bound to run their lowercase equivalents,
  94.    and the Meta digits bound to produce numeric arguments. */
  95. Keymap
  96. rl_make_keymap ()
  97. {
  98.   register int i;
  99.   Keymap newmap;
  100.  
  101.   newmap = rl_make_bare_keymap ();
  102.  
  103.   /* All ASCII printing characters are self-inserting. */
  104.   for (i = ' '; i < 127; i++)
  105.     newmap[i].function = rl_insert;
  106.  
  107.   newmap[TAB].function = rl_insert;
  108.   newmap[RUBOUT].function = rl_rubout;    /* RUBOUT == 127 */
  109.   newmap[CTRL('H')].function = rl_rubout;
  110.  
  111. #if KEYMAP_SIZE > 128
  112.   /* Printing characters in some 8-bit character sets. */
  113.   for (i = 128; i < 160; i++)
  114.     newmap[i].function = rl_insert;
  115.  
  116.   /* ISO Latin-1 printing characters should self-insert. */
  117.   for (i = 160; i < 256; i++)
  118.     newmap[i].function = rl_insert;
  119. #endif /* KEYMAP_SIZE > 128 */
  120.  
  121.   return (newmap);
  122. }
  123.  
  124. /* Free the storage associated with MAP. */
  125. void
  126. rl_discard_keymap (map)
  127.      Keymap (map);
  128. {
  129.   int i;
  130.  
  131.   if (!map)
  132.     return;
  133.  
  134.   for (i = 0; i < KEYMAP_SIZE; i++)
  135.     {
  136.       switch (map[i].type)
  137.     {
  138.     case ISFUNC:
  139.       break;
  140.  
  141.     case ISKMAP:
  142.       rl_discard_keymap ((Keymap)map[i].function);
  143.       break;
  144.  
  145.     case ISMACR:
  146.       free ((char *)map[i].function);
  147.       break;
  148.     }
  149.     }
  150. }
  151.