• Home
  • Raw
  • Download

Lines Matching refs:rs

34 void readline_show_prompt(ReadLineState *rs)  in readline_show_prompt()  argument
36 monitor_printf(rs->mon, "%s", rs->prompt); in readline_show_prompt()
37 monitor_flush(rs->mon); in readline_show_prompt()
38 rs->last_cmd_buf_index = 0; in readline_show_prompt()
39 rs->last_cmd_buf_size = 0; in readline_show_prompt()
40 rs->esc_state = IS_NORM; in readline_show_prompt()
44 static void readline_update(ReadLineState *rs) in readline_update() argument
48 if (rs->cmd_buf_size != rs->last_cmd_buf_size || in readline_update()
49 memcmp(rs->cmd_buf, rs->last_cmd_buf, rs->cmd_buf_size) != 0) { in readline_update()
50 for(i = 0; i < rs->last_cmd_buf_index; i++) { in readline_update()
51 monitor_printf(rs->mon, "\033[D"); in readline_update()
53 rs->cmd_buf[rs->cmd_buf_size] = '\0'; in readline_update()
54 if (rs->read_password) { in readline_update()
55 len = strlen(rs->cmd_buf); in readline_update()
57 monitor_printf(rs->mon, "*"); in readline_update()
59 monitor_printf(rs->mon, "%s", rs->cmd_buf); in readline_update()
61 monitor_printf(rs->mon, "\033[K"); in readline_update()
62 memcpy(rs->last_cmd_buf, rs->cmd_buf, rs->cmd_buf_size); in readline_update()
63 rs->last_cmd_buf_size = rs->cmd_buf_size; in readline_update()
64 rs->last_cmd_buf_index = rs->cmd_buf_size; in readline_update()
66 if (rs->cmd_buf_index != rs->last_cmd_buf_index) { in readline_update()
67 delta = rs->cmd_buf_index - rs->last_cmd_buf_index; in readline_update()
70 monitor_printf(rs->mon, "\033[C"); in readline_update()
75 monitor_printf(rs->mon, "\033[D"); in readline_update()
78 rs->last_cmd_buf_index = rs->cmd_buf_index; in readline_update()
80 monitor_flush(rs->mon); in readline_update()
83 static void readline_insert_char(ReadLineState *rs, int ch) in readline_insert_char() argument
85 if (rs->cmd_buf_index < READLINE_CMD_BUF_SIZE) { in readline_insert_char()
86 memmove(rs->cmd_buf + rs->cmd_buf_index + 1, in readline_insert_char()
87 rs->cmd_buf + rs->cmd_buf_index, in readline_insert_char()
88 rs->cmd_buf_size - rs->cmd_buf_index); in readline_insert_char()
89 rs->cmd_buf[rs->cmd_buf_index] = ch; in readline_insert_char()
90 rs->cmd_buf_size++; in readline_insert_char()
91 rs->cmd_buf_index++; in readline_insert_char()
95 static void readline_backward_char(ReadLineState *rs) in readline_backward_char() argument
97 if (rs->cmd_buf_index > 0) { in readline_backward_char()
98 rs->cmd_buf_index--; in readline_backward_char()
102 static void readline_forward_char(ReadLineState *rs) in readline_forward_char() argument
104 if (rs->cmd_buf_index < rs->cmd_buf_size) { in readline_forward_char()
105 rs->cmd_buf_index++; in readline_forward_char()
109 static void readline_delete_char(ReadLineState *rs) in readline_delete_char() argument
111 if (rs->cmd_buf_index < rs->cmd_buf_size) { in readline_delete_char()
112 memmove(rs->cmd_buf + rs->cmd_buf_index, in readline_delete_char()
113 rs->cmd_buf + rs->cmd_buf_index + 1, in readline_delete_char()
114 rs->cmd_buf_size - rs->cmd_buf_index - 1); in readline_delete_char()
115 rs->cmd_buf_size--; in readline_delete_char()
119 static void readline_backspace(ReadLineState *rs) in readline_backspace() argument
121 if (rs->cmd_buf_index > 0) { in readline_backspace()
122 readline_backward_char(rs); in readline_backspace()
123 readline_delete_char(rs); in readline_backspace()
127 static void readline_backword(ReadLineState *rs) in readline_backword() argument
131 if (rs->cmd_buf_index == 0 || rs->cmd_buf_index > rs->cmd_buf_size) { in readline_backword()
135 start = rs->cmd_buf_index - 1; in readline_backword()
139 if (!qemu_isspace(rs->cmd_buf[start])) { in readline_backword()
148 if (qemu_isspace(rs->cmd_buf[start])) { in readline_backword()
157 if (start < rs->cmd_buf_index) { in readline_backword()
158 memmove(rs->cmd_buf + start, in readline_backword()
159 rs->cmd_buf + rs->cmd_buf_index, in readline_backword()
160 rs->cmd_buf_size - rs->cmd_buf_index); in readline_backword()
161 rs->cmd_buf_size -= rs->cmd_buf_index - start; in readline_backword()
162 rs->cmd_buf_index = start; in readline_backword()
166 static void readline_bol(ReadLineState *rs) in readline_bol() argument
168 rs->cmd_buf_index = 0; in readline_bol()
171 static void readline_eol(ReadLineState *rs) in readline_eol() argument
173 rs->cmd_buf_index = rs->cmd_buf_size; in readline_eol()
176 static void readline_up_char(ReadLineState *rs) in readline_up_char() argument
180 if (rs->hist_entry == 0) in readline_up_char()
182 if (rs->hist_entry == -1) { in readline_up_char()
185 if (rs->history[idx] == NULL) in readline_up_char()
188 rs->hist_entry = idx; in readline_up_char()
190 rs->hist_entry--; in readline_up_char()
191 if (rs->hist_entry >= 0) { in readline_up_char()
192 pstrcpy(rs->cmd_buf, sizeof(rs->cmd_buf), in readline_up_char()
193 rs->history[rs->hist_entry]); in readline_up_char()
194 rs->cmd_buf_index = rs->cmd_buf_size = strlen(rs->cmd_buf); in readline_up_char()
198 static void readline_down_char(ReadLineState *rs) in readline_down_char() argument
200 if (rs->hist_entry == -1) in readline_down_char()
202 if (rs->hist_entry < READLINE_MAX_CMDS - 1 && in readline_down_char()
203 rs->history[++rs->hist_entry] != NULL) { in readline_down_char()
204 pstrcpy(rs->cmd_buf, sizeof(rs->cmd_buf), in readline_down_char()
205 rs->history[rs->hist_entry]); in readline_down_char()
207 rs->cmd_buf[0] = 0; in readline_down_char()
208 rs->hist_entry = -1; in readline_down_char()
210 rs->cmd_buf_index = rs->cmd_buf_size = strlen(rs->cmd_buf); in readline_down_char()
213 static void readline_hist_add(ReadLineState *rs, const char *cmdline) in readline_hist_add() argument
221 if (rs->hist_entry != -1) { in readline_hist_add()
223 hist_entry = rs->history[rs->hist_entry]; in readline_hist_add()
224 idx = rs->hist_entry; in readline_hist_add()
231 hist_entry = rs->history[idx]; in readline_hist_add()
238 memmove(&rs->history[idx], &rs->history[idx + 1], in readline_hist_add()
240 rs->history[READLINE_MAX_CMDS - 1] = NULL; in readline_hist_add()
242 if (rs->history[idx] == NULL) in readline_hist_add()
250 free(rs->history[0]); in readline_hist_add()
251 memcpy(rs->history, &rs->history[1], in readline_hist_add()
253 rs->history[READLINE_MAX_CMDS - 1] = NULL; in readline_hist_add()
258 rs->history[idx] = new_entry; in readline_hist_add()
259 rs->hist_entry = -1; in readline_hist_add()
264 void readline_add_completion(ReadLineState *rs, const char *str) in readline_add_completion() argument
266 if (rs->nb_completions < READLINE_MAX_COMPLETIONS) { in readline_add_completion()
267 rs->completions[rs->nb_completions++] = qemu_strdup(str); in readline_add_completion()
271 void readline_set_completion_index(ReadLineState *rs, int index) in readline_set_completion_index() argument
273 rs->completion_index = index; in readline_set_completion_index()
276 static void readline_completion(ReadLineState *rs) in readline_completion() argument
282 rs->nb_completions = 0; in readline_completion()
284 cmdline = qemu_malloc(rs->cmd_buf_index + 1); in readline_completion()
285 memcpy(cmdline, rs->cmd_buf, rs->cmd_buf_index); in readline_completion()
286 cmdline[rs->cmd_buf_index] = '\0'; in readline_completion()
287 rs->completion_finder(cmdline); in readline_completion()
291 if (rs->nb_completions <= 0) in readline_completion()
293 if (rs->nb_completions == 1) { in readline_completion()
294 len = strlen(rs->completions[0]); in readline_completion()
295 for(i = rs->completion_index; i < len; i++) { in readline_completion()
296 readline_insert_char(rs, rs->completions[0][i]); in readline_completion()
299 if (len > 0 && rs->completions[0][len - 1] != '/') in readline_completion()
300 readline_insert_char(rs, ' '); in readline_completion()
305 for(i = 0; i < rs->nb_completions; i++) { in readline_completion()
306 len = strlen(rs->completions[i]); in readline_completion()
313 if (rs->completions[i][j] != rs->completions[0][j]) in readline_completion()
321 for(i = rs->completion_index; i < max_prefix; i++) { in readline_completion()
322 readline_insert_char(rs, rs->completions[0][i]); in readline_completion()
331 for(i = 0; i < rs->nb_completions; i++) { in readline_completion()
332 monitor_printf(rs->mon, "%-*s", max_width, rs->completions[i]); in readline_completion()
333 if (++j == nb_cols || i == (rs->nb_completions - 1)) { in readline_completion()
334 monitor_printf(rs->mon, "\n"); in readline_completion()
338 readline_show_prompt(rs); in readline_completion()
343 void readline_handle_byte(ReadLineState *rs, int ch) in readline_handle_byte() argument
345 switch(rs->esc_state) { in readline_handle_byte()
349 readline_bol(rs); in readline_handle_byte()
352 readline_delete_char(rs); in readline_handle_byte()
355 readline_eol(rs); in readline_handle_byte()
358 readline_completion(rs); in readline_handle_byte()
362 rs->cmd_buf[rs->cmd_buf_size] = '\0'; in readline_handle_byte()
363 if (!rs->read_password) in readline_handle_byte()
364 readline_hist_add(rs, rs->cmd_buf); in readline_handle_byte()
365 monitor_printf(rs->mon, "\n"); in readline_handle_byte()
366 rs->cmd_buf_index = 0; in readline_handle_byte()
367 rs->cmd_buf_size = 0; in readline_handle_byte()
368 rs->last_cmd_buf_index = 0; in readline_handle_byte()
369 rs->last_cmd_buf_size = 0; in readline_handle_byte()
370 rs->readline_func(rs->mon, rs->cmd_buf, rs->readline_opaque); in readline_handle_byte()
374 readline_backword(rs); in readline_handle_byte()
377 rs->esc_state = IS_ESC; in readline_handle_byte()
381 readline_backspace(rs); in readline_handle_byte()
384 rs->esc_state = IS_CSI; in readline_handle_byte()
388 readline_insert_char(rs, ch); in readline_handle_byte()
395 rs->esc_state = IS_CSI; in readline_handle_byte()
396 rs->esc_param = 0; in readline_handle_byte()
398 rs->esc_state = IS_NORM; in readline_handle_byte()
405 readline_up_char(rs); in readline_handle_byte()
409 readline_down_char(rs); in readline_handle_byte()
412 readline_backward_char(rs); in readline_handle_byte()
415 readline_forward_char(rs); in readline_handle_byte()
418 rs->esc_param = rs->esc_param * 10 + (ch - '0'); in readline_handle_byte()
421 switch(rs->esc_param) { in readline_handle_byte()
423 readline_bol(rs); in readline_handle_byte()
426 readline_delete_char(rs); in readline_handle_byte()
429 readline_eol(rs); in readline_handle_byte()
436 rs->esc_state = IS_NORM; in readline_handle_byte()
440 readline_update(rs); in readline_handle_byte()
443 void readline_start(ReadLineState *rs, const char *prompt, int read_password, in readline_start() argument
446 pstrcpy(rs->prompt, sizeof(rs->prompt), prompt); in readline_start()
447 rs->readline_func = readline_func; in readline_start()
448 rs->readline_opaque = opaque; in readline_start()
449 rs->read_password = read_password; in readline_start()
450 readline_restart(rs); in readline_start()
453 void readline_restart(ReadLineState *rs) in readline_restart() argument
455 rs->cmd_buf_index = 0; in readline_restart()
456 rs->cmd_buf_size = 0; in readline_restart()
459 const char *readline_get_history(ReadLineState *rs, unsigned int index) in readline_get_history() argument
463 return rs->history[index]; in readline_get_history()
469 ReadLineState *rs = qemu_mallocz(sizeof(*rs)); in readline_init() local
471 rs->hist_entry = -1; in readline_init()
472 rs->mon = mon; in readline_init()
473 rs->completion_finder = completion_finder; in readline_init()
475 return rs; in readline_init()
478 void readline_free(ReadLineState *rs) in readline_free() argument
480 if (rs) { in readline_free()
481 rs->mon = NULL; in readline_free()
482 rs->completion_finder = NULL; in readline_free()
483 qemu_free(rs); in readline_free()