Resolve conflicts.
This commit is contained in:
parent
a27d1d954d
commit
ea073d6e59
@ -353,6 +353,9 @@ A window showing the keyboard operations that can be performed can be
|
||||
displayed or not.
|
||||
.It emacs keys
|
||||
Control keys may be given bindings similar to emacs, or not.
|
||||
.It 16 bit characters
|
||||
Toggles whether sixteen bit characters are handled as one 16-bit quantities or
|
||||
two 8-bit quantities. This works primarily with the Chinese Big 5 code set.
|
||||
.El
|
||||
.Pp
|
||||
You may set these modes via the initialization file (see below), or with a
|
||||
@ -496,10 +499,14 @@ Turn on display of eight bit characters.
|
||||
.It noeightbit
|
||||
Turn off display of eight bit characters (they are displayed as their decimal
|
||||
value inside angle brackets, e.g., "<220>").
|
||||
.It 16bit
|
||||
Turns on handling of 16-bit characters.
|
||||
.It no16bit
|
||||
Turns off handling of 16-bit characters.
|
||||
.It emacs
|
||||
Turn on emacs key bindings.
|
||||
Turns on emacs key bindings.
|
||||
.It noemacs
|
||||
Turn off emacs key bindings.
|
||||
Turns off emacs key bindings.
|
||||
.El
|
||||
.Ss "Save Editor Configuration"
|
||||
When using this entry from the
|
||||
@ -538,7 +545,10 @@ Always make a copy of files that cannot be easily reproduced before
|
||||
editing. Save files early, and save often.
|
||||
.Ss "International Code Set Support"
|
||||
.Nm Ee
|
||||
supports single-byte character code sets (eight-bit clean).
|
||||
supports single-byte character code sets (eight-bit clean), or the
|
||||
Chinese Big-5 code set. (Other multi-byte code sets may function, but the
|
||||
reason Big-5 works is that a two-byte character also takes up two columns on
|
||||
the screen.)
|
||||
.Sh WARNINGS
|
||||
The automatic paragraph formatting operation
|
||||
may be too slow for slower systems.
|
||||
@ -558,10 +568,10 @@ This software and documentation contains
|
||||
proprietary information which is protected by
|
||||
copyright. All rights are reserved.
|
||||
.Pp
|
||||
Copyright (c) 1990, 1991, 1992, 1993, 1995 Hugh Mahon.
|
||||
Copyright (c) 1990, 1991, 1992, 1993, 1995, 1996 Hugh Mahon.
|
||||
.Sh "SEE ALSO"
|
||||
.Xr ispell 1 ,
|
||||
.Xr lp 1 ,
|
||||
.Xr lpr 1 ,
|
||||
.Xr spell 1 ,
|
||||
.Xr termcap 5 ,
|
||||
.Xr terminfo 5 ,
|
||||
|
394
usr.bin/ee/ee.c
394
usr.bin/ee/ee.c
@ -64,7 +64,7 @@ char *ee_long_notice[] = {
|
||||
"copyright. All rights are reserved."
|
||||
};
|
||||
|
||||
char *version = "@(#) ee, version 1.3";
|
||||
char *version = "@(#) ee, version 1.4.1";
|
||||
|
||||
#ifdef NCURSE
|
||||
#include "new_curse.h"
|
||||
@ -124,7 +124,7 @@ nl_catd catalog;
|
||||
#define COMMANDS 2
|
||||
|
||||
struct text {
|
||||
char *line; /* line of characters */
|
||||
unsigned char *line; /* line of characters */
|
||||
int line_number; /* line number */
|
||||
int line_length; /* actual number of characters in the line */
|
||||
int max_length; /* maximum number of characters the line handles */
|
||||
@ -139,7 +139,7 @@ struct text *tmp_line; /* temporary line pointer */
|
||||
struct text *srch_line; /* temporary pointer for search routine */
|
||||
|
||||
struct files { /* structure to store names of files to be edited*/
|
||||
char *name; /* name of file */
|
||||
unsigned char *name; /* name of file */
|
||||
struct files *next_name;
|
||||
};
|
||||
|
||||
@ -185,21 +185,25 @@ int local_LINES = 0; /* copy of LINES, to detect when win resizes */
|
||||
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 */
|
||||
|
||||
char *point; /* points to current position in line */
|
||||
char *srch_str; /* pointer for search string */
|
||||
char *u_srch_str; /* pointer to non-case sensitive search */
|
||||
char *srch_1; /* pointer to start of suspect string */
|
||||
char *srch_2; /* pointer to next character of string */
|
||||
char *srch_3;
|
||||
char *in_file_name = NULL; /* name of input file */
|
||||
char *tmp_file; /* temporary file name */
|
||||
char d_char; /* deleted character */
|
||||
char *d_word; /* deleted word */
|
||||
char *d_line; /* deleted line */
|
||||
char in_string[513]; /* buffer for reading a file */
|
||||
char *print_command = "lpr"; /* string to use for the print command */
|
||||
char *start_at_line = NULL; /* move to this line at start of session*/
|
||||
unsigned char *point; /* points to current position in line */
|
||||
unsigned char *srch_str; /* pointer for search string */
|
||||
unsigned char *u_srch_str; /* pointer to non-case sensitive search */
|
||||
unsigned char *srch_1; /* pointer to start of suspect string */
|
||||
unsigned char *srch_2; /* pointer to next character of string */
|
||||
unsigned char *srch_3;
|
||||
unsigned char *in_file_name = NULL; /* name of input file */
|
||||
char *tmp_file; /* temporary file name */
|
||||
unsigned char *d_char; /* deleted character */
|
||||
unsigned char *d_word; /* deleted word */
|
||||
unsigned char *d_line; /* deleted line */
|
||||
char in_string[513]; /* buffer for reading a file */
|
||||
unsigned char *print_command = "lpr"; /* string to use for the print command */
|
||||
unsigned char *start_at_line = NULL; /* move to this line at start of session*/
|
||||
char *count_text; /* buffer for current position display */
|
||||
const char *count_text_default = "===============================================================================";
|
||||
int count_text_len; /* length of the line above */
|
||||
@ -252,22 +256,22 @@ struct menu_entries {
|
||||
struct menu_entries *ptr_argument;
|
||||
int (*iprocedure)P_((int));
|
||||
void (*nprocedure)P_((void));
|
||||
unsigned int argument;
|
||||
int argument;
|
||||
};
|
||||
|
||||
int main P_((int argc, char *argv[]));
|
||||
char *resiz_line P_((int factor, struct text *rline, int rpos));
|
||||
unsigned char *resiz_line P_((int factor, struct text *rline, int rpos));
|
||||
void insert P_((int character));
|
||||
void delete P_((int disp));
|
||||
void scanline P_((char *pos));
|
||||
void scanline P_((unsigned char *pos));
|
||||
int tabshift P_((int temp_int));
|
||||
int out_char P_((WINDOW *window, int character, int column));
|
||||
int len_char P_((int character, int column));
|
||||
void draw_line P_((int vertical, int horiz, char *ptr, int t_pos, int length));
|
||||
void draw_line P_((int vertical, int horiz, unsigned char *ptr, int t_pos, int length));
|
||||
void insert_line P_((int disp));
|
||||
struct text *txtalloc P_((void));
|
||||
struct files *name_alloc P_((void));
|
||||
char *next_word P_((char *string));
|
||||
unsigned char *next_word P_((unsigned char *string));
|
||||
void prev_word P_((void));
|
||||
void control P_((void));
|
||||
void emacs_control P_((void));
|
||||
@ -288,11 +292,11 @@ int scan P_((char *line, int offset, int column));
|
||||
char *get_string P_((char *prompt, int advance));
|
||||
int compare P_((char *string1, char *string2, int sensitive));
|
||||
void goto_line P_((char *cmd_str));
|
||||
void midscreen P_((int line, char *pnt));
|
||||
void midscreen P_((int line, unsigned char *pnt));
|
||||
void get_options P_((int numargs, char *arguments[]));
|
||||
void check_fp P_((void));
|
||||
void get_file P_((char *file_name));
|
||||
void get_line P_((int length, char *in_string, int *append));
|
||||
void get_line P_((int length, unsigned char *in_string, int *append));
|
||||
void draw_screen P_((void));
|
||||
void finish P_((void));
|
||||
int quit P_((int noverify));
|
||||
@ -348,22 +352,23 @@ void strings_init P_((void));
|
||||
*/
|
||||
|
||||
struct menu_entries modes_menu[] = {
|
||||
{"", NULL, NULL, NULL, NULL, 0},
|
||||
{"", NULL, NULL, NULL, NULL, -1},
|
||||
{"", NULL, NULL, NULL, NULL, -1},
|
||||
{"", NULL, NULL, NULL, NULL, -1},
|
||||
{"", NULL, NULL, NULL, NULL, -1},
|
||||
{"", NULL, NULL, NULL, NULL, -1},
|
||||
{"", NULL, NULL, NULL, NULL, -1},
|
||||
{"", NULL, NULL, NULL, NULL, -1},
|
||||
{"", NULL, NULL, NULL, NULL, -1},
|
||||
{"", NULL, NULL, NULL, dump_ee_conf, -1},
|
||||
{NULL, NULL, NULL, NULL, NULL, -1}
|
||||
{"", NULL, NULL, NULL, NULL, 0}, /* title */
|
||||
{"", NULL, NULL, NULL, NULL, -1}, /* 1. tabs to spaces */
|
||||
{"", NULL, NULL, NULL, NULL, -1}, /* 2. case sensitive search*/
|
||||
{"", NULL, NULL, NULL, NULL, -1}, /* 3. margins observed */
|
||||
{"", NULL, NULL, NULL, NULL, -1}, /* 4. auto-paragraph */
|
||||
{"", NULL, NULL, NULL, NULL, -1}, /* 5. eightbit characters*/
|
||||
{"", 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, NULL, NULL, -1} /* terminator */
|
||||
};
|
||||
|
||||
char *mode_strings[10];
|
||||
char *mode_strings[11];
|
||||
|
||||
#define NUM_MODES_ITEMS 9
|
||||
#define NUM_MODES_ITEMS 10
|
||||
|
||||
struct menu_entries config_dump_menu[] = {
|
||||
{"", NULL, NULL, NULL, NULL, 0},
|
||||
@ -426,15 +431,15 @@ struct menu_entries main_menu[] = {
|
||||
{NULL, NULL, NULL, NULL, NULL, -1}
|
||||
};
|
||||
|
||||
char *help_text[22];
|
||||
char *help_text[23];
|
||||
char *control_keys[5];
|
||||
|
||||
char *emacs_help_text[22];
|
||||
char *emacs_control_keys[5];
|
||||
|
||||
char *command_strings[5];
|
||||
char *commands[30];
|
||||
char *init_strings[20];
|
||||
char *commands[32];
|
||||
char *init_strings[22];
|
||||
|
||||
#define MENU_WARN 1
|
||||
|
||||
@ -533,6 +538,8 @@ char *cancel_string;
|
||||
char *menu_too_lrg_msg;
|
||||
char *more_above_str, *more_below_str;
|
||||
|
||||
char *chinese_cmd, *nochinese_cmd;
|
||||
|
||||
#ifndef __STDC__
|
||||
#ifndef HAS_STDLIB
|
||||
extern char *malloc();
|
||||
@ -558,13 +565,13 @@ char *argv[];
|
||||
|
||||
count_text_len = strlen(count_text_default) + 1;
|
||||
count_text = malloc(count_text_len);
|
||||
d_char = 0;
|
||||
d_char = malloc(3); /* provide a buffer for multi-byte chars */
|
||||
d_word = malloc(150);
|
||||
*d_word = (char) NULL;
|
||||
d_line = NULL;
|
||||
dlt_line = txtalloc();
|
||||
dlt_line->line = d_line;
|
||||
dlt_line->line_length = 1;
|
||||
dlt_line->line_length = 0;
|
||||
curr_line = first_line = txtalloc();
|
||||
curr_line->line = point = malloc(10);
|
||||
curr_line->line_length = 1;
|
||||
@ -644,7 +651,10 @@ char *argv[];
|
||||
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))
|
||||
@ -658,13 +668,13 @@ char *argv[];
|
||||
return(0);
|
||||
}
|
||||
|
||||
char *
|
||||
unsigned char *
|
||||
resiz_line(factor, rline, rpos) /* resize the line to length + factor*/
|
||||
int factor; /* resize factor */
|
||||
struct text *rline; /* position in line */
|
||||
int rpos;
|
||||
{
|
||||
char *rpoint;
|
||||
unsigned char *rpoint;
|
||||
int resiz_var;
|
||||
|
||||
rline->max_length += factor;
|
||||
@ -680,8 +690,8 @@ int character; /* new character */
|
||||
{
|
||||
int counter;
|
||||
int value;
|
||||
char *temp; /* temporary pointer */
|
||||
char *temp2; /* temporary pointer */
|
||||
unsigned char *temp; /* temporary pointer */
|
||||
unsigned char *temp2; /* temporary pointer */
|
||||
|
||||
if ((character == '\011') && (expand_tabs))
|
||||
{
|
||||
@ -763,31 +773,46 @@ void
|
||||
delete(disp) /* delete character */
|
||||
int disp;
|
||||
{
|
||||
char *tp;
|
||||
char *temp2;
|
||||
unsigned char *tp;
|
||||
unsigned char *temp2;
|
||||
struct text *temp_buff;
|
||||
int temp_vert;
|
||||
int temp_pos;
|
||||
int del_width = 1;
|
||||
|
||||
if (point != curr_line->line) /* if not at beginning of line */
|
||||
{
|
||||
text_changes = TRUE;
|
||||
temp2 = tp = point;
|
||||
tp--;
|
||||
point--;
|
||||
if ((*tp >= '\000') && (*tp < ' ')) /* check for TAB */
|
||||
if ((ee_chinese) && (position >= 2) && (*(point - 2) > 127))
|
||||
{
|
||||
del_width = 2;
|
||||
}
|
||||
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;
|
||||
scr_horz -= del_width;
|
||||
scr_pos = scr_horz;
|
||||
if (in == 8)
|
||||
d_char = *point; /* save deleted character */
|
||||
temp_pos = --position;
|
||||
curr_line->line_length--;
|
||||
{
|
||||
if (del_width == 1)
|
||||
*d_char = *point; /* save deleted character */
|
||||
else
|
||||
{
|
||||
d_char[0] = *point;
|
||||
d_char[1] = *(point + 1);
|
||||
}
|
||||
d_char[del_width] = (unsigned char) NULL;
|
||||
}
|
||||
while (temp_pos <= curr_line->line_length)
|
||||
{
|
||||
temp_pos++;
|
||||
*tp= *temp2;
|
||||
*tp = *temp2;
|
||||
tp++;
|
||||
temp2++;
|
||||
}
|
||||
@ -809,7 +834,10 @@ int disp;
|
||||
renumber_lines(curr_line->next_line, curr_line->line_number + 1);
|
||||
temp2 = temp_buff->line;
|
||||
if (in == 8)
|
||||
d_char = '\n';
|
||||
{
|
||||
d_char[0] = '\n';
|
||||
d_char[1] = (unsigned char) NULL;
|
||||
}
|
||||
tp = point;
|
||||
temp_pos = 1;
|
||||
while (temp_pos < temp_buff->line_length)
|
||||
@ -851,16 +879,16 @@ int disp;
|
||||
|
||||
void
|
||||
scanline(pos) /* find the proper horizontal position for the pointer */
|
||||
char *pos;
|
||||
unsigned char *pos;
|
||||
{
|
||||
int temp;
|
||||
char *ptr;
|
||||
unsigned char *ptr;
|
||||
|
||||
ptr = curr_line->line;
|
||||
temp = 0;
|
||||
while (ptr < pos)
|
||||
{
|
||||
if ((*ptr >= 0) && (*ptr <= 8))
|
||||
if (*ptr <= 8)
|
||||
temp += 2;
|
||||
else if (*ptr == 9)
|
||||
temp += tabshift(temp);
|
||||
@ -909,7 +937,7 @@ char character;
|
||||
int column;
|
||||
{
|
||||
int i1, i2;
|
||||
char *string;
|
||||
unsigned char *string;
|
||||
char string2[8];
|
||||
|
||||
if (character == TAB)
|
||||
@ -937,13 +965,13 @@ int column;
|
||||
}
|
||||
else
|
||||
{
|
||||
waddch(window, (unsigned char)character );
|
||||
waddch(window, (char)character );
|
||||
return(1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
waddch(window, (unsigned char)character);
|
||||
waddch(window, (char)character);
|
||||
return(1);
|
||||
}
|
||||
for (i2 = 0; (string[i2] != (char) NULL) && (((column+i2+1)-horiz_offset) < last_col); i2++)
|
||||
@ -978,12 +1006,12 @@ void
|
||||
draw_line(vertical, horiz, ptr, t_pos, length) /* redraw line from current position */
|
||||
int vertical; /* current vertical position on screen */
|
||||
int horiz; /* current horizontal position on screen */
|
||||
char *ptr; /* pointer to line */
|
||||
unsigned char *ptr; /* pointer to line */
|
||||
int t_pos; /* current position (offset in bytes) from bol */
|
||||
int length; /* length (in bytes) of line */
|
||||
{
|
||||
int d; /* partial length of special or tab char to display */
|
||||
char *temp; /* temporary pointer to position in line */
|
||||
unsigned char *temp; /* temporary pointer to position in line */
|
||||
int abs_column; /* offset in screen units from begin of line */
|
||||
int column; /* horizontal position on screen */
|
||||
int row; /* vertical position on screen */
|
||||
@ -1012,7 +1040,7 @@ int length; /* length (in bytes) of line */
|
||||
wclrtoeol(text_win);
|
||||
while ((posit < length) && (column <= last_col))
|
||||
{
|
||||
if ((*temp < 32) || (*temp == 127))
|
||||
if ((*temp < 32) || (*temp >= 127))
|
||||
{
|
||||
column += len_char(*temp, abs_column);
|
||||
abs_column += out_char(text_win, *temp, abs_column);
|
||||
@ -1037,8 +1065,8 @@ int disp;
|
||||
{
|
||||
int temp_pos;
|
||||
int temp_pos2;
|
||||
char *temp;
|
||||
char *extra;
|
||||
unsigned char *temp;
|
||||
unsigned char *extra;
|
||||
struct text *temp_nod;
|
||||
|
||||
text_changes = TRUE;
|
||||
@ -1117,8 +1145,8 @@ struct files *name_alloc() /* allocate space for file name list node */
|
||||
return((struct files *) malloc(sizeof( struct files)));
|
||||
}
|
||||
|
||||
char *next_word(string) /* move to next word in string */
|
||||
char *string;
|
||||
unsigned char *next_word(string) /* move to next word in string */
|
||||
unsigned char *string;
|
||||
{
|
||||
while ((*string != (char) NULL) && ((*string != 32) && (*string != 9)))
|
||||
string++;
|
||||
@ -1370,6 +1398,11 @@ int disp;
|
||||
{
|
||||
if (point != curr_line->line) /* if not at begin of line */
|
||||
{
|
||||
if ((ee_chinese) && (position >= 2) && (*(point - 2) > 127))
|
||||
{
|
||||
point--;
|
||||
position--;
|
||||
}
|
||||
point--;
|
||||
position--;
|
||||
scanline(point);
|
||||
@ -1399,6 +1432,12 @@ int disp;
|
||||
{
|
||||
if (position < curr_line->line_length)
|
||||
{
|
||||
if ((ee_chinese) && (*point > 127) &&
|
||||
((curr_line->line_length - position) >= 2))
|
||||
{
|
||||
point++;
|
||||
position++;
|
||||
}
|
||||
point++;
|
||||
position++;
|
||||
scanline(point);
|
||||
@ -1435,8 +1474,15 @@ find_pos() /* move to the same column as on other line */
|
||||
{
|
||||
if (*point == 9)
|
||||
scr_horz += tabshift(scr_horz);
|
||||
else if ((*point >= '\0') && (*point < ' '))
|
||||
else if (*point < ' ')
|
||||
scr_horz += 2;
|
||||
else if ((ee_chinese) && (*point > 127) &&
|
||||
((curr_line->line_length - position) >= 2))
|
||||
{
|
||||
scr_horz += 2;
|
||||
point++;
|
||||
position++;
|
||||
}
|
||||
else
|
||||
scr_horz++;
|
||||
position++;
|
||||
@ -1696,10 +1742,7 @@ char *cmd_str1;
|
||||
{
|
||||
wmove(com_win, 0, 0);
|
||||
wclrtoeol(com_win);
|
||||
if (*point >= '\0')
|
||||
wprintw(com_win, char_str, *point);
|
||||
else
|
||||
wprintw(com_win, char_str, (*point + 256));
|
||||
wprintw(com_win, char_str, *point);
|
||||
}
|
||||
else if (compare(cmd_str, REDRAW, FALSE))
|
||||
redraw();
|
||||
@ -1734,6 +1777,20 @@ char *cmd_str1;
|
||||
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 == '!')
|
||||
@ -1967,7 +2024,7 @@ char *cmd_str;
|
||||
void
|
||||
midscreen(line, pnt) /* put current line in middle of screen */
|
||||
int line;
|
||||
char *pnt;
|
||||
unsigned char *pnt;
|
||||
{
|
||||
struct text *mid_line;
|
||||
int i;
|
||||
@ -2221,11 +2278,11 @@ char *file_name;
|
||||
void
|
||||
get_line(length, in_string, append) /* read string and split into lines */
|
||||
int length; /* length of string read by read */
|
||||
char *in_string; /* string read by read */
|
||||
unsigned char *in_string; /* string read by read */
|
||||
int *append; /* TRUE if must append more text to end of current line */
|
||||
{
|
||||
char *str1;
|
||||
char *str2;
|
||||
unsigned char *str1;
|
||||
unsigned char *str2;
|
||||
int num; /* offset from start of string */
|
||||
int char_count; /* length of new line (or added portion */
|
||||
int temp_counter; /* temporary counter value */
|
||||
@ -2266,7 +2323,7 @@ int *append; /* TRUE if must append more text to end of current line */
|
||||
if (tline->next_line != NULL)
|
||||
tline->next_line->prev_line = tline;
|
||||
curr_line = tline;
|
||||
curr_line->line = point = (char *) malloc(char_count);
|
||||
curr_line->line = point = (unsigned char *) malloc(char_count);
|
||||
curr_line->line_length = char_count;
|
||||
curr_line->max_length = char_count;
|
||||
}
|
||||
@ -2292,7 +2349,7 @@ void
|
||||
draw_screen() /* redraw the screen from current postion */
|
||||
{
|
||||
struct text *temp_line;
|
||||
char *line_out;
|
||||
unsigned char *line_out;
|
||||
int temp_vert;
|
||||
|
||||
temp_line = curr_line;
|
||||
@ -2628,6 +2685,12 @@ del_char() /* delete current character */
|
||||
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++;
|
||||
scanline(point);
|
||||
@ -2643,12 +2706,17 @@ del_char() /* delete current character */
|
||||
void
|
||||
undel_char() /* undelete last deleted character */
|
||||
{
|
||||
if (d_char == '\n') /* insert line if last del_char deleted eol */
|
||||
if (d_char[0] == '\n') /* insert line if last del_char deleted eol */
|
||||
insert_line(TRUE);
|
||||
else
|
||||
{
|
||||
in = d_char;
|
||||
in = d_char[0];
|
||||
insert(in);
|
||||
if (d_char[1] != (unsigned char) NULL)
|
||||
{
|
||||
in = d_char[1];
|
||||
insert(in);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2657,14 +2725,16 @@ del_word() /* delete word in front of cursor */
|
||||
{
|
||||
int tposit;
|
||||
int difference;
|
||||
char *d_word2;
|
||||
char *d_word3;
|
||||
char tmp_char;
|
||||
unsigned char *d_word2;
|
||||
unsigned char *d_word3;
|
||||
unsigned char tmp_char[3];
|
||||
|
||||
if (d_word != NULL)
|
||||
free(d_word);
|
||||
d_word = malloc(curr_line->line_length);
|
||||
tmp_char = d_char;
|
||||
tmp_char[0] = d_char[0];
|
||||
tmp_char[1] = d_char[1];
|
||||
tmp_char[2] = d_char[2];
|
||||
d_word3 = point;
|
||||
d_word2 = d_word;
|
||||
tposit = position;
|
||||
@ -2697,7 +2767,9 @@ del_word() /* delete word in front of cursor */
|
||||
curr_line->line_length -= difference;
|
||||
*d_word2 = (char) NULL;
|
||||
draw_line(scr_vert, scr_horz,point,position,curr_line->line_length);
|
||||
d_char = tmp_char;
|
||||
d_char[0] = tmp_char[0];
|
||||
d_char[1] = tmp_char[1];
|
||||
d_char[2] = tmp_char[2];
|
||||
text_changes = TRUE;
|
||||
formatted = FALSE;
|
||||
}
|
||||
@ -2707,10 +2779,10 @@ undel_word() /* undelete last deleted word */
|
||||
{
|
||||
int temp;
|
||||
int tposit;
|
||||
char *tmp_old_ptr;
|
||||
char *tmp_space;
|
||||
char *tmp_ptr;
|
||||
char *d_word_ptr;
|
||||
unsigned char *tmp_old_ptr;
|
||||
unsigned char *tmp_space;
|
||||
unsigned char *tmp_ptr;
|
||||
unsigned char *d_word_ptr;
|
||||
|
||||
/*
|
||||
| resize line to handle undeleted word
|
||||
@ -2767,8 +2839,8 @@ undel_word() /* undelete last deleted word */
|
||||
void
|
||||
del_line() /* delete from cursor to end of line */
|
||||
{
|
||||
char *dl1;
|
||||
char *dl2;
|
||||
unsigned char *dl1;
|
||||
unsigned char *dl2;
|
||||
int tposit;
|
||||
|
||||
if (d_line != NULL)
|
||||
@ -2800,10 +2872,13 @@ del_line() /* delete from cursor to end of line */
|
||||
void
|
||||
undel_line() /* undelete last deleted line */
|
||||
{
|
||||
char *ud1;
|
||||
char *ud2;
|
||||
unsigned char *ud1;
|
||||
unsigned char *ud2;
|
||||
int tposit;
|
||||
|
||||
if (dlt_line->line_length == 0)
|
||||
return;
|
||||
|
||||
insert_line(TRUE);
|
||||
left(TRUE);
|
||||
point = resiz_line(dlt_line->line_length, curr_line, position);
|
||||
@ -3190,6 +3265,12 @@ set_up_term() /* set up the terminal for operating with ae */
|
||||
last_col = COLS - 1;
|
||||
local_LINES = LINES;
|
||||
local_COLS = COLS;
|
||||
|
||||
#ifdef NCURSE
|
||||
if (ee_chinese)
|
||||
nc_setattrib(A_NC_BIG5);
|
||||
#endif /* NCURSE */
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
@ -3243,7 +3324,7 @@ struct menu_entries menu_list[];
|
||||
max_width = length;
|
||||
}
|
||||
max_width += 3;
|
||||
max_width = max(max_width, strlen(cancel_string));
|
||||
max_width = max(max_width, strlen(menu_cancel_msg));
|
||||
max_width = max(max_width, max(strlen(more_above_str), strlen(more_below_str)));
|
||||
max_width += 6;
|
||||
|
||||
@ -3464,7 +3545,7 @@ int off_start, vert_size;
|
||||
waddstr(menu_win, menu_list[0].item_string);
|
||||
wmove(menu_win, (max_height - 3), 3);
|
||||
if (menu_list[0].argument != MENU_WARN)
|
||||
waddstr(menu_win, cancel_string);
|
||||
waddstr(menu_win, menu_cancel_msg);
|
||||
}
|
||||
if (!nohighlight)
|
||||
wstandout(menu_win);
|
||||
@ -3741,7 +3822,7 @@ int
|
||||
Blank_Line(test_line) /* test if line has any non-space characters */
|
||||
struct text *test_line;
|
||||
{
|
||||
char *line;
|
||||
unsigned char *line;
|
||||
int length;
|
||||
|
||||
if (test_line == NULL)
|
||||
@ -3779,11 +3860,15 @@ Format() /* format the paragraph according to set margins */
|
||||
int status;
|
||||
int tmp_af;
|
||||
int counter;
|
||||
char *line;
|
||||
char *tmp_srchstr;
|
||||
char *temp1, *temp2;
|
||||
char *temp_dword;
|
||||
char temp_d_char = d_char;
|
||||
unsigned char *line;
|
||||
unsigned char *tmp_srchstr;
|
||||
unsigned char *temp1, *temp2;
|
||||
unsigned char *temp_dword;
|
||||
unsigned char temp_d_char[3];
|
||||
|
||||
temp_d_char[0] = d_char[0];
|
||||
temp_d_char[1] = d_char[1];
|
||||
temp_d_char[2] = d_char[2];
|
||||
|
||||
/*
|
||||
| if observ_margins is not set, or the current line is blank,
|
||||
@ -3817,7 +3902,7 @@ Format() /* format the paragraph according to set margins */
|
||||
temp_case = case_sen;
|
||||
case_sen = TRUE;
|
||||
tmp_srchstr = srch_str;
|
||||
temp2 = srch_str = (char *) malloc(1 + curr_line->line_length - position);
|
||||
temp2 = srch_str = (unsigned char *) malloc(1 + curr_line->line_length - position);
|
||||
if ((*point == ' ') || (*point == '\t'))
|
||||
adv_word();
|
||||
offset -= position;
|
||||
@ -3978,7 +4063,9 @@ Format() /* format the paragraph according to set margins */
|
||||
case_sen = temp_case;
|
||||
free(srch_str);
|
||||
srch_str = tmp_srchstr;
|
||||
d_char = temp_d_char;
|
||||
d_char[0] = temp_d_char[0];
|
||||
d_char[1] = temp_d_char[1];
|
||||
d_char[2] = temp_d_char[2];
|
||||
auto_format = tmp_af;
|
||||
|
||||
midscreen(scr_vert, point);
|
||||
@ -3986,7 +4073,7 @@ Format() /* format the paragraph according to set margins */
|
||||
wrefresh(com_win);
|
||||
}
|
||||
|
||||
char *init_name[3] = {
|
||||
unsigned char *init_name[3] = {
|
||||
"/usr/share/misc/init.ee",
|
||||
NULL,
|
||||
".init.ee"
|
||||
@ -3996,9 +4083,9 @@ void
|
||||
ee_init() /* check for init file and read it if it exists */
|
||||
{
|
||||
FILE *init_file;
|
||||
char *string;
|
||||
char *str1;
|
||||
char *str2;
|
||||
unsigned char *string;
|
||||
unsigned char *str1;
|
||||
unsigned char *str2;
|
||||
char *home;
|
||||
int counter;
|
||||
int temp_int;
|
||||
@ -4079,17 +4166,37 @@ ee_init() /* check for init file and read it if it exists */
|
||||
else if (compare(str1, EIGHTBIT, FALSE))
|
||||
eightbit = TRUE;
|
||||
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);
|
||||
}
|
||||
}
|
||||
free(string);
|
||||
free(home);
|
||||
|
||||
string = getenv("LANG");
|
||||
if (string != NULL)
|
||||
{
|
||||
if (strcmp(string, "zh_TW.big5") == 0)
|
||||
{
|
||||
ee_chinese = TRUE;
|
||||
eightbit = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -4183,6 +4290,7 @@ dump_ee_conf()
|
||||
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);
|
||||
|
||||
@ -4297,7 +4405,7 @@ first_word_len(test_line)
|
||||
struct text *test_line;
|
||||
{
|
||||
int counter;
|
||||
char *pnt;
|
||||
unsigned char *pnt;
|
||||
|
||||
if (test_line == NULL)
|
||||
return(0);
|
||||
@ -4342,12 +4450,17 @@ Auto_Format() /* format the paragraph according to set margins */
|
||||
int status;
|
||||
int counter;
|
||||
char not_blank;
|
||||
char *line;
|
||||
char *tmp_srchstr;
|
||||
char *temp1, *temp2;
|
||||
char *temp_dword;
|
||||
char temp_d_char = d_char;
|
||||
char *tmp_d_line;
|
||||
unsigned char *line;
|
||||
unsigned char *tmp_srchstr;
|
||||
unsigned char *temp1, *temp2;
|
||||
unsigned char *temp_dword;
|
||||
unsigned char temp_d_char[3];
|
||||
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];
|
||||
|
||||
/*
|
||||
| if observ_margins is not set, or the current line is blank,
|
||||
@ -4376,7 +4489,7 @@ Auto_Format() /* format the paragraph according to set margins */
|
||||
temp_case = case_sen;
|
||||
case_sen = TRUE;
|
||||
tmp_srchstr = srch_str;
|
||||
temp2 = srch_str = (char *) malloc(1 + curr_line->line_length - position);
|
||||
temp2 = srch_str = (unsigned char *) malloc(1 + curr_line->line_length - position);
|
||||
if ((*point == ' ') || (*point == '\t'))
|
||||
adv_word();
|
||||
offset -= position;
|
||||
@ -4573,7 +4686,9 @@ Auto_Format() /* format the paragraph according to set margins */
|
||||
case_sen = temp_case;
|
||||
free(srch_str);
|
||||
srch_str = tmp_srchstr;
|
||||
d_char = temp_d_char;
|
||||
d_char[0] = temp_d_char[0];
|
||||
d_char[1] = temp_d_char[1];
|
||||
d_char[2] = temp_d_char[2];
|
||||
auto_format = TRUE;
|
||||
dlt_line->line_length = tmp_d_line_length;
|
||||
d_line = tmp_d_line;
|
||||
@ -4607,6 +4722,8 @@ modes_op()
|
||||
(emacs_keys_mode ? ON : OFF));
|
||||
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);
|
||||
|
||||
@ -4628,6 +4745,15 @@ modes_op()
|
||||
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;
|
||||
@ -4652,6 +4778,18 @@ modes_op()
|
||||
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;
|
||||
}
|
||||
@ -4958,8 +5096,8 @@ strings_init()
|
||||
help_text[17] = catgetlocal( 52, "line : display line # 0-9 : go to line \"#\" ");
|
||||
help_text[18] = catgetlocal( 53, "expand : expand tabs noexpand: do not expand tabs ");
|
||||
help_text[19] = catgetlocal( 54, " ");
|
||||
help_text[20] = catgetlocal( 55, " ee [-i] [-e] [-h] [file(s)] ");
|
||||
help_text[21] = catgetlocal( 56, " -i : no information window -e : do not expand tabs -h : no highlight ");
|
||||
help_text[20] = catgetlocal( 55, " ee [+#] [-i] [-e] [-h] [file(s)] ");
|
||||
help_text[21] = catgetlocal( 56, "+# :go to line # -i :no info window -e : don't expand tabs -h :no highlight");
|
||||
control_keys[0] = catgetlocal( 57, "^[ (escape) menu ^e search prompt ^y delete line ^u up ^p prev page ");
|
||||
control_keys[1] = catgetlocal( 58, "^a ascii code ^x search ^z undelete line ^d down ^n next page ");
|
||||
control_keys[2] = catgetlocal( 59, "^b bottom of text ^g begin of line ^w delete word ^l left ");
|
||||
@ -5084,16 +5222,18 @@ strings_init()
|
||||
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[9].item_string = catgetlocal( 164, "save editor configuration");
|
||||
modes_menu[10].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");
|
||||
conf_not_saved_msg = catgetlocal( 168, "ee configuration not saved");
|
||||
ree_no_file_msg = catgetlocal( 169, "must specify a file when invoking ree");
|
||||
cancel_string = catgetlocal( 170, "press Esc to cancel");
|
||||
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;
|
||||
@ -5124,7 +5264,9 @@ strings_init()
|
||||
commands[26] = "8";
|
||||
commands[27] = "9";
|
||||
commands[28] = CHARACTER;
|
||||
commands[29] = NULL;
|
||||
commands[29] = chinese_cmd;
|
||||
commands[30] = nochinese_cmd;
|
||||
commands[31] = NULL;
|
||||
init_strings[0] = CASE;
|
||||
init_strings[1] = NOCASE;
|
||||
init_strings[2] = EXPAND;
|
||||
@ -5144,7 +5286,9 @@ strings_init()
|
||||
init_strings[16] = NOEIGHTBIT;
|
||||
init_strings[17] = EMACS_string;
|
||||
init_strings[18] = NOEMACS_string;
|
||||
init_strings[19] = NULL;
|
||||
init_strings[19] = chinese_cmd;
|
||||
init_strings[20] = nochinese_cmd;
|
||||
init_strings[21] = NULL;
|
||||
|
||||
/*
|
||||
| allocate space for strings here for settings menu
|
||||
|
@ -95,6 +95,7 @@ WINDOW *last_window_refreshed;
|
||||
#endif
|
||||
|
||||
#define min(a, b) (a < b ? a : b)
|
||||
#define highbitset(a) ((a) & 0x80)
|
||||
|
||||
#ifndef CAP
|
||||
#define String_Out(table, stack, place) Info_Out(table, stack, place)
|
||||
@ -514,6 +515,106 @@ struct KEY_STACK {
|
||||
struct KEY_STACK *KEY_TOS = NULL;
|
||||
struct KEY_STACK *KEY_POINT;
|
||||
|
||||
/*
|
||||
|
|
||||
| Not all systems have good terminal information, so we will define
|
||||
| keyboard information here for the most widely used terminal type,
|
||||
| the VT100.
|
||||
|
|
||||
*/
|
||||
|
||||
struct KEYS vt100[] =
|
||||
{
|
||||
{ 3, "\033[A", 0403 }, /* key up */
|
||||
{ 3, "\033[C", 0405 }, /* key right */
|
||||
{ 3, "\033[D", 0404 }, /* key left */
|
||||
|
||||
{ 4, "\033[6~", 0522 }, /* key next page */
|
||||
{ 4, "\033[5~", 0523 }, /* key prev page */
|
||||
{ 3, "\033[[", 0550 }, /* key end */
|
||||
{ 3, "\033[@", 0406 }, /* key home */
|
||||
{ 4, "\033[2~", 0513 }, /* key insert char */
|
||||
|
||||
{ 3, "\033[y", 0410 }, /* key F0 */
|
||||
{ 3, "\033[P", 0411 }, /* key F1 */
|
||||
{ 3, "\033[Q", 0412 }, /* key F2 */
|
||||
{ 3, "\033[R", 0413 }, /* key F3 */
|
||||
{ 3, "\033[S", 0414 }, /* key F4 */
|
||||
{ 3, "\033[t", 0415 }, /* key F5 */
|
||||
{ 3, "\033[u", 0416 }, /* key F6 */
|
||||
{ 3, "\033[v", 0417 }, /* key F7 */
|
||||
{ 3, "\033[l", 0420 }, /* key F8 */
|
||||
{ 3, "\033[w", 0421 }, /* key F9 */
|
||||
{ 3, "\033[x", 0422 }, /* key F10 */
|
||||
|
||||
{ 5, "\033[10~", 0410 }, /* key F0 */
|
||||
{ 5, "\033[11~", 0411 }, /* key F1 */
|
||||
{ 5, "\033[12~", 0412 }, /* key F2 */
|
||||
{ 5, "\033[13~", 0413 }, /* key F3 */
|
||||
{ 5, "\033[14~", 0414 }, /* key F4 */
|
||||
{ 5, "\033[15~", 0415 }, /* key F5 */
|
||||
{ 5, "\033[17~", 0416 }, /* key F6 */
|
||||
{ 5, "\033[18~", 0417 }, /* key F7 */
|
||||
{ 5, "\033[19~", 0420 }, /* key F8 */
|
||||
{ 5, "\033[20~", 0421 }, /* key F9 */
|
||||
{ 5, "\033[21~", 0422 }, /* key F10 */
|
||||
{ 5, "\033[23~", 0423 }, /* key F11 */
|
||||
{ 5, "\033[24~", 0424 }, /* key F12 */
|
||||
{ 3, "\033[q", 0534 }, /* ka1 upper-left of keypad */
|
||||
{ 3, "\033[s", 0535 }, /* ka3 upper-right of keypad */
|
||||
{ 3, "\033[r", 0536 }, /* kb2 center of keypad */
|
||||
{ 3, "\033[p", 0537 }, /* kc1 lower-left of keypad */
|
||||
{ 3, "\033[n", 0540 }, /* kc3 lower-right of keypad */
|
||||
|
||||
/*
|
||||
| The following are the same keys as above, but with
|
||||
| a different character following the escape char.
|
||||
*/
|
||||
|
||||
{ 3, "\033OA", 0403 }, /* key up */
|
||||
{ 3, "\033OC", 0405 }, /* key right */
|
||||
{ 3, "\033OD", 0404 }, /* key left */
|
||||
{ 3, "\033OB", 0402 }, /* key down */
|
||||
{ 4, "\033O6~", 0522 }, /* key next page */
|
||||
{ 4, "\033O5~", 0523 }, /* key prev page */
|
||||
{ 3, "\033O[", 0550 }, /* key end */
|
||||
{ 3, "\033O@", 0406 }, /* key home */
|
||||
{ 4, "\033O2~", 0513 }, /* key insert char */
|
||||
|
||||
{ 3, "\033Oy", 0410 }, /* key F0 */
|
||||
{ 3, "\033OP", 0411 }, /* key F1 */
|
||||
{ 3, "\033OQ", 0412 }, /* key F2 */
|
||||
{ 3, "\033OR", 0413 }, /* key F3 */
|
||||
{ 3, "\033OS", 0414 }, /* key F4 */
|
||||
{ 3, "\033Ot", 0415 }, /* key F5 */
|
||||
{ 3, "\033Ou", 0416 }, /* key F6 */
|
||||
{ 3, "\033Ov", 0417 }, /* key F7 */
|
||||
{ 3, "\033Ol", 0420 }, /* key F8 */
|
||||
{ 3, "\033Ow", 0421 }, /* key F9 */
|
||||
{ 3, "\033Ox", 0422 }, /* key F10 */
|
||||
|
||||
{ 5, "\033O10~", 0410 }, /* key F0 */
|
||||
{ 5, "\033O11~", 0411 }, /* key F1 */
|
||||
{ 5, "\033O12~", 0412 }, /* key F2 */
|
||||
{ 5, "\033O13~", 0413 }, /* key F3 */
|
||||
{ 5, "\033O14~", 0414 }, /* key F4 */
|
||||
{ 5, "\033O15~", 0415 }, /* key F5 */
|
||||
{ 5, "\033O17~", 0416 }, /* key F6 */
|
||||
{ 5, "\033O18~", 0417 }, /* key F7 */
|
||||
{ 5, "\033O19~", 0420 }, /* key F8 */
|
||||
{ 5, "\033O20~", 0421 }, /* key F9 */
|
||||
{ 5, "\033O21~", 0422 }, /* key F10 */
|
||||
{ 5, "\033O23~", 0423 }, /* key F11 */
|
||||
{ 5, "\033O24~", 0424 }, /* key F12 */
|
||||
{ 3, "\033Oq", 0534 }, /* ka1 upper-left of keypad */
|
||||
{ 3, "\033Os", 0535 }, /* ka3 upper-right of keypad */
|
||||
{ 3, "\033Or", 0536 }, /* kb2 center of keypad */
|
||||
{ 3, "\033Op", 0537 }, /* kc1 lower-left of keypad */
|
||||
{ 3, "\033On", 0540 }, /* kc3 lower-right of keypad */
|
||||
|
||||
{ 0, "", 0 } /* end */
|
||||
};
|
||||
|
||||
struct Parameters {
|
||||
int value;
|
||||
struct Parameters *next;
|
||||
@ -537,6 +638,8 @@ int Key_vals[] = {
|
||||
|
||||
int attributes_set[9];
|
||||
|
||||
static int nc_attributes = 0; /* global attributes for new_curse to observe */
|
||||
|
||||
#ifdef SYS5
|
||||
struct termio Terminal;
|
||||
struct termio Saved_tty;
|
||||
@ -814,6 +917,14 @@ printf("starting initscr \n");fflush(stdout);
|
||||
Fildes = open(Term_File_name, O_RDONLY);
|
||||
}
|
||||
if (Fildes == -1)
|
||||
{
|
||||
TERM_PATH = "/usr/share/terminfo";
|
||||
Data_Line_len = 23 + strlen(TERM_PATH) + strlen(TERMINAL_TYPE);
|
||||
Term_File_name = malloc(Data_Line_len);
|
||||
sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE);
|
||||
Fildes = open(Term_File_name, O_RDONLY);
|
||||
}
|
||||
if (Fildes == -1)
|
||||
{
|
||||
free(Term_File_name);
|
||||
Term_File_name = NULL;
|
||||
@ -865,6 +976,7 @@ printf("starting initscr \n");fflush(stdout);
|
||||
exit(0);
|
||||
}
|
||||
Key_Get();
|
||||
keys_vt100();
|
||||
LINES = Numbers[li__];
|
||||
COLS = Numbers[co__];
|
||||
if ((lines_string = getenv("LINES")) != NULL)
|
||||
@ -1112,6 +1224,32 @@ Key_Get() /* create linked list with all key sequences obtained from terminal d
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
| insert information about keys for a vt100 terminal
|
||||
*/
|
||||
|
||||
void
|
||||
keys_vt100()
|
||||
{
|
||||
int counter;
|
||||
int Klen;
|
||||
struct KEY_STACK *Spoint;
|
||||
|
||||
Spoint = KEY_TOS;
|
||||
while (Spoint->next != NULL)
|
||||
Spoint = Spoint->next;
|
||||
for (counter = 0; vt100[counter].length != 0; counter++)
|
||||
{
|
||||
Spoint->next = (struct KEY_STACK *) malloc(sizeof(struct KEY_STACK));
|
||||
Spoint = Spoint->next;
|
||||
Spoint->next = NULL;
|
||||
Spoint->element = &vt100[counter];
|
||||
Klen = strlen(Spoint->element->string);
|
||||
if (Klen > Max_Key_len)
|
||||
Max_Key_len = Klen;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CAP
|
||||
char *
|
||||
String_Get(param) /* read the string */
|
||||
@ -2482,6 +2620,7 @@ int flag;
|
||||
Repaint_screen = TRUE;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
echo() /* turn on echoing */
|
||||
{
|
||||
@ -2649,7 +2788,6 @@ void
|
||||
endwin() /* end windows */
|
||||
{
|
||||
keypad(stdscr, FALSE);
|
||||
free(stdscr);
|
||||
initialized = FALSE;
|
||||
delwin(curscr);
|
||||
delwin(virtual_scr);
|
||||
@ -3028,6 +3166,11 @@ struct _line *pointer_new, *pointer_old;
|
||||
return(changed);
|
||||
}
|
||||
|
||||
/*
|
||||
| Check if characters were inserted in the middle of a line, and if
|
||||
| so, insert them.
|
||||
*/
|
||||
|
||||
int
|
||||
check_insert(window, line, offset, pointer_new, pointer_old)
|
||||
WINDOW *window;
|
||||
@ -3123,8 +3266,13 @@ doupdate()
|
||||
char *att1, *att2;
|
||||
char *c1, *c2;
|
||||
|
||||
char NC_chinese = FALSE; /* flag to indicate handling Chinese */
|
||||
|
||||
window = virtual_scr;
|
||||
|
||||
if ((nc_attributes & A_NC_BIG5) != 0)
|
||||
NC_chinese = TRUE;
|
||||
|
||||
if (Repaint_screen)
|
||||
{
|
||||
if (String_table[cl__])
|
||||
@ -3184,7 +3332,7 @@ doupdate()
|
||||
curr = top_of_win;
|
||||
similar = 0;
|
||||
/*
|
||||
| if the window has lines that are different
|
||||
| if the window has lines that are different, check for scrolling
|
||||
*/
|
||||
if (diff)
|
||||
{
|
||||
@ -3243,10 +3391,10 @@ doupdate()
|
||||
if (String_table[cs__]) /* scrolling region */
|
||||
{
|
||||
list[1] = 0;
|
||||
list[0] = LINES;
|
||||
list[0] = LINES - 1;
|
||||
String_Out(String_table[cs__], list, 2);
|
||||
Curr_y = Curr_x = -1;
|
||||
}
|
||||
}
|
||||
|
||||
top_of_win = curscr->first_line;
|
||||
curr = top_of_win;
|
||||
@ -3292,7 +3440,7 @@ doupdate()
|
||||
if (String_table[cs__]) /* scrolling region */
|
||||
{
|
||||
list[1] = 0;
|
||||
list[0] = LINES;
|
||||
list[0] = LINES - 1;
|
||||
String_Out(String_table[cs__], list, 2);
|
||||
Curr_y = Curr_x = -1;
|
||||
}
|
||||
@ -3320,12 +3468,28 @@ doupdate()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
| Scrolling done, now need to insert, delete, or modify text
|
||||
| within lines.
|
||||
*/
|
||||
|
||||
for (from_top = 0, curr = curscr->first_line; from_top < window->SR; from_top++)
|
||||
curr = curr->next_screen;
|
||||
top_of_win = curr;
|
||||
for (from_top = 0, curr = top_of_win, virt = window->first_line; from_top < window->Num_lines; from_top++, curr = curr->next_screen, virt = virt->next_screen)
|
||||
{
|
||||
if (((String_table[ic__]) || (String_table[im__])) && (String_table[dc__]) && (curr->row[0] != (char) NULL))
|
||||
|
||||
/*
|
||||
| If either 'insert mode' or 'insert char' are
|
||||
| available, enter the following 'if' statement,
|
||||
| else, need to simply rewrite the contents of the line
|
||||
| at the point where the contents of the line change.
|
||||
*/
|
||||
|
||||
if (((String_table[ic__]) || (String_table[im__])) &&
|
||||
(String_table[dc__]) && (curr->row[0] != (char) NULL) &&
|
||||
(!NC_chinese))
|
||||
{
|
||||
j = 0;
|
||||
first_time = TRUE;
|
||||
@ -3412,6 +3576,14 @@ doupdate()
|
||||
{
|
||||
while ((c1[j] == c2[j]) && (att1[j] == att2[j]) && (j < window->Num_cols) && (c2[j] != (char) NULL))
|
||||
j++;
|
||||
|
||||
/*
|
||||
| if previous character is an eight bit
|
||||
| char, start redraw from that character
|
||||
*/
|
||||
|
||||
if ((NC_chinese) && (highbitset(c1[j - 1])))
|
||||
j--;
|
||||
begin_old = j;
|
||||
begin_new = j;
|
||||
if ((j < window->Num_cols) && (c2[j] != (char) NULL))
|
||||
@ -3572,3 +3744,25 @@ int offset;
|
||||
Curr_x++;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
||||
| The two routines that follow, nc_setattrib(), nc_clearattrib(), are
|
||||
| hacks that notify new_curse to handle characters that have the high
|
||||
| bit set as the first of two bytes of a multi-byte string.
|
||||
|
|
||||
*/
|
||||
|
||||
void
|
||||
nc_setattrib(flag)
|
||||
int flag;
|
||||
{
|
||||
nc_attributes |= flag;
|
||||
}
|
||||
|
||||
void
|
||||
nc_clearattrib(flag)
|
||||
int flag;
|
||||
{
|
||||
nc_attributes &= ~flag;
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,8 @@
|
||||
| Copyright (c) 1986, 1987, 1988, 1991, 1995 Hugh Mahon
|
||||
| All are rights reserved.
|
||||
|
|
||||
| $FreeBSD$
|
||||
|
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@ -142,7 +144,8 @@
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
#define A_STANDOUT 0001 /* standout mode */
|
||||
#define A_STANDOUT 0001 /* standout mode */
|
||||
#define A_NC_BIG5 0x0100 /* Handle Chinese Big5 characters */
|
||||
#define SCROLL 1 /* text has been scrolled */
|
||||
#define CLEAR 2 /* window has been cleared */
|
||||
#define CHANGE 3 /* window has been changed */
|
||||
@ -195,6 +198,7 @@ extern int Get_int P_((void));
|
||||
extern int INFO_PARSE P_((void));
|
||||
extern int AtoI P_((void));
|
||||
extern void Key_Get P_((void));
|
||||
extern void keys_vt100 P_((void));
|
||||
extern struct _line *Screenalloc P_((int columns));
|
||||
extern WINDOW *newwin P_((int lines, int cols, int start_l, int start_c));
|
||||
extern int Operation P_((int Temp_Stack[], int place));
|
||||
@ -251,5 +255,7 @@ extern void attribute_on P_((void));
|
||||
extern void attribute_off P_((void));
|
||||
extern void Char_out P_((int newc, int newatt, char *line, char *attrib, int offset));
|
||||
|
||||
extern void nc_setattrib P_((int));
|
||||
extern void nc_clearattrib P_((int));
|
||||
#undef P_
|
||||
|
||||
|
@ -5,15 +5,16 @@ $ For ee patchlevel 3
|
||||
$
|
||||
$ $FreeBSD$
|
||||
$
|
||||
$
|
||||
$set 1
|
||||
$quote "
|
||||
1 "modes menu"
|
||||
2 "tabs to spaces "
|
||||
3 "case sensitive search"
|
||||
4 "margins observed "
|
||||
5 "auto-paragraph format"
|
||||
6 "eightbit characters "
|
||||
7 "info window "
|
||||
2 "tabs to spaces "
|
||||
3 "case sensitive search"
|
||||
4 "margins observed "
|
||||
5 "auto-paragraph format"
|
||||
6 "eightbit characters "
|
||||
7 "info window "
|
||||
8 "right margin "
|
||||
9 "leave menu"
|
||||
10 "save changes"
|
||||
@ -41,7 +42,7 @@ $quote "
|
||||
32 "settings"
|
||||
33 "search"
|
||||
34 "miscellaneous"
|
||||
35 "Control keys: "
|
||||
35 "Control keys: "
|
||||
36 "^a ascii code ^i tab ^r right "
|
||||
37 "^b bottom of text ^j newline ^t top of text "
|
||||
38 "^c command ^k delete char ^u up "
|
||||
@ -61,8 +62,8 @@ $quote "
|
||||
52 "line : display line # 0-9 : go to line \"#\" "
|
||||
53 "expand : expand tabs noexpand: do not expand tabs "
|
||||
54 " "
|
||||
55 " ee [-i] [-e] [-h] [file(s)] "
|
||||
56 " -i : no information window -e : do not expand tabs -h : no highlight "
|
||||
55 " ee [+#] [-i] [-e] [-h] [file(s)] "
|
||||
56 "+# :go to line # -i :no info window -e : don't expand tabs -h :no highlight"
|
||||
57 "^[ (escape) menu ^e search prompt ^y delete line ^u up ^p prev page "
|
||||
58 "^a ascii code ^x search ^z undelete line ^d down ^n next page "
|
||||
59 "^b bottom of text ^g begin of line ^w delete word ^l left "
|
||||
@ -176,7 +177,9 @@ $quote "
|
||||
167 "save in home directory"
|
||||
168 "ee configuration not saved"
|
||||
169 "must specify a file when invoking ree"
|
||||
170 "press Esc to cancel"
|
||||
180 "menu too large for window"
|
||||
181 "^^more^^"
|
||||
182 "VVmoreVV"
|
||||
183 "16 bit characters "
|
||||
184 "16BIT"
|
||||
185 "NO16BIT"
|
||||
|
@ -5,15 +5,16 @@ $ For ee patchlevel 3
|
||||
$
|
||||
$ $FreeBSD$
|
||||
$
|
||||
$
|
||||
$set 1
|
||||
$quote "
|
||||
1 "modes menu"
|
||||
2 "tabs to spaces "
|
||||
3 "case sensitive search"
|
||||
4 "margins observed "
|
||||
5 "auto-paragraph format"
|
||||
6 "eightbit characters "
|
||||
7 "info window "
|
||||
2 "tabs to spaces "
|
||||
3 "case sensitive search"
|
||||
4 "margins observed "
|
||||
5 "auto-paragraph format"
|
||||
6 "eightbit characters "
|
||||
7 "info window "
|
||||
8 "right margin "
|
||||
9 "leave menu"
|
||||
10 "save changes"
|
||||
@ -41,7 +42,7 @@ $quote "
|
||||
32 "settings"
|
||||
33 "search"
|
||||
34 "miscellaneous"
|
||||
35 "Control keys: "
|
||||
35 "Control keys: "
|
||||
36 "^a ascii code ^i tab ^r right "
|
||||
37 "^b bottom of text ^j newline ^t top of text "
|
||||
38 "^c command ^k delete char ^u up "
|
||||
@ -61,8 +62,8 @@ $quote "
|
||||
52 "line : display line # 0-9 : go to line \"#\" "
|
||||
53 "expand : expand tabs noexpand: do not expand tabs "
|
||||
54 " "
|
||||
55 " ee [-i] [-e] [-h] [file(s)] "
|
||||
56 " -i : no information window -e : do not expand tabs -h : no highlight "
|
||||
55 " ee [+#] [-i] [-e] [-h] [file(s)] "
|
||||
56 "+# :go to line # -i :no info window -e : don't expand tabs -h :no highlight"
|
||||
57 "^[ (escape) menu ^e search prompt ^y delete line ^u up ^p prev page "
|
||||
58 "^a ascii code ^x search ^z undelete line ^d down ^n next page "
|
||||
59 "^b bottom of text ^g begin of line ^w delete word ^l left "
|
||||
@ -176,7 +177,9 @@ $quote "
|
||||
167 "save in home directory"
|
||||
168 "ee configuration not saved"
|
||||
169 "must specify a file when invoking ree"
|
||||
170 "press Esc to cancel"
|
||||
180 "menu too large for window"
|
||||
181 "^^more^^"
|
||||
182 "VVmoreVV"
|
||||
183 "16 bit characters "
|
||||
184 "16BIT"
|
||||
185 "NO16BIT"
|
||||
|
Loading…
Reference in New Issue
Block a user