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