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