~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to cmd-line-utils/readline/readline.c

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* readline.c -- a general facility for reading lines of input
 
2
   with emacs style editing and completion. */
 
3
 
 
4
/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
5
 
 
6
   This file is part of the GNU Readline Library, a library for
 
7
   reading lines of text with interactive input and history editing.
 
8
 
 
9
   The GNU Readline Library is free software; you can redistribute it
 
10
   and/or modify it under the terms of the GNU General Public License
 
11
   as published by the Free Software Foundation; either version 2, or
 
12
   (at your option) any later version.
 
13
 
 
14
   The GNU Readline Library is distributed in the hope that it will be
 
15
   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
 
16
   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
17
   GNU General Public License for more details.
 
18
 
 
19
   The GNU General Public License is often shipped with GNU software, and
 
20
   is generally kept in a file called COPYING or LICENSE.  If you do not
 
21
   have a copy of the license, write to the Free Software Foundation,
 
22
   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
 
23
#define READLINE_LIBRARY
 
24
 
 
25
#if defined (HAVE_CONFIG_H)
 
26
#  include "config_readline.h"
 
27
#endif
 
28
 
 
29
#include <sys/types.h>
 
30
#include "posixstat.h"
 
31
#include <fcntl.h>
 
32
#if defined (HAVE_SYS_FILE_H)
 
33
#  include <sys/file.h>
 
34
#endif /* HAVE_SYS_FILE_H */
 
35
 
 
36
#if defined (HAVE_UNISTD_H)
 
37
#  include <unistd.h>
 
38
#endif /* HAVE_UNISTD_H */
 
39
 
 
40
#if defined (HAVE_STDLIB_H)
 
41
#  include <stdlib.h>
 
42
#else
 
43
#  include "ansi_stdlib.h"
 
44
#endif /* HAVE_STDLIB_H */
 
45
 
 
46
#if defined (HAVE_LOCALE_H)
 
47
#  include <locale.h>
 
48
#endif
 
49
 
 
50
#include <stdio.h>
 
51
#include "posixjmp.h"
 
52
#include <errno.h>
 
53
 
 
54
#if !defined (errno)
 
55
extern int errno;
 
56
#endif /* !errno */
 
57
 
 
58
/* System-specific feature definitions and include files. */
 
59
#include "rldefs.h"
 
60
#include "rlmbutil.h"
 
61
 
 
62
#if defined (__EMX__)
 
63
#  define INCL_DOSPROCESS
 
64
#  include <os2.h>
 
65
#endif /* __EMX__ */
 
66
 
 
67
/* Some standard library routines. */
 
68
#include "readline.h"
 
69
#include "history.h"
 
70
 
 
71
#include "rlprivate.h"
 
72
#include "rlshell.h"
 
73
#include "xmalloc.h"
 
74
 
 
75
#ifndef RL_LIBRARY_VERSION
 
76
#  define RL_LIBRARY_VERSION "5.1"
 
77
#endif
 
78
 
 
79
#ifndef RL_READLINE_VERSION
 
80
#  define RL_READLINE_VERSION   0x0501
 
81
#endif
 
82
 
 
83
extern void _rl_free_history_entry PARAMS((HIST_ENTRY *));
 
84
 
 
85
/* Forward declarations used in this file. */
 
86
static char *readline_internal PARAMS((void));
 
87
static void readline_initialize_everything PARAMS((void));
 
88
 
 
89
static void bind_arrow_keys_internal PARAMS((Keymap));
 
90
static void bind_arrow_keys PARAMS((void));
 
91
 
 
92
static void readline_default_bindings PARAMS((void));
 
93
static void reset_default_bindings PARAMS((void)) __attribute__((unused));
 
94
 
 
95
static int _rl_subseq_result PARAMS((int, Keymap, int, int));
 
96
static int _rl_subseq_getchar PARAMS((int));
 
97
 
 
98
/* **************************************************************** */
 
99
/*                                                                  */
 
100
/*                      Line editing input utility                  */
 
101
/*                                                                  */
 
102
/* **************************************************************** */
 
103
 
 
104
const char *rl_library_version = RL_LIBRARY_VERSION;
 
105
 
 
106
int rl_readline_version = RL_READLINE_VERSION;
 
107
 
 
108
/* True if this is `real' readline as opposed to some stub substitute. */
 
109
int rl_gnu_readline_p = 1;
 
110
 
 
111
/* A pointer to the keymap that is currently in use.
 
112
   By default, it is the standard emacs keymap. */
 
113
Keymap _rl_keymap = emacs_standard_keymap;
 
114
 
 
115
 
 
116
/* The current style of editing. */
 
117
int rl_editing_mode = emacs_mode;
 
118
 
 
119
/* The current insert mode:  input (the default) or overwrite */
 
120
int rl_insert_mode = RL_IM_DEFAULT;
 
121
 
 
122
/* Non-zero if we called this function from _rl_dispatch().  It's present
 
123
   so functions can find out whether they were called from a key binding
 
124
   or directly from an application. */
 
125
int rl_dispatching;
 
126
 
 
127
/* Non-zero if the previous command was a kill command. */
 
128
int _rl_last_command_was_kill = 0;
 
129
 
 
130
/* The current value of the numeric argument specified by the user. */
 
131
int rl_numeric_arg = 1;
 
132
 
 
133
/* Non-zero if an argument was typed. */
 
134
int rl_explicit_arg = 0;
 
135
 
 
136
/* Temporary value used while generating the argument. */
 
137
int rl_arg_sign = 1;
 
138
 
 
139
/* Non-zero means we have been called at least once before. */
 
140
static int rl_initialized;
 
141
 
 
142
#if 0
 
143
/* If non-zero, this program is running in an EMACS buffer. */
 
144
static int running_in_emacs;
 
145
#endif
 
146
 
 
147
/* Flags word encapsulating the current readline state. */
 
148
int rl_readline_state = RL_STATE_NONE;
 
149
 
 
150
/* The current offset in the current input line. */
 
151
int rl_point;
 
152
 
 
153
/* Mark in the current input line. */
 
154
int rl_mark;
 
155
 
 
156
/* Length of the current input line. */
 
157
int rl_end;
 
158
 
 
159
/* Make this non-zero to return the current input_line. */
 
160
int rl_done;
 
161
 
 
162
/* The last function executed by readline. */
 
163
rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL;
 
164
 
 
165
/* Top level environment for readline_internal (). */
 
166
procenv_t readline_top_level;
 
167
 
 
168
/* The streams we interact with. */
 
169
FILE *_rl_in_stream, *_rl_out_stream;
 
170
 
 
171
/* The names of the streams that we do input and output to. */
 
172
FILE *rl_instream = (FILE *)NULL;
 
173
FILE *rl_outstream = (FILE *)NULL;
 
174
 
 
175
/* Non-zero means echo characters as they are read.  Defaults to no echo;
 
176
   set to 1 if there is a controlling terminal, we can get its attributes,
 
177
   and the attributes include `echo'.  Look at rltty.c:prepare_terminal_settings
 
178
   for the code that sets it. */
 
179
int readline_echoing_p = 0;
 
180
 
 
181
/* Current prompt. */
 
182
char *rl_prompt = (char *)NULL;
 
183
int rl_visible_prompt_length = 0;
 
184
 
 
185
/* Set to non-zero by calling application if it has already printed rl_prompt
 
186
   and does not want readline to do it the first time. */
 
187
int rl_already_prompted = 0;
 
188
 
 
189
/* The number of characters read in order to type this complete command. */
 
190
int rl_key_sequence_length = 0;
 
191
 
 
192
/* If non-zero, then this is the address of a function to call just
 
193
   before readline_internal_setup () prints the first prompt. */
 
194
rl_hook_func_t *rl_startup_hook = (rl_hook_func_t *)NULL;
 
195
 
 
196
/* If non-zero, this is the address of a function to call just before
 
197
   readline_internal_setup () returns and readline_internal starts
 
198
   reading input characters. */
 
199
rl_hook_func_t *rl_pre_input_hook = (rl_hook_func_t *)NULL;
 
200
 
 
201
/* What we use internally.  You should always refer to RL_LINE_BUFFER. */
 
202
static char *the_line;
 
203
 
 
204
/* The character that can generate an EOF.  Really read from
 
205
   the terminal driver... just defaulted here. */
 
206
int _rl_eof_char = CTRL ('D');
 
207
 
 
208
/* Non-zero makes this the next keystroke to read. */
 
209
int rl_pending_input = 0;
 
210
 
 
211
/* Pointer to a useful terminal name. */
 
212
const char *rl_terminal_name = (const char *)NULL;
 
213
 
 
214
/* Non-zero means to always use horizontal scrolling in line display. */
 
215
int _rl_horizontal_scroll_mode = 0;
 
216
 
 
217
/* Non-zero means to display an asterisk at the starts of history lines
 
218
   which have been modified. */
 
219
int _rl_mark_modified_lines = 0;  
 
220
 
 
221
/* The style of `bell' notification preferred.  This can be set to NO_BELL,
 
222
   AUDIBLE_BELL, or VISIBLE_BELL. */
 
223
int _rl_bell_preference = AUDIBLE_BELL;
 
224
     
 
225
/* String inserted into the line by rl_insert_comment (). */
 
226
char *_rl_comment_begin;
 
227
 
 
228
/* Keymap holding the function currently being executed. */
 
229
Keymap rl_executing_keymap;
 
230
 
 
231
/* Keymap we're currently using to dispatch. */
 
232
Keymap _rl_dispatching_keymap;
 
233
 
 
234
/* Non-zero means to erase entire line, including prompt, on empty input lines. */
 
235
int rl_erase_empty_line = 0;
 
236
 
 
237
/* Non-zero means to read only this many characters rather than up to a
 
238
   character bound to accept-line. */
 
239
int rl_num_chars_to_read;
 
240
 
 
241
/* Line buffer and maintenence. */
 
242
char *rl_line_buffer = (char *)NULL;
 
243
int rl_line_buffer_len = 0;
 
244
 
 
245
/* Key sequence `contexts' */
 
246
_rl_keyseq_cxt *_rl_kscxt = 0;
 
247
 
 
248
/* Forward declarations used by the display, termcap, and history code. */
 
249
 
 
250
/* **************************************************************** */
 
251
/*                                                                  */
 
252
/*                      `Forward' declarations                      */
 
253
/*                                                                  */
 
254
/* **************************************************************** */
 
255
 
 
256
/* Non-zero means do not parse any lines other than comments and
 
257
   parser directives. */
 
258
unsigned char _rl_parsing_conditionalized_out = 0;
 
259
 
 
260
/* Non-zero means to convert characters with the meta bit set to
 
261
   escape-prefixed characters so we can indirect through
 
262
   emacs_meta_keymap or vi_escape_keymap. */
 
263
int _rl_convert_meta_chars_to_ascii = 1;
 
264
 
 
265
/* Non-zero means to output characters with the meta bit set directly
 
266
   rather than as a meta-prefixed escape sequence. */
 
267
int _rl_output_meta_chars = 0;
 
268
 
 
269
/* Non-zero means to look at the termios special characters and bind
 
270
   them to equivalent readline functions at startup. */
 
271
int _rl_bind_stty_chars = 1;
 
272
 
 
273
/* **************************************************************** */
 
274
/*                                                                  */
 
275
/*                      Top Level Functions                         */
 
276
/*                                                                  */
 
277
/* **************************************************************** */
 
278
 
 
279
/* Non-zero means treat 0200 bit in terminal input as Meta bit. */
 
280
int _rl_meta_flag = 0;  /* Forward declaration */
 
281
 
 
282
/* Set up the prompt and expand it.  Called from readline() and
 
283
   rl_callback_handler_install (). */
 
284
int
 
285
rl_set_prompt (prompt)
 
286
     const char *prompt;
 
287
{
 
288
  FREE (rl_prompt);
 
289
  rl_prompt = prompt ? savestring (prompt) : (char *)NULL;
 
290
  rl_display_prompt = rl_prompt ? rl_prompt : "";
 
291
 
 
292
  rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
 
293
  return 0;
 
294
}
 
295
  
 
296
/* Read a line of input.  Prompt with PROMPT.  An empty PROMPT means
 
297
   none.  A return value of NULL means that EOF was encountered. */
 
298
char *
 
299
readline (prompt)
 
300
     const char *prompt;
 
301
{
 
302
  char *value;
 
303
 
 
304
  /* If we are at EOF return a NULL string. */
 
305
  if (rl_pending_input == EOF)
 
306
    {
 
307
      rl_clear_pending_input ();
 
308
      return ((char *)NULL);
 
309
    }
 
310
 
 
311
  rl_set_prompt (prompt);
 
312
 
 
313
  rl_initialize ();
 
314
  if (rl_prep_term_function)
 
315
    (*rl_prep_term_function) (_rl_meta_flag);
 
316
 
 
317
#if defined (HANDLE_SIGNALS)
 
318
  rl_set_signals ();
 
319
#endif
 
320
 
 
321
  value = readline_internal ();
 
322
  if (rl_deprep_term_function)
 
323
    (*rl_deprep_term_function) ();
 
324
 
 
325
#if defined (HANDLE_SIGNALS)
 
326
  rl_clear_signals ();
 
327
#endif
 
328
 
 
329
  return (value);
 
330
}
 
331
 
 
332
#if defined (READLINE_CALLBACKS)
 
333
#  define STATIC_CALLBACK
 
334
#else
 
335
#  define STATIC_CALLBACK static
 
336
#endif
 
337
 
 
338
STATIC_CALLBACK void
 
339
readline_internal_setup ()
 
340
{
 
341
  char *nprompt;
 
342
 
 
343
  _rl_in_stream = rl_instream;
 
344
  _rl_out_stream = rl_outstream;
 
345
 
 
346
  if (rl_startup_hook)
 
347
    (*rl_startup_hook) ();
 
348
 
 
349
  /* If we're not echoing, we still want to at least print a prompt, because
 
350
     rl_redisplay will not do it for us.  If the calling application has a
 
351
     custom redisplay function, though, let that function handle it. */
 
352
  if (readline_echoing_p == 0 && rl_redisplay_function == rl_redisplay)
 
353
    {
 
354
      if (rl_prompt && rl_already_prompted == 0)
 
355
        {
 
356
          nprompt = _rl_strip_prompt (rl_prompt);
 
357
          fprintf (_rl_out_stream, "%s", nprompt);
 
358
          fflush (_rl_out_stream);
 
359
          free (nprompt);
 
360
        }
 
361
    }
 
362
  else
 
363
    {
 
364
      if (rl_prompt && rl_already_prompted)
 
365
        rl_on_new_line_with_prompt ();
 
366
      else
 
367
        rl_on_new_line ();
 
368
      (*rl_redisplay_function) ();
 
369
    }
 
370
 
 
371
#if defined (VI_MODE)
 
372
  if (rl_editing_mode == vi_mode)
 
373
    rl_vi_insertion_mode (1, 'i');
 
374
#endif /* VI_MODE */
 
375
 
 
376
  if (rl_pre_input_hook)
 
377
    (*rl_pre_input_hook) ();
 
378
}
 
379
 
 
380
STATIC_CALLBACK char *
 
381
readline_internal_teardown (eof)
 
382
     int eof;
 
383
{
 
384
  char *temp;
 
385
  HIST_ENTRY *entry;
 
386
 
 
387
  /* Restore the original of this history line, iff the line that we
 
388
     are editing was originally in the history, AND the line has changed. */
 
389
  entry = current_history ();
 
390
 
 
391
  if (entry && rl_undo_list)
 
392
    {
 
393
      temp = savestring (the_line);
 
394
      rl_revert_line (1, 0);
 
395
      entry = replace_history_entry (where_history (), the_line, (histdata_t)NULL);
 
396
      _rl_free_history_entry (entry);
 
397
 
 
398
      strcpy (the_line, temp);
 
399
      free (temp);
 
400
    }
 
401
 
 
402
  /* At any rate, it is highly likely that this line has an undo list.  Get
 
403
     rid of it now. */
 
404
  if (rl_undo_list)
 
405
    rl_free_undo_list ();
 
406
 
 
407
  /* Restore normal cursor, if available. */
 
408
  _rl_set_insert_mode (RL_IM_INSERT, 0);
 
409
 
 
410
  return (eof ? (char *)NULL : savestring (the_line));
 
411
}
 
412
 
 
413
void
 
414
_rl_internal_char_cleanup ()
 
415
{
 
416
#if defined (VI_MODE)
 
417
  /* In vi mode, when you exit insert mode, the cursor moves back
 
418
     over the previous character.  We explicitly check for that here. */
 
419
  if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap)
 
420
    rl_vi_check ();
 
421
#endif /* VI_MODE */
 
422
 
 
423
  if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read)
 
424
    {
 
425
      (*rl_redisplay_function) ();
 
426
      _rl_want_redisplay = 0;
 
427
      rl_newline (1, '\n');
 
428
    }
 
429
 
 
430
  if (rl_done == 0)
 
431
    {
 
432
      (*rl_redisplay_function) ();
 
433
      _rl_want_redisplay = 0;
 
434
    }
 
435
 
 
436
  /* If the application writer has told us to erase the entire line if
 
437
     the only character typed was something bound to rl_newline, do so. */
 
438
  if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline &&
 
439
      rl_point == 0 && rl_end == 0)
 
440
    _rl_erase_entire_line ();
 
441
}
 
442
 
 
443
STATIC_CALLBACK int
 
444
#if defined (READLINE_CALLBACKS)
 
445
readline_internal_char ()
 
446
#else
 
447
readline_internal_charloop ()
 
448
#endif
 
449
{
 
450
  static int lastc, eof_found;
 
451
  int c, code, lk;
 
452
 
 
453
  lastc = -1;
 
454
  eof_found = 0;
 
455
 
 
456
#if !defined (READLINE_CALLBACKS)
 
457
  while (rl_done == 0)
 
458
    {
 
459
#endif
 
460
      lk = _rl_last_command_was_kill;
 
461
 
 
462
      code = setjmp (readline_top_level);
 
463
 
 
464
      if (code)
 
465
        {
 
466
          (*rl_redisplay_function) ();
 
467
          _rl_want_redisplay = 0;
 
468
          /* If we get here, we're not being called from something dispatched
 
469
             from _rl_callback_read_char(), which sets up its own value of
 
470
             readline_top_level (saving and restoring the old, of course), so
 
471
             we can just return here. */
 
472
          if (RL_ISSTATE (RL_STATE_CALLBACK))
 
473
            return (0);
 
474
        }
 
475
 
 
476
      if (rl_pending_input == 0)
 
477
        {
 
478
          /* Then initialize the argument and number of keys read. */
 
479
          _rl_reset_argument ();
 
480
          rl_key_sequence_length = 0;
 
481
        }
 
482
 
 
483
      RL_SETSTATE(RL_STATE_READCMD);
 
484
      c = rl_read_key ();
 
485
      RL_UNSETSTATE(RL_STATE_READCMD);
 
486
 
 
487
      /* look at input.c:rl_getc() for the circumstances under which this will
 
488
         be returned; punt immediately on read error without converting it to
 
489
         a newline. */
 
490
      if (c == READERR)
 
491
        {
 
492
#if defined (READLINE_CALLBACKS)
 
493
          RL_SETSTATE(RL_STATE_DONE);
 
494
          return (rl_done = 1);
 
495
#else
 
496
          eof_found = 1;
 
497
          break;
 
498
#endif
 
499
        }
 
500
 
 
501
      /* EOF typed to a non-blank line is a <NL>. */
 
502
      if (c == EOF && rl_end)
 
503
        c = NEWLINE;
 
504
 
 
505
      /* The character _rl_eof_char typed to blank line, and not as the
 
506
         previous character is interpreted as EOF. */
 
507
      if (((c == _rl_eof_char && lastc != c) || c == EOF) && !rl_end)
 
508
        {
 
509
#if defined (READLINE_CALLBACKS)
 
510
          RL_SETSTATE(RL_STATE_DONE);
 
511
          return (rl_done = 1);
 
512
#else
 
513
          eof_found = 1;
 
514
          break;
 
515
#endif
 
516
        }
 
517
 
 
518
      lastc = c;
 
519
      _rl_dispatch ((unsigned char)c, _rl_keymap);
 
520
 
 
521
      /* If there was no change in _rl_last_command_was_kill, then no kill
 
522
         has taken place.  Note that if input is pending we are reading
 
523
         a prefix command, so nothing has changed yet. */
 
524
      if (rl_pending_input == 0 && lk == _rl_last_command_was_kill)
 
525
        _rl_last_command_was_kill = 0;
 
526
 
 
527
      _rl_internal_char_cleanup ();
 
528
 
 
529
#if defined (READLINE_CALLBACKS)
 
530
      return 0;
 
531
#else
 
532
    }
 
533
 
 
534
  return (eof_found);
 
535
#endif
 
536
}
 
537
 
 
538
#if defined (READLINE_CALLBACKS)
 
539
static int
 
540
readline_internal_charloop ()
 
541
{
 
542
  int eof = 1;
 
543
 
 
544
  while (rl_done == 0)
 
545
    eof = readline_internal_char ();
 
546
  return (eof);
 
547
}
 
548
#endif /* READLINE_CALLBACKS */
 
549
 
 
550
/* Read a line of input from the global rl_instream, doing output on
 
551
   the global rl_outstream.
 
552
   If rl_prompt is non-null, then that is our prompt. */
 
553
static char *
 
554
readline_internal ()
 
555
{
 
556
  int eof;
 
557
 
 
558
  readline_internal_setup ();
 
559
  eof = readline_internal_charloop ();
 
560
  return (readline_internal_teardown (eof));
 
561
}
 
562
 
 
563
void
 
564
_rl_init_line_state ()
 
565
{
 
566
  rl_point = rl_end = rl_mark = 0;
 
567
  the_line = rl_line_buffer;
 
568
  the_line[0] = 0;
 
569
}
 
570
 
 
571
void
 
572
_rl_set_the_line ()
 
573
{
 
574
  the_line = rl_line_buffer;
 
575
}
 
576
 
 
577
#if defined (READLINE_CALLBACKS)
 
578
_rl_keyseq_cxt *
 
579
_rl_keyseq_cxt_alloc ()
 
580
{
 
581
  _rl_keyseq_cxt *cxt;
 
582
 
 
583
  cxt = (_rl_keyseq_cxt *)xmalloc (sizeof (_rl_keyseq_cxt));
 
584
 
 
585
  cxt->flags = cxt->subseq_arg = cxt->subseq_retval = 0;
 
586
 
 
587
  cxt->okey = 0;
 
588
  cxt->ocxt = _rl_kscxt;
 
589
  cxt->childval = 42;           /* sentinel value */
 
590
 
 
591
  return cxt;
 
592
}
 
593
 
 
594
void
 
595
_rl_keyseq_cxt_dispose (cxt)
 
596
    _rl_keyseq_cxt *cxt;
 
597
{
 
598
  free (cxt);
 
599
}
 
600
 
 
601
void
 
602
_rl_keyseq_chain_dispose ()
 
603
{
 
604
  _rl_keyseq_cxt *cxt;
 
605
 
 
606
  while (_rl_kscxt)
 
607
    {
 
608
      cxt = _rl_kscxt;
 
609
      _rl_kscxt = _rl_kscxt->ocxt;
 
610
      _rl_keyseq_cxt_dispose (cxt);
 
611
    }
 
612
}
 
613
#endif
 
614
 
 
615
static int
 
616
_rl_subseq_getchar (key)
 
617
     int key;
 
618
{
 
619
  int k;
 
620
 
 
621
  if (key == ESC)
 
622
    RL_SETSTATE(RL_STATE_METANEXT);
 
623
  RL_SETSTATE(RL_STATE_MOREINPUT);
 
624
  k = rl_read_key ();
 
625
  RL_UNSETSTATE(RL_STATE_MOREINPUT);
 
626
  if (key == ESC)
 
627
    RL_UNSETSTATE(RL_STATE_METANEXT);
 
628
 
 
629
  return k;
 
630
}
 
631
 
 
632
#if defined (READLINE_CALLBACKS)
 
633
int
 
634
_rl_dispatch_callback (cxt)
 
635
     _rl_keyseq_cxt *cxt;
 
636
{
 
637
  int nkey, r;
 
638
 
 
639
  /* For now */
 
640
#if 1
 
641
  /* The first time this context is used, we want to read input and dispatch
 
642
     on it.  When traversing the chain of contexts back `up', we want to use
 
643
     the value from the next context down.  We're simulating recursion using
 
644
     a chain of contexts. */
 
645
  if ((cxt->flags & KSEQ_DISPATCHED) == 0)
 
646
    {
 
647
      nkey = _rl_subseq_getchar (cxt->okey);
 
648
      r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
 
649
      cxt->flags |= KSEQ_DISPATCHED;
 
650
    }
 
651
  else
 
652
    r = cxt->childval;
 
653
#else
 
654
  r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
 
655
#endif
 
656
 
 
657
  /* For now */
 
658
  r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
 
659
 
 
660
  if (r == 0)                   /* success! */
 
661
    {
 
662
      _rl_keyseq_chain_dispose ();
 
663
      RL_UNSETSTATE (RL_STATE_MULTIKEY);
 
664
      return r;
 
665
    }
 
666
 
 
667
  if (r != -3)                  /* magic value that says we added to the chain */
 
668
    _rl_kscxt = cxt->ocxt;
 
669
  if (_rl_kscxt)
 
670
    _rl_kscxt->childval = r;
 
671
  if (r != -3)
 
672
    _rl_keyseq_cxt_dispose (cxt);
 
673
 
 
674
  return r;
 
675
}
 
676
#endif /* READLINE_CALLBACKS */
 
677
  
 
678
/* Do the command associated with KEY in MAP.
 
679
   If the associated command is really a keymap, then read
 
680
   another key, and dispatch into that map. */
 
681
int
 
682
_rl_dispatch (key, map)
 
683
     register int key;
 
684
     Keymap map;
 
685
{
 
686
  _rl_dispatching_keymap = map;
 
687
  return _rl_dispatch_subseq (key, map, 0);
 
688
}
 
689
 
 
690
int
 
691
_rl_dispatch_subseq (key, map, got_subseq)
 
692
     register int key;
 
693
     Keymap map;
 
694
     int got_subseq;
 
695
{
 
696
  int r, newkey;
 
697
  char *macro;
 
698
  rl_command_func_t *func;
 
699
#if defined (READLINE_CALLBACKS)
 
700
  _rl_keyseq_cxt *cxt;
 
701
#endif
 
702
 
 
703
  if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
 
704
    {
 
705
      if (map[ESC].type == ISKMAP)
 
706
        {
 
707
          if (RL_ISSTATE (RL_STATE_MACRODEF))
 
708
            _rl_add_macro_char (ESC);
 
709
          map = FUNCTION_TO_KEYMAP (map, ESC);
 
710
          key = UNMETA (key);
 
711
          rl_key_sequence_length += 2;
 
712
          return (_rl_dispatch (key, map));
 
713
        }
 
714
      else
 
715
        rl_ding ();
 
716
      return 0;
 
717
    }
 
718
 
 
719
  if (RL_ISSTATE (RL_STATE_MACRODEF))
 
720
    _rl_add_macro_char (key);
 
721
 
 
722
  r = 0;
 
723
  switch (map[key].type)
 
724
    {
 
725
    case ISFUNC:
 
726
      func = map[key].function;
 
727
      if (func)
 
728
        {
 
729
          /* Special case rl_do_lowercase_version (). */
 
730
          if (func == rl_do_lowercase_version)
 
731
            return (_rl_dispatch (_rl_to_lower (key), map));
 
732
 
 
733
          rl_executing_keymap = map;
 
734
 
 
735
          rl_dispatching = 1;
 
736
          RL_SETSTATE(RL_STATE_DISPATCHING);
 
737
          (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
 
738
          RL_UNSETSTATE(RL_STATE_DISPATCHING);
 
739
          rl_dispatching = 0;
 
740
 
 
741
          /* If we have input pending, then the last command was a prefix
 
742
             command.  Don't change the state of rl_last_func.  Otherwise,
 
743
             remember the last command executed in this variable. */
 
744
          if (rl_pending_input == 0 && map[key].function != rl_digit_argument)
 
745
            rl_last_func = map[key].function;
 
746
        }
 
747
      else if (map[ANYOTHERKEY].function)
 
748
        {
 
749
          /* OK, there's no function bound in this map, but there is a
 
750
             shadow function that was overridden when the current keymap
 
751
             was created.  Return -2 to note  that. */
 
752
          _rl_unget_char  (key);
 
753
          return -2;
 
754
        }
 
755
      else if (got_subseq)
 
756
        {
 
757
          /* Return -1 to note that we're in a subsequence, but  we don't
 
758
             have a matching key, nor was one overridden.  This means
 
759
             we need to back up the recursion chain and find the last
 
760
             subsequence that is bound to a function. */
 
761
          _rl_unget_char (key);
 
762
          return -1;
 
763
        }
 
764
      else
 
765
        {
 
766
#if defined (READLINE_CALLBACKS)
 
767
          RL_UNSETSTATE (RL_STATE_MULTIKEY);
 
768
          _rl_keyseq_chain_dispose ();
 
769
#endif
 
770
          _rl_abort_internal ();
 
771
          return -1;
 
772
        }
 
773
      break;
 
774
 
 
775
    case ISKMAP:
 
776
      if (map[key].function != 0)
 
777
        {
 
778
#if defined (VI_MODE)
 
779
          /* The only way this test will be true is if a subsequence has been
 
780
             bound starting with ESC, generally the arrow keys.  What we do is
 
781
             check whether there's input in the queue, which there generally
 
782
             will be if an arrow key has been pressed, and, if there's not,
 
783
             just dispatch to (what we assume is) rl_vi_movement_mode right
 
784
             away.  This is essentially an input test with a zero timeout. */
 
785
          if (rl_editing_mode == vi_mode && key == ESC && map == vi_insertion_keymap
 
786
              && _rl_input_queued (0) == 0)
 
787
            return (_rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key)));
 
788
#endif
 
789
 
 
790
          rl_key_sequence_length++;
 
791
          _rl_dispatching_keymap = FUNCTION_TO_KEYMAP (map, key);
 
792
 
 
793
          /* Allocate new context here.  Use linked contexts (linked through
 
794
             cxt->ocxt) to simulate recursion */
 
795
#if defined (READLINE_CALLBACKS)
 
796
          if (RL_ISSTATE (RL_STATE_CALLBACK))
 
797
            {
 
798
              /* Return 0 only the first time, to indicate success to
 
799
                 _rl_callback_read_char.  The rest of the time, we're called
 
800
                 from _rl_dispatch_callback, so we return 3 to indicate
 
801
                 special handling is necessary. */
 
802
              r = RL_ISSTATE (RL_STATE_MULTIKEY) ? -3 : 0;
 
803
              cxt = _rl_keyseq_cxt_alloc ();
 
804
 
 
805
              if (got_subseq)
 
806
                cxt->flags |= KSEQ_SUBSEQ;
 
807
              cxt->okey = key;
 
808
              cxt->oldmap = map;
 
809
              cxt->dmap = _rl_dispatching_keymap;
 
810
              cxt->subseq_arg = got_subseq || cxt->dmap[ANYOTHERKEY].function;
 
811
 
 
812
              RL_SETSTATE (RL_STATE_MULTIKEY);
 
813
              _rl_kscxt = cxt;
 
814
 
 
815
              return r;         /* don't indicate immediate success */
 
816
            }
 
817
#endif
 
818
 
 
819
          newkey = _rl_subseq_getchar (key);
 
820
          if (newkey < 0)
 
821
            {
 
822
              _rl_abort_internal ();
 
823
              return -1;
 
824
            }
 
825
 
 
826
          r = _rl_dispatch_subseq (newkey, _rl_dispatching_keymap, got_subseq || map[ANYOTHERKEY].function);
 
827
          return _rl_subseq_result (r, map, key, got_subseq);
 
828
        }
 
829
      else
 
830
        {
 
831
          _rl_abort_internal ();
 
832
          return -1;
 
833
        }
 
834
      break;
 
835
 
 
836
    case ISMACR:
 
837
      if (map[key].function != 0)
 
838
        {
 
839
          macro = savestring ((char *)map[key].function);
 
840
          _rl_with_macro_input (macro);
 
841
          return 0;
 
842
        }
 
843
      break;
 
844
    }
 
845
#if defined (VI_MODE)
 
846
  if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
 
847
      key != ANYOTHERKEY &&
 
848
      _rl_vi_textmod_command (key))
 
849
    _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
 
850
#endif
 
851
 
 
852
  return (r);
 
853
}
 
854
 
 
855
static int
 
856
_rl_subseq_result (r, map, key, got_subseq)
 
857
     int r;
 
858
     Keymap map;
 
859
     int key, got_subseq;
 
860
{
 
861
  Keymap m;
 
862
  int type, nt;
 
863
  rl_command_func_t *func, *nf;
 
864
  
 
865
  if (r == -2)
 
866
    /* We didn't match anything, and the keymap we're indexed into
 
867
       shadowed a function previously bound to that prefix.  Call
 
868
       the function.  The recursive call to _rl_dispatch_subseq has
 
869
       already taken care of pushing any necessary input back onto
 
870
       the input queue with _rl_unget_char. */
 
871
    {
 
872
      m = _rl_dispatching_keymap;
 
873
      type = m[ANYOTHERKEY].type;
 
874
      func = m[ANYOTHERKEY].function;
 
875
      if (type == ISFUNC && func == rl_do_lowercase_version)
 
876
        r = _rl_dispatch (_rl_to_lower (key), map);
 
877
      else if (type == ISFUNC && func == rl_insert)
 
878
        {
 
879
          /* If the function that was shadowed was self-insert, we
 
880
             somehow need a keymap with map[key].func == self-insert.
 
881
             Let's use this one. */
 
882
          nt = m[key].type;
 
883
          nf = m[key].function;
 
884
 
 
885
          m[key].type = type;
 
886
          m[key].function = func;
 
887
          r = _rl_dispatch (key, m);
 
888
          m[key].type = nt;
 
889
          m[key].function = nf;
 
890
        }
 
891
      else
 
892
        r = _rl_dispatch (ANYOTHERKEY, m);
 
893
    }
 
894
  else if (r && map[ANYOTHERKEY].function)
 
895
    {
 
896
      /* We didn't match (r is probably -1), so return something to
 
897
         tell the caller that it should try ANYOTHERKEY for an
 
898
         overridden function. */
 
899
      _rl_unget_char (key);
 
900
      _rl_dispatching_keymap = map;
 
901
      return -2;
 
902
    }
 
903
  else if (r && got_subseq)
 
904
    {
 
905
      /* OK, back up the chain. */
 
906
      _rl_unget_char (key);
 
907
      _rl_dispatching_keymap = map;
 
908
      return -1;
 
909
    }
 
910
 
 
911
  return r;
 
912
}
 
913
 
 
914
/* **************************************************************** */
 
915
/*                                                                  */
 
916
/*                      Initializations                             */
 
917
/*                                                                  */
 
918
/* **************************************************************** */
 
919
 
 
920
/* Initialize readline (and terminal if not already). */
 
921
int
 
922
rl_initialize ()
 
923
{
 
924
  /* If we have never been called before, initialize the
 
925
     terminal and data structures. */
 
926
  if (!rl_initialized)
 
927
    {
 
928
      RL_SETSTATE(RL_STATE_INITIALIZING);
 
929
      readline_initialize_everything ();
 
930
      RL_UNSETSTATE(RL_STATE_INITIALIZING);
 
931
      rl_initialized++;
 
932
      RL_SETSTATE(RL_STATE_INITIALIZED);
 
933
    }
 
934
 
 
935
  /* Initalize the current line information. */
 
936
  _rl_init_line_state ();
 
937
 
 
938
  /* We aren't done yet.  We haven't even gotten started yet! */
 
939
  rl_done = 0;
 
940
  RL_UNSETSTATE(RL_STATE_DONE);
 
941
 
 
942
  /* Tell the history routines what is going on. */
 
943
  _rl_start_using_history ();
 
944
 
 
945
  /* Make the display buffer match the state of the line. */
 
946
  rl_reset_line_state ();
 
947
 
 
948
  /* No such function typed yet. */
 
949
  rl_last_func = (rl_command_func_t *)NULL;
 
950
 
 
951
  /* Parsing of key-bindings begins in an enabled state. */
 
952
  _rl_parsing_conditionalized_out = 0;
 
953
 
 
954
#if defined (VI_MODE)
 
955
  if (rl_editing_mode == vi_mode)
 
956
    _rl_vi_initialize_line ();
 
957
#endif
 
958
 
 
959
  /* Each line starts in insert mode (the default). */
 
960
  _rl_set_insert_mode (RL_IM_DEFAULT, 1);
 
961
 
 
962
  return 0;
 
963
}
 
964
 
 
965
#if 0
 
966
#if defined (__EMX__)
 
967
static void
 
968
_emx_build_environ ()
 
969
{
 
970
  TIB *tibp;
 
971
  PIB *pibp;
 
972
  char *t, **tp;
 
973
  int c;
 
974
 
 
975
  DosGetInfoBlocks (&tibp, &pibp);
 
976
  t = pibp->pib_pchenv;
 
977
  for (c = 1; *t; c++)
 
978
    t += strlen (t) + 1;
 
979
  tp = environ = (char **)xmalloc ((c + 1) * sizeof (char *));
 
980
  t = pibp->pib_pchenv;
 
981
  while (*t)
 
982
    {
 
983
      *tp++ = t;
 
984
      t += strlen (t) + 1;
 
985
    }
 
986
  *tp = 0;
 
987
}
 
988
#endif /* __EMX__ */
 
989
#endif
 
990
 
 
991
/* Initialize the entire state of the world. */
 
992
static void
 
993
readline_initialize_everything ()
 
994
{
 
995
#if 0
 
996
#if defined (__EMX__)
 
997
  if (environ == 0)
 
998
    _emx_build_environ ();
 
999
#endif
 
1000
#endif
 
1001
 
 
1002
#if 0
 
1003
  /* Find out if we are running in Emacs -- UNUSED. */
 
1004
  running_in_emacs = sh_get_env_value ("EMACS") != (char *)0;
 
1005
#endif
 
1006
 
 
1007
  /* Set up input and output if they are not already set up. */
 
1008
  if (!rl_instream)
 
1009
    rl_instream = stdin;
 
1010
 
 
1011
  if (!rl_outstream)
 
1012
    rl_outstream = stdout;
 
1013
 
 
1014
  /* Bind _rl_in_stream and _rl_out_stream immediately.  These values
 
1015
     may change, but they may also be used before readline_internal ()
 
1016
     is called. */
 
1017
  _rl_in_stream = rl_instream;
 
1018
  _rl_out_stream = rl_outstream;
 
1019
 
 
1020
  /* Allocate data structures. */
 
1021
  if (rl_line_buffer == 0)
 
1022
    rl_line_buffer = (char *)xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE);
 
1023
 
 
1024
  /* Initialize the terminal interface. */
 
1025
  if (rl_terminal_name == 0)
 
1026
    rl_terminal_name = sh_get_env_value ("TERM");
 
1027
  _rl_init_terminal_io (rl_terminal_name);
 
1028
 
 
1029
  /* Bind tty characters to readline functions. */
 
1030
  readline_default_bindings ();
 
1031
 
 
1032
  /* Initialize the function names. */
 
1033
  rl_initialize_funmap ();
 
1034
 
 
1035
  /* Decide whether we should automatically go into eight-bit mode. */
 
1036
  _rl_init_eightbit ();
 
1037
      
 
1038
  /* Read in the init file. */
 
1039
  rl_read_init_file ((char *)NULL);
 
1040
 
 
1041
  /* XXX */
 
1042
  if (_rl_horizontal_scroll_mode && _rl_term_autowrap)
 
1043
    {
 
1044
      _rl_screenwidth--;
 
1045
      _rl_screenchars -= _rl_screenheight;
 
1046
    }
 
1047
 
 
1048
  /* Override the effect of any `set keymap' assignments in the
 
1049
     inputrc file. */
 
1050
  rl_set_keymap_from_edit_mode ();
 
1051
 
 
1052
  /* Try to bind a common arrow key prefix, if not already bound. */
 
1053
  bind_arrow_keys ();
 
1054
 
 
1055
  /* Enable the meta key, if this terminal has one. */
 
1056
  if (_rl_enable_meta)
 
1057
    _rl_enable_meta_key ();
 
1058
 
 
1059
  /* If the completion parser's default word break characters haven't
 
1060
     been set yet, then do so now. */
 
1061
  if (rl_completer_word_break_characters == (char *)NULL)
 
1062
    rl_completer_word_break_characters = (char *)rl_basic_word_break_characters;
 
1063
}
 
1064
 
 
1065
/* If this system allows us to look at the values of the regular
 
1066
   input editing characters, then bind them to their readline
 
1067
   equivalents, iff the characters are not bound to keymaps. */
 
1068
static void
 
1069
readline_default_bindings ()
 
1070
{
 
1071
  if (_rl_bind_stty_chars)
 
1072
    rl_tty_set_default_bindings (_rl_keymap);
 
1073
}
 
1074
 
 
1075
/* Reset the default bindings for the terminal special characters we're
 
1076
   interested in back to rl_insert and read the new ones. */
 
1077
static void
 
1078
reset_default_bindings ()
 
1079
{
 
1080
  if (_rl_bind_stty_chars)
 
1081
    {
 
1082
      rl_tty_unset_default_bindings (_rl_keymap);
 
1083
      rl_tty_set_default_bindings (_rl_keymap);
 
1084
    }
 
1085
}
 
1086
 
 
1087
/* Bind some common arrow key sequences in MAP. */
 
1088
static void
 
1089
bind_arrow_keys_internal (map)
 
1090
     Keymap map;
 
1091
{
 
1092
  Keymap xkeymap;
 
1093
 
 
1094
  xkeymap = _rl_keymap;
 
1095
  _rl_keymap = map;
 
1096
 
 
1097
#if defined (__MSDOS__)
 
1098
  rl_bind_keyseq_if_unbound ("\033[0A", rl_get_previous_history);
 
1099
  rl_bind_keyseq_if_unbound ("\033[0B", rl_backward_char);
 
1100
  rl_bind_keyseq_if_unbound ("\033[0C", rl_forward_char);
 
1101
  rl_bind_keyseq_if_unbound ("\033[0D", rl_get_next_history);
 
1102
#endif
 
1103
 
 
1104
  rl_bind_keyseq_if_unbound ("\033[A", rl_get_previous_history);
 
1105
  rl_bind_keyseq_if_unbound ("\033[B", rl_get_next_history);
 
1106
  rl_bind_keyseq_if_unbound ("\033[C", rl_forward_char);
 
1107
  rl_bind_keyseq_if_unbound ("\033[D", rl_backward_char);
 
1108
  rl_bind_keyseq_if_unbound ("\033[H", rl_beg_of_line);
 
1109
  rl_bind_keyseq_if_unbound ("\033[F", rl_end_of_line);
 
1110
 
 
1111
  rl_bind_keyseq_if_unbound ("\033OA", rl_get_previous_history);
 
1112
  rl_bind_keyseq_if_unbound ("\033OB", rl_get_next_history);
 
1113
  rl_bind_keyseq_if_unbound ("\033OC", rl_forward_char);
 
1114
  rl_bind_keyseq_if_unbound ("\033OD", rl_backward_char);
 
1115
  rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line);
 
1116
  rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line);
 
1117
 
 
1118
#if defined (__MINGW32__)
 
1119
  rl_bind_keyseq_if_unbound ("\340H", rl_get_previous_history);
 
1120
  rl_bind_keyseq_if_unbound ("\340P", rl_get_next_history);
 
1121
  rl_bind_keyseq_if_unbound ("\340M", rl_forward_char);
 
1122
  rl_bind_keyseq_if_unbound ("\340K", rl_backward_char);
 
1123
#endif
 
1124
 
 
1125
  _rl_keymap = xkeymap;
 
1126
}
 
1127
 
 
1128
/* Try and bind the common arrow key prefixes after giving termcap and
 
1129
   the inputrc file a chance to bind them and create `real' keymaps
 
1130
   for the arrow key prefix. */
 
1131
static void
 
1132
bind_arrow_keys ()
 
1133
{
 
1134
  bind_arrow_keys_internal (emacs_standard_keymap);
 
1135
 
 
1136
#if defined (VI_MODE)
 
1137
  bind_arrow_keys_internal (vi_movement_keymap);
 
1138
  bind_arrow_keys_internal (vi_insertion_keymap);
 
1139
#endif
 
1140
}
 
1141
 
 
1142
/* **************************************************************** */
 
1143
/*                                                                  */
 
1144
/*              Saving and Restoring Readline's state               */
 
1145
/*                                                                  */
 
1146
/* **************************************************************** */
 
1147
 
 
1148
int
 
1149
rl_save_state (sp)
 
1150
     struct readline_state *sp;
 
1151
{
 
1152
  if (sp == 0)
 
1153
    return -1;
 
1154
 
 
1155
  sp->point = rl_point;
 
1156
  sp->end = rl_end;
 
1157
  sp->mark = rl_mark;
 
1158
  sp->buffer = rl_line_buffer;
 
1159
  sp->buflen = rl_line_buffer_len;
 
1160
  sp->ul = rl_undo_list;
 
1161
  sp->prompt = rl_prompt;
 
1162
 
 
1163
  sp->rlstate = rl_readline_state;
 
1164
  sp->done = rl_done;
 
1165
  sp->kmap = _rl_keymap;
 
1166
 
 
1167
  sp->lastfunc = rl_last_func;
 
1168
  sp->insmode = rl_insert_mode;
 
1169
  sp->edmode = rl_editing_mode;
 
1170
  sp->kseqlen = rl_key_sequence_length;
 
1171
  sp->inf = rl_instream;
 
1172
  sp->outf = rl_outstream;
 
1173
  sp->pendingin = rl_pending_input;
 
1174
  sp->macro = rl_executing_macro;
 
1175
 
 
1176
  sp->catchsigs = rl_catch_signals;
 
1177
  sp->catchsigwinch = rl_catch_sigwinch;
 
1178
 
 
1179
  return (0);
 
1180
}
 
1181
 
 
1182
int
 
1183
rl_restore_state (sp)
 
1184
     struct readline_state *sp;
 
1185
{
 
1186
  if (sp == 0)
 
1187
    return -1;
 
1188
 
 
1189
  rl_point = sp->point;
 
1190
  rl_end = sp->end;
 
1191
  rl_mark = sp->mark;
 
1192
  the_line = rl_line_buffer = sp->buffer;
 
1193
  rl_line_buffer_len = sp->buflen;
 
1194
  rl_undo_list = sp->ul;
 
1195
  rl_prompt = sp->prompt;
 
1196
 
 
1197
  rl_readline_state = sp->rlstate;
 
1198
  rl_done = sp->done;
 
1199
  _rl_keymap = sp->kmap;
 
1200
 
 
1201
  rl_last_func = sp->lastfunc;
 
1202
  rl_insert_mode = sp->insmode;
 
1203
  rl_editing_mode = sp->edmode;
 
1204
  rl_key_sequence_length = sp->kseqlen;
 
1205
  rl_instream = sp->inf;
 
1206
  rl_outstream = sp->outf;
 
1207
  rl_pending_input = sp->pendingin;
 
1208
  rl_executing_macro = sp->macro;
 
1209
 
 
1210
  rl_catch_signals = sp->catchsigs;
 
1211
  rl_catch_sigwinch = sp->catchsigwinch;
 
1212
 
 
1213
  return (0);
 
1214
}