Subversion Repositories HelenOS

Rev

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;