Rev 4266 | Rev 4496 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4266 | Rev 4486 | ||
|---|---|---|---|
| Line 30... | Line 30... | ||
| 30 | */ |
30 | */ |
| 31 | 31 | ||
| 32 | #include <stdio.h> |
32 | #include <stdio.h> |
| 33 | #include <stdlib.h> |
33 | #include <stdlib.h> |
| 34 | #include <string.h> |
34 | #include <string.h> |
| 35 | #include <io/stream.h> |
- | |
| 36 | #include <console.h> |
35 | #include <io/console.h> |
| 37 | #include <kbd/kbd.h> |
36 | #include <io/keycode.h> |
| 38 | #include <kbd/keycode.h> |
37 | #include <io/style.h> |
| 39 | #include <errno.h> |
38 | #include <errno.h> |
| 40 | #include <bool.h> |
39 | #include <bool.h> |
| 41 | 40 | ||
| 42 | #include "config.h" |
41 | #include "config.h" |
| 43 | #include "util.h" |
42 | #include "util.h" |
| Line 98... | Line 97... | ||
| 98 | return rc; |
97 | return rc; |
| 99 | } |
98 | } |
| 100 | 99 | ||
| 101 | static void read_line(char *buffer, int n) |
100 | static void read_line(char *buffer, int n) |
| 102 | { |
101 | { |
| 103 | kbd_event_t ev; |
102 | console_event_t ev; |
| 104 | size_t offs, otmp; |
103 | size_t offs, otmp; |
| 105 | wchar_t dec; |
104 | wchar_t dec; |
| 106 | 105 | ||
| 107 | offs = 0; |
106 | offs = 0; |
| 108 | while (true) { |
107 | while (true) { |
| 109 | fflush(stdout); |
108 | fflush(stdout); |
| 110 | if (kbd_get_event(&ev) < 0) |
109 | if (!console_get_event(fphone(stdin), &ev)) |
| 111 | return; |
110 | return; |
| - | 111 | ||
| 112 | if (ev.type == KE_RELEASE) |
112 | if (ev.type != KEY_PRESS) |
| 113 | continue; |
113 | continue; |
| 114 | 114 | ||
| 115 | if (ev.key == KC_ENTER || ev.key == KC_NENTER) |
115 | if (ev.key == KC_ENTER || ev.key == KC_NENTER) |
| 116 | break; |
116 | break; |
| 117 | if (ev.key == KC_BACKSPACE) { |
117 | if (ev.key == KC_BACKSPACE) { |
| 118 | if (offs > 0) { |
118 | if (offs > 0) { |
| 119 | /* |
119 | /* |
| Line 129... | Line 129... | ||
| 129 | putchar('\b'); |
129 | putchar('\b'); |
| 130 | } |
130 | } |
| 131 | continue; |
131 | continue; |
| 132 | } |
132 | } |
| 133 | if (ev.c >= ' ') { |
133 | if (ev.c >= ' ') { |
| 134 | //putchar(ev.c); |
- | |
| 135 | if (chr_encode(ev.c, buffer, &offs, n - 1) == EOK) |
134 | if (chr_encode(ev.c, buffer, &offs, n - 1) == EOK) |
| 136 | console_putchar(ev.c); |
135 | putchar(ev.c); |
| 137 | } |
136 | } |
| 138 | } |
137 | } |
| 139 | putchar('\n'); |
138 | putchar('\n'); |
| 140 | buffer[offs] = '\0'; |
139 | buffer[offs] = '\0'; |
| 141 | } |
140 | } |
| Line 145... | Line 144... | ||
| 145 | * just for command history and making arrows work. */ |
144 | * just for command history and making arrows work. */ |
| 146 | void get_input(cliuser_t *usr) |
145 | void get_input(cliuser_t *usr) |
| 147 | { |
146 | { |
| 148 | char line[INPUT_MAX]; |
147 | char line[INPUT_MAX]; |
| 149 | 148 | ||
| 150 | console_set_style(STYLE_EMPHASIS); |
149 | console_set_style(fphone(stdout), STYLE_EMPHASIS); |
| 151 | printf("%s", usr->prompt); |
150 | printf("%s", usr->prompt); |
| 152 | console_set_style(STYLE_NORMAL); |
151 | console_set_style(fphone(stdout), STYLE_NORMAL); |
| 153 | 152 | ||
| 154 | read_line(line, INPUT_MAX); |
153 | read_line(line, INPUT_MAX); |
| 155 | /* Make sure we don't have rubbish or a C/R happy user */ |
154 | /* Make sure we don't have rubbish or a C/R happy user */ |
| 156 | if (str_cmp(line, "") == 0 || str_cmp(line, "\n") == 0) |
155 | if (str_cmp(line, "") == 0 || str_cmp(line, "\n") == 0) |
| 157 | return; |
156 | return; |