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; |