Rev 2618 | Rev 2621 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2618 | Rev 2619 | ||
---|---|---|---|
Line 275... | Line 275... | ||
275 | clrscr(); |
275 | clrscr(); |
276 | style = &conn->screenbuffer.style; |
276 | style = &conn->screenbuffer.style; |
277 | 277 | ||
278 | for (j = 0; j < conn->screenbuffer.size_y; j++) |
278 | for (j = 0; j < conn->screenbuffer.size_y; j++) |
279 | for (i = 0; i < conn->screenbuffer.size_x; i++) { |
279 | for (i = 0; i < conn->screenbuffer.size_x; i++) { |
280 | field = get_field_at(&conn->screenbuffer, i, |
280 | field = get_field_at(&conn->screenbuffer, i, j); |
281 | j); |
- | |
282 | if (!style_same(*style, field->style)) |
281 | if (!style_same(*style, field->style)) |
283 | set_style(&field->style); |
282 | set_style(&field->style); |
284 | style = &field->style; |
283 | style = &field->style; |
285 | if ((field->character == ' ') && |
284 | if ((field->character == ' ') && |
286 | (style_same(field->style, |
285 | (style_same(field->style, |
Line 347... | Line 346... | ||
347 | } |
346 | } |
348 | 347 | ||
349 | /* if client is awaiting key, send it */ |
348 | /* if client is awaiting key, send it */ |
350 | if (conn->keyrequest_counter > 0) { |
349 | if (conn->keyrequest_counter > 0) { |
351 | conn->keyrequest_counter--; |
350 | conn->keyrequest_counter--; |
352 | ipc_answer_fast(fifo_pop(conn->keyrequests), 0, |
351 | ipc_answer_1(fifo_pop(conn->keyrequests), EOK, |
353 | c, 0); |
352 | c); |
354 | break; |
353 | break; |
355 | } |
354 | } |
356 | 355 | ||
357 | keybuffer_push(&conn->keybuffer, c); |
356 | keybuffer_push(&conn->keybuffer, c); |
358 | retval = 0; |
357 | retval = 0; |
359 | 358 | ||
360 | break; |
359 | break; |
361 | default: |
360 | default: |
362 | retval = ENOENT; |
361 | retval = ENOENT; |
363 | } |
362 | } |
364 | ipc_answer_fast(callid, retval, 0, 0); |
363 | ipc_answer_0(callid, retval); |
365 | } |
364 | } |
366 | } |
365 | } |
367 | 366 | ||
368 | /** Default thread for new connections */ |
367 | /** Default thread for new connections */ |
369 | static void client_connection(ipc_callid_t iid, ipc_call_t *icall) |
368 | static void client_connection(ipc_callid_t iid, ipc_call_t *icall) |
Line 373... | Line 372... | ||
373 | int consnum; |
372 | int consnum; |
374 | ipcarg_t arg1, arg2; |
373 | ipcarg_t arg1, arg2; |
375 | connection_t *conn; |
374 | connection_t *conn; |
376 | 375 | ||
377 | if ((consnum = find_free_connection()) == -1) { |
376 | if ((consnum = find_free_connection()) == -1) { |
378 | ipc_answer_fast(iid, ELIMIT, 0, 0); |
377 | ipc_answer_0(iid, ELIMIT); |
379 | return; |
378 | return; |
380 | } |
379 | } |
381 | conn = &connections[consnum]; |
380 | conn = &connections[consnum]; |
382 | conn->used = 1; |
381 | conn->used = 1; |
383 | 382 | ||
Line 385... | Line 384... | ||
385 | gcons_notify_connect(consnum); |
384 | gcons_notify_connect(consnum); |
386 | conn->client_phone = IPC_GET_ARG3(call); |
385 | conn->client_phone = IPC_GET_ARG3(call); |
387 | screenbuffer_clear(&conn->screenbuffer); |
386 | screenbuffer_clear(&conn->screenbuffer); |
388 | 387 | ||
389 | /* Accept the connection */ |
388 | /* Accept the connection */ |
390 | ipc_answer_fast(iid, 0, 0, 0); |
389 | ipc_answer_0(iid, EOK); |
391 | 390 | ||
392 | while (1) { |
391 | while (1) { |
393 | async_serialize_end(); |
392 | async_serialize_end(); |
394 | callid = async_get_call(&call); |
393 | callid = async_get_call(&call); |
395 | async_serialize_start(); |
394 | async_serialize_start(); |
Line 401... | Line 400... | ||
401 | gcons_notify_disconnect(consnum); |
400 | gcons_notify_disconnect(consnum); |
402 | 401 | ||
403 | /* Answer all pending requests */ |
402 | /* Answer all pending requests */ |
404 | while (conn->keyrequest_counter > 0) { |
403 | while (conn->keyrequest_counter > 0) { |
405 | conn->keyrequest_counter--; |
404 | conn->keyrequest_counter--; |
406 | ipc_answer_fast(fifo_pop(conn->keyrequests), |
405 | ipc_answer_0(fifo_pop(conn->keyrequests), |
407 | ENOENT, 0, 0); |
406 | ENOENT); |
408 | break; |
407 | break; |
409 | } |
408 | } |
410 | conn->used = 0; |
409 | conn->used = 0; |
411 | return; |
410 | return; |
412 | case CONSOLE_PUTCHAR: |
411 | case CONSOLE_PUTCHAR: |
Line 462... | Line 461... | ||
462 | } else { |
461 | } else { |
463 | /* |
462 | /* |
464 | * No key available and too many |
463 | * No key available and too many |
465 | * requests => fail. |
464 | * requests => fail. |
466 | */ |
465 | */ |
467 | ipc_answer_fast(callid, ELIMIT, 0, 0); |
466 | ipc_answer_0(callid, ELIMIT); |
468 | } |
467 | } |
469 | continue; |
468 | continue; |
470 | } |
469 | } |
471 | keybuffer_pop(&conn->keybuffer, (int *) &arg1); |
470 | keybuffer_pop(&conn->keybuffer, (int *) &arg1); |
472 | break; |
471 | break; |
473 | } |
472 | } |
474 | ipc_answer_fast(callid, 0, arg1, arg2); |
473 | ipc_answer_2(callid, EOK, arg1, arg2); |
475 | } |
474 | } |
476 | } |
475 | } |
477 | 476 | ||
478 | int main(int argc, char *argv[]) |
477 | int main(int argc, char *argv[]) |
479 | { |
478 | { |