File: interact.h

package info (click to toggle)
asymptote 3.05%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,420 kB
  • sloc: cpp: 172,663; ansic: 69,690; python: 14,957; sh: 5,605; javascript: 4,871; lisp: 1,507; perl: 1,417; makefile: 1,026; yacc: 610; lex: 449; xml: 182; asm: 8
file content (74 lines) | stat: -rw-r--r-- 1,847 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*****
 * interact.h
 *
 * The glue between the lexical analyzer and the readline library.
 *****/

#ifndef INTERACT_H
#define INTERACT_H

#include "common.h"

#ifdef HAVE_LIBCURSES
#ifdef HAVE_LIBREADLINE
#include <readline/readline.h>
#include <readline/history.h>
#else
#ifdef HAVE_LIBEDIT
// Work around incorrect declaration in NetBSD readline.h v1.33
#define rl_completion_entry_function rl_completion_entry_function_declaration
#ifdef HAVE_EDITLINE_READLINE_H
#include <editline/readline.h>
#else
#include <readline/readline.h>
#endif
#undef rl_completion_entry_function
extern "C" rl_compentry_func_t *rl_completion_entry_function;
#endif
#endif
#endif

void interruptHandler(int);

namespace interact {

extern bool interactive;
extern bool uptodate;
extern int lines; // Interactive scroll count
extern bool query; // Enable interactive scrolling;

void init_interactive();

// Read a line from the input, without any processing.
string simpleline(string prompt);

// Add a line of input to the readline history.
void addToHistory(string line);

// Functions to work with the most recently entered line in the history.
string getLastHistoryLine();
void setLastHistoryLine(string line);

// Remove the line last added to the history.
void deleteLastLine();

// Write out the history of input lines to the history file.
void cleanup_interactive();

// This class is used to set a text completion function for readline.  A class
// is used instead the usual function pointer so that information such as the
// current environment can be coded into the function (mimicking a closure).
class completer {
public:
  virtual ~completer() {};
  virtual char *operator () (const char *text, int state) = 0;
};

void setCompleter(completer *c);

#define YY_READ_BUF_SIZE YY_BUF_SIZE

void init_readline(bool tabcompletion);
}

#endif // INTERACT_H