source: trunk/third/readline/keymaps.c @ 12992

Revision 12992, 3.6 KB checked in by kcr, 26 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r12991, which included commits to RCS files with non-trunk default branches.
Line 
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
41extern int rl_do_lowercase_version ();
42extern int rl_rubout (), rl_insert ();
43
44extern 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. */
55Keymap
56rl_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. */
77Keymap
78rl_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. */
95Keymap
96rl_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. */
125void
126rl_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}
Note: See TracBrowser for help on using the repository browser.