Rev 4173 | Rev 4226 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4173 | Rev 4211 | ||
|---|---|---|---|
| Line 101... | Line 101... | ||
| 101 | #define CWRITE_BUF_SIZE 256 |
101 | #define CWRITE_BUF_SIZE 256 |
| 102 | 102 | ||
| 103 | /** Buffer for receiving data via the CONSOLE_WRITE call from the client. */ |
103 | /** Buffer for receiving data via the CONSOLE_WRITE call from the client. */ |
| 104 | static char cwrite_buf[CWRITE_BUF_SIZE]; |
104 | static char cwrite_buf[CWRITE_BUF_SIZE]; |
| 105 | 105 | ||
| 106 | static void fb_putchar(char c, int row, int col); |
106 | static void fb_putchar(wchar_t c, int row, int col); |
| 107 | 107 | ||
| 108 | 108 | ||
| 109 | /** Find unused virtual console. |
109 | /** Find unused virtual console. |
| 110 | * |
110 | * |
| 111 | */ |
111 | */ |
| Line 249... | Line 249... | ||
| 249 | ++fb_pending.n; |
249 | ++fb_pending.n; |
| 250 | } |
250 | } |
| 251 | 251 | ||
| 252 | 252 | ||
| 253 | /** Print a character to the active VC with buffering. */ |
253 | /** Print a character to the active VC with buffering. */ |
| 254 | static void fb_putchar(char c, int row, int col) |
254 | static void fb_putchar(wchar_t c, int row, int col) |
| 255 | { |
255 | { |
| 256 | async_msg_3(fb_info.phone, FB_PUTCHAR, c, row, col); |
256 | async_msg_3(fb_info.phone, FB_PUTCHAR, c, row, col); |
| 257 | } |
257 | } |
| 258 | 258 | ||
| 259 | /** Process a character from the client (TTY emulation). */ |
259 | /** Process a character from the client (TTY emulation). */ |
| 260 | static void write_char(int console, char key) |
260 | static void write_char(int console, wchar_t ch) |
| 261 | { |
261 | { |
| 262 | bool flush_cursor = false; |
262 | bool flush_cursor = false; |
| 263 | screenbuffer_t *scr = &(connections[console].screenbuffer); |
263 | screenbuffer_t *scr = &(connections[console].screenbuffer); |
| 264 | 264 | ||
| 265 | switch (key) { |
265 | switch (ch) { |
| 266 | case '\n': |
266 | case '\n': |
| 267 | fb_pending_flush(); |
267 | fb_pending_flush(); |
| 268 | flush_cursor = true; |
268 | flush_cursor = true; |
| 269 | scr->position_y++; |
269 | scr->position_y++; |
| 270 | scr->position_x = 0; |
270 | scr->position_x = 0; |
| Line 285... | Line 285... | ||
| 285 | break; |
285 | break; |
| 286 | default: |
286 | default: |
| 287 | if (console == active_console) |
287 | if (console == active_console) |
| 288 | cell_mark_changed(scr->position_y, scr->position_x); |
288 | cell_mark_changed(scr->position_y, scr->position_x); |
| 289 | 289 | ||
| 290 | screenbuffer_putchar(scr, key); |
290 | screenbuffer_putchar(scr, ch); |
| 291 | scr->position_x++; |
291 | scr->position_x++; |
| 292 | } |
292 | } |
| 293 | 293 | ||
| 294 | if (scr->position_x >= scr->size_x) { |
294 | if (scr->position_x >= scr->size_x) { |
| 295 | flush_cursor = true; |
295 | flush_cursor = true; |