Rev 4142 | Rev 4167 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4142 | Rev 4164 | ||
|---|---|---|---|
| Line 241... | Line 241... | ||
| 241 | a0 = a1; |
241 | a0 = a1; |
| 242 | } |
242 | } |
| 243 | } |
243 | } |
| 244 | } |
244 | } |
| 245 | 245 | ||
| - | 246 | int lastcol = 0; |
|
| - | 247 | int lastrow = 0; |
|
| - | 248 | ||
| - | 249 | #define FB_WRITE_BUF_SIZE 256 |
|
| - | 250 | static char fb_write_buf[FB_WRITE_BUF_SIZE]; |
|
| - | 251 | ||
| - | 252 | static void fb_write(ipc_callid_t rid, ipc_call_t *request) |
|
| - | 253 | { |
|
| - | 254 | int row, col; |
|
| - | 255 | ipc_callid_t callid; |
|
| - | 256 | size_t len; |
|
| - | 257 | size_t i; |
|
| - | 258 | ||
| - | 259 | row = IPC_GET_ARG1(*request); |
|
| - | 260 | col = IPC_GET_ARG2(*request); |
|
| - | 261 | ||
| - | 262 | if ((col >= scr_width) || (row >= scr_height)) { |
|
| - | 263 | ipc_answer_0(callid, EINVAL); |
|
| - | 264 | ipc_answer_0(rid, EINVAL); |
|
| - | 265 | return; |
|
| - | 266 | } |
|
| - | 267 | ||
| - | 268 | if (!ipc_data_write_receive(&callid, &len)) { |
|
| - | 269 | ipc_answer_0(callid, EINVAL); |
|
| - | 270 | ipc_answer_0(rid, EINVAL); |
|
| - | 271 | return; |
|
| - | 272 | } |
|
| - | 273 | ||
| - | 274 | if (len > FB_WRITE_BUF_SIZE) |
|
| - | 275 | len = FB_WRITE_BUF_SIZE; |
|
| - | 276 | if (len >= scr_width - col) |
|
| - | 277 | len = scr_width - col; |
|
| - | 278 | ||
| - | 279 | (void) ipc_data_write_finalize(callid, fb_write_buf, len); |
|
| - | 280 | ||
| - | 281 | if ((lastcol != col) || (lastrow != row)) |
|
| - | 282 | serial_goto(row, col); |
|
| - | 283 | ||
| - | 284 | for (i = 0; i < len; i++) { |
|
| - | 285 | (*putc_function)(fb_write_buf[i]); |
|
| - | 286 | } |
|
| - | 287 | ||
| - | 288 | lastcol = col + len; |
|
| - | 289 | lastrow = row; |
|
| - | 290 | ||
| - | 291 | ipc_answer_1(rid, EOK, len); |
|
| - | 292 | } |
|
| - | 293 | ||
| 246 | /** |
294 | /** |
| 247 | * Main function of the thread serving client connections. |
295 | * Main function of the thread serving client connections. |
| 248 | */ |
296 | */ |
| 249 | void serial_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
297 | void serial_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
| 250 | { |
298 | { |
| Line 253... | Line 301... | ||
| 253 | ipc_call_t call; |
301 | ipc_call_t call; |
| 254 | keyfield_t *interbuf = NULL; |
302 | keyfield_t *interbuf = NULL; |
| 255 | size_t intersize = 0; |
303 | size_t intersize = 0; |
| 256 | 304 | ||
| 257 | char c; |
305 | char c; |
| 258 | int lastcol = 0; |
- | |
| 259 | int lastrow = 0; |
- | |
| 260 | int newcol; |
306 | int newcol; |
| 261 | int newrow; |
307 | int newrow; |
| 262 | int fgcolor; |
308 | int fgcolor; |
| 263 | int bgcolor; |
309 | int bgcolor; |
| 264 | int flags; |
310 | int flags; |
| Line 315... | Line 361... | ||
| 315 | lastcol = newcol + 1; |
361 | lastcol = newcol + 1; |
| 316 | lastrow = newrow; |
362 | lastrow = newrow; |
| 317 | (*putc_function)(c); |
363 | (*putc_function)(c); |
| 318 | retval = 0; |
364 | retval = 0; |
| 319 | break; |
365 | break; |
| - | 366 | case FB_WRITE: |
|
| - | 367 | fb_write(callid, &call); |
|
| - | 368 | ||
| - | 369 | /* Message already answered */ |
|
| - | 370 | continue; |
|
| 320 | case FB_CURSOR_GOTO: |
371 | case FB_CURSOR_GOTO: |
| 321 | newrow = IPC_GET_ARG1(call); |
372 | newrow = IPC_GET_ARG1(call); |
| 322 | newcol = IPC_GET_ARG2(call); |
373 | newcol = IPC_GET_ARG2(call); |
| 323 | serial_goto(newrow, newcol); |
374 | serial_goto(newrow, newcol); |
| 324 | lastrow = newrow; |
375 | lastrow = newrow; |