File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / readline / keymaps.c
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Wed Jul 30 08:16:45 2014 UTC (9 years, 11 months ago) by misho
CVS tags: MAIN, HEAD
Initial revision

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>