2 * Copyright 2005 Timo Hirvonen
11 struct cmdline cmdline
;
13 #define SANITY_CHECK() \
15 BUG_ON(cmdline.bpos > cmdline.blen); \
16 BUG_ON(cmdline.bpos < 0); \
17 BUG_ON(cmdline.cpos < 0); \
21 void cmdline_init(void)
28 cmdline
.line
= xnew(char, cmdline
.size
);
32 void cmdline_insert_ch(uchar ch
)
38 size
= u_char_size(ch
);
39 if (cmdline
.blen
+ size
> cmdline
.size
) {
41 cmdline
.line
= xrenew(char, cmdline
.line
, cmdline
.size
);
43 memmove(cmdline
.line
+ cmdline
.bpos
+ size
,
44 cmdline
.line
+ cmdline
.bpos
,
45 cmdline
.blen
- cmdline
.bpos
+ 1);
46 u_set_char_raw(cmdline
.line
, &cmdline
.bpos
, ch
);
52 void cmdline_backspace(void)
58 if (cmdline
.bpos
== 0)
62 u_prev_char_pos(cmdline
.line
, &bpos
);
63 size
= cmdline
.bpos
- bpos
;
65 memmove(cmdline
.line
+ bpos
,
66 cmdline
.line
+ cmdline
.bpos
,
67 cmdline
.blen
- cmdline
.bpos
+ 1);
74 void cmdline_delete_ch(void)
81 if (cmdline
.bpos
== cmdline
.blen
)
84 u_get_char(cmdline
.line
, &bpos
, &ch
);
85 size
= u_char_size(ch
);
88 memmove(cmdline
.line
+ cmdline
.bpos
,
89 cmdline
.line
+ cmdline
.bpos
+ size
,
90 cmdline
.blen
- cmdline
.bpos
+ 1);
93 void cmdline_set_text(const char *text
)
95 int len
= strlen(text
);
97 if (len
>= cmdline
.size
) {
98 while (len
>= cmdline
.size
)
100 cmdline
.line
= xrenew(char, cmdline
.line
, cmdline
.size
);
102 memcpy(cmdline
.line
, text
, len
+ 1);
103 cmdline
.cpos
= u_strlen(cmdline
.line
);
105 cmdline
.clen
= cmdline
.cpos
;
109 void cmdline_clear(void)
118 void cmdline_move_left(void)
122 if (cmdline
.bpos
> 0) {
124 u_prev_char_pos(cmdline
.line
, &cmdline
.bpos
);
128 void cmdline_move_right(void)
132 if (cmdline
.bpos
< cmdline
.blen
) {
135 u_get_char(cmdline
.line
, &cmdline
.bpos
, &ch
);
140 void cmdline_move_home(void)
148 void cmdline_move_end(void)
152 cmdline
.cpos
= cmdline
.clen
;
153 cmdline
.bpos
= cmdline
.blen
;