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