Revision c60bf339 readline.c

b/readline.c
21 21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 22
 * THE SOFTWARE.
23 23
 */
24

  
25
#include "qemu-common.h"
24 26
#include "monitor/readline.h"
25
#include "monitor/monitor.h"
26 27

  
27 28
#define IS_NORM 0
28 29
#define IS_ESC  1
29 30
#define IS_CSI  2
30 31
#define IS_SS3  3
31 32

  
32
#undef printf
33
#define printf do_not_use_printf
34

  
35 33
void readline_show_prompt(ReadLineState *rs)
36 34
{
37
    monitor_printf(rs->mon, "%s", rs->prompt);
38
    monitor_flush(rs->mon);
35
    rs->printf_func(rs->opaque, "%s", rs->prompt);
36
    rs->flush_func(rs->opaque);
39 37
    rs->last_cmd_buf_index = 0;
40 38
    rs->last_cmd_buf_size = 0;
41 39
    rs->esc_state = IS_NORM;
......
49 47
    if (rs->cmd_buf_size != rs->last_cmd_buf_size ||
50 48
        memcmp(rs->cmd_buf, rs->last_cmd_buf, rs->cmd_buf_size) != 0) {
51 49
        for(i = 0; i < rs->last_cmd_buf_index; i++) {
52
            monitor_printf(rs->mon, "\033[D");
50
            rs->printf_func(rs->opaque, "\033[D");
53 51
        }
54 52
        rs->cmd_buf[rs->cmd_buf_size] = '\0';
55 53
        if (rs->read_password) {
56 54
            len = strlen(rs->cmd_buf);
57 55
            for(i = 0; i < len; i++)
58
                monitor_printf(rs->mon, "*");
56
                rs->printf_func(rs->opaque, "*");
59 57
        } else {
60
            monitor_printf(rs->mon, "%s", rs->cmd_buf);
58
            rs->printf_func(rs->opaque, "%s", rs->cmd_buf);
61 59
        }
62
        monitor_printf(rs->mon, "\033[K");
60
        rs->printf_func(rs->opaque, "\033[K");
63 61
        memcpy(rs->last_cmd_buf, rs->cmd_buf, rs->cmd_buf_size);
64 62
        rs->last_cmd_buf_size = rs->cmd_buf_size;
65 63
        rs->last_cmd_buf_index = rs->cmd_buf_size;
......
68 66
        delta = rs->cmd_buf_index - rs->last_cmd_buf_index;
69 67
        if (delta > 0) {
70 68
            for(i = 0;i < delta; i++) {
71
                monitor_printf(rs->mon, "\033[C");
69
                rs->printf_func(rs->opaque, "\033[C");
72 70
            }
73 71
        } else {
74 72
            delta = -delta;
75 73
            for(i = 0;i < delta; i++) {
76
                monitor_printf(rs->mon, "\033[D");
74
                rs->printf_func(rs->opaque, "\033[D");
77 75
            }
78 76
        }
79 77
        rs->last_cmd_buf_index = rs->cmd_buf_index;
80 78
    }
81
    monitor_flush(rs->mon);
79
    rs->flush_func(rs->opaque);
82 80
}
83 81

  
84 82
static void readline_insert_char(ReadLineState *rs, int ch)
......
284 282
    cmdline = g_malloc(rs->cmd_buf_index + 1);
285 283
    memcpy(cmdline, rs->cmd_buf, rs->cmd_buf_index);
286 284
    cmdline[rs->cmd_buf_index] = '\0';
287
    rs->completion_finder(rs->mon, cmdline);
285
    rs->completion_finder(rs->opaque, cmdline);
288 286
    g_free(cmdline);
289 287

  
290 288
    /* no completion found */
......
299 297
        if (len > 0 && rs->completions[0][len - 1] != '/')
300 298
            readline_insert_char(rs, ' ');
301 299
    } else {
302
        monitor_printf(rs->mon, "\n");
300
        rs->printf_func(rs->opaque, "\n");
303 301
        max_width = 0;
304 302
        max_prefix = 0;	
305 303
        for(i = 0; i < rs->nb_completions; i++) {
......
329 327
        nb_cols = 80 / max_width;
330 328
        j = 0;
331 329
        for(i = 0; i < rs->nb_completions; i++) {
332
            monitor_printf(rs->mon, "%-*s", max_width, rs->completions[i]);
330
            rs->printf_func(rs->opaque, "%-*s", max_width, rs->completions[i]);
333 331
            if (++j == nb_cols || i == (rs->nb_completions - 1)) {
334
                monitor_printf(rs->mon, "\n");
332
                rs->printf_func(rs->opaque, "\n");
335 333
                j = 0;
336 334
            }
337 335
        }
......
365 363
            rs->cmd_buf[rs->cmd_buf_size] = '\0';
366 364
            if (!rs->read_password)
367 365
                readline_hist_add(rs, rs->cmd_buf);
368
            monitor_printf(rs->mon, "\n");
366
            rs->printf_func(rs->opaque, "\n");
369 367
            rs->cmd_buf_index = 0;
370 368
            rs->cmd_buf_size = 0;
371 369
            rs->last_cmd_buf_index = 0;
372 370
            rs->last_cmd_buf_size = 0;
373
            rs->readline_func(rs->mon, rs->cmd_buf, rs->readline_opaque);
371
            rs->readline_func(rs->opaque, rs->cmd_buf, rs->readline_opaque);
374 372
            break;
375 373
        case 23:
376 374
            /* ^W */
......
480 478
    return rs->history[index];
481 479
}
482 480

  
483
ReadLineState *readline_init(Monitor *mon,
481
ReadLineState *readline_init(ReadLinePrintfFunc *printf_func,
482
                             ReadLineFlushFunc *flush_func,
483
                             void *opaque,
484 484
                             ReadLineCompletionFunc *completion_finder)
485 485
{
486 486
    ReadLineState *rs = g_malloc0(sizeof(*rs));
487 487

  
488 488
    rs->hist_entry = -1;
489
    rs->mon = mon;
489
    rs->opaque = opaque;
490
    rs->printf_func = printf_func;
491
    rs->flush_func = flush_func;
490 492
    rs->completion_finder = completion_finder;
491 493

  
492 494
    return rs;

Also available in: Unified diff