| 504 |
{ |
{ |
| 505 |
str_len = 1; |
str_len = 1; |
| 506 |
} |
} |
| 507 |
else if (p_data_line[offset_data_line] & 0b10000000) // head of multi-byte character |
else if (p_data_line[offset_data_line] & 0x80) // head of multi-byte character |
| 508 |
{ |
{ |
| 509 |
str_len = 1; |
str_len = 1; |
| 510 |
c = (p_data_line[offset_data_line] & 0b01110000) << 1; |
c = (p_data_line[offset_data_line] & 0x70) << 1; |
| 511 |
while (c & 0b10000000) |
while (c & 0x80) |
| 512 |
{ |
{ |
| 513 |
str_len++; |
str_len++; |
| 514 |
c = (c & 0b01111111) << 1; |
c = (c & 0x7f) << 1; |
| 515 |
} |
} |
| 516 |
} |
} |
| 517 |
else |
else |
| 705 |
ch = igetch_t(MAX_DELAY_TIME); |
ch = igetch_t(MAX_DELAY_TIME); |
| 706 |
while (!SYS_server_exit) |
while (!SYS_server_exit) |
| 707 |
{ |
{ |
| 708 |
|
if (ch != KEY_NULL && ch != KEY_TIMEOUT) |
| 709 |
|
{ |
| 710 |
|
BBS_last_access_tm = time(NULL); |
| 711 |
|
} |
| 712 |
|
|
| 713 |
// extended key handler |
// extended key handler |
| 714 |
if (editor_display_key_handler(&ch, &ctx) != 0) |
if (editor_display_key_handler(&ch, &ctx) != 0) |
| 715 |
{ |
{ |
| 716 |
goto cleanup; |
goto cleanup; |
| 717 |
} |
} |
| 718 |
|
|
| 719 |
if (ch < 256 && (ch & 0b10000000)) // head of multi-byte character |
if (ch < 256 && (ch & 0x80)) // head of multi-byte character |
| 720 |
{ |
{ |
| 721 |
str_len = 0; |
str_len = 0; |
| 722 |
c = (char)(ch & 0b11110000); |
c = (char)(ch & 0xf0); |
| 723 |
while (c & 0b10000000) |
while (c & 0x80) |
| 724 |
{ |
{ |
| 725 |
input_str[str_len] = (char)(ch - 256); |
input_str[str_len] = (char)(ch - 256); |
| 726 |
str_len++; |
str_len++; |
| 727 |
c = (c & 0b01111111) << 1; |
c = (c & 0x7f) << 1; |
| 728 |
|
|
| 729 |
if ((c & 0b10000000) == 0) // Input completed |
if ((c & 0x80) == 0) // Input completed |
| 730 |
{ |
{ |
| 731 |
break; |
break; |
| 732 |
} |
} |
| 747 |
if ((ch >= 32 && ch < 127) || str_len >= 2 || // Printable character or multi-byte character |
if ((ch >= 32 && ch < 127) || str_len >= 2 || // Printable character or multi-byte character |
| 748 |
ch == CR || ch == KEY_ESC) // Special character |
ch == CR || ch == KEY_ESC) // Special character |
| 749 |
{ |
{ |
|
BBS_last_access_tm = time(NULL); |
|
|
|
|
| 750 |
// Refresh current action while user input |
// Refresh current action while user input |
| 751 |
if (user_online_update(NULL) < 0) |
if (user_online_update(NULL) < 0) |
| 752 |
{ |
{ |
| 840 |
} |
} |
| 841 |
else if (ch == KEY_DEL || ch == BACKSPACE) // Del |
else if (ch == KEY_DEL || ch == BACKSPACE) // Del |
| 842 |
{ |
{ |
|
BBS_last_access_tm = time(NULL); |
|
|
|
|
| 843 |
// Refresh current action while user input |
// Refresh current action while user input |
| 844 |
if (user_online_update(NULL) < 0) |
if (user_online_update(NULL) < 0) |
| 845 |
{ |
{ |
| 931 |
switch (ch) |
switch (ch) |
| 932 |
{ |
{ |
| 933 |
case KEY_NULL: |
case KEY_NULL: |
| 934 |
|
log_error("KEY_NULL\n"); |
| 935 |
|
goto cleanup; |
| 936 |
case KEY_TIMEOUT: |
case KEY_TIMEOUT: |
| 937 |
|
log_error("User input timeout\n"); |
| 938 |
goto cleanup; |
goto cleanup; |
| 939 |
case Ctrl('W'): |
case Ctrl('W'): |
| 940 |
case Ctrl('X'): |
case Ctrl('X'): |
| 1138 |
break; |
break; |
| 1139 |
} |
} |
| 1140 |
|
|
|
BBS_last_access_tm = time(NULL); |
|
|
|
|
| 1141 |
// Refresh current action while user input |
// Refresh current action while user input |
| 1142 |
if (user_online_update(NULL) < 0) |
if (user_online_update(NULL) < 0) |
| 1143 |
{ |
{ |