xref: /openbmc/qemu/include/qemu/readline.h (revision 52f50b1e)
1 #ifndef READLINE_H
2 #define READLINE_H
3 
4 #define READLINE_CMD_BUF_SIZE 4095
5 #define READLINE_MAX_CMDS 64
6 #define READLINE_MAX_COMPLETIONS 256
7 
8 typedef void G_GNUC_PRINTF(2, 3) ReadLinePrintfFunc(void *opaque,
9                                                    const char *fmt, ...);
10 typedef void ReadLineFlushFunc(void *opaque);
11 typedef void ReadLineFunc(void *opaque, const char *str,
12                           void *readline_opaque);
13 typedef void ReadLineCompletionFunc(void *opaque,
14                                     const char *cmdline);
15 
16 typedef struct ReadLineState {
17     char cmd_buf[READLINE_CMD_BUF_SIZE + 1];
18     int cmd_buf_index;
19     int cmd_buf_size;
20 
21     char last_cmd_buf[READLINE_CMD_BUF_SIZE + 1];
22     int last_cmd_buf_index;
23     int last_cmd_buf_size;
24 
25     int esc_state;
26     int esc_param;
27 
28     char *history[READLINE_MAX_CMDS];
29     int hist_entry;
30 
31     ReadLineCompletionFunc *completion_finder;
32     char *completions[READLINE_MAX_COMPLETIONS];
33     int nb_completions;
34     int completion_index;
35 
36     ReadLineFunc *readline_func;
37     void *readline_opaque;
38     int read_password;
39     char prompt[256];
40 
41     ReadLinePrintfFunc *printf_func;
42     ReadLineFlushFunc *flush_func;
43     void *opaque;
44 } ReadLineState;
45 
46 void readline_add_completion(ReadLineState *rs, const char *str);
47 void readline_add_completion_of(ReadLineState *rs,
48                                 const char *pfx, const char *str);
49 void readline_set_completion_index(ReadLineState *rs, int completion_index);
50 
51 const char *readline_get_history(ReadLineState *rs, unsigned int index);
52 
53 void readline_handle_byte(ReadLineState *rs, int ch);
54 
55 void readline_start(ReadLineState *rs, const char *prompt, int read_password,
56                     ReadLineFunc *readline_func, void *readline_opaque);
57 void readline_restart(ReadLineState *rs);
58 void readline_show_prompt(ReadLineState *rs);
59 
60 ReadLineState *readline_init(ReadLinePrintfFunc *printf_func,
61                              ReadLineFlushFunc *flush_func,
62                              void *opaque,
63                              ReadLineCompletionFunc *completion_finder);
64 void readline_free(ReadLineState *rs);
65 
66 #endif /* READLINE_H */
67