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