Rev 3908 | Rev 4167 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3908 | Rev 4164 | ||
|---|---|---|---|
| Line 1470... | Line 1470... | ||
| 1470 | ipcarg_t bg_color, ipcarg_t flags) |
1470 | ipcarg_t bg_color, ipcarg_t flags) |
| 1471 | { |
1471 | { |
| 1472 | return rgb_from_idx(&vport->attr, fg_color, bg_color, flags); |
1472 | return rgb_from_idx(&vport->attr, fg_color, bg_color, flags); |
| 1473 | } |
1473 | } |
| 1474 | 1474 | ||
| - | 1475 | #define FB_WRITE_BUF_SIZE 256 |
|
| - | 1476 | static char fb_write_buf[FB_WRITE_BUF_SIZE]; |
|
| - | 1477 | ||
| - | 1478 | static void fb_write(viewport_t *vport, ipc_callid_t rid, ipc_call_t *request) |
|
| - | 1479 | { |
|
| - | 1480 | int row, col; |
|
| - | 1481 | ipc_callid_t callid; |
|
| - | 1482 | size_t len; |
|
| - | 1483 | size_t i; |
|
| - | 1484 | ||
| - | 1485 | row = IPC_GET_ARG1(*request); |
|
| - | 1486 | col = IPC_GET_ARG2(*request); |
|
| - | 1487 | ||
| - | 1488 | if ((col >= vport->cols) || (row >= vport->rows)) { |
|
| - | 1489 | ipc_answer_0(callid, EINVAL); |
|
| - | 1490 | ipc_answer_0(rid, EINVAL); |
|
| - | 1491 | return; |
|
| - | 1492 | } |
|
| - | 1493 | ||
| - | 1494 | if (!ipc_data_write_receive(&callid, &len)) { |
|
| - | 1495 | ipc_answer_0(callid, EINVAL); |
|
| - | 1496 | ipc_answer_0(rid, EINVAL); |
|
| - | 1497 | return; |
|
| - | 1498 | } |
|
| - | 1499 | ||
| - | 1500 | if (len > FB_WRITE_BUF_SIZE) |
|
| - | 1501 | len = FB_WRITE_BUF_SIZE; |
|
| - | 1502 | if (len >= vport->cols - col) |
|
| - | 1503 | len = vport->cols - col; |
|
| - | 1504 | ||
| - | 1505 | (void) ipc_data_write_finalize(callid, fb_write_buf, len); |
|
| - | 1506 | ||
| - | 1507 | for (i = 0; i < len; i++) { |
|
| - | 1508 | draw_char(vport, fb_write_buf[i], col++, row); |
|
| - | 1509 | } |
|
| - | 1510 | ||
| - | 1511 | ipc_answer_1(rid, EOK, len); |
|
| - | 1512 | } |
|
| - | 1513 | ||
| - | 1514 | ||
| 1475 | /** Function for handling connections to FB |
1515 | /** Function for handling connections to FB |
| 1476 | * |
1516 | * |
| 1477 | */ |
1517 | */ |
| 1478 | static void fb_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
1518 | static void fb_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
| 1479 | { |
1519 | { |
| Line 1544... | Line 1584... | ||
| 1544 | 1584 | ||
| 1545 | draw_char(vport, glyph, col, row); |
1585 | draw_char(vport, glyph, col, row); |
| 1546 | 1586 | ||
| 1547 | /* Message already answered */ |
1587 | /* Message already answered */ |
| 1548 | continue; |
1588 | continue; |
| - | 1589 | case FB_WRITE: |
|
| - | 1590 | fb_write(vport, callid, &call); |
|
| - | 1591 | ||
| - | 1592 | /* Message already answered */ |
|
| - | 1593 | continue; |
|
| 1549 | case FB_CLEAR: |
1594 | case FB_CLEAR: |
| 1550 | vport_clear(vport); |
1595 | vport_clear(vport); |
| 1551 | cursor_show(vport); |
1596 | cursor_show(vport); |
| 1552 | retval = EOK; |
1597 | retval = EOK; |
| 1553 | break; |
1598 | break; |