xref: /qemu/include/qemu/readline.h (revision e5dc1a6c6c4359cd783810f63eb68e9e09350708)
1376253ecSaliguori #ifndef READLINE_H
2376253ecSaliguori #define READLINE_H
3376253ecSaliguori 
44c36ba32Saliguori #define READLINE_CMD_BUF_SIZE 4095
54c36ba32Saliguori #define READLINE_MAX_CMDS 64
64c36ba32Saliguori #define READLINE_MAX_COMPLETIONS 256
74c36ba32Saliguori 
8d5d1507bSStefan Weil typedef void GCC_FMT_ATTR(2, 3) ReadLinePrintfFunc(void *opaque,
9d5d1507bSStefan Weil                                                    const char *fmt, ...);
10c60bf339SStefan Hajnoczi typedef void ReadLineFlushFunc(void *opaque);
11c60bf339SStefan Hajnoczi typedef void ReadLineFunc(void *opaque, const char *str,
12c60bf339SStefan Hajnoczi                           void *readline_opaque);
13c60bf339SStefan Hajnoczi typedef void ReadLineCompletionFunc(void *opaque,
14d2674b2cSWenchao Xia                                     const char *cmdline);
15376253ecSaliguori 
164c36ba32Saliguori typedef struct ReadLineState {
174c36ba32Saliguori     char cmd_buf[READLINE_CMD_BUF_SIZE + 1];
184c36ba32Saliguori     int cmd_buf_index;
194c36ba32Saliguori     int cmd_buf_size;
20376253ecSaliguori 
214c36ba32Saliguori     char last_cmd_buf[READLINE_CMD_BUF_SIZE + 1];
224c36ba32Saliguori     int last_cmd_buf_index;
234c36ba32Saliguori     int last_cmd_buf_size;
24376253ecSaliguori 
254c36ba32Saliguori     int esc_state;
264c36ba32Saliguori     int esc_param;
27376253ecSaliguori 
284c36ba32Saliguori     char *history[READLINE_MAX_CMDS];
294c36ba32Saliguori     int hist_entry;
304c36ba32Saliguori 
314c36ba32Saliguori     ReadLineCompletionFunc *completion_finder;
324c36ba32Saliguori     char *completions[READLINE_MAX_COMPLETIONS];
334c36ba32Saliguori     int nb_completions;
344c36ba32Saliguori     int completion_index;
354c36ba32Saliguori 
364c36ba32Saliguori     ReadLineFunc *readline_func;
374c36ba32Saliguori     void *readline_opaque;
384c36ba32Saliguori     int read_password;
394c36ba32Saliguori     char prompt[256];
40c60bf339SStefan Hajnoczi 
41c60bf339SStefan Hajnoczi     ReadLinePrintfFunc *printf_func;
42c60bf339SStefan Hajnoczi     ReadLineFlushFunc *flush_func;
43c60bf339SStefan Hajnoczi     void *opaque;
444c36ba32Saliguori } ReadLineState;
454c36ba32Saliguori 
464c36ba32Saliguori void readline_add_completion(ReadLineState *rs, const char *str);
474c36ba32Saliguori void readline_set_completion_index(ReadLineState *rs, int completion_index);
484c36ba32Saliguori 
494c36ba32Saliguori const char *readline_get_history(ReadLineState *rs, unsigned int index);
504c36ba32Saliguori 
514c36ba32Saliguori void readline_handle_byte(ReadLineState *rs, int ch);
524c36ba32Saliguori 
534c36ba32Saliguori void readline_start(ReadLineState *rs, const char *prompt, int read_password,
54c60bf339SStefan Hajnoczi                     ReadLineFunc *readline_func, void *readline_opaque);
552724b180Saliguori void readline_restart(ReadLineState *rs);
564c36ba32Saliguori void readline_show_prompt(ReadLineState *rs);
574c36ba32Saliguori 
58c60bf339SStefan Hajnoczi ReadLineState *readline_init(ReadLinePrintfFunc *printf_func,
59c60bf339SStefan Hajnoczi                              ReadLineFlushFunc *flush_func,
60c60bf339SStefan Hajnoczi                              void *opaque,
614c36ba32Saliguori                              ReadLineCompletionFunc *completion_finder);
62*e5dc1a6cSMarc-André Lureau void readline_free(ReadLineState *rs);
63376253ecSaliguori 
64175de524SMarkus Armbruster #endif /* READLINE_H */
65