Changeset d2cc7e1 in mainline for uspace/srv/fb/fb.c


Ignore:
Timestamp:
2009-03-21T11:26:31Z (15 years ago)
Author:
Jiri Svoboda <jirik.svoboda@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0a5116db
Parents:
5b8c75a
Message:

Buffer console output with line granularity. Makes esp. msim/ski console faster. EGA-fb needs fixing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fb/fb.c

    r5b8c75a rd2cc7e1  
    14721472        return rgb_from_idx(&vport->attr, fg_color, bg_color, flags);
    14731473}
     1474
     1475#define FB_WRITE_BUF_SIZE 256
     1476static char fb_write_buf[FB_WRITE_BUF_SIZE];
     1477
     1478static 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
    14741514
    14751515/** Function for handling connections to FB
     
    15471587                        /* Message already answered */
    15481588                        continue;
     1589                case FB_WRITE:
     1590                        fb_write(vport, callid, &call);
     1591                       
     1592                        /* Message already answered */
     1593                        continue;
    15491594                case FB_CLEAR:
    15501595                        vport_clear(vport);
Note: See TracChangeset for help on using the changeset viewer.