| 303 |
int eol; |
int eol; |
| 304 |
int display_len; |
int display_len; |
| 305 |
char input_str[5]; |
char input_str[5]; |
|
wchar_t wcs[2]; |
|
| 306 |
int str_len = 0; |
int str_len = 0; |
| 307 |
|
wchar_t wcs[2]; |
| 308 |
|
int wc_len; |
| 309 |
char c; |
char c; |
| 310 |
|
|
| 311 |
buffer[buf_size - 1] = '\0'; |
buffer[buf_size - 1] = '\0'; |
| 352 |
str_len++; |
str_len++; |
| 353 |
offset--; |
offset--; |
| 354 |
} |
} |
| 355 |
display_len--; |
|
| 356 |
col_cur--; |
if (mbstowcs(wcs, buffer + offset, 1) == (size_t)-1) |
| 357 |
|
{ |
| 358 |
|
log_error("mbstowcs() error\n"); |
| 359 |
|
} |
| 360 |
|
wc_len = (UTF8_fixed_width ? 2 : wcwidth(wcs[0])); |
| 361 |
|
|
| 362 |
|
if (wc_len == 2) |
| 363 |
|
{ |
| 364 |
|
display_len--; |
| 365 |
|
col_cur--; |
| 366 |
|
} |
| 367 |
} |
} |
| 368 |
|
|
| 369 |
memmove(buffer + offset, buffer + offset + str_len, (size_t)(len - offset - str_len)); |
memmove(buffer + offset, buffer + offset + str_len, (size_t)(len - offset - str_len)); |
| 426 |
str_len++; |
str_len++; |
| 427 |
offset--; |
offset--; |
| 428 |
} |
} |
| 429 |
col_cur--; |
|
| 430 |
|
if (mbstowcs(wcs, buffer + offset, 1) == (size_t)-1) |
| 431 |
|
{ |
| 432 |
|
log_error("mbstowcs() error\n"); |
| 433 |
|
} |
| 434 |
|
wc_len = (UTF8_fixed_width ? 2 : wcwidth(wcs[0])); |
| 435 |
|
|
| 436 |
|
if (wc_len == 2) |
| 437 |
|
{ |
| 438 |
|
col_cur--; |
| 439 |
|
} |
| 440 |
} |
} |
| 441 |
col_cur--; |
col_cur--; |
| 442 |
|
|
| 458 |
str_len++; |
str_len++; |
| 459 |
c = (c & 0x7f) << 1; |
c = (c & 0x7f) << 1; |
| 460 |
} |
} |
| 461 |
col_cur++; |
|
| 462 |
|
if (mbstowcs(wcs, buffer + offset, 1) == (size_t)-1) |
| 463 |
|
{ |
| 464 |
|
log_error("mbstowcs() error\n"); |
| 465 |
|
} |
| 466 |
|
wc_len = (UTF8_fixed_width ? 2 : wcwidth(wcs[0])); |
| 467 |
|
|
| 468 |
|
if (wc_len == 2) |
| 469 |
|
{ |
| 470 |
|
col_cur++; |
| 471 |
|
} |
| 472 |
} |
} |
| 473 |
else |
else |
| 474 |
{ |
{ |
| 548 |
{ |
{ |
| 549 |
log_error("mbstowcs() error\n"); |
log_error("mbstowcs() error\n"); |
| 550 |
} |
} |
| 551 |
if (len + str_len > buf_size - 1 || display_len + (UTF8_fixed_width ? 2 : wcwidth(wcs[0])) > max_display_len) // No enough space for Chinese character |
wc_len = (UTF8_fixed_width ? 2 : wcwidth(wcs[0])); |
| 552 |
|
|
| 553 |
|
if (len + str_len > buf_size - 1 || |
| 554 |
|
display_len + wc_len > max_display_len) // No enough space for Chinese character |
| 555 |
{ |
{ |
| 556 |
outc('\a'); |
outc('\a'); |
| 557 |
iflush(); |
iflush(); |
| 562 |
memcpy(buffer + offset, input_str, (size_t)str_len); |
memcpy(buffer + offset, input_str, (size_t)str_len); |
| 563 |
len += str_len; |
len += str_len; |
| 564 |
buffer[len] = '\0'; |
buffer[len] = '\0'; |
| 565 |
display_len += 2; |
display_len += wc_len; |
| 566 |
|
|
| 567 |
moveto(row, col_cur); |
moveto(row, col_cur); |
| 568 |
prints("%s", buffer + offset); |
prints("%s", buffer + offset); |
| 569 |
prints("%*s", max_display_len - display_len, ""); |
prints("%*s", max_display_len - display_len, ""); |
| 570 |
|
|
| 571 |
col_cur += 2; |
col_cur += wc_len; |
| 572 |
|
|
| 573 |
moveto(row, col_cur); |
moveto(row, col_cur); |
| 574 |
iflush(); |
iflush(); |