Import of readline 4.3.
[deliverable/binutils-gdb.git] / readline / keymaps.c
CommitLineData
d60d9f65
SS
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
1b17e766 10 Free Software Foundation; either version 2, or (at your option) any
d60d9f65
SS
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
1b17e766 20 Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
d60d9f65
SS
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
1b17e766
EZ
33#include <stdio.h> /* for FILE * definition for readline.h */
34
35#include "readline.h"
d60d9f65 36#include "rlconf.h"
1b17e766 37
d60d9f65
SS
38#include "emacs_keymap.c"
39
40#if defined (VI_MODE)
41#include "vi_keymap.c"
42#endif
43
1b17e766 44#include "xmalloc.h"
d60d9f65
SS
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;
9255ee31 64 keymap[i].function = (rl_command_func_t *)NULL;
d60d9f65
SS
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)
c862e87b 127 Keymap map;
d60d9f65
SS
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}
This page took 0.144947 seconds and 4 git commands to generate.