Annotation of embedaddon/readline/keymaps.c, revision 1.1.1.1

1.1       misho       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>