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