| 556 | |
| 557 | #define SIPP_ENDL "\r\n" |
| 558 | void handle_stdin_socket() |
| 559 | { |
| 560 | int c; |
| 561 | int chars = 0; |
| 562 | |
| 563 | if (feof(stdin)) { |
| 564 | stdin_socket->close(); |
| 565 | stdin_socket = nullptr; |
| 566 | return; |
| 567 | } |
| 568 | |
| 569 | while (((c = screen_readkey()) != -1)) { |
| 570 | chars++; |
| 571 | if (command_mode) { |
| 572 | if (c == '\n') { |
| 573 | bool quit = process_command(command_buffer); |
| 574 | if (quit) { |
| 575 | return; |
| 576 | } |
| 577 | command_buffer[0] = '\0'; |
| 578 | command_mode = 0; |
| 579 | } |
| 580 | #ifndef __SUNOS |
| 581 | else if (c == key_backspace || c == key_dc) |
| 582 | #else |
| 583 | else if (c == 14) |
| 584 | #endif |
| 585 | { |
| 586 | int command_len = strlen(command_buffer); |
| 587 | if (command_len > 0) { |
| 588 | command_buffer[command_len--] = '\0'; |
| 589 | } |
| 590 | } else { |
| 591 | int command_len = strlen(command_buffer); |
| 592 | char *realloc_ptr = (char *)realloc(command_buffer, command_len + 2); |
| 593 | if (realloc_ptr) { |
| 594 | command_buffer = realloc_ptr; |
| 595 | } else { |
| 596 | free(command_buffer); |
| 597 | ERROR("Out of memory"); |
| 598 | return; |
| 599 | } |
| 600 | command_buffer[command_len++] = c; |
| 601 | command_buffer[command_len] = '\0'; |
| 602 | putchar(c); |
| 603 | fflush(stdout); |
| 604 | } |
| 605 | } else if (c == 'c') { |
| 606 | command_mode = 1; |
| 607 | char *realloc_ptr = (char *)realloc(command_buffer, 1); |
| 608 | if (realloc_ptr) { |
| 609 | command_buffer = realloc_ptr; |
| 610 | } else { |
| 611 | free(command_buffer); |
| 612 | ERROR("Out of memory"); |
| 613 | return; |
| 614 | } |
| 615 | command_buffer[0] = '\0'; |
no test coverage detected