xref: /openbmc/qemu/include/qemu/readline.h (revision 52f50b1e)
10150cd81SStefan Hajnoczi #ifndef READLINE_H
20150cd81SStefan Hajnoczi #define READLINE_H
30150cd81SStefan Hajnoczi 
40150cd81SStefan Hajnoczi #define READLINE_CMD_BUF_SIZE 4095
50150cd81SStefan Hajnoczi #define READLINE_MAX_CMDS 64
60150cd81SStefan Hajnoczi #define READLINE_MAX_COMPLETIONS 256
70150cd81SStefan Hajnoczi 
89edc6313SMarc-André Lureau typedef void G_GNUC_PRINTF(2, 3) ReadLinePrintfFunc(void *opaque,
9d5d1507bSStefan Weil                                                    const char *fmt, ...);
100150cd81SStefan Hajnoczi typedef void ReadLineFlushFunc(void *opaque);
110150cd81SStefan Hajnoczi typedef void ReadLineFunc(void *opaque, const char *str,
120150cd81SStefan Hajnoczi                           void *readline_opaque);
130150cd81SStefan Hajnoczi typedef void ReadLineCompletionFunc(void *opaque,
140150cd81SStefan Hajnoczi                                     const char *cmdline);
150150cd81SStefan Hajnoczi 
160150cd81SStefan Hajnoczi typedef struct ReadLineState {
170150cd81SStefan Hajnoczi     char cmd_buf[READLINE_CMD_BUF_SIZE + 1];
180150cd81SStefan Hajnoczi     int cmd_buf_index;
190150cd81SStefan Hajnoczi     int cmd_buf_size;
200150cd81SStefan Hajnoczi 
210150cd81SStefan Hajnoczi     char last_cmd_buf[READLINE_CMD_BUF_SIZE + 1];
220150cd81SStefan Hajnoczi     int last_cmd_buf_index;
230150cd81SStefan Hajnoczi     int last_cmd_buf_size;
240150cd81SStefan Hajnoczi 
250150cd81SStefan Hajnoczi     int esc_state;
260150cd81SStefan Hajnoczi     int esc_param;
270150cd81SStefan Hajnoczi 
280150cd81SStefan Hajnoczi     char *history[READLINE_MAX_CMDS];
290150cd81SStefan Hajnoczi     int hist_entry;
300150cd81SStefan Hajnoczi 
310150cd81SStefan Hajnoczi     ReadLineCompletionFunc *completion_finder;
320150cd81SStefan Hajnoczi     char *completions[READLINE_MAX_COMPLETIONS];
330150cd81SStefan Hajnoczi     int nb_completions;
340150cd81SStefan Hajnoczi     int completion_index;
350150cd81SStefan Hajnoczi 
360150cd81SStefan Hajnoczi     ReadLineFunc *readline_func;
370150cd81SStefan Hajnoczi     void *readline_opaque;
380150cd81SStefan Hajnoczi     int read_password;
390150cd81SStefan Hajnoczi     char prompt[256];
400150cd81SStefan Hajnoczi 
410150cd81SStefan Hajnoczi     ReadLinePrintfFunc *printf_func;
420150cd81SStefan Hajnoczi     ReadLineFlushFunc *flush_func;
430150cd81SStefan Hajnoczi     void *opaque;
440150cd81SStefan Hajnoczi } ReadLineState;
450150cd81SStefan Hajnoczi 
460150cd81SStefan Hajnoczi void readline_add_completion(ReadLineState *rs, const char *str);
47*52f50b1eSMarkus Armbruster void readline_add_completion_of(ReadLineState *rs,
48*52f50b1eSMarkus Armbruster                                 const char *pfx, const char *str);
490150cd81SStefan Hajnoczi void readline_set_completion_index(ReadLineState *rs, int completion_index);
500150cd81SStefan Hajnoczi 
510150cd81SStefan Hajnoczi const char *readline_get_history(ReadLineState *rs, unsigned int index);
520150cd81SStefan Hajnoczi 
530150cd81SStefan Hajnoczi void readline_handle_byte(ReadLineState *rs, int ch);
540150cd81SStefan Hajnoczi 
550150cd81SStefan Hajnoczi void readline_start(ReadLineState *rs, const char *prompt, int read_password,
560150cd81SStefan Hajnoczi                     ReadLineFunc *readline_func, void *readline_opaque);
570150cd81SStefan Hajnoczi void readline_restart(ReadLineState *rs);
580150cd81SStefan Hajnoczi void readline_show_prompt(ReadLineState *rs);
590150cd81SStefan Hajnoczi 
600150cd81SStefan Hajnoczi ReadLineState *readline_init(ReadLinePrintfFunc *printf_func,
610150cd81SStefan Hajnoczi                              ReadLineFlushFunc *flush_func,
620150cd81SStefan Hajnoczi                              void *opaque,
630150cd81SStefan Hajnoczi                              ReadLineCompletionFunc *completion_finder);
64e5dc1a6cSMarc-André Lureau void readline_free(ReadLineState *rs);
650150cd81SStefan Hajnoczi 
66175de524SMarkus Armbruster #endif /* READLINE_H */
67