Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145151164
D55303.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
23 KB
Referenced Files
None
Subscribers
None
D55303.diff
View Options
diff --git a/contrib/ee/ee.c b/contrib/ee/ee.c
--- a/contrib/ee/ee.c
+++ b/contrib/ee/ee.c
@@ -64,13 +64,17 @@
#ifdef NCURSE
#include "new_curse.h"
#elif HAS_NCURSES
+#define _XOPEN_SOURCE_EXTENDED
#include <ncurses.h>
#else
#include <curses.h>
#endif
#include <ctype.h>
+#include <limits.h>
#include <signal.h>
+#include <wchar.h>
+#include <wctype.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -181,10 +185,6 @@
int local_COLS = 0; /* copy of COLS, to detect when win resizes */
int curses_initialized = FALSE; /* flag indicating if curses has been started*/
int emacs_keys_mode = FALSE; /* mode for if emacs key binings are used */
-int ee_chinese = FALSE; /* allows handling of multi-byte characters */
- /* by checking for high bit in a byte the */
- /* code recognizes a two-byte character */
- /* sequence */
unsigned char *point; /* points to current position in line */
unsigned char *srch_str; /* pointer for search string */
@@ -216,6 +216,53 @@
WINDOW *help_win;
WINDOW *info_win;
+/*
+ | UTF-8 utility functions.
+ */
+
+/* Return the number of bytes in the UTF-8 character starting at s. */
+static int
+utf8_len(const unsigned char *s)
+{
+ if (*s < 0x80)
+ return 1;
+ if ((*s & 0xE0) == 0xC0)
+ return 2;
+ if ((*s & 0xF0) == 0xE0)
+ return 3;
+ if ((*s & 0xF8) == 0xF0)
+ return 4;
+ return 1; /* invalid byte: treat as single byte */
+}
+
+/* Return a pointer to the start of the previous UTF-8 character. */
+static unsigned char *
+utf8_prev(const unsigned char *start, const unsigned char *ptr)
+{
+ if (ptr <= start)
+ return (unsigned char *)start;
+ ptr--;
+ while (ptr > start && (*ptr & 0xC0) == 0x80)
+ ptr--;
+ return (unsigned char *)ptr;
+}
+
+/* Return the display width of the UTF-8 character starting at s. */
+static int
+utf8_width(const unsigned char *s)
+{
+ wchar_t wc;
+ mbstate_t mbs;
+ int w;
+
+ if (*s < 0x80)
+ return 1;
+ memset(&mbs, 0, sizeof(mbs));
+ if (mbrtowc(&wc, (const char *)s, utf8_len(s), &mbs) == (size_t)-1)
+ return 1;
+ w = wcwidth(wc);
+ return (w >= 0) ? w : 1;
+}
/*
| The following structure allows menu items to be flexibly declared.
@@ -247,6 +294,7 @@
unsigned char *resiz_line(int factor, struct text *rline, int rpos);
void insert(int character);
+void insert_utf8(const unsigned char *mb, int len);
void delete(int disp);
void scanline(unsigned char *pos);
int tabshift(int temp_int);
@@ -345,14 +393,13 @@
{"", NULL, NULL, NULL, NULL, -1}, /* 6. info window */
{"", NULL, NULL, NULL, NULL, -1}, /* 7. emacs key bindings*/
{"", NULL, NULL, NULL, NULL, -1}, /* 8. right margin */
- {"", NULL, NULL, NULL, NULL, -1}, /* 9. chinese text */
- {"", NULL, NULL, NULL, dump_ee_conf, -1}, /* 10. save editor config */
+ {"", NULL, NULL, NULL, dump_ee_conf, -1}, /* 9. save editor config */
{NULL, NULL, NULL, NULL, NULL, -1} /* terminator */
};
-char *mode_strings[11];
+char *mode_strings[10];
-#define NUM_MODES_ITEMS 10
+#define NUM_MODES_ITEMS 9
struct menu_entries config_dump_menu[] = {
{"", NULL, NULL, NULL, NULL, 0},
@@ -422,8 +469,8 @@
char *emacs_control_keys[5];
char *command_strings[5];
-char *commands[32];
-char *init_strings[22];
+char *commands[30];
+char *init_strings[20];
#define MENU_WARN 1
@@ -523,8 +570,6 @@
char *more_above_str, *more_below_str;
char *separator = "===============================================================================";
-char *chinese_cmd, *nochinese_cmd;
-
#ifndef __STDC__
#ifndef HAS_STDLIB
extern char *malloc();
@@ -553,7 +598,7 @@
signal(SIGCHLD, SIG_DFL);
signal(SIGSEGV, SIG_DFL);
signal(SIGINT, edit_abort);
- d_char = malloc(3); /* provide a buffer for multi-byte chars */
+ d_char = malloc(5); /* UTF-8 chars can be up to 4 bytes + NUL */
d_word = malloc(150);
*d_word = '\0';
d_line = NULL;
@@ -624,41 +669,53 @@
}
wrefresh(text_win);
- in = wgetch(text_win);
- if (in == -1)
- exit(0); /* without this exit ee will go into an
- infinite loop if the network
- session detaches */
+ {
+ wint_t win;
+ int wret = wget_wch(text_win, &win);
+ if (wret == ERR)
+ exit(0);
+ in = (int)win;
- resize_check();
+ resize_check();
- if (clear_com_win)
- {
- clear_com_win = FALSE;
- wmove(com_win, 0, 0);
- werase(com_win);
- if (!info_window)
+ if (clear_com_win)
{
- wprintw(com_win, "%s", com_win_message);
+ clear_com_win = FALSE;
+ wmove(com_win, 0, 0);
+ werase(com_win);
+ if (!info_window)
+ {
+ wprintw(com_win, "%s", com_win_message);
+ }
+ wrefresh(com_win);
}
- wrefresh(com_win);
- }
- if (in > 255)
- function_key();
- else if ((in == '\10') || (in == 127))
- {
- in = 8; /* make sure key is set to backspace */
- delete(TRUE);
- }
- else if ((in > 31) || (in == 9))
- insert(in);
- else if ((in >= 0) && (in <= 31))
- {
- if (emacs_keys_mode)
- emacs_control();
- else
- control();
+ if (wret == KEY_CODE_YES)
+ function_key();
+ else if ((in == '\10') || (in == 127))
+ {
+ in = 8;
+ delete(TRUE);
+ }
+ else if (in >= 0x80)
+ {
+ unsigned char mb[MB_LEN_MAX + 1];
+ mbstate_t mbs;
+ memset(&mbs, 0, sizeof(mbs));
+ size_t n = wcrtomb((char *)mb, (wchar_t)win,
+ &mbs);
+ if (n != (size_t)-1)
+ insert_utf8(mb, (int)n);
+ }
+ else if ((in > 31) || (in == 9))
+ insert(in);
+ else if ((in >= 0) && (in <= 31))
+ {
+ if (emacs_keys_mode)
+ emacs_control();
+ else
+ control();
+ }
}
}
return(0);
@@ -716,7 +773,7 @@
}
*point = character; /* insert new character */
wclrtoeol(text_win);
- if (!isprint((unsigned char)character)) /* check for TAB character*/
+ if (!isprint((unsigned char)character))
{
scr_pos = scr_horz += out_char(text_win, character, scr_horz);
point++;
@@ -763,6 +820,85 @@
draw_line(scr_vert, scr_horz, point, position, curr_line->line_length);
}
+/* insert a complete multi-byte UTF-8 character into line */
+void
+insert_utf8(const unsigned char *mb, int len)
+{
+ int counter;
+ unsigned char *temp;
+ unsigned char *temp2;
+ int i;
+
+ text_changes = TRUE;
+ if ((curr_line->max_length - curr_line->line_length) < (len + 5))
+ point = resiz_line(len + 10, curr_line, position);
+
+ /* shift the tail of the line right by len bytes */
+ curr_line->line_length += len;
+ temp = point;
+ counter = position;
+ while (counter < curr_line->line_length)
+ {
+ counter++;
+ temp++;
+ }
+ temp++;
+ while (point < temp)
+ {
+ temp2 = temp - len;
+ *temp = *temp2;
+ temp--;
+ }
+
+ /* copy all bytes of the UTF-8 character */
+ for (i = 0; i < len; i++)
+ point[i] = mb[i];
+
+ /* display the character before advancing past it */
+ wclrtoeol(text_win);
+ {
+ char buf[5];
+ memcpy(buf, point, len);
+ buf[len] = '\0';
+ waddstr(text_win, buf);
+ }
+
+ point += len;
+ position += len;
+
+ scanline(point);
+ scr_pos = scr_horz;
+
+ if ((observ_margins) && (right_margin < scr_pos))
+ {
+ counter = position;
+ while (scr_pos > right_margin)
+ prev_word();
+ if (scr_pos == 0)
+ {
+ while (position < counter)
+ right(TRUE);
+ }
+ else
+ {
+ counter -= position;
+ insert_line(TRUE);
+ for (i = 0; i < counter; i++)
+ right(TRUE);
+ }
+ }
+
+ if ((scr_horz - horiz_offset) > last_col)
+ {
+ horiz_offset += 8;
+ midscreen(scr_vert, point);
+ }
+
+ formatted = FALSE;
+
+ draw_line(scr_vert, scr_horz, point, position, curr_line->line_length);
+}
+
/* delete character */
void
delete(int disp)
@@ -778,29 +914,18 @@
{
text_changes = TRUE;
temp2 = tp = point;
- if ((ee_chinese) && (position >= 2) && (*(point - 2) > 127))
- {
- del_width = 2;
- }
+ unsigned char *prev = utf8_prev(curr_line->line, point);
+ del_width = point - prev;
tp -= del_width;
point -= del_width;
position -= del_width;
temp_pos = position;
curr_line->line_length -= del_width;
- if ((*tp < ' ') || (*tp >= 127)) /* check for TAB */
- scanline(tp);
- else
- scr_horz -= del_width;
+ scanline(point);
scr_pos = scr_horz;
if (in == 8)
{
- if (del_width == 1)
- *d_char = *point; /* save deleted character */
- else
- {
- d_char[0] = *point;
- d_char[1] = *(point + 1);
- }
+ memcpy(d_char, point, del_width);
d_char[del_width] = '\0';
}
while (temp_pos <= curr_line->line_length)
@@ -891,8 +1016,12 @@
temp++;
else if (*ptr == 127)
temp += 2;
- else if (!eightbit)
- temp += 5;
+ else if (*ptr >= 0x80)
+ {
+ temp += utf8_width(ptr);
+ ptr += utf8_len(ptr);
+ continue;
+ }
else
temp++;
ptr++;
@@ -1016,29 +1145,55 @@
}
while (column < 0)
{
- d = len_char(*temp, abs_column);
- abs_column += d;
- column += d;
- posit++;
- temp++;
+ if (*temp >= 0x80)
+ {
+ d = utf8_width(temp);
+ abs_column += d;
+ column += d;
+ posit += utf8_len(temp);
+ temp += utf8_len(temp);
+ }
+ else
+ {
+ d = len_char(*temp, abs_column);
+ abs_column += d;
+ column += d;
+ posit++;
+ temp++;
+ }
}
wmove(text_win, row, column);
wclrtoeol(text_win);
while ((posit < length) && (column <= last_col))
{
- if (!isprint(*temp))
+ if (*temp >= 0x80)
+ {
+ int clen = utf8_len(temp);
+ int dw = utf8_width(temp);
+ char buf[5];
+ memcpy(buf, temp, clen);
+ buf[clen] = '\0';
+ waddstr(text_win, buf);
+ abs_column += dw;
+ column += dw;
+ posit += clen;
+ temp += clen;
+ }
+ else if (!isprint(*temp))
{
column += len_char(*temp, abs_column);
abs_column += out_char(text_win, *temp, abs_column);
+ posit++;
+ temp++;
}
else
{
abs_column++;
column++;
waddch(text_win, *temp);
+ posit++;
+ temp++;
}
- posit++;
- temp++;
}
if (column < last_col)
wclrtoeol(text_win);
@@ -1404,13 +1559,10 @@
{
if (point != curr_line->line) /* if not at begin of line */
{
- if ((ee_chinese) && (position >= 2) && (*(point - 2) > 127))
- {
- point--;
- position--;
- }
- point--;
- position--;
+ unsigned char *prev = utf8_prev(curr_line->line, point);
+ int char_bytes = point - prev;
+ point = prev;
+ position -= char_bytes;
scanline(point);
wmove(text_win, scr_vert, (scr_horz - horiz_offset));
scr_pos = scr_horz;
@@ -1439,14 +1591,11 @@
{
if (position < curr_line->line_length)
{
- if ((ee_chinese) && (*point > 127) &&
- ((curr_line->line_length - position) >= 2))
- {
- point++;
- position++;
- }
- point++;
- position++;
+ int char_bytes = utf8_len(point);
+ if (position + char_bytes > curr_line->line_length)
+ char_bytes = curr_line->line_length - position;
+ point += char_bytes;
+ position += char_bytes;
scanline(point);
wmove(text_win, scr_vert, (scr_horz - horiz_offset));
scr_pos = scr_horz;
@@ -1485,12 +1634,16 @@
scr_horz += tabshift(scr_horz);
else if (*point < ' ')
scr_horz += 2;
- else if ((ee_chinese) && (*point > 127) &&
- ((curr_line->line_length - position) >= 2))
+ else if (*point >= 0x80)
{
- scr_horz += 2;
- point++;
- position++;
+ int clen = utf8_len(point);
+ int dw = utf8_width(point);
+ if (scr_horz + dw > scr_pos)
+ break;
+ scr_horz += dw;
+ point += clen;
+ position += clen;
+ continue;
}
else
scr_horz++;
@@ -1789,20 +1942,6 @@
expand_tabs = FALSE;
else if (compare(cmd_str, Exit_string, FALSE))
finish();
- else if (compare(cmd_str, chinese_cmd, FALSE))
- {
- ee_chinese = TRUE;
-#ifdef NCURSE
- nc_setattrib(A_NC_BIG5);
-#endif /* NCURSE */
- }
- else if (compare(cmd_str, nochinese_cmd, FALSE))
- {
- ee_chinese = FALSE;
-#ifdef NCURSE
- nc_clearattrib(A_NC_BIG5);
-#endif /* NCURSE */
- }
else if (compare(cmd_str, QUIT_string, FALSE))
quit(0);
else if (*cmd_str == '!')
@@ -1855,9 +1994,19 @@
j = column;
while (i < offset)
{
- i++;
- j += len_char(*stemp, j);
- stemp++;
+ if (*(unsigned char *)stemp >= 0x80)
+ {
+ int clen = utf8_len((const unsigned char *)stemp);
+ j += utf8_width((const unsigned char *)stemp);
+ stemp += clen;
+ i += clen;
+ }
+ else
+ {
+ j += len_char(*stemp, j);
+ stemp++;
+ i++;
+ }
}
return(j);
}
@@ -1885,14 +2034,25 @@
g_pos = 0;
do
{
+ wint_t win;
+ int wret;
+
esc_flag = FALSE;
- in = wgetch(com_win);
- if (in == -1)
+ wret = wget_wch(com_win, &win);
+ if (wret == ERR)
exit(0);
- if (((in == 8) || (in == 127) || (in == KEY_BACKSPACE)) && (g_pos > 0))
+ in = (int)win;
+ if (wret == KEY_CODE_YES && win == KEY_BACKSPACE)
+ in = 8;
+ if (((in == 8) || (in == 127)) && (g_pos > 0))
{
+ unsigned char *prev = utf8_prev(
+ (const unsigned char *)g_point,
+ (const unsigned char *)nam_str);
+ int char_bytes = (unsigned char *)nam_str - prev;
tmp_int = g_horz;
- g_pos--;
+ g_pos -= char_bytes;
+ nam_str -= char_bytes;
g_horz = scan(g_point, g_pos, g_position);
tmp_int = tmp_int - g_horz;
for (; 0 < tmp_int; tmp_int--)
@@ -1904,28 +2064,65 @@
waddch(com_win, '\010');
}
}
- nam_str--;
}
- else if ((in != 8) && (in != 127) && (in != '\n') && (in != '\r') && (in < 256))
+ else if (wret == KEY_CODE_YES)
+ {
+ /* ignore other function keys in string input */
+ }
+ else if ((in != 8) && (in != 127) && (in != '\n') && (in != '\r'))
{
- if (in == '\026') /* control-v, accept next character verbatim */
- { /* allows entry of ^m, ^j, and ^h */
+ if (in == '\026') /* control-v */
+ {
esc_flag = TRUE;
- in = wgetch(com_win);
- if (in == -1)
+ wret = wget_wch(com_win, &win);
+ if (wret == ERR)
exit(0);
+ in = (int)win;
+ }
+ if (in >= 0x80)
+ {
+ char mb[MB_LEN_MAX + 1];
+ mbstate_t mbs;
+ memset(&mbs, 0, sizeof(mbs));
+ size_t n = wcrtomb(mb, (wchar_t)win, &mbs);
+ if (n != (size_t)-1)
+ {
+ size_t i;
+ for (i = 0; i < n; i++)
+ {
+ *nam_str = mb[i];
+ nam_str++;
+ g_pos++;
+ }
+ if (g_horz < (last_col - 1))
+ {
+ char buf[5];
+ memcpy(buf, mb, n);
+ buf[n] = '\0';
+ waddstr(com_win, buf);
+ }
+ g_horz += utf8_width(
+ (const unsigned char *)
+ (nam_str - n));
+ }
}
- *nam_str = in;
- g_pos++;
- if (!isprint((unsigned char)in) && (g_horz < (last_col - 1)))
- g_horz += out_char(com_win, in, g_horz);
else
{
- g_horz++;
- if (g_horz < (last_col - 1))
- waddch(com_win, (unsigned char)in);
+ *nam_str = in;
+ g_pos++;
+ if (!isprint((unsigned char)in) &&
+ (g_horz < (last_col - 1)))
+ g_horz += out_char(com_win, in,
+ g_horz);
+ else
+ {
+ g_horz++;
+ if (g_horz < (last_col - 1))
+ waddch(com_win,
+ (unsigned char)in);
+ }
+ nam_str++;
}
- nam_str++;
}
wrefresh(com_win);
if (esc_flag)
@@ -2606,11 +2803,26 @@
else /* if not case sensitive */
{
srch_3 = u_srch_str;
- while ((toupper(*srch_2) == *srch_3) && (*srch_3 != '\0'))
+ while (*srch_3 != '\0')
{
+ wchar_t wc_text, wc_srch;
+ mbstate_t mbs;
+ int len_text, len_srch;
+ memset(&mbs, 0, sizeof(mbs));
+ len_text = (int)mbrtowc(&wc_text,
+ (char *)srch_2,
+ MB_CUR_MAX, &mbs);
+ if (len_text <= 0) len_text = 1;
+ memset(&mbs, 0, sizeof(mbs));
+ len_srch = (int)mbrtowc(&wc_srch,
+ (char *)srch_3,
+ MB_CUR_MAX, &mbs);
+ if (len_srch <= 0) len_srch = 1;
+ if (towupper(wc_text) != towupper(wc_srch))
+ break;
found = TRUE;
- srch_2++;
- srch_3++;
+ srch_2 += len_text;
+ srch_3 += len_srch;
}
} /* end else */
if (!((*srch_3 == '\0') && (found)))
@@ -2688,12 +2900,38 @@
srch_str = get_string(search_prompt_str, FALSE);
gold = FALSE;
srch_3 = srch_str;
- srch_1 = u_srch_str = malloc(strlen(srch_str) + 1);
+ srch_1 = u_srch_str = malloc(strlen((char *)srch_str) * 4 + 1);
while (*srch_3 != '\0')
{
- *srch_1 = toupper(*srch_3);
- srch_1++;
- srch_3++;
+ if (*srch_3 >= 0x80)
+ {
+ wchar_t wc;
+ mbstate_t mbs;
+ int clen;
+ memset(&mbs, 0, sizeof(mbs));
+ clen = (int)mbrtowc(&wc, (char *)srch_3,
+ utf8_len(srch_3), &mbs);
+ if (clen > 0)
+ {
+ wc = towupper(wc);
+ memset(&mbs, 0, sizeof(mbs));
+ size_t n = wcrtomb((char *)srch_1,
+ wc, &mbs);
+ if (n != (size_t)-1)
+ srch_1 += n;
+ srch_3 += clen;
+ }
+ else
+ {
+ *srch_1++ = *srch_3++;
+ }
+ }
+ else
+ {
+ *srch_1 = toupper(*srch_3);
+ srch_1++;
+ srch_3++;
+ }
}
*srch_1 = '\0';
search(TRUE);
@@ -2706,14 +2944,11 @@
in = 8; /* backspace */
if (position < curr_line->line_length) /* if not end of line */
{
- if ((ee_chinese) && (*point > 127) &&
- ((curr_line->line_length - position) >= 2))
- {
- point++;
- position++;
- }
- position++;
- point++;
+ int clen = utf8_len(point);
+ if (position + clen > curr_line->line_length)
+ clen = curr_line->line_length - position;
+ point += clen;
+ position += clen;
scanline(point);
delete(TRUE);
}
@@ -2730,15 +2965,12 @@
{
if (d_char[0] == '\n') /* insert line if last del_char deleted eol */
insert_line(TRUE);
+ else if ((unsigned char)d_char[0] >= 0x80)
+ insert_utf8(d_char, strlen((char *)d_char));
else
{
in = d_char[0];
insert(in);
- if (d_char[1] != '\0')
- {
- in = d_char[1];
- insert(in);
- }
}
}
@@ -2750,14 +2982,12 @@
int difference;
unsigned char *d_word2;
unsigned char *d_word3;
- unsigned char tmp_char[3];
+ unsigned char tmp_char[5];
if (d_word != NULL)
free(d_word);
d_word = malloc(curr_line->line_length);
- tmp_char[0] = d_char[0];
- tmp_char[1] = d_char[1];
- tmp_char[2] = d_char[2];
+ memcpy(tmp_char, d_char, 5);
d_word3 = point;
d_word2 = d_word;
tposit = position;
@@ -2790,9 +3020,7 @@
curr_line->line_length -= difference;
*d_word2 = '\0';
draw_line(scr_vert, scr_horz,point,position,curr_line->line_length);
- d_char[0] = tmp_char[0];
- d_char[1] = tmp_char[1];
- d_char[2] = tmp_char[2];
+ memcpy(d_char, tmp_char, 5);
text_changes = TRUE;
formatted = FALSE;
}
@@ -3310,11 +3538,6 @@
local_LINES = LINES;
local_COLS = COLS;
-#ifdef NCURSE
- if (ee_chinese)
- nc_setattrib(A_NC_BIG5);
-#endif /* NCURSE */
-
}
void
@@ -3424,10 +3647,12 @@
wmove(temp_win, (counter + top_offset - off_start), 3);
wrefresh(temp_win);
- in = wgetch(temp_win);
- input = in;
- if (input == -1)
- exit(0);
+ {
+ wint_t win;
+ if (wget_wch(temp_win, &win) == ERR)
+ exit(0);
+ in = input = (int)win;
+ }
if (isascii(input) && isalnum(input))
{
@@ -3665,9 +3890,12 @@
wmove(com_win, 0, 0);
wprintw(com_win, "%s", press_any_key_msg);
wrefresh(com_win);
- counter = wgetch(com_win);
- if (counter == -1)
- exit(0);
+ {
+ wint_t win;
+ if (wget_wch(com_win, &win) == ERR)
+ exit(0);
+ counter = (int)win;
+ }
werase(com_win);
wmove(com_win, 0, 0);
werase(help_win);
@@ -3905,14 +4133,12 @@
unsigned char *tmp_srchstr;
unsigned char *temp1, *temp2;
unsigned char *temp_dword;
- unsigned char temp_d_char[3];
+ unsigned char temp_d_char[5];
- temp_d_char[0] = d_char[0];
- temp_d_char[1] = d_char[1];
- temp_d_char[2] = d_char[2];
+ memcpy(temp_d_char, d_char, 5);
/*
- | if observ_margins is not set, or the current line is blank,
+ | if observ_margins is not set, or the current line is blank,
| do not format the current paragraph
*/
@@ -4104,9 +4330,7 @@
case_sen = temp_case;
free(srch_str);
srch_str = tmp_srchstr;
- d_char[0] = temp_d_char[0];
- d_char[1] = temp_d_char[1];
- d_char[2] = temp_d_char[2];
+ memcpy(d_char, temp_d_char, 5);
auto_format = tmp_af;
midscreen(scr_vert, point);
@@ -4210,19 +4434,11 @@
else if (compare(str1, NOEIGHTBIT, FALSE))
{
eightbit = FALSE;
- ee_chinese = FALSE;
}
else if (compare(str1, EMACS_string, FALSE))
emacs_keys_mode = TRUE;
else if (compare(str1, NOEMACS_string, FALSE))
emacs_keys_mode = FALSE;
- else if (compare(str1, chinese_cmd, FALSE))
- {
- ee_chinese = TRUE;
- eightbit = TRUE;
- }
- else if (compare(str1, nochinese_cmd, FALSE))
- ee_chinese = FALSE;
}
fclose(init_file);
}
@@ -4230,15 +4446,6 @@
free(string);
free(home);
- string = getenv("LANG");
- if (string != NULL)
- {
- if (strcmp(string, "zh_TW.big5") == 0)
- {
- ee_chinese = TRUE;
- eightbit = TRUE;
- }
- }
}
/*
@@ -4332,7 +4539,6 @@
fprintf(init_file, "%s\n", nohighlight ? NOHIGHLIGHT : HIGHLIGHT );
fprintf(init_file, "%s\n", eightbit ? EIGHTBIT : NOEIGHTBIT );
fprintf(init_file, "%s\n", emacs_keys_mode ? EMACS_string : NOEMACS_string );
- fprintf(init_file, "%s\n", ee_chinese ? chinese_cmd : nochinese_cmd );
fclose(init_file);
@@ -4505,13 +4711,10 @@
unsigned char *tmp_srchstr;
unsigned char *temp1, *temp2;
unsigned char *temp_dword;
- unsigned char temp_d_char[3];
+ unsigned char temp_d_char[5];
unsigned char *tmp_d_line;
-
- temp_d_char[0] = d_char[0];
- temp_d_char[1] = d_char[1];
- temp_d_char[2] = d_char[2];
+ memcpy(temp_d_char, d_char, 5);
/*
| if observ_margins is not set, or the current line is blank,
@@ -4737,9 +4940,7 @@
case_sen = temp_case;
free(srch_str);
srch_str = tmp_srchstr;
- d_char[0] = temp_d_char[0];
- d_char[1] = temp_d_char[1];
- d_char[2] = temp_d_char[2];
+ memcpy(d_char, temp_d_char, 5);
auto_format = TRUE;
dlt_line->line_length = tmp_d_line_length;
d_line = tmp_d_line;
@@ -4771,10 +4972,8 @@
(info_window ? ON : OFF));
sprintf(modes_menu[7].item_string, "%s %s", mode_strings[7],
(emacs_keys_mode ? ON : OFF));
- sprintf(modes_menu[8].item_string, "%s %d", mode_strings[8],
+ sprintf(modes_menu[8].item_string, "%s %d", mode_strings[8],
right_margin);
- sprintf(modes_menu[9].item_string, "%s %s", mode_strings[9],
- (ee_chinese ? ON : OFF));
ret_value = menu_op(modes_menu);
@@ -4796,15 +4995,6 @@
break;
case 5:
eightbit = !eightbit;
- if (!eightbit)
- ee_chinese = FALSE;
-#ifdef NCURSE
- if (ee_chinese)
- nc_setattrib(A_NC_BIG5);
- else
- nc_clearattrib(A_NC_BIG5);
-#endif /* NCURSE */
-
redraw();
wnoutrefresh(text_win);
break;
@@ -4829,18 +5019,6 @@
free(string);
}
break;
- case 9:
- ee_chinese = !ee_chinese;
- if (ee_chinese != FALSE)
- eightbit = TRUE;
-#ifdef NCURSE
- if (ee_chinese)
- nc_setattrib(A_NC_BIG5);
- else
- nc_clearattrib(A_NC_BIG5);
-#endif /* NCURSE */
- redraw();
- break;
default:
break;
}
@@ -5254,7 +5432,7 @@
usage4 = catgetlocal( 161, " +# put cursor at line #\n");
conf_dump_err_msg = catgetlocal( 162, "unable to open .init.ee for writing, no configuration saved!");
conf_dump_success_msg = catgetlocal( 163, "ee configuration saved in file %s");
- modes_menu[10].item_string = catgetlocal( 164, "save editor configuration");
+ modes_menu[9].item_string = catgetlocal( 164, "save editor configuration");
config_dump_menu[0].item_string = catgetlocal( 165, "save ee configuration");
config_dump_menu[1].item_string = catgetlocal( 166, "save in current directory");
config_dump_menu[2].item_string = catgetlocal( 167, "save in home directory");
@@ -5263,9 +5441,6 @@
menu_too_lrg_msg = catgetlocal( 180, "menu too large for window");
more_above_str = catgetlocal( 181, "^^more^^");
more_below_str = catgetlocal( 182, "VVmoreVV");
- mode_strings[9] = catgetlocal( 183, "16 bit characters ");
- chinese_cmd = catgetlocal( 184, "16BIT");
- nochinese_cmd = catgetlocal( 185, "NO16BIT");
commands[0] = HELP;
commands[1] = WRITE;
@@ -5296,9 +5471,7 @@
commands[26] = "8";
commands[27] = "9";
commands[28] = CHARACTER;
- commands[29] = chinese_cmd;
- commands[30] = nochinese_cmd;
- commands[31] = NULL;
+ commands[29] = NULL;
init_strings[0] = CASE;
init_strings[1] = NOCASE;
init_strings[2] = EXPAND;
@@ -5318,9 +5491,7 @@
init_strings[16] = NOEIGHTBIT;
init_strings[17] = EMACS_string;
init_strings[18] = NOEMACS_string;
- init_strings[19] = chinese_cmd;
- init_strings[20] = nochinese_cmd;
- init_strings[21] = NULL;
+ init_strings[19] = NULL;
/*
| allocate space for strings here for settings menu
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Feb 17, 12:25 PM (8 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28812928
Default Alt Text
D55303.diff (23 KB)
Attached To
Mode
D55303: ee: add unicode support
Attached
Detach File
Event Timeline
Log In to Comment