Subversion Repositories HelenOS

Rev

Rev 4164 | Rev 4167 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4164 Rev 4165
Line 229... Line 229...
229
        a->a.i.bg_color, a->a.i.flags);
229
        a->a.i.bg_color, a->a.i.flags);
230
    default: return INVERTED_COLOR;
230
    default: return INVERTED_COLOR;
231
    }
231
    }
232
}
232
}
233
 
233
 
-
 
234
#define FB_WRITE_BUF_SIZE 256
-
 
235
static char fb_write_buf[FB_WRITE_BUF_SIZE];
-
 
236
 
-
 
237
static void fb_write(ipc_callid_t rid, ipc_call_t *request)
-
 
238
{
-
 
239
    int row, col;
-
 
240
    ipc_callid_t callid;
-
 
241
    size_t len;
-
 
242
    size_t i;
-
 
243
 
-
 
244
    row = IPC_GET_ARG1(*request);
-
 
245
    col = IPC_GET_ARG2(*request);
-
 
246
 
-
 
247
    if ((col >= scr_width) || (row >= scr_height)) {
-
 
248
        ipc_answer_0(callid, EINVAL);
-
 
249
        ipc_answer_0(rid, EINVAL);
-
 
250
        return;
-
 
251
    }
-
 
252
 
-
 
253
    if (!ipc_data_write_receive(&callid, &len)) {
-
 
254
        ipc_answer_0(callid, EINVAL);
-
 
255
        ipc_answer_0(rid, EINVAL);
-
 
256
        return;
-
 
257
    }
-
 
258
 
-
 
259
    if (len > FB_WRITE_BUF_SIZE)
-
 
260
        len = FB_WRITE_BUF_SIZE;
-
 
261
    if (len >= scr_width - col)
-
 
262
        len = scr_width - col;
-
 
263
 
-
 
264
    (void) ipc_data_write_finalize(callid, fb_write_buf, len);
-
 
265
 
-
 
266
    for (i = 0; i < len; i++) {
-
 
267
        printchar(fb_write_buf[i], row, col++);
-
 
268
    }
-
 
269
 
-
 
270
    ipc_answer_1(rid, EOK, len);
-
 
271
}
-
 
272
 
234
static void ega_client_connection(ipc_callid_t iid, ipc_call_t *icall)
273
static void ega_client_connection(ipc_callid_t iid, ipc_call_t *icall)
235
{
274
{
236
    int retval;
275
    int retval;
237
    ipc_callid_t callid;
276
    ipc_callid_t callid;
238
    ipc_call_t call;
277
    ipc_call_t call;
Line 293... Line 332...
293
                break;
332
                break;
294
            }
333
            }
295
            printchar(c, row, col);
334
            printchar(c, row, col);
296
            retval = 0;
335
            retval = 0;
297
            break;
336
            break;
-
 
337
        case FB_WRITE:
-
 
338
            fb_write(callid, &call);
-
 
339
 
-
 
340
            /* Message already answered */
-
 
341
            continue;
298
        case FB_CURSOR_GOTO:
342
        case FB_CURSOR_GOTO:
299
            row = IPC_GET_ARG1(call);
343
            row = IPC_GET_ARG1(call);
300
            col = IPC_GET_ARG2(call);
344
            col = IPC_GET_ARG2(call);
301
            if (row >= scr_height || col >= scr_width) {
345
            if (row >= scr_height || col >= scr_width) {
302
                retval = EINVAL;
346
                retval = EINVAL;